@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
@@ -0,0 +1,3157 @@
1
+ import { feature } from "bun:bundle";
2
+ import { closeSync, fstatSync, openSync, readSync } from "fs";
3
+ import {
4
+ appendFile as fsAppendFile,
5
+ open as fsOpen,
6
+ mkdir,
7
+ readdir,
8
+ readFile,
9
+ stat,
10
+ unlink,
11
+ writeFile
12
+ } from "fs/promises";
13
+ import memoize from "lodash-es/memoize.js";
14
+ import { basename, dirname, join } from "path";
15
+ import {
16
+ logEvent
17
+ } from "src/services/analytics/index.js";
18
+ import {
19
+ getOriginalCwd,
20
+ getPlanSlugCache,
21
+ getPromptId,
22
+ getSessionId,
23
+ getSessionProjectDir,
24
+ isSessionPersistenceDisabled,
25
+ switchSession
26
+ } from "../bootstrap/state.js";
27
+ import { builtInCommandNames } from "../commands.js";
28
+ import { COMMAND_NAME_TAG, TICK_TAG } from "../constants/xml.js";
29
+ import { getFeatureValue_CACHED_MAY_BE_STALE } from "../services/analytics/growthbook.js";
30
+ import * as sessionIngress from "../services/api/sessionIngress.js";
31
+ import { REPL_TOOL_NAME } from "../tools/REPLTool/constants.js";
32
+ import {
33
+ asAgentId,
34
+ asSessionId
35
+ } from "../types/ids.js";
36
+ import {
37
+ sortLogs
38
+ } from "../types/logs.js";
39
+ import { uniq } from "./array.js";
40
+ import { registerCleanup } from "./cleanupRegistry.js";
41
+ import { updateSessionName } from "./concurrentSessions.js";
42
+ import { getCwd } from "./cwd.js";
43
+ import { logForDebugging } from "./debug.js";
44
+ import { logForDiagnosticsNoPII } from "./diagLogs.js";
45
+ import { getClaudeConfigHomeDir, isEnvTruthy } from "./envUtils.js";
46
+ import { isFsInaccessible } from "./errors.js";
47
+ import { formatFileSize } from "./format.js";
48
+ import { getFsImplementation } from "./fsOperations.js";
49
+ import { getWorktreePaths } from "./getWorktreePaths.js";
50
+ import { getBranch } from "./git.js";
51
+ import { gracefulShutdownSync, isShuttingDown } from "./gracefulShutdown.js";
52
+ import { parseJSONL } from "./json.js";
53
+ import { logError } from "./log.js";
54
+ import { extractTag, isCompactBoundaryMessage } from "./messages.js";
55
+ import { sanitizePath } from "./path.js";
56
+ import {
57
+ extractJsonStringField,
58
+ extractLastJsonStringField,
59
+ LITE_READ_BUF_SIZE,
60
+ readHeadAndTail,
61
+ readTranscriptForLoad,
62
+ SKIP_PRECOMPACT_THRESHOLD
63
+ } from "./sessionStoragePortable.js";
64
+ import { getSettings_DEPRECATED } from "./settings/settings.js";
65
+ import { jsonParse, jsonStringify } from "./slowOperations.js";
66
+ import { validateUuid } from "./uuid.js";
67
+ const VERSION = typeof MACRO !== "undefined" ? MACRO.VERSION : "unknown";
68
+ const MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
69
+ const SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
70
+ function isTranscriptMessage(entry) {
71
+ return entry.type === "user" || entry.type === "assistant" || entry.type === "attachment" || entry.type === "system";
72
+ }
73
+ function isChainParticipant(m) {
74
+ return m.type !== "progress";
75
+ }
76
+ function isLegacyProgressEntry(entry) {
77
+ return typeof entry === "object" && entry !== null && "type" in entry && entry.type === "progress" && "uuid" in entry && typeof entry.uuid === "string";
78
+ }
79
+ const EPHEMERAL_PROGRESS_TYPES = /* @__PURE__ */ new Set([
80
+ "bash_progress",
81
+ "powershell_progress",
82
+ "mcp_progress",
83
+ ...feature("PROACTIVE") || feature("KAIROS") ? ["sleep_progress"] : []
84
+ ]);
85
+ function isEphemeralToolProgress(dataType) {
86
+ return typeof dataType === "string" && EPHEMERAL_PROGRESS_TYPES.has(dataType);
87
+ }
88
+ function getProjectsDir() {
89
+ return join(getClaudeConfigHomeDir(), "projects");
90
+ }
91
+ function getTranscriptPath() {
92
+ const projectDir = getSessionProjectDir() ?? getProjectDir(getOriginalCwd());
93
+ return join(projectDir, `${getSessionId()}.jsonl`);
94
+ }
95
+ function getTranscriptPathForSession(sessionId) {
96
+ if (sessionId === getSessionId()) {
97
+ return getTranscriptPath();
98
+ }
99
+ const projectDir = getProjectDir(getOriginalCwd());
100
+ return join(projectDir, `${sessionId}.jsonl`);
101
+ }
102
+ const MAX_TRANSCRIPT_READ_BYTES = 50 * 1024 * 1024;
103
+ const agentTranscriptSubdirs = /* @__PURE__ */ new Map();
104
+ function setAgentTranscriptSubdir(agentId, subdir) {
105
+ agentTranscriptSubdirs.set(agentId, subdir);
106
+ }
107
+ function clearAgentTranscriptSubdir(agentId) {
108
+ agentTranscriptSubdirs.delete(agentId);
109
+ }
110
+ function getAgentTranscriptPath(agentId) {
111
+ const projectDir = getSessionProjectDir() ?? getProjectDir(getOriginalCwd());
112
+ const sessionId = getSessionId();
113
+ const subdir = agentTranscriptSubdirs.get(agentId);
114
+ const base = subdir ? join(projectDir, sessionId, "subagents", subdir) : join(projectDir, sessionId, "subagents");
115
+ return join(base, `agent-${agentId}.jsonl`);
116
+ }
117
+ function getAgentMetadataPath(agentId) {
118
+ return getAgentTranscriptPath(agentId).replace(/\.jsonl$/, ".meta.json");
119
+ }
120
+ async function writeAgentMetadata(agentId, metadata) {
121
+ const path = getAgentMetadataPath(agentId);
122
+ await mkdir(dirname(path), { recursive: true });
123
+ await writeFile(path, JSON.stringify(metadata));
124
+ }
125
+ async function readAgentMetadata(agentId) {
126
+ const path = getAgentMetadataPath(agentId);
127
+ try {
128
+ const raw = await readFile(path, "utf-8");
129
+ return JSON.parse(raw);
130
+ } catch (e) {
131
+ if (isFsInaccessible(e)) return null;
132
+ throw e;
133
+ }
134
+ }
135
+ function getRemoteAgentsDir() {
136
+ const projectDir = getSessionProjectDir() ?? getProjectDir(getOriginalCwd());
137
+ return join(projectDir, getSessionId(), "remote-agents");
138
+ }
139
+ function getRemoteAgentMetadataPath(taskId) {
140
+ return join(getRemoteAgentsDir(), `remote-agent-${taskId}.meta.json`);
141
+ }
142
+ async function writeRemoteAgentMetadata(taskId, metadata) {
143
+ const path = getRemoteAgentMetadataPath(taskId);
144
+ await mkdir(dirname(path), { recursive: true });
145
+ await writeFile(path, JSON.stringify(metadata));
146
+ }
147
+ async function readRemoteAgentMetadata(taskId) {
148
+ const path = getRemoteAgentMetadataPath(taskId);
149
+ try {
150
+ const raw = await readFile(path, "utf-8");
151
+ return JSON.parse(raw);
152
+ } catch (e) {
153
+ if (isFsInaccessible(e)) return null;
154
+ throw e;
155
+ }
156
+ }
157
+ async function deleteRemoteAgentMetadata(taskId) {
158
+ const path = getRemoteAgentMetadataPath(taskId);
159
+ try {
160
+ await unlink(path);
161
+ } catch (e) {
162
+ if (isFsInaccessible(e)) return;
163
+ throw e;
164
+ }
165
+ }
166
+ async function listRemoteAgentMetadata() {
167
+ const dir = getRemoteAgentsDir();
168
+ let entries;
169
+ try {
170
+ entries = await readdir(dir, { withFileTypes: true });
171
+ } catch (e) {
172
+ if (isFsInaccessible(e)) return [];
173
+ throw e;
174
+ }
175
+ const results = [];
176
+ for (const entry of entries) {
177
+ if (!entry.isFile() || !entry.name.endsWith(".meta.json")) continue;
178
+ try {
179
+ const raw = await readFile(join(dir, entry.name), "utf-8");
180
+ results.push(JSON.parse(raw));
181
+ } catch (e) {
182
+ logForDebugging(
183
+ `listRemoteAgentMetadata: skipping ${entry.name}: ${String(e)}`
184
+ );
185
+ }
186
+ }
187
+ return results;
188
+ }
189
+ function sessionIdExists(sessionId) {
190
+ const projectDir = getProjectDir(getOriginalCwd());
191
+ const sessionFile = join(projectDir, `${sessionId}.jsonl`);
192
+ const fs = getFsImplementation();
193
+ try {
194
+ fs.statSync(sessionFile);
195
+ return true;
196
+ } catch {
197
+ return false;
198
+ }
199
+ }
200
+ function getNodeEnv() {
201
+ return process.env.NODE_ENV || "development";
202
+ }
203
+ function getUserType() {
204
+ return process.env.USER_TYPE || "external";
205
+ }
206
+ function getEntrypoint() {
207
+ return process.env.XCODE_ENTRYPOINT;
208
+ }
209
+ function isCustomTitleEnabled() {
210
+ return true;
211
+ }
212
+ const getProjectDir = memoize((projectDir) => {
213
+ return join(getProjectsDir(), sanitizePath(projectDir));
214
+ });
215
+ let project = null;
216
+ let cleanupRegistered = false;
217
+ function getProject() {
218
+ if (!project) {
219
+ project = new Project();
220
+ if (!cleanupRegistered) {
221
+ registerCleanup(async () => {
222
+ await project?.flush();
223
+ try {
224
+ project?.reAppendSessionMetadata();
225
+ } catch {
226
+ }
227
+ });
228
+ cleanupRegistered = true;
229
+ }
230
+ }
231
+ return project;
232
+ }
233
+ function resetProjectFlushStateForTesting() {
234
+ project?._resetFlushState();
235
+ }
236
+ function resetProjectForTesting() {
237
+ project = null;
238
+ }
239
+ function setSessionFileForTesting(path) {
240
+ getProject().sessionFile = path;
241
+ }
242
+ function setInternalEventWriter(writer) {
243
+ getProject().setInternalEventWriter(writer);
244
+ }
245
+ function setInternalEventReader(reader, subagentReader) {
246
+ getProject().setInternalEventReader(reader);
247
+ getProject().setInternalSubagentEventReader(subagentReader);
248
+ }
249
+ function setRemoteIngressUrlForTesting(url) {
250
+ getProject().setRemoteIngressUrl(url);
251
+ }
252
+ const REMOTE_FLUSH_INTERVAL_MS = 10;
253
+ class Project {
254
+ // Minimal cache for current session only (not all sessions)
255
+ currentSessionTag;
256
+ currentSessionTitle;
257
+ currentSessionAgentName;
258
+ currentSessionAgentColor;
259
+ currentSessionLastPrompt;
260
+ currentSessionAgentSetting;
261
+ currentSessionMode;
262
+ // Tri-state: undefined = never touched (don't write), null = exited worktree,
263
+ // object = currently in worktree. reAppendSessionMetadata writes null so
264
+ // --resume knows the session exited (vs. crashed while inside).
265
+ currentSessionWorktree;
266
+ currentSessionPrNumber;
267
+ currentSessionPrUrl;
268
+ currentSessionPrRepository;
269
+ sessionFile = null;
270
+ // Entries buffered while sessionFile is null. Flushed by materializeSessionFile
271
+ // on the first user/assistant message — prevents metadata-only session files.
272
+ pendingEntries = [];
273
+ remoteIngressUrl = null;
274
+ internalEventWriter = null;
275
+ internalEventReader = null;
276
+ internalSubagentEventReader = null;
277
+ pendingWriteCount = 0;
278
+ flushResolvers = [];
279
+ // Per-file write queues. Each entry carries a resolve callback so
280
+ // callers of enqueueWrite can optionally await their specific write.
281
+ writeQueues = /* @__PURE__ */ new Map();
282
+ flushTimer = null;
283
+ activeDrain = null;
284
+ FLUSH_INTERVAL_MS = 100;
285
+ MAX_CHUNK_BYTES = 100 * 1024 * 1024;
286
+ constructor() {
287
+ }
288
+ /** @internal Reset flush/queue state for testing. */
289
+ _resetFlushState() {
290
+ this.pendingWriteCount = 0;
291
+ this.flushResolvers = [];
292
+ if (this.flushTimer) clearTimeout(this.flushTimer);
293
+ this.flushTimer = null;
294
+ this.activeDrain = null;
295
+ this.writeQueues = /* @__PURE__ */ new Map();
296
+ }
297
+ incrementPendingWrites() {
298
+ this.pendingWriteCount++;
299
+ }
300
+ decrementPendingWrites() {
301
+ this.pendingWriteCount--;
302
+ if (this.pendingWriteCount === 0) {
303
+ for (const resolve of this.flushResolvers) {
304
+ resolve();
305
+ }
306
+ this.flushResolvers = [];
307
+ }
308
+ }
309
+ async trackWrite(fn) {
310
+ this.incrementPendingWrites();
311
+ try {
312
+ return await fn();
313
+ } finally {
314
+ this.decrementPendingWrites();
315
+ }
316
+ }
317
+ enqueueWrite(filePath, entry) {
318
+ return new Promise((resolve) => {
319
+ let queue = this.writeQueues.get(filePath);
320
+ if (!queue) {
321
+ queue = [];
322
+ this.writeQueues.set(filePath, queue);
323
+ }
324
+ queue.push({ entry, resolve });
325
+ this.scheduleDrain();
326
+ });
327
+ }
328
+ scheduleDrain() {
329
+ if (this.flushTimer) {
330
+ return;
331
+ }
332
+ this.flushTimer = setTimeout(async () => {
333
+ this.flushTimer = null;
334
+ this.activeDrain = this.drainWriteQueue();
335
+ await this.activeDrain;
336
+ this.activeDrain = null;
337
+ if (this.writeQueues.size > 0) {
338
+ this.scheduleDrain();
339
+ }
340
+ }, this.FLUSH_INTERVAL_MS);
341
+ }
342
+ async appendToFile(filePath, data) {
343
+ try {
344
+ await fsAppendFile(filePath, data, { mode: 384 });
345
+ } catch {
346
+ await mkdir(dirname(filePath), { recursive: true, mode: 448 });
347
+ await fsAppendFile(filePath, data, { mode: 384 });
348
+ }
349
+ }
350
+ async drainWriteQueue() {
351
+ for (const [filePath, queue] of this.writeQueues) {
352
+ if (queue.length === 0) {
353
+ continue;
354
+ }
355
+ const batch = queue.splice(0);
356
+ let content = "";
357
+ const resolvers = [];
358
+ for (const { entry, resolve } of batch) {
359
+ const line = jsonStringify(entry) + "\n";
360
+ if (content.length + line.length >= this.MAX_CHUNK_BYTES) {
361
+ await this.appendToFile(filePath, content);
362
+ for (const r of resolvers) {
363
+ r();
364
+ }
365
+ resolvers.length = 0;
366
+ content = "";
367
+ }
368
+ content += line;
369
+ resolvers.push(resolve);
370
+ }
371
+ if (content.length > 0) {
372
+ await this.appendToFile(filePath, content);
373
+ for (const r of resolvers) {
374
+ r();
375
+ }
376
+ }
377
+ }
378
+ for (const [filePath, queue] of this.writeQueues) {
379
+ if (queue.length === 0) {
380
+ this.writeQueues.delete(filePath);
381
+ }
382
+ }
383
+ }
384
+ resetSessionFile() {
385
+ this.sessionFile = null;
386
+ this.pendingEntries = [];
387
+ }
388
+ /**
389
+ * Re-append cached session metadata to the end of the transcript file.
390
+ * This ensures metadata stays within the tail window that readLiteMetadata
391
+ * reads during progressive loading.
392
+ *
393
+ * Called from two contexts with different file-ordering implications:
394
+ * - During compaction (compact.ts, reactiveCompact.ts): writes metadata
395
+ * just before the boundary marker is emitted - these entries end up
396
+ * before the boundary and are recovered by scanPreBoundaryMetadata.
397
+ * - On session exit (cleanup handler): writes metadata at EOF after all
398
+ * boundaries - this is what enables loadTranscriptFile's pre-compact
399
+ * skip to find metadata without a forward scan.
400
+ *
401
+ * External-writer safety for SDK-mutable fields (custom-title, tag):
402
+ * before re-appending, refresh the cache from the tail scan window. If an
403
+ * external process (SDK renameSession/tagSession) wrote a fresher value,
404
+ * our stale cache absorbs it and the re-append below persists it — not
405
+ * the stale CLI value. If no entry is in the tail (evicted, or never
406
+ * written by the SDK), the cache is the only source of truth and is
407
+ * re-appended as-is.
408
+ *
409
+ * Re-append is unconditional (even when the value is already in the
410
+ * tail): during compaction, a title 40KB from EOF is inside the current
411
+ * tail window but will fall out once the post-compaction session grows.
412
+ * Skipping the re-append would defeat the purpose of this call. Fields
413
+ * the SDK cannot touch (last-prompt, agent-*, mode, pr-link) have no
414
+ * external-writer concern — their caches are authoritative.
415
+ */
416
+ reAppendSessionMetadata(skipTitleRefresh = false) {
417
+ if (!this.sessionFile) return;
418
+ const sessionId = getSessionId();
419
+ if (!sessionId) return;
420
+ const tail = readFileTailSync(this.sessionFile);
421
+ const tailLines = tail.split("\n");
422
+ if (!skipTitleRefresh) {
423
+ const titleLine = tailLines.findLast(
424
+ (l) => l.startsWith('{"type":"custom-title"')
425
+ );
426
+ if (titleLine) {
427
+ const tailTitle = extractLastJsonStringField(titleLine, "customTitle");
428
+ if (tailTitle !== void 0) {
429
+ this.currentSessionTitle = tailTitle || void 0;
430
+ }
431
+ }
432
+ }
433
+ const tagLine = tailLines.findLast((l) => l.startsWith('{"type":"tag"'));
434
+ if (tagLine) {
435
+ const tailTag = extractLastJsonStringField(tagLine, "tag");
436
+ if (tailTag !== void 0) {
437
+ this.currentSessionTag = tailTag || void 0;
438
+ }
439
+ }
440
+ if (this.currentSessionLastPrompt) {
441
+ appendEntryToFile(this.sessionFile, {
442
+ type: "last-prompt",
443
+ lastPrompt: this.currentSessionLastPrompt,
444
+ sessionId
445
+ });
446
+ }
447
+ if (this.currentSessionTitle) {
448
+ appendEntryToFile(this.sessionFile, {
449
+ type: "custom-title",
450
+ customTitle: this.currentSessionTitle,
451
+ sessionId
452
+ });
453
+ }
454
+ if (this.currentSessionTag) {
455
+ appendEntryToFile(this.sessionFile, {
456
+ type: "tag",
457
+ tag: this.currentSessionTag,
458
+ sessionId
459
+ });
460
+ }
461
+ if (this.currentSessionAgentName) {
462
+ appendEntryToFile(this.sessionFile, {
463
+ type: "agent-name",
464
+ agentName: this.currentSessionAgentName,
465
+ sessionId
466
+ });
467
+ }
468
+ if (this.currentSessionAgentColor) {
469
+ appendEntryToFile(this.sessionFile, {
470
+ type: "agent-color",
471
+ agentColor: this.currentSessionAgentColor,
472
+ sessionId
473
+ });
474
+ }
475
+ if (this.currentSessionAgentSetting) {
476
+ appendEntryToFile(this.sessionFile, {
477
+ type: "agent-setting",
478
+ agentSetting: this.currentSessionAgentSetting,
479
+ sessionId
480
+ });
481
+ }
482
+ if (this.currentSessionMode) {
483
+ appendEntryToFile(this.sessionFile, {
484
+ type: "mode",
485
+ mode: this.currentSessionMode,
486
+ sessionId
487
+ });
488
+ }
489
+ if (this.currentSessionWorktree !== void 0) {
490
+ appendEntryToFile(this.sessionFile, {
491
+ type: "worktree-state",
492
+ worktreeSession: this.currentSessionWorktree,
493
+ sessionId
494
+ });
495
+ }
496
+ if (this.currentSessionPrNumber !== void 0 && this.currentSessionPrUrl && this.currentSessionPrRepository) {
497
+ appendEntryToFile(this.sessionFile, {
498
+ type: "pr-link",
499
+ sessionId,
500
+ prNumber: this.currentSessionPrNumber,
501
+ prUrl: this.currentSessionPrUrl,
502
+ prRepository: this.currentSessionPrRepository,
503
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
504
+ });
505
+ }
506
+ }
507
+ async flush() {
508
+ if (this.flushTimer) {
509
+ clearTimeout(this.flushTimer);
510
+ this.flushTimer = null;
511
+ }
512
+ if (this.activeDrain) {
513
+ await this.activeDrain;
514
+ }
515
+ await this.drainWriteQueue();
516
+ if (this.pendingWriteCount === 0) {
517
+ return;
518
+ }
519
+ return new Promise((resolve) => {
520
+ this.flushResolvers.push(resolve);
521
+ });
522
+ }
523
+ /**
524
+ * Remove a message from the transcript by UUID.
525
+ * Used for tombstoning orphaned messages from failed streaming attempts.
526
+ *
527
+ * The target is almost always the most recently appended entry, so we
528
+ * read only the tail, locate the line, and splice it out with a
529
+ * positional write + truncate instead of rewriting the whole file.
530
+ */
531
+ async removeMessageByUuid(targetUuid) {
532
+ return this.trackWrite(async () => {
533
+ if (this.sessionFile === null) return;
534
+ try {
535
+ let fileSize = 0;
536
+ const fh = await fsOpen(this.sessionFile, "r+");
537
+ try {
538
+ const { size } = await fh.stat();
539
+ fileSize = size;
540
+ if (size === 0) return;
541
+ const chunkLen = Math.min(size, LITE_READ_BUF_SIZE);
542
+ const tailStart = size - chunkLen;
543
+ const buf = Buffer.allocUnsafe(chunkLen);
544
+ const { bytesRead } = await fh.read(buf, 0, chunkLen, tailStart);
545
+ const tail = buf.subarray(0, bytesRead);
546
+ const needle = `"uuid":"${targetUuid}"`;
547
+ const matchIdx = tail.lastIndexOf(needle);
548
+ if (matchIdx >= 0) {
549
+ const prevNl = tail.lastIndexOf(10, matchIdx);
550
+ if (prevNl >= 0 || tailStart === 0) {
551
+ const lineStart = prevNl + 1;
552
+ const nextNl = tail.indexOf(10, matchIdx + needle.length);
553
+ const lineEnd = nextNl >= 0 ? nextNl + 1 : bytesRead;
554
+ const absLineStart = tailStart + lineStart;
555
+ const afterLen = bytesRead - lineEnd;
556
+ await fh.truncate(absLineStart);
557
+ if (afterLen > 0) {
558
+ await fh.write(tail, lineEnd, afterLen, absLineStart);
559
+ }
560
+ return;
561
+ }
562
+ }
563
+ } finally {
564
+ await fh.close();
565
+ }
566
+ if (fileSize > MAX_TOMBSTONE_REWRITE_BYTES) {
567
+ logForDebugging(
568
+ `Skipping tombstone removal: session file too large (${formatFileSize(fileSize)})`,
569
+ { level: "warn" }
570
+ );
571
+ return;
572
+ }
573
+ const content = await readFile(this.sessionFile, { encoding: "utf-8" });
574
+ const lines = content.split("\n").filter((line) => {
575
+ if (!line.trim()) return true;
576
+ try {
577
+ const entry = jsonParse(line);
578
+ return entry.uuid !== targetUuid;
579
+ } catch {
580
+ return true;
581
+ }
582
+ });
583
+ await writeFile(this.sessionFile, lines.join("\n"), {
584
+ encoding: "utf8"
585
+ });
586
+ } catch {
587
+ }
588
+ });
589
+ }
590
+ /**
591
+ * True when test env / cleanupPeriodDays=0 / --no-session-persistence /
592
+ * XCODE_SKIP_PROMPT_HISTORY should suppress all transcript writes.
593
+ * Shared guard for appendEntry and materializeSessionFile so both skip
594
+ * consistently. The env var is set by tmuxSocket.ts so Tungsten-spawned
595
+ * test sessions don't pollute the user's --resume list.
596
+ */
597
+ shouldSkipPersistence() {
598
+ const allowTestPersistence = isEnvTruthy(
599
+ process.env.TEST_ENABLE_SESSION_PERSISTENCE
600
+ );
601
+ return getNodeEnv() === "test" && !allowTestPersistence || getSettings_DEPRECATED()?.cleanupPeriodDays === 0 || isSessionPersistenceDisabled() || isEnvTruthy(process.env.XCODE_SKIP_PROMPT_HISTORY);
602
+ }
603
+ /**
604
+ * Create the session file, write cached startup metadata, and flush
605
+ * buffered entries. Called on the first user/assistant message.
606
+ */
607
+ async materializeSessionFile() {
608
+ if (this.shouldSkipPersistence()) return;
609
+ this.ensureCurrentSessionFile();
610
+ this.reAppendSessionMetadata();
611
+ if (this.pendingEntries.length > 0) {
612
+ const buffered = this.pendingEntries;
613
+ this.pendingEntries = [];
614
+ for (const entry of buffered) {
615
+ await this.appendEntry(entry);
616
+ }
617
+ }
618
+ }
619
+ async insertMessageChain(messages, isSidechain = false, agentId, startingParentUuid, teamInfo) {
620
+ return this.trackWrite(async () => {
621
+ let parentUuid = startingParentUuid ?? null;
622
+ if (this.sessionFile === null && messages.some((m) => m.type === "user" || m.type === "assistant")) {
623
+ await this.materializeSessionFile();
624
+ }
625
+ let gitBranch;
626
+ try {
627
+ gitBranch = await getBranch();
628
+ } catch {
629
+ gitBranch = void 0;
630
+ }
631
+ const sessionId = getSessionId();
632
+ const slug = getPlanSlugCache().get(sessionId);
633
+ for (const message of messages) {
634
+ const isCompactBoundary = isCompactBoundaryMessage(message);
635
+ let effectiveParentUuid = parentUuid;
636
+ if (message.type === "user" && "sourceToolAssistantUUID" in message && message.sourceToolAssistantUUID) {
637
+ effectiveParentUuid = message.sourceToolAssistantUUID;
638
+ }
639
+ const transcriptMessage = {
640
+ parentUuid: isCompactBoundary ? null : effectiveParentUuid,
641
+ logicalParentUuid: isCompactBoundary ? parentUuid : void 0,
642
+ isSidechain,
643
+ teamName: teamInfo?.teamName,
644
+ agentName: teamInfo?.agentName,
645
+ promptId: message.type === "user" ? getPromptId() ?? void 0 : void 0,
646
+ agentId,
647
+ ...message,
648
+ // Session-stamp fields MUST come after the spread. On --fork-session
649
+ // and --resume, messages arrive as SerializedMessage (carries source
650
+ // sessionId/cwd/etc. because removeExtraFields only strips parentUuid
651
+ // and isSidechain). If sessionId isn't re-stamped, FRESH.jsonl ends up
652
+ // with messages stamped sessionId=A but content-replacement entries
653
+ // stamped sessionId=FRESH (from insertContentReplacement), and
654
+ // loadFullLog's sessionId-keyed contentReplacements lookup misses →
655
+ // replacement records lost → FROZEN misclassification.
656
+ userType: getUserType(),
657
+ entrypoint: getEntrypoint(),
658
+ cwd: getCwd(),
659
+ sessionId,
660
+ version: VERSION,
661
+ gitBranch,
662
+ slug
663
+ };
664
+ await this.appendEntry(transcriptMessage);
665
+ if (isChainParticipant(message)) {
666
+ parentUuid = message.uuid;
667
+ }
668
+ }
669
+ if (!isSidechain) {
670
+ const text = getFirstMeaningfulUserMessageTextContent(messages);
671
+ if (text) {
672
+ const flat = text.replace(/\n/g, " ").trim();
673
+ this.currentSessionLastPrompt = flat.length > 200 ? flat.slice(0, 200).trim() + "\u2026" : flat;
674
+ }
675
+ }
676
+ });
677
+ }
678
+ async insertFileHistorySnapshot(messageId, snapshot, isSnapshotUpdate) {
679
+ return this.trackWrite(async () => {
680
+ const fileHistoryMessage = {
681
+ type: "file-history-snapshot",
682
+ messageId,
683
+ snapshot,
684
+ isSnapshotUpdate
685
+ };
686
+ await this.appendEntry(fileHistoryMessage);
687
+ });
688
+ }
689
+ async insertQueueOperation(queueOp) {
690
+ return this.trackWrite(async () => {
691
+ await this.appendEntry(queueOp);
692
+ });
693
+ }
694
+ async insertAttributionSnapshot(snapshot) {
695
+ return this.trackWrite(async () => {
696
+ await this.appendEntry(snapshot);
697
+ });
698
+ }
699
+ async insertContentReplacement(replacements, agentId) {
700
+ return this.trackWrite(async () => {
701
+ const entry = {
702
+ type: "content-replacement",
703
+ sessionId: getSessionId(),
704
+ agentId,
705
+ replacements
706
+ };
707
+ await this.appendEntry(entry);
708
+ });
709
+ }
710
+ async appendEntry(entry, sessionId = getSessionId()) {
711
+ if (this.shouldSkipPersistence()) {
712
+ return;
713
+ }
714
+ const currentSessionId = getSessionId();
715
+ const isCurrentSession = sessionId === currentSessionId;
716
+ let sessionFile;
717
+ if (isCurrentSession) {
718
+ if (this.sessionFile === null) {
719
+ this.pendingEntries.push(entry);
720
+ return;
721
+ }
722
+ sessionFile = this.sessionFile;
723
+ } else {
724
+ const existing = await this.getExistingSessionFile(sessionId);
725
+ if (!existing) {
726
+ logError(
727
+ new Error(
728
+ `appendEntry: session file not found for other session ${sessionId}`
729
+ )
730
+ );
731
+ return;
732
+ }
733
+ sessionFile = existing;
734
+ }
735
+ if (entry.type === "summary") {
736
+ void this.enqueueWrite(sessionFile, entry);
737
+ } else if (entry.type === "custom-title") {
738
+ void this.enqueueWrite(sessionFile, entry);
739
+ } else if (entry.type === "ai-title") {
740
+ void this.enqueueWrite(sessionFile, entry);
741
+ } else if (entry.type === "last-prompt") {
742
+ void this.enqueueWrite(sessionFile, entry);
743
+ } else if (entry.type === "task-summary") {
744
+ void this.enqueueWrite(sessionFile, entry);
745
+ } else if (entry.type === "tag") {
746
+ void this.enqueueWrite(sessionFile, entry);
747
+ } else if (entry.type === "agent-name") {
748
+ void this.enqueueWrite(sessionFile, entry);
749
+ } else if (entry.type === "agent-color") {
750
+ void this.enqueueWrite(sessionFile, entry);
751
+ } else if (entry.type === "agent-setting") {
752
+ void this.enqueueWrite(sessionFile, entry);
753
+ } else if (entry.type === "pr-link") {
754
+ void this.enqueueWrite(sessionFile, entry);
755
+ } else if (entry.type === "file-history-snapshot") {
756
+ void this.enqueueWrite(sessionFile, entry);
757
+ } else if (entry.type === "attribution-snapshot") {
758
+ void this.enqueueWrite(sessionFile, entry);
759
+ } else if (entry.type === "speculation-accept") {
760
+ void this.enqueueWrite(sessionFile, entry);
761
+ } else if (entry.type === "mode") {
762
+ void this.enqueueWrite(sessionFile, entry);
763
+ } else if (entry.type === "worktree-state") {
764
+ void this.enqueueWrite(sessionFile, entry);
765
+ } else if (entry.type === "content-replacement") {
766
+ const targetFile = entry.agentId ? getAgentTranscriptPath(entry.agentId) : sessionFile;
767
+ void this.enqueueWrite(targetFile, entry);
768
+ } else if (entry.type === "marble-origami-commit") {
769
+ void this.enqueueWrite(sessionFile, entry);
770
+ } else if (entry.type === "marble-origami-snapshot") {
771
+ void this.enqueueWrite(sessionFile, entry);
772
+ } else {
773
+ const messageSet = await getSessionMessages(sessionId);
774
+ if (entry.type === "queue-operation") {
775
+ void this.enqueueWrite(sessionFile, entry);
776
+ } else {
777
+ const isAgentSidechain = entry.isSidechain && entry.agentId !== void 0;
778
+ const targetFile = isAgentSidechain ? getAgentTranscriptPath(asAgentId(entry.agentId)) : sessionFile;
779
+ const isNewUuid = !messageSet.has(entry.uuid);
780
+ if (isAgentSidechain || isNewUuid) {
781
+ void this.enqueueWrite(targetFile, entry);
782
+ if (!isAgentSidechain) {
783
+ messageSet.add(entry.uuid);
784
+ if (isTranscriptMessage(entry)) {
785
+ await this.persistToRemote(sessionId, entry);
786
+ }
787
+ }
788
+ }
789
+ }
790
+ }
791
+ }
792
+ /**
793
+ * Loads the sessionFile variable.
794
+ * Do not need to create session files until they are written to.
795
+ */
796
+ ensureCurrentSessionFile() {
797
+ if (this.sessionFile === null) {
798
+ this.sessionFile = getTranscriptPath();
799
+ }
800
+ return this.sessionFile;
801
+ }
802
+ /**
803
+ * Returns the session file path if it exists, null otherwise.
804
+ * Used for writing to sessions other than the current one.
805
+ * Caches positive results so we only stat once per session.
806
+ */
807
+ existingSessionFiles = /* @__PURE__ */ new Map();
808
+ async getExistingSessionFile(sessionId) {
809
+ const cached = this.existingSessionFiles.get(sessionId);
810
+ if (cached) return cached;
811
+ const targetFile = getTranscriptPathForSession(sessionId);
812
+ try {
813
+ await stat(targetFile);
814
+ this.existingSessionFiles.set(sessionId, targetFile);
815
+ return targetFile;
816
+ } catch (e) {
817
+ if (isFsInaccessible(e)) return null;
818
+ throw e;
819
+ }
820
+ }
821
+ async persistToRemote(sessionId, entry) {
822
+ if (isShuttingDown()) {
823
+ return;
824
+ }
825
+ if (this.internalEventWriter) {
826
+ try {
827
+ await this.internalEventWriter(
828
+ "transcript",
829
+ entry,
830
+ {
831
+ ...isCompactBoundaryMessage(entry) && { isCompaction: true },
832
+ ...entry.agentId && { agentId: entry.agentId }
833
+ }
834
+ );
835
+ } catch {
836
+ logEvent("tengu_session_persistence_failed", {});
837
+ logForDebugging("Failed to write transcript as internal event");
838
+ }
839
+ return;
840
+ }
841
+ if (!isEnvTruthy(process.env.ENABLE_SESSION_PERSISTENCE) || !this.remoteIngressUrl) {
842
+ return;
843
+ }
844
+ const success = await sessionIngress.appendSessionLog(
845
+ sessionId,
846
+ entry,
847
+ this.remoteIngressUrl
848
+ );
849
+ if (!success) {
850
+ logEvent("tengu_session_persistence_failed", {});
851
+ gracefulShutdownSync(1, "other");
852
+ }
853
+ }
854
+ setRemoteIngressUrl(url) {
855
+ this.remoteIngressUrl = url;
856
+ logForDebugging(`Remote persistence enabled with URL: ${url}`);
857
+ if (url) {
858
+ this.FLUSH_INTERVAL_MS = REMOTE_FLUSH_INTERVAL_MS;
859
+ }
860
+ }
861
+ setInternalEventWriter(writer) {
862
+ this.internalEventWriter = writer;
863
+ logForDebugging(
864
+ "CCR v2 internal event writer registered for transcript persistence"
865
+ );
866
+ this.FLUSH_INTERVAL_MS = REMOTE_FLUSH_INTERVAL_MS;
867
+ }
868
+ setInternalEventReader(reader) {
869
+ this.internalEventReader = reader;
870
+ logForDebugging(
871
+ "CCR v2 internal event reader registered for session resume"
872
+ );
873
+ }
874
+ setInternalSubagentEventReader(reader) {
875
+ this.internalSubagentEventReader = reader;
876
+ logForDebugging(
877
+ "CCR v2 subagent event reader registered for session resume"
878
+ );
879
+ }
880
+ getInternalEventReader() {
881
+ return this.internalEventReader;
882
+ }
883
+ getInternalSubagentEventReader() {
884
+ return this.internalSubagentEventReader;
885
+ }
886
+ }
887
+ async function recordTranscript(messages, teamInfo, startingParentUuidHint, allMessages) {
888
+ const cleanedMessages = cleanMessagesForLogging(messages, allMessages);
889
+ const sessionId = getSessionId();
890
+ const messageSet = await getSessionMessages(sessionId);
891
+ const newMessages = [];
892
+ let startingParentUuid = startingParentUuidHint;
893
+ let seenNewMessage = false;
894
+ for (const m of cleanedMessages) {
895
+ if (messageSet.has(m.uuid)) {
896
+ if (!seenNewMessage && isChainParticipant(m)) {
897
+ startingParentUuid = m.uuid;
898
+ }
899
+ } else {
900
+ newMessages.push(m);
901
+ seenNewMessage = true;
902
+ }
903
+ }
904
+ if (newMessages.length > 0) {
905
+ await getProject().insertMessageChain(
906
+ newMessages,
907
+ false,
908
+ void 0,
909
+ startingParentUuid,
910
+ teamInfo
911
+ );
912
+ }
913
+ const lastRecorded = newMessages.findLast(isChainParticipant);
914
+ return lastRecorded?.uuid ?? startingParentUuid ?? null;
915
+ }
916
+ async function recordSidechainTranscript(messages, agentId, startingParentUuid) {
917
+ await getProject().insertMessageChain(
918
+ cleanMessagesForLogging(messages),
919
+ true,
920
+ agentId,
921
+ startingParentUuid
922
+ );
923
+ }
924
+ async function recordQueueOperation(queueOp) {
925
+ await getProject().insertQueueOperation(queueOp);
926
+ }
927
+ async function removeTranscriptMessage(targetUuid) {
928
+ await getProject().removeMessageByUuid(targetUuid);
929
+ }
930
+ async function recordFileHistorySnapshot(messageId, snapshot, isSnapshotUpdate) {
931
+ await getProject().insertFileHistorySnapshot(
932
+ messageId,
933
+ snapshot,
934
+ isSnapshotUpdate
935
+ );
936
+ }
937
+ async function recordAttributionSnapshot(snapshot) {
938
+ await getProject().insertAttributionSnapshot(snapshot);
939
+ }
940
+ async function recordContentReplacement(replacements, agentId) {
941
+ await getProject().insertContentReplacement(replacements, agentId);
942
+ }
943
+ async function resetSessionFilePointer() {
944
+ getProject().resetSessionFile();
945
+ }
946
+ function adoptResumedSessionFile() {
947
+ const project2 = getProject();
948
+ project2.sessionFile = getTranscriptPath();
949
+ project2.reAppendSessionMetadata(true);
950
+ }
951
+ async function recordContextCollapseCommit(commit) {
952
+ const sessionId = getSessionId();
953
+ if (!sessionId) return;
954
+ await getProject().appendEntry({
955
+ type: "marble-origami-commit",
956
+ sessionId,
957
+ ...commit
958
+ });
959
+ }
960
+ async function recordContextCollapseSnapshot(snapshot) {
961
+ const sessionId = getSessionId();
962
+ if (!sessionId) return;
963
+ await getProject().appendEntry({
964
+ type: "marble-origami-snapshot",
965
+ sessionId,
966
+ ...snapshot
967
+ });
968
+ }
969
+ async function flushSessionStorage() {
970
+ await getProject().flush();
971
+ }
972
+ async function hydrateRemoteSession(sessionId, ingressUrl) {
973
+ switchSession(asSessionId(sessionId));
974
+ const project2 = getProject();
975
+ try {
976
+ const remoteLogs = await sessionIngress.getSessionLogs(sessionId, ingressUrl) || [];
977
+ const projectDir = getProjectDir(getOriginalCwd());
978
+ await mkdir(projectDir, { recursive: true, mode: 448 });
979
+ const sessionFile = getTranscriptPathForSession(sessionId);
980
+ const content = remoteLogs.map((e) => jsonStringify(e) + "\n").join("");
981
+ await writeFile(sessionFile, content, { encoding: "utf8", mode: 384 });
982
+ logForDebugging(`Hydrated ${remoteLogs.length} entries from remote`);
983
+ return remoteLogs.length > 0;
984
+ } catch (error) {
985
+ logForDebugging(`Error hydrating session from remote: ${error}`);
986
+ logForDiagnosticsNoPII("error", "hydrate_remote_session_fail");
987
+ return false;
988
+ } finally {
989
+ project2.setRemoteIngressUrl(ingressUrl);
990
+ }
991
+ }
992
+ async function hydrateFromCCRv2InternalEvents(sessionId) {
993
+ const startMs = Date.now();
994
+ switchSession(asSessionId(sessionId));
995
+ const project2 = getProject();
996
+ const reader = project2.getInternalEventReader();
997
+ if (!reader) {
998
+ logForDebugging("No internal event reader registered for CCR v2 resume");
999
+ return false;
1000
+ }
1001
+ try {
1002
+ const events = await reader();
1003
+ if (!events) {
1004
+ logForDebugging("Failed to read internal events for resume");
1005
+ logForDiagnosticsNoPII("error", "hydrate_ccr_v2_read_fail");
1006
+ return false;
1007
+ }
1008
+ const projectDir = getProjectDir(getOriginalCwd());
1009
+ await mkdir(projectDir, { recursive: true, mode: 448 });
1010
+ const sessionFile = getTranscriptPathForSession(sessionId);
1011
+ const fgContent = events.map((e) => jsonStringify(e.payload) + "\n").join("");
1012
+ await writeFile(sessionFile, fgContent, { encoding: "utf8", mode: 384 });
1013
+ logForDebugging(
1014
+ `Hydrated ${events.length} foreground entries from CCR v2 internal events`
1015
+ );
1016
+ let subagentEventCount = 0;
1017
+ const subagentReader = project2.getInternalSubagentEventReader();
1018
+ if (subagentReader) {
1019
+ const subagentEvents = await subagentReader();
1020
+ if (subagentEvents && subagentEvents.length > 0) {
1021
+ subagentEventCount = subagentEvents.length;
1022
+ const byAgent = /* @__PURE__ */ new Map();
1023
+ for (const e of subagentEvents) {
1024
+ const agentId = e.agent_id || "";
1025
+ if (!agentId) continue;
1026
+ let list = byAgent.get(agentId);
1027
+ if (!list) {
1028
+ list = [];
1029
+ byAgent.set(agentId, list);
1030
+ }
1031
+ list.push(e.payload);
1032
+ }
1033
+ for (const [agentId, entries] of byAgent) {
1034
+ const agentFile = getAgentTranscriptPath(asAgentId(agentId));
1035
+ await mkdir(dirname(agentFile), { recursive: true, mode: 448 });
1036
+ const agentContent = entries.map((p) => jsonStringify(p) + "\n").join("");
1037
+ await writeFile(agentFile, agentContent, {
1038
+ encoding: "utf8",
1039
+ mode: 384
1040
+ });
1041
+ }
1042
+ logForDebugging(
1043
+ `Hydrated ${subagentEvents.length} subagent entries across ${byAgent.size} agents`
1044
+ );
1045
+ }
1046
+ }
1047
+ logForDiagnosticsNoPII("info", "hydrate_ccr_v2_completed", {
1048
+ duration_ms: Date.now() - startMs,
1049
+ event_count: events.length,
1050
+ subagent_event_count: subagentEventCount
1051
+ });
1052
+ return events.length > 0;
1053
+ } catch (error) {
1054
+ if (error instanceof Error && error.message === "CCRClient: Epoch mismatch (409)") {
1055
+ throw error;
1056
+ }
1057
+ logForDebugging(`Error hydrating session from CCR v2: ${error}`);
1058
+ logForDiagnosticsNoPII("error", "hydrate_ccr_v2_fail");
1059
+ return false;
1060
+ }
1061
+ }
1062
+ function extractFirstPrompt(transcript) {
1063
+ const textContent = getFirstMeaningfulUserMessageTextContent(transcript);
1064
+ if (textContent) {
1065
+ let result = textContent.replace(/\n/g, " ").trim();
1066
+ if (result.length > 200) {
1067
+ result = result.slice(0, 200).trim() + "\u2026";
1068
+ }
1069
+ return result;
1070
+ }
1071
+ return "No prompt";
1072
+ }
1073
+ function getFirstMeaningfulUserMessageTextContent(transcript) {
1074
+ for (const msg of transcript) {
1075
+ if (msg.type !== "user" || msg.isMeta) continue;
1076
+ if ("isCompactSummary" in msg && msg.isCompactSummary) continue;
1077
+ const content = msg.message?.content;
1078
+ if (!content) continue;
1079
+ const texts = [];
1080
+ if (typeof content === "string") {
1081
+ texts.push(content);
1082
+ } else if (Array.isArray(content)) {
1083
+ for (const block of content) {
1084
+ if (block.type === "text" && block.text) {
1085
+ texts.push(block.text);
1086
+ }
1087
+ }
1088
+ }
1089
+ for (const textContent of texts) {
1090
+ if (!textContent) continue;
1091
+ const commandNameTag = extractTag(textContent, COMMAND_NAME_TAG);
1092
+ if (commandNameTag) {
1093
+ const commandName = commandNameTag.replace(/^\//, "");
1094
+ if (builtInCommandNames().has(commandName)) {
1095
+ continue;
1096
+ } else {
1097
+ const commandArgs = extractTag(textContent, "command-args")?.trim();
1098
+ if (!commandArgs) {
1099
+ continue;
1100
+ }
1101
+ return `${commandNameTag} ${commandArgs}`;
1102
+ }
1103
+ }
1104
+ const bashInput = extractTag(textContent, "bash-input");
1105
+ if (bashInput) {
1106
+ return `! ${bashInput}`;
1107
+ }
1108
+ if (SKIP_FIRST_PROMPT_PATTERN.test(textContent)) {
1109
+ continue;
1110
+ }
1111
+ return textContent;
1112
+ }
1113
+ }
1114
+ return void 0;
1115
+ }
1116
+ function removeExtraFields(transcript) {
1117
+ return transcript.map((m) => {
1118
+ const { isSidechain, parentUuid, ...serializedMessage } = m;
1119
+ return serializedMessage;
1120
+ });
1121
+ }
1122
+ function applyPreservedSegmentRelinks(messages) {
1123
+ let lastSeg;
1124
+ let lastSegBoundaryIdx = -1;
1125
+ let absoluteLastBoundaryIdx = -1;
1126
+ const entryIndex = /* @__PURE__ */ new Map();
1127
+ let i = 0;
1128
+ for (const entry of messages.values()) {
1129
+ entryIndex.set(entry.uuid, i);
1130
+ if (isCompactBoundaryMessage(entry)) {
1131
+ absoluteLastBoundaryIdx = i;
1132
+ const seg = entry.compactMetadata?.preservedSegment;
1133
+ if (seg) {
1134
+ lastSeg = seg;
1135
+ lastSegBoundaryIdx = i;
1136
+ }
1137
+ }
1138
+ i++;
1139
+ }
1140
+ if (!lastSeg) return;
1141
+ const segIsLive = lastSegBoundaryIdx === absoluteLastBoundaryIdx;
1142
+ const preservedUuids = /* @__PURE__ */ new Set();
1143
+ if (segIsLive) {
1144
+ const walkSeen = /* @__PURE__ */ new Set();
1145
+ let cur = messages.get(lastSeg.tailUuid);
1146
+ let reachedHead = false;
1147
+ while (cur && !walkSeen.has(cur.uuid)) {
1148
+ walkSeen.add(cur.uuid);
1149
+ preservedUuids.add(cur.uuid);
1150
+ if (cur.uuid === lastSeg.headUuid) {
1151
+ reachedHead = true;
1152
+ break;
1153
+ }
1154
+ cur = cur.parentUuid ? messages.get(cur.parentUuid) : void 0;
1155
+ }
1156
+ if (!reachedHead) {
1157
+ logEvent("tengu_relink_walk_broken", {
1158
+ tailInTranscript: messages.has(lastSeg.tailUuid),
1159
+ headInTranscript: messages.has(lastSeg.headUuid),
1160
+ anchorInTranscript: messages.has(lastSeg.anchorUuid),
1161
+ walkSteps: walkSeen.size,
1162
+ transcriptSize: messages.size
1163
+ });
1164
+ return;
1165
+ }
1166
+ }
1167
+ if (segIsLive) {
1168
+ const head = messages.get(lastSeg.headUuid);
1169
+ if (head) {
1170
+ messages.set(lastSeg.headUuid, {
1171
+ ...head,
1172
+ parentUuid: lastSeg.anchorUuid
1173
+ });
1174
+ }
1175
+ for (const [uuid, msg] of messages) {
1176
+ if (msg.parentUuid === lastSeg.anchorUuid && uuid !== lastSeg.headUuid) {
1177
+ messages.set(uuid, { ...msg, parentUuid: lastSeg.tailUuid });
1178
+ }
1179
+ }
1180
+ for (const uuid of preservedUuids) {
1181
+ const msg = messages.get(uuid);
1182
+ if (msg?.type !== "assistant") continue;
1183
+ messages.set(uuid, {
1184
+ ...msg,
1185
+ message: {
1186
+ ...msg.message,
1187
+ usage: {
1188
+ ...msg.message.usage,
1189
+ input_tokens: 0,
1190
+ output_tokens: 0,
1191
+ cache_creation_input_tokens: 0,
1192
+ cache_read_input_tokens: 0
1193
+ }
1194
+ }
1195
+ });
1196
+ }
1197
+ }
1198
+ const toDelete = [];
1199
+ for (const [uuid] of messages) {
1200
+ const idx = entryIndex.get(uuid);
1201
+ if (idx !== void 0 && idx < absoluteLastBoundaryIdx && !preservedUuids.has(uuid)) {
1202
+ toDelete.push(uuid);
1203
+ }
1204
+ }
1205
+ for (const uuid of toDelete) messages.delete(uuid);
1206
+ }
1207
+ function applySnipRemovals(messages) {
1208
+ const toDelete = /* @__PURE__ */ new Set();
1209
+ for (const entry of messages.values()) {
1210
+ const removedUuids = entry.snipMetadata?.removedUuids;
1211
+ if (!removedUuids) continue;
1212
+ for (const uuid of removedUuids) toDelete.add(uuid);
1213
+ }
1214
+ if (toDelete.size === 0) return;
1215
+ const deletedParent = /* @__PURE__ */ new Map();
1216
+ let removedCount = 0;
1217
+ for (const uuid of toDelete) {
1218
+ const entry = messages.get(uuid);
1219
+ if (!entry) continue;
1220
+ deletedParent.set(uuid, entry.parentUuid);
1221
+ messages.delete(uuid);
1222
+ removedCount++;
1223
+ }
1224
+ const resolve = (start) => {
1225
+ const path = [];
1226
+ let cur = start;
1227
+ while (cur && toDelete.has(cur)) {
1228
+ path.push(cur);
1229
+ cur = deletedParent.get(cur);
1230
+ if (cur === void 0) {
1231
+ cur = null;
1232
+ break;
1233
+ }
1234
+ }
1235
+ for (const p of path) deletedParent.set(p, cur);
1236
+ return cur;
1237
+ };
1238
+ let relinkedCount = 0;
1239
+ for (const [uuid, msg] of messages) {
1240
+ if (!msg.parentUuid || !toDelete.has(msg.parentUuid)) continue;
1241
+ messages.set(uuid, { ...msg, parentUuid: resolve(msg.parentUuid) });
1242
+ relinkedCount++;
1243
+ }
1244
+ logEvent("tengu_snip_resume_filtered", {
1245
+ removed_count: removedCount,
1246
+ relinked_count: relinkedCount
1247
+ });
1248
+ }
1249
+ function findLatestMessage(messages, predicate) {
1250
+ let latest;
1251
+ let maxTime = -Infinity;
1252
+ for (const m of messages) {
1253
+ if (!predicate(m)) continue;
1254
+ const t = Date.parse(m.timestamp);
1255
+ if (t > maxTime) {
1256
+ maxTime = t;
1257
+ latest = m;
1258
+ }
1259
+ }
1260
+ return latest;
1261
+ }
1262
+ function buildConversationChain(messages, leafMessage) {
1263
+ const transcript = [];
1264
+ const seen = /* @__PURE__ */ new Set();
1265
+ let currentMsg = leafMessage;
1266
+ while (currentMsg) {
1267
+ if (seen.has(currentMsg.uuid)) {
1268
+ logError(
1269
+ new Error(
1270
+ `Cycle detected in parentUuid chain at message ${currentMsg.uuid}. Returning partial transcript.`
1271
+ )
1272
+ );
1273
+ logEvent("tengu_chain_parent_cycle", {});
1274
+ break;
1275
+ }
1276
+ seen.add(currentMsg.uuid);
1277
+ transcript.push(currentMsg);
1278
+ currentMsg = currentMsg.parentUuid ? messages.get(currentMsg.parentUuid) : void 0;
1279
+ }
1280
+ transcript.reverse();
1281
+ return recoverOrphanedParallelToolResults(messages, transcript, seen);
1282
+ }
1283
+ function recoverOrphanedParallelToolResults(messages, chain, seen) {
1284
+ const chainAssistants = chain.filter(
1285
+ (m) => m.type === "assistant"
1286
+ );
1287
+ if (chainAssistants.length === 0) return chain;
1288
+ const anchorByMsgId = /* @__PURE__ */ new Map();
1289
+ for (const a of chainAssistants) {
1290
+ if (a.message.id) anchorByMsgId.set(a.message.id, a);
1291
+ }
1292
+ const siblingsByMsgId = /* @__PURE__ */ new Map();
1293
+ const toolResultsByAsst = /* @__PURE__ */ new Map();
1294
+ for (const m of messages.values()) {
1295
+ if (m.type === "assistant" && m.message.id) {
1296
+ const group = siblingsByMsgId.get(m.message.id);
1297
+ if (group) group.push(m);
1298
+ else siblingsByMsgId.set(m.message.id, [m]);
1299
+ } else if (m.type === "user" && m.parentUuid && Array.isArray(m.message.content) && m.message.content.some((b) => b.type === "tool_result")) {
1300
+ const group = toolResultsByAsst.get(m.parentUuid);
1301
+ if (group) group.push(m);
1302
+ else toolResultsByAsst.set(m.parentUuid, [m]);
1303
+ }
1304
+ }
1305
+ const processedGroups = /* @__PURE__ */ new Set();
1306
+ const inserts = /* @__PURE__ */ new Map();
1307
+ let recoveredCount = 0;
1308
+ for (const asst of chainAssistants) {
1309
+ const msgId = asst.message.id;
1310
+ if (!msgId || processedGroups.has(msgId)) continue;
1311
+ processedGroups.add(msgId);
1312
+ const group = siblingsByMsgId.get(msgId) ?? [asst];
1313
+ const orphanedSiblings = group.filter((s) => !seen.has(s.uuid));
1314
+ const orphanedTRs = [];
1315
+ for (const member of group) {
1316
+ const trs = toolResultsByAsst.get(member.uuid);
1317
+ if (!trs) continue;
1318
+ for (const tr of trs) {
1319
+ if (!seen.has(tr.uuid)) orphanedTRs.push(tr);
1320
+ }
1321
+ }
1322
+ if (orphanedSiblings.length === 0 && orphanedTRs.length === 0) continue;
1323
+ orphanedSiblings.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
1324
+ orphanedTRs.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
1325
+ const anchor = anchorByMsgId.get(msgId);
1326
+ const recovered = [...orphanedSiblings, ...orphanedTRs];
1327
+ for (const r of recovered) seen.add(r.uuid);
1328
+ recoveredCount += recovered.length;
1329
+ inserts.set(anchor.uuid, recovered);
1330
+ }
1331
+ if (recoveredCount === 0) return chain;
1332
+ logEvent("tengu_chain_parallel_tr_recovered", {
1333
+ recovered_count: recoveredCount
1334
+ });
1335
+ const result = [];
1336
+ for (const m of chain) {
1337
+ result.push(m);
1338
+ const toInsert = inserts.get(m.uuid);
1339
+ if (toInsert) result.push(...toInsert);
1340
+ }
1341
+ return result;
1342
+ }
1343
+ function checkResumeConsistency(chain) {
1344
+ for (let i = chain.length - 1; i >= 0; i--) {
1345
+ const m = chain[i];
1346
+ if (m.type !== "system" || m.subtype !== "turn_duration") continue;
1347
+ const expected = m.messageCount;
1348
+ if (expected === void 0) return;
1349
+ const actual = i;
1350
+ logEvent("tengu_resume_consistency_delta", {
1351
+ expected,
1352
+ actual,
1353
+ delta: actual - expected,
1354
+ chain_length: chain.length,
1355
+ checkpoint_age_entries: chain.length - 1 - i
1356
+ });
1357
+ return;
1358
+ }
1359
+ }
1360
+ function buildFileHistorySnapshotChain(fileHistorySnapshots, conversation) {
1361
+ const snapshots = [];
1362
+ const indexByMessageId = /* @__PURE__ */ new Map();
1363
+ for (const message of conversation) {
1364
+ const snapshotMessage = fileHistorySnapshots.get(message.uuid);
1365
+ if (!snapshotMessage) {
1366
+ continue;
1367
+ }
1368
+ const { snapshot, isSnapshotUpdate } = snapshotMessage;
1369
+ const existingIndex = isSnapshotUpdate ? indexByMessageId.get(snapshot.messageId) : void 0;
1370
+ if (existingIndex === void 0) {
1371
+ indexByMessageId.set(snapshot.messageId, snapshots.length);
1372
+ snapshots.push(snapshot);
1373
+ } else {
1374
+ snapshots[existingIndex] = snapshot;
1375
+ }
1376
+ }
1377
+ return snapshots;
1378
+ }
1379
+ function buildAttributionSnapshotChain(attributionSnapshots, _conversation) {
1380
+ return Array.from(attributionSnapshots.values());
1381
+ }
1382
+ async function loadTranscriptFromFile(filePath) {
1383
+ if (filePath.endsWith(".jsonl")) {
1384
+ const {
1385
+ messages: messages2,
1386
+ summaries,
1387
+ customTitles,
1388
+ tags,
1389
+ fileHistorySnapshots,
1390
+ attributionSnapshots,
1391
+ contextCollapseCommits,
1392
+ contextCollapseSnapshot,
1393
+ leafUuids,
1394
+ contentReplacements,
1395
+ worktreeStates
1396
+ } = await loadTranscriptFile(filePath);
1397
+ if (messages2.size === 0) {
1398
+ throw new Error("No messages found in JSONL file");
1399
+ }
1400
+ const leafMessage = findLatestMessage(
1401
+ messages2.values(),
1402
+ (msg) => leafUuids.has(msg.uuid)
1403
+ );
1404
+ if (!leafMessage) {
1405
+ throw new Error("No valid conversation chain found in JSONL file");
1406
+ }
1407
+ const transcript = buildConversationChain(messages2, leafMessage);
1408
+ const summary = summaries.get(leafMessage.uuid);
1409
+ const customTitle = customTitles.get(leafMessage.sessionId);
1410
+ const tag = tags.get(leafMessage.sessionId);
1411
+ const sessionId = leafMessage.sessionId;
1412
+ return {
1413
+ ...convertToLogOption(
1414
+ transcript,
1415
+ 0,
1416
+ summary,
1417
+ customTitle,
1418
+ buildFileHistorySnapshotChain(fileHistorySnapshots, transcript),
1419
+ tag,
1420
+ filePath,
1421
+ buildAttributionSnapshotChain(attributionSnapshots, transcript),
1422
+ void 0,
1423
+ contentReplacements.get(sessionId) ?? []
1424
+ ),
1425
+ contextCollapseCommits: contextCollapseCommits.filter(
1426
+ (e) => e.sessionId === sessionId
1427
+ ),
1428
+ contextCollapseSnapshot: contextCollapseSnapshot?.sessionId === sessionId ? contextCollapseSnapshot : void 0,
1429
+ worktreeSession: worktreeStates.has(sessionId) ? worktreeStates.get(sessionId) : void 0
1430
+ };
1431
+ }
1432
+ const content = await readFile(filePath, { encoding: "utf-8" });
1433
+ let parsed;
1434
+ try {
1435
+ parsed = jsonParse(content);
1436
+ } catch (error) {
1437
+ throw new Error(`Invalid JSON in transcript file: ${error}`);
1438
+ }
1439
+ let messages;
1440
+ if (Array.isArray(parsed)) {
1441
+ messages = parsed;
1442
+ } else if (parsed && typeof parsed === "object" && "messages" in parsed) {
1443
+ if (!Array.isArray(parsed.messages)) {
1444
+ throw new Error("Transcript messages must be an array");
1445
+ }
1446
+ messages = parsed.messages;
1447
+ } else {
1448
+ throw new Error(
1449
+ "Transcript must be an array of messages or an object with a messages array"
1450
+ );
1451
+ }
1452
+ return convertToLogOption(
1453
+ messages,
1454
+ 0,
1455
+ void 0,
1456
+ void 0,
1457
+ void 0,
1458
+ void 0,
1459
+ filePath
1460
+ );
1461
+ }
1462
+ function hasVisibleUserContent(message) {
1463
+ if (message.type !== "user") return false;
1464
+ if (message.isMeta) return false;
1465
+ const content = message.message?.content;
1466
+ if (!content) return false;
1467
+ if (typeof content === "string") {
1468
+ return content.trim().length > 0;
1469
+ }
1470
+ if (Array.isArray(content)) {
1471
+ return content.some(
1472
+ (block) => block.type === "text" || block.type === "image" || block.type === "document"
1473
+ );
1474
+ }
1475
+ return false;
1476
+ }
1477
+ function hasVisibleAssistantContent(message) {
1478
+ if (message.type !== "assistant") return false;
1479
+ const content = message.message?.content;
1480
+ if (!content || !Array.isArray(content)) return false;
1481
+ return content.some(
1482
+ (block) => block.type === "text" && typeof block.text === "string" && block.text.trim().length > 0
1483
+ );
1484
+ }
1485
+ function countVisibleMessages(transcript) {
1486
+ let count = 0;
1487
+ for (const message of transcript) {
1488
+ switch (message.type) {
1489
+ case "user":
1490
+ if (hasVisibleUserContent(message)) {
1491
+ count++;
1492
+ }
1493
+ break;
1494
+ case "assistant":
1495
+ if (hasVisibleAssistantContent(message)) {
1496
+ count++;
1497
+ }
1498
+ break;
1499
+ case "attachment":
1500
+ case "system":
1501
+ case "progress":
1502
+ break;
1503
+ }
1504
+ }
1505
+ return count;
1506
+ }
1507
+ function convertToLogOption(transcript, value = 0, summary, customTitle, fileHistorySnapshots, tag, fullPath, attributionSnapshots, agentSetting, contentReplacements) {
1508
+ const lastMessage = transcript.at(-1);
1509
+ const firstMessage = transcript[0];
1510
+ const firstPrompt = extractFirstPrompt(transcript);
1511
+ const created = new Date(firstMessage.timestamp);
1512
+ const modified = new Date(lastMessage.timestamp);
1513
+ return {
1514
+ date: lastMessage.timestamp,
1515
+ messages: removeExtraFields(transcript),
1516
+ fullPath,
1517
+ value,
1518
+ created,
1519
+ modified,
1520
+ firstPrompt,
1521
+ messageCount: countVisibleMessages(transcript),
1522
+ isSidechain: firstMessage.isSidechain,
1523
+ teamName: firstMessage.teamName,
1524
+ agentName: firstMessage.agentName,
1525
+ agentSetting,
1526
+ leafUuid: lastMessage.uuid,
1527
+ summary,
1528
+ customTitle,
1529
+ tag,
1530
+ fileHistorySnapshots,
1531
+ attributionSnapshots,
1532
+ contentReplacements,
1533
+ gitBranch: lastMessage.gitBranch,
1534
+ projectPath: firstMessage.cwd
1535
+ };
1536
+ }
1537
+ async function trackSessionBranchingAnalytics(logs) {
1538
+ const sessionIdCounts = /* @__PURE__ */ new Map();
1539
+ let maxCount = 0;
1540
+ for (const log of logs) {
1541
+ const sessionId = getSessionIdFromLog(log);
1542
+ if (sessionId) {
1543
+ const newCount = (sessionIdCounts.get(sessionId) || 0) + 1;
1544
+ sessionIdCounts.set(sessionId, newCount);
1545
+ maxCount = Math.max(newCount, maxCount);
1546
+ }
1547
+ }
1548
+ if (maxCount <= 1) {
1549
+ return;
1550
+ }
1551
+ const branchCounts = Array.from(sessionIdCounts.values()).filter((c) => c > 1);
1552
+ const sessionsWithBranches = branchCounts.length;
1553
+ const totalBranches = branchCounts.reduce((sum, count) => sum + count, 0);
1554
+ logEvent("tengu_session_forked_branches_fetched", {
1555
+ total_sessions: sessionIdCounts.size,
1556
+ sessions_with_branches: sessionsWithBranches,
1557
+ max_branches_per_session: Math.max(...branchCounts),
1558
+ avg_branches_per_session: Math.round(totalBranches / sessionsWithBranches),
1559
+ total_transcript_count: logs.length
1560
+ });
1561
+ }
1562
+ async function fetchLogs(limit) {
1563
+ const projectDir = getProjectDir(getOriginalCwd());
1564
+ const logs = await getSessionFilesLite(projectDir, limit, getOriginalCwd());
1565
+ await trackSessionBranchingAnalytics(logs);
1566
+ return logs;
1567
+ }
1568
+ function appendEntryToFile(fullPath, entry) {
1569
+ const fs = getFsImplementation();
1570
+ const line = jsonStringify(entry) + "\n";
1571
+ try {
1572
+ fs.appendFileSync(fullPath, line, { mode: 384 });
1573
+ } catch {
1574
+ fs.mkdirSync(dirname(fullPath), { mode: 448 });
1575
+ fs.appendFileSync(fullPath, line, { mode: 384 });
1576
+ }
1577
+ }
1578
+ function readFileTailSync(fullPath) {
1579
+ let fd;
1580
+ try {
1581
+ fd = openSync(fullPath, "r");
1582
+ const st = fstatSync(fd);
1583
+ const tailOffset = Math.max(0, st.size - LITE_READ_BUF_SIZE);
1584
+ const buf = Buffer.allocUnsafe(
1585
+ Math.min(LITE_READ_BUF_SIZE, st.size - tailOffset)
1586
+ );
1587
+ const bytesRead = readSync(fd, buf, 0, buf.length, tailOffset);
1588
+ return buf.toString("utf8", 0, bytesRead);
1589
+ } catch {
1590
+ return "";
1591
+ } finally {
1592
+ if (fd !== void 0) {
1593
+ try {
1594
+ closeSync(fd);
1595
+ } catch {
1596
+ }
1597
+ }
1598
+ }
1599
+ }
1600
+ async function saveCustomTitle(sessionId, customTitle, fullPath, source = "user") {
1601
+ const resolvedPath = fullPath ?? getTranscriptPathForSession(sessionId);
1602
+ appendEntryToFile(resolvedPath, {
1603
+ type: "custom-title",
1604
+ customTitle,
1605
+ sessionId
1606
+ });
1607
+ if (sessionId === getSessionId()) {
1608
+ getProject().currentSessionTitle = customTitle;
1609
+ }
1610
+ logEvent("tengu_session_renamed", {
1611
+ source
1612
+ });
1613
+ }
1614
+ function saveAiGeneratedTitle(sessionId, aiTitle) {
1615
+ appendEntryToFile(getTranscriptPathForSession(sessionId), {
1616
+ type: "ai-title",
1617
+ aiTitle,
1618
+ sessionId
1619
+ });
1620
+ }
1621
+ function saveTaskSummary(sessionId, summary) {
1622
+ appendEntryToFile(getTranscriptPathForSession(sessionId), {
1623
+ type: "task-summary",
1624
+ summary,
1625
+ sessionId,
1626
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
1627
+ });
1628
+ }
1629
+ async function saveTag(sessionId, tag, fullPath) {
1630
+ const resolvedPath = fullPath ?? getTranscriptPathForSession(sessionId);
1631
+ appendEntryToFile(resolvedPath, { type: "tag", tag, sessionId });
1632
+ if (sessionId === getSessionId()) {
1633
+ getProject().currentSessionTag = tag;
1634
+ }
1635
+ logEvent("tengu_session_tagged", {});
1636
+ }
1637
+ async function linkSessionToPR(sessionId, prNumber, prUrl, prRepository, fullPath) {
1638
+ const resolvedPath = fullPath ?? getTranscriptPathForSession(sessionId);
1639
+ appendEntryToFile(resolvedPath, {
1640
+ type: "pr-link",
1641
+ sessionId,
1642
+ prNumber,
1643
+ prUrl,
1644
+ prRepository,
1645
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
1646
+ });
1647
+ if (sessionId === getSessionId()) {
1648
+ const project2 = getProject();
1649
+ project2.currentSessionPrNumber = prNumber;
1650
+ project2.currentSessionPrUrl = prUrl;
1651
+ project2.currentSessionPrRepository = prRepository;
1652
+ }
1653
+ logEvent("tengu_session_linked_to_pr", { prNumber });
1654
+ }
1655
+ function getCurrentSessionTag(sessionId) {
1656
+ if (sessionId === getSessionId()) {
1657
+ return getProject().currentSessionTag;
1658
+ }
1659
+ return void 0;
1660
+ }
1661
+ function getCurrentSessionTitle(sessionId) {
1662
+ if (sessionId === getSessionId()) {
1663
+ return getProject().currentSessionTitle;
1664
+ }
1665
+ return void 0;
1666
+ }
1667
+ function getCurrentSessionAgentColor() {
1668
+ return getProject().currentSessionAgentColor;
1669
+ }
1670
+ function restoreSessionMetadata(meta) {
1671
+ const project2 = getProject();
1672
+ if (meta.customTitle) project2.currentSessionTitle ??= meta.customTitle;
1673
+ if (meta.tag !== void 0) project2.currentSessionTag = meta.tag || void 0;
1674
+ if (meta.agentName) project2.currentSessionAgentName = meta.agentName;
1675
+ if (meta.agentColor) project2.currentSessionAgentColor = meta.agentColor;
1676
+ if (meta.agentSetting) project2.currentSessionAgentSetting = meta.agentSetting;
1677
+ if (meta.mode) project2.currentSessionMode = meta.mode;
1678
+ if (meta.worktreeSession !== void 0)
1679
+ project2.currentSessionWorktree = meta.worktreeSession;
1680
+ if (meta.prNumber !== void 0)
1681
+ project2.currentSessionPrNumber = meta.prNumber;
1682
+ if (meta.prUrl) project2.currentSessionPrUrl = meta.prUrl;
1683
+ if (meta.prRepository) project2.currentSessionPrRepository = meta.prRepository;
1684
+ }
1685
+ function clearSessionMetadata() {
1686
+ const project2 = getProject();
1687
+ project2.currentSessionTitle = void 0;
1688
+ project2.currentSessionTag = void 0;
1689
+ project2.currentSessionAgentName = void 0;
1690
+ project2.currentSessionAgentColor = void 0;
1691
+ project2.currentSessionLastPrompt = void 0;
1692
+ project2.currentSessionAgentSetting = void 0;
1693
+ project2.currentSessionMode = void 0;
1694
+ project2.currentSessionWorktree = void 0;
1695
+ project2.currentSessionPrNumber = void 0;
1696
+ project2.currentSessionPrUrl = void 0;
1697
+ project2.currentSessionPrRepository = void 0;
1698
+ }
1699
+ function reAppendSessionMetadata() {
1700
+ getProject().reAppendSessionMetadata();
1701
+ }
1702
+ async function saveAgentName(sessionId, agentName, fullPath, source = "user") {
1703
+ const resolvedPath = fullPath ?? getTranscriptPathForSession(sessionId);
1704
+ appendEntryToFile(resolvedPath, { type: "agent-name", agentName, sessionId });
1705
+ if (sessionId === getSessionId()) {
1706
+ getProject().currentSessionAgentName = agentName;
1707
+ void updateSessionName(agentName);
1708
+ }
1709
+ logEvent("tengu_agent_name_set", {
1710
+ source
1711
+ });
1712
+ }
1713
+ async function saveAgentColor(sessionId, agentColor, fullPath) {
1714
+ const resolvedPath = fullPath ?? getTranscriptPathForSession(sessionId);
1715
+ appendEntryToFile(resolvedPath, {
1716
+ type: "agent-color",
1717
+ agentColor,
1718
+ sessionId
1719
+ });
1720
+ if (sessionId === getSessionId()) {
1721
+ getProject().currentSessionAgentColor = agentColor;
1722
+ }
1723
+ logEvent("tengu_agent_color_set", {});
1724
+ }
1725
+ function saveAgentSetting(agentSetting) {
1726
+ getProject().currentSessionAgentSetting = agentSetting;
1727
+ }
1728
+ function cacheSessionTitle(customTitle) {
1729
+ getProject().currentSessionTitle = customTitle;
1730
+ }
1731
+ function saveMode(mode) {
1732
+ getProject().currentSessionMode = mode;
1733
+ }
1734
+ function saveWorktreeState(worktreeSession) {
1735
+ const stripped = worktreeSession ? {
1736
+ originalCwd: worktreeSession.originalCwd,
1737
+ worktreePath: worktreeSession.worktreePath,
1738
+ worktreeName: worktreeSession.worktreeName,
1739
+ worktreeBranch: worktreeSession.worktreeBranch,
1740
+ originalBranch: worktreeSession.originalBranch,
1741
+ originalHeadCommit: worktreeSession.originalHeadCommit,
1742
+ sessionId: worktreeSession.sessionId,
1743
+ tmuxSessionName: worktreeSession.tmuxSessionName,
1744
+ hookBased: worktreeSession.hookBased
1745
+ } : null;
1746
+ const project2 = getProject();
1747
+ project2.currentSessionWorktree = stripped;
1748
+ if (project2.sessionFile) {
1749
+ appendEntryToFile(project2.sessionFile, {
1750
+ type: "worktree-state",
1751
+ worktreeSession: stripped,
1752
+ sessionId: getSessionId()
1753
+ });
1754
+ }
1755
+ }
1756
+ function getSessionIdFromLog(log) {
1757
+ if (log.sessionId) {
1758
+ return log.sessionId;
1759
+ }
1760
+ return log.messages[0]?.sessionId;
1761
+ }
1762
+ function isLiteLog(log) {
1763
+ return log.messages.length === 0 && log.sessionId !== void 0;
1764
+ }
1765
+ async function loadFullLog(log) {
1766
+ if (!isLiteLog(log)) {
1767
+ return log;
1768
+ }
1769
+ const sessionFile = log.fullPath;
1770
+ if (!sessionFile) {
1771
+ return log;
1772
+ }
1773
+ try {
1774
+ const {
1775
+ messages,
1776
+ summaries,
1777
+ customTitles,
1778
+ tags,
1779
+ agentNames,
1780
+ agentColors,
1781
+ agentSettings,
1782
+ prNumbers,
1783
+ prUrls,
1784
+ prRepositories,
1785
+ modes,
1786
+ worktreeStates,
1787
+ fileHistorySnapshots,
1788
+ attributionSnapshots,
1789
+ contentReplacements,
1790
+ contextCollapseCommits,
1791
+ contextCollapseSnapshot,
1792
+ leafUuids
1793
+ } = await loadTranscriptFile(sessionFile);
1794
+ if (messages.size === 0) {
1795
+ return log;
1796
+ }
1797
+ const mostRecentLeaf = findLatestMessage(
1798
+ messages.values(),
1799
+ (msg) => leafUuids.has(msg.uuid) && (msg.type === "user" || msg.type === "assistant")
1800
+ );
1801
+ if (!mostRecentLeaf) {
1802
+ return log;
1803
+ }
1804
+ const transcript = buildConversationChain(messages, mostRecentLeaf);
1805
+ const sessionId = mostRecentLeaf.sessionId;
1806
+ return {
1807
+ ...log,
1808
+ messages: removeExtraFields(transcript),
1809
+ firstPrompt: extractFirstPrompt(transcript),
1810
+ messageCount: countVisibleMessages(transcript),
1811
+ summary: mostRecentLeaf ? summaries.get(mostRecentLeaf.uuid) : log.summary,
1812
+ customTitle: sessionId ? customTitles.get(sessionId) : log.customTitle,
1813
+ tag: sessionId ? tags.get(sessionId) : log.tag,
1814
+ agentName: sessionId ? agentNames.get(sessionId) : log.agentName,
1815
+ agentColor: sessionId ? agentColors.get(sessionId) : log.agentColor,
1816
+ agentSetting: sessionId ? agentSettings.get(sessionId) : log.agentSetting,
1817
+ mode: sessionId ? modes.get(sessionId) : log.mode,
1818
+ worktreeSession: sessionId && worktreeStates.has(sessionId) ? worktreeStates.get(sessionId) : log.worktreeSession,
1819
+ prNumber: sessionId ? prNumbers.get(sessionId) : log.prNumber,
1820
+ prUrl: sessionId ? prUrls.get(sessionId) : log.prUrl,
1821
+ prRepository: sessionId ? prRepositories.get(sessionId) : log.prRepository,
1822
+ gitBranch: mostRecentLeaf?.gitBranch ?? log.gitBranch,
1823
+ isSidechain: transcript[0]?.isSidechain ?? log.isSidechain,
1824
+ teamName: transcript[0]?.teamName ?? log.teamName,
1825
+ leafUuid: mostRecentLeaf?.uuid ?? log.leafUuid,
1826
+ fileHistorySnapshots: buildFileHistorySnapshotChain(
1827
+ fileHistorySnapshots,
1828
+ transcript
1829
+ ),
1830
+ attributionSnapshots: buildAttributionSnapshotChain(
1831
+ attributionSnapshots,
1832
+ transcript
1833
+ ),
1834
+ contentReplacements: sessionId ? contentReplacements.get(sessionId) ?? [] : log.contentReplacements,
1835
+ // Filter to the resumed session's entries. loadTranscriptFile reads
1836
+ // the file sequentially so the array is already in commit order;
1837
+ // filter preserves that.
1838
+ contextCollapseCommits: sessionId ? contextCollapseCommits.filter((e) => e.sessionId === sessionId) : void 0,
1839
+ contextCollapseSnapshot: sessionId && contextCollapseSnapshot?.sessionId === sessionId ? contextCollapseSnapshot : void 0
1840
+ };
1841
+ } catch {
1842
+ return log;
1843
+ }
1844
+ }
1845
+ async function searchSessionsByCustomTitle(query, options) {
1846
+ const { limit, exact } = options || {};
1847
+ const worktreePaths = await getWorktreePaths(getOriginalCwd());
1848
+ const allStatLogs = await getStatOnlyLogsForWorktrees(worktreePaths);
1849
+ const { logs } = await enrichLogs(allStatLogs, 0, allStatLogs.length);
1850
+ const normalizedQuery = query.toLowerCase().trim();
1851
+ const matchingLogs = logs.filter((log) => {
1852
+ const title = log.customTitle?.toLowerCase().trim();
1853
+ if (!title) return false;
1854
+ return exact ? title === normalizedQuery : title.includes(normalizedQuery);
1855
+ });
1856
+ const sessionIdToLog = /* @__PURE__ */ new Map();
1857
+ for (const log of matchingLogs) {
1858
+ const sessionId = getSessionIdFromLog(log);
1859
+ if (sessionId) {
1860
+ const existing = sessionIdToLog.get(sessionId);
1861
+ if (!existing || log.modified > existing.modified) {
1862
+ sessionIdToLog.set(sessionId, log);
1863
+ }
1864
+ }
1865
+ }
1866
+ const deduplicated = Array.from(sessionIdToLog.values());
1867
+ deduplicated.sort((a, b) => b.modified.getTime() - a.modified.getTime());
1868
+ if (limit) {
1869
+ return deduplicated.slice(0, limit);
1870
+ }
1871
+ return deduplicated;
1872
+ }
1873
+ const METADATA_TYPE_MARKERS = [
1874
+ '"type":"summary"',
1875
+ '"type":"custom-title"',
1876
+ '"type":"tag"',
1877
+ '"type":"agent-name"',
1878
+ '"type":"agent-color"',
1879
+ '"type":"agent-setting"',
1880
+ '"type":"mode"',
1881
+ '"type":"worktree-state"',
1882
+ '"type":"pr-link"'
1883
+ ];
1884
+ const METADATA_MARKER_BUFS = METADATA_TYPE_MARKERS.map((m) => Buffer.from(m));
1885
+ const METADATA_PREFIX_BOUND = 25;
1886
+ function resolveMetadataBuf(carry, chunkBuf) {
1887
+ if (carry === null || carry.length === 0) return chunkBuf;
1888
+ if (carry.length < METADATA_PREFIX_BOUND) {
1889
+ return Buffer.concat([carry, chunkBuf]);
1890
+ }
1891
+ if (carry[0] === 123) {
1892
+ for (const m of METADATA_MARKER_BUFS) {
1893
+ if (carry.compare(m, 0, m.length, 1, 1 + m.length) === 0) {
1894
+ return Buffer.concat([carry, chunkBuf]);
1895
+ }
1896
+ }
1897
+ }
1898
+ const firstNl = chunkBuf.indexOf(10);
1899
+ return firstNl === -1 ? null : chunkBuf.subarray(firstNl + 1);
1900
+ }
1901
+ async function scanPreBoundaryMetadata(filePath, endOffset) {
1902
+ const { createReadStream } = await import("fs");
1903
+ const NEWLINE = 10;
1904
+ const stream = createReadStream(filePath, { end: endOffset - 1 });
1905
+ const metadataLines = [];
1906
+ let carry = null;
1907
+ for await (const chunk of stream) {
1908
+ const chunkBuf = chunk;
1909
+ const buf = resolveMetadataBuf(carry, chunkBuf);
1910
+ if (buf === null) {
1911
+ carry = null;
1912
+ continue;
1913
+ }
1914
+ let hasAnyMarker = false;
1915
+ for (const m of METADATA_MARKER_BUFS) {
1916
+ if (buf.includes(m)) {
1917
+ hasAnyMarker = true;
1918
+ break;
1919
+ }
1920
+ }
1921
+ if (hasAnyMarker) {
1922
+ let lineStart = 0;
1923
+ let nl = buf.indexOf(NEWLINE);
1924
+ while (nl !== -1) {
1925
+ for (const m of METADATA_MARKER_BUFS) {
1926
+ const mIdx = buf.indexOf(m, lineStart);
1927
+ if (mIdx !== -1 && mIdx < nl) {
1928
+ metadataLines.push(buf.toString("utf-8", lineStart, nl));
1929
+ break;
1930
+ }
1931
+ }
1932
+ lineStart = nl + 1;
1933
+ nl = buf.indexOf(NEWLINE, lineStart);
1934
+ }
1935
+ carry = buf.subarray(lineStart);
1936
+ } else {
1937
+ const lastNl = buf.lastIndexOf(NEWLINE);
1938
+ carry = lastNl >= 0 ? buf.subarray(lastNl + 1) : buf;
1939
+ }
1940
+ if (carry.length > 64 * 1024) carry = null;
1941
+ }
1942
+ if (carry !== null && carry.length > 0) {
1943
+ for (const m of METADATA_MARKER_BUFS) {
1944
+ if (carry.includes(m)) {
1945
+ metadataLines.push(carry.toString("utf-8"));
1946
+ break;
1947
+ }
1948
+ }
1949
+ }
1950
+ return metadataLines;
1951
+ }
1952
+ function pickDepthOneUuidCandidate(buf, lineStart, candidates) {
1953
+ const QUOTE = 34;
1954
+ const BACKSLASH = 92;
1955
+ const OPEN_BRACE = 123;
1956
+ const CLOSE_BRACE = 125;
1957
+ let depth = 0;
1958
+ let inString = false;
1959
+ let escapeNext = false;
1960
+ let ci = 0;
1961
+ for (let i = lineStart; ci < candidates.length; i++) {
1962
+ if (i === candidates[ci]) {
1963
+ if (depth === 1 && !inString) return candidates[ci];
1964
+ ci++;
1965
+ }
1966
+ const b = buf[i];
1967
+ if (escapeNext) {
1968
+ escapeNext = false;
1969
+ } else if (inString) {
1970
+ if (b === BACKSLASH) escapeNext = true;
1971
+ else if (b === QUOTE) inString = false;
1972
+ } else if (b === QUOTE) inString = true;
1973
+ else if (b === OPEN_BRACE) depth++;
1974
+ else if (b === CLOSE_BRACE) depth--;
1975
+ }
1976
+ return candidates.at(-1);
1977
+ }
1978
+ function walkChainBeforeParse(buf) {
1979
+ const NEWLINE = 10;
1980
+ const OPEN_BRACE = 123;
1981
+ const QUOTE = 34;
1982
+ const PARENT_PREFIX = Buffer.from('{"parentUuid":');
1983
+ const UUID_KEY = Buffer.from('"uuid":"');
1984
+ const SIDECHAIN_TRUE = Buffer.from('"isSidechain":true');
1985
+ const UUID_LEN = 36;
1986
+ const TS_SUFFIX = Buffer.from('","timestamp":"');
1987
+ const TS_SUFFIX_LEN = TS_SUFFIX.length;
1988
+ const PREFIX_LEN = PARENT_PREFIX.length;
1989
+ const KEY_LEN = UUID_KEY.length;
1990
+ const msgIdx = [];
1991
+ const metaRanges = [];
1992
+ const uuidToSlot = /* @__PURE__ */ new Map();
1993
+ let pos = 0;
1994
+ const len = buf.length;
1995
+ while (pos < len) {
1996
+ const nl = buf.indexOf(NEWLINE, pos);
1997
+ const lineEnd = nl === -1 ? len : nl + 1;
1998
+ if (lineEnd - pos > PREFIX_LEN && buf[pos] === OPEN_BRACE && buf.compare(PARENT_PREFIX, 0, PREFIX_LEN, pos, pos + PREFIX_LEN) === 0) {
1999
+ const parentStart = buf[pos + PREFIX_LEN] === QUOTE ? pos + PREFIX_LEN + 1 : -1;
2000
+ let firstAny = -1;
2001
+ let suffix0 = -1;
2002
+ let suffixN;
2003
+ let from = pos;
2004
+ for (; ; ) {
2005
+ const next = buf.indexOf(UUID_KEY, from);
2006
+ if (next < 0 || next >= lineEnd) break;
2007
+ if (firstAny < 0) firstAny = next;
2008
+ const after = next + KEY_LEN + UUID_LEN;
2009
+ if (after + TS_SUFFIX_LEN <= lineEnd && buf.compare(
2010
+ TS_SUFFIX,
2011
+ 0,
2012
+ TS_SUFFIX_LEN,
2013
+ after,
2014
+ after + TS_SUFFIX_LEN
2015
+ ) === 0) {
2016
+ if (suffix0 < 0) suffix0 = next;
2017
+ else (suffixN ??= [suffix0]).push(next);
2018
+ }
2019
+ from = next + KEY_LEN;
2020
+ }
2021
+ const uk = suffixN ? pickDepthOneUuidCandidate(buf, pos, suffixN) : suffix0 >= 0 ? suffix0 : firstAny;
2022
+ if (uk >= 0) {
2023
+ const uuidStart = uk + KEY_LEN;
2024
+ const uuid = buf.toString("latin1", uuidStart, uuidStart + UUID_LEN);
2025
+ uuidToSlot.set(uuid, msgIdx.length);
2026
+ msgIdx.push(pos, lineEnd, parentStart);
2027
+ } else {
2028
+ metaRanges.push(pos, lineEnd);
2029
+ }
2030
+ } else {
2031
+ metaRanges.push(pos, lineEnd);
2032
+ }
2033
+ pos = lineEnd;
2034
+ }
2035
+ let leafSlot = -1;
2036
+ for (let i = msgIdx.length - 3; i >= 0; i -= 3) {
2037
+ const sc = buf.indexOf(SIDECHAIN_TRUE, msgIdx[i]);
2038
+ if (sc === -1 || sc >= msgIdx[i + 1]) {
2039
+ leafSlot = i;
2040
+ break;
2041
+ }
2042
+ }
2043
+ if (leafSlot < 0) return buf;
2044
+ const seen = /* @__PURE__ */ new Set();
2045
+ const chain = /* @__PURE__ */ new Set();
2046
+ let chainBytes = 0;
2047
+ let slot = leafSlot;
2048
+ while (slot !== void 0) {
2049
+ if (seen.has(slot)) break;
2050
+ seen.add(slot);
2051
+ chain.add(msgIdx[slot]);
2052
+ chainBytes += msgIdx[slot + 1] - msgIdx[slot];
2053
+ const parentStart = msgIdx[slot + 2];
2054
+ if (parentStart < 0) break;
2055
+ const parent = buf.toString("latin1", parentStart, parentStart + UUID_LEN);
2056
+ slot = uuidToSlot.get(parent);
2057
+ }
2058
+ if (len - chainBytes < len >> 1) return buf;
2059
+ const parts = [];
2060
+ let m = 0;
2061
+ for (let i = 0; i < msgIdx.length; i += 3) {
2062
+ const start = msgIdx[i];
2063
+ while (m < metaRanges.length && metaRanges[m] < start) {
2064
+ parts.push(buf.subarray(metaRanges[m], metaRanges[m + 1]));
2065
+ m += 2;
2066
+ }
2067
+ if (chain.has(start)) {
2068
+ parts.push(buf.subarray(start, msgIdx[i + 1]));
2069
+ }
2070
+ }
2071
+ while (m < metaRanges.length) {
2072
+ parts.push(buf.subarray(metaRanges[m], metaRanges[m + 1]));
2073
+ m += 2;
2074
+ }
2075
+ return Buffer.concat(parts);
2076
+ }
2077
+ async function loadTranscriptFile(filePath, opts) {
2078
+ const messages = /* @__PURE__ */ new Map();
2079
+ const summaries = /* @__PURE__ */ new Map();
2080
+ const customTitles = /* @__PURE__ */ new Map();
2081
+ const tags = /* @__PURE__ */ new Map();
2082
+ const agentNames = /* @__PURE__ */ new Map();
2083
+ const agentColors = /* @__PURE__ */ new Map();
2084
+ const agentSettings = /* @__PURE__ */ new Map();
2085
+ const prNumbers = /* @__PURE__ */ new Map();
2086
+ const prUrls = /* @__PURE__ */ new Map();
2087
+ const prRepositories = /* @__PURE__ */ new Map();
2088
+ const modes = /* @__PURE__ */ new Map();
2089
+ const worktreeStates = /* @__PURE__ */ new Map();
2090
+ const fileHistorySnapshots = /* @__PURE__ */ new Map();
2091
+ const attributionSnapshots = /* @__PURE__ */ new Map();
2092
+ const contentReplacements = /* @__PURE__ */ new Map();
2093
+ const agentContentReplacements = /* @__PURE__ */ new Map();
2094
+ const contextCollapseCommits = [];
2095
+ let contextCollapseSnapshot;
2096
+ try {
2097
+ let buf = null;
2098
+ let metadataLines = null;
2099
+ let hasPreservedSegment = false;
2100
+ if (!isEnvTruthy(process.env.XCODE_DISABLE_PRECOMPACT_SKIP)) {
2101
+ const { size } = await stat(filePath);
2102
+ if (size > SKIP_PRECOMPACT_THRESHOLD) {
2103
+ const scan = await readTranscriptForLoad(filePath, size);
2104
+ buf = scan.postBoundaryBuf;
2105
+ hasPreservedSegment = scan.hasPreservedSegment;
2106
+ if (scan.boundaryStartOffset > 0) {
2107
+ metadataLines = await scanPreBoundaryMetadata(
2108
+ filePath,
2109
+ scan.boundaryStartOffset
2110
+ );
2111
+ }
2112
+ }
2113
+ }
2114
+ buf ??= await readFile(filePath);
2115
+ if (!opts?.keepAllLeaves && !hasPreservedSegment && !isEnvTruthy(process.env.XCODE_DISABLE_PRECOMPACT_SKIP) && buf.length > SKIP_PRECOMPACT_THRESHOLD) {
2116
+ buf = walkChainBeforeParse(buf);
2117
+ }
2118
+ if (metadataLines && metadataLines.length > 0) {
2119
+ const metaEntries = parseJSONL(
2120
+ Buffer.from(metadataLines.join("\n"))
2121
+ );
2122
+ for (const entry of metaEntries) {
2123
+ if (entry.type === "summary" && entry.leafUuid) {
2124
+ summaries.set(entry.leafUuid, entry.summary);
2125
+ } else if (entry.type === "custom-title" && entry.sessionId) {
2126
+ customTitles.set(entry.sessionId, entry.customTitle);
2127
+ } else if (entry.type === "tag" && entry.sessionId) {
2128
+ tags.set(entry.sessionId, entry.tag);
2129
+ } else if (entry.type === "agent-name" && entry.sessionId) {
2130
+ agentNames.set(entry.sessionId, entry.agentName);
2131
+ } else if (entry.type === "agent-color" && entry.sessionId) {
2132
+ agentColors.set(entry.sessionId, entry.agentColor);
2133
+ } else if (entry.type === "agent-setting" && entry.sessionId) {
2134
+ agentSettings.set(entry.sessionId, entry.agentSetting);
2135
+ } else if (entry.type === "mode" && entry.sessionId) {
2136
+ modes.set(entry.sessionId, entry.mode);
2137
+ } else if (entry.type === "worktree-state" && entry.sessionId) {
2138
+ worktreeStates.set(entry.sessionId, entry.worktreeSession);
2139
+ } else if (entry.type === "pr-link" && entry.sessionId) {
2140
+ prNumbers.set(entry.sessionId, entry.prNumber);
2141
+ prUrls.set(entry.sessionId, entry.prUrl);
2142
+ prRepositories.set(entry.sessionId, entry.prRepository);
2143
+ }
2144
+ }
2145
+ }
2146
+ const entries = parseJSONL(buf);
2147
+ const progressBridge = /* @__PURE__ */ new Map();
2148
+ for (const entry of entries) {
2149
+ if (isLegacyProgressEntry(entry)) {
2150
+ const parent = entry.parentUuid;
2151
+ progressBridge.set(
2152
+ entry.uuid,
2153
+ parent && progressBridge.has(parent) ? progressBridge.get(parent) ?? null : parent
2154
+ );
2155
+ continue;
2156
+ }
2157
+ if (isTranscriptMessage(entry)) {
2158
+ if (entry.parentUuid && progressBridge.has(entry.parentUuid)) {
2159
+ entry.parentUuid = progressBridge.get(entry.parentUuid) ?? null;
2160
+ }
2161
+ messages.set(entry.uuid, entry);
2162
+ if (isCompactBoundaryMessage(entry)) {
2163
+ contextCollapseCommits.length = 0;
2164
+ contextCollapseSnapshot = void 0;
2165
+ }
2166
+ } else if (entry.type === "summary" && entry.leafUuid) {
2167
+ summaries.set(entry.leafUuid, entry.summary);
2168
+ } else if (entry.type === "custom-title" && entry.sessionId) {
2169
+ customTitles.set(entry.sessionId, entry.customTitle);
2170
+ } else if (entry.type === "tag" && entry.sessionId) {
2171
+ tags.set(entry.sessionId, entry.tag);
2172
+ } else if (entry.type === "agent-name" && entry.sessionId) {
2173
+ agentNames.set(entry.sessionId, entry.agentName);
2174
+ } else if (entry.type === "agent-color" && entry.sessionId) {
2175
+ agentColors.set(entry.sessionId, entry.agentColor);
2176
+ } else if (entry.type === "agent-setting" && entry.sessionId) {
2177
+ agentSettings.set(entry.sessionId, entry.agentSetting);
2178
+ } else if (entry.type === "mode" && entry.sessionId) {
2179
+ modes.set(entry.sessionId, entry.mode);
2180
+ } else if (entry.type === "worktree-state" && entry.sessionId) {
2181
+ worktreeStates.set(entry.sessionId, entry.worktreeSession);
2182
+ } else if (entry.type === "pr-link" && entry.sessionId) {
2183
+ prNumbers.set(entry.sessionId, entry.prNumber);
2184
+ prUrls.set(entry.sessionId, entry.prUrl);
2185
+ prRepositories.set(entry.sessionId, entry.prRepository);
2186
+ } else if (entry.type === "file-history-snapshot") {
2187
+ fileHistorySnapshots.set(entry.messageId, entry);
2188
+ } else if (entry.type === "attribution-snapshot") {
2189
+ attributionSnapshots.set(entry.messageId, entry);
2190
+ } else if (entry.type === "content-replacement") {
2191
+ if (entry.agentId) {
2192
+ const existing = agentContentReplacements.get(entry.agentId) ?? [];
2193
+ agentContentReplacements.set(entry.agentId, existing);
2194
+ existing.push(...entry.replacements);
2195
+ } else {
2196
+ const existing = contentReplacements.get(entry.sessionId) ?? [];
2197
+ contentReplacements.set(entry.sessionId, existing);
2198
+ existing.push(...entry.replacements);
2199
+ }
2200
+ } else if (entry.type === "marble-origami-commit") {
2201
+ contextCollapseCommits.push(entry);
2202
+ } else if (entry.type === "marble-origami-snapshot") {
2203
+ contextCollapseSnapshot = entry;
2204
+ }
2205
+ }
2206
+ } catch {
2207
+ }
2208
+ applyPreservedSegmentRelinks(messages);
2209
+ applySnipRemovals(messages);
2210
+ const allMessages = [...messages.values()];
2211
+ const parentUuids = new Set(
2212
+ allMessages.map((msg) => msg.parentUuid).filter((uuid) => uuid !== null)
2213
+ );
2214
+ const terminalMessages = allMessages.filter((msg) => !parentUuids.has(msg.uuid));
2215
+ const leafUuids = /* @__PURE__ */ new Set();
2216
+ let hasCycle = false;
2217
+ if (getFeatureValue_CACHED_MAY_BE_STALE("tengu_pebble_leaf_prune", false)) {
2218
+ const hasUserAssistantChild = /* @__PURE__ */ new Set();
2219
+ for (const msg of allMessages) {
2220
+ if (msg.parentUuid && (msg.type === "user" || msg.type === "assistant")) {
2221
+ hasUserAssistantChild.add(msg.parentUuid);
2222
+ }
2223
+ }
2224
+ for (const terminal of terminalMessages) {
2225
+ const seen = /* @__PURE__ */ new Set();
2226
+ let current = terminal;
2227
+ while (current) {
2228
+ if (seen.has(current.uuid)) {
2229
+ hasCycle = true;
2230
+ break;
2231
+ }
2232
+ seen.add(current.uuid);
2233
+ if (current.type === "user" || current.type === "assistant") {
2234
+ if (!hasUserAssistantChild.has(current.uuid)) {
2235
+ leafUuids.add(current.uuid);
2236
+ }
2237
+ break;
2238
+ }
2239
+ current = current.parentUuid ? messages.get(current.parentUuid) : void 0;
2240
+ }
2241
+ }
2242
+ } else {
2243
+ for (const terminal of terminalMessages) {
2244
+ const seen = /* @__PURE__ */ new Set();
2245
+ let current = terminal;
2246
+ while (current) {
2247
+ if (seen.has(current.uuid)) {
2248
+ hasCycle = true;
2249
+ break;
2250
+ }
2251
+ seen.add(current.uuid);
2252
+ if (current.type === "user" || current.type === "assistant") {
2253
+ leafUuids.add(current.uuid);
2254
+ break;
2255
+ }
2256
+ current = current.parentUuid ? messages.get(current.parentUuid) : void 0;
2257
+ }
2258
+ }
2259
+ }
2260
+ if (hasCycle) {
2261
+ logEvent("tengu_transcript_parent_cycle", {});
2262
+ }
2263
+ return {
2264
+ messages,
2265
+ summaries,
2266
+ customTitles,
2267
+ tags,
2268
+ agentNames,
2269
+ agentColors,
2270
+ agentSettings,
2271
+ prNumbers,
2272
+ prUrls,
2273
+ prRepositories,
2274
+ modes,
2275
+ worktreeStates,
2276
+ fileHistorySnapshots,
2277
+ attributionSnapshots,
2278
+ contentReplacements,
2279
+ agentContentReplacements,
2280
+ contextCollapseCommits,
2281
+ contextCollapseSnapshot,
2282
+ leafUuids
2283
+ };
2284
+ }
2285
+ async function loadSessionFile(sessionId) {
2286
+ const sessionFile = join(
2287
+ getSessionProjectDir() ?? getProjectDir(getOriginalCwd()),
2288
+ `${sessionId}.jsonl`
2289
+ );
2290
+ return loadTranscriptFile(sessionFile);
2291
+ }
2292
+ const getSessionMessages = memoize(
2293
+ async (sessionId) => {
2294
+ const { messages } = await loadSessionFile(sessionId);
2295
+ return new Set(messages.keys());
2296
+ },
2297
+ (sessionId) => sessionId
2298
+ );
2299
+ function clearSessionMessagesCache() {
2300
+ getSessionMessages.cache.clear?.();
2301
+ }
2302
+ async function doesMessageExistInSession(sessionId, messageUuid) {
2303
+ const messageSet = await getSessionMessages(sessionId);
2304
+ return messageSet.has(messageUuid);
2305
+ }
2306
+ async function getLastSessionLog(sessionId) {
2307
+ const {
2308
+ messages,
2309
+ summaries,
2310
+ customTitles,
2311
+ tags,
2312
+ agentSettings,
2313
+ worktreeStates,
2314
+ fileHistorySnapshots,
2315
+ attributionSnapshots,
2316
+ contentReplacements,
2317
+ contextCollapseCommits,
2318
+ contextCollapseSnapshot
2319
+ } = await loadSessionFile(sessionId);
2320
+ if (messages.size === 0) return null;
2321
+ if (!getSessionMessages.cache.has(sessionId)) {
2322
+ getSessionMessages.cache.set(
2323
+ sessionId,
2324
+ Promise.resolve(new Set(messages.keys()))
2325
+ );
2326
+ }
2327
+ const lastMessage = findLatestMessage(messages.values(), (m) => !m.isSidechain);
2328
+ if (!lastMessage) return null;
2329
+ const transcript = buildConversationChain(messages, lastMessage);
2330
+ const summary = summaries.get(lastMessage.uuid);
2331
+ const customTitle = customTitles.get(lastMessage.sessionId);
2332
+ const tag = tags.get(lastMessage.sessionId);
2333
+ const agentSetting = agentSettings.get(sessionId);
2334
+ return {
2335
+ ...convertToLogOption(
2336
+ transcript,
2337
+ 0,
2338
+ summary,
2339
+ customTitle,
2340
+ buildFileHistorySnapshotChain(fileHistorySnapshots, transcript),
2341
+ tag,
2342
+ getTranscriptPathForSession(sessionId),
2343
+ buildAttributionSnapshotChain(attributionSnapshots, transcript),
2344
+ agentSetting,
2345
+ contentReplacements.get(sessionId) ?? []
2346
+ ),
2347
+ worktreeSession: worktreeStates.get(sessionId),
2348
+ contextCollapseCommits: contextCollapseCommits.filter(
2349
+ (e) => e.sessionId === sessionId
2350
+ ),
2351
+ contextCollapseSnapshot: contextCollapseSnapshot?.sessionId === sessionId ? contextCollapseSnapshot : void 0
2352
+ };
2353
+ }
2354
+ async function loadMessageLogs(limit) {
2355
+ const sessionLogs = await fetchLogs(limit);
2356
+ const { logs: enriched } = await enrichLogs(
2357
+ sessionLogs,
2358
+ 0,
2359
+ sessionLogs.length
2360
+ );
2361
+ const sorted = sortLogs(enriched);
2362
+ sorted.forEach((log, i) => {
2363
+ log.value = i;
2364
+ });
2365
+ return sorted;
2366
+ }
2367
+ async function loadAllProjectsMessageLogs(limit, options) {
2368
+ if (options?.skipIndex) {
2369
+ return loadAllProjectsMessageLogsFull(limit);
2370
+ }
2371
+ const result = await loadAllProjectsMessageLogsProgressive(
2372
+ limit,
2373
+ options?.initialEnrichCount ?? INITIAL_ENRICH_COUNT
2374
+ );
2375
+ return result.logs;
2376
+ }
2377
+ async function loadAllProjectsMessageLogsFull(limit) {
2378
+ const projectsDir = getProjectsDir();
2379
+ let dirents;
2380
+ try {
2381
+ dirents = await readdir(projectsDir, { withFileTypes: true });
2382
+ } catch {
2383
+ return [];
2384
+ }
2385
+ const projectDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join(projectsDir, dirent.name));
2386
+ const logsPerProject = await Promise.all(
2387
+ projectDirs.map((projectDir) => getLogsWithoutIndex(projectDir, limit))
2388
+ );
2389
+ const allLogs = logsPerProject.flat();
2390
+ const deduped = /* @__PURE__ */ new Map();
2391
+ for (const log of allLogs) {
2392
+ const key = `${log.sessionId ?? ""}:${log.leafUuid ?? ""}`;
2393
+ const existing = deduped.get(key);
2394
+ if (!existing || log.modified.getTime() > existing.modified.getTime()) {
2395
+ deduped.set(key, log);
2396
+ }
2397
+ }
2398
+ const sorted = sortLogs([...deduped.values()]);
2399
+ sorted.forEach((log, i) => {
2400
+ log.value = i;
2401
+ });
2402
+ return sorted;
2403
+ }
2404
+ async function loadAllProjectsMessageLogsProgressive(limit, initialEnrichCount = INITIAL_ENRICH_COUNT) {
2405
+ const projectsDir = getProjectsDir();
2406
+ let dirents;
2407
+ try {
2408
+ dirents = await readdir(projectsDir, { withFileTypes: true });
2409
+ } catch {
2410
+ return { logs: [], allStatLogs: [], nextIndex: 0 };
2411
+ }
2412
+ const projectDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join(projectsDir, dirent.name));
2413
+ const rawLogs = [];
2414
+ for (const projectDir of projectDirs) {
2415
+ rawLogs.push(...await getSessionFilesLite(projectDir, limit));
2416
+ }
2417
+ const sorted = deduplicateLogsBySessionId(rawLogs);
2418
+ const { logs, nextIndex } = await enrichLogs(sorted, 0, initialEnrichCount);
2419
+ logs.forEach((log, i) => {
2420
+ log.value = i;
2421
+ });
2422
+ return { logs, allStatLogs: sorted, nextIndex };
2423
+ }
2424
+ async function loadSameRepoMessageLogs(worktreePaths, limit, initialEnrichCount = INITIAL_ENRICH_COUNT) {
2425
+ const result = await loadSameRepoMessageLogsProgressive(
2426
+ worktreePaths,
2427
+ limit,
2428
+ initialEnrichCount
2429
+ );
2430
+ return result.logs;
2431
+ }
2432
+ async function loadSameRepoMessageLogsProgressive(worktreePaths, limit, initialEnrichCount = INITIAL_ENRICH_COUNT) {
2433
+ logForDebugging(
2434
+ `/resume: loading sessions for cwd=${getOriginalCwd()}, worktrees=[${worktreePaths.join(", ")}]`
2435
+ );
2436
+ const allStatLogs = await getStatOnlyLogsForWorktrees(worktreePaths, limit);
2437
+ logForDebugging(`/resume: found ${allStatLogs.length} session files on disk`);
2438
+ const { logs, nextIndex } = await enrichLogs(
2439
+ allStatLogs,
2440
+ 0,
2441
+ initialEnrichCount
2442
+ );
2443
+ logs.forEach((log, i) => {
2444
+ log.value = i;
2445
+ });
2446
+ return { logs, allStatLogs, nextIndex };
2447
+ }
2448
+ async function getStatOnlyLogsForWorktrees(worktreePaths, limit) {
2449
+ const projectsDir = getProjectsDir();
2450
+ if (worktreePaths.length <= 1) {
2451
+ const cwd = getOriginalCwd();
2452
+ const projectDir = getProjectDir(cwd);
2453
+ return getSessionFilesLite(projectDir, void 0, cwd);
2454
+ }
2455
+ const caseInsensitive = process.platform === "win32";
2456
+ const indexed = worktreePaths.map((wt) => {
2457
+ const sanitized = sanitizePath(wt);
2458
+ return {
2459
+ path: wt,
2460
+ prefix: caseInsensitive ? sanitized.toLowerCase() : sanitized
2461
+ };
2462
+ });
2463
+ indexed.sort((a, b) => b.prefix.length - a.prefix.length);
2464
+ const allLogs = [];
2465
+ const seenDirs = /* @__PURE__ */ new Set();
2466
+ let allDirents;
2467
+ try {
2468
+ allDirents = await readdir(projectsDir, { withFileTypes: true });
2469
+ } catch (e) {
2470
+ logForDebugging(
2471
+ `Failed to read projects dir ${projectsDir}, falling back to current project: ${e}`
2472
+ );
2473
+ const projectDir = getProjectDir(getOriginalCwd());
2474
+ return getSessionFilesLite(projectDir, limit, getOriginalCwd());
2475
+ }
2476
+ for (const dirent of allDirents) {
2477
+ if (!dirent.isDirectory()) continue;
2478
+ const dirName = caseInsensitive ? dirent.name.toLowerCase() : dirent.name;
2479
+ if (seenDirs.has(dirName)) continue;
2480
+ for (const { path: wtPath, prefix } of indexed) {
2481
+ if (dirName === prefix || dirName.startsWith(prefix + "-")) {
2482
+ seenDirs.add(dirName);
2483
+ allLogs.push(
2484
+ ...await getSessionFilesLite(
2485
+ join(projectsDir, dirent.name),
2486
+ void 0,
2487
+ wtPath
2488
+ )
2489
+ );
2490
+ break;
2491
+ }
2492
+ }
2493
+ }
2494
+ return deduplicateLogsBySessionId(allLogs);
2495
+ }
2496
+ async function getAgentTranscript(agentId) {
2497
+ const agentFile = getAgentTranscriptPath(agentId);
2498
+ try {
2499
+ const { messages, agentContentReplacements } = await loadTranscriptFile(agentFile);
2500
+ const agentMessages = Array.from(messages.values()).filter(
2501
+ (msg) => msg.agentId === agentId && msg.isSidechain
2502
+ );
2503
+ if (agentMessages.length === 0) {
2504
+ return null;
2505
+ }
2506
+ const parentUuids = new Set(agentMessages.map((msg) => msg.parentUuid));
2507
+ const leafMessage = findLatestMessage(
2508
+ agentMessages,
2509
+ (msg) => !parentUuids.has(msg.uuid)
2510
+ );
2511
+ if (!leafMessage) {
2512
+ return null;
2513
+ }
2514
+ const transcript = buildConversationChain(messages, leafMessage);
2515
+ const agentTranscript = transcript.filter((msg) => msg.agentId === agentId);
2516
+ return {
2517
+ // Convert TranscriptMessage[] to Message[]
2518
+ messages: agentTranscript.map(
2519
+ ({ isSidechain, parentUuid, ...msg }) => msg
2520
+ ),
2521
+ contentReplacements: agentContentReplacements.get(agentId) ?? []
2522
+ };
2523
+ } catch {
2524
+ return null;
2525
+ }
2526
+ }
2527
+ function extractAgentIdsFromMessages(messages) {
2528
+ const agentIds = [];
2529
+ for (const message of messages) {
2530
+ if (message.type === "progress" && message.data && typeof message.data === "object" && "type" in message.data && (message.data.type === "agent_progress" || message.data.type === "skill_progress") && "agentId" in message.data && typeof message.data.agentId === "string") {
2531
+ agentIds.push(message.data.agentId);
2532
+ }
2533
+ }
2534
+ return uniq(agentIds);
2535
+ }
2536
+ function extractTeammateTranscriptsFromTasks(tasks) {
2537
+ const transcripts = {};
2538
+ for (const task of Object.values(tasks)) {
2539
+ if (task.type === "in_process_teammate" && task.identity?.agentId && task.messages && task.messages.length > 0) {
2540
+ transcripts[task.identity.agentId] = task.messages;
2541
+ }
2542
+ }
2543
+ return transcripts;
2544
+ }
2545
+ async function loadSubagentTranscripts(agentIds) {
2546
+ const results = await Promise.all(
2547
+ agentIds.map(async (agentId) => {
2548
+ try {
2549
+ const result = await getAgentTranscript(asAgentId(agentId));
2550
+ if (result && result.messages.length > 0) {
2551
+ return { agentId, transcript: result.messages };
2552
+ }
2553
+ return null;
2554
+ } catch {
2555
+ return null;
2556
+ }
2557
+ })
2558
+ );
2559
+ const transcripts = {};
2560
+ for (const result of results) {
2561
+ if (result) {
2562
+ transcripts[result.agentId] = result.transcript;
2563
+ }
2564
+ }
2565
+ return transcripts;
2566
+ }
2567
+ async function loadAllSubagentTranscriptsFromDisk() {
2568
+ const subagentsDir = join(
2569
+ getSessionProjectDir() ?? getProjectDir(getOriginalCwd()),
2570
+ getSessionId(),
2571
+ "subagents"
2572
+ );
2573
+ let entries;
2574
+ try {
2575
+ entries = await readdir(subagentsDir, { withFileTypes: true });
2576
+ } catch {
2577
+ return {};
2578
+ }
2579
+ const agentIds = entries.filter(
2580
+ (d) => d.isFile() && d.name.startsWith("agent-") && d.name.endsWith(".jsonl")
2581
+ ).map((d) => d.name.slice("agent-".length, -".jsonl".length));
2582
+ return loadSubagentTranscripts(agentIds);
2583
+ }
2584
+ function isLoggableMessage(m) {
2585
+ if (m.type === "progress") return false;
2586
+ if (m.type === "attachment" && getUserType() !== "ant") {
2587
+ if (m.attachment.type === "hook_additional_context" && isEnvTruthy(process.env.XCODE_SAVE_HOOK_ADDITIONAL_CONTEXT)) {
2588
+ return true;
2589
+ }
2590
+ return false;
2591
+ }
2592
+ return true;
2593
+ }
2594
+ function collectReplIds(messages) {
2595
+ const ids = /* @__PURE__ */ new Set();
2596
+ for (const m of messages) {
2597
+ if (m.type === "assistant" && Array.isArray(m.message.content)) {
2598
+ for (const b of m.message.content) {
2599
+ if (b.type === "tool_use" && b.name === REPL_TOOL_NAME) {
2600
+ ids.add(b.id);
2601
+ }
2602
+ }
2603
+ }
2604
+ }
2605
+ return ids;
2606
+ }
2607
+ function transformMessagesForExternalTranscript(messages, replIds) {
2608
+ return messages.flatMap((m) => {
2609
+ if (m.type === "assistant" && Array.isArray(m.message.content)) {
2610
+ const content = m.message.content;
2611
+ const hasRepl = content.some(
2612
+ (b) => b.type === "tool_use" && b.name === REPL_TOOL_NAME
2613
+ );
2614
+ const filtered = hasRepl ? content.filter(
2615
+ (b) => !(b.type === "tool_use" && b.name === REPL_TOOL_NAME)
2616
+ ) : content;
2617
+ if (filtered.length === 0) return [];
2618
+ if (m.isVirtual) {
2619
+ const { isVirtual: _omit, ...rest } = m;
2620
+ return [{ ...rest, message: { ...m.message, content: filtered } }];
2621
+ }
2622
+ if (filtered !== content) {
2623
+ return [{ ...m, message: { ...m.message, content: filtered } }];
2624
+ }
2625
+ return [m];
2626
+ }
2627
+ if (m.type === "user" && Array.isArray(m.message.content)) {
2628
+ const content = m.message.content;
2629
+ const hasRepl = content.some(
2630
+ (b) => b.type === "tool_result" && replIds.has(b.tool_use_id)
2631
+ );
2632
+ const filtered = hasRepl ? content.filter(
2633
+ (b) => !(b.type === "tool_result" && replIds.has(b.tool_use_id))
2634
+ ) : content;
2635
+ if (filtered.length === 0) return [];
2636
+ if (m.isVirtual) {
2637
+ const { isVirtual: _omit, ...rest } = m;
2638
+ return [{ ...rest, message: { ...m.message, content: filtered } }];
2639
+ }
2640
+ if (filtered !== content) {
2641
+ return [{ ...m, message: { ...m.message, content: filtered } }];
2642
+ }
2643
+ return [m];
2644
+ }
2645
+ if ("isVirtual" in m && m.isVirtual) {
2646
+ const { isVirtual: _omit, ...rest } = m;
2647
+ return [rest];
2648
+ }
2649
+ return [m];
2650
+ });
2651
+ }
2652
+ function cleanMessagesForLogging(messages, allMessages = messages) {
2653
+ const filtered = messages.filter(isLoggableMessage);
2654
+ return getUserType() !== "ant" ? transformMessagesForExternalTranscript(
2655
+ filtered,
2656
+ collectReplIds(allMessages)
2657
+ ) : filtered;
2658
+ }
2659
+ async function getLogByIndex(index) {
2660
+ const logs = await loadMessageLogs();
2661
+ return logs[index] || null;
2662
+ }
2663
+ async function findUnresolvedToolUse(toolUseId) {
2664
+ try {
2665
+ const transcriptPath = getTranscriptPath();
2666
+ const { messages } = await loadTranscriptFile(transcriptPath);
2667
+ let toolUseMessage = null;
2668
+ for (const message of messages.values()) {
2669
+ if (message.type === "assistant") {
2670
+ const content = message.message.content;
2671
+ if (Array.isArray(content)) {
2672
+ for (const block of content) {
2673
+ if (block.type === "tool_use" && block.id === toolUseId) {
2674
+ toolUseMessage = message;
2675
+ break;
2676
+ }
2677
+ }
2678
+ }
2679
+ } else if (message.type === "user") {
2680
+ const content = message.message.content;
2681
+ if (Array.isArray(content)) {
2682
+ for (const block of content) {
2683
+ if (block.type === "tool_result" && block.tool_use_id === toolUseId) {
2684
+ return null;
2685
+ }
2686
+ }
2687
+ }
2688
+ }
2689
+ }
2690
+ return toolUseMessage;
2691
+ } catch {
2692
+ return null;
2693
+ }
2694
+ }
2695
+ async function getSessionFilesWithMtime(projectDir) {
2696
+ const sessionFilesMap = /* @__PURE__ */ new Map();
2697
+ let dirents;
2698
+ try {
2699
+ dirents = await readdir(projectDir, { withFileTypes: true });
2700
+ } catch {
2701
+ return sessionFilesMap;
2702
+ }
2703
+ const candidates = [];
2704
+ for (const dirent of dirents) {
2705
+ if (!dirent.isFile() || !dirent.name.endsWith(".jsonl")) continue;
2706
+ const sessionId = validateUuid(basename(dirent.name, ".jsonl"));
2707
+ if (!sessionId) continue;
2708
+ candidates.push({ sessionId, filePath: join(projectDir, dirent.name) });
2709
+ }
2710
+ await Promise.all(
2711
+ candidates.map(async ({ sessionId, filePath }) => {
2712
+ try {
2713
+ const st = await stat(filePath);
2714
+ sessionFilesMap.set(sessionId, {
2715
+ path: filePath,
2716
+ mtime: st.mtime.getTime(),
2717
+ ctime: st.birthtime.getTime(),
2718
+ size: st.size
2719
+ });
2720
+ } catch {
2721
+ logForDebugging(`Failed to stat session file: ${filePath}`);
2722
+ }
2723
+ })
2724
+ );
2725
+ return sessionFilesMap;
2726
+ }
2727
+ const INITIAL_ENRICH_COUNT = 50;
2728
+ async function loadAllLogsFromSessionFile(sessionFile, projectPathOverride) {
2729
+ const {
2730
+ messages,
2731
+ summaries,
2732
+ customTitles,
2733
+ tags,
2734
+ agentNames,
2735
+ agentColors,
2736
+ agentSettings,
2737
+ prNumbers,
2738
+ prUrls,
2739
+ prRepositories,
2740
+ modes,
2741
+ fileHistorySnapshots,
2742
+ attributionSnapshots,
2743
+ contentReplacements,
2744
+ leafUuids
2745
+ } = await loadTranscriptFile(sessionFile, { keepAllLeaves: true });
2746
+ if (messages.size === 0) return [];
2747
+ const leafMessages = [];
2748
+ const childrenByParent = /* @__PURE__ */ new Map();
2749
+ for (const msg of messages.values()) {
2750
+ if (leafUuids.has(msg.uuid)) {
2751
+ leafMessages.push(msg);
2752
+ } else if (msg.parentUuid) {
2753
+ const siblings = childrenByParent.get(msg.parentUuid);
2754
+ if (siblings) {
2755
+ siblings.push(msg);
2756
+ } else {
2757
+ childrenByParent.set(msg.parentUuid, [msg]);
2758
+ }
2759
+ }
2760
+ }
2761
+ const logs = [];
2762
+ for (const leafMessage of leafMessages) {
2763
+ const chain = buildConversationChain(messages, leafMessage);
2764
+ if (chain.length === 0) continue;
2765
+ const trailingMessages = childrenByParent.get(leafMessage.uuid);
2766
+ if (trailingMessages) {
2767
+ trailingMessages.sort(
2768
+ (a, b) => a.timestamp < b.timestamp ? -1 : a.timestamp > b.timestamp ? 1 : 0
2769
+ );
2770
+ chain.push(...trailingMessages);
2771
+ }
2772
+ const firstMessage = chain[0];
2773
+ const sessionId = leafMessage.sessionId;
2774
+ logs.push({
2775
+ date: leafMessage.timestamp,
2776
+ messages: removeExtraFields(chain),
2777
+ fullPath: sessionFile,
2778
+ value: 0,
2779
+ created: new Date(firstMessage.timestamp),
2780
+ modified: new Date(leafMessage.timestamp),
2781
+ firstPrompt: extractFirstPrompt(chain),
2782
+ messageCount: countVisibleMessages(chain),
2783
+ isSidechain: firstMessage.isSidechain ?? false,
2784
+ sessionId,
2785
+ leafUuid: leafMessage.uuid,
2786
+ summary: summaries.get(leafMessage.uuid),
2787
+ customTitle: customTitles.get(sessionId),
2788
+ tag: tags.get(sessionId),
2789
+ agentName: agentNames.get(sessionId),
2790
+ agentColor: agentColors.get(sessionId),
2791
+ agentSetting: agentSettings.get(sessionId),
2792
+ mode: modes.get(sessionId),
2793
+ prNumber: prNumbers.get(sessionId),
2794
+ prUrl: prUrls.get(sessionId),
2795
+ prRepository: prRepositories.get(sessionId),
2796
+ gitBranch: leafMessage.gitBranch,
2797
+ projectPath: projectPathOverride ?? firstMessage.cwd,
2798
+ fileHistorySnapshots: buildFileHistorySnapshotChain(
2799
+ fileHistorySnapshots,
2800
+ chain
2801
+ ),
2802
+ attributionSnapshots: buildAttributionSnapshotChain(
2803
+ attributionSnapshots,
2804
+ chain
2805
+ ),
2806
+ contentReplacements: contentReplacements.get(sessionId) ?? []
2807
+ });
2808
+ }
2809
+ return logs;
2810
+ }
2811
+ async function getLogsWithoutIndex(projectDir, limit) {
2812
+ const sessionFilesMap = await getSessionFilesWithMtime(projectDir);
2813
+ if (sessionFilesMap.size === 0) return [];
2814
+ let filesToProcess;
2815
+ if (limit && sessionFilesMap.size > limit) {
2816
+ filesToProcess = [...sessionFilesMap.values()].sort((a, b) => b.mtime - a.mtime).slice(0, limit);
2817
+ } else {
2818
+ filesToProcess = [...sessionFilesMap.values()];
2819
+ }
2820
+ const logs = [];
2821
+ for (const fileInfo of filesToProcess) {
2822
+ try {
2823
+ const fileLogOptions = await loadAllLogsFromSessionFile(fileInfo.path);
2824
+ logs.push(...fileLogOptions);
2825
+ } catch {
2826
+ logForDebugging(`Failed to load session file: ${fileInfo.path}`);
2827
+ }
2828
+ }
2829
+ return logs;
2830
+ }
2831
+ async function readLiteMetadata(filePath, fileSize, buf) {
2832
+ const { head, tail } = await readHeadAndTail(filePath, fileSize, buf);
2833
+ if (!head) return { firstPrompt: "", isSidechain: false };
2834
+ const isSidechain = head.includes('"isSidechain":true') || head.includes('"isSidechain": true');
2835
+ const projectPath = extractJsonStringField(head, "cwd");
2836
+ const teamName = extractJsonStringField(head, "teamName");
2837
+ const agentSetting = extractJsonStringField(head, "agentSetting");
2838
+ const firstPrompt = extractLastJsonStringField(tail, "lastPrompt") || extractFirstPromptFromChunk(head) || extractJsonStringFieldPrefix(head, "content", 200) || extractJsonStringFieldPrefix(head, "text", 200) || "";
2839
+ const customTitle = extractLastJsonStringField(tail, "customTitle") ?? extractLastJsonStringField(head, "customTitle") ?? extractLastJsonStringField(tail, "aiTitle") ?? extractLastJsonStringField(head, "aiTitle");
2840
+ const summary = extractLastJsonStringField(tail, "summary");
2841
+ const tag = extractLastJsonStringField(tail, "tag");
2842
+ const gitBranch = extractLastJsonStringField(tail, "gitBranch") ?? extractJsonStringField(head, "gitBranch");
2843
+ const prUrl = extractLastJsonStringField(tail, "prUrl");
2844
+ const prRepository = extractLastJsonStringField(tail, "prRepository");
2845
+ let prNumber;
2846
+ const prNumStr = extractLastJsonStringField(tail, "prNumber");
2847
+ if (prNumStr) {
2848
+ prNumber = parseInt(prNumStr, 10) || void 0;
2849
+ }
2850
+ if (!prNumber) {
2851
+ const prNumMatch = tail.lastIndexOf('"prNumber":');
2852
+ if (prNumMatch >= 0) {
2853
+ const afterColon = tail.slice(prNumMatch + 11, prNumMatch + 25);
2854
+ const num = parseInt(afterColon.trim(), 10);
2855
+ if (num > 0) prNumber = num;
2856
+ }
2857
+ }
2858
+ return {
2859
+ firstPrompt,
2860
+ gitBranch,
2861
+ isSidechain,
2862
+ projectPath,
2863
+ teamName,
2864
+ customTitle,
2865
+ summary,
2866
+ tag,
2867
+ agentSetting,
2868
+ prNumber,
2869
+ prUrl,
2870
+ prRepository
2871
+ };
2872
+ }
2873
+ function extractFirstPromptFromChunk(chunk) {
2874
+ let start = 0;
2875
+ let hasTickMessages = false;
2876
+ let firstCommandFallback = "";
2877
+ while (start < chunk.length) {
2878
+ const newlineIdx = chunk.indexOf("\n", start);
2879
+ const line = newlineIdx >= 0 ? chunk.slice(start, newlineIdx) : chunk.slice(start);
2880
+ start = newlineIdx >= 0 ? newlineIdx + 1 : chunk.length;
2881
+ if (!line.includes('"type":"user"') && !line.includes('"type": "user"')) {
2882
+ continue;
2883
+ }
2884
+ if (line.includes('"tool_result"')) continue;
2885
+ if (line.includes('"isMeta":true') || line.includes('"isMeta": true'))
2886
+ continue;
2887
+ try {
2888
+ const entry = jsonParse(line);
2889
+ if (entry.type !== "user") continue;
2890
+ const message = entry.message;
2891
+ if (!message) continue;
2892
+ const content = message.content;
2893
+ const texts = [];
2894
+ if (typeof content === "string") {
2895
+ texts.push(content);
2896
+ } else if (Array.isArray(content)) {
2897
+ for (const block of content) {
2898
+ const b = block;
2899
+ if (b.type === "text" && typeof b.text === "string") {
2900
+ texts.push(b.text);
2901
+ }
2902
+ }
2903
+ }
2904
+ for (const text of texts) {
2905
+ if (!text) continue;
2906
+ let result = text.replace(/\n/g, " ").trim();
2907
+ const commandNameTag = extractTag(result, COMMAND_NAME_TAG);
2908
+ if (commandNameTag) {
2909
+ const name = commandNameTag.replace(/^\//, "");
2910
+ const commandArgs = extractTag(result, "command-args")?.trim() || "";
2911
+ if (builtInCommandNames().has(name) || !commandArgs) {
2912
+ if (!firstCommandFallback) {
2913
+ firstCommandFallback = commandNameTag;
2914
+ }
2915
+ continue;
2916
+ }
2917
+ return commandArgs ? `${commandNameTag} ${commandArgs}` : commandNameTag;
2918
+ }
2919
+ const bashInput = extractTag(result, "bash-input");
2920
+ if (bashInput) return `! ${bashInput}`;
2921
+ if (SKIP_FIRST_PROMPT_PATTERN.test(result)) {
2922
+ if ((feature("PROACTIVE") || feature("KAIROS")) && result.startsWith(`<${TICK_TAG}>`))
2923
+ hasTickMessages = true;
2924
+ continue;
2925
+ }
2926
+ if (result.length > 200) {
2927
+ result = result.slice(0, 200).trim() + "\u2026";
2928
+ }
2929
+ return result;
2930
+ }
2931
+ } catch {
2932
+ continue;
2933
+ }
2934
+ }
2935
+ if (firstCommandFallback) return firstCommandFallback;
2936
+ if ((feature("PROACTIVE") || feature("KAIROS")) && hasTickMessages)
2937
+ return "Proactive session";
2938
+ return "";
2939
+ }
2940
+ function extractJsonStringFieldPrefix(text, key, maxLen) {
2941
+ const patterns = [`"${key}":"`, `"${key}": "`];
2942
+ for (const pattern of patterns) {
2943
+ const idx = text.indexOf(pattern);
2944
+ if (idx < 0) continue;
2945
+ const valueStart = idx + pattern.length;
2946
+ let i = valueStart;
2947
+ let collected = 0;
2948
+ while (i < text.length && collected < maxLen) {
2949
+ if (text[i] === "\\") {
2950
+ i += 2;
2951
+ collected++;
2952
+ continue;
2953
+ }
2954
+ if (text[i] === '"') break;
2955
+ i++;
2956
+ collected++;
2957
+ }
2958
+ const raw = text.slice(valueStart, i);
2959
+ return raw.replace(/\\n/g, " ").replace(/\\t/g, " ").trim();
2960
+ }
2961
+ return "";
2962
+ }
2963
+ function deduplicateLogsBySessionId(logs) {
2964
+ const deduped = /* @__PURE__ */ new Map();
2965
+ for (const log of logs) {
2966
+ if (!log.sessionId) continue;
2967
+ const existing = deduped.get(log.sessionId);
2968
+ if (!existing || log.modified.getTime() > existing.modified.getTime()) {
2969
+ deduped.set(log.sessionId, log);
2970
+ }
2971
+ }
2972
+ return sortLogs([...deduped.values()]).map((log, i) => ({
2973
+ ...log,
2974
+ value: i
2975
+ }));
2976
+ }
2977
+ async function getSessionFilesLite(projectDir, limit, projectPath) {
2978
+ const sessionFilesMap = await getSessionFilesWithMtime(projectDir);
2979
+ let entries = [...sessionFilesMap.entries()].sort(
2980
+ (a, b) => b[1].mtime - a[1].mtime
2981
+ );
2982
+ if (limit && entries.length > limit) {
2983
+ entries = entries.slice(0, limit);
2984
+ }
2985
+ const logs = [];
2986
+ for (const [sessionId, fileInfo] of entries) {
2987
+ logs.push({
2988
+ date: new Date(fileInfo.mtime).toISOString(),
2989
+ messages: [],
2990
+ isLite: true,
2991
+ fullPath: fileInfo.path,
2992
+ value: 0,
2993
+ created: new Date(fileInfo.ctime),
2994
+ modified: new Date(fileInfo.mtime),
2995
+ firstPrompt: "",
2996
+ messageCount: 0,
2997
+ fileSize: fileInfo.size,
2998
+ isSidechain: false,
2999
+ sessionId,
3000
+ projectPath
3001
+ });
3002
+ }
3003
+ const sorted = sortLogs(logs);
3004
+ sorted.forEach((log, i) => {
3005
+ log.value = i;
3006
+ });
3007
+ return sorted;
3008
+ }
3009
+ async function enrichLog(log, readBuf) {
3010
+ if (!log.isLite || !log.fullPath) return log;
3011
+ const meta = await readLiteMetadata(log.fullPath, log.fileSize ?? 0, readBuf);
3012
+ const enriched = {
3013
+ ...log,
3014
+ isLite: false,
3015
+ firstPrompt: meta.firstPrompt,
3016
+ gitBranch: meta.gitBranch,
3017
+ isSidechain: meta.isSidechain,
3018
+ teamName: meta.teamName,
3019
+ customTitle: meta.customTitle,
3020
+ summary: meta.summary,
3021
+ tag: meta.tag,
3022
+ agentSetting: meta.agentSetting,
3023
+ prNumber: meta.prNumber,
3024
+ prUrl: meta.prUrl,
3025
+ prRepository: meta.prRepository,
3026
+ projectPath: meta.projectPath ?? log.projectPath
3027
+ };
3028
+ if (!enriched.firstPrompt && !enriched.customTitle) {
3029
+ enriched.firstPrompt = "(session)";
3030
+ }
3031
+ if (enriched.isSidechain) {
3032
+ logForDebugging(
3033
+ `Session ${log.sessionId} filtered from /resume: isSidechain=true`
3034
+ );
3035
+ return null;
3036
+ }
3037
+ if (enriched.teamName) {
3038
+ logForDebugging(
3039
+ `Session ${log.sessionId} filtered from /resume: teamName=${enriched.teamName}`
3040
+ );
3041
+ return null;
3042
+ }
3043
+ return enriched;
3044
+ }
3045
+ async function enrichLogs(allLogs, startIndex, count) {
3046
+ const result = [];
3047
+ const readBuf = Buffer.alloc(LITE_READ_BUF_SIZE);
3048
+ let i = startIndex;
3049
+ while (i < allLogs.length && result.length < count) {
3050
+ const log = allLogs[i];
3051
+ i++;
3052
+ const enriched = await enrichLog(log, readBuf);
3053
+ if (enriched) {
3054
+ result.push(enriched);
3055
+ }
3056
+ }
3057
+ const scanned = i - startIndex;
3058
+ const filtered = scanned - result.length;
3059
+ if (filtered > 0) {
3060
+ logForDebugging(
3061
+ `/resume: enriched ${scanned} sessions, ${filtered} filtered out, ${result.length} visible (${allLogs.length - i} remaining on disk)`
3062
+ );
3063
+ }
3064
+ return { logs: result, nextIndex: i };
3065
+ }
3066
+ export {
3067
+ MAX_TRANSCRIPT_READ_BYTES,
3068
+ adoptResumedSessionFile,
3069
+ buildConversationChain,
3070
+ cacheSessionTitle,
3071
+ checkResumeConsistency,
3072
+ cleanMessagesForLogging,
3073
+ clearAgentTranscriptSubdir,
3074
+ clearSessionMessagesCache,
3075
+ clearSessionMetadata,
3076
+ deleteRemoteAgentMetadata,
3077
+ doesMessageExistInSession,
3078
+ enrichLogs,
3079
+ extractAgentIdsFromMessages,
3080
+ extractTeammateTranscriptsFromTasks,
3081
+ fetchLogs,
3082
+ findUnresolvedToolUse,
3083
+ flushSessionStorage,
3084
+ getAgentTranscript,
3085
+ getAgentTranscriptPath,
3086
+ getCurrentSessionAgentColor,
3087
+ getCurrentSessionTag,
3088
+ getCurrentSessionTitle,
3089
+ getFirstMeaningfulUserMessageTextContent,
3090
+ getLastSessionLog,
3091
+ getLogByIndex,
3092
+ getNodeEnv,
3093
+ getProjectDir,
3094
+ getProjectsDir,
3095
+ getSessionFilesLite,
3096
+ getSessionFilesWithMtime,
3097
+ getSessionIdFromLog,
3098
+ getTranscriptPath,
3099
+ getTranscriptPathForSession,
3100
+ getUserType,
3101
+ hydrateFromCCRv2InternalEvents,
3102
+ hydrateRemoteSession,
3103
+ isChainParticipant,
3104
+ isCustomTitleEnabled,
3105
+ isEphemeralToolProgress,
3106
+ isLiteLog,
3107
+ isLoggableMessage,
3108
+ isTranscriptMessage,
3109
+ linkSessionToPR,
3110
+ listRemoteAgentMetadata,
3111
+ loadAllLogsFromSessionFile,
3112
+ loadAllProjectsMessageLogs,
3113
+ loadAllProjectsMessageLogsProgressive,
3114
+ loadAllSubagentTranscriptsFromDisk,
3115
+ loadFullLog,
3116
+ loadMessageLogs,
3117
+ loadSameRepoMessageLogs,
3118
+ loadSameRepoMessageLogsProgressive,
3119
+ loadSubagentTranscripts,
3120
+ loadTranscriptFile,
3121
+ loadTranscriptFromFile,
3122
+ reAppendSessionMetadata,
3123
+ readAgentMetadata,
3124
+ readRemoteAgentMetadata,
3125
+ recordAttributionSnapshot,
3126
+ recordContentReplacement,
3127
+ recordContextCollapseCommit,
3128
+ recordContextCollapseSnapshot,
3129
+ recordFileHistorySnapshot,
3130
+ recordQueueOperation,
3131
+ recordSidechainTranscript,
3132
+ recordTranscript,
3133
+ removeExtraFields,
3134
+ removeTranscriptMessage,
3135
+ resetProjectFlushStateForTesting,
3136
+ resetProjectForTesting,
3137
+ resetSessionFilePointer,
3138
+ restoreSessionMetadata,
3139
+ saveAgentColor,
3140
+ saveAgentName,
3141
+ saveAgentSetting,
3142
+ saveAiGeneratedTitle,
3143
+ saveCustomTitle,
3144
+ saveMode,
3145
+ saveTag,
3146
+ saveTaskSummary,
3147
+ saveWorktreeState,
3148
+ searchSessionsByCustomTitle,
3149
+ sessionIdExists,
3150
+ setAgentTranscriptSubdir,
3151
+ setInternalEventReader,
3152
+ setInternalEventWriter,
3153
+ setRemoteIngressUrlForTesting,
3154
+ setSessionFileForTesting,
3155
+ writeAgentMetadata,
3156
+ writeRemoteAgentMetadata
3157
+ };