@xmem-ai/memcode 4.0.2

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 (2066) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +96 -0
  3. package/bin/memcode.js +145 -0
  4. package/dist/QueryEngine.js +905 -0
  5. package/dist/Task.js +46 -0
  6. package/dist/Tool.js +42 -0
  7. package/dist/assistant/gate.js +6 -0
  8. package/dist/assistant/index.js +21 -0
  9. package/dist/assistant/sessionDiscovery.js +6 -0
  10. package/dist/assistant/sessionHistory.js +45 -0
  11. package/dist/bootstrap/state.js +1252 -0
  12. package/dist/bridge/bridgeApi.js +368 -0
  13. package/dist/bridge/bridgeConfig.js +47 -0
  14. package/dist/bridge/bridgeDebug.js +73 -0
  15. package/dist/bridge/bridgeEnabled.js +99 -0
  16. package/dist/bridge/bridgeMain.js +2018 -0
  17. package/dist/bridge/bridgeMessaging.js +272 -0
  18. package/dist/bridge/bridgePermissionCallbacks.js +7 -0
  19. package/dist/bridge/bridgePointer.js +120 -0
  20. package/dist/bridge/bridgeStatusUtil.js +95 -0
  21. package/dist/bridge/bridgeUI.js +388 -0
  22. package/dist/bridge/capacityWake.js +30 -0
  23. package/dist/bridge/codeSessionApi.js +107 -0
  24. package/dist/bridge/createSession.js +266 -0
  25. package/dist/bridge/debugUtils.js +91 -0
  26. package/dist/bridge/envLessBridgeConfig.js +85 -0
  27. package/dist/bridge/flushGate.js +52 -0
  28. package/dist/bridge/inboundAttachments.js +109 -0
  29. package/dist/bridge/inboundMessages.js +36 -0
  30. package/dist/bridge/initReplBridge.js +322 -0
  31. package/dist/bridge/jwtUtils.js +163 -0
  32. package/dist/bridge/pollConfig.js +58 -0
  33. package/dist/bridge/pollConfigDefaults.js +33 -0
  34. package/dist/bridge/remoteBridgeCore.js +645 -0
  35. package/dist/bridge/remotePairing.js +49 -0
  36. package/dist/bridge/replBridge.js +1336 -0
  37. package/dist/bridge/replBridgeHandle.js +20 -0
  38. package/dist/bridge/replBridgeTransport.js +179 -0
  39. package/dist/bridge/sessionIdCompat.js +18 -0
  40. package/dist/bridge/sessionRunner.js +398 -0
  41. package/dist/bridge/trustedDevice.js +144 -0
  42. package/dist/bridge/types.js +10 -0
  43. package/dist/bridge/webhookSanitizer.js +6 -0
  44. package/dist/bridge/workSecret.js +67 -0
  45. package/dist/buddy/CompanionSprite.js +341 -0
  46. package/dist/buddy/companion.js +106 -0
  47. package/dist/buddy/observer.js +52 -0
  48. package/dist/buddy/prompt.js +29 -0
  49. package/dist/buddy/sprites.js +506 -0
  50. package/dist/buddy/types.js +131 -0
  51. package/dist/buddy/useBuddyNotification.js +87 -0
  52. package/dist/bun-bundle-shim.js +10 -0
  53. package/dist/cli/exit.js +14 -0
  54. package/dist/cli/handlers/agents.js +56 -0
  55. package/dist/cli/handlers/auth.js +263 -0
  56. package/dist/cli/handlers/autoMode.js +106 -0
  57. package/dist/cli/handlers/mcp.js +301 -0
  58. package/dist/cli/handlers/plugins.js +599 -0
  59. package/dist/cli/handlers/util.js +121 -0
  60. package/dist/cli/ndjsonSafeStringify.js +14 -0
  61. package/dist/cli/print.js +3810 -0
  62. package/dist/cli/remoteIO.js +184 -0
  63. package/dist/cli/structuredIO.js +613 -0
  64. package/dist/cli/transports/HybridTransport.js +193 -0
  65. package/dist/cli/transports/SSETransport.js +491 -0
  66. package/dist/cli/transports/SerialBatchEventUploader.js +191 -0
  67. package/dist/cli/transports/WebSocketTransport.js +584 -0
  68. package/dist/cli/transports/WorkerStateUploader.js +75 -0
  69. package/dist/cli/transports/ccrClient.js +711 -0
  70. package/dist/cli/transports/transportUtils.js +28 -0
  71. package/dist/cli/update.js +325 -0
  72. package/dist/commands/add-dir/add-dir.js +121 -0
  73. package/dist/commands/add-dir/index.js +11 -0
  74. package/dist/commands/add-dir/validation.js +71 -0
  75. package/dist/commands/advisor.js +98 -0
  76. package/dist/commands/agents/agents.js +12 -0
  77. package/dist/commands/agents/index.js +10 -0
  78. package/dist/commands/ant-trace/index.js +1 -0
  79. package/dist/commands/apikey/apikey.js +139 -0
  80. package/dist/commands/apikey/index.js +33 -0
  81. package/dist/commands/assistant-room/assistantRoom.js +15 -0
  82. package/dist/commands/assistant-room/index.js +12 -0
  83. package/dist/commands/autofix-pr/index.js +1 -0
  84. package/dist/commands/backfill-sessions/index.js +1 -0
  85. package/dist/commands/background/background.js +17 -0
  86. package/dist/commands/background/index.js +12 -0
  87. package/dist/commands/branch/branch.js +183 -0
  88. package/dist/commands/branch/index.js +14 -0
  89. package/dist/commands/break-cache/index.js +1 -0
  90. package/dist/commands/bridge/bridge.js +487 -0
  91. package/dist/commands/bridge/index.js +27 -0
  92. package/dist/commands/bridge/preflight.js +30 -0
  93. package/dist/commands/bridge-kick.js +148 -0
  94. package/dist/commands/brief.js +79 -0
  95. package/dist/commands/btw/btw.js +235 -0
  96. package/dist/commands/btw/index.js +12 -0
  97. package/dist/commands/buddy/buddy.js +136 -0
  98. package/dist/commands/buddy/index.js +40 -0
  99. package/dist/commands/bughunter/index.js +1 -0
  100. package/dist/commands/chrome/chrome.js +317 -0
  101. package/dist/commands/chrome/index.js +14 -0
  102. package/dist/commands/clear/caches.js +84 -0
  103. package/dist/commands/clear/clear.js +8 -0
  104. package/dist/commands/clear/conversation.js +175 -0
  105. package/dist/commands/clear/index.js +13 -0
  106. package/dist/commands/color/color.js +66 -0
  107. package/dist/commands/color/index.js +12 -0
  108. package/dist/commands/commit-push-pr.js +151 -0
  109. package/dist/commands/commit.js +90 -0
  110. package/dist/commands/compact/compact.js +204 -0
  111. package/dist/commands/compact/index.js +14 -0
  112. package/dist/commands/config/config.js +8 -0
  113. package/dist/commands/config/index.js +11 -0
  114. package/dist/commands/context/context-noninteractive.js +308 -0
  115. package/dist/commands/context/context.js +53 -0
  116. package/dist/commands/context/index.js +25 -0
  117. package/dist/commands/copy/copy.js +356 -0
  118. package/dist/commands/copy/index.js +10 -0
  119. package/dist/commands/cost/cost.js +93 -0
  120. package/dist/commands/cost/index.js +19 -0
  121. package/dist/commands/createMovedToPluginCommand.js +44 -0
  122. package/dist/commands/credits/credits.js +246 -0
  123. package/dist/commands/credits/index.js +11 -0
  124. package/dist/commands/ctx_viz/index.js +1 -0
  125. package/dist/commands/debug-tool-call/index.js +1 -0
  126. package/dist/commands/desktop/desktop.js +8 -0
  127. package/dist/commands/desktop/index.js +25 -0
  128. package/dist/commands/diff/diff.js +10 -0
  129. package/dist/commands/diff/index.js +9 -0
  130. package/dist/commands/doctor/doctor.js +8 -0
  131. package/dist/commands/doctor/index.js +12 -0
  132. package/dist/commands/effort/effort.js +250 -0
  133. package/dist/commands/effort/index.js +15 -0
  134. package/dist/commands/env/index.js +1 -0
  135. package/dist/commands/exit/exit.js +37 -0
  136. package/dist/commands/exit/index.js +12 -0
  137. package/dist/commands/export/export.js +79 -0
  138. package/dist/commands/export/index.js +11 -0
  139. package/dist/commands/extra-usage/extra-usage-core.js +91 -0
  140. package/dist/commands/extra-usage/extra-usage-noninteractive.js +14 -0
  141. package/dist/commands/extra-usage/extra-usage.js +17 -0
  142. package/dist/commands/extra-usage/index.js +37 -0
  143. package/dist/commands/fast/fast.js +290 -0
  144. package/dist/commands/fast/index.js +26 -0
  145. package/dist/commands/feedback/feedback.js +13 -0
  146. package/dist/commands/feedback/index.js +16 -0
  147. package/dist/commands/files/files.js +15 -0
  148. package/dist/commands/files/index.js +12 -0
  149. package/dist/commands/good-memcode/index.js +1 -0
  150. package/dist/commands/heapdump/heapdump.js +18 -0
  151. package/dist/commands/heapdump/index.js +12 -0
  152. package/dist/commands/help/help.js +33 -0
  153. package/dist/commands/help/index.js +11 -0
  154. package/dist/commands/hooks/hooks.js +14 -0
  155. package/dist/commands/hooks/index.js +11 -0
  156. package/dist/commands/ide/ide.js +607 -0
  157. package/dist/commands/ide/index.js +11 -0
  158. package/dist/commands/init-verifiers.js +262 -0
  159. package/dist/commands/init.js +245 -0
  160. package/dist/commands/insights.js +2262 -0
  161. package/dist/commands/install-github-app/ApiKeyStep.js +244 -0
  162. package/dist/commands/install-github-app/CheckExistingSecretStep.js +208 -0
  163. package/dist/commands/install-github-app/CheckGitHubStep.js +17 -0
  164. package/dist/commands/install-github-app/ChooseRepoStep.js +228 -0
  165. package/dist/commands/install-github-app/CreatingStep.js +68 -0
  166. package/dist/commands/install-github-app/ErrorStep.js +107 -0
  167. package/dist/commands/install-github-app/ExistingWorkflowStep.js +123 -0
  168. package/dist/commands/install-github-app/InstallAppStep.js +114 -0
  169. package/dist/commands/install-github-app/OAuthFlowStep.js +222 -0
  170. package/dist/commands/install-github-app/SuccessStep.js +117 -0
  171. package/dist/commands/install-github-app/WarningsStep.js +92 -0
  172. package/dist/commands/install-github-app/index.js +14 -0
  173. package/dist/commands/install-github-app/install-github-app.js +551 -0
  174. package/dist/commands/install-github-app/setupGitHubActions.js +246 -0
  175. package/dist/commands/install-github-app/types.js +0 -0
  176. package/dist/commands/install-slack-app/index.js +14 -0
  177. package/dist/commands/install-slack-app/install-slack-app.js +26 -0
  178. package/dist/commands/install.js +241 -0
  179. package/dist/commands/issue/index.js +1 -0
  180. package/dist/commands/keybindings/index.js +13 -0
  181. package/dist/commands/keybindings/keybindings.js +46 -0
  182. package/dist/commands/login/index.js +11 -0
  183. package/dist/commands/login/login.js +59 -0
  184. package/dist/commands/logout/index.js +11 -0
  185. package/dist/commands/logout/logout.js +71 -0
  186. package/dist/commands/mcp/addCommand.js +199 -0
  187. package/dist/commands/mcp/index.js +24 -0
  188. package/dist/commands/mcp/mcp.js +80 -0
  189. package/dist/commands/mcp/xaaIdpCommand.js +176 -0
  190. package/dist/commands/memory/index.js +10 -0
  191. package/dist/commands/memory/memory.js +75 -0
  192. package/dist/commands/mobile/index.js +12 -0
  193. package/dist/commands/mobile/localMobileServer.js +260 -0
  194. package/dist/commands/mobile/memcodeRelay.js +188 -0
  195. package/dist/commands/mobile/mobile.js +88 -0
  196. package/dist/commands/mock-limits/index.js +1 -0
  197. package/dist/commands/mode/index.js +11 -0
  198. package/dist/commands/mode/mode.js +88 -0
  199. package/dist/commands/model/index.js +14 -0
  200. package/dist/commands/model/model.js +279 -0
  201. package/dist/commands/oauth-refresh/index.js +1 -0
  202. package/dist/commands/onboarding/index.js +1 -0
  203. package/dist/commands/output-style/index.js +11 -0
  204. package/dist/commands/output-style/output-style.js +8 -0
  205. package/dist/commands/passes/index.js +28 -0
  206. package/dist/commands/passes/passes.js +24 -0
  207. package/dist/commands/perf-issue/index.js +1 -0
  208. package/dist/commands/permissions/index.js +11 -0
  209. package/dist/commands/permissions/permissions.js +11 -0
  210. package/dist/commands/plan/index.js +11 -0
  211. package/dist/commands/plan/plan.js +123 -0
  212. package/dist/commands/plugin/AddMarketplace.js +126 -0
  213. package/dist/commands/plugin/BrowseMarketplace.js +658 -0
  214. package/dist/commands/plugin/DiscoverPlugins.js +685 -0
  215. package/dist/commands/plugin/ManageMarketplaces.js +695 -0
  216. package/dist/commands/plugin/ManagePlugins.js +1728 -0
  217. package/dist/commands/plugin/PluginErrors.js +122 -0
  218. package/dist/commands/plugin/PluginOptionsDialog.js +361 -0
  219. package/dist/commands/plugin/PluginOptionsFlow.js +78 -0
  220. package/dist/commands/plugin/PluginSettings.js +1066 -0
  221. package/dist/commands/plugin/PluginTrustWarning.js +43 -0
  222. package/dist/commands/plugin/UnifiedInstalledCell.js +640 -0
  223. package/dist/commands/plugin/ValidatePlugin.js +107 -0
  224. package/dist/commands/plugin/index.js +12 -0
  225. package/dist/commands/plugin/parseArgs.js +64 -0
  226. package/dist/commands/plugin/plugin.js +8 -0
  227. package/dist/commands/plugin/pluginDetailsHelpers.js +89 -0
  228. package/dist/commands/plugin/usePagination.js +94 -0
  229. package/dist/commands/pr_comments/index.js +52 -0
  230. package/dist/commands/privacy-settings/index.js +15 -0
  231. package/dist/commands/privacy-settings/privacy-settings.js +53 -0
  232. package/dist/commands/rate-limit-options/index.js +23 -0
  233. package/dist/commands/rate-limit-options/rate-limit-options.js +204 -0
  234. package/dist/commands/release-notes/index.js +11 -0
  235. package/dist/commands/release-notes/release-notes.js +39 -0
  236. package/dist/commands/reload-plugins/index.js +14 -0
  237. package/dist/commands/reload-plugins/reload-plugins.js +39 -0
  238. package/dist/commands/remote-env/index.js +16 -0
  239. package/dist/commands/remote-env/remote-env.js +8 -0
  240. package/dist/commands/remote-setup/api.js +138 -0
  241. package/dist/commands/remote-setup/index.js +16 -0
  242. package/dist/commands/remote-setup/remote-setup.js +153 -0
  243. package/dist/commands/rename/generateSessionName.js +54 -0
  244. package/dist/commands/rename/index.js +12 -0
  245. package/dist/commands/rename/rename.js +67 -0
  246. package/dist/commands/reset-limits/index.js +4 -0
  247. package/dist/commands/resume/index.js +12 -0
  248. package/dist/commands/resume/resume.js +242 -0
  249. package/dist/commands/review/UltrareviewOverageDialog.js +98 -0
  250. package/dist/commands/review/reviewRemote.js +211 -0
  251. package/dist/commands/review/ultrareviewCommand.js +47 -0
  252. package/dist/commands/review/ultrareviewEnabled.js +8 -0
  253. package/dist/commands/review.js +48 -0
  254. package/dist/commands/rewind/index.js +13 -0
  255. package/dist/commands/rewind/rewind.js +9 -0
  256. package/dist/commands/sandbox-toggle/index.js +45 -0
  257. package/dist/commands/sandbox-toggle/sandbox-toggle.js +61 -0
  258. package/dist/commands/security-review.js +237 -0
  259. package/dist/commands/session/index.js +16 -0
  260. package/dist/commands/session/session.js +149 -0
  261. package/dist/commands/share/index.js +1 -0
  262. package/dist/commands/skills/index.js +11 -0
  263. package/dist/commands/skills/skills.js +8 -0
  264. package/dist/commands/stats/index.js +10 -0
  265. package/dist/commands/stats/stats.js +8 -0
  266. package/dist/commands/status/index.js +11 -0
  267. package/dist/commands/status/status.js +8 -0
  268. package/dist/commands/statusline.js +24 -0
  269. package/dist/commands/stickers/index.js +11 -0
  270. package/dist/commands/stickers/stickers.js +16 -0
  271. package/dist/commands/summary/index.js +1 -0
  272. package/dist/commands/tag/index.js +12 -0
  273. package/dist/commands/tag/tag.js +218 -0
  274. package/dist/commands/tasks/index.js +11 -0
  275. package/dist/commands/tasks/tasks.js +8 -0
  276. package/dist/commands/teleport/index.js +1 -0
  277. package/dist/commands/terminalSetup/index.js +18 -0
  278. package/dist/commands/terminalSetup/terminalSetup.js +423 -0
  279. package/dist/commands/theme/index.js +10 -0
  280. package/dist/commands/theme/theme.js +52 -0
  281. package/dist/commands/thinkback/index.js +12 -0
  282. package/dist/commands/thinkback/thinkback.js +516 -0
  283. package/dist/commands/thinkback-play/index.js +14 -0
  284. package/dist/commands/thinkback-play/thinkback-play.js +34 -0
  285. package/dist/commands/ultraplan.js +365 -0
  286. package/dist/commands/upgrade/index.js +13 -0
  287. package/dist/commands/upgrade/upgrade.js +37 -0
  288. package/dist/commands/usage/index.js +9 -0
  289. package/dist/commands/usage/usage.js +8 -0
  290. package/dist/commands/version.js +18 -0
  291. package/dist/commands/vim/index.js +11 -0
  292. package/dist/commands/vim/vim.js +27 -0
  293. package/dist/commands/voice/index.js +18 -0
  294. package/dist/commands/voice/voice.js +126 -0
  295. package/dist/commands/xingest/index.js +11 -0
  296. package/dist/commands/xingest/xingest.js +105 -0
  297. package/dist/commands/xmem/index.js +11 -0
  298. package/dist/commands/xmem/xmem.js +65 -0
  299. package/dist/commands/xsearch/index.js +11 -0
  300. package/dist/commands/xsearch/xsearch.js +76 -0
  301. package/dist/commands.js +936 -0
  302. package/dist/components/AgentProgressLine.js +158 -0
  303. package/dist/components/AntModelSwitchCallout.js +6 -0
  304. package/dist/components/App.js +46 -0
  305. package/dist/components/ApproveApiKey.js +133 -0
  306. package/dist/components/AutoModeOptInDialog.js +141 -0
  307. package/dist/components/AutoUpdater.js +154 -0
  308. package/dist/components/AutoUpdaterWrapper.js +85 -0
  309. package/dist/components/AwsAuthStatusBox.js +93 -0
  310. package/dist/components/BaseTextInput.js +139 -0
  311. package/dist/components/BashModeProgress.js +55 -0
  312. package/dist/components/BridgeDialog.js +423 -0
  313. package/dist/components/BypassPermissionsModeDialog.js +96 -0
  314. package/dist/components/ChannelDowngradeDialog.js +102 -0
  315. package/dist/components/ClickableImageRef.js +60 -0
  316. package/dist/components/CommandSelectModal.js +51 -0
  317. package/dist/components/CompactSummary.js +148 -0
  318. package/dist/components/ConfigurableShortcutHint.js +31 -0
  319. package/dist/components/ConsoleOAuthFlow.js +620 -0
  320. package/dist/components/ContextSuggestions.js +60 -0
  321. package/dist/components/ContextVisualization.js +709 -0
  322. package/dist/components/CoordinatorAgentStatus.js +264 -0
  323. package/dist/components/CostThresholdDialog.js +55 -0
  324. package/dist/components/CtrlOToExpand.js +52 -0
  325. package/dist/components/CustomSelect/SelectMulti.js +185 -0
  326. package/dist/components/CustomSelect/index.js +2 -0
  327. package/dist/components/CustomSelect/option-map.js +35 -0
  328. package/dist/components/CustomSelect/select-input-option.js +452 -0
  329. package/dist/components/CustomSelect/select-option.js +33 -0
  330. package/dist/components/CustomSelect/select.js +571 -0
  331. package/dist/components/CustomSelect/use-multi-select-state.js +188 -0
  332. package/dist/components/CustomSelect/use-select-input.js +169 -0
  333. package/dist/components/CustomSelect/use-select-navigation.js +379 -0
  334. package/dist/components/CustomSelect/use-select-state.js +33 -0
  335. package/dist/components/DesktopHandoff.js +200 -0
  336. package/dist/components/DesktopUpsell/DesktopUpsellStartup.js +167 -0
  337. package/dist/components/DevBar.js +52 -0
  338. package/dist/components/DevChannelsDialog.js +111 -0
  339. package/dist/components/DiagnosticsDisplay.js +121 -0
  340. package/dist/components/EffortCallout.js +259 -0
  341. package/dist/components/EffortIndicator.js +33 -0
  342. package/dist/components/ExitFlow.js +45 -0
  343. package/dist/components/ExportDialog.js +113 -0
  344. package/dist/components/FallbackToolUseErrorMessage.js +62 -0
  345. package/dist/components/FallbackToolUseRejectedMessage.js +18 -0
  346. package/dist/components/FastIcon.js +46 -0
  347. package/dist/components/Feedback.js +494 -0
  348. package/dist/components/FeedbackSurvey/FeedbackSurvey.js +177 -0
  349. package/dist/components/FeedbackSurvey/FeedbackSurveyView.js +126 -0
  350. package/dist/components/FeedbackSurvey/TranscriptSharePrompt.js +106 -0
  351. package/dist/components/FeedbackSurvey/submitTranscriptShare.js +81 -0
  352. package/dist/components/FeedbackSurvey/useDebouncedDigitInput.js +56 -0
  353. package/dist/components/FeedbackSurvey/useFeedbackSurvey.js +245 -0
  354. package/dist/components/FeedbackSurvey/useFrustrationDetection.js +6 -0
  355. package/dist/components/FeedbackSurvey/useMemorySurvey.js +190 -0
  356. package/dist/components/FeedbackSurvey/usePostCompactSurvey.js +203 -0
  357. package/dist/components/FeedbackSurvey/useSurveyState.js +84 -0
  358. package/dist/components/FileEditToolDiff.js +164 -0
  359. package/dist/components/FileEditToolUpdatedMessage.js +134 -0
  360. package/dist/components/FileEditToolUseRejectedMessage.js +177 -0
  361. package/dist/components/FilePathLink.js +33 -0
  362. package/dist/components/FullscreenLayout.js +512 -0
  363. package/dist/components/GlobalSearchDialog.js +339 -0
  364. package/dist/components/HelpV2/Commands.js +78 -0
  365. package/dist/components/HelpV2/General.js +31 -0
  366. package/dist/components/HelpV2/HelpV2.js +195 -0
  367. package/dist/components/HighlightedCode/Fallback.js +186 -0
  368. package/dist/components/HighlightedCode.js +189 -0
  369. package/dist/components/HistorySearchDialog.js +105 -0
  370. package/dist/components/IdeAutoConnectDialog.js +156 -0
  371. package/dist/components/IdeOnboardingDialog.js +200 -0
  372. package/dist/components/IdeStatusIndicator.js +63 -0
  373. package/dist/components/IdleReturnDialog.js +117 -0
  374. package/dist/components/InterruptedByUser.js +11 -0
  375. package/dist/components/InvalidConfigDialog.js +143 -0
  376. package/dist/components/InvalidSettingsDialog.js +84 -0
  377. package/dist/components/KeybindingWarnings.js +85 -0
  378. package/dist/components/LanguagePicker.js +91 -0
  379. package/dist/components/LogSelector.js +1561 -0
  380. package/dist/components/LogoV2/AnimatedAsterisk.js +39 -0
  381. package/dist/components/LogoV2/AnimatedXGlyph.js +90 -0
  382. package/dist/components/LogoV2/ChannelsNotice.js +288 -0
  383. package/dist/components/LogoV2/CondensedLogo.js +180 -0
  384. package/dist/components/LogoV2/EmergencyTip.js +42 -0
  385. package/dist/components/LogoV2/Feed.js +112 -0
  386. package/dist/components/LogoV2/FeedColumn.js +60 -0
  387. package/dist/components/LogoV2/GuestPassesUpsell.js +79 -0
  388. package/dist/components/LogoV2/LogoV2.js +47 -0
  389. package/dist/components/LogoV2/Opus1mMergeNotice.js +63 -0
  390. package/dist/components/LogoV2/OverageCreditUpsell.js +141 -0
  391. package/dist/components/LogoV2/VoiceModeNotice.js +73 -0
  392. package/dist/components/LogoV2/WelcomeV2.js +653 -0
  393. package/dist/components/LogoV2/XGlyph.js +59 -0
  394. package/dist/components/LogoV2/feedConfigs.js +92 -0
  395. package/dist/components/LspRecommendation/LspRecommendationMenu.js +78 -0
  396. package/dist/components/MCPServerApprovalDialog.js +114 -0
  397. package/dist/components/MCPServerDesktopImportDialog.js +213 -0
  398. package/dist/components/MCPServerDialogCopy.js +22 -0
  399. package/dist/components/MCPServerMultiselectDialog.js +141 -0
  400. package/dist/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.js +161 -0
  401. package/dist/components/ManagedSettingsSecurityDialog/utils.js +81 -0
  402. package/dist/components/Markdown.js +173 -0
  403. package/dist/components/MarkdownTable.js +205 -0
  404. package/dist/components/MemoryUsageIndicator.js +30 -0
  405. package/dist/components/Message.js +485 -0
  406. package/dist/components/MessageModel.js +40 -0
  407. package/dist/components/MessageResponse.js +79 -0
  408. package/dist/components/MessageRow.js +306 -0
  409. package/dist/components/MessageSelector.js +803 -0
  410. package/dist/components/MessageTimestamp.js +60 -0
  411. package/dist/components/Messages.js +501 -0
  412. package/dist/components/ModelPicker.js +487 -0
  413. package/dist/components/NativeAutoUpdater.js +155 -0
  414. package/dist/components/NotebookEditToolUseRejectedMessage.js +100 -0
  415. package/dist/components/OffscreenFreeze.js +22 -0
  416. package/dist/components/Onboarding.js +231 -0
  417. package/dist/components/OutputStylePicker.js +107 -0
  418. package/dist/components/PackageManagerAutoUpdater.js +112 -0
  419. package/dist/components/Passes/Passes.js +147 -0
  420. package/dist/components/PrBadge.js +102 -0
  421. package/dist/components/PressEnterToContinue.js +21 -0
  422. package/dist/components/PromptInput/HistorySearchInput.js +52 -0
  423. package/dist/components/PromptInput/IssueFlagBanner.js +6 -0
  424. package/dist/components/PromptInput/Notifications.js +262 -0
  425. package/dist/components/PromptInput/PromptInput.js +1875 -0
  426. package/dist/components/PromptInput/PromptInputFooter.js +171 -0
  427. package/dist/components/PromptInput/PromptInputFooterLeftSide.js +413 -0
  428. package/dist/components/PromptInput/PromptInputFooterSuggestions.js +144 -0
  429. package/dist/components/PromptInput/PromptInputHelpMenu.js +409 -0
  430. package/dist/components/PromptInput/PromptInputModeIndicator.js +76 -0
  431. package/dist/components/PromptInput/PromptInputQueuedCommands.js +75 -0
  432. package/dist/components/PromptInput/PromptInputStashNotice.js +27 -0
  433. package/dist/components/PromptInput/SandboxPromptFooterHint.js +75 -0
  434. package/dist/components/PromptInput/ShimmeredInput.js +136 -0
  435. package/dist/components/PromptInput/VoiceIndicator.js +152 -0
  436. package/dist/components/PromptInput/inputModes.js +30 -0
  437. package/dist/components/PromptInput/inputPaste.js +53 -0
  438. package/dist/components/PromptInput/useMaybeTruncateInput.js +42 -0
  439. package/dist/components/PromptInput/usePromptInputPlaceholder.js +54 -0
  440. package/dist/components/PromptInput/useShowFastIconHint.js +22 -0
  441. package/dist/components/PromptInput/useSwarmBanner.js +106 -0
  442. package/dist/components/PromptInput/utils.js +30 -0
  443. package/dist/components/QuickOpenDialog.js +243 -0
  444. package/dist/components/RemoteCallout.js +58 -0
  445. package/dist/components/RemoteEnvironmentDialog.js +369 -0
  446. package/dist/components/ResumeTask.js +231 -0
  447. package/dist/components/SandboxViolationExpandedView.js +115 -0
  448. package/dist/components/ScrollKeybindingHandler.js +566 -0
  449. package/dist/components/SearchBox.js +75 -0
  450. package/dist/components/SentryErrorBoundary.js +19 -0
  451. package/dist/components/SessionBackgroundHint.js +74 -0
  452. package/dist/components/SessionPreview.js +209 -0
  453. package/dist/components/Settings/Config.js +1652 -0
  454. package/dist/components/Settings/Settings.js +130 -0
  455. package/dist/components/Settings/Status.js +254 -0
  456. package/dist/components/Settings/Usage.js +379 -0
  457. package/dist/components/ShowInIDEPrompt.js +177 -0
  458. package/dist/components/SkillImprovementSurvey.js +163 -0
  459. package/dist/components/Spinner/FlashingChar.js +57 -0
  460. package/dist/components/Spinner/GlimmerMessage.js +340 -0
  461. package/dist/components/Spinner/ShimmerChar.js +30 -0
  462. package/dist/components/Spinner/SpinnerAnimationRow.js +189 -0
  463. package/dist/components/Spinner/SpinnerGlyph.js +36 -0
  464. package/dist/components/Spinner/SubagentStatusList.js +79 -0
  465. package/dist/components/Spinner/TeammateSpinnerLine.js +183 -0
  466. package/dist/components/Spinner/TeammateSpinnerTree.js +302 -0
  467. package/dist/components/Spinner/index.js +17 -0
  468. package/dist/components/Spinner/teammateSelectHint.js +4 -0
  469. package/dist/components/Spinner/useShimmerAnimation.js +20 -0
  470. package/dist/components/Spinner/useStalledAnimation.js +50 -0
  471. package/dist/components/Spinner/utils.js +72 -0
  472. package/dist/components/Spinner.js +481 -0
  473. package/dist/components/StartupCarousel.js +255 -0
  474. package/dist/components/Stats.js +1130 -0
  475. package/dist/components/StatusLine.js +257 -0
  476. package/dist/components/StatusNotices.js +48 -0
  477. package/dist/components/StructuredDiff/Fallback.js +340 -0
  478. package/dist/components/StructuredDiff/colorDiff.js +27 -0
  479. package/dist/components/StructuredDiff.js +146 -0
  480. package/dist/components/StructuredDiffList.js +17 -0
  481. package/dist/components/TagTabs.js +106 -0
  482. package/dist/components/TaskListV2.js +368 -0
  483. package/dist/components/TeammateViewHeader.js +92 -0
  484. package/dist/components/TeleportError.js +182 -0
  485. package/dist/components/TeleportProgress.js +138 -0
  486. package/dist/components/TeleportRepoMismatchDialog.js +123 -0
  487. package/dist/components/TeleportResumeWrapper.js +174 -0
  488. package/dist/components/TeleportStash.js +108 -0
  489. package/dist/components/TextInput.js +88 -0
  490. package/dist/components/ThemePicker.js +353 -0
  491. package/dist/components/ThinkingToggle.js +152 -0
  492. package/dist/components/TokenWarning.js +170 -0
  493. package/dist/components/ToolUseLoader.js +39 -0
  494. package/dist/components/TrustDialog/TrustDialog.js +307 -0
  495. package/dist/components/TrustDialog/utils.js +160 -0
  496. package/dist/components/UndercoverAutoCallout.js +6 -0
  497. package/dist/components/UsageMeter.js +40 -0
  498. package/dist/components/ValidationErrorsList.js +141 -0
  499. package/dist/components/VimTextInput.js +138 -0
  500. package/dist/components/VirtualMessageList.js +699 -0
  501. package/dist/components/WorkflowMultiselectDialog.js +133 -0
  502. package/dist/components/WorktreeExitDialog.js +210 -0
  503. package/dist/components/XMemExitSummary.js +29 -0
  504. package/dist/components/XMemOAuthFlow.js +296 -0
  505. package/dist/components/XUI.js +57 -0
  506. package/dist/components/agents/AgentDetail.js +282 -0
  507. package/dist/components/agents/AgentEditor.js +161 -0
  508. package/dist/components/agents/AgentNavigationFooter.js +25 -0
  509. package/dist/components/agents/AgentsList.js +498 -0
  510. package/dist/components/agents/AgentsMenu.js +812 -0
  511. package/dist/components/agents/ColorPicker.js +130 -0
  512. package/dist/components/agents/ModelSelector.js +68 -0
  513. package/dist/components/agents/ToolSelector.js +558 -0
  514. package/dist/components/agents/agentFileUtils.js +174 -0
  515. package/dist/components/agents/generateAgent.js +164 -0
  516. package/dist/components/agents/new-agent-creation/CreateAgentWizard.js +90 -0
  517. package/dist/components/agents/new-agent-creation/wizard-steps/ColorStep.js +88 -0
  518. package/dist/components/agents/new-agent-creation/wizard-steps/ConfirmStep.js +437 -0
  519. package/dist/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.js +69 -0
  520. package/dist/components/agents/new-agent-creation/wizard-steps/DescriptionStep.js +134 -0
  521. package/dist/components/agents/new-agent-creation/wizard-steps/GenerateStep.js +125 -0
  522. package/dist/components/agents/new-agent-creation/wizard-steps/LocationStep.js +84 -0
  523. package/dist/components/agents/new-agent-creation/wizard-steps/MemoryStep.js +114 -0
  524. package/dist/components/agents/new-agent-creation/wizard-steps/MethodStep.js +85 -0
  525. package/dist/components/agents/new-agent-creation/wizard-steps/ModelStep.js +57 -0
  526. package/dist/components/agents/new-agent-creation/wizard-steps/PromptStep.js +140 -0
  527. package/dist/components/agents/new-agent-creation/wizard-steps/ToolsStep.js +62 -0
  528. package/dist/components/agents/new-agent-creation/wizard-steps/TypeStep.js +109 -0
  529. package/dist/components/agents/types.js +7 -0
  530. package/dist/components/agents/utils.js +17 -0
  531. package/dist/components/agents/validateAgent.js +78 -0
  532. package/dist/components/assistant-room/AssistantRoom.js +437 -0
  533. package/dist/components/design-system/Byline.js +50 -0
  534. package/dist/components/design-system/Dialog.js +136 -0
  535. package/dist/components/design-system/Divider.js +97 -0
  536. package/dist/components/design-system/FuzzyPicker.js +231 -0
  537. package/dist/components/design-system/KeyboardShortcutHint.js +59 -0
  538. package/dist/components/design-system/ListItem.js +155 -0
  539. package/dist/components/design-system/LoadingState.js +62 -0
  540. package/dist/components/design-system/Pane.js +55 -0
  541. package/dist/components/design-system/ProgressBar.js +66 -0
  542. package/dist/components/design-system/Ratchet.js +79 -0
  543. package/dist/components/design-system/StatusIcon.js +59 -0
  544. package/dist/components/design-system/Tabs.js +297 -0
  545. package/dist/components/design-system/ThemeProvider.js +140 -0
  546. package/dist/components/design-system/ThemedBox.js +115 -0
  547. package/dist/components/design-system/ThemedText.js +62 -0
  548. package/dist/components/design-system/color.js +16 -0
  549. package/dist/components/diff/DiffDetailView.js +298 -0
  550. package/dist/components/diff/DiffDialog.js +419 -0
  551. package/dist/components/diff/DiffFileList.js +308 -0
  552. package/dist/components/grove/Grove.js +544 -0
  553. package/dist/components/hooks/HooksConfigMenu.js +564 -0
  554. package/dist/components/hooks/PromptDialog.js +84 -0
  555. package/dist/components/hooks/SelectEventMode.js +133 -0
  556. package/dist/components/hooks/SelectHookMode.js +100 -0
  557. package/dist/components/hooks/SelectMatcherMode.js +129 -0
  558. package/dist/components/hooks/ViewHookMode.js +217 -0
  559. package/dist/components/mcp/CapabilitiesSection.js +61 -0
  560. package/dist/components/mcp/ElicitationDialog.js +969 -0
  561. package/dist/components/mcp/MCPAgentServerMenu.js +158 -0
  562. package/dist/components/mcp/MCPListPanel.js +547 -0
  563. package/dist/components/mcp/MCPReconnect.js +184 -0
  564. package/dist/components/mcp/MCPRemoteServerMenu.js +599 -0
  565. package/dist/components/mcp/MCPSettings.js +388 -0
  566. package/dist/components/mcp/MCPStdioServerMenu.js +161 -0
  567. package/dist/components/mcp/MCPToolDetailView.js +245 -0
  568. package/dist/components/mcp/MCPToolListView.js +144 -0
  569. package/dist/components/mcp/McpParsingWarnings.js +252 -0
  570. package/dist/components/mcp/index.js +18 -0
  571. package/dist/components/mcp/utils/reconnectHelpers.js +32 -0
  572. package/dist/components/memCodeHint/PluginHintMenu.js +72 -0
  573. package/dist/components/memCodeInChromeOnboarding.js +149 -0
  574. package/dist/components/memCodeMdExternalIncludesDialog.js +150 -0
  575. package/dist/components/memcode/Eye.js +29 -0
  576. package/dist/components/memcode/MemCodeViews.js +154 -0
  577. package/dist/components/memcode/MessageBubbleView.js +53 -0
  578. package/dist/components/memcode/SessionChrome.js +39 -0
  579. package/dist/components/memcode/SessionChromeView.js +208 -0
  580. package/dist/components/memcode/__snapshots__/header.txt +1 -0
  581. package/dist/components/memcode/__snapshots__/home.txt +15 -0
  582. package/dist/components/memcode/__snapshots__/inline-activity.txt +18 -0
  583. package/dist/components/memcode/__snapshots__/status-line.txt +1 -0
  584. package/dist/components/memcode/ink-primitives.js +11 -0
  585. package/dist/components/memcode/render-fixtures.js +308 -0
  586. package/dist/components/memcode/theme.js +93 -0
  587. package/dist/components/memory/MemoryFileSelector.js +444 -0
  588. package/dist/components/memory/MemoryUpdateNotification.js +48 -0
  589. package/dist/components/messageActions.js +414 -0
  590. package/dist/components/messages/AdvisorMessage.js +169 -0
  591. package/dist/components/messages/AssistantRedactedThinkingMessage.js +18 -0
  592. package/dist/components/messages/AssistantTextMessage.js +241 -0
  593. package/dist/components/messages/AssistantThinkingMessage.js +70 -0
  594. package/dist/components/messages/AssistantToolUseMessage.js +330 -0
  595. package/dist/components/messages/AttachmentMessage.js +556 -0
  596. package/dist/components/messages/CollapsedReadSearchContent.js +507 -0
  597. package/dist/components/messages/CompactBoundaryMessage.js +24 -0
  598. package/dist/components/messages/GroupedToolUseContent.js +44 -0
  599. package/dist/components/messages/HighlightedThinkingText.js +180 -0
  600. package/dist/components/messages/HookProgressMessage.js +123 -0
  601. package/dist/components/messages/PlanApprovalMessage.js +210 -0
  602. package/dist/components/messages/RateLimitMessage.js +156 -0
  603. package/dist/components/messages/ShutdownMessage.js +129 -0
  604. package/dist/components/messages/SnipBoundaryMessage.js +8 -0
  605. package/dist/components/messages/SystemAPIErrorMessage.js +57 -0
  606. package/dist/components/messages/SystemTextMessage.js +920 -0
  607. package/dist/components/messages/TaskAssignmentMessage.js +74 -0
  608. package/dist/components/messages/UserAgentNotificationMessage.js +84 -0
  609. package/dist/components/messages/UserBashInputMessage.js +58 -0
  610. package/dist/components/messages/UserBashOutputMessage.js +56 -0
  611. package/dist/components/messages/UserChannelMessage.js +137 -0
  612. package/dist/components/messages/UserCommandMessage.js +121 -0
  613. package/dist/components/messages/UserCrossSessionMessage.js +11 -0
  614. package/dist/components/messages/UserForkBoilerplateMessage.js +11 -0
  615. package/dist/components/messages/UserGitHubWebhookMessage.js +11 -0
  616. package/dist/components/messages/UserImageMessage.js +50 -0
  617. package/dist/components/messages/UserLocalCommandOutputMessage.js +182 -0
  618. package/dist/components/messages/UserMemoryInputMessage.js +82 -0
  619. package/dist/components/messages/UserPlanMessage.js +43 -0
  620. package/dist/components/messages/UserPromptMessage.js +60 -0
  621. package/dist/components/messages/UserResourceUpdateMessage.js +114 -0
  622. package/dist/components/messages/UserTeammateMessage.js +171 -0
  623. package/dist/components/messages/UserTextMessage.js +268 -0
  624. package/dist/components/messages/UserToolResultMessage/RejectedPlanMessage.js +33 -0
  625. package/dist/components/messages/UserToolResultMessage/RejectedToolUseMessage.js +15 -0
  626. package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js +18 -0
  627. package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js +99 -0
  628. package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js +83 -0
  629. package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js +92 -0
  630. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +70 -0
  631. package/dist/components/messages/UserToolResultMessage/utils.js +43 -0
  632. package/dist/components/messages/nullRenderingAttachments.js +43 -0
  633. package/dist/components/messages/teamMemCollapsed.js +144 -0
  634. package/dist/components/messages/teamMemSaved.js +11 -0
  635. package/dist/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.js +648 -0
  636. package/dist/components/permissions/AskUserQuestionPermissionRequest/PreviewBox.js +229 -0
  637. package/dist/components/permissions/AskUserQuestionPermissionRequest/PreviewQuestionView.js +261 -0
  638. package/dist/components/permissions/AskUserQuestionPermissionRequest/QuestionNavigationBar.js +205 -0
  639. package/dist/components/permissions/AskUserQuestionPermissionRequest/QuestionView.js +489 -0
  640. package/dist/components/permissions/AskUserQuestionPermissionRequest/SubmitQuestionsView.js +162 -0
  641. package/dist/components/permissions/AskUserQuestionPermissionRequest/use-multiple-choice-state.js +107 -0
  642. package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js +409 -0
  643. package/dist/components/permissions/BashPermissionRequest/bashToolUseOptions.js +106 -0
  644. package/dist/components/permissions/ComputerUseApproval/ComputerUseApproval.js +483 -0
  645. package/dist/components/permissions/EnterPlanModePermissionRequest/EnterPlanModePermissionRequest.js +134 -0
  646. package/dist/components/permissions/ExitPlanModePermissionRequest/ExitPlanModePermissionRequest.js +659 -0
  647. package/dist/components/permissions/FallbackPermissionRequest.js +351 -0
  648. package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +186 -0
  649. package/dist/components/permissions/FilePermissionDialog/FilePermissionDialog.js +144 -0
  650. package/dist/components/permissions/FilePermissionDialog/ideDiffConfig.js +16 -0
  651. package/dist/components/permissions/FilePermissionDialog/permissionOptions.js +147 -0
  652. package/dist/components/permissions/FilePermissionDialog/useFilePermissionDialog.js +149 -0
  653. package/dist/components/permissions/FilePermissionDialog/usePermissionHandler.js +113 -0
  654. package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +171 -0
  655. package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +84 -0
  656. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +120 -0
  657. package/dist/components/permissions/NotebookEditPermissionRequest/NotebookEditPermissionRequest.js +171 -0
  658. package/dist/components/permissions/NotebookEditPermissionRequest/NotebookEditToolDiff.js +225 -0
  659. package/dist/components/permissions/PermissionDecisionDebugInfo.js +535 -0
  660. package/dist/components/permissions/PermissionDialog.js +49 -0
  661. package/dist/components/permissions/PermissionExplanation.js +258 -0
  662. package/dist/components/permissions/PermissionPrompt.js +313 -0
  663. package/dist/components/permissions/PermissionRequest.js +173 -0
  664. package/dist/components/permissions/PermissionRequestTitle.js +22 -0
  665. package/dist/components/permissions/PermissionRuleExplanation.js +116 -0
  666. package/dist/components/permissions/PowerShellPermissionRequest/PowerShellPermissionRequest.js +207 -0
  667. package/dist/components/permissions/PowerShellPermissionRequest/powershellToolUseOptions.js +73 -0
  668. package/dist/components/permissions/SandboxPermissionRequest.js +170 -0
  669. package/dist/components/permissions/SedEditPermissionRequest/SedEditPermissionRequest.js +230 -0
  670. package/dist/components/permissions/SkillPermissionRequest/SkillPermissionRequest.js +385 -0
  671. package/dist/components/permissions/WebFetchPermissionRequest/WebFetchPermissionRequest.js +265 -0
  672. package/dist/components/permissions/WorkerBadge.js +49 -0
  673. package/dist/components/permissions/WorkerPendingPermission.js +122 -0
  674. package/dist/components/permissions/hooks.js +143 -0
  675. package/dist/components/permissions/rules/AddPermissionRules.js +180 -0
  676. package/dist/components/permissions/rules/AddWorkspaceDirectory.js +350 -0
  677. package/dist/components/permissions/rules/PermissionRuleDescription.js +83 -0
  678. package/dist/components/permissions/rules/PermissionRuleInput.js +159 -0
  679. package/dist/components/permissions/rules/PermissionRuleList.js +1192 -0
  680. package/dist/components/permissions/rules/RecentDenialsTab.js +206 -0
  681. package/dist/components/permissions/rules/RemoveWorkspaceDirectory.js +107 -0
  682. package/dist/components/permissions/rules/WorkspaceTab.js +142 -0
  683. package/dist/components/permissions/shellPermissionHelpers.js +155 -0
  684. package/dist/components/permissions/useShellPermissionFeedback.js +108 -0
  685. package/dist/components/permissions/utils.js +21 -0
  686. package/dist/components/sandbox/SandboxConfigTab.js +106 -0
  687. package/dist/components/sandbox/SandboxDependenciesTab.js +182 -0
  688. package/dist/components/sandbox/SandboxDoctorSection.js +63 -0
  689. package/dist/components/sandbox/SandboxOverridesTab.js +211 -0
  690. package/dist/components/sandbox/SandboxSettings.js +302 -0
  691. package/dist/components/shell/ExpandShellOutputContext.js +27 -0
  692. package/dist/components/shell/OutputLine.js +109 -0
  693. package/dist/components/shell/ShellProgressMessage.js +152 -0
  694. package/dist/components/shell/ShellTimeDisplay.js +72 -0
  695. package/dist/components/skills/SkillsMenu.js +363 -0
  696. package/dist/components/tasks/AsyncAgentDetailDialog.js +273 -0
  697. package/dist/components/tasks/BackgroundTask.js +353 -0
  698. package/dist/components/tasks/BackgroundTaskStatus.js +407 -0
  699. package/dist/components/tasks/BackgroundTasksDialog.js +573 -0
  700. package/dist/components/tasks/DreamDetailDialog.js +290 -0
  701. package/dist/components/tasks/InProcessTeammateDetailDialog.js +313 -0
  702. package/dist/components/tasks/RemoteSessionDetailDialog.js +922 -0
  703. package/dist/components/tasks/RemoteSessionProgress.js +255 -0
  704. package/dist/components/tasks/ShellDetailDialog.js +427 -0
  705. package/dist/components/tasks/ShellProgress.js +82 -0
  706. package/dist/components/tasks/renderToolActivity.js +36 -0
  707. package/dist/components/tasks/taskStatusUtils.js +66 -0
  708. package/dist/components/teams/TeamStatus.js +82 -0
  709. package/dist/components/teams/TeamsDialog.js +643 -0
  710. package/dist/components/ui/OrderedList.js +69 -0
  711. package/dist/components/ui/OrderedListItem.js +49 -0
  712. package/dist/components/ui/TreeSelect.js +295 -0
  713. package/dist/components/wizard/WizardDialogLayout.js +62 -0
  714. package/dist/components/wizard/WizardNavigationFooter.js +19 -0
  715. package/dist/components/wizard/WizardProvider.js +213 -0
  716. package/dist/components/wizard/index.js +10 -0
  717. package/dist/components/wizard/useWizard.js +12 -0
  718. package/dist/constants/apiLimits.js +24 -0
  719. package/dist/constants/betas.js +51 -0
  720. package/dist/constants/common.js +21 -0
  721. package/dist/constants/cyberRiskInstruction.js +4 -0
  722. package/dist/constants/errorIds.js +4 -0
  723. package/dist/constants/figures.js +58 -0
  724. package/dist/constants/files.js +134 -0
  725. package/dist/constants/github-app.js +148 -0
  726. package/dist/constants/keys.js +7 -0
  727. package/dist/constants/memcodeDefaults.js +15 -0
  728. package/dist/constants/messages.js +4 -0
  729. package/dist/constants/oauth.js +159 -0
  730. package/dist/constants/outputStyles.js +176 -0
  731. package/dist/constants/product.js +49 -0
  732. package/dist/constants/prompts.js +664 -0
  733. package/dist/constants/querySource.js +0 -0
  734. package/dist/constants/spinnerVerbs.js +38 -0
  735. package/dist/constants/system.js +54 -0
  736. package/dist/constants/systemPromptSections.js +35 -0
  737. package/dist/constants/toolLimits.js +14 -0
  738. package/dist/constants/tools.js +89 -0
  739. package/dist/constants/turnCompletionVerbs.js +13 -0
  740. package/dist/constants/xml.js +89 -0
  741. package/dist/context/QueuedMessageContext.js +56 -0
  742. package/dist/context/fpsMetrics.js +28 -0
  743. package/dist/context/mailbox.js +39 -0
  744. package/dist/context/modalContext.js +32 -0
  745. package/dist/context/notifications.js +181 -0
  746. package/dist/context/overlayContext.js +97 -0
  747. package/dist/context/promptOverlayContext.js +95 -0
  748. package/dist/context/stats.js +211 -0
  749. package/dist/context/voice.js +66 -0
  750. package/dist/context.js +136 -0
  751. package/dist/coordinator/coordinatorMode.js +332 -0
  752. package/dist/cost-tracker.js +248 -0
  753. package/dist/costHook.js +20 -0
  754. package/dist/dialogLaunchers.js +63 -0
  755. package/dist/entrypoints/agentSdkTypes.js +68 -0
  756. package/dist/entrypoints/cli.js +320 -0
  757. package/dist/entrypoints/init.js +235 -0
  758. package/dist/entrypoints/mcp.js +162 -0
  759. package/dist/entrypoints/sandboxTypes.js +75 -0
  760. package/dist/entrypoints/sdk/controlSchemas.js +533 -0
  761. package/dist/entrypoints/sdk/coreSchemas.js +1562 -0
  762. package/dist/entrypoints/sdk/coreTypes.generated.js +4 -0
  763. package/dist/entrypoints/sdk/coreTypes.js +42 -0
  764. package/dist/entrypoints/sdk/runtimeTypes.js +0 -0
  765. package/dist/entrypoints/sdk/sdkUtilityTypes.js +4 -0
  766. package/dist/entrypoints/sdk/settingsTypes.generated.js +0 -0
  767. package/dist/entrypoints/sdk/toolTypes.js +0 -0
  768. package/dist/history.js +300 -0
  769. package/dist/hooks/fileSuggestions.js +527 -0
  770. package/dist/hooks/notifs/useAntOrgWarningNotification.js +5 -0
  771. package/dist/hooks/notifs/useAutoModeUnavailableNotification.js +40 -0
  772. package/dist/hooks/notifs/useCanSwitchToExistingSubscription.js +60 -0
  773. package/dist/hooks/notifs/useDeprecationWarningNotification.js +46 -0
  774. package/dist/hooks/notifs/useFastModeNotification.js +164 -0
  775. package/dist/hooks/notifs/useIDEStatusIndicator.js +185 -0
  776. package/dist/hooks/notifs/useInstallMessages.js +28 -0
  777. package/dist/hooks/notifs/useLspInitializationNotification.js +143 -0
  778. package/dist/hooks/notifs/useMcpConnectivityStatus.js +125 -0
  779. package/dist/hooks/notifs/useModelMigrationNotifications.js +49 -0
  780. package/dist/hooks/notifs/useNpmDeprecationNotification.js +6 -0
  781. package/dist/hooks/notifs/usePluginAutoupdateNotification.js +88 -0
  782. package/dist/hooks/notifs/usePluginInstallationStatus.js +138 -0
  783. package/dist/hooks/notifs/useRateLimitWarningNotification.js +116 -0
  784. package/dist/hooks/notifs/useSettingsErrors.js +70 -0
  785. package/dist/hooks/notifs/useStartupNotification.js +25 -0
  786. package/dist/hooks/notifs/useTeammateShutdownNotification.js +63 -0
  787. package/dist/hooks/renderPlaceholder.js +30 -0
  788. package/dist/hooks/toolPermission/PermissionContext.js +259 -0
  789. package/dist/hooks/toolPermission/handlers/coordinatorHandler.js +27 -0
  790. package/dist/hooks/toolPermission/handlers/interactiveHandler.js +375 -0
  791. package/dist/hooks/toolPermission/handlers/swarmWorkerHandler.js +90 -0
  792. package/dist/hooks/toolPermission/permissionLogging.js +149 -0
  793. package/dist/hooks/unifiedSuggestions.js +137 -0
  794. package/dist/hooks/useAfterFirstRender.js +17 -0
  795. package/dist/hooks/useApiKeyVerification.js +61 -0
  796. package/dist/hooks/useArrowKeyHistory.js +170 -0
  797. package/dist/hooks/useAssistantHistory.js +153 -0
  798. package/dist/hooks/useAwaySummary.js +96 -0
  799. package/dist/hooks/useBackgroundTaskNavigation.js +165 -0
  800. package/dist/hooks/useBlink.js +12 -0
  801. package/dist/hooks/useCanUseTool.js +197 -0
  802. package/dist/hooks/useCancelRequest.js +175 -0
  803. package/dist/hooks/useChromeExtensionNotification.js +52 -0
  804. package/dist/hooks/useClipboardImageHint.js +54 -0
  805. package/dist/hooks/useCommandKeybindings.js +86 -0
  806. package/dist/hooks/useCommandQueue.js +11 -0
  807. package/dist/hooks/useCopyOnSelect.js +45 -0
  808. package/dist/hooks/useDeferredHookMessages.js +34 -0
  809. package/dist/hooks/useDiffData.js +67 -0
  810. package/dist/hooks/useDiffInIDE.js +232 -0
  811. package/dist/hooks/useDirectConnect.js +176 -0
  812. package/dist/hooks/useDoublePress.js +45 -0
  813. package/dist/hooks/useDynamicConfig.js +17 -0
  814. package/dist/hooks/useElapsedTime.js +18 -0
  815. package/dist/hooks/useExitOnCtrlCD.js +38 -0
  816. package/dist/hooks/useExitOnCtrlCDWithKeybindings.js +8 -0
  817. package/dist/hooks/useFileHistorySnapshotInit.js +20 -0
  818. package/dist/hooks/useGlobalKeybindings.js +188 -0
  819. package/dist/hooks/useHistorySearch.js +237 -0
  820. package/dist/hooks/useIDEIntegration.js +63 -0
  821. package/dist/hooks/useIdeAtMentioned.js +50 -0
  822. package/dist/hooks/useIdeConnectionStatus.js +21 -0
  823. package/dist/hooks/useIdeLogging.js +37 -0
  824. package/dist/hooks/useIdeSelection.js +86 -0
  825. package/dist/hooks/useInboxPoller.js +735 -0
  826. package/dist/hooks/useInputBuffer.js +81 -0
  827. package/dist/hooks/useIssueFlagBanner.js +115 -0
  828. package/dist/hooks/useLogMessages.js +53 -0
  829. package/dist/hooks/useLspPluginRecommendation.js +166 -0
  830. package/dist/hooks/useMailboxBridge.js +16 -0
  831. package/dist/hooks/useMainLoopModel.js +20 -0
  832. package/dist/hooks/useManagePlugins.js +213 -0
  833. package/dist/hooks/useMemoryUsage.js +19 -0
  834. package/dist/hooks/useMergedClients.js +18 -0
  835. package/dist/hooks/useMergedCommands.js +13 -0
  836. package/dist/hooks/useMergedTools.js +24 -0
  837. package/dist/hooks/useMinDisplayTime.js +28 -0
  838. package/dist/hooks/useNotifyAfterTimeout.js +38 -0
  839. package/dist/hooks/useOfficialMarketplaceNotification.js +38 -0
  840. package/dist/hooks/usePasteHandler.js +164 -0
  841. package/dist/hooks/usePluginRecommendationBase.js +97 -0
  842. package/dist/hooks/usePrStatus.js +76 -0
  843. package/dist/hooks/usePromptSuggestion.js +129 -0
  844. package/dist/hooks/usePromptsFrommemCodeInChrome.js +64 -0
  845. package/dist/hooks/useQueueProcessor.js +35 -0
  846. package/dist/hooks/useRemoteSession.js +379 -0
  847. package/dist/hooks/useReplBridge.js +591 -0
  848. package/dist/hooks/useSSHSession.js +182 -0
  849. package/dist/hooks/useScheduledTasks.js +86 -0
  850. package/dist/hooks/useSearchInput.js +289 -0
  851. package/dist/hooks/useSessionBackgrounding.js +120 -0
  852. package/dist/hooks/useSettings.js +7 -0
  853. package/dist/hooks/useSettingsChange.js +19 -0
  854. package/dist/hooks/useSkillImprovementSurvey.js +74 -0
  855. package/dist/hooks/useSkillsChange.js +43 -0
  856. package/dist/hooks/useSwarmInitialization.js +43 -0
  857. package/dist/hooks/useSwarmPermissionPoller.js +175 -0
  858. package/dist/hooks/useTaskListWatcher.js +141 -0
  859. package/dist/hooks/useTasksV2.js +184 -0
  860. package/dist/hooks/useTeammateViewAutoExit.js +39 -0
  861. package/dist/hooks/useTeleportResume.js +79 -0
  862. package/dist/hooks/useTerminalSize.js +14 -0
  863. package/dist/hooks/useTextInput.js +372 -0
  864. package/dist/hooks/useTimeout.js +13 -0
  865. package/dist/hooks/useTurnDiffs.js +127 -0
  866. package/dist/hooks/useTypeahead.js +1037 -0
  867. package/dist/hooks/useUpdateNotification.js +28 -0
  868. package/dist/hooks/useVimInput.js +230 -0
  869. package/dist/hooks/useVirtualScroll.js +290 -0
  870. package/dist/hooks/useVoice.js +796 -0
  871. package/dist/hooks/useVoiceEnabled.js +15 -0
  872. package/dist/hooks/useVoiceIntegration.js +365 -0
  873. package/dist/hooks/usememCodeHintRecommendation.js +115 -0
  874. package/dist/ink/Ansi.js +233 -0
  875. package/dist/ink/bidi.js +78 -0
  876. package/dist/ink/clearTerminal.js +46 -0
  877. package/dist/ink/colorize.js +125 -0
  878. package/dist/ink/components/AlternateScreen.js +58 -0
  879. package/dist/ink/components/App.js +381 -0
  880. package/dist/ink/components/AppContext.js +10 -0
  881. package/dist/ink/components/Box.js +169 -0
  882. package/dist/ink/components/Button.js +159 -0
  883. package/dist/ink/components/ClockContext.js +102 -0
  884. package/dist/ink/components/CursorDeclarationContext.js +9 -0
  885. package/dist/ink/components/ErrorOverview.js +95 -0
  886. package/dist/ink/components/Link.js +38 -0
  887. package/dist/ink/components/Newline.js +29 -0
  888. package/dist/ink/components/NoSelect.js +39 -0
  889. package/dist/ink/components/RawAnsi.js +34 -0
  890. package/dist/ink/components/ScrollBox.js +131 -0
  891. package/dist/ink/components/Spacer.js +17 -0
  892. package/dist/ink/components/StdinContext.js +16 -0
  893. package/dist/ink/components/TerminalFocusContext.js +45 -0
  894. package/dist/ink/components/TerminalSizeContext.js +5 -0
  895. package/dist/ink/components/Text.js +195 -0
  896. package/dist/ink/constants.js +4 -0
  897. package/dist/ink/dom.js +240 -0
  898. package/dist/ink/events/click-event.js +32 -0
  899. package/dist/ink/events/dispatcher.js +148 -0
  900. package/dist/ink/events/emitter.js +28 -0
  901. package/dist/ink/events/event-handlers.js +26 -0
  902. package/dist/ink/events/event.js +12 -0
  903. package/dist/ink/events/focus-event.js +11 -0
  904. package/dist/ink/events/input-event.js +92 -0
  905. package/dist/ink/events/keyboard-event.js +31 -0
  906. package/dist/ink/events/terminal-event.js +73 -0
  907. package/dist/ink/events/terminal-focus-event.js +11 -0
  908. package/dist/ink/focus.js +127 -0
  909. package/dist/ink/frame.js +26 -0
  910. package/dist/ink/get-max-width.js +8 -0
  911. package/dist/ink/global.d.js +0 -0
  912. package/dist/ink/hit-test.js +76 -0
  913. package/dist/ink/hooks/use-animation-frame.js +25 -0
  914. package/dist/ink/hooks/use-app.js +7 -0
  915. package/dist/ink/hooks/use-declared-cursor.js +30 -0
  916. package/dist/ink/hooks/use-input.js +34 -0
  917. package/dist/ink/hooks/use-interval.js +40 -0
  918. package/dist/ink/hooks/use-search-highlight.js +26 -0
  919. package/dist/ink/hooks/use-selection.js +62 -0
  920. package/dist/ink/hooks/use-stdin.js +7 -0
  921. package/dist/ink/hooks/use-tab-status.js +50 -0
  922. package/dist/ink/hooks/use-terminal-focus.js +9 -0
  923. package/dist/ink/hooks/use-terminal-title.js +19 -0
  924. package/dist/ink/hooks/use-terminal-viewport.js +42 -0
  925. package/dist/ink/ink.js +1306 -0
  926. package/dist/ink/instances.js +5 -0
  927. package/dist/ink/layout/engine.js +7 -0
  928. package/dist/ink/layout/geometry.js +63 -0
  929. package/dist/ink/layout/node.js +72 -0
  930. package/dist/ink/layout/yoga.js +242 -0
  931. package/dist/ink/line-width-cache.js +16 -0
  932. package/dist/ink/log-update.js +458 -0
  933. package/dist/ink/measure-element.js +8 -0
  934. package/dist/ink/measure-text.js +31 -0
  935. package/dist/ink/node-cache.js +25 -0
  936. package/dist/ink/optimizer.js +52 -0
  937. package/dist/ink/output.js +440 -0
  938. package/dist/ink/parse-keypress.js +547 -0
  939. package/dist/ink/reconciler.js +400 -0
  940. package/dist/ink/render-border.js +140 -0
  941. package/dist/ink/render-node-to-output.js +774 -0
  942. package/dist/ink/render-to-screen.js +145 -0
  943. package/dist/ink/renderer.js +101 -0
  944. package/dist/ink/root.js +83 -0
  945. package/dist/ink/screen.js +913 -0
  946. package/dist/ink/searchHighlight.js +50 -0
  947. package/dist/ink/selection.js +476 -0
  948. package/dist/ink/squash-text-nodes.js +54 -0
  949. package/dist/ink/stringWidth.js +129 -0
  950. package/dist/ink/styles.js +296 -0
  951. package/dist/ink/supports-hyperlinks.js +33 -0
  952. package/dist/ink/tabstops.js +37 -0
  953. package/dist/ink/terminal-focus-state.js +40 -0
  954. package/dist/ink/terminal-querier.js +136 -0
  955. package/dist/ink/terminal.js +127 -0
  956. package/dist/ink/termio/ansi.js +69 -0
  957. package/dist/ink/termio/csi.js +243 -0
  958. package/dist/ink/termio/dec.js +48 -0
  959. package/dist/ink/termio/esc.js +38 -0
  960. package/dist/ink/termio/osc.js +304 -0
  961. package/dist/ink/termio/parser.js +284 -0
  962. package/dist/ink/termio/sgr.js +262 -0
  963. package/dist/ink/termio/tokenize.js +184 -0
  964. package/dist/ink/termio/types.js +37 -0
  965. package/dist/ink/termio.js +8 -0
  966. package/dist/ink/useTerminalNotification.js +103 -0
  967. package/dist/ink/warn.js +11 -0
  968. package/dist/ink/widest-line.js +16 -0
  969. package/dist/ink/wrap-text.js +50 -0
  970. package/dist/ink/wrapAnsi.js +6 -0
  971. package/dist/ink.js +95 -0
  972. package/dist/interactiveHelpers.js +282 -0
  973. package/dist/keybindings/KeybindingContext.js +175 -0
  974. package/dist/keybindings/KeybindingProviderSetup.js +212 -0
  975. package/dist/keybindings/defaultBindings.js +311 -0
  976. package/dist/keybindings/loadUserBindings.js +302 -0
  977. package/dist/keybindings/match.js +55 -0
  978. package/dist/keybindings/parser.js +153 -0
  979. package/dist/keybindings/reservedShortcuts.js +85 -0
  980. package/dist/keybindings/resolver.js +115 -0
  981. package/dist/keybindings/schema.js +187 -0
  982. package/dist/keybindings/shortcutFormat.js +27 -0
  983. package/dist/keybindings/template.js +32 -0
  984. package/dist/keybindings/useKeybinding.js +108 -0
  985. package/dist/keybindings/useShortcutDisplay.js +27 -0
  986. package/dist/keybindings/validate.js +321 -0
  987. package/dist/macro.js +19 -0
  988. package/dist/main.js +3574 -0
  989. package/dist/memdir/findRelevantMemories.js +93 -0
  990. package/dist/memdir/memdir.js +317 -0
  991. package/dist/memdir/memoryAge.js +26 -0
  992. package/dist/memdir/memoryScan.js +51 -0
  993. package/dist/memdir/memoryShapeTelemetry.js +5 -0
  994. package/dist/memdir/memoryTypes.js +206 -0
  995. package/dist/memdir/paths.js +126 -0
  996. package/dist/memdir/teamMemPaths.js +158 -0
  997. package/dist/memdir/teamMemPrompts.js +89 -0
  998. package/dist/migrations/migrateAutoUpdatesToSettings.js +44 -0
  999. package/dist/migrations/migrateBypassPermissionsAcceptedToSettings.js +33 -0
  1000. package/dist/migrations/migrateEnableAllProjectMcpServersToSettings.js +73 -0
  1001. package/dist/migrations/migrateFennecToOpus.js +30 -0
  1002. package/dist/migrations/migrateLegacyOpusToCurrent.js +33 -0
  1003. package/dist/migrations/migrateOpusToOpus1m.js +26 -0
  1004. package/dist/migrations/migrateReplBridgeEnabledToRemoteControlAtStartup.js +14 -0
  1005. package/dist/migrations/migrateSonnet1mToSonnet45.js +32 -0
  1006. package/dist/migrations/migrateSonnet45ToSonnet46.js +44 -0
  1007. package/dist/migrations/resetAutoModeOptInForDefaultOffer.js +34 -0
  1008. package/dist/migrations/resetProToOpusDefault.js +45 -0
  1009. package/dist/moreright/useMoreRight.js +11 -0
  1010. package/dist/native-ts/color-diff/index.js +714 -0
  1011. package/dist/native-ts/file-index/index.js +310 -0
  1012. package/dist/native-ts/file-search/index.js +73 -0
  1013. package/dist/native-ts/yoga-layout/enums.js +114 -0
  1014. package/dist/native-ts/yoga-layout/index.js +1815 -0
  1015. package/dist/outputStyles/loadOutputStylesDir.js +65 -0
  1016. package/dist/plugins/builtinPlugins.js +99 -0
  1017. package/dist/plugins/bundled/index.js +5 -0
  1018. package/dist/projectOnboardingState.js +65 -0
  1019. package/dist/public/leak-tweet.png +0 -0
  1020. package/dist/public/memcode-files.png +0 -0
  1021. package/dist/query/config.js +24 -0
  1022. package/dist/query/deps.js +15 -0
  1023. package/dist/query/stopHooks.js +327 -0
  1024. package/dist/query/tokenBudget.js +51 -0
  1025. package/dist/query.js +1160 -0
  1026. package/dist/remote/RemoteSessionManager.js +210 -0
  1027. package/dist/remote/SessionsWebSocket.js +291 -0
  1028. package/dist/remote/remotePermissionBridge.js +60 -0
  1029. package/dist/remote/sdkMessageAdapter.js +171 -0
  1030. package/dist/replLauncher.js +22 -0
  1031. package/dist/schemas/hooks.js +110 -0
  1032. package/dist/screens/Doctor.js +789 -0
  1033. package/dist/screens/REPL.js +4977 -0
  1034. package/dist/screens/ResumeConversation.js +365 -0
  1035. package/dist/server/createDirectConnectSession.js +64 -0
  1036. package/dist/server/directConnectManager.js +143 -0
  1037. package/dist/server/types.js +12 -0
  1038. package/dist/server/xmemServer.js +172 -0
  1039. package/dist/services/AgentSummary/agentSummary.js +121 -0
  1040. package/dist/services/MagicDocs/magicDocs.js +168 -0
  1041. package/dist/services/MagicDocs/prompts.js +91 -0
  1042. package/dist/services/PromptSuggestion/promptSuggestion.js +380 -0
  1043. package/dist/services/PromptSuggestion/speculation.js +706 -0
  1044. package/dist/services/SessionMemory/prompts.js +247 -0
  1045. package/dist/services/SessionMemory/sessionMemory.js +298 -0
  1046. package/dist/services/SessionMemory/sessionMemoryUtils.js +111 -0
  1047. package/dist/services/analytics/config.js +12 -0
  1048. package/dist/services/analytics/datadog.js +225 -0
  1049. package/dist/services/analytics/firstPartyEventLogger.js +274 -0
  1050. package/dist/services/analytics/firstPartyEventLoggingExporter.js +548 -0
  1051. package/dist/services/analytics/growthbook.js +638 -0
  1052. package/dist/services/analytics/index.js +63 -0
  1053. package/dist/services/analytics/metadata.js +535 -0
  1054. package/dist/services/analytics/sink.js +48 -0
  1055. package/dist/services/analytics/sinkKillswitch.js +9 -0
  1056. package/dist/services/api/adminRequests.js +45 -0
  1057. package/dist/services/api/bootstrap.js +126 -0
  1058. package/dist/services/api/client.js +299 -0
  1059. package/dist/services/api/dumpPrompts.js +164 -0
  1060. package/dist/services/api/emptyUsage.js +18 -0
  1061. package/dist/services/api/errorUtils.js +148 -0
  1062. package/dist/services/api/errors.js +710 -0
  1063. package/dist/services/api/filesApi.js +450 -0
  1064. package/dist/services/api/firstTokenDate.js +49 -0
  1065. package/dist/services/api/gemini.js +22 -0
  1066. package/dist/services/api/geminiAdapter.js +92 -0
  1067. package/dist/services/api/geminiClient.js +522 -0
  1068. package/dist/services/api/grove.js +258 -0
  1069. package/dist/services/api/logging.js +511 -0
  1070. package/dist/services/api/memcode.js +2207 -0
  1071. package/dist/services/api/metricsOptOut.js +98 -0
  1072. package/dist/services/api/nvidiaClient.js +653 -0
  1073. package/dist/services/api/openAICompatibleClient.js +576 -0
  1074. package/dist/services/api/openRouterClient.js +636 -0
  1075. package/dist/services/api/overageCreditGrant.js +80 -0
  1076. package/dist/services/api/promptCacheBreakDetection.js +442 -0
  1077. package/dist/services/api/reasoning.js +94 -0
  1078. package/dist/services/api/referral.js +195 -0
  1079. package/dist/services/api/sessionIngress.js +323 -0
  1080. package/dist/services/api/ultrareviewQuota.js +28 -0
  1081. package/dist/services/api/usage.js +38 -0
  1082. package/dist/services/api/withRetry.js +522 -0
  1083. package/dist/services/autoDream/autoDream.js +215 -0
  1084. package/dist/services/autoDream/config.js +14 -0
  1085. package/dist/services/autoDream/consolidationLock.js +89 -0
  1086. package/dist/services/autoDream/consolidationPrompt.js +64 -0
  1087. package/dist/services/awaySummary.js +63 -0
  1088. package/dist/services/compact/apiMicrocompact.js +89 -0
  1089. package/dist/services/compact/autoCompact.js +216 -0
  1090. package/dist/services/compact/cachedMCConfig.js +4 -0
  1091. package/dist/services/compact/cachedMicrocompact.js +55 -0
  1092. package/dist/services/compact/compact.js +1132 -0
  1093. package/dist/services/compact/compactWarningHook.js +11 -0
  1094. package/dist/services/compact/compactWarningState.js +13 -0
  1095. package/dist/services/compact/grouping.js +23 -0
  1096. package/dist/services/compact/microCompact.js +296 -0
  1097. package/dist/services/compact/postCompactCleanup.js +36 -0
  1098. package/dist/services/compact/prompt.js +327 -0
  1099. package/dist/services/compact/reactiveCompact.js +26 -0
  1100. package/dist/services/compact/sessionMemoryCompact.js +364 -0
  1101. package/dist/services/compact/snipCompact.js +8 -0
  1102. package/dist/services/compact/snipProjection.js +6 -0
  1103. package/dist/services/compact/timeBasedMCConfig.js +15 -0
  1104. package/dist/services/contextCollapse/index.js +37 -0
  1105. package/dist/services/contextCollapse/operations.js +6 -0
  1106. package/dist/services/contextCollapse/persist.js +5 -0
  1107. package/dist/services/diagnosticTracking.js +270 -0
  1108. package/dist/services/extractMemories/extractMemories.js +287 -0
  1109. package/dist/services/extractMemories/prompts.js +119 -0
  1110. package/dist/services/internalLogging.js +58 -0
  1111. package/dist/services/lsp/LSPClient.js +301 -0
  1112. package/dist/services/lsp/LSPDiagnosticRegistry.js +224 -0
  1113. package/dist/services/lsp/LSPServerInstance.js +292 -0
  1114. package/dist/services/lsp/LSPServerManager.js +260 -0
  1115. package/dist/services/lsp/config.js +52 -0
  1116. package/dist/services/lsp/manager.js +148 -0
  1117. package/dist/services/lsp/passiveFeedback.js +193 -0
  1118. package/dist/services/mcp/InProcessTransport.js +42 -0
  1119. package/dist/services/mcp/MCPConnectionManager.js +59 -0
  1120. package/dist/services/mcp/SdkControlTransport.js +59 -0
  1121. package/dist/services/mcp/auth.js +1723 -0
  1122. package/dist/services/mcp/channelAllowlist.js +36 -0
  1123. package/dist/services/mcp/channelNotification.js +141 -0
  1124. package/dist/services/mcp/channelPermissions.js +98 -0
  1125. package/dist/services/mcp/client.js +2269 -0
  1126. package/dist/services/mcp/config.js +1028 -0
  1127. package/dist/services/mcp/elicitationHandler.js +209 -0
  1128. package/dist/services/mcp/envExpansion.js +22 -0
  1129. package/dist/services/mcp/headersHelper.js +88 -0
  1130. package/dist/services/mcp/mcpStringUtils.js +41 -0
  1131. package/dist/services/mcp/memcodeProxy.js +106 -0
  1132. package/dist/services/mcp/normalization.js +11 -0
  1133. package/dist/services/mcp/oauthPort.js +51 -0
  1134. package/dist/services/mcp/officialRegistry.js +50 -0
  1135. package/dist/services/mcp/types.js +123 -0
  1136. package/dist/services/mcp/useManageMCPConnections.js +770 -0
  1137. package/dist/services/mcp/utils.js +314 -0
  1138. package/dist/services/mcp/vscodeSdkMcp.js +85 -0
  1139. package/dist/services/mcp/xaa.js +301 -0
  1140. package/dist/services/mcp/xaaIdpLogin.js +329 -0
  1141. package/dist/services/mcpServerApproval.js +28 -0
  1142. package/dist/services/memcodeLimits.js +318 -0
  1143. package/dist/services/memcodeLimitsHook.js +21 -0
  1144. package/dist/services/mockRateLimits.js +585 -0
  1145. package/dist/services/notifier.js +115 -0
  1146. package/dist/services/oauth/auth-code-listener.js +152 -0
  1147. package/dist/services/oauth/client.js +372 -0
  1148. package/dist/services/oauth/crypto.js +20 -0
  1149. package/dist/services/oauth/getOauthProfile.js +48 -0
  1150. package/dist/services/oauth/index.js +120 -0
  1151. package/dist/services/openAIVoiceSTT.js +242 -0
  1152. package/dist/services/plugins/PluginInstallationManager.js +134 -0
  1153. package/dist/services/plugins/pluginCliCommands.js +205 -0
  1154. package/dist/services/plugins/pluginOperations.js +657 -0
  1155. package/dist/services/policyLimits/index.js +444 -0
  1156. package/dist/services/policyLimits/types.js +10 -0
  1157. package/dist/services/preventSleep.js +103 -0
  1158. package/dist/services/providers/catalog.js +141 -0
  1159. package/dist/services/rateLimitMessages.js +202 -0
  1160. package/dist/services/rateLimitMocking.js +85 -0
  1161. package/dist/services/remoteManagedSettings/index.js +406 -0
  1162. package/dist/services/remoteManagedSettings/securityCheck.js +48 -0
  1163. package/dist/services/remoteManagedSettings/syncCache.js +51 -0
  1164. package/dist/services/remoteManagedSettings/syncCacheState.js +53 -0
  1165. package/dist/services/remoteManagedSettings/types.js +13 -0
  1166. package/dist/services/sessionTranscript/sessionTranscript.js +8 -0
  1167. package/dist/services/settingsSync/index.js +420 -0
  1168. package/dist/services/settingsSync/types.js +29 -0
  1169. package/dist/services/skillSearch/featureCheck.js +6 -0
  1170. package/dist/services/skillSearch/localSearch.js +5 -0
  1171. package/dist/services/skillSearch/prefetch.js +13 -0
  1172. package/dist/services/skillSearch/remoteSkillLoader.js +6 -0
  1173. package/dist/services/skillSearch/remoteSkillState.js +10 -0
  1174. package/dist/services/skillSearch/signals.js +0 -0
  1175. package/dist/services/skillSearch/telemetry.js +5 -0
  1176. package/dist/services/teamMemorySync/index.js +813 -0
  1177. package/dist/services/teamMemorySync/secretScanner.js +233 -0
  1178. package/dist/services/teamMemorySync/teamMemSecretGuard.js +20 -0
  1179. package/dist/services/teamMemorySync/types.js +39 -0
  1180. package/dist/services/teamMemorySync/watcher.js +236 -0
  1181. package/dist/services/tips/tipHistory.js +19 -0
  1182. package/dist/services/tips/tipRegistry.js +583 -0
  1183. package/dist/services/tips/tipScheduler.js +42 -0
  1184. package/dist/services/tokenEstimation.js +310 -0
  1185. package/dist/services/toolUseSummary/toolUseSummaryGenerator.js +76 -0
  1186. package/dist/services/tools/StreamingToolExecutor.js +391 -0
  1187. package/dist/services/tools/toolExecution.js +1219 -0
  1188. package/dist/services/tools/toolHooks.js +454 -0
  1189. package/dist/services/tools/toolOrchestration.js +137 -0
  1190. package/dist/services/vcr.js +285 -0
  1191. package/dist/services/voice.js +436 -0
  1192. package/dist/services/voiceKeyterms.js +65 -0
  1193. package/dist/services/voiceSTTProvider.js +73 -0
  1194. package/dist/services/voiceSTTTypes.js +0 -0
  1195. package/dist/services/voiceStreamSTT.js +309 -0
  1196. package/dist/setup.js +315 -0
  1197. package/dist/skills/bundled/assistantRoom.js +39 -0
  1198. package/dist/skills/bundled/backgroundSession.js +27 -0
  1199. package/dist/skills/bundled/batch.js +125 -0
  1200. package/dist/skills/bundled/debug.js +91 -0
  1201. package/dist/skills/bundled/github-auth-check/SKILL.md +31 -0
  1202. package/dist/skills/bundled/github-ci-fix/SKILL.md +24 -0
  1203. package/dist/skills/bundled/github-orient/SKILL.md +29 -0
  1204. package/dist/skills/bundled/github-pr/SKILL.md +36 -0
  1205. package/dist/skills/bundled/github-release/SKILL.md +23 -0
  1206. package/dist/skills/bundled/github-review-fix/SKILL.md +25 -0
  1207. package/dist/skills/bundled/github.js +90 -0
  1208. package/dist/skills/bundled/githubContent.js +59 -0
  1209. package/dist/skills/bundled/index.js +40 -0
  1210. package/dist/skills/bundled/keybindings.js +304 -0
  1211. package/dist/skills/bundled/loop.js +90 -0
  1212. package/dist/skills/bundled/loremIpsum.js +273 -0
  1213. package/dist/skills/bundled/remember.js +89 -0
  1214. package/dist/skills/bundled/simplify.js +74 -0
  1215. package/dist/skills/bundled/skillify.js +178 -0
  1216. package/dist/skills/bundled/stuck.js +60 -0
  1217. package/dist/skills/bundled/updateConfig.js +475 -0
  1218. package/dist/skills/bundled/verify/SKILL.md +26 -0
  1219. package/dist/skills/bundled/verify/examples/cli.md +9 -0
  1220. package/dist/skills/bundled/verify/examples/server.md +9 -0
  1221. package/dist/skills/bundled/verify.js +25 -0
  1222. package/dist/skills/bundled/verifyContent.js +12 -0
  1223. package/dist/skills/bundledSkills.js +124 -0
  1224. package/dist/skills/loadSkillsDir.js +687 -0
  1225. package/dist/skills/mcpSkillBuilders.js +16 -0
  1226. package/dist/skills/mcpSkills.js +7 -0
  1227. package/dist/src/ui/Eye.js +125 -0
  1228. package/dist/src/ui/eye-frames.js +134 -0
  1229. package/dist/src/ui/ink-primitives.js +26 -0
  1230. package/dist/src/ui/preview.js +93 -0
  1231. package/dist/state/AppState.js +155 -0
  1232. package/dist/state/AppStateStore.js +120 -0
  1233. package/dist/state/onChangeAppState.js +98 -0
  1234. package/dist/state/selectors.js +33 -0
  1235. package/dist/state/store.js +22 -0
  1236. package/dist/state/teammateViewHelpers.js +89 -0
  1237. package/dist/tasks/DreamTask/DreamTask.js +86 -0
  1238. package/dist/tasks/InProcessTeammateTask/InProcessTeammateTask.js +79 -0
  1239. package/dist/tasks/InProcessTeammateTask/types.js +20 -0
  1240. package/dist/tasks/LocalAgentTask/LocalAgentTask.js +471 -0
  1241. package/dist/tasks/LocalMainSessionTask.js +292 -0
  1242. package/dist/tasks/LocalShellTask/LocalShellTask.js +445 -0
  1243. package/dist/tasks/LocalShellTask/guards.js +6 -0
  1244. package/dist/tasks/LocalShellTask/killShellTasks.js +50 -0
  1245. package/dist/tasks/LocalWorkflowTask/LocalWorkflowTask.js +11 -0
  1246. package/dist/tasks/MonitorMcpTask/MonitorMcpTask.js +8 -0
  1247. package/dist/tasks/RemoteAgentTask/RemoteAgentTask.js +540 -0
  1248. package/dist/tasks/pillLabel.js +85 -0
  1249. package/dist/tasks/stopTask.js +62 -0
  1250. package/dist/tasks/types.js +12 -0
  1251. package/dist/tasks.js +25 -0
  1252. package/dist/tools/AgentTool/AgentTool.js +1053 -0
  1253. package/dist/tools/AgentTool/UI.js +679 -0
  1254. package/dist/tools/AgentTool/agentColorManager.js +48 -0
  1255. package/dist/tools/AgentTool/agentDisplay.js +50 -0
  1256. package/dist/tools/AgentTool/agentMemory.js +104 -0
  1257. package/dist/tools/AgentTool/agentMemorySnapshot.js +131 -0
  1258. package/dist/tools/AgentTool/agentToolUtils.js +529 -0
  1259. package/dist/tools/AgentTool/built-in/exploreAgent.js +74 -0
  1260. package/dist/tools/AgentTool/built-in/generalPurposeAgent.js +30 -0
  1261. package/dist/tools/AgentTool/built-in/memcodeGuideAgent.js +138 -0
  1262. package/dist/tools/AgentTool/built-in/planAgent.js +86 -0
  1263. package/dist/tools/AgentTool/built-in/statuslineSetup.js +143 -0
  1264. package/dist/tools/AgentTool/built-in/verificationAgent.js +149 -0
  1265. package/dist/tools/AgentTool/builtInAgents.js +56 -0
  1266. package/dist/tools/AgentTool/constants.js +13 -0
  1267. package/dist/tools/AgentTool/forkSubagent.js +127 -0
  1268. package/dist/tools/AgentTool/loadAgentsDir.js +474 -0
  1269. package/dist/tools/AgentTool/prompt.js +200 -0
  1270. package/dist/tools/AgentTool/resumeAgent.js +217 -0
  1271. package/dist/tools/AgentTool/runAgent.js +582 -0
  1272. package/dist/tools/ApplyPatchTool/ApplyPatchTool.js +359 -0
  1273. package/dist/tools/ApplyPatchTool/applyPatch.js +223 -0
  1274. package/dist/tools/ApplyPatchTool/constants.js +4 -0
  1275. package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js +258 -0
  1276. package/dist/tools/AskUserQuestionTool/prompt.js +45 -0
  1277. package/dist/tools/BashTool/BashTool.js +887 -0
  1278. package/dist/tools/BashTool/BashToolResultMessage.js +174 -0
  1279. package/dist/tools/BashTool/UI.js +155 -0
  1280. package/dist/tools/BashTool/bashCommandHelpers.js +164 -0
  1281. package/dist/tools/BashTool/bashPermissions.js +1606 -0
  1282. package/dist/tools/BashTool/bashSecurity.js +1483 -0
  1283. package/dist/tools/BashTool/commandSemantics.js +81 -0
  1284. package/dist/tools/BashTool/commentLabel.js +9 -0
  1285. package/dist/tools/BashTool/destructiveCommandWarning.js +82 -0
  1286. package/dist/tools/BashTool/modeValidation.js +69 -0
  1287. package/dist/tools/BashTool/pathValidation.js +819 -0
  1288. package/dist/tools/BashTool/prompt.js +317 -0
  1289. package/dist/tools/BashTool/readOnlyValidation.js +1727 -0
  1290. package/dist/tools/BashTool/sedEditParser.js +180 -0
  1291. package/dist/tools/BashTool/sedValidation.js +386 -0
  1292. package/dist/tools/BashTool/shouldUseSandbox.js +106 -0
  1293. package/dist/tools/BashTool/toolName.js +4 -0
  1294. package/dist/tools/BashTool/utils.js +150 -0
  1295. package/dist/tools/BriefTool/BriefTool.js +128 -0
  1296. package/dist/tools/BriefTool/UI.js +97 -0
  1297. package/dist/tools/BriefTool/attachments.js +73 -0
  1298. package/dist/tools/BriefTool/prompt.js +26 -0
  1299. package/dist/tools/BriefTool/upload.js +109 -0
  1300. package/dist/tools/ConfigTool/ConfigTool.js +381 -0
  1301. package/dist/tools/ConfigTool/UI.js +49 -0
  1302. package/dist/tools/ConfigTool/constants.js +4 -0
  1303. package/dist/tools/ConfigTool/prompt.js +76 -0
  1304. package/dist/tools/ConfigTool/supportedSettings.js +175 -0
  1305. package/dist/tools/EnterPlanModeTool/EnterPlanModeTool.js +106 -0
  1306. package/dist/tools/EnterPlanModeTool/UI.js +17 -0
  1307. package/dist/tools/EnterPlanModeTool/constants.js +4 -0
  1308. package/dist/tools/EnterPlanModeTool/prompt.js +157 -0
  1309. package/dist/tools/EnterWorktreeTool/EnterWorktreeTool.js +122 -0
  1310. package/dist/tools/EnterWorktreeTool/UI.js +18 -0
  1311. package/dist/tools/EnterWorktreeTool/constants.js +4 -0
  1312. package/dist/tools/EnterWorktreeTool/prompt.js +33 -0
  1313. package/dist/tools/ExitPlanModeTool/ExitPlanModeV2Tool.js +342 -0
  1314. package/dist/tools/ExitPlanModeTool/UI.js +71 -0
  1315. package/dist/tools/ExitPlanModeTool/constants.js +6 -0
  1316. package/dist/tools/ExitPlanModeTool/prompt.js +28 -0
  1317. package/dist/tools/ExitWorktreeTool/ExitWorktreeTool.js +255 -0
  1318. package/dist/tools/ExitWorktreeTool/UI.js +27 -0
  1319. package/dist/tools/ExitWorktreeTool/constants.js +4 -0
  1320. package/dist/tools/ExitWorktreeTool/prompt.js +35 -0
  1321. package/dist/tools/FileEditTool/FileEditTool.js +480 -0
  1322. package/dist/tools/FileEditTool/UI.js +228 -0
  1323. package/dist/tools/FileEditTool/constants.js +10 -0
  1324. package/dist/tools/FileEditTool/prompt.js +25 -0
  1325. package/dist/tools/FileEditTool/types.js +53 -0
  1326. package/dist/tools/FileEditTool/utils.js +440 -0
  1327. package/dist/tools/FileReadTool/FileReadTool.js +859 -0
  1328. package/dist/tools/FileReadTool/UI.js +177 -0
  1329. package/dist/tools/FileReadTool/imageProcessor.js +40 -0
  1330. package/dist/tools/FileReadTool/limits.js +35 -0
  1331. package/dist/tools/FileReadTool/prompt.js +34 -0
  1332. package/dist/tools/FileWriteTool/FileWriteTool.js +330 -0
  1333. package/dist/tools/FileWriteTool/UI.js +369 -0
  1334. package/dist/tools/FileWriteTool/prompt.js +21 -0
  1335. package/dist/tools/GlobTool/GlobTool.js +174 -0
  1336. package/dist/tools/GlobTool/UI.js +52 -0
  1337. package/dist/tools/GlobTool/prompt.js +10 -0
  1338. package/dist/tools/GrepTool/GrepTool.js +586 -0
  1339. package/dist/tools/GrepTool/UI.js +198 -0
  1340. package/dist/tools/GrepTool/prompt.js +20 -0
  1341. package/dist/tools/LSPTool/LSPTool.js +627 -0
  1342. package/dist/tools/LSPTool/UI.js +230 -0
  1343. package/dist/tools/LSPTool/formatters.js +384 -0
  1344. package/dist/tools/LSPTool/prompt.js +24 -0
  1345. package/dist/tools/LSPTool/schemas.js +86 -0
  1346. package/dist/tools/LSPTool/symbolContext.js +48 -0
  1347. package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js +103 -0
  1348. package/dist/tools/ListMcpResourcesTool/UI.js +21 -0
  1349. package/dist/tools/ListMcpResourcesTool/prompt.js +23 -0
  1350. package/dist/tools/MCPTool/MCPTool.js +70 -0
  1351. package/dist/tools/MCPTool/UI.js +324 -0
  1352. package/dist/tools/MCPTool/classifyForCollapse.js +584 -0
  1353. package/dist/tools/MCPTool/prompt.js +6 -0
  1354. package/dist/tools/McpAuthTool/McpAuthTool.js +155 -0
  1355. package/dist/tools/NotebookEditTool/NotebookEditTool.js +394 -0
  1356. package/dist/tools/NotebookEditTool/UI.js +76 -0
  1357. package/dist/tools/NotebookEditTool/constants.js +4 -0
  1358. package/dist/tools/NotebookEditTool/prompt.js +6 -0
  1359. package/dist/tools/PowerShellTool/PowerShellTool.js +736 -0
  1360. package/dist/tools/PowerShellTool/UI.js +101 -0
  1361. package/dist/tools/PowerShellTool/clmTypes.js +182 -0
  1362. package/dist/tools/PowerShellTool/commandSemantics.js +52 -0
  1363. package/dist/tools/PowerShellTool/commonParameters.js +22 -0
  1364. package/dist/tools/PowerShellTool/destructiveCommandWarning.js +86 -0
  1365. package/dist/tools/PowerShellTool/gitSafety.js +88 -0
  1366. package/dist/tools/PowerShellTool/modeValidation.js +202 -0
  1367. package/dist/tools/PowerShellTool/pathValidation.js +1448 -0
  1368. package/dist/tools/PowerShellTool/powershellPermissions.js +891 -0
  1369. package/dist/tools/PowerShellTool/powershellSecurity.js +625 -0
  1370. package/dist/tools/PowerShellTool/prompt.js +133 -0
  1371. package/dist/tools/PowerShellTool/readOnlyValidation.js +1230 -0
  1372. package/dist/tools/PowerShellTool/toolName.js +4 -0
  1373. package/dist/tools/REPLTool/constants.js +32 -0
  1374. package/dist/tools/REPLTool/primitiveTools.js +26 -0
  1375. package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js +142 -0
  1376. package/dist/tools/ReadMcpResourceTool/UI.js +28 -0
  1377. package/dist/tools/ReadMcpResourceTool/prompt.js +19 -0
  1378. package/dist/tools/RemoteTriggerTool/RemoteTriggerTool.js +142 -0
  1379. package/dist/tools/RemoteTriggerTool/UI.js +24 -0
  1380. package/dist/tools/RemoteTriggerTool/prompt.js +17 -0
  1381. package/dist/tools/ScheduleCronTool/CronCreateTool.js +136 -0
  1382. package/dist/tools/ScheduleCronTool/CronDeleteTool.js +90 -0
  1383. package/dist/tools/ScheduleCronTool/CronListTool.js +85 -0
  1384. package/dist/tools/ScheduleCronTool/UI.js +49 -0
  1385. package/dist/tools/ScheduleCronTool/prompt.js +90 -0
  1386. package/dist/tools/SendMessageTool/SendMessageTool.js +745 -0
  1387. package/dist/tools/SendMessageTool/UI.js +29 -0
  1388. package/dist/tools/SendMessageTool/constants.js +4 -0
  1389. package/dist/tools/SendMessageTool/prompt.js +66 -0
  1390. package/dist/tools/SkillTool/SkillTool.js +762 -0
  1391. package/dist/tools/SkillTool/UI.js +93 -0
  1392. package/dist/tools/SkillTool/constants.js +4 -0
  1393. package/dist/tools/SkillTool/prompt.js +181 -0
  1394. package/dist/tools/SleepTool/SleepTool.js +97 -0
  1395. package/dist/tools/SleepTool/prompt.js +19 -0
  1396. package/dist/tools/SyntheticOutputTool/SyntheticOutputTool.js +130 -0
  1397. package/dist/tools/TaskCreateTool/TaskCreateTool.js +123 -0
  1398. package/dist/tools/TaskCreateTool/constants.js +4 -0
  1399. package/dist/tools/TaskCreateTool/prompt.js +52 -0
  1400. package/dist/tools/TaskGetTool/TaskGetTool.js +116 -0
  1401. package/dist/tools/TaskGetTool/constants.js +4 -0
  1402. package/dist/tools/TaskGetTool/prompt.js +27 -0
  1403. package/dist/tools/TaskListTool/TaskListTool.js +102 -0
  1404. package/dist/tools/TaskListTool/constants.js +4 -0
  1405. package/dist/tools/TaskListTool/prompt.js +42 -0
  1406. package/dist/tools/TaskOutputTool/TaskOutputTool.js +582 -0
  1407. package/dist/tools/TaskOutputTool/constants.js +4 -0
  1408. package/dist/tools/TaskStopTool/TaskStopTool.js +109 -0
  1409. package/dist/tools/TaskStopTool/UI.js +39 -0
  1410. package/dist/tools/TaskStopTool/prompt.js +11 -0
  1411. package/dist/tools/TaskUpdateTool/TaskUpdateTool.js +311 -0
  1412. package/dist/tools/TaskUpdateTool/constants.js +4 -0
  1413. package/dist/tools/TaskUpdateTool/prompt.js +80 -0
  1414. package/dist/tools/TeamCreateTool/TeamCreateTool.js +173 -0
  1415. package/dist/tools/TeamCreateTool/UI.js +6 -0
  1416. package/dist/tools/TeamCreateTool/constants.js +4 -0
  1417. package/dist/tools/TeamCreateTool/prompt.js +116 -0
  1418. package/dist/tools/TeamDeleteTool/TeamDeleteTool.js +102 -0
  1419. package/dist/tools/TeamDeleteTool/UI.js +17 -0
  1420. package/dist/tools/TeamDeleteTool/constants.js +4 -0
  1421. package/dist/tools/TeamDeleteTool/prompt.js +19 -0
  1422. package/dist/tools/TodoWriteTool/TodoWriteTool.js +96 -0
  1423. package/dist/tools/TodoWriteTool/constants.js +4 -0
  1424. package/dist/tools/TodoWriteTool/prompt.js +185 -0
  1425. package/dist/tools/ToolSearchTool/ToolSearchTool.js +359 -0
  1426. package/dist/tools/ToolSearchTool/constants.js +4 -0
  1427. package/dist/tools/ToolSearchTool/prompt.js +65 -0
  1428. package/dist/tools/TungstenTool/TungstenTool.js +12 -0
  1429. package/dist/tools/WebBrowserTool/WebBrowserPanel.js +6 -0
  1430. package/dist/tools/WebFetchTool/UI.js +67 -0
  1431. package/dist/tools/WebFetchTool/WebFetchTool.js +261 -0
  1432. package/dist/tools/WebFetchTool/preapproved.js +219 -0
  1433. package/dist/tools/WebFetchTool/prompt.js +42 -0
  1434. package/dist/tools/WebFetchTool/utils.js +330 -0
  1435. package/dist/tools/WebSearchTool/UI.js +96 -0
  1436. package/dist/tools/WebSearchTool/WebSearchTool.js +440 -0
  1437. package/dist/tools/WebSearchTool/prompt.js +35 -0
  1438. package/dist/tools/WorkflowTool/constants.js +6 -0
  1439. package/dist/tools/XMemIngestTool/XMemIngestTool.js +158 -0
  1440. package/dist/tools/XMemIngestTool/prompt.js +16 -0
  1441. package/dist/tools/XMemRetrieveTool/XMemRetrieveTool.js +185 -0
  1442. package/dist/tools/XMemRetrieveTool/prompt.js +20 -0
  1443. package/dist/tools/XMemSearchTool/XMemSearchTool.js +190 -0
  1444. package/dist/tools/XMemSearchTool/prompt.js +14 -0
  1445. package/dist/tools/ink-render-mcp/package-lock.json +1177 -0
  1446. package/dist/tools/ink-render-mcp/package.json +13 -0
  1447. package/dist/tools/ink-render-mcp/sample/Hello.js +17 -0
  1448. package/dist/tools/ink-render-mcp/sample/Hello.snapshot.txt +6 -0
  1449. package/dist/tools/ink-render-mcp/tsconfig.runner.json +12 -0
  1450. package/dist/tools/shared/gitOperationTracking.js +169 -0
  1451. package/dist/tools/shared/spawnMultiAgent.js +687 -0
  1452. package/dist/tools/testing/TestingPermissionTool.js +69 -0
  1453. package/dist/tools/tui-vision-mcp/package-lock.json +1177 -0
  1454. package/dist/tools/tui-vision-mcp/package.json +11 -0
  1455. package/dist/tools/utils.js +23 -0
  1456. package/dist/tools.js +360 -0
  1457. package/dist/tsconfig.json +19 -0
  1458. package/dist/types/command.js +10 -0
  1459. package/dist/types/connectorText.js +6 -0
  1460. package/dist/types/generated/events_mono/claude_code/v1/claude_code_internal_event.js +535 -0
  1461. package/dist/types/generated/events_mono/common/v1/auth.js +41 -0
  1462. package/dist/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.js +115 -0
  1463. package/dist/types/generated/google/protobuf/timestamp.js +36 -0
  1464. package/dist/types/hooks.js +136 -0
  1465. package/dist/types/ids.js +15 -0
  1466. package/dist/types/logs.js +12 -0
  1467. package/dist/types/message.js +0 -0
  1468. package/dist/types/notebook.js +0 -0
  1469. package/dist/types/permissions.js +18 -0
  1470. package/dist/types/plugin.js +67 -0
  1471. package/dist/types/textInputTypes.js +14 -0
  1472. package/dist/types/tools.js +0 -0
  1473. package/dist/types/utils.js +0 -0
  1474. package/dist/upstreamproxy/relay.js +265 -0
  1475. package/dist/upstreamproxy/upstreamproxy.js +195 -0
  1476. package/dist/utils/CircularBuffer.js +73 -0
  1477. package/dist/utils/Cursor.js +1103 -0
  1478. package/dist/utils/QueryGuard.js +86 -0
  1479. package/dist/utils/Shell.js +315 -0
  1480. package/dist/utils/ShellCommand.js +307 -0
  1481. package/dist/utils/abortController.js +39 -0
  1482. package/dist/utils/activityManager.js +117 -0
  1483. package/dist/utils/advisor.js +79 -0
  1484. package/dist/utils/agentContext.js +44 -0
  1485. package/dist/utils/agentId.js +42 -0
  1486. package/dist/utils/agentSwarmsEnabled.js +20 -0
  1487. package/dist/utils/agenticSessionSearch.js +195 -0
  1488. package/dist/utils/analyzeContext.js +857 -0
  1489. package/dist/utils/ansiToPng.js +212 -0
  1490. package/dist/utils/ansiToSvg.js +210 -0
  1491. package/dist/utils/api.js +478 -0
  1492. package/dist/utils/apiKeyHelper.js +11 -0
  1493. package/dist/utils/apiPreconnect.js +22 -0
  1494. package/dist/utils/appleTerminalBackup.js +102 -0
  1495. package/dist/utils/argumentSubstitution.js +67 -0
  1496. package/dist/utils/array.js +16 -0
  1497. package/dist/utils/asciicast.js +167 -0
  1498. package/dist/utils/attachments.js +2340 -0
  1499. package/dist/utils/attribution.js +234 -0
  1500. package/dist/utils/auth.js +1329 -0
  1501. package/dist/utils/authFileDescriptor.js +127 -0
  1502. package/dist/utils/authPortable.js +21 -0
  1503. package/dist/utils/autoModeDenials.js +14 -0
  1504. package/dist/utils/autoRunIssue.js +112 -0
  1505. package/dist/utils/autoUpdater.js +387 -0
  1506. package/dist/utils/aws.js +38 -0
  1507. package/dist/utils/awsAuthStatusManager.js +58 -0
  1508. package/dist/utils/axios.js +8 -0
  1509. package/dist/utils/background/remote/preconditions.js +160 -0
  1510. package/dist/utils/background/remote/remoteSession.js +49 -0
  1511. package/dist/utils/backgroundHousekeeping.js +64 -0
  1512. package/dist/utils/bash/ParsedCommand.js +213 -0
  1513. package/dist/utils/bash/ShellSnapshot.js +387 -0
  1514. package/dist/utils/bash/ast.js +1408 -0
  1515. package/dist/utils/bash/bashParser.js +3380 -0
  1516. package/dist/utils/bash/bashPipeCommand.js +140 -0
  1517. package/dist/utils/bash/commands.js +772 -0
  1518. package/dist/utils/bash/heredoc.js +283 -0
  1519. package/dist/utils/bash/parser.js +152 -0
  1520. package/dist/utils/bash/prefix.js +127 -0
  1521. package/dist/utils/bash/registry.js +24 -0
  1522. package/dist/utils/bash/shellCompletion.js +137 -0
  1523. package/dist/utils/bash/shellPrefix.js +14 -0
  1524. package/dist/utils/bash/shellQuote.js +167 -0
  1525. package/dist/utils/bash/shellQuoting.js +49 -0
  1526. package/dist/utils/bash/specs/alias.js +14 -0
  1527. package/dist/utils/bash/specs/index.js +19 -0
  1528. package/dist/utils/bash/specs/nohup.js +13 -0
  1529. package/dist/utils/bash/specs/pyright.js +91 -0
  1530. package/dist/utils/bash/specs/sleep.js +13 -0
  1531. package/dist/utils/bash/specs/srun.js +31 -0
  1532. package/dist/utils/bash/specs/time.js +13 -0
  1533. package/dist/utils/bash/specs/timeout.js +20 -0
  1534. package/dist/utils/bash/treeSitterAnalysis.js +263 -0
  1535. package/dist/utils/betas.js +244 -0
  1536. package/dist/utils/billing.js +51 -0
  1537. package/dist/utils/binaryCheck.js +33 -0
  1538. package/dist/utils/browser.js +57 -0
  1539. package/dist/utils/bufferedWriter.js +74 -0
  1540. package/dist/utils/bundledMode.js +10 -0
  1541. package/dist/utils/caCerts.js +66 -0
  1542. package/dist/utils/caCertsConfig.js +41 -0
  1543. package/dist/utils/cachePaths.js +30 -0
  1544. package/dist/utils/classifierApprovals.js +70 -0
  1545. package/dist/utils/classifierApprovalsHook.js +14 -0
  1546. package/dist/utils/cleanup.js +459 -0
  1547. package/dist/utils/cleanupRegistry.js +12 -0
  1548. package/dist/utils/cliArgs.js +25 -0
  1549. package/dist/utils/cliHighlight.js +30 -0
  1550. package/dist/utils/codeIndexing.js +105 -0
  1551. package/dist/utils/collapseBackgroundBashNotifications.js +57 -0
  1552. package/dist/utils/collapseHookSummaries.js +41 -0
  1553. package/dist/utils/collapseReadSearch.js +622 -0
  1554. package/dist/utils/collapseTeammateShutdowns.js +37 -0
  1555. package/dist/utils/color-diff-mock.js +25 -0
  1556. package/dist/utils/combinedAbortSignal.js +30 -0
  1557. package/dist/utils/commandLifecycle.js +11 -0
  1558. package/dist/utils/commitAttribution.js +572 -0
  1559. package/dist/utils/completionCache.js +131 -0
  1560. package/dist/utils/computerUse/appNames.js +110 -0
  1561. package/dist/utils/computerUse/cleanup.js +49 -0
  1562. package/dist/utils/computerUse/common.js +31 -0
  1563. package/dist/utils/computerUse/computerUseLock.js +124 -0
  1564. package/dist/utils/computerUse/drainRunLoop.js +50 -0
  1565. package/dist/utils/computerUse/escHotkey.js +35 -0
  1566. package/dist/utils/computerUse/executor.js +411 -0
  1567. package/dist/utils/computerUse/gates.js +47 -0
  1568. package/dist/utils/computerUse/hostAdapter.js +56 -0
  1569. package/dist/utils/computerUse/inputLoader.js +12 -0
  1570. package/dist/utils/computerUse/mcpServer.js +72 -0
  1571. package/dist/utils/computerUse/setup.js +31 -0
  1572. package/dist/utils/computerUse/swiftLoader.js +10 -0
  1573. package/dist/utils/computerUse/toolRendering.js +93 -0
  1574. package/dist/utils/computerUse/wrapper.js +268 -0
  1575. package/dist/utils/concurrentSessions.js +127 -0
  1576. package/dist/utils/config.js +930 -0
  1577. package/dist/utils/configConstants.js +16 -0
  1578. package/dist/utils/contentArray.js +22 -0
  1579. package/dist/utils/context.js +151 -0
  1580. package/dist/utils/contextAnalysis.js +192 -0
  1581. package/dist/utils/contextSuggestions.js +148 -0
  1582. package/dist/utils/controlMessageCompat.js +19 -0
  1583. package/dist/utils/conversationRecovery.js +324 -0
  1584. package/dist/utils/cron.js +180 -0
  1585. package/dist/utils/cronJitterConfig.js +31 -0
  1586. package/dist/utils/cronScheduler.js +325 -0
  1587. package/dist/utils/cronTasks.js +194 -0
  1588. package/dist/utils/cronTasksLock.js +127 -0
  1589. package/dist/utils/crossProjectResume.js +41 -0
  1590. package/dist/utils/crypto.js +4 -0
  1591. package/dist/utils/cwd.js +21 -0
  1592. package/dist/utils/debug.js +192 -0
  1593. package/dist/utils/debugFilter.js +79 -0
  1594. package/dist/utils/deepLink/banner.js +55 -0
  1595. package/dist/utils/deepLink/parseDeepLink.js +99 -0
  1596. package/dist/utils/deepLink/protocolHandler.js +74 -0
  1597. package/dist/utils/deepLink/registerProtocol.js +270 -0
  1598. package/dist/utils/deepLink/terminalLauncher.js +353 -0
  1599. package/dist/utils/deepLink/terminalPreference.js +25 -0
  1600. package/dist/utils/desktopDeepLink.js +188 -0
  1601. package/dist/utils/detectRepository.js +102 -0
  1602. package/dist/utils/diagLogs.js +51 -0
  1603. package/dist/utils/diff.js +127 -0
  1604. package/dist/utils/directMemberMessage.js +34 -0
  1605. package/dist/utils/displayTags.js +17 -0
  1606. package/dist/utils/doctorContextWarnings.js +164 -0
  1607. package/dist/utils/doctorDiagnostic.js +415 -0
  1608. package/dist/utils/dxt/helpers.js +44 -0
  1609. package/dist/utils/dxt/zip.js +123 -0
  1610. package/dist/utils/earlyInput.js +104 -0
  1611. package/dist/utils/editor.js +108 -0
  1612. package/dist/utils/effort.js +209 -0
  1613. package/dist/utils/embeddedTools.js +13 -0
  1614. package/dist/utils/env.js +240 -0
  1615. package/dist/utils/envDynamic.js +99 -0
  1616. package/dist/utils/envUtils.js +111 -0
  1617. package/dist/utils/envValidation.js +29 -0
  1618. package/dist/utils/errorLogSink.js +149 -0
  1619. package/dist/utils/errors.js +128 -0
  1620. package/dist/utils/exampleCommands.js +138 -0
  1621. package/dist/utils/execFileNoThrow.js +92 -0
  1622. package/dist/utils/execFileNoThrowPortable.js +101 -0
  1623. package/dist/utils/execSyncWrapper.js +63 -0
  1624. package/dist/utils/exportRenderer.js +54 -0
  1625. package/dist/utils/extraUsage.js +15 -0
  1626. package/dist/utils/fastMode.js +367 -0
  1627. package/dist/utils/file.js +353 -0
  1628. package/dist/utils/fileHistory.js +750 -0
  1629. package/dist/utils/fileOperationAnalytics.js +26 -0
  1630. package/dist/utils/filePersistence/filePersistence.js +190 -0
  1631. package/dist/utils/filePersistence/outputsScanner.js +81 -0
  1632. package/dist/utils/filePersistence/types.js +8 -0
  1633. package/dist/utils/fileRead.js +55 -0
  1634. package/dist/utils/fileReadCache.js +67 -0
  1635. package/dist/utils/fileStateCache.js +87 -0
  1636. package/dist/utils/findExecutable.js +8 -0
  1637. package/dist/utils/fingerprint.js +36 -0
  1638. package/dist/utils/forkedAgent.js +318 -0
  1639. package/dist/utils/format.js +211 -0
  1640. package/dist/utils/formatBriefTimestamp.js +52 -0
  1641. package/dist/utils/fpsTracker.js +35 -0
  1642. package/dist/utils/frontmatterParser.js +172 -0
  1643. package/dist/utils/fsOperations.js +619 -0
  1644. package/dist/utils/fullscreen.js +90 -0
  1645. package/dist/utils/generatedFiles.js +115 -0
  1646. package/dist/utils/generators.js +67 -0
  1647. package/dist/utils/genericProcessUtils.js +108 -0
  1648. package/dist/utils/getWorktreePaths.js +38 -0
  1649. package/dist/utils/getWorktreePathsPortable.js +19 -0
  1650. package/dist/utils/ghPrStatus.js +55 -0
  1651. package/dist/utils/git/gitConfigParser.js +168 -0
  1652. package/dist/utils/git/gitFilesystem.js +454 -0
  1653. package/dist/utils/git/gitignore.js +61 -0
  1654. package/dist/utils/git.js +617 -0
  1655. package/dist/utils/gitDiff.js +313 -0
  1656. package/dist/utils/gitSettings.js +11 -0
  1657. package/dist/utils/github/ghAuthStatus.js +18 -0
  1658. package/dist/utils/githubRepoPathMapping.js +103 -0
  1659. package/dist/utils/glob.js +128 -0
  1660. package/dist/utils/gracefulShutdown.js +303 -0
  1661. package/dist/utils/groupToolUses.js +114 -0
  1662. package/dist/utils/handlePromptSubmit.js +355 -0
  1663. package/dist/utils/hash.js +26 -0
  1664. package/dist/utils/headlessProfiler.js +99 -0
  1665. package/dist/utils/heapDumpService.js +175 -0
  1666. package/dist/utils/heatmap.js +120 -0
  1667. package/dist/utils/highlightMatch.js +22 -0
  1668. package/dist/utils/hooks/AsyncHookRegistry.js +231 -0
  1669. package/dist/utils/hooks/apiQueryHookHelper.js +76 -0
  1670. package/dist/utils/hooks/execAgentHook.js +254 -0
  1671. package/dist/utils/hooks/execHttpHook.js +132 -0
  1672. package/dist/utils/hooks/execPromptHook.js +166 -0
  1673. package/dist/utils/hooks/fileChangedWatcher.js +154 -0
  1674. package/dist/utils/hooks/hookEvents.js +99 -0
  1675. package/dist/utils/hooks/hookHelpers.js +60 -0
  1676. package/dist/utils/hooks/hooksConfigManager.js +319 -0
  1677. package/dist/utils/hooks/hooksConfigSnapshot.js +60 -0
  1678. package/dist/utils/hooks/hooksSettings.js +187 -0
  1679. package/dist/utils/hooks/postSamplingHooks.js +31 -0
  1680. package/dist/utils/hooks/registerFrontmatterHooks.js +41 -0
  1681. package/dist/utils/hooks/registerSkillHooks.js +38 -0
  1682. package/dist/utils/hooks/sessionHooks.js +206 -0
  1683. package/dist/utils/hooks/skillImprovement.js +209 -0
  1684. package/dist/utils/hooks/ssrfGuard.js +158 -0
  1685. package/dist/utils/hooks.js +3203 -0
  1686. package/dist/utils/horizontalScroll.js +73 -0
  1687. package/dist/utils/http.js +84 -0
  1688. package/dist/utils/hyperlink.js +18 -0
  1689. package/dist/utils/iTermBackup.js +57 -0
  1690. package/dist/utils/ide.js +1042 -0
  1691. package/dist/utils/idePathConversion.js +54 -0
  1692. package/dist/utils/idleTimeout.js +36 -0
  1693. package/dist/utils/imagePaste.js +262 -0
  1694. package/dist/utils/imageResizer.js +493 -0
  1695. package/dist/utils/imageStore.js +120 -0
  1696. package/dist/utils/imageValidation.js +57 -0
  1697. package/dist/utils/immediateCommand.js +7 -0
  1698. package/dist/utils/inProcessTeammateHelpers.js +34 -0
  1699. package/dist/utils/ink.js +17 -0
  1700. package/dist/utils/intl.js +68 -0
  1701. package/dist/utils/jetbrains.js +149 -0
  1702. package/dist/utils/json.js +231 -0
  1703. package/dist/utils/jsonRead.js +7 -0
  1704. package/dist/utils/keyboardShortcuts.js +15 -0
  1705. package/dist/utils/lazySchema.js +7 -0
  1706. package/dist/utils/listSessionsImpl.js +219 -0
  1707. package/dist/utils/localInstaller.js +107 -0
  1708. package/dist/utils/lockfile.js +40 -0
  1709. package/dist/utils/log.js +201 -0
  1710. package/dist/utils/logoV2Utils.js +214 -0
  1711. package/dist/utils/mailbox.js +52 -0
  1712. package/dist/utils/managedEnv.js +96 -0
  1713. package/dist/utils/managedEnvConstants.js +156 -0
  1714. package/dist/utils/markdown.js +253 -0
  1715. package/dist/utils/markdownConfigLoader.js +340 -0
  1716. package/dist/utils/mcp/dateTimeParser.js +77 -0
  1717. package/dist/utils/mcp/elicitationValidation.js +231 -0
  1718. package/dist/utils/mcpInstructionsDelta.js +69 -0
  1719. package/dist/utils/mcpOutputStorage.js +125 -0
  1720. package/dist/utils/mcpValidation.js +150 -0
  1721. package/dist/utils/mcpWebSocketTransport.js +168 -0
  1722. package/dist/utils/memcodeDesktop.js +115 -0
  1723. package/dist/utils/memcodeHints.js +95 -0
  1724. package/dist/utils/memcodeInChrome/chromeNativeHost.js +388 -0
  1725. package/dist/utils/memcodeInChrome/common.js +442 -0
  1726. package/dist/utils/memcodeInChrome/mcpServer.js +263 -0
  1727. package/dist/utils/memcodeInChrome/prompt.js +67 -0
  1728. package/dist/utils/memcodeInChrome/setup.js +305 -0
  1729. package/dist/utils/memcodeInChrome/setupPortable.js +151 -0
  1730. package/dist/utils/memcodeInChrome/toolRendering.js +214 -0
  1731. package/dist/utils/memcodemd.js +938 -0
  1732. package/dist/utils/memoize.js +130 -0
  1733. package/dist/utils/memory/types.js +12 -0
  1734. package/dist/utils/memory/versions.js +7 -0
  1735. package/dist/utils/memoryFileDetection.js +167 -0
  1736. package/dist/utils/messagePredicates.js +6 -0
  1737. package/dist/utils/messageQueueManager.js +307 -0
  1738. package/dist/utils/messages/mappers.js +215 -0
  1739. package/dist/utils/messages/systemInit.js +55 -0
  1740. package/dist/utils/messages.js +3754 -0
  1741. package/dist/utils/model/agent.js +95 -0
  1742. package/dist/utils/model/aliases.js +48 -0
  1743. package/dist/utils/model/antModels.js +33 -0
  1744. package/dist/utils/model/bedrock.js +170 -0
  1745. package/dist/utils/model/check1mAccess.js +55 -0
  1746. package/dist/utils/model/configs.js +142 -0
  1747. package/dist/utils/model/contextWindowUpgradeCheck.js +34 -0
  1748. package/dist/utils/model/deprecation.js +59 -0
  1749. package/dist/utils/model/model.js +523 -0
  1750. package/dist/utils/model/modelAllowlist.js +94 -0
  1751. package/dist/utils/model/modelCapabilities.js +102 -0
  1752. package/dist/utils/model/modelOptions.js +570 -0
  1753. package/dist/utils/model/modelStrings.js +120 -0
  1754. package/dist/utils/model/modelSupportOverrides.js +36 -0
  1755. package/dist/utils/model/providers.js +48 -0
  1756. package/dist/utils/model/validateModel.js +111 -0
  1757. package/dist/utils/modelCost.js +158 -0
  1758. package/dist/utils/modelPricingTable.js +86 -0
  1759. package/dist/utils/modifiers.js +26 -0
  1760. package/dist/utils/mtls.js +120 -0
  1761. package/dist/utils/nativeInstaller/download.js +387 -0
  1762. package/dist/utils/nativeInstaller/index.js +22 -0
  1763. package/dist/utils/nativeInstaller/installer.js +1254 -0
  1764. package/dist/utils/nativeInstaller/packageManagers.js +192 -0
  1765. package/dist/utils/nativeInstaller/pidLock.js +252 -0
  1766. package/dist/utils/notebook.js +176 -0
  1767. package/dist/utils/objectGroupBy.js +15 -0
  1768. package/dist/utils/pasteStore.js +68 -0
  1769. package/dist/utils/path.js +76 -0
  1770. package/dist/utils/pdf.js +205 -0
  1771. package/dist/utils/pdfUtils.js +42 -0
  1772. package/dist/utils/peerAddress.js +9 -0
  1773. package/dist/utils/permissions/PermissionMode.js +102 -0
  1774. package/dist/utils/permissions/PermissionPromptToolResultSchema.js +87 -0
  1775. package/dist/utils/permissions/PermissionResult.js +13 -0
  1776. package/dist/utils/permissions/PermissionRule.js +15 -0
  1777. package/dist/utils/permissions/PermissionUpdate.js +271 -0
  1778. package/dist/utils/permissions/PermissionUpdateSchema.js +62 -0
  1779. package/dist/utils/permissions/autoModeState.js +35 -0
  1780. package/dist/utils/permissions/bashClassifier.js +40 -0
  1781. package/dist/utils/permissions/bypassPermissionsKillswitch.js +114 -0
  1782. package/dist/utils/permissions/classifierDecision.js +83 -0
  1783. package/dist/utils/permissions/classifierShared.js +18 -0
  1784. package/dist/utils/permissions/dangerousPatterns.js +64 -0
  1785. package/dist/utils/permissions/denialTracking.js +34 -0
  1786. package/dist/utils/permissions/filesystem.js +1046 -0
  1787. package/dist/utils/permissions/getNextPermissionMode.js +33 -0
  1788. package/dist/utils/permissions/pathValidation.js +284 -0
  1789. package/dist/utils/permissions/permissionExplainer.js +172 -0
  1790. package/dist/utils/permissions/permissionRuleParser.js +98 -0
  1791. package/dist/utils/permissions/permissionSetup.js +905 -0
  1792. package/dist/utils/permissions/permissions.js +939 -0
  1793. package/dist/utils/permissions/permissionsLoader.js +174 -0
  1794. package/dist/utils/permissions/shadowedRuleDetection.js +89 -0
  1795. package/dist/utils/permissions/shellRuleMatching.js +119 -0
  1796. package/dist/utils/permissions/yolo-classifier-prompts/auto_mode_system_prompt.txt +5 -0
  1797. package/dist/utils/permissions/yolo-classifier-prompts/permissions_anthropic.txt +11 -0
  1798. package/dist/utils/permissions/yolo-classifier-prompts/permissions_external.txt +14 -0
  1799. package/dist/utils/permissions/yoloClassifier.js +945 -0
  1800. package/dist/utils/planModeV2.js +56 -0
  1801. package/dist/utils/plans.js +255 -0
  1802. package/dist/utils/platform.js +115 -0
  1803. package/dist/utils/plugins/addDirPluginSettings.js +34 -0
  1804. package/dist/utils/plugins/cacheUtils.js +151 -0
  1805. package/dist/utils/plugins/dependencyResolver.js +124 -0
  1806. package/dist/utils/plugins/fetchTelemetry.js +70 -0
  1807. package/dist/utils/plugins/gitAvailability.js +23 -0
  1808. package/dist/utils/plugins/headlessPluginInstall.js +107 -0
  1809. package/dist/utils/plugins/hintRecommendation.js +100 -0
  1810. package/dist/utils/plugins/installCounts.js +166 -0
  1811. package/dist/utils/plugins/installedPluginsManager.js +728 -0
  1812. package/dist/utils/plugins/loadPluginAgents.js +270 -0
  1813. package/dist/utils/plugins/loadPluginCommands.js +706 -0
  1814. package/dist/utils/plugins/loadPluginHooks.js +186 -0
  1815. package/dist/utils/plugins/loadPluginOutputStyles.js +143 -0
  1816. package/dist/utils/plugins/lspPluginIntegration.js +235 -0
  1817. package/dist/utils/plugins/lspRecommendation.js +212 -0
  1818. package/dist/utils/plugins/managedPlugins.js +21 -0
  1819. package/dist/utils/plugins/marketplaceHelpers.js +328 -0
  1820. package/dist/utils/plugins/marketplaceManager.js +1595 -0
  1821. package/dist/utils/plugins/mcpPluginIntegration.js +395 -0
  1822. package/dist/utils/plugins/mcpbHandler.js +568 -0
  1823. package/dist/utils/plugins/officialMarketplace.js +14 -0
  1824. package/dist/utils/plugins/officialMarketplaceGcs.js +126 -0
  1825. package/dist/utils/plugins/officialMarketplaceStartupCheck.js +296 -0
  1826. package/dist/utils/plugins/orphanedPluginFilter.js +55 -0
  1827. package/dist/utils/plugins/parseMarketplaceInput.js +82 -0
  1828. package/dist/utils/plugins/performStartupChecks.js +36 -0
  1829. package/dist/utils/plugins/pluginAutoupdate.js +160 -0
  1830. package/dist/utils/plugins/pluginBlocklist.js +78 -0
  1831. package/dist/utils/plugins/pluginDirectories.js +87 -0
  1832. package/dist/utils/plugins/pluginFlagging.js +129 -0
  1833. package/dist/utils/plugins/pluginIdentifier.js +45 -0
  1834. package/dist/utils/plugins/pluginInstallationHelpers.js +329 -0
  1835. package/dist/utils/plugins/pluginLoader.js +2114 -0
  1836. package/dist/utils/plugins/pluginOptionsStorage.js +206 -0
  1837. package/dist/utils/plugins/pluginPolicy.js +8 -0
  1838. package/dist/utils/plugins/pluginStartupCheck.js +200 -0
  1839. package/dist/utils/plugins/pluginVersioning.js +67 -0
  1840. package/dist/utils/plugins/reconciler.js +143 -0
  1841. package/dist/utils/plugins/refresh.js +107 -0
  1842. package/dist/utils/plugins/schemas.js +723 -0
  1843. package/dist/utils/plugins/validatePlugin.js +620 -0
  1844. package/dist/utils/plugins/walkPluginMarkdown.js +42 -0
  1845. package/dist/utils/plugins/zipCache.js +236 -0
  1846. package/dist/utils/plugins/zipCacheAdapters.js +109 -0
  1847. package/dist/utils/powershell/dangerousCmdlets.js +127 -0
  1848. package/dist/utils/powershell/parser.js +1049 -0
  1849. package/dist/utils/powershell/staticPrefix.js +146 -0
  1850. package/dist/utils/preflightChecks.js +160 -0
  1851. package/dist/utils/privacyLevel.js +27 -0
  1852. package/dist/utils/process.js +52 -0
  1853. package/dist/utils/processUserInput/processBashCommand.js +103 -0
  1854. package/dist/utils/processUserInput/processSlashCommand.js +724 -0
  1855. package/dist/utils/processUserInput/processTextPrompt.js +57 -0
  1856. package/dist/utils/processUserInput/processUserInput.js +379 -0
  1857. package/dist/utils/profilerBase.js +20 -0
  1858. package/dist/utils/promptCategory.js +25 -0
  1859. package/dist/utils/promptEditor.js +123 -0
  1860. package/dist/utils/promptShellExecution.js +98 -0
  1861. package/dist/utils/protectedNamespace.js +6 -0
  1862. package/dist/utils/proxy.js +247 -0
  1863. package/dist/utils/queryContext.js +98 -0
  1864. package/dist/utils/queryHelpers.js +350 -0
  1865. package/dist/utils/queryProfiler.js +195 -0
  1866. package/dist/utils/queueProcessor.js +47 -0
  1867. package/dist/utils/readEditContext.js +147 -0
  1868. package/dist/utils/readFileInRange.js +231 -0
  1869. package/dist/utils/releaseNotes.js +205 -0
  1870. package/dist/utils/renderOptions.js +68 -0
  1871. package/dist/utils/renderProbe.js +77 -0
  1872. package/dist/utils/ripgrep.js +431 -0
  1873. package/dist/utils/sandbox/sandbox-adapter.js +529 -0
  1874. package/dist/utils/sandbox/sandbox-ui-utils.js +6 -0
  1875. package/dist/utils/sanitization.js +39 -0
  1876. package/dist/utils/screenshotClipboard.js +89 -0
  1877. package/dist/utils/sdkEventQueue.js +41 -0
  1878. package/dist/utils/secureStorage/fallbackStorage.js +48 -0
  1879. package/dist/utils/secureStorage/index.js +12 -0
  1880. package/dist/utils/secureStorage/keychainPrefetch.js +54 -0
  1881. package/dist/utils/secureStorage/macOsKeychainHelpers.js +50 -0
  1882. package/dist/utils/secureStorage/macOsKeychainStorage.js +175 -0
  1883. package/dist/utils/secureStorage/plainTextStorage.js +80 -0
  1884. package/dist/utils/semanticBoolean.js +10 -0
  1885. package/dist/utils/semanticNumber.js +13 -0
  1886. package/dist/utils/semver.js +51 -0
  1887. package/dist/utils/sequential.js +31 -0
  1888. package/dist/utils/sessionActivity.js +102 -0
  1889. package/dist/utils/sessionEnvVars.js +19 -0
  1890. package/dist/utils/sessionEnvironment.js +137 -0
  1891. package/dist/utils/sessionFileAccessHooks.js +173 -0
  1892. package/dist/utils/sessionIngressAuth.js +93 -0
  1893. package/dist/utils/sessionRestore.js +261 -0
  1894. package/dist/utils/sessionStart.js +147 -0
  1895. package/dist/utils/sessionState.js +57 -0
  1896. package/dist/utils/sessionStorage.js +3157 -0
  1897. package/dist/utils/sessionStoragePortable.js +506 -0
  1898. package/dist/utils/sessionTime.js +11 -0
  1899. package/dist/utils/sessionTitle.js +91 -0
  1900. package/dist/utils/sessionUrl.js +37 -0
  1901. package/dist/utils/set.js +44 -0
  1902. package/dist/utils/settings/allErrors.js +14 -0
  1903. package/dist/utils/settings/applySettingsChange.js +51 -0
  1904. package/dist/utils/settings/changeDetector.js +294 -0
  1905. package/dist/utils/settings/constants.js +137 -0
  1906. package/dist/utils/settings/internalWrites.js +20 -0
  1907. package/dist/utils/settings/managedPath.js +23 -0
  1908. package/dist/utils/settings/mdm/constants.js +49 -0
  1909. package/dist/utils/settings/mdm/rawRead.js +90 -0
  1910. package/dist/utils/settings/mdm/settings.js +182 -0
  1911. package/dist/utils/settings/permissionValidation.js +175 -0
  1912. package/dist/utils/settings/pluginOnlyPolicy.js +21 -0
  1913. package/dist/utils/settings/schemaOutput.js +10 -0
  1914. package/dist/utils/settings/settings.js +682 -0
  1915. package/dist/utils/settings/settingsCache.js +48 -0
  1916. package/dist/utils/settings/toolValidationConfig.js +69 -0
  1917. package/dist/utils/settings/types.js +528 -0
  1918. package/dist/utils/settings/validateEditTool.js +29 -0
  1919. package/dist/utils/settings/validation.js +155 -0
  1920. package/dist/utils/settings/validationTips.js +103 -0
  1921. package/dist/utils/shell/bashProvider.js +141 -0
  1922. package/dist/utils/shell/outputLimits.js +17 -0
  1923. package/dist/utils/shell/powershellDetection.js +55 -0
  1924. package/dist/utils/shell/powershellProvider.js +54 -0
  1925. package/dist/utils/shell/prefix.js +227 -0
  1926. package/dist/utils/shell/readOnlyCommandValidation.js +1796 -0
  1927. package/dist/utils/shell/resolveDefaultShell.js +7 -0
  1928. package/dist/utils/shell/shellProvider.js +6 -0
  1929. package/dist/utils/shell/shellToolUtils.js +13 -0
  1930. package/dist/utils/shell/specPrefix.js +149 -0
  1931. package/dist/utils/shellConfig.js +93 -0
  1932. package/dist/utils/sideQuery.js +113 -0
  1933. package/dist/utils/sideQuestion.js +88 -0
  1934. package/dist/utils/signal.js +20 -0
  1935. package/dist/utils/sinks.js +9 -0
  1936. package/dist/utils/skills/skillChangeDetector.js +199 -0
  1937. package/dist/utils/slashCommandParsing.js +28 -0
  1938. package/dist/utils/sleep.js +51 -0
  1939. package/dist/utils/sliceAnsi.js +49 -0
  1940. package/dist/utils/slowOperations.js +220 -0
  1941. package/dist/utils/standaloneAgent.js +10 -0
  1942. package/dist/utils/startupProfiler.js +146 -0
  1943. package/dist/utils/staticRender.js +77 -0
  1944. package/dist/utils/stats.js +667 -0
  1945. package/dist/utils/statsCache.js +277 -0
  1946. package/dist/utils/status.js +366 -0
  1947. package/dist/utils/statusNoticeDefinitions.js +196 -0
  1948. package/dist/utils/statusNoticeHelpers.js +13 -0
  1949. package/dist/utils/stream.js +75 -0
  1950. package/dist/utils/streamJsonStdoutGuard.js +79 -0
  1951. package/dist/utils/streamlinedTransform.js +137 -0
  1952. package/dist/utils/stringUtils.js +143 -0
  1953. package/dist/utils/subprocessEnv.js +55 -0
  1954. package/dist/utils/suggestions/commandSuggestions.js +374 -0
  1955. package/dist/utils/suggestions/directoryCompletion.js +141 -0
  1956. package/dist/utils/suggestions/shellHistoryCompletion.js +70 -0
  1957. package/dist/utils/suggestions/skillUsageTracking.js +36 -0
  1958. package/dist/utils/suggestions/slackChannelSuggestions.js +151 -0
  1959. package/dist/utils/swarm/It2SetupPrompt.js +409 -0
  1960. package/dist/utils/swarm/backends/ITermBackend.js +224 -0
  1961. package/dist/utils/swarm/backends/InProcessBackend.js +256 -0
  1962. package/dist/utils/swarm/backends/PaneBackendExecutor.js +253 -0
  1963. package/dist/utils/swarm/backends/TmuxBackend.js +556 -0
  1964. package/dist/utils/swarm/backends/detection.js +53 -0
  1965. package/dist/utils/swarm/backends/it2Setup.js +152 -0
  1966. package/dist/utils/swarm/backends/registry.js +270 -0
  1967. package/dist/utils/swarm/backends/teammateModeSnapshot.js +50 -0
  1968. package/dist/utils/swarm/backends/types.js +6 -0
  1969. package/dist/utils/swarm/constants.js +22 -0
  1970. package/dist/utils/swarm/inProcessRunner.js +1060 -0
  1971. package/dist/utils/swarm/leaderPermissionBridge.js +28 -0
  1972. package/dist/utils/swarm/permissionSync.js +596 -0
  1973. package/dist/utils/swarm/reconnection.js +75 -0
  1974. package/dist/utils/swarm/spawnInProcess.js +184 -0
  1975. package/dist/utils/swarm/spawnUtils.js +96 -0
  1976. package/dist/utils/swarm/teamHelpers.js +407 -0
  1977. package/dist/utils/swarm/teammateInit.js +90 -0
  1978. package/dist/utils/swarm/teammateLayoutManager.js +49 -0
  1979. package/dist/utils/swarm/teammateModel.js +11 -0
  1980. package/dist/utils/swarm/teammatePromptAddendum.js +14 -0
  1981. package/dist/utils/systemDirectories.js +45 -0
  1982. package/dist/utils/systemPrompt.js +74 -0
  1983. package/dist/utils/systemPromptType.js +6 -0
  1984. package/dist/utils/systemTheme.js +63 -0
  1985. package/dist/utils/taggedId.js +30 -0
  1986. package/dist/utils/task/TaskOutput.js +298 -0
  1987. package/dist/utils/task/diskOutput.js +310 -0
  1988. package/dist/utils/task/framework.js +189 -0
  1989. package/dist/utils/task/outputFormatting.js +32 -0
  1990. package/dist/utils/task/sdkProgress.js +21 -0
  1991. package/dist/utils/taskSummary.js +9 -0
  1992. package/dist/utils/tasks.js +544 -0
  1993. package/dist/utils/teamDiscovery.js +36 -0
  1994. package/dist/utils/teamMemoryOps.js +48 -0
  1995. package/dist/utils/teammate.js +144 -0
  1996. package/dist/utils/teammateContext.js +23 -0
  1997. package/dist/utils/teammateMailbox.js +661 -0
  1998. package/dist/utils/telemetry/betaSessionTracing.js +270 -0
  1999. package/dist/utils/telemetry/bigqueryExporter.js +174 -0
  2000. package/dist/utils/telemetry/events.js +55 -0
  2001. package/dist/utils/telemetry/instrumentation.js +602 -0
  2002. package/dist/utils/telemetry/logger.js +28 -0
  2003. package/dist/utils/telemetry/perfettoTracing.js +716 -0
  2004. package/dist/utils/telemetry/pluginTelemetry.js +119 -0
  2005. package/dist/utils/telemetry/sessionTracing.js +646 -0
  2006. package/dist/utils/telemetry/skillLoadedEvent.js +26 -0
  2007. package/dist/utils/telemetryAttributes.js +51 -0
  2008. package/dist/utils/teleport/api.js +282 -0
  2009. package/dist/utils/teleport/environmentSelection.js +47 -0
  2010. package/dist/utils/teleport/environments.js +86 -0
  2011. package/dist/utils/teleport/gitBundle.js +201 -0
  2012. package/dist/utils/teleport.js +857 -0
  2013. package/dist/utils/tempfile.js +10 -0
  2014. package/dist/utils/terminal.js +72 -0
  2015. package/dist/utils/terminalPanel.js +157 -0
  2016. package/dist/utils/textHighlighting.js +111 -0
  2017. package/dist/utils/theme.js +698 -0
  2018. package/dist/utils/thinking.js +135 -0
  2019. package/dist/utils/timeouts.js +26 -0
  2020. package/dist/utils/tmuxSocket.js +250 -0
  2021. package/dist/utils/todo/types.js +17 -0
  2022. package/dist/utils/tokenBudget.js +58 -0
  2023. package/dist/utils/tokens.js +133 -0
  2024. package/dist/utils/toolErrors.js +99 -0
  2025. package/dist/utils/toolExposurePlanner.js +62 -0
  2026. package/dist/utils/toolPool.js +40 -0
  2027. package/dist/utils/toolResultStorage.js +498 -0
  2028. package/dist/utils/toolSchemaCache.js +11 -0
  2029. package/dist/utils/toolSearch.js +356 -0
  2030. package/dist/utils/transcriptSearch.js +136 -0
  2031. package/dist/utils/treeify.js +102 -0
  2032. package/dist/utils/truncate.js +109 -0
  2033. package/dist/utils/udsMessaging.js +15 -0
  2034. package/dist/utils/ultraplan/ccrSession.js +211 -0
  2035. package/dist/utils/ultraplan/keyword.js +78 -0
  2036. package/dist/utils/ultraplan/prompt.txt +1 -0
  2037. package/dist/utils/unaryLogging.js +18 -0
  2038. package/dist/utils/undercover.js +58 -0
  2039. package/dist/utils/user.js +122 -0
  2040. package/dist/utils/userAgent.js +7 -0
  2041. package/dist/utils/userPromptKeywords.js +17 -0
  2042. package/dist/utils/uuid.js +14 -0
  2043. package/dist/utils/warningHandler.js +80 -0
  2044. package/dist/utils/which.js +54 -0
  2045. package/dist/utils/windowsPaths.js +126 -0
  2046. package/dist/utils/withResolvers.js +12 -0
  2047. package/dist/utils/words.js +774 -0
  2048. package/dist/utils/workloadContext.js +14 -0
  2049. package/dist/utils/worktree.js +1057 -0
  2050. package/dist/utils/worktreeModeEnabled.js +6 -0
  2051. package/dist/utils/xdg.js +30 -0
  2052. package/dist/utils/xmem.js +263 -0
  2053. package/dist/utils/xmemActivity.js +121 -0
  2054. package/dist/utils/xmemSessionSummary.js +40 -0
  2055. package/dist/utils/xml.js +10 -0
  2056. package/dist/utils/yaml.js +9 -0
  2057. package/dist/utils/zodToJsonSchema.js +12 -0
  2058. package/dist/vim/motions.js +58 -0
  2059. package/dist/vim/operators.js +327 -0
  2060. package/dist/vim/textObjects.js +125 -0
  2061. package/dist/vim/transitions.js +318 -0
  2062. package/dist/vim/types.js +81 -0
  2063. package/dist/voice/voiceModeEnabled.js +16 -0
  2064. package/entrypoints/cli.tsx +421 -0
  2065. package/package.json +168 -0
  2066. package/scripts/postinstall.js +222 -0
package/dist/main.js ADDED
@@ -0,0 +1,3574 @@
1
+ import { profileCheckpoint, profileReport } from "./utils/startupProfiler.js";
2
+ profileCheckpoint("main_tsx_entry");
3
+ import { startMdmRawRead } from "./utils/settings/mdm/rawRead.js";
4
+ startMdmRawRead();
5
+ import { ensureKeychainPrefetchCompleted, startKeychainPrefetch } from "./utils/secureStorage/keychainPrefetch.js";
6
+ startKeychainPrefetch();
7
+ async function failOpenStartupGate(name, promise, timeoutMs = 1500) {
8
+ let timedOut = false;
9
+ let timeout;
10
+ const guarded = promise.catch((error) => {
11
+ logForDebugging(`[STARTUP] ${name} failed open: ${error}`);
12
+ });
13
+ try {
14
+ await Promise.race([
15
+ guarded,
16
+ new Promise((resolve2) => {
17
+ timeout = setTimeout(() => {
18
+ timedOut = true;
19
+ resolve2();
20
+ }, timeoutMs);
21
+ })
22
+ ]);
23
+ } finally {
24
+ if (timeout) clearTimeout(timeout);
25
+ }
26
+ if (timedOut) {
27
+ logForDebugging(`[STARTUP] ${name} timed out after ${timeoutMs}ms; continuing`);
28
+ }
29
+ }
30
+ import { feature } from "bun:bundle";
31
+ import { Command as CommanderCommand, InvalidArgumentError, Option } from "@commander-js/extra-typings";
32
+ import chalk from "chalk";
33
+ import { readFileSync, writeFileSync } from "fs";
34
+ import mapValues from "lodash-es/mapValues.js";
35
+ import pickBy from "lodash-es/pickBy.js";
36
+ import uniqBy from "lodash-es/uniqBy.js";
37
+ import { getOauthConfig } from "./constants/oauth.js";
38
+ import { getRemoteSessionUrl } from "./constants/product.js";
39
+ import { getSystemContext, getUserContext } from "./context.js";
40
+ import { init, initializeTelemetryAfterTrust } from "./entrypoints/init.js";
41
+ import { addToHistory } from "./history.js";
42
+ import { launchRepl } from "./replLauncher.js";
43
+ import { refreshGrowthBookAfterAuthChange } from "./services/analytics/growthbook.js";
44
+ import { fetchBootstrapData } from "./services/api/bootstrap.js";
45
+ import { downloadSessionFiles, parseFileSpecs } from "./services/api/filesApi.js";
46
+ import { prefetchPassesEligibility } from "./services/api/referral.js";
47
+ import { prefetchOfficialMcpUrls } from "./services/mcp/officialRegistry.js";
48
+ import { isPolicyAllowed, loadPolicyLimits, refreshPolicyLimits, waitForPolicyLimitsToLoad } from "./services/policyLimits/index.js";
49
+ import { loadRemoteManagedSettings, refreshRemoteManagedSettings } from "./services/remoteManagedSettings/index.js";
50
+ import { createSyntheticOutputTool, isSyntheticOutputToolEnabled } from "./tools/SyntheticOutputTool/SyntheticOutputTool.js";
51
+ import { getTools } from "./tools.js";
52
+ import { canUserConfigureAdvisor, getInitialAdvisorSetting, isAdvisorEnabled, isValidAdvisorModel, modelSupportsAdvisor } from "./utils/advisor.js";
53
+ import { isAgentSwarmsEnabled } from "./utils/agentSwarmsEnabled.js";
54
+ import { count, uniq } from "./utils/array.js";
55
+ import "./utils/asciicast.js";
56
+ import { getClaudeAIOAuthTokensAsync, getConfiguredApiKeyHelper, getSubscriptionType, isClaudeAISubscriber, prefetchAwsCredentialsAndBedRockInfoIfSafe, prefetchGcpCredentialsIfSafe, validateForceLoginOrg } from "./utils/auth.js";
57
+ import { resolveOpenRouterApiKey } from "./utils/apiKeyHelper.js";
58
+ import { checkHasTrustDialogAccepted, getGlobalConfig, getRemoteControlAtStartup, isAutoUpdaterDisabled, saveGlobalConfig } from "./utils/config.js";
59
+ import { seedEarlyInput, stopCapturingEarlyInput } from "./utils/earlyInput.js";
60
+ import { getInitialEffortSetting, parseEffortValue } from "./utils/effort.js";
61
+ import { getInitialFastModeSetting, isFastModeEnabled, prefetchFastModeStatus, resolveFastModeStatusFromCache } from "./utils/fastMode.js";
62
+ import { applyConfigEnvironmentVariables } from "./utils/managedEnv.js";
63
+ import { createSystemMessage, createUserMessage } from "./utils/messages.js";
64
+ import { getPlatform } from "./utils/platform.js";
65
+ import { getBaseRenderOptions } from "./utils/renderOptions.js";
66
+ import { getSessionIngressAuthToken } from "./utils/sessionIngressAuth.js";
67
+ import { settingsChangeDetector } from "./utils/settings/changeDetector.js";
68
+ import { skillChangeDetector } from "./utils/skills/skillChangeDetector.js";
69
+ import { jsonParse, writeFileSync_DEPRECATED } from "./utils/slowOperations.js";
70
+ import { computeInitialTeamContext } from "./utils/swarm/reconnection.js";
71
+ import { initializeWarningHandler } from "./utils/warningHandler.js";
72
+ import { isWorktreeModeEnabled } from "./utils/worktreeModeEnabled.js";
73
+ const getTeammateUtils = () => require("./utils/teammate.js");
74
+ const getTeammatePromptAddendum = () => require("./utils/swarm/teammatePromptAddendum.js");
75
+ const getTeammateModeSnapshot = () => require("./utils/swarm/backends/teammateModeSnapshot.js");
76
+ const coordinatorModeModule = feature("COORDINATOR_MODE") ? require("./coordinator/coordinatorMode.js") : null;
77
+ const assistantModule = feature("KAIROS") ? require("./assistant/index.js") : null;
78
+ const kairosGate = feature("KAIROS") ? require("./assistant/gate.js") : null;
79
+ import { resolve } from "path";
80
+ import { isAnalyticsDisabled } from "src/services/analytics/config.js";
81
+ import { getFeatureValue_CACHED_MAY_BE_STALE } from "src/services/analytics/growthbook.js";
82
+ import { logEvent } from "src/services/analytics/index.js";
83
+ import { initializeAnalyticsGates } from "src/services/analytics/sink.js";
84
+ import { getOriginalCwd, setAdditionalDirectoriesForClaudeMd, setIsRemoteMode, setMainLoopModelOverride, setMainThreadAgentType, setTeleportedSessionInfo } from "./bootstrap/state.js";
85
+ import { filterCommandsForRemoteMode, getCommands } from "./commands.js";
86
+ import { launchAssistantInstallWizard, launchAssistantSessionChooser, launchInvalidSettingsDialog, launchResumeChooser, launchSnapshotUpdateDialog, launchTeleportRepoMismatchDialog, launchTeleportResumeWrapper } from "./dialogLaunchers.js";
87
+ import { SHOW_CURSOR } from "./ink/termio/dec.js";
88
+ import { exitWithError, exitWithMessage, getRenderContext, renderAndRun, showSetupScreens } from "./interactiveHelpers.js";
89
+ import { initBuiltinPlugins } from "./plugins/bundled/index.js";
90
+ import { checkQuotaStatus } from "./services/memcodeLimits.js";
91
+ import { getMcpToolsCommandsAndResources, prefetchAllMcpResources } from "./services/mcp/client.js";
92
+ import { VALID_INSTALLABLE_SCOPES, VALID_UPDATE_SCOPES } from "./services/plugins/pluginCliCommands.js";
93
+ import { initBundledSkills } from "./skills/bundled/index.js";
94
+ import { getActiveAgentsFromList, getAgentDefinitionsWithOverrides, isBuiltInAgent, isCustomAgent, parseAgentsFromJson } from "./tools/AgentTool/loadAgentsDir.js";
95
+ import { assertMinVersion } from "./utils/autoUpdater.js";
96
+ import { XCODE_IN_CHROME_SKILL_HINT, XCODE_IN_CHROME_SKILL_HINT_WITH_WEBBROWSER } from "./utils/memcodeInChrome/prompt.js";
97
+ import { setupmemCodeInChrome, shouldAutoEnablememCodeInChrome, shouldEnablememCodeInChrome } from "./utils/memcodeInChrome/setup.js";
98
+ import { isBridgeModeAvailable } from "./bridge/bridgeEnabled.js";
99
+ import { getContextWindowForModel } from "./utils/context.js";
100
+ import { loadConversationForResume } from "./utils/conversationRecovery.js";
101
+ import { buildDeepLinkBanner } from "./utils/deepLink/banner.js";
102
+ import { hasNodeOption, isBareMode, isEnvTruthy, isInProtectedNamespace, isUpstreamFeatureEnabled } from "./utils/envUtils.js";
103
+ import { refreshExampleCommands } from "./utils/exampleCommands.js";
104
+ import { getWorktreePaths } from "./utils/getWorktreePaths.js";
105
+ import { getBranch, getIsGit, getWorktreeCount } from "./utils/git.js";
106
+ import { getGhAuthStatus } from "./utils/github/ghAuthStatus.js";
107
+ import { safeParseJSON } from "./utils/json.js";
108
+ import { logError } from "./utils/log.js";
109
+ import { getModelDeprecationWarning } from "./utils/model/deprecation.js";
110
+ import { getDefaultMainLoopModel, getUserSpecifiedModelSetting, normalizeModelStringForAPI, parseUserSpecifiedModel } from "./utils/model/model.js";
111
+ import { ensureModelStringsInitialized } from "./utils/model/modelStrings.js";
112
+ import { PERMISSION_MODES } from "./utils/permissions/PermissionMode.js";
113
+ import { checkAndDisableBypassPermissions, getAutoModeEnabledStateIfCached, initializeToolPermissionContext, initialPermissionModeFromCLI, isDefaultPermissionModeAuto, parseToolListFromCLI, stripDangerousPermissionsForAutoMode, verifyAutoModeGateAccess } from "./utils/permissions/permissionSetup.js";
114
+ import { cleanupOrphanedPluginVersionsInBackground } from "./utils/plugins/cacheUtils.js";
115
+ import { initializeVersionedPlugins } from "./utils/plugins/installedPluginsManager.js";
116
+ import { getManagedPluginNames } from "./utils/plugins/managedPlugins.js";
117
+ import { getGlobExclusionsForPluginCache } from "./utils/plugins/orphanedPluginFilter.js";
118
+ import { getPluginSeedDirs } from "./utils/plugins/pluginDirectories.js";
119
+ import { countFilesRoundedRg } from "./utils/ripgrep.js";
120
+ import { processSessionStartHooks, processSetupHooks } from "./utils/sessionStart.js";
121
+ import { cacheSessionTitle, getSessionIdFromLog, saveAgentSetting, saveMode, searchSessionsByCustomTitle, sessionIdExists } from "./utils/sessionStorage.js";
122
+ import { ensureMdmSettingsLoaded } from "./utils/settings/mdm/settings.js";
123
+ import { getInitialSettings, getManagedSettingsKeysForLogging, getSettingsForSource, getSettingsWithErrors } from "./utils/settings/settings.js";
124
+ import { resetSettingsCache } from "./utils/settings/settingsCache.js";
125
+ import { DEFAULT_TASKS_MODE_TASK_LIST_ID } from "./utils/tasks.js";
126
+ import { logPluginLoadErrors, logPluginsEnabledForSession } from "./utils/telemetry/pluginTelemetry.js";
127
+ import { logSkillsLoaded } from "./utils/telemetry/skillLoadedEvent.js";
128
+ import { generateTempFilePath } from "./utils/tempfile.js";
129
+ import { validateUuid } from "./utils/uuid.js";
130
+ import { XCODE_DEFAULT_NVIDIA_API_KEY } from "./constants/memcodeDefaults.js";
131
+ async function validatePrintCredentialsOrExit() {
132
+ if (isEnvTruthy(process.env.XCODE_USE_BEDROCK) || isEnvTruthy(process.env.XCODE_USE_VERTEX) || isEnvTruthy(process.env.XCODE_USE_FOUNDRY)) {
133
+ return;
134
+ }
135
+ if (resolveOpenRouterApiKey() || process.env.OPENAI_API_KEY || process.env.OPENAI_API_TOKEN || process.env.XCODE_OPENAI_API_KEY || process.env.XCODE_API_URL || process.env.ANTHROPIC_API_KEY || process.env.ANTHROPIC_AUTH_TOKEN || process.env.GEMINI_API_KEY || process.env.NVIDIA_API_KEY || XCODE_DEFAULT_NVIDIA_API_KEY || getConfiguredApiKeyHelper()) {
136
+ return;
137
+ }
138
+ const oauthTokens = await getClaudeAIOAuthTokensAsync();
139
+ if (oauthTokens?.accessToken) return;
140
+ process.stderr.write(
141
+ "Error: No API credentials found for --print mode. Set OPENROUTER_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY, XCODE_API_URL, or another provider-specific credential.\n"
142
+ );
143
+ process.exit(1);
144
+ }
145
+ function isHeadlessLocalSlashCommand(inputPrompt, commands) {
146
+ if (typeof inputPrompt !== "string") return false;
147
+ const trimmed = inputPrompt.trim();
148
+ if (!trimmed.startsWith("/")) return false;
149
+ const commandName = trimmed.slice(1).split(/\s+/, 1)[0];
150
+ if (!commandName) return false;
151
+ return commands.some(
152
+ (command) => command.type === "local" && command.supportsNonInteractive && (command.name === commandName || command.aliases?.includes(commandName))
153
+ );
154
+ }
155
+ import { registerMcpAddCommand } from "src/commands/mcp/addCommand.js";
156
+ import { registerMcpXaaIdpCommand } from "src/commands/mcp/xaaIdpCommand.js";
157
+ import { logPermissionContextForAnts } from "src/services/internalLogging.js";
158
+ import { fetchmemCodeProxyMcpConfigsIfEligible } from "src/services/mcp/memcodeProxy.js";
159
+ import { clearServerCache } from "src/services/mcp/client.js";
160
+ import { areMcpConfigsAllowedWithEnterpriseMcpConfig, dedupClaudeAiMcpServers, doesEnterpriseMcpConfigExist, filterMcpServersByPolicy, getClaudeCodeMcpConfigs, getMcpServerSignature, parseMcpConfig, parseMcpConfigFromFilePath } from "src/services/mcp/config.js";
161
+ import { excludeCommandsByServer, excludeResourcesByServer } from "src/services/mcp/utils.js";
162
+ import { isXaaEnabled } from "src/services/mcp/xaaIdpLogin.js";
163
+ import { getRelevantTips } from "src/services/tips/tipRegistry.js";
164
+ import { logContextMetrics } from "src/utils/api.js";
165
+ import { XCODE_IN_CHROME_MCP_SERVER_NAME, ismemCodeInChromeMCPServer } from "src/utils/memcodeInChrome/common.js";
166
+ import { registerCleanup } from "src/utils/cleanupRegistry.js";
167
+ import { eagerParseCliFlag } from "src/utils/cliArgs.js";
168
+ import { createEmptyAttributionState } from "src/utils/commitAttribution.js";
169
+ import { countConcurrentSessions, registerSession, updateSessionName } from "src/utils/concurrentSessions.js";
170
+ import { getCwd } from "src/utils/cwd.js";
171
+ import { logForDebugging, setHasFormattedOutput } from "src/utils/debug.js";
172
+ import { errorMessage, getErrnoCode, isENOENT, TeleportOperationError, toError } from "src/utils/errors.js";
173
+ import { getFsImplementation, safeResolvePath } from "src/utils/fsOperations.js";
174
+ import { gracefulShutdown, gracefulShutdownSync } from "src/utils/gracefulShutdown.js";
175
+ import { setAllHookEventsEnabled } from "src/utils/hooks/hookEvents.js";
176
+ import { refreshModelCapabilities } from "src/utils/model/modelCapabilities.js";
177
+ import { peekForStdinData, writeToStderr } from "src/utils/process.js";
178
+ import { setCwd } from "src/utils/Shell.js";
179
+ import { processResumedConversation } from "src/utils/sessionRestore.js";
180
+ import { parseSettingSourcesFlag } from "src/utils/settings/constants.js";
181
+ import { plural } from "src/utils/stringUtils.js";
182
+ import { getInitialMainLoopModel, getIsNonInteractiveSession, getSdkBetas, getSessionId, getUserMsgOptIn, setAllowedChannels, setAllowedSettingSources, setChromeFlagOverride, setClientType, setCwdState, setDirectConnectServerUrl, setFlagSettingsPath, setInitialMainLoopModel, setInlinePlugins, setIsInteractive, setKairosActive, setOriginalCwd, setQuestionPreviewFormat, setSdkBetas, setSessionBypassPermissionsMode, setSessionPersistenceDisabled, setSessionSource, setUserMsgOptIn, switchSession } from "./bootstrap/state.js";
183
+ const autoModeStateModule = feature("TRANSCRIPT_CLASSIFIER") ? require("./utils/permissions/autoModeState.js") : null;
184
+ import { migrateAutoUpdatesToSettings } from "./migrations/migrateAutoUpdatesToSettings.js";
185
+ import { migrateBypassPermissionsAcceptedToSettings } from "./migrations/migrateBypassPermissionsAcceptedToSettings.js";
186
+ import { migrateEnableAllProjectMcpServersToSettings } from "./migrations/migrateEnableAllProjectMcpServersToSettings.js";
187
+ import "./migrations/migrateFennecToOpus.js";
188
+ import { migrateLegacyOpusToCurrent } from "./migrations/migrateLegacyOpusToCurrent.js";
189
+ import { migrateOpusToOpus1m } from "./migrations/migrateOpusToOpus1m.js";
190
+ import { migrateReplBridgeEnabledToRemoteControlAtStartup } from "./migrations/migrateReplBridgeEnabledToRemoteControlAtStartup.js";
191
+ import { migrateSonnet1mToSonnet45 } from "./migrations/migrateSonnet1mToSonnet45.js";
192
+ import { migrateSonnet45ToSonnet46 } from "./migrations/migrateSonnet45ToSonnet46.js";
193
+ import { resetAutoModeOptInForDefaultOffer } from "./migrations/resetAutoModeOptInForDefaultOffer.js";
194
+ import { resetProToOpusDefault } from "./migrations/resetProToOpusDefault.js";
195
+ import { createRemoteSessionConfig } from "./remote/RemoteSessionManager.js";
196
+ import { createDirectConnectSession, DirectConnectError } from "./server/createDirectConnectSession.js";
197
+ import { initializeLspServerManager } from "./services/lsp/manager.js";
198
+ import { shouldEnablePromptSuggestion } from "./services/PromptSuggestion/promptSuggestion.js";
199
+ import { getDefaultAppState, IDLE_SPECULATION_STATE } from "./state/AppStateStore.js";
200
+ import { onChangeAppState } from "./state/onChangeAppState.js";
201
+ import { createStore } from "./state/store.js";
202
+ import { asSessionId } from "./types/ids.js";
203
+ import { filterAllowedSdkBetas } from "./utils/betas.js";
204
+ import { isInBundledMode, isRunningWithBun } from "./utils/bundledMode.js";
205
+ import { logForDiagnosticsNoPII } from "./utils/diagLogs.js";
206
+ import { filterExistingPaths, getKnownPathsForRepo } from "./utils/githubRepoPathMapping.js";
207
+ import { clearPluginCache, loadAllPluginsCacheOnly } from "./utils/plugins/pluginLoader.js";
208
+ import { migrateChangelogFromConfig } from "./utils/releaseNotes.js";
209
+ import { SandboxManager } from "./utils/sandbox/sandbox-adapter.js";
210
+ import { fetchSession, prepareApiRequest } from "./utils/teleport/api.js";
211
+ import { checkOutTeleportedSessionBranch, processMessagesForTeleportResume, teleportToRemoteWithErrorHandling, validateGitState, validateSessionRepository } from "./utils/teleport.js";
212
+ import { shouldEnableThinkingByDefault } from "./utils/thinking.js";
213
+ import { initUser, resetUserCache } from "./utils/user.js";
214
+ import { getTmuxInstallInstructions, isTmuxAvailable, parsePRReference } from "./utils/worktree.js";
215
+ profileCheckpoint("main_tsx_imports_loaded");
216
+ function logManagedSettings() {
217
+ try {
218
+ const policySettings = getSettingsForSource("policySettings");
219
+ if (policySettings) {
220
+ const allKeys = getManagedSettingsKeysForLogging(policySettings);
221
+ logEvent("tengu_managed_settings_loaded", {
222
+ keyCount: allKeys.length,
223
+ keys: allKeys.join(",")
224
+ });
225
+ }
226
+ } catch {
227
+ }
228
+ }
229
+ function isBeingDebugged() {
230
+ const isBun = isRunningWithBun();
231
+ const hasInspectArg = process.execArgv.some((arg) => {
232
+ if (isBun) {
233
+ return /--inspect(-brk)?/.test(arg);
234
+ } else {
235
+ return /--inspect(-brk)?|--debug(-brk)?/.test(arg);
236
+ }
237
+ });
238
+ const hasInspectEnv = process.env.NODE_OPTIONS && /--inspect(-brk)?|--debug(-brk)?/.test(process.env.NODE_OPTIONS);
239
+ try {
240
+ const inspector = global.require("inspector");
241
+ const hasInspectorUrl = !!inspector.url();
242
+ return hasInspectorUrl || hasInspectArg || hasInspectEnv;
243
+ } catch {
244
+ return hasInspectArg || hasInspectEnv;
245
+ }
246
+ }
247
+ if (isBeingDebugged()) {
248
+ process.exit(1);
249
+ }
250
+ function logSessionTelemetry() {
251
+ const model = parseUserSpecifiedModel(getInitialMainLoopModel() ?? getDefaultMainLoopModel());
252
+ void logSkillsLoaded(getCwd(), getContextWindowForModel(model, getSdkBetas()));
253
+ void loadAllPluginsCacheOnly().then(({
254
+ enabled,
255
+ errors
256
+ }) => {
257
+ const managedNames = getManagedPluginNames();
258
+ logPluginsEnabledForSession(enabled, managedNames, getPluginSeedDirs());
259
+ logPluginLoadErrors(errors, managedNames);
260
+ }).catch((err) => logError(err));
261
+ }
262
+ function getCertEnvVarTelemetry() {
263
+ const result = {};
264
+ if (process.env.NODE_EXTRA_CA_CERTS) {
265
+ result.has_node_extra_ca_certs = true;
266
+ }
267
+ if (process.env.XCODE_CLIENT_CERT) {
268
+ result.has_client_cert = true;
269
+ }
270
+ if (hasNodeOption("--use-system-ca")) {
271
+ result.has_use_system_ca = true;
272
+ }
273
+ if (hasNodeOption("--use-openssl-ca")) {
274
+ result.has_use_openssl_ca = true;
275
+ }
276
+ return result;
277
+ }
278
+ async function logStartupTelemetry() {
279
+ if (isAnalyticsDisabled()) return;
280
+ const [isGit, worktreeCount, ghAuthStatus] = await Promise.all([getIsGit(), getWorktreeCount(), getGhAuthStatus()]);
281
+ logEvent("tengu_startup_telemetry", {
282
+ is_git: isGit,
283
+ worktree_count: worktreeCount,
284
+ gh_auth_status: ghAuthStatus,
285
+ sandbox_enabled: SandboxManager.isSandboxingEnabled(),
286
+ are_unsandboxed_commands_allowed: SandboxManager.areUnsandboxedCommandsAllowed(),
287
+ is_auto_bash_allowed_if_sandbox_enabled: SandboxManager.isAutoAllowBashIfSandboxedEnabled(),
288
+ auto_updater_disabled: isAutoUpdaterDisabled(),
289
+ prefers_reduced_motion: getInitialSettings().prefersReducedMotion ?? false,
290
+ ...getCertEnvVarTelemetry()
291
+ });
292
+ }
293
+ const CURRENT_MIGRATION_VERSION = 11;
294
+ function runMigrations() {
295
+ if (getGlobalConfig().migrationVersion !== CURRENT_MIGRATION_VERSION) {
296
+ migrateAutoUpdatesToSettings();
297
+ migrateBypassPermissionsAcceptedToSettings();
298
+ migrateEnableAllProjectMcpServersToSettings();
299
+ resetProToOpusDefault();
300
+ migrateSonnet1mToSonnet45();
301
+ migrateLegacyOpusToCurrent();
302
+ migrateSonnet45ToSonnet46();
303
+ migrateOpusToOpus1m();
304
+ migrateReplBridgeEnabledToRemoteControlAtStartup();
305
+ if (feature("TRANSCRIPT_CLASSIFIER")) {
306
+ resetAutoModeOptInForDefaultOffer();
307
+ }
308
+ if (false) {
309
+ migrateFennecToOpus();
310
+ }
311
+ saveGlobalConfig((prev) => prev.migrationVersion === CURRENT_MIGRATION_VERSION ? prev : {
312
+ ...prev,
313
+ migrationVersion: CURRENT_MIGRATION_VERSION
314
+ });
315
+ }
316
+ migrateChangelogFromConfig().catch(() => {
317
+ });
318
+ }
319
+ function prefetchSystemContextIfSafe() {
320
+ const isNonInteractiveSession = getIsNonInteractiveSession();
321
+ if (isNonInteractiveSession) {
322
+ logForDiagnosticsNoPII("info", "prefetch_system_context_non_interactive");
323
+ void getSystemContext();
324
+ return;
325
+ }
326
+ const hasTrust = checkHasTrustDialogAccepted();
327
+ if (hasTrust) {
328
+ logForDiagnosticsNoPII("info", "prefetch_system_context_has_trust");
329
+ void getSystemContext();
330
+ } else {
331
+ logForDiagnosticsNoPII("info", "prefetch_system_context_skipped_no_trust");
332
+ }
333
+ }
334
+ function startDeferredPrefetches() {
335
+ if (isEnvTruthy(process.env.XCODE_EXIT_AFTER_FIRST_RENDER) || // --bare: skip ALL prefetches. These are cache-warms for the REPL's
336
+ // first-turn responsiveness (initUser, getUserContext, tips, countFiles,
337
+ // modelCapabilities, change detectors). Scripted -p calls don't have a
338
+ // "user is typing" window to hide this work in — it's pure overhead on
339
+ // the critical path.
340
+ isBareMode()) {
341
+ return;
342
+ }
343
+ void initUser();
344
+ void getUserContext();
345
+ prefetchSystemContextIfSafe();
346
+ void getRelevantTips();
347
+ if (isEnvTruthy(process.env.XCODE_USE_BEDROCK) && !isEnvTruthy(process.env.XCODE_SKIP_BEDROCK_AUTH)) {
348
+ void prefetchAwsCredentialsAndBedRockInfoIfSafe();
349
+ }
350
+ if (isEnvTruthy(process.env.XCODE_USE_VERTEX) && !isEnvTruthy(process.env.XCODE_SKIP_VERTEX_AUTH)) {
351
+ void prefetchGcpCredentialsIfSafe();
352
+ }
353
+ void countFilesRoundedRg(getCwd(), AbortSignal.timeout(3e3), []);
354
+ void initializeAnalyticsGates();
355
+ void prefetchOfficialMcpUrls();
356
+ void refreshModelCapabilities();
357
+ void settingsChangeDetector.initialize();
358
+ if (!isBareMode()) {
359
+ void skillChangeDetector.initialize();
360
+ }
361
+ if (false) {
362
+ void null.then((m) => m.startEventLoopStallDetector());
363
+ }
364
+ }
365
+ function loadSettingsFromFlag(settingsFile) {
366
+ try {
367
+ const trimmedSettings = settingsFile.trim();
368
+ const looksLikeJson = trimmedSettings.startsWith("{") && trimmedSettings.endsWith("}");
369
+ let settingsPath;
370
+ if (looksLikeJson) {
371
+ const parsedJson = safeParseJSON(trimmedSettings);
372
+ if (!parsedJson) {
373
+ process.stderr.write(chalk.red("Error: Invalid JSON provided to --settings\n"));
374
+ process.exit(1);
375
+ }
376
+ settingsPath = generateTempFilePath("claude-settings", ".json", {
377
+ contentHash: trimmedSettings
378
+ });
379
+ writeFileSync_DEPRECATED(settingsPath, trimmedSettings, "utf8");
380
+ } else {
381
+ const {
382
+ resolvedPath: resolvedSettingsPath
383
+ } = safeResolvePath(getFsImplementation(), settingsFile);
384
+ try {
385
+ readFileSync(resolvedSettingsPath, "utf8");
386
+ } catch (e) {
387
+ if (isENOENT(e)) {
388
+ process.stderr.write(chalk.red(`Error: Settings file not found: ${resolvedSettingsPath}
389
+ `));
390
+ process.exit(1);
391
+ }
392
+ throw e;
393
+ }
394
+ settingsPath = resolvedSettingsPath;
395
+ }
396
+ setFlagSettingsPath(settingsPath);
397
+ resetSettingsCache();
398
+ } catch (error) {
399
+ if (error instanceof Error) {
400
+ logError(error);
401
+ }
402
+ process.stderr.write(chalk.red(`Error processing settings: ${errorMessage(error)}
403
+ `));
404
+ process.exit(1);
405
+ }
406
+ }
407
+ function loadSettingSourcesFromFlag(settingSourcesArg) {
408
+ try {
409
+ const sources = parseSettingSourcesFlag(settingSourcesArg);
410
+ setAllowedSettingSources(sources);
411
+ resetSettingsCache();
412
+ } catch (error) {
413
+ if (error instanceof Error) {
414
+ logError(error);
415
+ }
416
+ process.stderr.write(chalk.red(`Error processing --setting-sources: ${errorMessage(error)}
417
+ `));
418
+ process.exit(1);
419
+ }
420
+ }
421
+ function eagerLoadSettings() {
422
+ profileCheckpoint("eagerLoadSettings_start");
423
+ const settingsFile = eagerParseCliFlag("--settings");
424
+ if (settingsFile) {
425
+ loadSettingsFromFlag(settingsFile);
426
+ }
427
+ const settingSourcesArg = eagerParseCliFlag("--setting-sources");
428
+ if (settingSourcesArg !== void 0) {
429
+ loadSettingSourcesFromFlag(settingSourcesArg);
430
+ }
431
+ profileCheckpoint("eagerLoadSettings_end");
432
+ }
433
+ function initializeEntrypoint(isNonInteractive) {
434
+ if (process.env.XCODE_ENTRYPOINT) {
435
+ return;
436
+ }
437
+ const cliArgs = process.argv.slice(2);
438
+ const mcpIndex = cliArgs.indexOf("mcp");
439
+ if (mcpIndex !== -1 && cliArgs[mcpIndex + 1] === "serve") {
440
+ process.env.XCODE_ENTRYPOINT = "mcp";
441
+ return;
442
+ }
443
+ if (isEnvTruthy(process.env.XCODE_ACTION)) {
444
+ process.env.XCODE_ENTRYPOINT = "memcode-github-action";
445
+ return;
446
+ }
447
+ process.env.XCODE_ENTRYPOINT = isNonInteractive ? "sdk-cli" : "cli";
448
+ }
449
+ const _pendingConnect = feature("DIRECT_CONNECT") ? {
450
+ url: void 0,
451
+ authToken: void 0,
452
+ dangerouslySkipPermissions: false
453
+ } : void 0;
454
+ const _pendingAssistantChat = feature("KAIROS") ? {
455
+ sessionId: void 0,
456
+ discover: false
457
+ } : void 0;
458
+ const _pendingSSH = feature("SSH_REMOTE") ? {
459
+ host: void 0,
460
+ cwd: void 0,
461
+ permissionMode: void 0,
462
+ dangerouslySkipPermissions: false,
463
+ local: false,
464
+ extraCliArgs: []
465
+ } : void 0;
466
+ async function main() {
467
+ profileCheckpoint("main_function_start");
468
+ process.env.NoDefaultCurrentDirectoryInExePath = "1";
469
+ initializeWarningHandler();
470
+ process.on("exit", () => {
471
+ resetCursor();
472
+ });
473
+ process.on("SIGINT", () => {
474
+ if (process.argv.includes("-p") || process.argv.includes("--print")) {
475
+ return;
476
+ }
477
+ process.exit(0);
478
+ });
479
+ profileCheckpoint("main_warning_handler_initialized");
480
+ if (feature("DIRECT_CONNECT")) {
481
+ const rawCliArgs = process.argv.slice(2);
482
+ const ccIdx = rawCliArgs.findIndex((a) => a.startsWith("cc://") || a.startsWith("cc+unix://"));
483
+ if (ccIdx !== -1 && _pendingConnect) {
484
+ const ccUrl = rawCliArgs[ccIdx];
485
+ const {
486
+ parseConnectUrl
487
+ } = await import("./server/parseConnectUrl.js");
488
+ const parsed = parseConnectUrl(ccUrl);
489
+ _pendingConnect.dangerouslySkipPermissions = rawCliArgs.includes("--dangerously-skip-permissions");
490
+ if (rawCliArgs.includes("-p") || rawCliArgs.includes("--print")) {
491
+ const stripped = rawCliArgs.filter((_, i) => i !== ccIdx);
492
+ const dspIdx = stripped.indexOf("--dangerously-skip-permissions");
493
+ if (dspIdx !== -1) {
494
+ stripped.splice(dspIdx, 1);
495
+ }
496
+ process.argv = [process.argv[0], process.argv[1], "open", ccUrl, ...stripped];
497
+ } else {
498
+ _pendingConnect.url = parsed.serverUrl;
499
+ _pendingConnect.authToken = parsed.authToken;
500
+ const stripped = rawCliArgs.filter((_, i) => i !== ccIdx);
501
+ const dspIdx = stripped.indexOf("--dangerously-skip-permissions");
502
+ if (dspIdx !== -1) {
503
+ stripped.splice(dspIdx, 1);
504
+ }
505
+ process.argv = [process.argv[0], process.argv[1], ...stripped];
506
+ }
507
+ }
508
+ }
509
+ if (feature("LODESTONE")) {
510
+ const handleUriIdx = process.argv.indexOf("--handle-uri");
511
+ if (handleUriIdx !== -1 && process.argv[handleUriIdx + 1]) {
512
+ const {
513
+ enableConfigs
514
+ } = await import("./utils/config.js");
515
+ enableConfigs();
516
+ const uri = process.argv[handleUriIdx + 1];
517
+ const {
518
+ handleDeepLinkUri
519
+ } = await import("./utils/deepLink/protocolHandler.js");
520
+ const exitCode = await handleDeepLinkUri(uri);
521
+ process.exit(exitCode);
522
+ }
523
+ if (process.platform === "darwin" && process.env.__CFBundleIdentifier === "com.xortex.memcode-url-handler") {
524
+ const {
525
+ enableConfigs
526
+ } = await import("./utils/config.js");
527
+ enableConfigs();
528
+ const {
529
+ handleUrlSchemeLaunch
530
+ } = await import("./utils/deepLink/protocolHandler.js");
531
+ const urlSchemeResult = await handleUrlSchemeLaunch();
532
+ process.exit(urlSchemeResult ?? 1);
533
+ }
534
+ }
535
+ if (feature("KAIROS") && _pendingAssistantChat) {
536
+ const rawArgs = process.argv.slice(2);
537
+ if (rawArgs[0] === "assistant") {
538
+ const nextArg = rawArgs[1];
539
+ if (nextArg && !nextArg.startsWith("-")) {
540
+ _pendingAssistantChat.sessionId = nextArg;
541
+ rawArgs.splice(0, 2);
542
+ process.argv = [process.argv[0], process.argv[1], ...rawArgs];
543
+ } else if (!nextArg) {
544
+ _pendingAssistantChat.discover = true;
545
+ rawArgs.splice(0, 1);
546
+ process.argv = [process.argv[0], process.argv[1], ...rawArgs];
547
+ }
548
+ }
549
+ }
550
+ if (feature("SSH_REMOTE") && _pendingSSH) {
551
+ const rawCliArgs = process.argv.slice(2);
552
+ if (rawCliArgs[0] === "ssh") {
553
+ const localIdx = rawCliArgs.indexOf("--local");
554
+ if (localIdx !== -1) {
555
+ _pendingSSH.local = true;
556
+ rawCliArgs.splice(localIdx, 1);
557
+ }
558
+ const dspIdx = rawCliArgs.indexOf("--dangerously-skip-permissions");
559
+ if (dspIdx !== -1) {
560
+ _pendingSSH.dangerouslySkipPermissions = true;
561
+ rawCliArgs.splice(dspIdx, 1);
562
+ }
563
+ const pmIdx = rawCliArgs.indexOf("--permission-mode");
564
+ if (pmIdx !== -1 && rawCliArgs[pmIdx + 1] && !rawCliArgs[pmIdx + 1].startsWith("-")) {
565
+ _pendingSSH.permissionMode = rawCliArgs[pmIdx + 1];
566
+ rawCliArgs.splice(pmIdx, 2);
567
+ }
568
+ const pmEqIdx = rawCliArgs.findIndex((a) => a.startsWith("--permission-mode="));
569
+ if (pmEqIdx !== -1) {
570
+ _pendingSSH.permissionMode = rawCliArgs[pmEqIdx].split("=")[1];
571
+ rawCliArgs.splice(pmEqIdx, 1);
572
+ }
573
+ const extractFlag = (flag, opts = {}) => {
574
+ const i = rawCliArgs.indexOf(flag);
575
+ if (i !== -1) {
576
+ _pendingSSH.extraCliArgs.push(opts.as ?? flag);
577
+ const val = rawCliArgs[i + 1];
578
+ if (opts.hasValue && val && !val.startsWith("-")) {
579
+ _pendingSSH.extraCliArgs.push(val);
580
+ rawCliArgs.splice(i, 2);
581
+ } else {
582
+ rawCliArgs.splice(i, 1);
583
+ }
584
+ }
585
+ const eqI = rawCliArgs.findIndex((a) => a.startsWith(`${flag}=`));
586
+ if (eqI !== -1) {
587
+ _pendingSSH.extraCliArgs.push(opts.as ?? flag, rawCliArgs[eqI].slice(flag.length + 1));
588
+ rawCliArgs.splice(eqI, 1);
589
+ }
590
+ };
591
+ extractFlag("-c", {
592
+ as: "--continue"
593
+ });
594
+ extractFlag("--continue");
595
+ extractFlag("--resume", {
596
+ hasValue: true
597
+ });
598
+ extractFlag("--model", {
599
+ hasValue: true
600
+ });
601
+ }
602
+ if (rawCliArgs[0] === "ssh" && rawCliArgs[1] && !rawCliArgs[1].startsWith("-")) {
603
+ _pendingSSH.host = rawCliArgs[1];
604
+ let consumed = 2;
605
+ if (rawCliArgs[2] && !rawCliArgs[2].startsWith("-")) {
606
+ _pendingSSH.cwd = rawCliArgs[2];
607
+ consumed = 3;
608
+ }
609
+ const rest = rawCliArgs.slice(consumed);
610
+ if (rest.includes("-p") || rest.includes("--print")) {
611
+ process.stderr.write("Error: headless (-p/--print) mode is not supported with claude ssh\n");
612
+ gracefulShutdownSync(1);
613
+ return;
614
+ }
615
+ process.argv = [process.argv[0], process.argv[1], ...rest];
616
+ }
617
+ }
618
+ const cliArgs = process.argv.slice(2);
619
+ const hasPrintFlag = cliArgs.includes("-p") || cliArgs.includes("--print");
620
+ const hasInitOnlyFlag = cliArgs.includes("--init-only");
621
+ const hasSdkUrl = cliArgs.some((arg) => arg.startsWith("--sdk-url"));
622
+ const forceInteractive = !hasPrintFlag;
623
+ const isNonInteractive = hasPrintFlag || hasInitOnlyFlag || hasSdkUrl || !forceInteractive && !process.stdout.isTTY;
624
+ if (isNonInteractive) {
625
+ stopCapturingEarlyInput();
626
+ }
627
+ const isInteractive = !isNonInteractive;
628
+ setIsInteractive(isInteractive);
629
+ initializeEntrypoint(isNonInteractive);
630
+ const clientType = (() => {
631
+ if (isEnvTruthy(process.env.GITHUB_ACTIONS)) return "github-action";
632
+ if (process.env.XCODE_ENTRYPOINT === "sdk-ts") return "sdk-typescript";
633
+ if (process.env.XCODE_ENTRYPOINT === "sdk-py") return "sdk-python";
634
+ if (process.env.XCODE_ENTRYPOINT === "sdk-cli") return "sdk-cli";
635
+ if (process.env.XCODE_ENTRYPOINT === "memcode-vscode") return "memcode-vscode";
636
+ if (process.env.XCODE_ENTRYPOINT === "local-agent") return "local-agent";
637
+ if (process.env.XCODE_ENTRYPOINT === "memcode-desktop" || process.env.XCODE_ENTRYPOINT === "claude-desktop") return "memcode-desktop";
638
+ const hasSessionIngressToken = process.env.XCODE_SESSION_ACCESS_TOKEN || process.env.XCODE_WEBSOCKET_AUTH_FILE_DESCRIPTOR;
639
+ if (process.env.XCODE_ENTRYPOINT === "remote" || hasSessionIngressToken) {
640
+ return "remote";
641
+ }
642
+ return "cli";
643
+ })();
644
+ setClientType(clientType);
645
+ const previewFormat = process.env.XCODE_QUESTION_PREVIEW_FORMAT;
646
+ if (previewFormat === "markdown" || previewFormat === "html") {
647
+ setQuestionPreviewFormat(previewFormat);
648
+ } else if (!clientType.startsWith("sdk-") && // Desktop and CCR pass previewFormat via toolConfig; when the feature is
649
+ // gated off they pass undefined — don't override that with markdown.
650
+ clientType !== "memcode-desktop" && clientType !== "local-agent" && clientType !== "remote") {
651
+ setQuestionPreviewFormat("markdown");
652
+ }
653
+ if (process.env.XCODE_ENVIRONMENT_KIND === "bridge") {
654
+ setSessionSource("remote-control");
655
+ }
656
+ profileCheckpoint("main_client_type_determined");
657
+ eagerLoadSettings();
658
+ profileCheckpoint("main_before_run");
659
+ await run();
660
+ profileCheckpoint("main_after_run");
661
+ }
662
+ async function getInputPrompt(prompt, inputFormat) {
663
+ if (isEnvTruthy(process.env.XCODE_SKIP_STDIN_PROBE)) {
664
+ logForDebugging("[STARTUP] Skipping stdin probe due to XCODE_SKIP_STDIN_PROBE");
665
+ return prompt;
666
+ }
667
+ if (!process.stdin.isTTY && // Input hijacking breaks MCP.
668
+ !process.argv.includes("mcp")) {
669
+ if (inputFormat === "stream-json") {
670
+ return process.stdin;
671
+ }
672
+ process.stdin.setEncoding("utf8");
673
+ let data = "";
674
+ const onData = (chunk) => {
675
+ data += chunk;
676
+ };
677
+ process.stdin.on("data", onData);
678
+ const timedOut = await peekForStdinData(process.stdin, 3e3);
679
+ process.stdin.off("data", onData);
680
+ if (timedOut) {
681
+ process.stderr.write("Warning: no stdin data received in 3s, proceeding without it. If piping from a slow command, redirect stdin explicitly: < /dev/null to skip, or wait longer.\n");
682
+ }
683
+ return [prompt, data].filter(Boolean).join("\n");
684
+ }
685
+ return prompt;
686
+ }
687
+ async function run() {
688
+ profileCheckpoint("run_function_start");
689
+ function createSortedHelpConfig() {
690
+ const getOptionSortKey = (opt) => opt.long?.replace(/^--/, "") ?? opt.short?.replace(/^-/, "") ?? "";
691
+ return Object.assign({
692
+ sortSubcommands: true,
693
+ sortOptions: true
694
+ }, {
695
+ compareOptions: (a, b) => getOptionSortKey(a).localeCompare(getOptionSortKey(b))
696
+ });
697
+ }
698
+ const program = new CommanderCommand().configureHelp(createSortedHelpConfig()).enablePositionalOptions();
699
+ profileCheckpoint("run_commander_initialized");
700
+ program.hook("preAction", async (thisCommand) => {
701
+ profileCheckpoint("preAction_start");
702
+ await Promise.all([
703
+ failOpenStartupGate("MDM settings", ensureMdmSettingsLoaded()),
704
+ failOpenStartupGate("keychain prefetch", ensureKeychainPrefetchCompleted())
705
+ ]);
706
+ profileCheckpoint("preAction_after_mdm");
707
+ await init();
708
+ profileCheckpoint("preAction_after_init");
709
+ if (!isEnvTruthy(process.env.XCODE_DISABLE_TERMINAL_TITLE)) {
710
+ process.title = "memcode";
711
+ }
712
+ const {
713
+ initSinks
714
+ } = await import("./utils/sinks.js");
715
+ initSinks();
716
+ profileCheckpoint("preAction_after_sinks");
717
+ const pluginDir = thisCommand.getOptionValue("pluginDir");
718
+ if (Array.isArray(pluginDir) && pluginDir.length > 0 && pluginDir.every((p) => typeof p === "string")) {
719
+ setInlinePlugins(pluginDir);
720
+ clearPluginCache("preAction: --plugin-dir inline plugins");
721
+ }
722
+ runMigrations();
723
+ profileCheckpoint("preAction_after_migrations");
724
+ void loadRemoteManagedSettings();
725
+ void loadPolicyLimits();
726
+ profileCheckpoint("preAction_after_remote_settings");
727
+ if (feature("UPLOAD_USER_SETTINGS")) {
728
+ void import("./services/settingsSync/index.js").then((m) => m.uploadUserSettingsInBackground());
729
+ }
730
+ profileCheckpoint("preAction_after_settings_sync");
731
+ });
732
+ program.name("memcode").description(`memCode - starts an interactive session by default, use -p/--print for non-interactive output`).argument("[prompt]", "Your prompt", String).helpOption("-h, --help", "Display help for command").option("-d, --debug [filter]", 'Enable debug mode with optional category filtering (e.g., "api,hooks" or "!1p,!file")', (_value) => {
733
+ return true;
734
+ }).addOption(new Option("--debug-to-stderr", "Enable debug mode (to stderr)").argParser(Boolean).hideHelp()).option("--debug-file <path>", "Write debug logs to a specific file path (implicitly enables debug mode)", () => true).option("--verbose", "Override verbose mode setting from config", () => true).option("-p, --print", "Print response and exit (useful for pipes). Note: The workspace trust dialog is skipped in -p mode. Only use this flag in directories you trust.", () => true).option("--bare", "Minimal mode: skip hooks, LSP, plugin sync, attribution, auto-memory, background prefetches, keychain reads, and XCODE.md auto-discovery. Sets XCODE_SIMPLE=1. Use OPENROUTER_API_KEY, OPENAI_API_KEY, XCODE_API_URL, GEMINI_API_KEY, or --settings for credentials. Explicitly provide context via: --system-prompt[-file], --append-system-prompt[-file], --add-dir (XCODE.md dirs), --mcp-config, --settings, --agents, --plugin-dir.", () => true).addOption(new Option("--init", "Run Setup hooks with init trigger, then continue").hideHelp()).addOption(new Option("--init-only", "Run Setup and SessionStart:startup hooks, then exit").hideHelp()).addOption(new Option("--maintenance", "Run Setup hooks with maintenance trigger, then continue").hideHelp()).addOption(new Option("--output-format <format>", 'Output format (only works with --print): "text" (default), "json" (single result), or "stream-json" (realtime streaming)').choices(["text", "json", "stream-json"])).addOption(new Option("--json-schema <schema>", 'JSON Schema for structured output validation. Example: {"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}').argParser(String)).option("--include-hook-events", "Include all hook lifecycle events in the output stream (only works with --output-format=stream-json)", () => true).option("--include-partial-messages", "Include partial message chunks as they arrive (only works with --print and --output-format=stream-json)", () => true).addOption(new Option("--input-format <format>", 'Input format (only works with --print): "text" (default), or "stream-json" (realtime streaming input)').choices(["text", "stream-json"])).option("--mcp-debug", "[DEPRECATED. Use --debug instead] Enable MCP debug mode (shows MCP server errors)", () => true).option("--dangerously-skip-permissions", "Bypass all permission checks. Recommended only for sandboxes with no internet access.", () => true).option("--allow-dangerously-skip-permissions", "Enable bypassing all permission checks as an option, without it being enabled by default. Recommended only for sandboxes with no internet access.", () => true).addOption(new Option("--thinking <mode>", "Thinking mode: enabled (equivalent to adaptive), disabled").choices(["enabled", "adaptive", "disabled"]).hideHelp()).addOption(new Option("--max-thinking-tokens <tokens>", "[DEPRECATED. Use --thinking instead for newer models] Maximum number of thinking tokens (only works with --print)").argParser(Number).hideHelp()).addOption(new Option("--max-turns <turns>", "Maximum number of agentic turns in non-interactive mode. This will early exit the conversation after the specified number of turns. (only works with --print)").argParser(Number).hideHelp()).addOption(new Option("--max-budget-usd <amount>", "Maximum dollar amount to spend on API calls (only works with --print)").argParser((value) => {
735
+ const amount = Number(value);
736
+ if (isNaN(amount) || amount <= 0) {
737
+ throw new Error("--max-budget-usd must be a positive number greater than 0");
738
+ }
739
+ return amount;
740
+ })).addOption(new Option("--task-budget <tokens>", "API-side task budget in tokens (output_config.task_budget)").argParser((value) => {
741
+ const tokens = Number(value);
742
+ if (isNaN(tokens) || tokens <= 0 || !Number.isInteger(tokens)) {
743
+ throw new Error("--task-budget must be a positive integer");
744
+ }
745
+ return tokens;
746
+ }).hideHelp()).option("--replay-user-messages", "Re-emit user messages from stdin back on stdout for acknowledgment (only works with --input-format=stream-json and --output-format=stream-json)", () => true).addOption(new Option("--enable-auth-status", "Enable auth status messages in SDK mode").default(false).hideHelp()).option("--allowedTools, --allowed-tools <tools...>", 'Comma or space-separated list of tool names to allow (e.g. "Bash(git:*) Edit")').option("--tools <tools...>", 'Specify the list of available tools from the built-in set. Use "" to disable all tools, "default" to use all tools, or specify tool names (e.g. "Bash,Edit,Read").').option("--disallowedTools, --disallowed-tools <tools...>", 'Comma or space-separated list of tool names to deny (e.g. "Bash(git:*) Edit")').option("--mcp-config <configs...>", "Load MCP servers from JSON files or strings (space-separated)").addOption(new Option("--permission-prompt-tool <tool>", "MCP tool to use for permission prompts (only works with --print)").argParser(String).hideHelp()).addOption(new Option("--system-prompt <prompt>", "System prompt to use for the session").argParser(String)).addOption(new Option("--system-prompt-file <file>", "Read system prompt from a file").argParser(String).hideHelp()).addOption(new Option("--append-system-prompt <prompt>", "Append a system prompt to the default system prompt").argParser(String)).addOption(new Option("--append-system-prompt-file <file>", "Read system prompt from a file and append to the default system prompt").argParser(String).hideHelp()).addOption(new Option("--permission-mode <mode>", "Permission mode to use for the session").argParser(String).choices(PERMISSION_MODES)).option("-c, --continue", "Continue the most recent conversation in the current directory", () => true).option("-r, --resume [value]", "Resume a conversation by session ID, or open interactive picker with optional search term", (value) => value || true).option("--fork-session", "When resuming, create a new session ID instead of reusing the original (use with --resume or --continue)", () => true).addOption(new Option("--prefill <text>", "Pre-fill the prompt input with text without submitting it").hideHelp()).addOption(new Option("--deep-link-origin", "Signal that this session was launched from a deep link").hideHelp()).addOption(new Option("--deep-link-repo <slug>", "Repo slug the deep link ?repo= parameter resolved to the current cwd").hideHelp()).addOption(new Option("--deep-link-last-fetch <ms>", "FETCH_HEAD mtime in epoch ms, precomputed by the deep link trampoline").argParser((v) => {
747
+ const n = Number(v);
748
+ return Number.isFinite(n) ? n : void 0;
749
+ }).hideHelp()).option("--from-pr [value]", "Resume a session linked to a PR by PR number/URL, or open interactive picker with optional search term", (value) => value || true).option("--no-session-persistence", "Disable session persistence - sessions will not be saved to disk and cannot be resumed (only works with --print)").addOption(new Option("--resume-session-at <message id>", "When resuming, only messages up to and including the assistant message with <message.id> (use with --resume in print mode)").argParser(String).hideHelp()).addOption(new Option("--rewind-files <user-message-id>", "Restore files to state at the specified user message and exit (requires --resume)").hideHelp()).option("--model <model>", `Model for the current session. Examples: 'gpt', 'gpt-4o', 'gemini', 'kimi', 'deepseek', or a full provider model name.`).addOption(new Option("--effort <level>", `Effort level for the current session (low, medium, high, max)`).argParser((rawValue) => {
750
+ const value = rawValue.toLowerCase();
751
+ const allowed = ["low", "medium", "high", "max"];
752
+ if (!allowed.includes(value)) {
753
+ throw new InvalidArgumentError(`It must be one of: ${allowed.join(", ")}`);
754
+ }
755
+ return value;
756
+ })).option("--agent <agent>", `Agent for the current session. Overrides the 'agent' setting.`).option("--betas <betas...>", "Beta headers to include in API requests (API key users only)").option("--fallback-model <model>", "Enable automatic fallback to specified model when default model is overloaded (only works with --print)").addOption(new Option("--workload <tag>", "Workload tag for billing-header attribution (cc_workload). Process-scoped; set by SDK daemon callers that spawn subprocesses for cron work. (only works with --print)").hideHelp()).option("--settings <file-or-json>", "Path to a settings JSON file or a JSON string to load additional settings from").option("--add-dir <directories...>", "Additional directories to allow tool access to").option("--ide", "Automatically connect to IDE on startup if exactly one valid IDE is available", () => true).option("--strict-mcp-config", "Only use MCP servers from --mcp-config, ignoring all other MCP configurations", () => true).option("--session-id <uuid>", "Use a specific session ID for the conversation (must be a valid UUID)").option("-n, --name <name>", "Set a display name for this session (shown in /resume and terminal title)").option("--agents <json>", `JSON object defining custom agents (e.g. '{"reviewer": {"description": "Reviews code", "prompt": "You are a code reviewer"}}')`).option("--setting-sources <sources>", "Comma-separated list of setting sources to load (user, project, local).").option("--plugin-dir <path>", "Load plugins from a directory for this session only (repeatable: --plugin-dir A --plugin-dir B)", (val, prev) => [...prev, val], []).option("--disable-slash-commands", "Disable all skills", () => true).addOption(new Option("--chrome", "Enable upstream Chrome integration").hideHelp()).addOption(new Option("--no-chrome", "Disable upstream Chrome integration").hideHelp()).option("--file <specs...>", "File resources to download at startup. Format: file_id:relative_path (e.g., --file file_abc:doc.txt file_def:img.png)").action(async (prompt, options) => {
757
+ profileCheckpoint("action_handler_start");
758
+ if (options.bare) {
759
+ process.env.XCODE_SIMPLE = "1";
760
+ }
761
+ if (prompt === "code") {
762
+ logEvent("tengu_code_prompt_ignored", {});
763
+ console.warn(chalk.yellow("Tip: You can launch memCode with just `memcode`"));
764
+ prompt = void 0;
765
+ }
766
+ if (prompt && typeof prompt === "string" && !/\s/.test(prompt) && prompt.length > 0) {
767
+ logEvent("tengu_single_word_prompt", {
768
+ length: prompt.length
769
+ });
770
+ }
771
+ let kairosEnabled = false;
772
+ let assistantTeamContext;
773
+ if (feature("KAIROS") && options.assistant && assistantModule) {
774
+ assistantModule.markAssistantForced();
775
+ }
776
+ if (feature("KAIROS") && assistantModule?.isAssistantMode() && // Spawned teammates share the leader's cwd + settings.json, so
777
+ // isAssistantMode() is true for them too. --agent-id being set
778
+ // means we ARE a spawned teammate (extractTeammateOptions runs
779
+ // ~170 lines later so check the raw commander option) — don't
780
+ // re-init the team or override teammateMode/proactive/brief.
781
+ !options.agentId && kairosGate) {
782
+ if (!checkHasTrustDialogAccepted()) {
783
+ console.warn(chalk.yellow("Assistant mode disabled: directory is not trusted. Accept the trust dialog and restart."));
784
+ } else {
785
+ kairosEnabled = assistantModule.isAssistantForced() || await kairosGate.isKairosEnabled();
786
+ if (kairosEnabled) {
787
+ const opts = options;
788
+ opts.brief = true;
789
+ setKairosActive(true);
790
+ assistantTeamContext = await assistantModule.initializeAssistantTeam();
791
+ }
792
+ }
793
+ }
794
+ const {
795
+ debug = false,
796
+ debugToStderr = false,
797
+ dangerouslySkipPermissions,
798
+ allowDangerouslySkipPermissions = false,
799
+ tools: baseTools = [],
800
+ allowedTools = [],
801
+ disallowedTools = [],
802
+ mcpConfig = [],
803
+ permissionMode: permissionModeCli,
804
+ addDir = [],
805
+ fallbackModel,
806
+ betas = [],
807
+ ide = false,
808
+ sessionId,
809
+ includeHookEvents,
810
+ includePartialMessages
811
+ } = options;
812
+ if (options.prefill) {
813
+ seedEarlyInput(options.prefill);
814
+ }
815
+ let fileDownloadPromise;
816
+ const agentsJson = options.agents;
817
+ const agentCli = options.agent;
818
+ if (feature("BG_SESSIONS") && agentCli) {
819
+ process.env.XCODE_AGENT = agentCli;
820
+ }
821
+ let outputFormat = options.outputFormat;
822
+ let inputFormat = options.inputFormat;
823
+ let verbose = options.verbose ?? getGlobalConfig().verbose;
824
+ let print = options.print;
825
+ const init2 = options.init ?? false;
826
+ const initOnly = options.initOnly ?? false;
827
+ const maintenance = options.maintenance ?? false;
828
+ const disableSlashCommands = options.disableSlashCommands || false;
829
+ const tasksOption = false;
830
+ const taskListId = tasksOption ? typeof tasksOption === "string" ? tasksOption : DEFAULT_TASKS_MODE_TASK_LIST_ID : void 0;
831
+ if (false) {
832
+ process.env.XCODE_TASK_LIST_ID = taskListId;
833
+ }
834
+ const worktreeOption = isWorktreeModeEnabled() ? options.worktree : void 0;
835
+ let worktreeName = typeof worktreeOption === "string" ? worktreeOption : void 0;
836
+ const worktreeEnabled = worktreeOption !== void 0;
837
+ let worktreePRNumber;
838
+ if (worktreeName) {
839
+ const prNum = parsePRReference(worktreeName);
840
+ if (prNum !== null) {
841
+ worktreePRNumber = prNum;
842
+ worktreeName = void 0;
843
+ }
844
+ }
845
+ const tmuxEnabled = isWorktreeModeEnabled() && options.tmux === true;
846
+ if (tmuxEnabled) {
847
+ if (!worktreeEnabled) {
848
+ process.stderr.write(chalk.red("Error: --tmux requires --worktree\n"));
849
+ process.exit(1);
850
+ }
851
+ if (getPlatform() === "windows") {
852
+ process.stderr.write(chalk.red("Error: --tmux is not supported on Windows\n"));
853
+ process.exit(1);
854
+ }
855
+ if (!await isTmuxAvailable()) {
856
+ process.stderr.write(chalk.red(`Error: tmux is not installed.
857
+ ${getTmuxInstallInstructions()}
858
+ `));
859
+ process.exit(1);
860
+ }
861
+ }
862
+ let storedTeammateOpts;
863
+ if (isAgentSwarmsEnabled()) {
864
+ const teammateOpts = extractTeammateOptions(options);
865
+ storedTeammateOpts = teammateOpts;
866
+ const hasAnyTeammateOpt = teammateOpts.agentId || teammateOpts.agentName || teammateOpts.teamName;
867
+ const hasAllRequiredTeammateOpts = teammateOpts.agentId && teammateOpts.agentName && teammateOpts.teamName;
868
+ if (hasAnyTeammateOpt && !hasAllRequiredTeammateOpts) {
869
+ process.stderr.write(chalk.red("Error: --agent-id, --agent-name, and --team-name must all be provided together\n"));
870
+ process.exit(1);
871
+ }
872
+ if (teammateOpts.agentId && teammateOpts.agentName && teammateOpts.teamName) {
873
+ getTeammateUtils().setDynamicTeamContext?.({
874
+ agentId: teammateOpts.agentId,
875
+ agentName: teammateOpts.agentName,
876
+ teamName: teammateOpts.teamName,
877
+ color: teammateOpts.agentColor,
878
+ planModeRequired: teammateOpts.planModeRequired ?? false,
879
+ parentSessionId: teammateOpts.parentSessionId
880
+ });
881
+ }
882
+ if (teammateOpts.teammateMode) {
883
+ getTeammateModeSnapshot().setCliTeammateModeOverride?.(teammateOpts.teammateMode);
884
+ }
885
+ }
886
+ const sdkUrl = options.sdkUrl ?? void 0;
887
+ const effectiveIncludePartialMessages = includePartialMessages || isEnvTruthy(process.env.XCODE_INCLUDE_PARTIAL_MESSAGES);
888
+ if (includeHookEvents || isEnvTruthy(process.env.XCODE_REMOTE)) {
889
+ setAllHookEventsEnabled(true);
890
+ }
891
+ if (sdkUrl) {
892
+ if (!inputFormat) {
893
+ inputFormat = "stream-json";
894
+ }
895
+ if (!outputFormat) {
896
+ outputFormat = "stream-json";
897
+ }
898
+ if (options.verbose === void 0) {
899
+ verbose = true;
900
+ }
901
+ if (!options.print) {
902
+ print = true;
903
+ }
904
+ }
905
+ const teleport = options.teleport ?? null;
906
+ const remoteOption = options.remote;
907
+ const remote = remoteOption === true ? "" : remoteOption ?? null;
908
+ const remoteControlOption = options.remoteControl ?? options.rc;
909
+ let remoteControl = false;
910
+ const remoteControlName = typeof remoteControlOption === "string" && remoteControlOption.length > 0 ? remoteControlOption : void 0;
911
+ if (sessionId) {
912
+ if ((options.continue || options.resume) && !options.forkSession) {
913
+ process.stderr.write(chalk.red("Error: --session-id can only be used with --continue or --resume if --fork-session is also specified.\n"));
914
+ process.exit(1);
915
+ }
916
+ if (!sdkUrl) {
917
+ const validatedSessionId = validateUuid(sessionId);
918
+ if (!validatedSessionId) {
919
+ process.stderr.write(chalk.red("Error: Invalid session ID. Must be a valid UUID.\n"));
920
+ process.exit(1);
921
+ }
922
+ if (sessionIdExists(validatedSessionId)) {
923
+ process.stderr.write(chalk.red(`Error: Session ID ${validatedSessionId} is already in use.
924
+ `));
925
+ process.exit(1);
926
+ }
927
+ }
928
+ }
929
+ const fileSpecs = options.file;
930
+ if (fileSpecs && fileSpecs.length > 0) {
931
+ const sessionToken = getSessionIngressAuthToken();
932
+ if (!sessionToken) {
933
+ process.stderr.write(chalk.red("Error: Session token required for file downloads. XCODE_SESSION_ACCESS_TOKEN must be set.\n"));
934
+ process.exit(1);
935
+ }
936
+ const fileSessionId = process.env.XCODE_REMOTE_SESSION_ID || getSessionId();
937
+ const files = parseFileSpecs(fileSpecs);
938
+ if (files.length > 0) {
939
+ const config = {
940
+ baseUrl: process.env.ANTHROPIC_BASE_URL || getOauthConfig().BASE_API_URL,
941
+ oauthToken: sessionToken,
942
+ sessionId: fileSessionId
943
+ };
944
+ fileDownloadPromise = downloadSessionFiles(files, config);
945
+ }
946
+ }
947
+ const isNonInteractiveSession = getIsNonInteractiveSession();
948
+ if (fallbackModel && options.model && fallbackModel === options.model) {
949
+ process.stderr.write(chalk.red("Error: Fallback model cannot be the same as the main model. Please specify a different model for --fallback-model.\n"));
950
+ process.exit(1);
951
+ }
952
+ let systemPrompt = options.systemPrompt;
953
+ if (options.systemPromptFile) {
954
+ if (options.systemPrompt) {
955
+ process.stderr.write(chalk.red("Error: Cannot use both --system-prompt and --system-prompt-file. Please use only one.\n"));
956
+ process.exit(1);
957
+ }
958
+ try {
959
+ const filePath = resolve(options.systemPromptFile);
960
+ systemPrompt = readFileSync(filePath, "utf8");
961
+ } catch (error) {
962
+ const code = getErrnoCode(error);
963
+ if (code === "ENOENT") {
964
+ process.stderr.write(chalk.red(`Error: System prompt file not found: ${resolve(options.systemPromptFile)}
965
+ `));
966
+ process.exit(1);
967
+ }
968
+ process.stderr.write(chalk.red(`Error reading system prompt file: ${errorMessage(error)}
969
+ `));
970
+ process.exit(1);
971
+ }
972
+ }
973
+ let appendSystemPrompt = options.appendSystemPrompt;
974
+ if (options.appendSystemPromptFile) {
975
+ if (options.appendSystemPrompt) {
976
+ process.stderr.write(chalk.red("Error: Cannot use both --append-system-prompt and --append-system-prompt-file. Please use only one.\n"));
977
+ process.exit(1);
978
+ }
979
+ try {
980
+ const filePath = resolve(options.appendSystemPromptFile);
981
+ appendSystemPrompt = readFileSync(filePath, "utf8");
982
+ } catch (error) {
983
+ const code = getErrnoCode(error);
984
+ if (code === "ENOENT") {
985
+ process.stderr.write(chalk.red(`Error: Append system prompt file not found: ${resolve(options.appendSystemPromptFile)}
986
+ `));
987
+ process.exit(1);
988
+ }
989
+ process.stderr.write(chalk.red(`Error reading append system prompt file: ${errorMessage(error)}
990
+ `));
991
+ process.exit(1);
992
+ }
993
+ }
994
+ if (isAgentSwarmsEnabled() && storedTeammateOpts?.agentId && storedTeammateOpts?.agentName && storedTeammateOpts?.teamName) {
995
+ const addendum = getTeammatePromptAddendum().TEAMMATE_SYSTEM_PROMPT_ADDENDUM;
996
+ appendSystemPrompt = appendSystemPrompt ? `${appendSystemPrompt}
997
+
998
+ ${addendum}` : addendum;
999
+ }
1000
+ const {
1001
+ mode: permissionMode,
1002
+ notification: permissionModeNotification
1003
+ } = initialPermissionModeFromCLI({
1004
+ permissionModeCli,
1005
+ dangerouslySkipPermissions
1006
+ });
1007
+ setSessionBypassPermissionsMode(permissionMode === "bypassPermissions");
1008
+ if (feature("TRANSCRIPT_CLASSIFIER")) {
1009
+ if (options.enableAutoMode || permissionModeCli === "auto" || permissionMode === "auto" || !permissionModeCli && isDefaultPermissionModeAuto()) {
1010
+ autoModeStateModule?.setAutoModeFlagCli(true);
1011
+ }
1012
+ }
1013
+ let dynamicMcpConfig = {};
1014
+ if (mcpConfig && mcpConfig.length > 0) {
1015
+ const processedConfigs = mcpConfig.map((config) => config.trim()).filter((config) => config.length > 0);
1016
+ let allConfigs = {};
1017
+ const allErrors = [];
1018
+ for (const configItem of processedConfigs) {
1019
+ let configs = null;
1020
+ let errors = [];
1021
+ const parsedJson = safeParseJSON(configItem);
1022
+ if (parsedJson) {
1023
+ const result = parseMcpConfig({
1024
+ configObject: parsedJson,
1025
+ filePath: "command line",
1026
+ expandVars: true,
1027
+ scope: "dynamic"
1028
+ });
1029
+ if (result.config) {
1030
+ configs = result.config.mcpServers;
1031
+ } else {
1032
+ errors = result.errors;
1033
+ }
1034
+ } else {
1035
+ const configPath = resolve(configItem);
1036
+ const result = parseMcpConfigFromFilePath({
1037
+ filePath: configPath,
1038
+ expandVars: true,
1039
+ scope: "dynamic"
1040
+ });
1041
+ if (result.config) {
1042
+ configs = result.config.mcpServers;
1043
+ } else {
1044
+ errors = result.errors;
1045
+ }
1046
+ }
1047
+ if (errors.length > 0) {
1048
+ allErrors.push(...errors);
1049
+ } else if (configs) {
1050
+ allConfigs = {
1051
+ ...allConfigs,
1052
+ ...configs
1053
+ };
1054
+ }
1055
+ }
1056
+ if (allErrors.length > 0) {
1057
+ const formattedErrors = allErrors.map((err) => `${err.path ? err.path + ": " : ""}${err.message}`).join("\n");
1058
+ logForDebugging(`--mcp-config validation failed (${allErrors.length} errors): ${formattedErrors}`, {
1059
+ level: "error"
1060
+ });
1061
+ process.stderr.write(`Error: Invalid MCP configuration:
1062
+ ${formattedErrors}
1063
+ `);
1064
+ process.exit(1);
1065
+ }
1066
+ if (Object.keys(allConfigs).length > 0) {
1067
+ const nonSdkConfigNames = Object.entries(allConfigs).filter(([, config]) => config.type !== "sdk").map(([name]) => name);
1068
+ let reservedNameError = null;
1069
+ if (nonSdkConfigNames.some(ismemCodeInChromeMCPServer)) {
1070
+ reservedNameError = `Invalid MCP configuration: "${XCODE_IN_CHROME_MCP_SERVER_NAME}" is a reserved MCP name.`;
1071
+ } else if (feature("CHICAGO_MCP")) {
1072
+ const {
1073
+ isComputerUseMCPServer,
1074
+ COMPUTER_USE_MCP_SERVER_NAME
1075
+ } = await import("src/utils/computerUse/common.js");
1076
+ if (nonSdkConfigNames.some(isComputerUseMCPServer)) {
1077
+ reservedNameError = `Invalid MCP configuration: "${COMPUTER_USE_MCP_SERVER_NAME}" is a reserved MCP name.`;
1078
+ }
1079
+ }
1080
+ if (reservedNameError) {
1081
+ process.stderr.write(`Error: ${reservedNameError}
1082
+ `);
1083
+ process.exit(1);
1084
+ }
1085
+ const scopedConfigs = mapValues(allConfigs, (config) => ({
1086
+ ...config,
1087
+ scope: "dynamic"
1088
+ }));
1089
+ const {
1090
+ allowed,
1091
+ blocked
1092
+ } = filterMcpServersByPolicy(scopedConfigs);
1093
+ if (blocked.length > 0) {
1094
+ process.stderr.write(`Warning: MCP ${plural(blocked.length, "server")} blocked by enterprise policy: ${blocked.join(", ")}
1095
+ `);
1096
+ }
1097
+ dynamicMcpConfig = {
1098
+ ...dynamicMcpConfig,
1099
+ ...allowed
1100
+ };
1101
+ }
1102
+ }
1103
+ const chromeOpts = options;
1104
+ setChromeFlagOverride(chromeOpts.chrome);
1105
+ const upstreamFeaturesEnabled = isUpstreamFeatureEnabled();
1106
+ const enablememCodeInChrome = upstreamFeaturesEnabled && shouldEnablememCodeInChrome(chromeOpts.chrome) && isClaudeAISubscriber();
1107
+ const autoEnablememCodeInChrome = upstreamFeaturesEnabled && !enablememCodeInChrome && shouldAutoEnablememCodeInChrome();
1108
+ if (enablememCodeInChrome) {
1109
+ const platform = getPlatform();
1110
+ try {
1111
+ logEvent("memcode_in_chrome_setup", {
1112
+ platform
1113
+ });
1114
+ const {
1115
+ mcpConfig: chromeMcpConfig,
1116
+ allowedTools: chromeMcpTools,
1117
+ systemPrompt: chromeSystemPrompt
1118
+ } = setupmemCodeInChrome();
1119
+ dynamicMcpConfig = {
1120
+ ...dynamicMcpConfig,
1121
+ ...chromeMcpConfig
1122
+ };
1123
+ allowedTools.push(...chromeMcpTools);
1124
+ if (chromeSystemPrompt) {
1125
+ appendSystemPrompt = appendSystemPrompt ? `${chromeSystemPrompt}
1126
+
1127
+ ${appendSystemPrompt}` : chromeSystemPrompt;
1128
+ }
1129
+ } catch (error) {
1130
+ logEvent("memcode_in_chrome_setup_failed", {
1131
+ platform
1132
+ });
1133
+ logForDebugging(`[memCode in Chrome] Error: ${error}`);
1134
+ logError(error);
1135
+ console.error(`Error: Failed to run with memCode in Chrome.`);
1136
+ process.exit(1);
1137
+ }
1138
+ } else if (autoEnablememCodeInChrome) {
1139
+ try {
1140
+ const {
1141
+ mcpConfig: chromeMcpConfig
1142
+ } = setupmemCodeInChrome();
1143
+ dynamicMcpConfig = {
1144
+ ...dynamicMcpConfig,
1145
+ ...chromeMcpConfig
1146
+ };
1147
+ const hint = feature("WEB_BROWSER_TOOL") && typeof Bun !== "undefined" && "WebView" in Bun ? XCODE_IN_CHROME_SKILL_HINT_WITH_WEBBROWSER : XCODE_IN_CHROME_SKILL_HINT;
1148
+ appendSystemPrompt = appendSystemPrompt ? `${appendSystemPrompt}
1149
+
1150
+ ${hint}` : hint;
1151
+ } catch (error) {
1152
+ logForDebugging(`[memCode in Chrome] Error (auto-enable): ${error}`);
1153
+ }
1154
+ }
1155
+ const strictMcpConfig = options.strictMcpConfig || false;
1156
+ if (doesEnterpriseMcpConfigExist()) {
1157
+ if (strictMcpConfig) {
1158
+ process.stderr.write(chalk.red("You cannot use --strict-mcp-config when an enterprise MCP config is present"));
1159
+ process.exit(1);
1160
+ }
1161
+ if (dynamicMcpConfig && !areMcpConfigsAllowedWithEnterpriseMcpConfig(dynamicMcpConfig)) {
1162
+ process.stderr.write(chalk.red("You cannot dynamically configure MCP servers when an enterprise MCP config is present"));
1163
+ process.exit(1);
1164
+ }
1165
+ }
1166
+ if (feature("CHICAGO_MCP") && getPlatform() === "macos" && !getIsNonInteractiveSession()) {
1167
+ try {
1168
+ const {
1169
+ getChicagoEnabled
1170
+ } = await import("src/utils/computerUse/gates.js");
1171
+ if (getChicagoEnabled()) {
1172
+ const {
1173
+ setupComputerUseMCP
1174
+ } = await import("src/utils/computerUse/setup.js");
1175
+ const {
1176
+ mcpConfig: mcpConfig2,
1177
+ allowedTools: cuTools
1178
+ } = setupComputerUseMCP();
1179
+ dynamicMcpConfig = {
1180
+ ...dynamicMcpConfig,
1181
+ ...mcpConfig2
1182
+ };
1183
+ allowedTools.push(...cuTools);
1184
+ }
1185
+ } catch (error) {
1186
+ logForDebugging(`[Computer Use MCP] Setup failed: ${errorMessage(error)}`);
1187
+ }
1188
+ }
1189
+ setAdditionalDirectoriesForClaudeMd(addDir);
1190
+ let devChannels;
1191
+ if (feature("KAIROS") || feature("KAIROS_CHANNELS")) {
1192
+ const parseChannelEntries = (raw, flag) => {
1193
+ const entries = [];
1194
+ const bad = [];
1195
+ for (const c of raw) {
1196
+ if (c.startsWith("plugin:")) {
1197
+ const rest = c.slice(7);
1198
+ const at = rest.indexOf("@");
1199
+ if (at <= 0 || at === rest.length - 1) {
1200
+ bad.push(c);
1201
+ } else {
1202
+ entries.push({
1203
+ kind: "plugin",
1204
+ name: rest.slice(0, at),
1205
+ marketplace: rest.slice(at + 1)
1206
+ });
1207
+ }
1208
+ } else if (c.startsWith("server:") && c.length > 7) {
1209
+ entries.push({
1210
+ kind: "server",
1211
+ name: c.slice(7)
1212
+ });
1213
+ } else {
1214
+ bad.push(c);
1215
+ }
1216
+ }
1217
+ if (bad.length > 0) {
1218
+ process.stderr.write(chalk.red(`${flag} entries must be tagged: ${bad.join(", ")}
1219
+ plugin:<name>@<marketplace> \u2014 plugin-provided channel (allowlist enforced)
1220
+ server:<name> \u2014 manually configured MCP server
1221
+ `));
1222
+ process.exit(1);
1223
+ }
1224
+ return entries;
1225
+ };
1226
+ const channelOpts = options;
1227
+ const rawChannels = channelOpts.channels;
1228
+ const rawDev = channelOpts.dangerouslyLoadDevelopmentChannels;
1229
+ let channelEntries = [];
1230
+ if (rawChannels && rawChannels.length > 0) {
1231
+ channelEntries = parseChannelEntries(rawChannels, "--channels");
1232
+ setAllowedChannels(channelEntries);
1233
+ }
1234
+ if (!isNonInteractiveSession) {
1235
+ if (rawDev && rawDev.length > 0) {
1236
+ devChannels = parseChannelEntries(rawDev, "--dangerously-load-development-channels");
1237
+ }
1238
+ }
1239
+ if (channelEntries.length > 0 || (devChannels?.length ?? 0) > 0) {
1240
+ const joinPluginIds = (entries) => {
1241
+ const ids = entries.flatMap((e) => e.kind === "plugin" ? [`${e.name}@${e.marketplace}`] : []);
1242
+ return ids.length > 0 ? ids.sort().join(",") : void 0;
1243
+ };
1244
+ logEvent("tengu_mcp_channel_flags", {
1245
+ channels_count: channelEntries.length,
1246
+ dev_count: devChannels?.length ?? 0,
1247
+ plugins: joinPluginIds(channelEntries),
1248
+ dev_plugins: joinPluginIds(devChannels ?? [])
1249
+ });
1250
+ }
1251
+ }
1252
+ if (isNonInteractiveSession) {
1253
+ applyConfigEnvironmentVariables();
1254
+ }
1255
+ if ((feature("KAIROS") || feature("KAIROS_BRIEF")) && baseTools.length > 0) {
1256
+ const {
1257
+ BRIEF_TOOL_NAME,
1258
+ LEGACY_BRIEF_TOOL_NAME
1259
+ } = require("./tools/BriefTool/prompt.js");
1260
+ const {
1261
+ isBriefEntitled
1262
+ } = require("./tools/BriefTool/BriefTool.js");
1263
+ const parsed = parseToolListFromCLI(baseTools);
1264
+ if ((parsed.includes(BRIEF_TOOL_NAME) || parsed.includes(LEGACY_BRIEF_TOOL_NAME)) && isBriefEntitled()) {
1265
+ setUserMsgOptIn(true);
1266
+ }
1267
+ }
1268
+ const initResult = await initializeToolPermissionContext({
1269
+ allowedToolsCli: allowedTools,
1270
+ disallowedToolsCli: disallowedTools,
1271
+ baseToolsCli: baseTools,
1272
+ permissionMode,
1273
+ allowDangerouslySkipPermissions,
1274
+ addDirs: addDir
1275
+ });
1276
+ let toolPermissionContext = initResult.toolPermissionContext;
1277
+ const {
1278
+ warnings,
1279
+ dangerousPermissions,
1280
+ overlyBroadBashPermissions
1281
+ } = initResult;
1282
+ if (false) {
1283
+ for (const permission of overlyBroadBashPermissions) {
1284
+ logForDebugging(`Ignoring overly broad shell permission ${permission.ruleDisplay} from ${permission.sourceDisplay}`);
1285
+ }
1286
+ toolPermissionContext = removeDangerousPermissions(toolPermissionContext, overlyBroadBashPermissions);
1287
+ }
1288
+ if (feature("TRANSCRIPT_CLASSIFIER") && dangerousPermissions.length > 0) {
1289
+ toolPermissionContext = stripDangerousPermissionsForAutoMode(toolPermissionContext);
1290
+ }
1291
+ warnings.forEach((warning) => {
1292
+ console.error(warning);
1293
+ });
1294
+ void assertMinVersion();
1295
+ const claudeaiConfigPromise = isNonInteractiveSession && !strictMcpConfig && !doesEnterpriseMcpConfigExist() && // --bare / SIMPLE: skip claude.ai proxy servers (datadog, Gmail,
1296
+ // Slack, BigQuery, PubMed — 6-14s each to connect). Scripted calls
1297
+ // that need MCP pass --mcp-config explicitly.
1298
+ !isBareMode() ? fetchmemCodeProxyMcpConfigsIfEligible().then((configs) => {
1299
+ const {
1300
+ allowed,
1301
+ blocked
1302
+ } = filterMcpServersByPolicy(configs);
1303
+ if (blocked.length > 0) {
1304
+ process.stderr.write(`Warning: memCode MCP ${plural(blocked.length, "server")} blocked by enterprise policy: ${blocked.join(", ")}
1305
+ `);
1306
+ }
1307
+ return allowed;
1308
+ }) : Promise.resolve({});
1309
+ logForDebugging("[STARTUP] Loading MCP configs...");
1310
+ const mcpConfigStart = Date.now();
1311
+ let mcpConfigResolvedMs;
1312
+ const mcpConfigPromise = (strictMcpConfig || isBareMode() ? Promise.resolve({
1313
+ servers: {}
1314
+ }) : getClaudeCodeMcpConfigs(dynamicMcpConfig)).then((result) => {
1315
+ mcpConfigResolvedMs = Date.now() - mcpConfigStart;
1316
+ return result;
1317
+ });
1318
+ if (inputFormat && inputFormat !== "text" && inputFormat !== "stream-json") {
1319
+ console.error(`Error: Invalid input format "${inputFormat}".`);
1320
+ process.exit(1);
1321
+ }
1322
+ if (inputFormat === "stream-json" && outputFormat !== "stream-json") {
1323
+ console.error(`Error: --input-format=stream-json requires output-format=stream-json.`);
1324
+ process.exit(1);
1325
+ }
1326
+ if (sdkUrl) {
1327
+ if (inputFormat !== "stream-json" || outputFormat !== "stream-json") {
1328
+ console.error(`Error: --sdk-url requires both --input-format=stream-json and --output-format=stream-json.`);
1329
+ process.exit(1);
1330
+ }
1331
+ }
1332
+ if (options.replayUserMessages) {
1333
+ if (inputFormat !== "stream-json" || outputFormat !== "stream-json") {
1334
+ console.error(`Error: --replay-user-messages requires both --input-format=stream-json and --output-format=stream-json.`);
1335
+ process.exit(1);
1336
+ }
1337
+ }
1338
+ if (effectiveIncludePartialMessages) {
1339
+ if (!isNonInteractiveSession || outputFormat !== "stream-json") {
1340
+ writeToStderr(`Error: --include-partial-messages requires --print and --output-format=stream-json.`);
1341
+ process.exit(1);
1342
+ }
1343
+ }
1344
+ if (options.sessionPersistence === false && !isNonInteractiveSession) {
1345
+ writeToStderr(`Error: --no-session-persistence can only be used with --print mode.`);
1346
+ process.exit(1);
1347
+ }
1348
+ const effectivePrompt = prompt || "";
1349
+ logForDebugging("[STARTUP] Resolving input prompt, stdinTTY=" + process.stdin.isTTY + ", stdoutTTY=" + process.stdout.isTTY);
1350
+ let inputPrompt = await getInputPrompt(effectivePrompt, inputFormat ?? "text");
1351
+ logForDebugging("[STARTUP] Input prompt resolved");
1352
+ profileCheckpoint("action_after_input_prompt");
1353
+ maybeActivateProactive(options);
1354
+ logForDebugging("[STARTUP] Loading built-in tools...");
1355
+ let tools = getTools(toolPermissionContext);
1356
+ logForDebugging("[STARTUP] Built-in tools loaded: " + tools.length);
1357
+ if (feature("COORDINATOR_MODE") && isEnvTruthy(process.env.XCODE_COORDINATOR_MODE)) {
1358
+ const {
1359
+ applyCoordinatorToolFilter
1360
+ } = await import("./utils/toolPool.js");
1361
+ tools = applyCoordinatorToolFilter(tools);
1362
+ }
1363
+ profileCheckpoint("action_tools_loaded");
1364
+ let jsonSchema;
1365
+ if (isSyntheticOutputToolEnabled({
1366
+ isNonInteractiveSession
1367
+ }) && options.jsonSchema) {
1368
+ jsonSchema = jsonParse(options.jsonSchema);
1369
+ }
1370
+ if (jsonSchema) {
1371
+ const syntheticOutputResult = createSyntheticOutputTool(jsonSchema);
1372
+ if ("tool" in syntheticOutputResult) {
1373
+ tools = [...tools, syntheticOutputResult.tool];
1374
+ logEvent("tengu_structured_output_enabled", {
1375
+ schema_property_count: Object.keys(jsonSchema.properties || {}).length,
1376
+ has_required_fields: Boolean(jsonSchema.required)
1377
+ });
1378
+ } else {
1379
+ logEvent("tengu_structured_output_failure", {
1380
+ error: "Invalid JSON schema"
1381
+ });
1382
+ }
1383
+ }
1384
+ profileCheckpoint("action_before_setup");
1385
+ logForDebugging("[STARTUP] Running setup()...");
1386
+ const setupStart = Date.now();
1387
+ const {
1388
+ setup
1389
+ } = await import("./setup.js");
1390
+ const messagingSocketPath = feature("UDS_INBOX") ? options.messagingSocketPath : void 0;
1391
+ const preSetupCwd = getCwd();
1392
+ if (process.env.XCODE_ENTRYPOINT !== "local-agent") {
1393
+ initBuiltinPlugins();
1394
+ initBundledSkills();
1395
+ }
1396
+ logForDebugging("[STARTUP] Starting setup() promise...");
1397
+ const setupPromise = setup(preSetupCwd, permissionMode, allowDangerouslySkipPermissions, worktreeEnabled, worktreeName, tmuxEnabled, sessionId ? validateUuid(sessionId) : void 0, worktreePRNumber, messagingSocketPath);
1398
+ const commandsPromise = worktreeEnabled ? null : getCommands(preSetupCwd);
1399
+ const agentDefsPromise = worktreeEnabled ? null : getAgentDefinitionsWithOverrides(preSetupCwd);
1400
+ commandsPromise?.catch(() => {
1401
+ });
1402
+ agentDefsPromise?.catch(() => {
1403
+ });
1404
+ await setupPromise;
1405
+ logForDebugging(`[STARTUP] setup() completed in ${Date.now() - setupStart}ms`);
1406
+ profileCheckpoint("action_after_setup");
1407
+ let effectiveReplayUserMessages = !!options.replayUserMessages;
1408
+ if (feature("UDS_INBOX")) {
1409
+ if (!effectiveReplayUserMessages && outputFormat === "stream-json") {
1410
+ effectiveReplayUserMessages = !!options.messagingSocketPath;
1411
+ }
1412
+ }
1413
+ if (getIsNonInteractiveSession()) {
1414
+ applyConfigEnvironmentVariables();
1415
+ void getSystemContext();
1416
+ void getUserContext();
1417
+ void ensureModelStringsInitialized();
1418
+ }
1419
+ const sessionNameArg = options.name?.trim();
1420
+ if (sessionNameArg) {
1421
+ cacheSessionTitle(sessionNameArg);
1422
+ }
1423
+ const explicitModel = options.model || process.env.XCODE_MODEL || process.env.ANTHROPIC_MODEL;
1424
+ if (false) {
1425
+ await initializeGrowthBook();
1426
+ }
1427
+ const userSpecifiedModel = options.model === "default" ? getDefaultMainLoopModel() : options.model;
1428
+ const userSpecifiedFallbackModel = fallbackModel === "default" ? getDefaultMainLoopModel() : fallbackModel;
1429
+ const currentCwd = worktreeEnabled ? getCwd() : preSetupCwd;
1430
+ logForDebugging("[STARTUP] Loading commands and agents...");
1431
+ const commandsStart = Date.now();
1432
+ const [commands, agentDefinitionsResult] = await Promise.all([commandsPromise ?? getCommands(currentCwd), agentDefsPromise ?? getAgentDefinitionsWithOverrides(currentCwd)]);
1433
+ logForDebugging(`[STARTUP] Commands and agents loaded in ${Date.now() - commandsStart}ms`);
1434
+ profileCheckpoint("action_commands_loaded");
1435
+ let cliAgents = [];
1436
+ if (agentsJson) {
1437
+ try {
1438
+ const parsedAgents = safeParseJSON(agentsJson);
1439
+ if (parsedAgents) {
1440
+ cliAgents = parseAgentsFromJson(parsedAgents, "flagSettings");
1441
+ }
1442
+ } catch (error) {
1443
+ logError(error);
1444
+ }
1445
+ }
1446
+ const allAgents = [...agentDefinitionsResult.allAgents, ...cliAgents];
1447
+ const agentDefinitions = {
1448
+ ...agentDefinitionsResult,
1449
+ allAgents,
1450
+ activeAgents: getActiveAgentsFromList(allAgents)
1451
+ };
1452
+ const agentSetting = agentCli ?? getInitialSettings().agent;
1453
+ let mainThreadAgentDefinition;
1454
+ if (agentSetting) {
1455
+ mainThreadAgentDefinition = agentDefinitions.activeAgents.find((agent) => agent.agentType === agentSetting);
1456
+ if (!mainThreadAgentDefinition) {
1457
+ logForDebugging(`Warning: agent "${agentSetting}" not found. Available agents: ${agentDefinitions.activeAgents.map((a) => a.agentType).join(", ")}. Using default behavior.`);
1458
+ }
1459
+ }
1460
+ setMainThreadAgentType(mainThreadAgentDefinition?.agentType);
1461
+ if (mainThreadAgentDefinition) {
1462
+ logEvent("tengu_agent_flag", {
1463
+ agentType: isBuiltInAgent(mainThreadAgentDefinition) ? mainThreadAgentDefinition.agentType : "custom",
1464
+ ...agentCli && {
1465
+ source: "cli"
1466
+ }
1467
+ });
1468
+ }
1469
+ if (mainThreadAgentDefinition?.agentType) {
1470
+ saveAgentSetting(mainThreadAgentDefinition.agentType);
1471
+ }
1472
+ if (isNonInteractiveSession && mainThreadAgentDefinition && !systemPrompt && !isBuiltInAgent(mainThreadAgentDefinition)) {
1473
+ const agentSystemPrompt = mainThreadAgentDefinition.getSystemPrompt();
1474
+ if (agentSystemPrompt) {
1475
+ systemPrompt = agentSystemPrompt;
1476
+ }
1477
+ }
1478
+ if (mainThreadAgentDefinition?.initialPrompt) {
1479
+ if (typeof inputPrompt === "string") {
1480
+ inputPrompt = inputPrompt ? `${mainThreadAgentDefinition.initialPrompt}
1481
+
1482
+ ${inputPrompt}` : mainThreadAgentDefinition.initialPrompt;
1483
+ } else if (!inputPrompt) {
1484
+ inputPrompt = mainThreadAgentDefinition.initialPrompt;
1485
+ }
1486
+ }
1487
+ let effectiveModel = userSpecifiedModel;
1488
+ if (!effectiveModel && mainThreadAgentDefinition?.model && mainThreadAgentDefinition.model !== "inherit") {
1489
+ effectiveModel = parseUserSpecifiedModel(mainThreadAgentDefinition.model);
1490
+ }
1491
+ setMainLoopModelOverride(effectiveModel);
1492
+ setInitialMainLoopModel(getUserSpecifiedModelSetting() || null);
1493
+ const initialMainLoopModel = getInitialMainLoopModel();
1494
+ const resolvedInitialModel = parseUserSpecifiedModel(initialMainLoopModel ?? getDefaultMainLoopModel());
1495
+ let advisorModel;
1496
+ if (isAdvisorEnabled()) {
1497
+ const advisorOption = canUserConfigureAdvisor() ? options.advisor : void 0;
1498
+ if (advisorOption) {
1499
+ logForDebugging(`[AdvisorTool] --advisor ${advisorOption}`);
1500
+ if (!modelSupportsAdvisor(resolvedInitialModel)) {
1501
+ process.stderr.write(chalk.red(`Error: The model "${resolvedInitialModel}" does not support the advisor tool.
1502
+ `));
1503
+ process.exit(1);
1504
+ }
1505
+ const normalizedAdvisorModel = normalizeModelStringForAPI(parseUserSpecifiedModel(advisorOption));
1506
+ if (!isValidAdvisorModel(normalizedAdvisorModel)) {
1507
+ process.stderr.write(chalk.red(`Error: The model "${advisorOption}" cannot be used as an advisor.
1508
+ `));
1509
+ process.exit(1);
1510
+ }
1511
+ }
1512
+ advisorModel = canUserConfigureAdvisor() ? advisorOption ?? getInitialAdvisorSetting() : advisorOption;
1513
+ if (advisorModel) {
1514
+ logForDebugging(`[AdvisorTool] Advisor model: ${advisorModel}`);
1515
+ }
1516
+ }
1517
+ if (isAgentSwarmsEnabled() && storedTeammateOpts?.agentId && storedTeammateOpts?.agentName && storedTeammateOpts?.teamName && storedTeammateOpts?.agentType) {
1518
+ const customAgent = agentDefinitions.activeAgents.find((a) => a.agentType === storedTeammateOpts.agentType);
1519
+ if (customAgent) {
1520
+ let customPrompt;
1521
+ if (customAgent.source === "built-in") {
1522
+ logForDebugging(`[teammate] Built-in agent ${storedTeammateOpts.agentType} - skipping custom prompt (not supported)`);
1523
+ } else {
1524
+ customPrompt = customAgent.getSystemPrompt();
1525
+ }
1526
+ if (customAgent.memory) {
1527
+ logEvent("tengu_agent_memory_loaded", {
1528
+ ...false,
1529
+ scope: customAgent.memory,
1530
+ source: "teammate"
1531
+ });
1532
+ }
1533
+ if (customPrompt) {
1534
+ const customInstructions = `
1535
+ # Custom Agent Instructions
1536
+ ${customPrompt}`;
1537
+ appendSystemPrompt = appendSystemPrompt ? `${appendSystemPrompt}
1538
+
1539
+ ${customInstructions}` : customInstructions;
1540
+ }
1541
+ } else {
1542
+ logForDebugging(`[teammate] Custom agent ${storedTeammateOpts.agentType} not found in available agents`);
1543
+ }
1544
+ }
1545
+ maybeActivateBrief(options);
1546
+ if ((feature("KAIROS") || feature("KAIROS_BRIEF")) && !getIsNonInteractiveSession() && !getUserMsgOptIn() && getInitialSettings().defaultView === "chat") {
1547
+ const {
1548
+ isBriefEntitled
1549
+ } = require("./tools/BriefTool/BriefTool.js");
1550
+ if (isBriefEntitled()) {
1551
+ setUserMsgOptIn(true);
1552
+ }
1553
+ }
1554
+ if ((feature("PROACTIVE") || feature("KAIROS")) && (options.proactive || isEnvTruthy(process.env.XCODE_PROACTIVE)) && !coordinatorModeModule?.isCoordinatorMode()) {
1555
+ const briefVisibility = feature("KAIROS") || feature("KAIROS_BRIEF") ? require("./tools/BriefTool/BriefTool.js").isBriefEnabled() ? "Call SendUserMessage at checkpoints to mark where things stand." : "The user will see any text you output." : "The user will see any text you output.";
1556
+ const proactivePrompt = `
1557
+ # Proactive Mode
1558
+
1559
+ You are in proactive mode. Take initiative \u2014 explore, act, and make progress without waiting for instructions.
1560
+
1561
+ Start by briefly greeting the user.
1562
+
1563
+ You will receive periodic <tick> prompts. These are check-ins. Do whatever seems most useful, or call Sleep if there's nothing to do. ${briefVisibility}`;
1564
+ appendSystemPrompt = appendSystemPrompt ? `${appendSystemPrompt}
1565
+
1566
+ ${proactivePrompt}` : proactivePrompt;
1567
+ }
1568
+ if (feature("KAIROS") && kairosEnabled && assistantModule) {
1569
+ const assistantAddendum = assistantModule.getAssistantSystemPromptAddendum();
1570
+ appendSystemPrompt = appendSystemPrompt ? `${appendSystemPrompt}
1571
+
1572
+ ${assistantAddendum}` : assistantAddendum;
1573
+ }
1574
+ let root;
1575
+ let getFpsMetrics;
1576
+ let stats;
1577
+ if (!isNonInteractiveSession) {
1578
+ const ctx = getRenderContext(false);
1579
+ getFpsMetrics = ctx.getFpsMetrics;
1580
+ stats = ctx.stats;
1581
+ if (false) {
1582
+ installAsciicastRecorder();
1583
+ }
1584
+ const {
1585
+ createRoot
1586
+ } = await import("./ink.js");
1587
+ root = await createRoot(ctx.renderOptions);
1588
+ logEvent("tengu_timer", {
1589
+ event: "startup",
1590
+ durationMs: Math.round(process.uptime() * 1e3)
1591
+ });
1592
+ logForDebugging("[STARTUP] Running showSetupScreens()...");
1593
+ const setupScreensStart = Date.now();
1594
+ const onboardingShown = await showSetupScreens(root, permissionMode, allowDangerouslySkipPermissions, commands, enablememCodeInChrome, devChannels);
1595
+ profileCheckpoint("interactive_after_setup_screens");
1596
+ logForDebugging(`[STARTUP] showSetupScreens() completed in ${Date.now() - setupScreensStart}ms`);
1597
+ if (isBridgeModeAvailable() && remoteControlOption !== void 0) {
1598
+ const {
1599
+ getBridgeDisabledReason
1600
+ } = await import("./bridge/bridgeEnabled.js");
1601
+ const disabledReason = await getBridgeDisabledReason();
1602
+ remoteControl = disabledReason === null;
1603
+ if (disabledReason) {
1604
+ process.stderr.write(chalk.yellow(`${disabledReason}
1605
+ --rc flag ignored.
1606
+ `));
1607
+ }
1608
+ }
1609
+ if (feature("AGENT_MEMORY_SNAPSHOT") && mainThreadAgentDefinition && isCustomAgent(mainThreadAgentDefinition) && mainThreadAgentDefinition.memory && mainThreadAgentDefinition.pendingSnapshotUpdate) {
1610
+ const agentDef = mainThreadAgentDefinition;
1611
+ const choice = await launchSnapshotUpdateDialog(root, {
1612
+ agentType: agentDef.agentType,
1613
+ scope: agentDef.memory,
1614
+ snapshotTimestamp: agentDef.pendingSnapshotUpdate.snapshotTimestamp
1615
+ });
1616
+ if (choice === "merge") {
1617
+ const {
1618
+ buildMergePrompt
1619
+ } = await import("./components/agents/SnapshotUpdateDialog.js");
1620
+ const mergePrompt = buildMergePrompt(agentDef.agentType, agentDef.memory);
1621
+ inputPrompt = inputPrompt ? `${mergePrompt}
1622
+
1623
+ ${inputPrompt}` : mergePrompt;
1624
+ }
1625
+ agentDef.pendingSnapshotUpdate = void 0;
1626
+ }
1627
+ if (onboardingShown && prompt?.trim().toLowerCase() === "/login") {
1628
+ prompt = "";
1629
+ }
1630
+ if (onboardingShown) {
1631
+ void refreshRemoteManagedSettings();
1632
+ void refreshPolicyLimits();
1633
+ resetUserCache();
1634
+ refreshGrowthBookAfterAuthChange();
1635
+ void import("./bridge/trustedDevice.js").then((m) => {
1636
+ m.clearTrustedDeviceToken();
1637
+ return m.enrollTrustedDevice();
1638
+ });
1639
+ }
1640
+ const orgValidation = await validateForceLoginOrg();
1641
+ if (!orgValidation.valid) {
1642
+ await exitWithError(root, orgValidation.message);
1643
+ }
1644
+ }
1645
+ if (process.exitCode !== void 0) {
1646
+ logForDebugging("Graceful shutdown initiated, skipping further initialization");
1647
+ return;
1648
+ }
1649
+ initializeLspServerManager();
1650
+ if (!isNonInteractiveSession) {
1651
+ const {
1652
+ errors
1653
+ } = getSettingsWithErrors();
1654
+ const nonMcpErrors = errors.filter((e) => !e.mcpErrorMetadata);
1655
+ if (nonMcpErrors.length > 0) {
1656
+ await launchInvalidSettingsDialog(root, {
1657
+ settingsErrors: nonMcpErrors,
1658
+ onExit: () => gracefulShutdownSync(1)
1659
+ });
1660
+ }
1661
+ }
1662
+ const bgRefreshThrottleMs = getFeatureValue_CACHED_MAY_BE_STALE("tengu_cicada_nap_ms", 0);
1663
+ const lastPrefetched = getGlobalConfig().startupPrefetchedAt ?? 0;
1664
+ const skipStartupPrefetches = isBareMode() || bgRefreshThrottleMs > 0 && Date.now() - lastPrefetched < bgRefreshThrottleMs;
1665
+ if (!skipStartupPrefetches) {
1666
+ const lastPrefetchedInfo = lastPrefetched > 0 ? ` last ran ${Math.round((Date.now() - lastPrefetched) / 1e3)}s ago` : "";
1667
+ logForDebugging(`Starting background startup prefetches${lastPrefetchedInfo}`);
1668
+ checkQuotaStatus().catch((error) => logError(error));
1669
+ void fetchBootstrapData();
1670
+ void prefetchPassesEligibility();
1671
+ if (!getFeatureValue_CACHED_MAY_BE_STALE("tengu_miraculo_the_bard", false)) {
1672
+ void prefetchFastModeStatus();
1673
+ } else {
1674
+ resolveFastModeStatusFromCache();
1675
+ }
1676
+ if (bgRefreshThrottleMs > 0) {
1677
+ saveGlobalConfig((current) => ({
1678
+ ...current,
1679
+ startupPrefetchedAt: Date.now()
1680
+ }));
1681
+ }
1682
+ } else {
1683
+ logForDebugging(`Skipping startup prefetches, last ran ${Math.round((Date.now() - lastPrefetched) / 1e3)}s ago`);
1684
+ resolveFastModeStatusFromCache();
1685
+ }
1686
+ if (!isNonInteractiveSession) {
1687
+ void refreshExampleCommands();
1688
+ }
1689
+ const {
1690
+ servers: existingMcpConfigs
1691
+ } = await mcpConfigPromise;
1692
+ logForDebugging(`[STARTUP] MCP configs resolved in ${mcpConfigResolvedMs}ms (awaited at +${Date.now() - mcpConfigStart}ms)`);
1693
+ const allMcpConfigs = {
1694
+ ...existingMcpConfigs,
1695
+ ...dynamicMcpConfig
1696
+ };
1697
+ const sdkMcpConfigs = {};
1698
+ const regularMcpConfigs = {};
1699
+ for (const [name, config] of Object.entries(allMcpConfigs)) {
1700
+ const typedConfig = config;
1701
+ if (typedConfig.type === "sdk") {
1702
+ sdkMcpConfigs[name] = typedConfig;
1703
+ } else {
1704
+ regularMcpConfigs[name] = typedConfig;
1705
+ }
1706
+ }
1707
+ profileCheckpoint("action_mcp_configs_loaded");
1708
+ const localMcpPromise = isNonInteractiveSession ? Promise.resolve({
1709
+ clients: [],
1710
+ tools: [],
1711
+ commands: []
1712
+ }) : prefetchAllMcpResources(regularMcpConfigs);
1713
+ const claudeaiMcpPromise = isNonInteractiveSession ? Promise.resolve({
1714
+ clients: [],
1715
+ tools: [],
1716
+ commands: []
1717
+ }) : claudeaiConfigPromise.then((configs) => Object.keys(configs).length > 0 ? prefetchAllMcpResources(configs) : {
1718
+ clients: [],
1719
+ tools: [],
1720
+ commands: []
1721
+ });
1722
+ const mcpPromise = Promise.all([localMcpPromise, claudeaiMcpPromise]).then(([local, claudeai]) => ({
1723
+ clients: [...local.clients, ...claudeai.clients],
1724
+ tools: uniqBy([...local.tools, ...claudeai.tools], "name"),
1725
+ commands: uniqBy([...local.commands, ...claudeai.commands], "name")
1726
+ }));
1727
+ const hooksPromise = initOnly || init2 || maintenance || isNonInteractiveSession || options.continue || options.resume ? null : processSessionStartHooks("startup", {
1728
+ agentType: mainThreadAgentDefinition?.agentType,
1729
+ model: resolvedInitialModel
1730
+ });
1731
+ const hookMessages = [];
1732
+ mcpPromise.catch(() => {
1733
+ });
1734
+ const mcpClients = [];
1735
+ const mcpTools = [];
1736
+ const mcpCommands = [];
1737
+ let thinkingEnabled = shouldEnableThinkingByDefault();
1738
+ let thinkingConfig = thinkingEnabled !== false ? {
1739
+ type: "adaptive"
1740
+ } : {
1741
+ type: "disabled"
1742
+ };
1743
+ if (options.thinking === "adaptive" || options.thinking === "enabled") {
1744
+ thinkingEnabled = true;
1745
+ thinkingConfig = {
1746
+ type: "adaptive"
1747
+ };
1748
+ } else if (options.thinking === "disabled") {
1749
+ thinkingEnabled = false;
1750
+ thinkingConfig = {
1751
+ type: "disabled"
1752
+ };
1753
+ } else {
1754
+ const maxThinkingTokens = process.env.MAX_THINKING_TOKENS ? parseInt(process.env.MAX_THINKING_TOKENS, 10) : options.maxThinkingTokens;
1755
+ if (maxThinkingTokens !== void 0) {
1756
+ if (maxThinkingTokens > 0) {
1757
+ thinkingEnabled = true;
1758
+ thinkingConfig = {
1759
+ type: "enabled",
1760
+ budgetTokens: maxThinkingTokens
1761
+ };
1762
+ } else if (maxThinkingTokens === 0) {
1763
+ thinkingEnabled = false;
1764
+ thinkingConfig = {
1765
+ type: "disabled"
1766
+ };
1767
+ }
1768
+ }
1769
+ }
1770
+ logForDiagnosticsNoPII("info", "started", {
1771
+ version: MACRO.VERSION,
1772
+ is_native_binary: isInBundledMode()
1773
+ });
1774
+ registerCleanup(async () => {
1775
+ logForDiagnosticsNoPII("info", "exited");
1776
+ });
1777
+ void logTenguInit({
1778
+ hasInitialPrompt: Boolean(prompt),
1779
+ hasStdin: Boolean(inputPrompt),
1780
+ verbose,
1781
+ debug,
1782
+ debugToStderr,
1783
+ print: print ?? false,
1784
+ outputFormat: outputFormat ?? "text",
1785
+ inputFormat: inputFormat ?? "text",
1786
+ numAllowedTools: allowedTools.length,
1787
+ numDisallowedTools: disallowedTools.length,
1788
+ mcpClientCount: Object.keys(allMcpConfigs).length,
1789
+ worktreeEnabled,
1790
+ skipWebFetchPreflight: getInitialSettings().skipWebFetchPreflight,
1791
+ githubActionInputs: process.env.GITHUB_ACTION_INPUTS,
1792
+ dangerouslySkipPermissionsPassed: dangerouslySkipPermissions ?? false,
1793
+ permissionMode,
1794
+ modeIsBypass: permissionMode === "bypassPermissions",
1795
+ allowDangerouslySkipPermissionsPassed: allowDangerouslySkipPermissions,
1796
+ systemPromptFlag: systemPrompt ? options.systemPromptFile ? "file" : "flag" : void 0,
1797
+ appendSystemPromptFlag: appendSystemPrompt ? options.appendSystemPromptFile ? "file" : "flag" : void 0,
1798
+ thinkingConfig,
1799
+ assistantActivationPath: feature("KAIROS") && kairosEnabled ? assistantModule?.getAssistantActivationPath() : void 0
1800
+ });
1801
+ void logContextMetrics(regularMcpConfigs, toolPermissionContext);
1802
+ void logPermissionContextForAnts(null, "initialization");
1803
+ logManagedSettings();
1804
+ void registerSession().then((registered) => {
1805
+ if (!registered) return;
1806
+ if (sessionNameArg) {
1807
+ void updateSessionName(sessionNameArg);
1808
+ }
1809
+ void countConcurrentSessions().then((count2) => {
1810
+ if (count2 >= 2) {
1811
+ logEvent("tengu_concurrent_sessions", {
1812
+ num_sessions: count2
1813
+ });
1814
+ }
1815
+ });
1816
+ });
1817
+ if (isBareMode()) {
1818
+ } else if (isNonInteractiveSession) {
1819
+ await initializeVersionedPlugins();
1820
+ profileCheckpoint("action_after_plugins_init");
1821
+ void cleanupOrphanedPluginVersionsInBackground().then(() => getGlobExclusionsForPluginCache());
1822
+ } else {
1823
+ void initializeVersionedPlugins().then(async () => {
1824
+ profileCheckpoint("action_after_plugins_init");
1825
+ await cleanupOrphanedPluginVersionsInBackground();
1826
+ void getGlobExclusionsForPluginCache();
1827
+ });
1828
+ }
1829
+ const setupTrigger = initOnly || init2 ? "init" : maintenance ? "maintenance" : null;
1830
+ if (initOnly) {
1831
+ applyConfigEnvironmentVariables();
1832
+ await processSetupHooks("init", {
1833
+ forceSyncExecution: true
1834
+ });
1835
+ await processSessionStartHooks("startup", {
1836
+ forceSyncExecution: true
1837
+ });
1838
+ gracefulShutdownSync(0);
1839
+ return;
1840
+ }
1841
+ if (isNonInteractiveSession) {
1842
+ if (outputFormat === "stream-json" || outputFormat === "json") {
1843
+ setHasFormattedOutput(true);
1844
+ }
1845
+ applyConfigEnvironmentVariables();
1846
+ initializeTelemetryAfterTrust();
1847
+ const sessionStartHooksPromise = options.continue || options.resume || teleport || setupTrigger ? void 0 : processSessionStartHooks("startup");
1848
+ sessionStartHooksPromise?.catch(() => {
1849
+ });
1850
+ const commandsHeadless = disableSlashCommands ? [] : commands.filter((command) => command.type === "prompt" && !command.disableNonInteractive || command.type === "local" && command.supportsNonInteractive);
1851
+ const isLocalHeadlessCommand = isHeadlessLocalSlashCommand(inputPrompt, commandsHeadless);
1852
+ if (!isLocalHeadlessCommand) {
1853
+ logForDebugging("[STARTUP] Print mode validating auth/org...");
1854
+ await validatePrintCredentialsOrExit();
1855
+ profileCheckpoint("before_validateForceLoginOrg");
1856
+ const orgValidation = await validateForceLoginOrg();
1857
+ if (!orgValidation.valid) {
1858
+ process.stderr.write(orgValidation.message + "\n");
1859
+ process.exit(1);
1860
+ }
1861
+ logForDebugging("[STARTUP] Print mode auth/org validation complete");
1862
+ } else {
1863
+ logForDebugging("[STARTUP] Print mode skipping credential validation for local slash command");
1864
+ }
1865
+ const defaultState = getDefaultAppState();
1866
+ const headlessInitialState = {
1867
+ ...defaultState,
1868
+ mcp: {
1869
+ ...defaultState.mcp,
1870
+ clients: mcpClients,
1871
+ commands: mcpCommands,
1872
+ tools: mcpTools
1873
+ },
1874
+ toolPermissionContext,
1875
+ effortValue: parseEffortValue(options.effort) ?? getInitialEffortSetting(),
1876
+ ...isFastModeEnabled() && {
1877
+ fastMode: getInitialFastModeSetting(effectiveModel ?? null)
1878
+ },
1879
+ ...isAdvisorEnabled() && advisorModel && {
1880
+ advisorModel
1881
+ },
1882
+ // kairosEnabled gates the async fire-and-forget path in
1883
+ // executeForkedSlashCommand (processSlashCommand.tsx:132) and
1884
+ // AgentTool's shouldRunAsync. The REPL initialState sets this at
1885
+ // ~3459; headless was defaulting to false, so the daemon child's
1886
+ // scheduled tasks and Agent-tool calls ran synchronously — N
1887
+ // overdue cron tasks on spawn = N serial subagent turns blocking
1888
+ // user input. Computed at :1620, well before this branch.
1889
+ ...feature("KAIROS") ? {
1890
+ kairosEnabled
1891
+ } : {}
1892
+ };
1893
+ const headlessStore = createStore(headlessInitialState, onChangeAppState);
1894
+ if (toolPermissionContext.mode === "bypassPermissions" || allowDangerouslySkipPermissions) {
1895
+ void checkAndDisableBypassPermissions(toolPermissionContext);
1896
+ }
1897
+ if (feature("TRANSCRIPT_CLASSIFIER")) {
1898
+ void verifyAutoModeGateAccess(toolPermissionContext, headlessStore.getState().fastMode).then(({
1899
+ updateContext
1900
+ }) => {
1901
+ headlessStore.setState((prev) => {
1902
+ const nextCtx = updateContext(prev.toolPermissionContext);
1903
+ if (nextCtx === prev.toolPermissionContext) return prev;
1904
+ return {
1905
+ ...prev,
1906
+ toolPermissionContext: nextCtx
1907
+ };
1908
+ });
1909
+ });
1910
+ }
1911
+ if (options.sessionPersistence === false) {
1912
+ setSessionPersistenceDisabled(true);
1913
+ }
1914
+ setSdkBetas(filterAllowedSdkBetas(betas));
1915
+ const connectMcpBatch = (configs, label) => {
1916
+ if (Object.keys(configs).length === 0) return Promise.resolve();
1917
+ headlessStore.setState((prev) => ({
1918
+ ...prev,
1919
+ mcp: {
1920
+ ...prev.mcp,
1921
+ clients: [...prev.mcp.clients, ...Object.entries(configs).map(([name, config]) => ({
1922
+ name,
1923
+ type: "pending",
1924
+ config
1925
+ }))]
1926
+ }
1927
+ }));
1928
+ return getMcpToolsCommandsAndResources(({
1929
+ client,
1930
+ tools: tools2,
1931
+ commands: commands2
1932
+ }) => {
1933
+ headlessStore.setState((prev) => ({
1934
+ ...prev,
1935
+ mcp: {
1936
+ ...prev.mcp,
1937
+ clients: prev.mcp.clients.some((c) => c.name === client.name) ? prev.mcp.clients.map((c) => c.name === client.name ? client : c) : [...prev.mcp.clients, client],
1938
+ tools: uniqBy([...prev.mcp.tools, ...tools2], "name"),
1939
+ commands: uniqBy([...prev.mcp.commands, ...commands2], "name")
1940
+ }
1941
+ }));
1942
+ }, configs).catch((err) => logForDebugging(`[MCP] ${label} connect error: ${err}`));
1943
+ };
1944
+ profileCheckpoint("before_connectMcp");
1945
+ logForDebugging("[STARTUP] Print mode connecting MCP servers...");
1946
+ await connectMcpBatch(regularMcpConfigs, "regular");
1947
+ profileCheckpoint("after_connectMcp");
1948
+ logForDebugging("[STARTUP] Print mode regular MCP connect complete");
1949
+ const CLAUDE_AI_MCP_TIMEOUT_MS = 5e3;
1950
+ const claudeaiConnect = claudeaiConfigPromise.then((claudeaiConfigs) => {
1951
+ if (Object.keys(claudeaiConfigs).length > 0) {
1952
+ const claudeaiSigs = /* @__PURE__ */ new Set();
1953
+ for (const config of Object.values(claudeaiConfigs)) {
1954
+ const sig = getMcpServerSignature(config);
1955
+ if (sig) claudeaiSigs.add(sig);
1956
+ }
1957
+ const suppressed = /* @__PURE__ */ new Set();
1958
+ for (const [name, config] of Object.entries(regularMcpConfigs)) {
1959
+ if (!name.startsWith("plugin:")) continue;
1960
+ const sig = getMcpServerSignature(config);
1961
+ if (sig && claudeaiSigs.has(sig)) suppressed.add(name);
1962
+ }
1963
+ if (suppressed.size > 0) {
1964
+ logForDebugging(`[MCP] Lazy dedup: suppressing ${suppressed.size} plugin server(s) that duplicate claude.ai connectors: ${[...suppressed].join(", ")}`);
1965
+ for (const c of headlessStore.getState().mcp.clients) {
1966
+ if (!suppressed.has(c.name) || c.type !== "connected") continue;
1967
+ c.client.onclose = void 0;
1968
+ void clearServerCache(c.name, c.config).catch(() => {
1969
+ });
1970
+ }
1971
+ headlessStore.setState((prev) => {
1972
+ let {
1973
+ clients,
1974
+ tools: tools2,
1975
+ commands: commands2,
1976
+ resources
1977
+ } = prev.mcp;
1978
+ clients = clients.filter((c) => !suppressed.has(c.name));
1979
+ tools2 = tools2.filter((t) => !t.mcpInfo || !suppressed.has(t.mcpInfo.serverName));
1980
+ for (const name of suppressed) {
1981
+ commands2 = excludeCommandsByServer(commands2, name);
1982
+ resources = excludeResourcesByServer(resources, name);
1983
+ }
1984
+ return {
1985
+ ...prev,
1986
+ mcp: {
1987
+ ...prev.mcp,
1988
+ clients,
1989
+ tools: tools2,
1990
+ commands: commands2,
1991
+ resources
1992
+ }
1993
+ };
1994
+ });
1995
+ }
1996
+ }
1997
+ const nonPluginConfigs = pickBy(regularMcpConfigs, (_, n) => !n.startsWith("plugin:"));
1998
+ const {
1999
+ servers: dedupedClaudeAi
2000
+ } = dedupClaudeAiMcpServers(claudeaiConfigs, nonPluginConfigs);
2001
+ return connectMcpBatch(dedupedClaudeAi, "claudeai");
2002
+ });
2003
+ let claudeaiTimer;
2004
+ const claudeaiTimedOut = await Promise.race([claudeaiConnect.then(() => false), new Promise((resolve2) => {
2005
+ claudeaiTimer = setTimeout((r) => r(true), CLAUDE_AI_MCP_TIMEOUT_MS, resolve2);
2006
+ })]);
2007
+ if (claudeaiTimer) clearTimeout(claudeaiTimer);
2008
+ if (claudeaiTimedOut) {
2009
+ logForDebugging(`[MCP] claude.ai connectors not ready after ${CLAUDE_AI_MCP_TIMEOUT_MS}ms \u2014 proceeding; background connection continues`);
2010
+ }
2011
+ profileCheckpoint("after_connectMcp_claudeai");
2012
+ logForDebugging("[STARTUP] Print mode claude.ai MCP connect complete");
2013
+ if (!isBareMode()) {
2014
+ startDeferredPrefetches();
2015
+ void import("./utils/backgroundHousekeeping.js").then((m) => m.startBackgroundHousekeeping());
2016
+ if (false) {
2017
+ void null.then((m) => m.startSdkMemoryMonitor());
2018
+ }
2019
+ }
2020
+ logSessionTelemetry();
2021
+ profileCheckpoint("before_print_import");
2022
+ const {
2023
+ runHeadless
2024
+ } = await import("src/cli/print.js");
2025
+ profileCheckpoint("after_print_import");
2026
+ logForDebugging("[STARTUP] Print mode starting headless runner");
2027
+ await runHeadless(inputPrompt, () => headlessStore.getState(), headlessStore.setState, commandsHeadless, tools, sdkMcpConfigs, agentDefinitions.activeAgents, {
2028
+ continue: options.continue,
2029
+ resume: options.resume,
2030
+ verbose,
2031
+ outputFormat,
2032
+ jsonSchema,
2033
+ permissionPromptToolName: options.permissionPromptTool,
2034
+ allowedTools,
2035
+ thinkingConfig,
2036
+ maxTurns: options.maxTurns,
2037
+ maxBudgetUsd: options.maxBudgetUsd,
2038
+ taskBudget: options.taskBudget ? {
2039
+ total: options.taskBudget
2040
+ } : void 0,
2041
+ systemPrompt,
2042
+ appendSystemPrompt,
2043
+ userSpecifiedModel: effectiveModel,
2044
+ fallbackModel: userSpecifiedFallbackModel,
2045
+ teleport,
2046
+ sdkUrl,
2047
+ replayUserMessages: effectiveReplayUserMessages,
2048
+ includePartialMessages: effectiveIncludePartialMessages,
2049
+ forkSession: options.forkSession || false,
2050
+ resumeSessionAt: options.resumeSessionAt || void 0,
2051
+ rewindFiles: options.rewindFiles,
2052
+ enableAuthStatus: options.enableAuthStatus,
2053
+ agent: agentCli,
2054
+ workload: options.workload,
2055
+ setupTrigger: setupTrigger ?? void 0,
2056
+ sessionStartHooksPromise
2057
+ });
2058
+ logForDebugging("[STARTUP] Print mode headless runner completed");
2059
+ return;
2060
+ }
2061
+ logEvent("tengu_startup_manual_model_config", {
2062
+ cli_flag: options.model,
2063
+ env_var: process.env.ANTHROPIC_MODEL,
2064
+ settings_file: (getInitialSettings() || {}).model,
2065
+ subscriptionType: getSubscriptionType(),
2066
+ agent: agentSetting
2067
+ });
2068
+ const deprecationWarning = getModelDeprecationWarning(resolvedInitialModel);
2069
+ const initialNotifications = [];
2070
+ if (permissionModeNotification) {
2071
+ initialNotifications.push({
2072
+ key: "permission-mode-notification",
2073
+ text: permissionModeNotification,
2074
+ priority: "high"
2075
+ });
2076
+ }
2077
+ if (deprecationWarning) {
2078
+ initialNotifications.push({
2079
+ key: "model-deprecation-warning",
2080
+ text: deprecationWarning,
2081
+ color: "warning",
2082
+ priority: "high"
2083
+ });
2084
+ }
2085
+ if (overlyBroadBashPermissions.length > 0) {
2086
+ const displayList = uniq(overlyBroadBashPermissions.map((p) => p.ruleDisplay));
2087
+ const displays = displayList.join(", ");
2088
+ const sources = uniq(overlyBroadBashPermissions.map((p) => p.sourceDisplay)).join(", ");
2089
+ const n = displayList.length;
2090
+ initialNotifications.push({
2091
+ key: "overly-broad-bash-notification",
2092
+ text: `${displays} allow ${plural(n, "rule")} from ${sources} ${plural(n, "was", "were")} ignored \u2014 not available for Ants, please use auto-mode instead`,
2093
+ color: "warning",
2094
+ priority: "high"
2095
+ });
2096
+ }
2097
+ const effectiveToolPermissionContext = {
2098
+ ...toolPermissionContext,
2099
+ mode: isAgentSwarmsEnabled() && getTeammateUtils().isPlanModeRequired() ? "plan" : toolPermissionContext.mode
2100
+ };
2101
+ const initialIsBriefOnly = feature("KAIROS") || feature("KAIROS_BRIEF") ? getUserMsgOptIn() : false;
2102
+ const fullRemoteControl = remoteControl || getRemoteControlAtStartup() || kairosEnabled;
2103
+ let ccrMirrorEnabled = false;
2104
+ if (feature("CCR_MIRROR") && !fullRemoteControl) {
2105
+ const {
2106
+ isCcrMirrorEnabled
2107
+ } = require("./bridge/bridgeEnabled.js");
2108
+ ccrMirrorEnabled = isCcrMirrorEnabled();
2109
+ }
2110
+ const initialState = {
2111
+ settings: getInitialSettings(),
2112
+ tasks: {},
2113
+ agentNameRegistry: /* @__PURE__ */ new Map(),
2114
+ verbose: verbose ?? getGlobalConfig().verbose ?? false,
2115
+ mainLoopModel: initialMainLoopModel,
2116
+ mainLoopModelForSession: null,
2117
+ isBriefOnly: initialIsBriefOnly,
2118
+ expandedView: getGlobalConfig().showSpinnerTree ? "teammates" : getGlobalConfig().showExpandedTodos ? "tasks" : "none",
2119
+ showTeammateMessagePreview: isAgentSwarmsEnabled() ? false : void 0,
2120
+ selectedIPAgentIndex: -1,
2121
+ coordinatorTaskIndex: -1,
2122
+ viewSelectionMode: "none",
2123
+ footerSelection: null,
2124
+ toolPermissionContext: effectiveToolPermissionContext,
2125
+ agent: mainThreadAgentDefinition?.agentType,
2126
+ agentDefinitions,
2127
+ mcp: {
2128
+ clients: [],
2129
+ tools: [],
2130
+ commands: [],
2131
+ resources: {},
2132
+ pluginReconnectKey: 0
2133
+ },
2134
+ plugins: {
2135
+ enabled: [],
2136
+ disabled: [],
2137
+ commands: [],
2138
+ errors: [],
2139
+ installationStatus: {
2140
+ marketplaces: [],
2141
+ plugins: []
2142
+ },
2143
+ needsRefresh: false
2144
+ },
2145
+ statusLineText: void 0,
2146
+ kairosEnabled,
2147
+ remoteSessionUrl: void 0,
2148
+ remoteConnectionStatus: "connecting",
2149
+ remoteBackgroundTaskCount: 0,
2150
+ replBridgeEnabled: fullRemoteControl || ccrMirrorEnabled,
2151
+ replBridgeExplicit: remoteControl,
2152
+ replBridgeOutboundOnly: ccrMirrorEnabled,
2153
+ replBridgeConnected: false,
2154
+ replBridgeSessionActive: false,
2155
+ replBridgeReconnecting: false,
2156
+ replBridgeConnectUrl: void 0,
2157
+ replBridgeSessionUrl: void 0,
2158
+ replBridgeEnvironmentId: void 0,
2159
+ replBridgeSessionId: void 0,
2160
+ replBridgeError: void 0,
2161
+ replBridgeInitialName: remoteControlName,
2162
+ showRemoteCallout: false,
2163
+ notifications: {
2164
+ current: null,
2165
+ queue: initialNotifications
2166
+ },
2167
+ elicitation: {
2168
+ queue: []
2169
+ },
2170
+ todos: {},
2171
+ remoteAgentTaskSuggestions: [],
2172
+ fileHistory: {
2173
+ snapshots: [],
2174
+ trackedFiles: /* @__PURE__ */ new Set(),
2175
+ snapshotSequence: 0
2176
+ },
2177
+ attribution: createEmptyAttributionState(),
2178
+ thinkingEnabled,
2179
+ promptSuggestionEnabled: shouldEnablePromptSuggestion(),
2180
+ sessionHooks: /* @__PURE__ */ new Map(),
2181
+ inbox: {
2182
+ messages: []
2183
+ },
2184
+ promptSuggestion: {
2185
+ text: null,
2186
+ promptId: null,
2187
+ shownAt: 0,
2188
+ acceptedAt: 0,
2189
+ generationRequestId: null
2190
+ },
2191
+ speculation: IDLE_SPECULATION_STATE,
2192
+ speculationSessionTimeSavedMs: 0,
2193
+ skillImprovement: {
2194
+ suggestion: null
2195
+ },
2196
+ workerSandboxPermissions: {
2197
+ queue: [],
2198
+ selectedIndex: 0
2199
+ },
2200
+ pendingWorkerRequest: null,
2201
+ pendingSandboxRequest: null,
2202
+ authVersion: 0,
2203
+ initialMessage: inputPrompt ? {
2204
+ message: createUserMessage({
2205
+ content: String(inputPrompt)
2206
+ })
2207
+ } : null,
2208
+ effortValue: parseEffortValue(options.effort) ?? getInitialEffortSetting(),
2209
+ activeOverlays: /* @__PURE__ */ new Set(),
2210
+ fastMode: getInitialFastModeSetting(resolvedInitialModel),
2211
+ ...isAdvisorEnabled() && advisorModel && {
2212
+ advisorModel
2213
+ },
2214
+ // Compute teamContext synchronously to avoid useEffect setState during render.
2215
+ // KAIROS: assistantTeamContext takes precedence — set earlier in the
2216
+ // KAIROS block so Agent(name: "foo") can spawn in-process teammates
2217
+ // without TeamCreate. computeInitialTeamContext() is for tmux-spawned
2218
+ // teammates reading their own identity, not the assistant-mode leader.
2219
+ teamContext: feature("KAIROS") ? assistantTeamContext ?? computeInitialTeamContext?.() : computeInitialTeamContext?.()
2220
+ };
2221
+ if (inputPrompt) {
2222
+ addToHistory(String(inputPrompt));
2223
+ }
2224
+ const initialTools = mcpTools;
2225
+ saveGlobalConfig((current) => ({
2226
+ ...current,
2227
+ numStartups: (current.numStartups ?? 0) + 1
2228
+ }));
2229
+ setImmediate(() => {
2230
+ void logStartupTelemetry();
2231
+ logSessionTelemetry();
2232
+ });
2233
+ const sessionUploaderPromise = false ? null : null;
2234
+ const uploaderReady = sessionUploaderPromise ? sessionUploaderPromise.then((mod) => mod.createSessionTurnUploader()).catch(() => null) : null;
2235
+ const sessionConfig = {
2236
+ debug: debug || debugToStderr,
2237
+ commands: [...commands, ...mcpCommands],
2238
+ initialTools,
2239
+ mcpClients,
2240
+ autoConnectIdeFlag: ide,
2241
+ mainThreadAgentDefinition,
2242
+ disableSlashCommands,
2243
+ dynamicMcpConfig,
2244
+ strictMcpConfig,
2245
+ systemPrompt,
2246
+ appendSystemPrompt,
2247
+ taskListId,
2248
+ thinkingConfig,
2249
+ ...uploaderReady && {
2250
+ onTurnComplete: (messages) => {
2251
+ void uploaderReady.then((uploader) => uploader?.(messages));
2252
+ }
2253
+ }
2254
+ };
2255
+ const resumeContext = {
2256
+ modeApi: coordinatorModeModule,
2257
+ mainThreadAgentDefinition,
2258
+ agentDefinitions,
2259
+ currentCwd,
2260
+ cliAgents,
2261
+ initialState
2262
+ };
2263
+ if (options.continue) {
2264
+ let resumeSucceeded = false;
2265
+ try {
2266
+ const resumeStart = performance.now();
2267
+ const {
2268
+ clearSessionCaches
2269
+ } = await import("./commands/clear/caches.js");
2270
+ clearSessionCaches();
2271
+ const result = await loadConversationForResume(
2272
+ void 0,
2273
+ void 0
2274
+ /* sourceFile */
2275
+ );
2276
+ if (!result) {
2277
+ logEvent("tengu_continue", {
2278
+ success: false
2279
+ });
2280
+ return await exitWithError(root, "No conversation found to continue");
2281
+ }
2282
+ const loaded = await processResumedConversation(result, {
2283
+ forkSession: !!options.forkSession,
2284
+ includeAttribution: true,
2285
+ transcriptPath: result.fullPath
2286
+ }, resumeContext);
2287
+ if (loaded.restoredAgentDef) {
2288
+ mainThreadAgentDefinition = loaded.restoredAgentDef;
2289
+ }
2290
+ maybeActivateProactive(options);
2291
+ maybeActivateBrief(options);
2292
+ logEvent("tengu_continue", {
2293
+ success: true,
2294
+ resume_duration_ms: Math.round(performance.now() - resumeStart)
2295
+ });
2296
+ resumeSucceeded = true;
2297
+ await launchRepl(root, {
2298
+ getFpsMetrics,
2299
+ stats,
2300
+ initialState: loaded.initialState
2301
+ }, {
2302
+ ...sessionConfig,
2303
+ mainThreadAgentDefinition: loaded.restoredAgentDef ?? mainThreadAgentDefinition,
2304
+ initialMessages: loaded.messages,
2305
+ initialFileHistorySnapshots: loaded.fileHistorySnapshots,
2306
+ initialContentReplacements: loaded.contentReplacements,
2307
+ initialAgentName: loaded.agentName,
2308
+ initialAgentColor: loaded.agentColor
2309
+ }, renderAndRun);
2310
+ } catch (error) {
2311
+ if (!resumeSucceeded) {
2312
+ logEvent("tengu_continue", {
2313
+ success: false
2314
+ });
2315
+ }
2316
+ logError(error);
2317
+ process.exit(1);
2318
+ }
2319
+ } else if (feature("DIRECT_CONNECT") && _pendingConnect?.url) {
2320
+ let directConnectConfig;
2321
+ try {
2322
+ const session = await createDirectConnectSession({
2323
+ serverUrl: _pendingConnect.url,
2324
+ authToken: _pendingConnect.authToken,
2325
+ cwd: getOriginalCwd(),
2326
+ dangerouslySkipPermissions: _pendingConnect.dangerouslySkipPermissions
2327
+ });
2328
+ if (session.workDir) {
2329
+ setOriginalCwd(session.workDir);
2330
+ setCwdState(session.workDir);
2331
+ }
2332
+ setDirectConnectServerUrl(_pendingConnect.url);
2333
+ directConnectConfig = session.config;
2334
+ } catch (err) {
2335
+ return await exitWithError(root, err instanceof DirectConnectError ? err.message : String(err), () => gracefulShutdown(1));
2336
+ }
2337
+ const connectInfoMessage = createSystemMessage(`Connected to server at ${_pendingConnect.url}
2338
+ Session: ${directConnectConfig.sessionId}`, "info");
2339
+ await launchRepl(root, {
2340
+ getFpsMetrics,
2341
+ stats,
2342
+ initialState
2343
+ }, {
2344
+ debug: debug || debugToStderr,
2345
+ commands,
2346
+ initialTools: [],
2347
+ initialMessages: [connectInfoMessage],
2348
+ mcpClients: [],
2349
+ autoConnectIdeFlag: ide,
2350
+ mainThreadAgentDefinition,
2351
+ disableSlashCommands,
2352
+ directConnectConfig,
2353
+ thinkingConfig
2354
+ }, renderAndRun);
2355
+ return;
2356
+ } else if (feature("SSH_REMOTE") && _pendingSSH?.host) {
2357
+ const {
2358
+ createSSHSession,
2359
+ createLocalSSHSession,
2360
+ SSHSessionError
2361
+ } = await import("./ssh/createSSHSession.js");
2362
+ let sshSession;
2363
+ try {
2364
+ if (_pendingSSH.local) {
2365
+ process.stderr.write("Starting local ssh-proxy test session...\n");
2366
+ sshSession = createLocalSSHSession({
2367
+ cwd: _pendingSSH.cwd,
2368
+ permissionMode: _pendingSSH.permissionMode,
2369
+ dangerouslySkipPermissions: _pendingSSH.dangerouslySkipPermissions
2370
+ });
2371
+ } else {
2372
+ process.stderr.write(`Connecting to ${_pendingSSH.host}\u2026
2373
+ `);
2374
+ const isTTY = process.stderr.isTTY;
2375
+ let hadProgress = false;
2376
+ sshSession = await createSSHSession({
2377
+ host: _pendingSSH.host,
2378
+ cwd: _pendingSSH.cwd,
2379
+ localVersion: MACRO.VERSION,
2380
+ permissionMode: _pendingSSH.permissionMode,
2381
+ dangerouslySkipPermissions: _pendingSSH.dangerouslySkipPermissions,
2382
+ extraCliArgs: _pendingSSH.extraCliArgs
2383
+ }, isTTY ? {
2384
+ onProgress: (msg) => {
2385
+ hadProgress = true;
2386
+ process.stderr.write(`\r ${msg}\x1B[K`);
2387
+ }
2388
+ } : {});
2389
+ if (hadProgress) process.stderr.write("\n");
2390
+ }
2391
+ setOriginalCwd(sshSession.remoteCwd);
2392
+ setCwdState(sshSession.remoteCwd);
2393
+ setDirectConnectServerUrl(_pendingSSH.local ? "local" : _pendingSSH.host);
2394
+ } catch (err) {
2395
+ return await exitWithError(root, err instanceof SSHSessionError ? err.message : String(err), () => gracefulShutdown(1));
2396
+ }
2397
+ const sshInfoMessage = createSystemMessage(_pendingSSH.local ? `Local ssh-proxy test session
2398
+ cwd: ${sshSession.remoteCwd}
2399
+ Auth: unix socket \u2192 local proxy` : `SSH session to ${_pendingSSH.host}
2400
+ Remote cwd: ${sshSession.remoteCwd}
2401
+ Auth: unix socket -R \u2192 local proxy`, "info");
2402
+ await launchRepl(root, {
2403
+ getFpsMetrics,
2404
+ stats,
2405
+ initialState
2406
+ }, {
2407
+ debug: debug || debugToStderr,
2408
+ commands,
2409
+ initialTools: [],
2410
+ initialMessages: [sshInfoMessage],
2411
+ mcpClients: [],
2412
+ autoConnectIdeFlag: ide,
2413
+ mainThreadAgentDefinition,
2414
+ disableSlashCommands,
2415
+ sshSession,
2416
+ thinkingConfig
2417
+ }, renderAndRun);
2418
+ return;
2419
+ } else if (feature("KAIROS") && _pendingAssistantChat && (_pendingAssistantChat.sessionId || _pendingAssistantChat.discover)) {
2420
+ const {
2421
+ discoverAssistantSessions
2422
+ } = await import("./assistant/sessionDiscovery.js");
2423
+ let targetSessionId = _pendingAssistantChat.sessionId;
2424
+ if (!targetSessionId) {
2425
+ let sessions;
2426
+ try {
2427
+ sessions = await discoverAssistantSessions();
2428
+ } catch (e) {
2429
+ return await exitWithError(root, `Failed to discover sessions: ${e instanceof Error ? e.message : e}`, () => gracefulShutdown(1));
2430
+ }
2431
+ if (sessions.length === 0) {
2432
+ let installedDir;
2433
+ try {
2434
+ installedDir = await launchAssistantInstallWizard(root);
2435
+ } catch (e) {
2436
+ return await exitWithError(root, `Assistant installation failed: ${e instanceof Error ? e.message : e}`, () => gracefulShutdown(1));
2437
+ }
2438
+ if (installedDir === null) {
2439
+ await gracefulShutdown(0);
2440
+ process.exit(0);
2441
+ }
2442
+ return await exitWithMessage(root, `Assistant installed in ${installedDir}. The daemon is starting up \u2014 run \`claude assistant\` again in a few seconds to connect.`, {
2443
+ exitCode: 0,
2444
+ beforeExit: () => gracefulShutdown(0)
2445
+ });
2446
+ }
2447
+ if (sessions.length === 1) {
2448
+ targetSessionId = sessions[0].id;
2449
+ } else {
2450
+ const picked = await launchAssistantSessionChooser(root, {
2451
+ sessions
2452
+ });
2453
+ if (!picked) {
2454
+ await gracefulShutdown(0);
2455
+ process.exit(0);
2456
+ }
2457
+ targetSessionId = picked;
2458
+ }
2459
+ }
2460
+ const {
2461
+ checkAndRefreshOAuthTokenIfNeeded,
2462
+ getClaudeAIOAuthTokens
2463
+ } = await import("./utils/auth.js");
2464
+ await checkAndRefreshOAuthTokenIfNeeded();
2465
+ let apiCreds;
2466
+ try {
2467
+ apiCreds = await prepareApiRequest();
2468
+ } catch (e) {
2469
+ return await exitWithError(root, `Error: ${e instanceof Error ? e.message : "Failed to authenticate"}`, () => gracefulShutdown(1));
2470
+ }
2471
+ const getAccessToken = () => getClaudeAIOAuthTokens()?.accessToken ?? apiCreds.accessToken;
2472
+ setKairosActive(true);
2473
+ setUserMsgOptIn(true);
2474
+ setIsRemoteMode(true);
2475
+ const remoteSessionConfig = createRemoteSessionConfig(
2476
+ targetSessionId,
2477
+ getAccessToken,
2478
+ apiCreds.orgUUID,
2479
+ /* hasInitialPrompt */
2480
+ false,
2481
+ /* viewerOnly */
2482
+ true
2483
+ );
2484
+ const infoMessage = createSystemMessage(`Attached to assistant session ${targetSessionId.slice(0, 8)}\u2026`, "info");
2485
+ const assistantInitialState = {
2486
+ ...initialState,
2487
+ isBriefOnly: true,
2488
+ kairosEnabled: false,
2489
+ replBridgeEnabled: false
2490
+ };
2491
+ const remoteCommands = filterCommandsForRemoteMode(commands);
2492
+ await launchRepl(root, {
2493
+ getFpsMetrics,
2494
+ stats,
2495
+ initialState: assistantInitialState
2496
+ }, {
2497
+ debug: debug || debugToStderr,
2498
+ commands: remoteCommands,
2499
+ initialTools: [],
2500
+ initialMessages: [infoMessage],
2501
+ mcpClients: [],
2502
+ autoConnectIdeFlag: ide,
2503
+ mainThreadAgentDefinition,
2504
+ disableSlashCommands,
2505
+ remoteSessionConfig,
2506
+ thinkingConfig
2507
+ }, renderAndRun);
2508
+ return;
2509
+ } else if (options.resume || options.fromPr || teleport || remote !== null) {
2510
+ const {
2511
+ clearSessionCaches
2512
+ } = await import("./commands/clear/caches.js");
2513
+ clearSessionCaches();
2514
+ let messages = null;
2515
+ let processedResume = void 0;
2516
+ let maybeSessionId = validateUuid(options.resume);
2517
+ let searchTerm = void 0;
2518
+ let matchedLog = null;
2519
+ let filterByPr = void 0;
2520
+ if (options.fromPr) {
2521
+ if (options.fromPr === true) {
2522
+ filterByPr = true;
2523
+ } else if (typeof options.fromPr === "string") {
2524
+ filterByPr = options.fromPr;
2525
+ }
2526
+ }
2527
+ if (options.resume && typeof options.resume === "string" && !maybeSessionId) {
2528
+ const trimmedValue = options.resume.trim();
2529
+ if (trimmedValue) {
2530
+ const matches = await searchSessionsByCustomTitle(trimmedValue, {
2531
+ exact: true
2532
+ });
2533
+ if (matches.length === 1) {
2534
+ matchedLog = matches[0];
2535
+ maybeSessionId = getSessionIdFromLog(matchedLog) ?? null;
2536
+ } else {
2537
+ searchTerm = trimmedValue;
2538
+ }
2539
+ }
2540
+ }
2541
+ if (remote !== null || teleport) {
2542
+ await waitForPolicyLimitsToLoad();
2543
+ if (!isPolicyAllowed("allow_remote_sessions")) {
2544
+ return await exitWithError(root, "Error: Remote sessions are disabled by your organization's policy.", () => gracefulShutdown(1));
2545
+ }
2546
+ }
2547
+ if (remote !== null) {
2548
+ const hasInitialPrompt = remote.length > 0;
2549
+ const isRemoteTuiEnabled = getFeatureValue_CACHED_MAY_BE_STALE("tengu_remote_backend", false);
2550
+ if (!isRemoteTuiEnabled && !hasInitialPrompt) {
2551
+ return await exitWithError(root, 'Error: --remote requires a description.\nUsage: memcode --remote "your task description"', () => gracefulShutdown(1));
2552
+ }
2553
+ logEvent("tengu_remote_create_session", {
2554
+ has_initial_prompt: String(hasInitialPrompt)
2555
+ });
2556
+ const currentBranch = await getBranch();
2557
+ const createdSession = await teleportToRemoteWithErrorHandling(root, hasInitialPrompt ? remote : null, new AbortController().signal, currentBranch || void 0);
2558
+ if (!createdSession) {
2559
+ logEvent("tengu_remote_create_session_error", {
2560
+ error: "unable_to_create_session"
2561
+ });
2562
+ return await exitWithError(root, "Error: Unable to create remote session", () => gracefulShutdown(1));
2563
+ }
2564
+ logEvent("tengu_remote_create_session_success", {
2565
+ session_id: createdSession.id
2566
+ });
2567
+ if (!isRemoteTuiEnabled) {
2568
+ process.stdout.write(`Created remote session: ${createdSession.title}
2569
+ `);
2570
+ process.stdout.write(`View: ${getRemoteSessionUrl(createdSession.id)}?m=0
2571
+ `);
2572
+ process.stdout.write(`Resume with: memcode --teleport ${createdSession.id}
2573
+ `);
2574
+ await gracefulShutdown(0);
2575
+ process.exit(0);
2576
+ }
2577
+ setIsRemoteMode(true);
2578
+ switchSession(asSessionId(createdSession.id));
2579
+ let apiCreds;
2580
+ try {
2581
+ apiCreds = await prepareApiRequest();
2582
+ } catch (error) {
2583
+ logError(toError(error));
2584
+ return await exitWithError(root, `Error: ${errorMessage(error) || "Failed to authenticate"}`, () => gracefulShutdown(1));
2585
+ }
2586
+ const {
2587
+ getClaudeAIOAuthTokens: getTokensForRemote
2588
+ } = await import("./utils/auth.js");
2589
+ const getAccessTokenForRemote = () => getTokensForRemote()?.accessToken ?? apiCreds.accessToken;
2590
+ const remoteSessionConfig = createRemoteSessionConfig(createdSession.id, getAccessTokenForRemote, apiCreds.orgUUID, hasInitialPrompt);
2591
+ const remoteSessionUrl = `${getRemoteSessionUrl(createdSession.id)}?m=0`;
2592
+ const remoteInfoMessage = createSystemMessage(`/remote-control is active. Code in CLI or at ${remoteSessionUrl}`, "info");
2593
+ const initialUserMessage = hasInitialPrompt ? createUserMessage({
2594
+ content: remote
2595
+ }) : null;
2596
+ const remoteInitialState = {
2597
+ ...initialState,
2598
+ remoteSessionUrl
2599
+ };
2600
+ const remoteCommands = filterCommandsForRemoteMode(commands);
2601
+ await launchRepl(root, {
2602
+ getFpsMetrics,
2603
+ stats,
2604
+ initialState: remoteInitialState
2605
+ }, {
2606
+ debug: debug || debugToStderr,
2607
+ commands: remoteCommands,
2608
+ initialTools: [],
2609
+ initialMessages: initialUserMessage ? [remoteInfoMessage, initialUserMessage] : [remoteInfoMessage],
2610
+ mcpClients: [],
2611
+ autoConnectIdeFlag: ide,
2612
+ mainThreadAgentDefinition,
2613
+ disableSlashCommands,
2614
+ remoteSessionConfig,
2615
+ thinkingConfig
2616
+ }, renderAndRun);
2617
+ return;
2618
+ } else if (teleport) {
2619
+ if (teleport === true || teleport === "") {
2620
+ logEvent("tengu_teleport_interactive_mode", {});
2621
+ logForDebugging("selectAndResumeTeleportTask: Starting teleport flow...");
2622
+ const teleportResult = await launchTeleportResumeWrapper(root);
2623
+ if (!teleportResult) {
2624
+ await gracefulShutdown(0);
2625
+ process.exit(0);
2626
+ }
2627
+ const {
2628
+ branchError
2629
+ } = await checkOutTeleportedSessionBranch(teleportResult.branch);
2630
+ messages = processMessagesForTeleportResume(teleportResult.log, branchError);
2631
+ } else if (typeof teleport === "string") {
2632
+ logEvent("tengu_teleport_resume_session", {
2633
+ mode: "direct"
2634
+ });
2635
+ try {
2636
+ const sessionData = await fetchSession(teleport);
2637
+ const repoValidation = await validateSessionRepository(sessionData);
2638
+ if (repoValidation.status === "mismatch" || repoValidation.status === "not_in_repo") {
2639
+ const sessionRepo = repoValidation.sessionRepo;
2640
+ if (sessionRepo) {
2641
+ const knownPaths = getKnownPathsForRepo(sessionRepo);
2642
+ const existingPaths = await filterExistingPaths(knownPaths);
2643
+ if (existingPaths.length > 0) {
2644
+ const selectedPath = await launchTeleportRepoMismatchDialog(root, {
2645
+ targetRepo: sessionRepo,
2646
+ initialPaths: existingPaths
2647
+ });
2648
+ if (selectedPath) {
2649
+ process.chdir(selectedPath);
2650
+ setCwd(selectedPath);
2651
+ setOriginalCwd(selectedPath);
2652
+ } else {
2653
+ await gracefulShutdown(0);
2654
+ }
2655
+ } else {
2656
+ throw new TeleportOperationError(`You must run memcode --teleport ${teleport} from a checkout of ${sessionRepo}.`, chalk.red(`You must run memcode --teleport ${teleport} from a checkout of ${chalk.bold(sessionRepo)}.
2657
+ `));
2658
+ }
2659
+ }
2660
+ } else if (repoValidation.status === "error") {
2661
+ throw new TeleportOperationError(repoValidation.errorMessage || "Failed to validate session", chalk.red(`Error: ${repoValidation.errorMessage || "Failed to validate session"}
2662
+ `));
2663
+ }
2664
+ await validateGitState();
2665
+ const {
2666
+ teleportWithProgress
2667
+ } = await import("./components/TeleportProgress.js");
2668
+ const result = await teleportWithProgress(root, teleport);
2669
+ setTeleportedSessionInfo({
2670
+ sessionId: teleport
2671
+ });
2672
+ messages = result.messages;
2673
+ } catch (error) {
2674
+ if (error instanceof TeleportOperationError) {
2675
+ process.stderr.write(error.formattedMessage + "\n");
2676
+ } else {
2677
+ logError(error);
2678
+ process.stderr.write(chalk.red(`Error: ${errorMessage(error)}
2679
+ `));
2680
+ }
2681
+ await gracefulShutdown(1);
2682
+ }
2683
+ }
2684
+ }
2685
+ if (false) {
2686
+ if (options.resume && typeof options.resume === "string" && !maybeSessionId) {
2687
+ const {
2688
+ parseCcshareId,
2689
+ loadCcshare
2690
+ } = await null;
2691
+ const ccshareId = parseCcshareId(options.resume);
2692
+ if (ccshareId) {
2693
+ try {
2694
+ const resumeStart = performance.now();
2695
+ const logOption = await loadCcshare(ccshareId);
2696
+ const result = await loadConversationForResume(logOption, void 0);
2697
+ if (result) {
2698
+ processedResume = await processResumedConversation(result, {
2699
+ forkSession: true,
2700
+ transcriptPath: result.fullPath
2701
+ }, resumeContext);
2702
+ if (processedResume.restoredAgentDef) {
2703
+ mainThreadAgentDefinition = processedResume.restoredAgentDef;
2704
+ }
2705
+ logEvent("tengu_session_resumed", {
2706
+ entrypoint: "ccshare",
2707
+ success: true,
2708
+ resume_duration_ms: Math.round(performance.now() - resumeStart)
2709
+ });
2710
+ } else {
2711
+ logEvent("tengu_session_resumed", {
2712
+ entrypoint: "ccshare",
2713
+ success: false
2714
+ });
2715
+ }
2716
+ } catch (error) {
2717
+ logEvent("tengu_session_resumed", {
2718
+ entrypoint: "ccshare",
2719
+ success: false
2720
+ });
2721
+ logError(error);
2722
+ await exitWithError(root, `Unable to resume from ccshare: ${errorMessage(error)}`, () => gracefulShutdown(1));
2723
+ }
2724
+ } else {
2725
+ const resolvedPath = resolve(options.resume);
2726
+ try {
2727
+ const resumeStart = performance.now();
2728
+ let logOption;
2729
+ try {
2730
+ logOption = await loadTranscriptFromFile(resolvedPath);
2731
+ } catch (error) {
2732
+ if (!isENOENT(error)) throw error;
2733
+ }
2734
+ if (logOption) {
2735
+ const result = await loadConversationForResume(
2736
+ logOption,
2737
+ void 0
2738
+ /* sourceFile */
2739
+ );
2740
+ if (result) {
2741
+ processedResume = await processResumedConversation(result, {
2742
+ forkSession: !!options.forkSession,
2743
+ transcriptPath: result.fullPath
2744
+ }, resumeContext);
2745
+ if (processedResume.restoredAgentDef) {
2746
+ mainThreadAgentDefinition = processedResume.restoredAgentDef;
2747
+ }
2748
+ logEvent("tengu_session_resumed", {
2749
+ entrypoint: "file",
2750
+ success: true,
2751
+ resume_duration_ms: Math.round(performance.now() - resumeStart)
2752
+ });
2753
+ } else {
2754
+ logEvent("tengu_session_resumed", {
2755
+ entrypoint: "file",
2756
+ success: false
2757
+ });
2758
+ }
2759
+ }
2760
+ } catch (error) {
2761
+ logEvent("tengu_session_resumed", {
2762
+ entrypoint: "file",
2763
+ success: false
2764
+ });
2765
+ logError(error);
2766
+ await exitWithError(root, `Unable to load transcript from file: ${options.resume}`, () => gracefulShutdown(1));
2767
+ }
2768
+ }
2769
+ }
2770
+ }
2771
+ if (maybeSessionId) {
2772
+ const sessionId2 = maybeSessionId;
2773
+ try {
2774
+ const resumeStart = performance.now();
2775
+ const result = await loadConversationForResume(matchedLog ?? sessionId2, void 0);
2776
+ if (!result) {
2777
+ logEvent("tengu_session_resumed", {
2778
+ entrypoint: "cli_flag",
2779
+ success: false
2780
+ });
2781
+ return await exitWithError(root, `No conversation found with session ID: ${sessionId2}`);
2782
+ }
2783
+ const fullPath = matchedLog?.fullPath ?? result.fullPath;
2784
+ processedResume = await processResumedConversation(result, {
2785
+ forkSession: !!options.forkSession,
2786
+ sessionIdOverride: sessionId2,
2787
+ transcriptPath: fullPath
2788
+ }, resumeContext);
2789
+ if (processedResume.restoredAgentDef) {
2790
+ mainThreadAgentDefinition = processedResume.restoredAgentDef;
2791
+ }
2792
+ logEvent("tengu_session_resumed", {
2793
+ entrypoint: "cli_flag",
2794
+ success: true,
2795
+ resume_duration_ms: Math.round(performance.now() - resumeStart)
2796
+ });
2797
+ } catch (error) {
2798
+ logEvent("tengu_session_resumed", {
2799
+ entrypoint: "cli_flag",
2800
+ success: false
2801
+ });
2802
+ logError(error);
2803
+ await exitWithError(root, `Failed to resume session ${sessionId2}`);
2804
+ }
2805
+ }
2806
+ if (fileDownloadPromise) {
2807
+ try {
2808
+ const results = await fileDownloadPromise;
2809
+ const failedCount = count(results, (r) => !r.success);
2810
+ if (failedCount > 0) {
2811
+ process.stderr.write(chalk.yellow(`Warning: ${failedCount}/${results.length} file(s) failed to download.
2812
+ `));
2813
+ }
2814
+ } catch (error) {
2815
+ return await exitWithError(root, `Error downloading files: ${errorMessage(error)}`);
2816
+ }
2817
+ }
2818
+ const resumeData = processedResume ?? (Array.isArray(messages) ? {
2819
+ messages,
2820
+ fileHistorySnapshots: void 0,
2821
+ agentName: void 0,
2822
+ agentColor: void 0,
2823
+ restoredAgentDef: mainThreadAgentDefinition,
2824
+ initialState,
2825
+ contentReplacements: void 0
2826
+ } : void 0);
2827
+ if (resumeData) {
2828
+ maybeActivateProactive(options);
2829
+ maybeActivateBrief(options);
2830
+ await launchRepl(root, {
2831
+ getFpsMetrics,
2832
+ stats,
2833
+ initialState: resumeData.initialState
2834
+ }, {
2835
+ ...sessionConfig,
2836
+ mainThreadAgentDefinition: resumeData.restoredAgentDef ?? mainThreadAgentDefinition,
2837
+ initialMessages: resumeData.messages,
2838
+ initialFileHistorySnapshots: resumeData.fileHistorySnapshots,
2839
+ initialContentReplacements: resumeData.contentReplacements,
2840
+ initialAgentName: resumeData.agentName,
2841
+ initialAgentColor: resumeData.agentColor
2842
+ }, renderAndRun);
2843
+ } else {
2844
+ await launchResumeChooser(root, {
2845
+ getFpsMetrics,
2846
+ stats,
2847
+ initialState
2848
+ }, getWorktreePaths(getOriginalCwd()), {
2849
+ ...sessionConfig,
2850
+ initialSearchQuery: searchTerm,
2851
+ forkSession: options.forkSession,
2852
+ filterByPr
2853
+ });
2854
+ }
2855
+ } else {
2856
+ const pendingHookMessages = hooksPromise && hookMessages.length === 0 ? hooksPromise : void 0;
2857
+ profileCheckpoint("action_after_hooks");
2858
+ maybeActivateProactive(options);
2859
+ maybeActivateBrief(options);
2860
+ if (feature("COORDINATOR_MODE")) {
2861
+ saveMode(coordinatorModeModule?.isCoordinatorMode() ? "coordinator" : "normal");
2862
+ }
2863
+ let deepLinkBanner = null;
2864
+ if (feature("LODESTONE")) {
2865
+ if (options.deepLinkOrigin) {
2866
+ logEvent("tengu_deep_link_opened", {
2867
+ has_prefill: Boolean(options.prefill),
2868
+ has_repo: Boolean(options.deepLinkRepo)
2869
+ });
2870
+ deepLinkBanner = createSystemMessage(buildDeepLinkBanner({
2871
+ cwd: getCwd(),
2872
+ prefillLength: options.prefill?.length,
2873
+ repo: options.deepLinkRepo,
2874
+ lastFetch: options.deepLinkLastFetch !== void 0 ? new Date(options.deepLinkLastFetch) : void 0
2875
+ }), "warning");
2876
+ } else if (options.prefill) {
2877
+ deepLinkBanner = createSystemMessage("Launched with a pre-filled prompt \u2014 review it before pressing Enter.", "warning");
2878
+ }
2879
+ }
2880
+ const initialMessages = deepLinkBanner ? [deepLinkBanner, ...hookMessages] : hookMessages.length > 0 ? hookMessages : void 0;
2881
+ await launchRepl(root, {
2882
+ getFpsMetrics,
2883
+ stats,
2884
+ initialState
2885
+ }, {
2886
+ ...sessionConfig,
2887
+ initialMessages,
2888
+ pendingHookMessages
2889
+ }, renderAndRun);
2890
+ }
2891
+ }).version(`${MACRO.VERSION} (memcode)`, "-v, --version", "Output the version number");
2892
+ program.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
2893
+ program.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
2894
+ program.addOption(new Option("--no-animation", "Disable animated terminal UI elements").hideHelp());
2895
+ if (canUserConfigureAdvisor()) {
2896
+ program.addOption(new Option("--advisor <model>", "Enable the server-side advisor tool with the specified model (alias or full ID).").hideHelp());
2897
+ }
2898
+ if (false) {
2899
+ program.addOption(new Option("--delegate-permissions", "[ANT-ONLY] Alias for --permission-mode auto.").implies({
2900
+ permissionMode: "auto"
2901
+ }));
2902
+ program.addOption(new Option("--dangerously-skip-permissions-with-classifiers", "[ANT-ONLY] Deprecated alias for --permission-mode auto.").hideHelp().implies({
2903
+ permissionMode: "auto"
2904
+ }));
2905
+ program.addOption(new Option("--afk", "[ANT-ONLY] Deprecated alias for --permission-mode auto.").hideHelp().implies({
2906
+ permissionMode: "auto"
2907
+ }));
2908
+ program.addOption(new Option("--tasks [id]", '[ANT-ONLY] Tasks mode: watch for tasks and auto-process them. Optional id is used as both the task list ID and agent ID (defaults to "tasklist").').argParser(String).hideHelp());
2909
+ program.option("--agent-teams", "[ANT-ONLY] Force memCode to use multi-agent mode for solving problems", () => true);
2910
+ }
2911
+ if (feature("TRANSCRIPT_CLASSIFIER")) {
2912
+ program.addOption(new Option("--enable-auto-mode", "Opt in to auto mode").hideHelp());
2913
+ }
2914
+ if (feature("PROACTIVE") || feature("KAIROS")) {
2915
+ program.addOption(new Option("--proactive", "Start in proactive autonomous mode"));
2916
+ }
2917
+ if (feature("UDS_INBOX")) {
2918
+ program.addOption(new Option("--messaging-socket-path <path>", "Unix domain socket path for the UDS messaging server (defaults to a tmp path)"));
2919
+ }
2920
+ if (feature("KAIROS") || feature("KAIROS_BRIEF")) {
2921
+ program.addOption(new Option("--brief", "Enable SendUserMessage tool for agent-to-user communication"));
2922
+ }
2923
+ if (feature("KAIROS")) {
2924
+ program.addOption(new Option("--assistant", "Force assistant mode (Agent SDK daemon use)").hideHelp());
2925
+ }
2926
+ if (feature("KAIROS") || feature("KAIROS_CHANNELS")) {
2927
+ program.addOption(new Option("--channels <servers...>", "MCP servers whose channel notifications (inbound push) should register this session. Space-separated server names.").hideHelp());
2928
+ program.addOption(new Option("--dangerously-load-development-channels <servers...>", "Load channel servers not on the approved allowlist. For local channel development only. Shows a confirmation dialog at startup.").hideHelp());
2929
+ }
2930
+ program.addOption(new Option("--agent-id <id>", "Teammate agent ID").hideHelp());
2931
+ program.addOption(new Option("--agent-name <name>", "Teammate display name").hideHelp());
2932
+ program.addOption(new Option("--team-name <name>", "Team name for swarm coordination").hideHelp());
2933
+ program.addOption(new Option("--agent-color <color>", "Teammate UI color").hideHelp());
2934
+ program.addOption(new Option("--plan-mode-required", "Require plan mode before implementation").hideHelp());
2935
+ program.addOption(new Option("--parent-session-id <id>", "Parent session ID for analytics correlation").hideHelp());
2936
+ program.addOption(new Option("--teammate-mode <mode>", 'How to spawn teammates: "tmux", "in-process", or "auto"').choices(["auto", "tmux", "in-process"]).hideHelp());
2937
+ program.addOption(new Option("--agent-type <type>", "Custom agent type for this teammate").hideHelp());
2938
+ program.addOption(new Option("--sdk-url <url>", "Use remote WebSocket endpoint for SDK I/O streaming (only with -p and stream-json format)").hideHelp());
2939
+ program.addOption(new Option("--teleport [session]", "Resume a teleport session, optionally specify session ID").hideHelp());
2940
+ program.addOption(new Option("--remote [description]", "Create a remote session with the given description").hideHelp());
2941
+ if (isBridgeModeAvailable()) {
2942
+ program.addOption(new Option("--remote-control [name]", "Start an interactive session with Remote Control enabled (optionally named)").argParser((value) => value || true).hideHelp());
2943
+ program.addOption(new Option("--rc [name]", "Alias for --remote-control").argParser((value) => value || true).hideHelp());
2944
+ }
2945
+ if (feature("HARD_FAIL")) {
2946
+ program.addOption(new Option("--hard-fail", "Crash on logError calls instead of silently logging").hideHelp());
2947
+ }
2948
+ profileCheckpoint("run_main_options_built");
2949
+ const isPrintMode = process.argv.includes("-p") || process.argv.includes("--print");
2950
+ const isCcUrl = process.argv.some((a) => a.startsWith("cc://") || a.startsWith("cc+unix://"));
2951
+ if (isPrintMode && !isCcUrl) {
2952
+ profileCheckpoint("run_before_parse");
2953
+ await program.parseAsync(process.argv);
2954
+ profileCheckpoint("run_after_parse");
2955
+ return program;
2956
+ }
2957
+ const mcp = program.command("mcp").description("Configure and manage MCP servers").configureHelp(createSortedHelpConfig()).enablePositionalOptions();
2958
+ mcp.command("serve").description(`Start the memCode MCP server`).option("-d, --debug", "Enable debug mode", () => true).option("--verbose", "Override verbose mode setting from config", () => true).action(async ({
2959
+ debug,
2960
+ verbose
2961
+ }) => {
2962
+ const {
2963
+ mcpServeHandler
2964
+ } = await import("./cli/handlers/mcp.js");
2965
+ await mcpServeHandler({
2966
+ debug,
2967
+ verbose
2968
+ });
2969
+ });
2970
+ registerMcpAddCommand(mcp);
2971
+ if (isXaaEnabled()) {
2972
+ registerMcpXaaIdpCommand(mcp);
2973
+ }
2974
+ mcp.command("remove <name>").description("Remove an MCP server").option("-s, --scope <scope>", "Configuration scope (local, user, or project) - if not specified, removes from whichever scope it exists in").action(async (name, options) => {
2975
+ const {
2976
+ mcpRemoveHandler
2977
+ } = await import("./cli/handlers/mcp.js");
2978
+ await mcpRemoveHandler(name, options);
2979
+ });
2980
+ mcp.command("list").description("List configured MCP servers. Note: The workspace trust dialog is skipped and stdio servers from .mcp.json are spawned for health checks. Only use this command in directories you trust.").action(async () => {
2981
+ const {
2982
+ mcpListHandler
2983
+ } = await import("./cli/handlers/mcp.js");
2984
+ await mcpListHandler();
2985
+ });
2986
+ mcp.command("get <name>").description("Get details about an MCP server. Note: The workspace trust dialog is skipped and stdio servers from .mcp.json are spawned for health checks. Only use this command in directories you trust.").action(async (name) => {
2987
+ const {
2988
+ mcpGetHandler
2989
+ } = await import("./cli/handlers/mcp.js");
2990
+ await mcpGetHandler(name);
2991
+ });
2992
+ mcp.command("add-json <name> <json>").description("Add an MCP server (stdio or SSE) with a JSON string").option("-s, --scope <scope>", "Configuration scope (local, user, or project)", "local").option("--client-secret", "Prompt for OAuth client secret (or set MCP_CLIENT_SECRET env var)").action(async (name, json, options) => {
2993
+ const {
2994
+ mcpAddJsonHandler
2995
+ } = await import("./cli/handlers/mcp.js");
2996
+ await mcpAddJsonHandler(name, json, options);
2997
+ });
2998
+ mcp.command("add-from-memcode-desktop", { hidden: !isUpstreamFeatureEnabled() }).description("Import MCP servers from memCode Desktop (Mac and WSL only)").option("-s, --scope <scope>", "Configuration scope (local, user, or project)", "local").action(async (options) => {
2999
+ const {
3000
+ mcpAddFromDesktopHandler
3001
+ } = await import("./cli/handlers/mcp.js");
3002
+ await mcpAddFromDesktopHandler(options);
3003
+ });
3004
+ mcp.command("add-from-claude-desktop", { hidden: true }).description("Import MCP servers from memCode Desktop (Mac and WSL only)").option("-s, --scope <scope>", "Configuration scope (local, user, or project)", "local").action(async (options) => {
3005
+ const {
3006
+ mcpAddFromDesktopHandler
3007
+ } = await import("./cli/handlers/mcp.js");
3008
+ await mcpAddFromDesktopHandler(options);
3009
+ });
3010
+ mcp.command("reset-project-choices").description("Reset all approved and rejected project-scoped (.mcp.json) servers within this project").action(async () => {
3011
+ const {
3012
+ mcpResetChoicesHandler
3013
+ } = await import("./cli/handlers/mcp.js");
3014
+ await mcpResetChoicesHandler();
3015
+ });
3016
+ if (feature("DIRECT_CONNECT")) {
3017
+ program.command("server").description("Start a memCode session server").option("--port <number>", "HTTP port", "0").option("--host <string>", "Bind address", "0.0.0.0").option("--auth-token <token>", "Bearer token for auth").option("--unix <path>", "Listen on a unix domain socket").option("--workspace <dir>", "Default working directory for sessions that do not specify cwd").option("--idle-timeout <ms>", "Idle timeout for detached sessions in ms (0 = never expire)", "600000").option("--max-sessions <n>", "Maximum concurrent sessions (0 = unlimited)", "32").action(async (opts) => {
3018
+ const {
3019
+ randomBytes
3020
+ } = await import("crypto");
3021
+ const {
3022
+ startServer
3023
+ } = await import("./server/server.js");
3024
+ const {
3025
+ SessionManager
3026
+ } = await import("./server/sessionManager.js");
3027
+ const {
3028
+ DangerousBackend
3029
+ } = await import("./server/backends/dangerousBackend.js");
3030
+ const {
3031
+ printBanner
3032
+ } = await import("./server/serverBanner.js");
3033
+ const {
3034
+ createServerLogger
3035
+ } = await import("./server/serverLog.js");
3036
+ const {
3037
+ writeServerLock,
3038
+ removeServerLock,
3039
+ probeRunningServer
3040
+ } = await import("./server/lockfile.js");
3041
+ const existing = await probeRunningServer();
3042
+ if (existing) {
3043
+ process.stderr.write(`A claude server is already running (pid ${existing.pid}) at ${existing.httpUrl}
3044
+ `);
3045
+ process.exit(1);
3046
+ }
3047
+ const authToken = opts.authToken ?? `sk-ant-cc-${randomBytes(16).toString("base64url")}`;
3048
+ const config = {
3049
+ port: parseInt(opts.port, 10),
3050
+ host: opts.host,
3051
+ authToken,
3052
+ unix: opts.unix,
3053
+ workspace: opts.workspace,
3054
+ idleTimeoutMs: parseInt(opts.idleTimeout, 10),
3055
+ maxSessions: parseInt(opts.maxSessions, 10)
3056
+ };
3057
+ const backend = new DangerousBackend();
3058
+ const sessionManager = new SessionManager(backend, {
3059
+ idleTimeoutMs: config.idleTimeoutMs,
3060
+ maxSessions: config.maxSessions
3061
+ });
3062
+ const logger = createServerLogger();
3063
+ const server = startServer(config, sessionManager, logger);
3064
+ const actualPort = server.port ?? config.port;
3065
+ printBanner(config, authToken, actualPort);
3066
+ await writeServerLock({
3067
+ pid: process.pid,
3068
+ port: actualPort,
3069
+ host: config.host,
3070
+ httpUrl: config.unix ? `unix:${config.unix}` : `http://${config.host}:${actualPort}`,
3071
+ startedAt: Date.now()
3072
+ });
3073
+ let shuttingDown = false;
3074
+ const shutdown = async () => {
3075
+ if (shuttingDown) return;
3076
+ shuttingDown = true;
3077
+ server.stop(true);
3078
+ await sessionManager.destroyAll();
3079
+ await removeServerLock();
3080
+ process.exit(0);
3081
+ };
3082
+ process.once("SIGINT", () => void shutdown());
3083
+ process.once("SIGTERM", () => void shutdown());
3084
+ });
3085
+ }
3086
+ if (feature("SSH_REMOTE")) {
3087
+ program.command("ssh <host> [dir]").description("Run memCode on a remote host over SSH. Deploys the binary and tunnels API auth back through your local machine \u2014 no remote setup needed.").option("--permission-mode <mode>", "Permission mode for the remote session").option("--dangerously-skip-permissions", "Skip all permission prompts on the remote (dangerous)").option("--local", "e2e test mode \u2014 spawn the child CLI locally (skip ssh/deploy). Exercises the auth proxy and unix-socket plumbing without a remote host.").action(async () => {
3088
+ process.stderr.write("Usage: memcode ssh <user@host | ssh-config-alias> [dir]\n\nRuns memCode on a remote Linux host. You don't need to install\nanything on the remote or run `memcode auth login` there \u2014 the binary is\ndeployed over SSH and API auth tunnels back through your local machine.\n");
3089
+ process.exit(1);
3090
+ });
3091
+ }
3092
+ if (feature("DIRECT_CONNECT")) {
3093
+ program.command("open <cc-url>").description("Connect to a memCode server (internal \u2014 use cc:// URLs)").option("-p, --print [prompt]", "Print mode (headless)").option("--output-format <format>", "Output format: text, json, stream-json", "text").action(async (ccUrl, opts) => {
3094
+ const {
3095
+ parseConnectUrl
3096
+ } = await import("./server/parseConnectUrl.js");
3097
+ const {
3098
+ serverUrl,
3099
+ authToken
3100
+ } = parseConnectUrl(ccUrl);
3101
+ let connectConfig;
3102
+ try {
3103
+ const session = await createDirectConnectSession({
3104
+ serverUrl,
3105
+ authToken,
3106
+ cwd: getOriginalCwd(),
3107
+ dangerouslySkipPermissions: _pendingConnect?.dangerouslySkipPermissions
3108
+ });
3109
+ if (session.workDir) {
3110
+ setOriginalCwd(session.workDir);
3111
+ setCwdState(session.workDir);
3112
+ }
3113
+ setDirectConnectServerUrl(serverUrl);
3114
+ connectConfig = session.config;
3115
+ } catch (err) {
3116
+ console.error(err instanceof DirectConnectError ? err.message : String(err));
3117
+ process.exit(1);
3118
+ }
3119
+ const {
3120
+ runConnectHeadless
3121
+ } = await import("./server/connectHeadless.js");
3122
+ const prompt = typeof opts.print === "string" ? opts.print : "";
3123
+ const interactive = opts.print === true;
3124
+ await runConnectHeadless(connectConfig, prompt, opts.outputFormat, interactive);
3125
+ });
3126
+ }
3127
+ const auth = program.command("auth").description("Manage authentication").configureHelp(createSortedHelpConfig());
3128
+ auth.command("login", { hidden: !isUpstreamFeatureEnabled() }).description("Sign in to an upstream account").option("--email <email>", "Pre-populate email address on the login page").option("--sso", "Force SSO login flow").option("--console", "Use Console API usage billing instead of subscription auth").option("--claudeai", "Use subscription auth (default)").action(async ({
3129
+ email,
3130
+ sso,
3131
+ console: useConsole,
3132
+ claudeai
3133
+ }) => {
3134
+ const {
3135
+ authLogin
3136
+ } = await import("./cli/handlers/auth.js");
3137
+ await authLogin({
3138
+ email,
3139
+ sso,
3140
+ console: useConsole,
3141
+ claudeai
3142
+ });
3143
+ });
3144
+ auth.command("status").description("Show authentication status").option("--json", "Output as JSON (default)").option("--text", "Output as human-readable text").action(async (opts) => {
3145
+ const {
3146
+ authStatus
3147
+ } = await import("./cli/handlers/auth.js");
3148
+ await authStatus(opts);
3149
+ });
3150
+ auth.command("logout", { hidden: !isUpstreamFeatureEnabled() }).description("Log out from an upstream account").action(async () => {
3151
+ const {
3152
+ authLogout
3153
+ } = await import("./cli/handlers/auth.js");
3154
+ await authLogout();
3155
+ });
3156
+ const coworkOption = () => new Option("--cowork", "Use cowork_plugins directory").hideHelp();
3157
+ const pluginCmd = program.command("plugin").alias("plugins").description("Manage memCode plugins").configureHelp(createSortedHelpConfig());
3158
+ pluginCmd.command("validate <path>").description("Validate a plugin or marketplace manifest").addOption(coworkOption()).action(async (manifestPath, options) => {
3159
+ const {
3160
+ pluginValidateHandler
3161
+ } = await import("./cli/handlers/plugins.js");
3162
+ await pluginValidateHandler(manifestPath, options);
3163
+ });
3164
+ pluginCmd.command("list").description("List installed plugins").option("--json", "Output as JSON").option("--available", "Include available plugins from marketplaces (requires --json)").addOption(coworkOption()).action(async (options) => {
3165
+ const {
3166
+ pluginListHandler
3167
+ } = await import("./cli/handlers/plugins.js");
3168
+ await pluginListHandler(options);
3169
+ });
3170
+ const marketplaceCmd = pluginCmd.command("marketplace").description("Manage memCode marketplaces").configureHelp(createSortedHelpConfig());
3171
+ marketplaceCmd.command("add <source>").description("Add a marketplace from a URL, path, or GitHub repo").addOption(coworkOption()).option("--sparse <paths...>", "Limit checkout to specific directories via git sparse-checkout (for monorepos). Example: --sparse .claude-plugin plugins").option("--scope <scope>", "Where to declare the marketplace: user (default), project, or local").action(async (source, options) => {
3172
+ const {
3173
+ marketplaceAddHandler
3174
+ } = await import("./cli/handlers/plugins.js");
3175
+ await marketplaceAddHandler(source, options);
3176
+ });
3177
+ marketplaceCmd.command("list").description("List all configured marketplaces").option("--json", "Output as JSON").addOption(coworkOption()).action(async (options) => {
3178
+ const {
3179
+ marketplaceListHandler
3180
+ } = await import("./cli/handlers/plugins.js");
3181
+ await marketplaceListHandler(options);
3182
+ });
3183
+ marketplaceCmd.command("remove <name>").alias("rm").description("Remove a configured marketplace").addOption(coworkOption()).action(async (name, options) => {
3184
+ const {
3185
+ marketplaceRemoveHandler
3186
+ } = await import("./cli/handlers/plugins.js");
3187
+ await marketplaceRemoveHandler(name, options);
3188
+ });
3189
+ marketplaceCmd.command("update [name]").description("Update marketplace(s) from their source - updates all if no name specified").addOption(coworkOption()).action(async (name, options) => {
3190
+ const {
3191
+ marketplaceUpdateHandler
3192
+ } = await import("./cli/handlers/plugins.js");
3193
+ await marketplaceUpdateHandler(name, options);
3194
+ });
3195
+ pluginCmd.command("install <plugin>").alias("i").description("Install a plugin from available marketplaces (use plugin@marketplace for specific marketplace)").option("-s, --scope <scope>", "Installation scope: user, project, or local", "user").addOption(coworkOption()).action(async (plugin, options) => {
3196
+ const {
3197
+ pluginInstallHandler
3198
+ } = await import("./cli/handlers/plugins.js");
3199
+ await pluginInstallHandler(plugin, options);
3200
+ });
3201
+ pluginCmd.command("uninstall <plugin>").alias("remove").alias("rm").description("Uninstall an installed plugin").option("-s, --scope <scope>", "Uninstall from scope: user, project, or local", "user").option("--keep-data", "Preserve the plugin's persistent data directory (~/.memcode/plugins/data/{id}/)").addOption(coworkOption()).action(async (plugin, options) => {
3202
+ const {
3203
+ pluginUninstallHandler
3204
+ } = await import("./cli/handlers/plugins.js");
3205
+ await pluginUninstallHandler(plugin, options);
3206
+ });
3207
+ pluginCmd.command("enable <plugin>").description("Enable a disabled plugin").option("-s, --scope <scope>", `Installation scope: ${VALID_INSTALLABLE_SCOPES.join(", ")} (default: auto-detect)`).addOption(coworkOption()).action(async (plugin, options) => {
3208
+ const {
3209
+ pluginEnableHandler
3210
+ } = await import("./cli/handlers/plugins.js");
3211
+ await pluginEnableHandler(plugin, options);
3212
+ });
3213
+ pluginCmd.command("disable [plugin]").description("Disable an enabled plugin").option("-a, --all", "Disable all enabled plugins").option("-s, --scope <scope>", `Installation scope: ${VALID_INSTALLABLE_SCOPES.join(", ")} (default: auto-detect)`).addOption(coworkOption()).action(async (plugin, options) => {
3214
+ const {
3215
+ pluginDisableHandler
3216
+ } = await import("./cli/handlers/plugins.js");
3217
+ await pluginDisableHandler(plugin, options);
3218
+ });
3219
+ pluginCmd.command("update <plugin>").description("Update a plugin to the latest version (restart required to apply)").option("-s, --scope <scope>", `Installation scope: ${VALID_UPDATE_SCOPES.join(", ")} (default: user)`).addOption(coworkOption()).action(async (plugin, options) => {
3220
+ const {
3221
+ pluginUpdateHandler
3222
+ } = await import("./cli/handlers/plugins.js");
3223
+ await pluginUpdateHandler(plugin, options);
3224
+ });
3225
+ program.command("setup-token", { hidden: true }).description("Set up a long-lived authentication token").action(async () => {
3226
+ const [{
3227
+ setupTokenHandler
3228
+ }, {
3229
+ createRoot
3230
+ }] = await Promise.all([import("./cli/handlers/util.js"), import("./ink.js")]);
3231
+ const root = await createRoot(getBaseRenderOptions(false));
3232
+ await setupTokenHandler(root);
3233
+ });
3234
+ program.command("agents").description("List configured agents").option("--setting-sources <sources>", "Comma-separated list of setting sources to load (user, project, local).").action(async () => {
3235
+ const {
3236
+ agentsHandler
3237
+ } = await import("./cli/handlers/agents.js");
3238
+ await agentsHandler();
3239
+ process.exit(0);
3240
+ });
3241
+ if (feature("TRANSCRIPT_CLASSIFIER")) {
3242
+ if (getAutoModeEnabledStateIfCached() !== "disabled") {
3243
+ const autoModeCmd = program.command("auto-mode").description("Inspect auto mode classifier configuration");
3244
+ autoModeCmd.command("defaults").description("Print the default auto mode environment, allow, and deny rules as JSON").action(async () => {
3245
+ const {
3246
+ autoModeDefaultsHandler
3247
+ } = await import("./cli/handlers/autoMode.js");
3248
+ autoModeDefaultsHandler();
3249
+ process.exit(0);
3250
+ });
3251
+ autoModeCmd.command("config").description("Print the effective auto mode config as JSON: your settings where set, defaults otherwise").action(async () => {
3252
+ const {
3253
+ autoModeConfigHandler
3254
+ } = await import("./cli/handlers/autoMode.js");
3255
+ autoModeConfigHandler();
3256
+ process.exit(0);
3257
+ });
3258
+ autoModeCmd.command("critique").description("Get AI feedback on your custom auto mode rules").option("--model <model>", "Override which model is used").action(async (options) => {
3259
+ const {
3260
+ autoModeCritiqueHandler
3261
+ } = await import("./cli/handlers/autoMode.js");
3262
+ await autoModeCritiqueHandler(options);
3263
+ process.exit();
3264
+ });
3265
+ }
3266
+ }
3267
+ if (isBridgeModeAvailable()) {
3268
+ program.command("remote-control", {
3269
+ hidden: true
3270
+ }).alias("rc").description("Connect your local environment for remote-control sessions via memCode").action(async () => {
3271
+ const {
3272
+ bridgeMain
3273
+ } = await import("./bridge/bridgeMain.js");
3274
+ await bridgeMain(process.argv.slice(3));
3275
+ });
3276
+ }
3277
+ if (feature("KAIROS")) {
3278
+ program.command("assistant [sessionId]").description("Attach the REPL as a client to a running bridge session. Discovers sessions via API if no sessionId given.").action(() => {
3279
+ process.stderr.write("Usage: memcode assistant [sessionId]\n\nAttach the REPL as a viewer client to a running bridge session.\nOmit sessionId to discover and pick from available sessions.\n");
3280
+ process.exit(1);
3281
+ });
3282
+ }
3283
+ program.command("doctor").description("Check the health of your memCode auto-updater. Note: The workspace trust dialog is skipped and stdio servers from .mcp.json are spawned for health checks. Only use this command in directories you trust.").action(async () => {
3284
+ const {
3285
+ doctorHandler
3286
+ } = await import("./cli/handlers/util.js");
3287
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
3288
+ await doctorHandler({
3289
+ render() {
3290
+ },
3291
+ unmount() {
3292
+ }
3293
+ });
3294
+ return;
3295
+ }
3296
+ const {
3297
+ createRoot
3298
+ } = await import("./ink.js");
3299
+ const root = await createRoot(getBaseRenderOptions(false));
3300
+ await doctorHandler(root);
3301
+ });
3302
+ program.command("update").alias("upgrade").description("Check for updates and install if available").action(async () => {
3303
+ const {
3304
+ update
3305
+ } = await import("src/cli/update.js");
3306
+ await update();
3307
+ });
3308
+ if (false) {
3309
+ program.command("up").description('[ANT-ONLY] Initialize or upgrade the local dev environment using the "# claude up" section of the nearest XCODE.md').action(async () => {
3310
+ const {
3311
+ up
3312
+ } = await null;
3313
+ await up();
3314
+ });
3315
+ }
3316
+ if (false) {
3317
+ program.command("rollback [target]").description("[ANT-ONLY] Roll back to a previous release\n\nExamples:\n memcode rollback Go 1 version back from current\n memcode rollback 3 Go 3 versions back from current\n memcode rollback 2.0.73-dev.20251217.t190658 Roll back to a specific version").option("-l, --list", "List recent published versions with ages").option("--dry-run", "Show what would be installed without installing").option("--safe", "Roll back to the server-pinned safe version (set by oncall during incidents)").action(async (target, options) => {
3318
+ const {
3319
+ rollback
3320
+ } = await null;
3321
+ await rollback(target, options);
3322
+ });
3323
+ }
3324
+ program.command("install [target]").description("Install memCode native build. Use [target] to specify version (stable, latest, or specific version)").option("--force", "Force installation even if already installed").action(async (target, options) => {
3325
+ const {
3326
+ installHandler
3327
+ } = await import("./cli/handlers/util.js");
3328
+ await installHandler(target, options);
3329
+ });
3330
+ if (false) {
3331
+ const validateLogId = (value) => {
3332
+ const maybeSessionId = validateUuid(value);
3333
+ if (maybeSessionId) return maybeSessionId;
3334
+ return Number(value);
3335
+ };
3336
+ program.command("log").description("[ANT-ONLY] Manage conversation logs.").argument("[number|sessionId]", "A number (0, 1, 2, etc.) to display a specific log, or the sesssion ID (uuid) of a log", validateLogId).action(async (logId) => {
3337
+ const {
3338
+ logHandler
3339
+ } = await null;
3340
+ await logHandler(logId);
3341
+ });
3342
+ program.command("error").description("[ANT-ONLY] View error logs. Optionally provide a number (0, -1, -2, etc.) to display a specific log.").argument("[number]", "A number (0, 1, 2, etc.) to display a specific log", parseInt).action(async (number) => {
3343
+ const {
3344
+ errorHandler
3345
+ } = await null;
3346
+ await errorHandler(number);
3347
+ });
3348
+ program.command("export").description("[ANT-ONLY] Export a conversation to a text file.").usage("<source> <outputFile>").argument("<source>", "Session ID, log index (0, 1, 2...), or path to a .json/.jsonl log file").argument("<outputFile>", "Output file path for the exported text").addHelpText("after", `
3349
+ Examples:
3350
+ $ claude export 0 conversation.txt Export conversation at log index 0
3351
+ $ claude export <uuid> conversation.txt Export conversation by session ID
3352
+ $ claude export input.json output.txt Render JSON log file to text
3353
+ $ claude export <uuid>.jsonl output.txt Render JSONL session file to text`).action(async (source, outputFile) => {
3354
+ const {
3355
+ exportHandler
3356
+ } = await null;
3357
+ await exportHandler(source, outputFile);
3358
+ });
3359
+ if (false) {
3360
+ const taskCmd = program.command("task").description("[ANT-ONLY] Manage task list tasks");
3361
+ taskCmd.command("create <subject>").description("Create a new task").option("-d, --description <text>", "Task description").option("-l, --list <id>", 'Task list ID (defaults to "tasklist")').action(async (subject, opts) => {
3362
+ const {
3363
+ taskCreateHandler
3364
+ } = await null;
3365
+ await taskCreateHandler(subject, opts);
3366
+ });
3367
+ taskCmd.command("list").description("List all tasks").option("-l, --list <id>", 'Task list ID (defaults to "tasklist")').option("--pending", "Show only pending tasks").option("--json", "Output as JSON").action(async (opts) => {
3368
+ const {
3369
+ taskListHandler
3370
+ } = await null;
3371
+ await taskListHandler(opts);
3372
+ });
3373
+ taskCmd.command("get <id>").description("Get details of a task").option("-l, --list <id>", 'Task list ID (defaults to "tasklist")').action(async (id, opts) => {
3374
+ const {
3375
+ taskGetHandler
3376
+ } = await null;
3377
+ await taskGetHandler(id, opts);
3378
+ });
3379
+ taskCmd.command("update <id>").description("Update a task").option("-l, --list <id>", 'Task list ID (defaults to "tasklist")').option("-s, --status <status>", `Set status (${TASK_STATUSES.join(", ")})`).option("--subject <text>", "Update subject").option("-d, --description <text>", "Update description").option("--owner <agentId>", "Set owner").option("--clear-owner", "Clear owner").action(async (id, opts) => {
3380
+ const {
3381
+ taskUpdateHandler
3382
+ } = await null;
3383
+ await taskUpdateHandler(id, opts);
3384
+ });
3385
+ taskCmd.command("dir").description("Show the tasks directory path").option("-l, --list <id>", 'Task list ID (defaults to "tasklist")').action(async (opts) => {
3386
+ const {
3387
+ taskDirHandler
3388
+ } = await null;
3389
+ await taskDirHandler(opts);
3390
+ });
3391
+ }
3392
+ program.command("completion <shell>", {
3393
+ hidden: true
3394
+ }).description("Generate shell completion script (bash, zsh, or fish)").option("--output <file>", "Write completion script directly to a file instead of stdout").action(async (shell, opts) => {
3395
+ const {
3396
+ completionHandler
3397
+ } = await null;
3398
+ await completionHandler(shell, opts, program);
3399
+ });
3400
+ }
3401
+ program.command("completion <shell>").description("Generate shell completion script (bash, zsh, or fish)").option("--output <file>", "Write completion script directly to a file instead of stdout").action(async (shell, opts) => {
3402
+ const commands = program.commands.map((command) => command.name()).sort().join(" ");
3403
+ let script;
3404
+ switch (shell) {
3405
+ case "bash":
3406
+ script = `# bash completion for memcode
3407
+ _memcode_completions() {
3408
+ local cur
3409
+ cur="\${COMP_WORDS[COMP_CWORD]}"
3410
+ if [[ \${COMP_CWORD} -eq 1 ]]; then
3411
+ COMPREPLY=( $(compgen -W "${commands}" -- "$cur") )
3412
+ fi
3413
+ }
3414
+ complete -F _memcode_completions memcode
3415
+ `;
3416
+ break;
3417
+ case "zsh":
3418
+ script = `#compdef memcode
3419
+ _memcode() {
3420
+ local -a commands
3421
+ commands=(${commands})
3422
+ _describe 'command' commands
3423
+ }
3424
+ compdef _memcode memcode
3425
+ `;
3426
+ break;
3427
+ case "fish":
3428
+ script = `# fish completion for memcode
3429
+ complete -c memcode -f -a "${commands}"
3430
+ `;
3431
+ break;
3432
+ default:
3433
+ process.stderr.write("Unsupported shell. Expected one of: bash, zsh, fish\n");
3434
+ process.exit(1);
3435
+ }
3436
+ if (opts.output) {
3437
+ writeFileSync(opts.output, script);
3438
+ } else {
3439
+ process.stdout.write(script);
3440
+ }
3441
+ process.exit(0);
3442
+ });
3443
+ profileCheckpoint("run_before_parse");
3444
+ await program.parseAsync(process.argv);
3445
+ profileCheckpoint("run_after_parse");
3446
+ profileCheckpoint("main_after_run");
3447
+ profileReport();
3448
+ return program;
3449
+ }
3450
+ async function logTenguInit({
3451
+ hasInitialPrompt,
3452
+ hasStdin,
3453
+ verbose,
3454
+ debug,
3455
+ debugToStderr,
3456
+ print,
3457
+ outputFormat,
3458
+ inputFormat,
3459
+ numAllowedTools,
3460
+ numDisallowedTools,
3461
+ mcpClientCount,
3462
+ worktreeEnabled,
3463
+ skipWebFetchPreflight,
3464
+ githubActionInputs,
3465
+ dangerouslySkipPermissionsPassed,
3466
+ permissionMode,
3467
+ modeIsBypass,
3468
+ allowDangerouslySkipPermissionsPassed,
3469
+ systemPromptFlag,
3470
+ appendSystemPromptFlag,
3471
+ thinkingConfig,
3472
+ assistantActivationPath
3473
+ }) {
3474
+ try {
3475
+ logEvent("tengu_init", {
3476
+ entrypoint: "claude",
3477
+ hasInitialPrompt,
3478
+ hasStdin,
3479
+ verbose,
3480
+ debug,
3481
+ debugToStderr,
3482
+ print,
3483
+ outputFormat,
3484
+ inputFormat,
3485
+ numAllowedTools,
3486
+ numDisallowedTools,
3487
+ mcpClientCount,
3488
+ worktree: worktreeEnabled,
3489
+ skipWebFetchPreflight,
3490
+ ...githubActionInputs && {
3491
+ githubActionInputs
3492
+ },
3493
+ dangerouslySkipPermissionsPassed,
3494
+ permissionMode,
3495
+ modeIsBypass,
3496
+ inProtectedNamespace: isInProtectedNamespace(),
3497
+ allowDangerouslySkipPermissionsPassed,
3498
+ thinkingType: thinkingConfig.type,
3499
+ ...systemPromptFlag && {
3500
+ systemPromptFlag
3501
+ },
3502
+ ...appendSystemPromptFlag && {
3503
+ appendSystemPromptFlag
3504
+ },
3505
+ is_simple: isBareMode() || void 0,
3506
+ is_coordinator: feature("COORDINATOR_MODE") && coordinatorModeModule?.isCoordinatorMode() ? true : void 0,
3507
+ ...assistantActivationPath && {
3508
+ assistantActivationPath
3509
+ },
3510
+ autoUpdatesChannel: getInitialSettings().autoUpdatesChannel ?? "latest",
3511
+ ...false ? (() => {
3512
+ const cwd = getCwd();
3513
+ const gitRoot = findGitRoot(cwd);
3514
+ const rp = gitRoot ? relative(gitRoot, cwd) || "." : void 0;
3515
+ return rp ? {
3516
+ relativeProjectPath: rp
3517
+ } : {};
3518
+ })() : {}
3519
+ });
3520
+ } catch (error) {
3521
+ logError(error);
3522
+ }
3523
+ }
3524
+ function maybeActivateProactive(options) {
3525
+ if ((feature("PROACTIVE") || feature("KAIROS")) && (options.proactive || isEnvTruthy(process.env.XCODE_PROACTIVE))) {
3526
+ const proactiveModule = require("./proactive/index.js");
3527
+ if (!proactiveModule.isProactiveActive()) {
3528
+ proactiveModule.activateProactive("command");
3529
+ }
3530
+ }
3531
+ }
3532
+ function maybeActivateBrief(options) {
3533
+ if (!(feature("KAIROS") || feature("KAIROS_BRIEF"))) return;
3534
+ const briefFlag = options.brief;
3535
+ const briefEnv = isEnvTruthy(process.env.XCODE_BRIEF);
3536
+ if (!briefFlag && !briefEnv) return;
3537
+ const {
3538
+ isBriefEntitled
3539
+ } = require("./tools/BriefTool/BriefTool.js");
3540
+ const entitled = isBriefEntitled();
3541
+ if (entitled) {
3542
+ setUserMsgOptIn(true);
3543
+ }
3544
+ logEvent("tengu_brief_mode_enabled", {
3545
+ enabled: entitled,
3546
+ gated: !entitled,
3547
+ source: briefEnv ? "env" : "flag"
3548
+ });
3549
+ }
3550
+ function resetCursor() {
3551
+ const terminal = process.stderr.isTTY ? process.stderr : process.stdout.isTTY ? process.stdout : void 0;
3552
+ terminal?.write(SHOW_CURSOR);
3553
+ }
3554
+ function extractTeammateOptions(options) {
3555
+ if (typeof options !== "object" || options === null) {
3556
+ return {};
3557
+ }
3558
+ const opts = options;
3559
+ const teammateMode = opts.teammateMode;
3560
+ return {
3561
+ agentId: typeof opts.agentId === "string" ? opts.agentId : void 0,
3562
+ agentName: typeof opts.agentName === "string" ? opts.agentName : void 0,
3563
+ teamName: typeof opts.teamName === "string" ? opts.teamName : void 0,
3564
+ agentColor: typeof opts.agentColor === "string" ? opts.agentColor : void 0,
3565
+ planModeRequired: typeof opts.planModeRequired === "boolean" ? opts.planModeRequired : void 0,
3566
+ parentSessionId: typeof opts.parentSessionId === "string" ? opts.parentSessionId : void 0,
3567
+ teammateMode: teammateMode === "auto" || teammateMode === "tmux" || teammateMode === "in-process" ? teammateMode : void 0,
3568
+ agentType: typeof opts.agentType === "string" ? opts.agentType : void 0
3569
+ };
3570
+ }
3571
+ export {
3572
+ main,
3573
+ startDeferredPrefetches
3574
+ };