subagent-cli 0.3.0 → 0.3.1

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 (2177) hide show
  1. package/dist/sa +0 -0
  2. package/package.json +2 -8
  3. package/_entry.ts +0 -2
  4. package/bunfig.toml +0 -2
  5. package/src/QueryEngine.ts +0 -1295
  6. package/src/Task.ts +0 -125
  7. package/src/Tool.ts +0 -792
  8. package/src/_stubs/bun-bundle.ts +0 -6
  9. package/src/assistant/AssistantSessionChooser.ts +0 -2
  10. package/src/assistant/gate.ts +0 -2
  11. package/src/assistant/index.ts +0 -2
  12. package/src/assistant/sessionDiscovery.ts +0 -1
  13. package/src/assistant/sessionHistory.ts +0 -87
  14. package/src/bootstrap/state.ts +0 -1762
  15. package/src/bridge/bridgeApi.ts +0 -539
  16. package/src/bridge/bridgeConfig.ts +0 -48
  17. package/src/bridge/bridgeDebug.ts +0 -135
  18. package/src/bridge/bridgeEnabled.ts +0 -202
  19. package/src/bridge/bridgeMain.ts +0 -2999
  20. package/src/bridge/bridgeMessaging.ts +0 -461
  21. package/src/bridge/bridgePermissionCallbacks.ts +0 -43
  22. package/src/bridge/bridgePointer.ts +0 -210
  23. package/src/bridge/bridgeStatusUtil.ts +0 -163
  24. package/src/bridge/bridgeUI.ts +0 -530
  25. package/src/bridge/capacityWake.ts +0 -56
  26. package/src/bridge/codeSessionApi.ts +0 -168
  27. package/src/bridge/createSession.ts +0 -384
  28. package/src/bridge/debugUtils.ts +0 -141
  29. package/src/bridge/envLessBridgeConfig.ts +0 -165
  30. package/src/bridge/flushGate.ts +0 -71
  31. package/src/bridge/inboundAttachments.ts +0 -175
  32. package/src/bridge/inboundMessages.ts +0 -80
  33. package/src/bridge/initReplBridge.ts +0 -569
  34. package/src/bridge/jwtUtils.ts +0 -256
  35. package/src/bridge/peerSessions.ts +0 -2
  36. package/src/bridge/pollConfig.ts +0 -110
  37. package/src/bridge/pollConfigDefaults.ts +0 -82
  38. package/src/bridge/remoteBridgeCore.ts +0 -1008
  39. package/src/bridge/replBridge.ts +0 -2406
  40. package/src/bridge/replBridgeHandle.ts +0 -36
  41. package/src/bridge/replBridgeTransport.ts +0 -370
  42. package/src/bridge/sessionIdCompat.ts +0 -57
  43. package/src/bridge/sessionRunner.ts +0 -550
  44. package/src/bridge/trustedDevice.ts +0 -210
  45. package/src/bridge/types.ts +0 -262
  46. package/src/bridge/webhookSanitizer.ts +0 -2
  47. package/src/bridge/workSecret.ts +0 -127
  48. package/src/buddy/CompanionSprite.tsx +0 -371
  49. package/src/buddy/companion.ts +0 -133
  50. package/src/buddy/prompt.ts +0 -36
  51. package/src/buddy/sprites.ts +0 -514
  52. package/src/buddy/types.ts +0 -148
  53. package/src/buddy/useBuddyNotification.tsx +0 -98
  54. package/src/cli/bg.ts +0 -2
  55. package/src/cli/exit.ts +0 -31
  56. package/src/cli/handlers/agents.ts +0 -70
  57. package/src/cli/handlers/ant.ts +0 -2
  58. package/src/cli/handlers/auth.ts +0 -330
  59. package/src/cli/handlers/autoMode.ts +0 -170
  60. package/src/cli/handlers/mcp.tsx +0 -362
  61. package/src/cli/handlers/plugins.ts +0 -878
  62. package/src/cli/handlers/templateJobs.ts +0 -2
  63. package/src/cli/handlers/util.tsx +0 -110
  64. package/src/cli/ndjsonSafeStringify.ts +0 -32
  65. package/src/cli/print.ts +0 -5594
  66. package/src/cli/remoteIO.ts +0 -255
  67. package/src/cli/rollback.ts +0 -3
  68. package/src/cli/structuredIO.ts +0 -859
  69. package/src/cli/transports/HybridTransport.ts +0 -282
  70. package/src/cli/transports/SSETransport.ts +0 -711
  71. package/src/cli/transports/SerialBatchEventUploader.ts +0 -275
  72. package/src/cli/transports/Transport.ts +0 -1
  73. package/src/cli/transports/WebSocketTransport.ts +0 -800
  74. package/src/cli/transports/WorkerStateUploader.ts +0 -131
  75. package/src/cli/transports/ccrClient.ts +0 -998
  76. package/src/cli/transports/transportUtils.ts +0 -45
  77. package/src/cli/up.ts +0 -3
  78. package/src/cli/update.ts +0 -422
  79. package/src/commands/add-dir/add-dir.tsx +0 -126
  80. package/src/commands/add-dir/index.ts +0 -11
  81. package/src/commands/add-dir/validation.ts +0 -110
  82. package/src/commands/advisor.ts +0 -109
  83. package/src/commands/agents/agents.tsx +0 -12
  84. package/src/commands/agents/index.ts +0 -10
  85. package/src/commands/agents-platform/index.ts +0 -1
  86. package/src/commands/ant-trace/index.js +0 -1
  87. package/src/commands/assistant/assistant.ts +0 -2
  88. package/src/commands/assistant/index.ts +0 -1
  89. package/src/commands/autofix-pr/index.js +0 -1
  90. package/src/commands/backfill-sessions/index.js +0 -1
  91. package/src/commands/branch/branch.ts +0 -296
  92. package/src/commands/branch/index.ts +0 -14
  93. package/src/commands/break-cache/index.js +0 -1
  94. package/src/commands/bridge/bridge.tsx +0 -509
  95. package/src/commands/bridge/index.ts +0 -26
  96. package/src/commands/bridge-kick.ts +0 -200
  97. package/src/commands/brief.ts +0 -130
  98. package/src/commands/btw/btw.tsx +0 -243
  99. package/src/commands/btw/index.ts +0 -13
  100. package/src/commands/buddy/index.ts +0 -2
  101. package/src/commands/bughunter/index.js +0 -1
  102. package/src/commands/chrome/chrome.tsx +0 -285
  103. package/src/commands/chrome/index.ts +0 -13
  104. package/src/commands/clear/caches.ts +0 -144
  105. package/src/commands/clear/clear.ts +0 -7
  106. package/src/commands/clear/conversation.ts +0 -251
  107. package/src/commands/clear/index.ts +0 -19
  108. package/src/commands/color/color.ts +0 -93
  109. package/src/commands/color/index.ts +0 -16
  110. package/src/commands/commit-push-pr.ts +0 -158
  111. package/src/commands/commit.ts +0 -92
  112. package/src/commands/compact/compact.ts +0 -287
  113. package/src/commands/compact/index.ts +0 -15
  114. package/src/commands/config/config.tsx +0 -7
  115. package/src/commands/config/index.ts +0 -11
  116. package/src/commands/context/context-noninteractive.ts +0 -325
  117. package/src/commands/context/context.tsx +0 -64
  118. package/src/commands/context/index.ts +0 -24
  119. package/src/commands/copy/copy.tsx +0 -371
  120. package/src/commands/copy/index.ts +0 -15
  121. package/src/commands/cost/cost.ts +0 -24
  122. package/src/commands/cost/index.ts +0 -23
  123. package/src/commands/createMovedToPluginCommand.ts +0 -65
  124. package/src/commands/ctx_viz/index.js +0 -1
  125. package/src/commands/debug-tool-call/index.js +0 -1
  126. package/src/commands/desktop/desktop.tsx +0 -9
  127. package/src/commands/desktop/index.ts +0 -26
  128. package/src/commands/diff/diff.tsx +0 -9
  129. package/src/commands/diff/index.ts +0 -8
  130. package/src/commands/doctor/doctor.tsx +0 -7
  131. package/src/commands/doctor/index.ts +0 -12
  132. package/src/commands/effort/effort.tsx +0 -183
  133. package/src/commands/effort/index.ts +0 -13
  134. package/src/commands/env/index.js +0 -1
  135. package/src/commands/exit/exit.tsx +0 -33
  136. package/src/commands/exit/index.ts +0 -12
  137. package/src/commands/export/export.tsx +0 -91
  138. package/src/commands/export/index.ts +0 -11
  139. package/src/commands/extra-usage/extra-usage-core.ts +0 -118
  140. package/src/commands/extra-usage/extra-usage-noninteractive.ts +0 -16
  141. package/src/commands/extra-usage/extra-usage.tsx +0 -17
  142. package/src/commands/extra-usage/index.ts +0 -31
  143. package/src/commands/fast/fast.tsx +0 -269
  144. package/src/commands/fast/index.ts +0 -26
  145. package/src/commands/feedback/feedback.tsx +0 -25
  146. package/src/commands/feedback/index.ts +0 -26
  147. package/src/commands/files/files.ts +0 -19
  148. package/src/commands/files/index.ts +0 -12
  149. package/src/commands/force-snip.ts +0 -1
  150. package/src/commands/fork/index.ts +0 -2
  151. package/src/commands/good-claude/index.js +0 -1
  152. package/src/commands/heapdump/heapdump.ts +0 -17
  153. package/src/commands/heapdump/index.ts +0 -12
  154. package/src/commands/help/help.tsx +0 -11
  155. package/src/commands/help/index.ts +0 -10
  156. package/src/commands/hooks/hooks.tsx +0 -13
  157. package/src/commands/hooks/index.ts +0 -11
  158. package/src/commands/ide/ide.tsx +0 -646
  159. package/src/commands/ide/index.ts +0 -11
  160. package/src/commands/init-verifiers.ts +0 -262
  161. package/src/commands/init.ts +0 -256
  162. package/src/commands/insights.ts +0 -3200
  163. package/src/commands/install-github-app/ApiKeyStep.tsx +0 -231
  164. package/src/commands/install-github-app/CheckExistingSecretStep.tsx +0 -190
  165. package/src/commands/install-github-app/CheckGitHubStep.tsx +0 -15
  166. package/src/commands/install-github-app/ChooseRepoStep.tsx +0 -211
  167. package/src/commands/install-github-app/CreatingStep.tsx +0 -65
  168. package/src/commands/install-github-app/ErrorStep.tsx +0 -85
  169. package/src/commands/install-github-app/ExistingWorkflowStep.tsx +0 -103
  170. package/src/commands/install-github-app/InstallAppStep.tsx +0 -94
  171. package/src/commands/install-github-app/OAuthFlowStep.tsx +0 -276
  172. package/src/commands/install-github-app/SuccessStep.tsx +0 -96
  173. package/src/commands/install-github-app/WarningsStep.tsx +0 -73
  174. package/src/commands/install-github-app/index.ts +0 -13
  175. package/src/commands/install-github-app/install-github-app.tsx +0 -587
  176. package/src/commands/install-github-app/setupGitHubActions.ts +0 -325
  177. package/src/commands/install-github-app/types.ts +0 -3
  178. package/src/commands/install-slack-app/index.ts +0 -12
  179. package/src/commands/install-slack-app/install-slack-app.ts +0 -30
  180. package/src/commands/install.tsx +0 -300
  181. package/src/commands/issue/index.js +0 -1
  182. package/src/commands/keybindings/index.ts +0 -13
  183. package/src/commands/keybindings/keybindings.ts +0 -53
  184. package/src/commands/login/index.ts +0 -14
  185. package/src/commands/login/login.tsx +0 -104
  186. package/src/commands/logout/index.ts +0 -10
  187. package/src/commands/logout/logout.tsx +0 -82
  188. package/src/commands/mcp/addCommand.ts +0 -280
  189. package/src/commands/mcp/index.ts +0 -12
  190. package/src/commands/mcp/mcp.tsx +0 -85
  191. package/src/commands/mcp/xaaIdpCommand.ts +0 -266
  192. package/src/commands/memory/index.ts +0 -10
  193. package/src/commands/memory/memory.tsx +0 -90
  194. package/src/commands/mobile/index.ts +0 -11
  195. package/src/commands/mobile/mobile.tsx +0 -274
  196. package/src/commands/mock-limits/index.js +0 -1
  197. package/src/commands/model/index.ts +0 -16
  198. package/src/commands/model/model.tsx +0 -297
  199. package/src/commands/oauth-refresh/index.js +0 -1
  200. package/src/commands/onboarding/index.js +0 -1
  201. package/src/commands/output-style/index.ts +0 -11
  202. package/src/commands/output-style/output-style.tsx +0 -7
  203. package/src/commands/passes/index.ts +0 -22
  204. package/src/commands/passes/passes.tsx +0 -24
  205. package/src/commands/peers/index.ts +0 -2
  206. package/src/commands/perf-issue/index.js +0 -1
  207. package/src/commands/permissions/index.ts +0 -11
  208. package/src/commands/permissions/permissions.tsx +0 -10
  209. package/src/commands/plan/index.ts +0 -11
  210. package/src/commands/plan/plan.tsx +0 -122
  211. package/src/commands/plugin/AddMarketplace.tsx +0 -162
  212. package/src/commands/plugin/BrowseMarketplace.tsx +0 -802
  213. package/src/commands/plugin/DiscoverPlugins.tsx +0 -781
  214. package/src/commands/plugin/ManageMarketplaces.tsx +0 -838
  215. package/src/commands/plugin/ManagePlugins.tsx +0 -2215
  216. package/src/commands/plugin/PluginErrors.tsx +0 -124
  217. package/src/commands/plugin/PluginOptionsDialog.tsx +0 -357
  218. package/src/commands/plugin/PluginOptionsFlow.tsx +0 -135
  219. package/src/commands/plugin/PluginSettings.tsx +0 -1072
  220. package/src/commands/plugin/PluginTrustWarning.tsx +0 -32
  221. package/src/commands/plugin/UnifiedInstalledCell.tsx +0 -565
  222. package/src/commands/plugin/ValidatePlugin.tsx +0 -98
  223. package/src/commands/plugin/index.tsx +0 -11
  224. package/src/commands/plugin/parseArgs.ts +0 -103
  225. package/src/commands/plugin/plugin.tsx +0 -7
  226. package/src/commands/plugin/pluginDetailsHelpers.tsx +0 -117
  227. package/src/commands/plugin/types.ts +0 -2
  228. package/src/commands/plugin/unifiedTypes.ts +0 -4
  229. package/src/commands/plugin/usePagination.ts +0 -171
  230. package/src/commands/pr_comments/index.ts +0 -50
  231. package/src/commands/privacy-settings/index.ts +0 -14
  232. package/src/commands/privacy-settings/privacy-settings.tsx +0 -58
  233. package/src/commands/proactive.ts +0 -1
  234. package/src/commands/rate-limit-options/index.ts +0 -19
  235. package/src/commands/rate-limit-options/rate-limit-options.tsx +0 -210
  236. package/src/commands/release-notes/index.ts +0 -11
  237. package/src/commands/release-notes/release-notes.ts +0 -50
  238. package/src/commands/reload-plugins/index.ts +0 -18
  239. package/src/commands/reload-plugins/reload-plugins.ts +0 -61
  240. package/src/commands/remote-env/index.ts +0 -15
  241. package/src/commands/remote-env/remote-env.tsx +0 -7
  242. package/src/commands/remote-setup/api.ts +0 -182
  243. package/src/commands/remote-setup/index.ts +0 -20
  244. package/src/commands/remote-setup/remote-setup.tsx +0 -187
  245. package/src/commands/remoteControlServer/index.ts +0 -1
  246. package/src/commands/rename/generateSessionName.ts +0 -67
  247. package/src/commands/rename/index.ts +0 -12
  248. package/src/commands/rename/rename.ts +0 -87
  249. package/src/commands/reset-limits/index.js +0 -4
  250. package/src/commands/resume/index.ts +0 -12
  251. package/src/commands/resume/resume.tsx +0 -275
  252. package/src/commands/review/UltrareviewOverageDialog.tsx +0 -96
  253. package/src/commands/review/reviewRemote.ts +0 -316
  254. package/src/commands/review/ultrareviewCommand.tsx +0 -58
  255. package/src/commands/review/ultrareviewEnabled.ts +0 -14
  256. package/src/commands/review.ts +0 -57
  257. package/src/commands/rewind/index.ts +0 -13
  258. package/src/commands/rewind/rewind.ts +0 -13
  259. package/src/commands/sandbox-toggle/index.ts +0 -50
  260. package/src/commands/sandbox-toggle/sandbox-toggle.tsx +0 -83
  261. package/src/commands/security-review.ts +0 -243
  262. package/src/commands/session/index.ts +0 -16
  263. package/src/commands/session/session.tsx +0 -140
  264. package/src/commands/share/index.js +0 -1
  265. package/src/commands/skills/index.ts +0 -10
  266. package/src/commands/skills/skills.tsx +0 -8
  267. package/src/commands/stats/index.ts +0 -10
  268. package/src/commands/stats/stats.tsx +0 -7
  269. package/src/commands/status/index.ts +0 -12
  270. package/src/commands/status/status.tsx +0 -8
  271. package/src/commands/statusline.tsx +0 -24
  272. package/src/commands/stickers/index.ts +0 -11
  273. package/src/commands/stickers/stickers.ts +0 -16
  274. package/src/commands/subscribe-pr.ts +0 -1
  275. package/src/commands/summary/index.js +0 -1
  276. package/src/commands/tag/index.ts +0 -12
  277. package/src/commands/tag/tag.tsx +0 -215
  278. package/src/commands/tasks/index.ts +0 -11
  279. package/src/commands/tasks/tasks.tsx +0 -8
  280. package/src/commands/teleport/index.js +0 -1
  281. package/src/commands/terminalSetup/index.ts +0 -23
  282. package/src/commands/terminalSetup/terminalSetup.tsx +0 -531
  283. package/src/commands/theme/index.ts +0 -10
  284. package/src/commands/theme/theme.tsx +0 -57
  285. package/src/commands/thinkback/index.ts +0 -13
  286. package/src/commands/thinkback/thinkback.tsx +0 -554
  287. package/src/commands/thinkback-play/index.ts +0 -17
  288. package/src/commands/thinkback-play/thinkback-play.ts +0 -43
  289. package/src/commands/torch.ts +0 -1
  290. package/src/commands/ultraplan.tsx +0 -471
  291. package/src/commands/upgrade/index.ts +0 -16
  292. package/src/commands/upgrade/upgrade.tsx +0 -38
  293. package/src/commands/usage/index.ts +0 -9
  294. package/src/commands/usage/usage.tsx +0 -7
  295. package/src/commands/version.ts +0 -22
  296. package/src/commands/vim/index.ts +0 -11
  297. package/src/commands/vim/vim.ts +0 -38
  298. package/src/commands/voice/index.ts +0 -20
  299. package/src/commands/voice/voice.ts +0 -150
  300. package/src/commands/workflows/index.ts +0 -2
  301. package/src/commands.ts +0 -754
  302. package/src/components/AgentProgressLine.tsx +0 -136
  303. package/src/components/App.tsx +0 -56
  304. package/src/components/ApproveApiKey.tsx +0 -123
  305. package/src/components/AutoModeOptInDialog.tsx +0 -142
  306. package/src/components/AutoUpdater.tsx +0 -198
  307. package/src/components/AutoUpdaterWrapper.tsx +0 -91
  308. package/src/components/AwsAuthStatusBox.tsx +0 -82
  309. package/src/components/BaseTextInput.tsx +0 -136
  310. package/src/components/BashModeProgress.tsx +0 -56
  311. package/src/components/BridgeDialog.tsx +0 -401
  312. package/src/components/BypassPermissionsModeDialog.tsx +0 -87
  313. package/src/components/ChannelDowngradeDialog.tsx +0 -102
  314. package/src/components/ClaudeCodeHint/PluginHintMenu.tsx +0 -78
  315. package/src/components/ClaudeInChromeOnboarding.tsx +0 -121
  316. package/src/components/ClaudeMdExternalIncludesDialog.tsx +0 -137
  317. package/src/components/ClickableImageRef.tsx +0 -73
  318. package/src/components/CompactSummary.tsx +0 -118
  319. package/src/components/ConfigurableShortcutHint.tsx +0 -57
  320. package/src/components/ConsoleOAuthFlow.tsx +0 -631
  321. package/src/components/ContextSuggestions.tsx +0 -47
  322. package/src/components/ContextVisualization.tsx +0 -489
  323. package/src/components/CoordinatorAgentStatus.tsx +0 -273
  324. package/src/components/CostThresholdDialog.tsx +0 -50
  325. package/src/components/CtrlOToExpand.tsx +0 -51
  326. package/src/components/CustomSelect/SelectMulti.tsx +0 -213
  327. package/src/components/CustomSelect/index.ts +0 -3
  328. package/src/components/CustomSelect/option-map.ts +0 -50
  329. package/src/components/CustomSelect/select-input-option.tsx +0 -488
  330. package/src/components/CustomSelect/select-option.tsx +0 -68
  331. package/src/components/CustomSelect/select.tsx +0 -690
  332. package/src/components/CustomSelect/use-multi-select-state.ts +0 -414
  333. package/src/components/CustomSelect/use-select-input.ts +0 -287
  334. package/src/components/CustomSelect/use-select-navigation.ts +0 -653
  335. package/src/components/CustomSelect/use-select-state.ts +0 -157
  336. package/src/components/DesktopHandoff.tsx +0 -193
  337. package/src/components/DesktopUpsell/DesktopUpsellStartup.tsx +0 -171
  338. package/src/components/DevBar.tsx +0 -49
  339. package/src/components/DevChannelsDialog.tsx +0 -105
  340. package/src/components/DiagnosticsDisplay.tsx +0 -95
  341. package/src/components/EffortCallout.tsx +0 -265
  342. package/src/components/EffortIndicator.ts +0 -42
  343. package/src/components/ExitFlow.tsx +0 -48
  344. package/src/components/ExportDialog.tsx +0 -128
  345. package/src/components/FallbackToolUseErrorMessage.tsx +0 -116
  346. package/src/components/FallbackToolUseRejectedMessage.tsx +0 -16
  347. package/src/components/FastIcon.tsx +0 -46
  348. package/src/components/Feedback.tsx +0 -592
  349. package/src/components/FeedbackSurvey/FeedbackSurvey.tsx +0 -174
  350. package/src/components/FeedbackSurvey/FeedbackSurveyView.tsx +0 -108
  351. package/src/components/FeedbackSurvey/TranscriptSharePrompt.tsx +0 -88
  352. package/src/components/FeedbackSurvey/submitTranscriptShare.ts +0 -112
  353. package/src/components/FeedbackSurvey/useDebouncedDigitInput.ts +0 -82
  354. package/src/components/FeedbackSurvey/useFeedbackSurvey.tsx +0 -296
  355. package/src/components/FeedbackSurvey/useFrustrationDetection.ts +0 -2
  356. package/src/components/FeedbackSurvey/useMemorySurvey.tsx +0 -213
  357. package/src/components/FeedbackSurvey/usePostCompactSurvey.tsx +0 -206
  358. package/src/components/FeedbackSurvey/useSurveyState.tsx +0 -100
  359. package/src/components/FeedbackSurvey/utils.ts +0 -2
  360. package/src/components/FileEditToolDiff.tsx +0 -181
  361. package/src/components/FileEditToolUpdatedMessage.tsx +0 -124
  362. package/src/components/FileEditToolUseRejectedMessage.tsx +0 -170
  363. package/src/components/FilePathLink.tsx +0 -43
  364. package/src/components/FullscreenLayout.tsx +0 -637
  365. package/src/components/GlobalSearchDialog.tsx +0 -343
  366. package/src/components/HelpV2/Commands.tsx +0 -82
  367. package/src/components/HelpV2/General.tsx +0 -23
  368. package/src/components/HelpV2/HelpV2.tsx +0 -184
  369. package/src/components/HighlightedCode/Fallback.tsx +0 -193
  370. package/src/components/HighlightedCode.tsx +0 -190
  371. package/src/components/HistorySearchDialog.tsx +0 -118
  372. package/src/components/IdeAutoConnectDialog.tsx +0 -154
  373. package/src/components/IdeOnboardingDialog.tsx +0 -167
  374. package/src/components/IdeStatusIndicator.tsx +0 -58
  375. package/src/components/IdleReturnDialog.tsx +0 -118
  376. package/src/components/InterruptedByUser.tsx +0 -15
  377. package/src/components/InvalidConfigDialog.tsx +0 -156
  378. package/src/components/InvalidSettingsDialog.tsx +0 -89
  379. package/src/components/KeybindingWarnings.tsx +0 -55
  380. package/src/components/LanguagePicker.tsx +0 -86
  381. package/src/components/LogSelector.tsx +0 -1575
  382. package/src/components/LogoV2/AnimatedAsterisk.tsx +0 -50
  383. package/src/components/LogoV2/AnimatedClawd.tsx +0 -124
  384. package/src/components/LogoV2/ChannelsNotice.tsx +0 -266
  385. package/src/components/LogoV2/Clawd.tsx +0 -25
  386. package/src/components/LogoV2/CondensedLogo.tsx +0 -161
  387. package/src/components/LogoV2/EmergencyTip.tsx +0 -58
  388. package/src/components/LogoV2/Feed.tsx +0 -112
  389. package/src/components/LogoV2/FeedColumn.tsx +0 -59
  390. package/src/components/LogoV2/GuestPassesUpsell.tsx +0 -70
  391. package/src/components/LogoV2/LogoV2.tsx +0 -543
  392. package/src/components/LogoV2/Opus1mMergeNotice.tsx +0 -55
  393. package/src/components/LogoV2/OverageCreditUpsell.tsx +0 -166
  394. package/src/components/LogoV2/VoiceModeNotice.tsx +0 -68
  395. package/src/components/LogoV2/WelcomeV2.tsx +0 -433
  396. package/src/components/LogoV2/feedConfigs.tsx +0 -92
  397. package/src/components/LspRecommendation/LspRecommendationMenu.tsx +0 -88
  398. package/src/components/MCPServerApprovalDialog.tsx +0 -115
  399. package/src/components/MCPServerDesktopImportDialog.tsx +0 -203
  400. package/src/components/MCPServerDialogCopy.tsx +0 -15
  401. package/src/components/MCPServerMultiselectDialog.tsx +0 -133
  402. package/src/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.tsx +0 -149
  403. package/src/components/ManagedSettingsSecurityDialog/utils.ts +0 -144
  404. package/src/components/Markdown.tsx +0 -236
  405. package/src/components/MarkdownTable.tsx +0 -322
  406. package/src/components/MemoryUsageIndicator.tsx +0 -37
  407. package/src/components/Message.tsx +0 -627
  408. package/src/components/MessageModel.tsx +0 -43
  409. package/src/components/MessageResponse.tsx +0 -78
  410. package/src/components/MessageRow.tsx +0 -383
  411. package/src/components/MessageSelector.tsx +0 -831
  412. package/src/components/MessageTimestamp.tsx +0 -63
  413. package/src/components/Messages.tsx +0 -834
  414. package/src/components/ModelPicker.tsx +0 -448
  415. package/src/components/NativeAutoUpdater.tsx +0 -193
  416. package/src/components/NotebookEditToolUseRejectedMessage.tsx +0 -92
  417. package/src/components/OffscreenFreeze.tsx +0 -44
  418. package/src/components/Onboarding.tsx +0 -244
  419. package/src/components/OutputStylePicker.tsx +0 -112
  420. package/src/components/PackageManagerAutoUpdater.tsx +0 -104
  421. package/src/components/Passes/Passes.tsx +0 -184
  422. package/src/components/PrBadge.tsx +0 -97
  423. package/src/components/PressEnterToContinue.tsx +0 -15
  424. package/src/components/PromptInput/HistorySearchInput.tsx +0 -51
  425. package/src/components/PromptInput/IssueFlagBanner.tsx +0 -12
  426. package/src/components/PromptInput/Notifications.tsx +0 -332
  427. package/src/components/PromptInput/PromptInput.tsx +0 -2339
  428. package/src/components/PromptInput/PromptInputFooter.tsx +0 -191
  429. package/src/components/PromptInput/PromptInputFooterLeftSide.tsx +0 -517
  430. package/src/components/PromptInput/PromptInputFooterSuggestions.tsx +0 -293
  431. package/src/components/PromptInput/PromptInputHelpMenu.tsx +0 -358
  432. package/src/components/PromptInput/PromptInputModeIndicator.tsx +0 -93
  433. package/src/components/PromptInput/PromptInputQueuedCommands.tsx +0 -117
  434. package/src/components/PromptInput/PromptInputStashNotice.tsx +0 -25
  435. package/src/components/PromptInput/SandboxPromptFooterHint.tsx +0 -64
  436. package/src/components/PromptInput/ShimmeredInput.tsx +0 -143
  437. package/src/components/PromptInput/VoiceIndicator.tsx +0 -137
  438. package/src/components/PromptInput/inputModes.ts +0 -33
  439. package/src/components/PromptInput/inputPaste.ts +0 -90
  440. package/src/components/PromptInput/useMaybeTruncateInput.ts +0 -58
  441. package/src/components/PromptInput/usePromptInputPlaceholder.ts +0 -76
  442. package/src/components/PromptInput/useShowFastIconHint.ts +0 -31
  443. package/src/components/PromptInput/useSwarmBanner.ts +0 -155
  444. package/src/components/PromptInput/utils.ts +0 -60
  445. package/src/components/QuickOpenDialog.tsx +0 -244
  446. package/src/components/RemoteCallout.tsx +0 -76
  447. package/src/components/RemoteEnvironmentDialog.tsx +0 -340
  448. package/src/components/ResumeTask.tsx +0 -268
  449. package/src/components/SandboxViolationExpandedView.tsx +0 -99
  450. package/src/components/ScrollKeybindingHandler.tsx +0 -1012
  451. package/src/components/SearchBox.tsx +0 -72
  452. package/src/components/SentryErrorBoundary.ts +0 -28
  453. package/src/components/SessionBackgroundHint.tsx +0 -108
  454. package/src/components/SessionPreview.tsx +0 -194
  455. package/src/components/Settings/Config.tsx +0 -1822
  456. package/src/components/Settings/Settings.tsx +0 -137
  457. package/src/components/Settings/Status.tsx +0 -241
  458. package/src/components/Settings/Usage.tsx +0 -377
  459. package/src/components/ShowInIDEPrompt.tsx +0 -170
  460. package/src/components/SkillImprovementSurvey.tsx +0 -152
  461. package/src/components/Spinner/FlashingChar.tsx +0 -61
  462. package/src/components/Spinner/GlimmerMessage.tsx +0 -328
  463. package/src/components/Spinner/ShimmerChar.tsx +0 -36
  464. package/src/components/Spinner/SpinnerAnimationRow.tsx +0 -265
  465. package/src/components/Spinner/SpinnerGlyph.tsx +0 -80
  466. package/src/components/Spinner/TeammateSpinnerLine.tsx +0 -233
  467. package/src/components/Spinner/TeammateSpinnerTree.tsx +0 -272
  468. package/src/components/Spinner/index.ts +0 -10
  469. package/src/components/Spinner/teammateSelectHint.ts +0 -1
  470. package/src/components/Spinner/types.ts +0 -2
  471. package/src/components/Spinner/useShimmerAnimation.ts +0 -31
  472. package/src/components/Spinner/useStalledAnimation.ts +0 -75
  473. package/src/components/Spinner/utils.ts +0 -84
  474. package/src/components/Spinner.tsx +0 -562
  475. package/src/components/Stats.tsx +0 -1228
  476. package/src/components/StatusLine.tsx +0 -324
  477. package/src/components/StatusNotices.tsx +0 -55
  478. package/src/components/StructuredDiff/Fallback.tsx +0 -487
  479. package/src/components/StructuredDiff/colorDiff.ts +0 -37
  480. package/src/components/StructuredDiff.tsx +0 -190
  481. package/src/components/StructuredDiffList.tsx +0 -30
  482. package/src/components/TagTabs.tsx +0 -139
  483. package/src/components/TaskListV2.tsx +0 -378
  484. package/src/components/TeammateViewHeader.tsx +0 -82
  485. package/src/components/TeleportError.tsx +0 -189
  486. package/src/components/TeleportProgress.tsx +0 -140
  487. package/src/components/TeleportRepoMismatchDialog.tsx +0 -104
  488. package/src/components/TeleportResumeWrapper.tsx +0 -167
  489. package/src/components/TeleportStash.tsx +0 -116
  490. package/src/components/TextInput.tsx +0 -124
  491. package/src/components/ThemePicker.tsx +0 -333
  492. package/src/components/ThinkingToggle.tsx +0 -153
  493. package/src/components/TokenWarning.tsx +0 -179
  494. package/src/components/ToolUseLoader.tsx +0 -42
  495. package/src/components/TrustDialog/TrustDialog.tsx +0 -290
  496. package/src/components/TrustDialog/utils.ts +0 -245
  497. package/src/components/ValidationErrorsList.tsx +0 -148
  498. package/src/components/VimTextInput.tsx +0 -140
  499. package/src/components/VirtualMessageList.tsx +0 -1082
  500. package/src/components/WorkflowMultiselectDialog.tsx +0 -128
  501. package/src/components/WorktreeExitDialog.tsx +0 -231
  502. package/src/components/agents/AgentDetail.tsx +0 -220
  503. package/src/components/agents/AgentEditor.tsx +0 -178
  504. package/src/components/agents/AgentNavigationFooter.tsx +0 -26
  505. package/src/components/agents/AgentsList.tsx +0 -440
  506. package/src/components/agents/AgentsMenu.tsx +0 -800
  507. package/src/components/agents/ColorPicker.tsx +0 -112
  508. package/src/components/agents/ModelSelector.tsx +0 -68
  509. package/src/components/agents/SnapshotUpdateDialog.ts +0 -2
  510. package/src/components/agents/ToolSelector.tsx +0 -562
  511. package/src/components/agents/agentFileUtils.ts +0 -272
  512. package/src/components/agents/generateAgent.ts +0 -197
  513. package/src/components/agents/new-agent-creation/CreateAgentWizard.tsx +0 -97
  514. package/src/components/agents/new-agent-creation/types.ts +0 -1
  515. package/src/components/agents/new-agent-creation/wizard-steps/ColorStep.tsx +0 -84
  516. package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStep.tsx +0 -378
  517. package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.tsx +0 -74
  518. package/src/components/agents/new-agent-creation/wizard-steps/DescriptionStep.tsx +0 -123
  519. package/src/components/agents/new-agent-creation/wizard-steps/GenerateStep.tsx +0 -143
  520. package/src/components/agents/new-agent-creation/wizard-steps/LocationStep.tsx +0 -80
  521. package/src/components/agents/new-agent-creation/wizard-steps/MemoryStep.tsx +0 -113
  522. package/src/components/agents/new-agent-creation/wizard-steps/MethodStep.tsx +0 -80
  523. package/src/components/agents/new-agent-creation/wizard-steps/ModelStep.tsx +0 -52
  524. package/src/components/agents/new-agent-creation/wizard-steps/PromptStep.tsx +0 -128
  525. package/src/components/agents/new-agent-creation/wizard-steps/ToolsStep.tsx +0 -61
  526. package/src/components/agents/new-agent-creation/wizard-steps/TypeStep.tsx +0 -103
  527. package/src/components/agents/types.ts +0 -27
  528. package/src/components/agents/utils.ts +0 -18
  529. package/src/components/agents/validateAgent.ts +0 -109
  530. package/src/components/design-system/Byline.tsx +0 -77
  531. package/src/components/design-system/Dialog.tsx +0 -138
  532. package/src/components/design-system/Divider.tsx +0 -149
  533. package/src/components/design-system/FuzzyPicker.tsx +0 -312
  534. package/src/components/design-system/KeyboardShortcutHint.tsx +0 -81
  535. package/src/components/design-system/ListItem.tsx +0 -244
  536. package/src/components/design-system/LoadingState.tsx +0 -94
  537. package/src/components/design-system/Pane.tsx +0 -77
  538. package/src/components/design-system/ProgressBar.tsx +0 -86
  539. package/src/components/design-system/Ratchet.tsx +0 -80
  540. package/src/components/design-system/StatusIcon.tsx +0 -95
  541. package/src/components/design-system/Tabs.tsx +0 -340
  542. package/src/components/design-system/ThemeProvider.tsx +0 -170
  543. package/src/components/design-system/ThemedBox.tsx +0 -156
  544. package/src/components/design-system/ThemedText.tsx +0 -124
  545. package/src/components/design-system/color.ts +0 -30
  546. package/src/components/diff/DiffDetailView.tsx +0 -281
  547. package/src/components/diff/DiffDialog.tsx +0 -383
  548. package/src/components/diff/DiffFileList.tsx +0 -292
  549. package/src/components/grove/Grove.tsx +0 -463
  550. package/src/components/hooks/HooksConfigMenu.tsx +0 -578
  551. package/src/components/hooks/PromptDialog.tsx +0 -90
  552. package/src/components/hooks/SelectEventMode.tsx +0 -127
  553. package/src/components/hooks/SelectHookMode.tsx +0 -112
  554. package/src/components/hooks/SelectMatcherMode.tsx +0 -144
  555. package/src/components/hooks/ViewHookMode.tsx +0 -199
  556. package/src/components/mcp/CapabilitiesSection.tsx +0 -61
  557. package/src/components/mcp/ElicitationDialog.tsx +0 -1169
  558. package/src/components/mcp/MCPAgentServerMenu.tsx +0 -183
  559. package/src/components/mcp/MCPListPanel.tsx +0 -504
  560. package/src/components/mcp/MCPReconnect.tsx +0 -167
  561. package/src/components/mcp/MCPRemoteServerMenu.tsx +0 -649
  562. package/src/components/mcp/MCPSettings.tsx +0 -398
  563. package/src/components/mcp/MCPStdioServerMenu.tsx +0 -177
  564. package/src/components/mcp/MCPToolDetailView.tsx +0 -212
  565. package/src/components/mcp/MCPToolListView.tsx +0 -141
  566. package/src/components/mcp/McpParsingWarnings.tsx +0 -213
  567. package/src/components/mcp/index.ts +0 -9
  568. package/src/components/mcp/types.ts +0 -7
  569. package/src/components/mcp/utils/reconnectHelpers.tsx +0 -49
  570. package/src/components/memory/MemoryFileSelector.tsx +0 -438
  571. package/src/components/memory/MemoryUpdateNotification.tsx +0 -45
  572. package/src/components/messageActions.tsx +0 -450
  573. package/src/components/messages/AdvisorMessage.tsx +0 -158
  574. package/src/components/messages/AssistantRedactedThinkingMessage.tsx +0 -31
  575. package/src/components/messages/AssistantTextMessage.tsx +0 -270
  576. package/src/components/messages/AssistantThinkingMessage.tsx +0 -86
  577. package/src/components/messages/AssistantToolUseMessage.tsx +0 -368
  578. package/src/components/messages/AttachmentMessage.tsx +0 -536
  579. package/src/components/messages/CollapsedReadSearchContent.tsx +0 -484
  580. package/src/components/messages/CompactBoundaryMessage.tsx +0 -18
  581. package/src/components/messages/GroupedToolUseContent.tsx +0 -58
  582. package/src/components/messages/HighlightedThinkingText.tsx +0 -162
  583. package/src/components/messages/HookProgressMessage.tsx +0 -116
  584. package/src/components/messages/PlanApprovalMessage.tsx +0 -222
  585. package/src/components/messages/RateLimitMessage.tsx +0 -161
  586. package/src/components/messages/ShutdownMessage.tsx +0 -132
  587. package/src/components/messages/SnipBoundaryMessage.ts +0 -2
  588. package/src/components/messages/SystemAPIErrorMessage.tsx +0 -141
  589. package/src/components/messages/SystemTextMessage.tsx +0 -827
  590. package/src/components/messages/TaskAssignmentMessage.tsx +0 -76
  591. package/src/components/messages/UserAgentNotificationMessage.tsx +0 -83
  592. package/src/components/messages/UserBashInputMessage.tsx +0 -58
  593. package/src/components/messages/UserBashOutputMessage.tsx +0 -54
  594. package/src/components/messages/UserChannelMessage.tsx +0 -137
  595. package/src/components/messages/UserCommandMessage.tsx +0 -108
  596. package/src/components/messages/UserCrossSessionMessage.ts +0 -2
  597. package/src/components/messages/UserForkBoilerplateMessage.ts +0 -2
  598. package/src/components/messages/UserGitHubWebhookMessage.ts +0 -2
  599. package/src/components/messages/UserImageMessage.tsx +0 -59
  600. package/src/components/messages/UserLocalCommandOutputMessage.tsx +0 -167
  601. package/src/components/messages/UserMemoryInputMessage.tsx +0 -75
  602. package/src/components/messages/UserPlanMessage.tsx +0 -42
  603. package/src/components/messages/UserPromptMessage.tsx +0 -80
  604. package/src/components/messages/UserResourceUpdateMessage.tsx +0 -121
  605. package/src/components/messages/UserTeammateMessage.tsx +0 -206
  606. package/src/components/messages/UserTextMessage.tsx +0 -275
  607. package/src/components/messages/UserToolResultMessage/RejectedPlanMessage.tsx +0 -31
  608. package/src/components/messages/UserToolResultMessage/RejectedToolUseMessage.tsx +0 -16
  609. package/src/components/messages/UserToolResultMessage/UserToolCanceledMessage.tsx +0 -16
  610. package/src/components/messages/UserToolResultMessage/UserToolErrorMessage.tsx +0 -103
  611. package/src/components/messages/UserToolResultMessage/UserToolRejectMessage.tsx +0 -95
  612. package/src/components/messages/UserToolResultMessage/UserToolResultMessage.tsx +0 -106
  613. package/src/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx +0 -104
  614. package/src/components/messages/UserToolResultMessage/utils.tsx +0 -44
  615. package/src/components/messages/nullRenderingAttachments.ts +0 -70
  616. package/src/components/messages/teamMemCollapsed.tsx +0 -140
  617. package/src/components/messages/teamMemSaved.ts +0 -19
  618. package/src/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.tsx +0 -645
  619. package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewBox.tsx +0 -229
  620. package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewQuestionView.tsx +0 -328
  621. package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionNavigationBar.tsx +0 -178
  622. package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionView.tsx +0 -465
  623. package/src/components/permissions/AskUserQuestionPermissionRequest/SubmitQuestionsView.tsx +0 -144
  624. package/src/components/permissions/AskUserQuestionPermissionRequest/use-multiple-choice-state.ts +0 -179
  625. package/src/components/permissions/BashPermissionRequest/BashPermissionRequest.tsx +0 -482
  626. package/src/components/permissions/BashPermissionRequest/bashToolUseOptions.tsx +0 -147
  627. package/src/components/permissions/ComputerUseApproval/ComputerUseApproval.tsx +0 -441
  628. package/src/components/permissions/EnterPlanModePermissionRequest/EnterPlanModePermissionRequest.tsx +0 -122
  629. package/src/components/permissions/ExitPlanModePermissionRequest/ExitPlanModePermissionRequest.tsx +0 -768
  630. package/src/components/permissions/FallbackPermissionRequest.tsx +0 -333
  631. package/src/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.tsx +0 -182
  632. package/src/components/permissions/FilePermissionDialog/FilePermissionDialog.tsx +0 -204
  633. package/src/components/permissions/FilePermissionDialog/ideDiffConfig.ts +0 -42
  634. package/src/components/permissions/FilePermissionDialog/permissionOptions.tsx +0 -177
  635. package/src/components/permissions/FilePermissionDialog/useFilePermissionDialog.ts +0 -212
  636. package/src/components/permissions/FilePermissionDialog/usePermissionHandler.ts +0 -185
  637. package/src/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.tsx +0 -161
  638. package/src/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.tsx +0 -89
  639. package/src/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.tsx +0 -115
  640. package/src/components/permissions/MonitorPermissionRequest/MonitorPermissionRequest.ts +0 -2
  641. package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditPermissionRequest.tsx +0 -166
  642. package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditToolDiff.tsx +0 -235
  643. package/src/components/permissions/PermissionDecisionDebugInfo.tsx +0 -460
  644. package/src/components/permissions/PermissionDialog.tsx +0 -72
  645. package/src/components/permissions/PermissionExplanation.tsx +0 -272
  646. package/src/components/permissions/PermissionPrompt.tsx +0 -336
  647. package/src/components/permissions/PermissionRequest.tsx +0 -217
  648. package/src/components/permissions/PermissionRequestTitle.tsx +0 -66
  649. package/src/components/permissions/PermissionRuleExplanation.tsx +0 -121
  650. package/src/components/permissions/PowerShellPermissionRequest/PowerShellPermissionRequest.tsx +0 -235
  651. package/src/components/permissions/PowerShellPermissionRequest/powershellToolUseOptions.tsx +0 -91
  652. package/src/components/permissions/ReviewArtifactPermissionRequest/ReviewArtifactPermissionRequest.ts +0 -2
  653. package/src/components/permissions/SandboxPermissionRequest.tsx +0 -163
  654. package/src/components/permissions/SedEditPermissionRequest/SedEditPermissionRequest.tsx +0 -230
  655. package/src/components/permissions/SkillPermissionRequest/SkillPermissionRequest.tsx +0 -369
  656. package/src/components/permissions/WebFetchPermissionRequest/WebFetchPermissionRequest.tsx +0 -258
  657. package/src/components/permissions/WorkerBadge.tsx +0 -49
  658. package/src/components/permissions/WorkerPendingPermission.tsx +0 -105
  659. package/src/components/permissions/hooks.ts +0 -209
  660. package/src/components/permissions/rules/AddPermissionRules.tsx +0 -180
  661. package/src/components/permissions/rules/AddWorkspaceDirectory.tsx +0 -340
  662. package/src/components/permissions/rules/PermissionRuleDescription.tsx +0 -76
  663. package/src/components/permissions/rules/PermissionRuleInput.tsx +0 -138
  664. package/src/components/permissions/rules/PermissionRuleList.tsx +0 -1179
  665. package/src/components/permissions/rules/RecentDenialsTab.tsx +0 -207
  666. package/src/components/permissions/rules/RemoveWorkspaceDirectory.tsx +0 -110
  667. package/src/components/permissions/rules/WorkspaceTab.tsx +0 -150
  668. package/src/components/permissions/shellPermissionHelpers.tsx +0 -164
  669. package/src/components/permissions/useShellPermissionFeedback.ts +0 -148
  670. package/src/components/permissions/utils.ts +0 -25
  671. package/src/components/sandbox/SandboxConfigTab.tsx +0 -45
  672. package/src/components/sandbox/SandboxDependenciesTab.tsx +0 -120
  673. package/src/components/sandbox/SandboxDoctorSection.tsx +0 -46
  674. package/src/components/sandbox/SandboxOverridesTab.tsx +0 -193
  675. package/src/components/sandbox/SandboxSettings.tsx +0 -296
  676. package/src/components/shell/ExpandShellOutputContext.tsx +0 -36
  677. package/src/components/shell/OutputLine.tsx +0 -118
  678. package/src/components/shell/ShellProgressMessage.tsx +0 -150
  679. package/src/components/shell/ShellTimeDisplay.tsx +0 -74
  680. package/src/components/skills/SkillsMenu.tsx +0 -237
  681. package/src/components/tasks/AsyncAgentDetailDialog.tsx +0 -229
  682. package/src/components/tasks/BackgroundTask.tsx +0 -345
  683. package/src/components/tasks/BackgroundTaskStatus.tsx +0 -429
  684. package/src/components/tasks/BackgroundTasksDialog.tsx +0 -652
  685. package/src/components/tasks/DreamDetailDialog.tsx +0 -251
  686. package/src/components/tasks/InProcessTeammateDetailDialog.tsx +0 -266
  687. package/src/components/tasks/MonitorMcpDetailDialog.ts +0 -2
  688. package/src/components/tasks/RemoteSessionDetailDialog.tsx +0 -904
  689. package/src/components/tasks/RemoteSessionProgress.tsx +0 -243
  690. package/src/components/tasks/ShellDetailDialog.tsx +0 -404
  691. package/src/components/tasks/ShellProgress.tsx +0 -87
  692. package/src/components/tasks/WorkflowDetailDialog.ts +0 -2
  693. package/src/components/tasks/renderToolActivity.tsx +0 -33
  694. package/src/components/tasks/taskStatusUtils.tsx +0 -107
  695. package/src/components/teams/TeamStatus.tsx +0 -80
  696. package/src/components/teams/TeamsDialog.tsx +0 -715
  697. package/src/components/ui/OrderedList.tsx +0 -71
  698. package/src/components/ui/OrderedListItem.tsx +0 -45
  699. package/src/components/ui/TreeSelect.tsx +0 -397
  700. package/src/components/ui/option.ts +0 -4
  701. package/src/components/wizard/WizardDialogLayout.tsx +0 -65
  702. package/src/components/wizard/WizardNavigationFooter.tsx +0 -24
  703. package/src/components/wizard/WizardProvider.tsx +0 -213
  704. package/src/components/wizard/index.ts +0 -9
  705. package/src/components/wizard/types.ts +0 -3
  706. package/src/components/wizard/useWizard.ts +0 -13
  707. package/src/constants/apiLimits.ts +0 -94
  708. package/src/constants/betas.ts +0 -52
  709. package/src/constants/common.ts +0 -33
  710. package/src/constants/cyberRiskInstruction.ts +0 -24
  711. package/src/constants/errorIds.ts +0 -15
  712. package/src/constants/figures.ts +0 -45
  713. package/src/constants/files.ts +0 -156
  714. package/src/constants/github-app.ts +0 -144
  715. package/src/constants/keys.ts +0 -11
  716. package/src/constants/messages.ts +0 -1
  717. package/src/constants/oauth.ts +0 -234
  718. package/src/constants/outputStyles.ts +0 -216
  719. package/src/constants/product.ts +0 -76
  720. package/src/constants/prompts.ts +0 -915
  721. package/src/constants/querySource.ts +0 -1
  722. package/src/constants/spinnerVerbs.ts +0 -204
  723. package/src/constants/system.ts +0 -95
  724. package/src/constants/systemPromptSections.ts +0 -68
  725. package/src/constants/toolLimits.ts +0 -56
  726. package/src/constants/tools.ts +0 -112
  727. package/src/constants/turnCompletionVerbs.ts +0 -12
  728. package/src/constants/xml.ts +0 -86
  729. package/src/context/QueuedMessageContext.tsx +0 -63
  730. package/src/context/fpsMetrics.tsx +0 -30
  731. package/src/context/mailbox.tsx +0 -38
  732. package/src/context/modalContext.tsx +0 -58
  733. package/src/context/notifications.tsx +0 -240
  734. package/src/context/overlayContext.tsx +0 -151
  735. package/src/context/promptOverlayContext.tsx +0 -125
  736. package/src/context/stats.tsx +0 -220
  737. package/src/context/voice.tsx +0 -88
  738. package/src/context.ts +0 -189
  739. package/src/coordinator/coordinatorMode.ts +0 -369
  740. package/src/coordinator/workerAgent.ts +0 -2
  741. package/src/cost-tracker.ts +0 -323
  742. package/src/costHook.ts +0 -22
  743. package/src/daemon/main.ts +0 -2
  744. package/src/daemon/workerRegistry.ts +0 -2
  745. package/src/dialogLaunchers.tsx +0 -133
  746. package/src/engine/CostMapper.ts +0 -57
  747. package/src/engine/MessageMapper.ts +0 -276
  748. package/src/engine/ModelResolver.ts +0 -153
  749. package/src/engine/PermissionBridge.ts +0 -114
  750. package/src/engine/PiAgentAdapter.ts +0 -299
  751. package/src/engine/SubagentTools.ts +0 -92
  752. package/src/engine/ToolAdapter.ts +0 -122
  753. package/src/engine/engine-backup/CostMapper.ts +0 -57
  754. package/src/engine/engine-backup/MessageMapper.ts +0 -276
  755. package/src/engine/engine-backup/ModelResolver.ts +0 -153
  756. package/src/engine/engine-backup/PermissionBridge.ts +0 -114
  757. package/src/engine/engine-backup/PiAgentAdapter.ts +0 -299
  758. package/src/engine/engine-backup/SubagentTools.ts +0 -92
  759. package/src/engine/engine-backup/ToolAdapter.ts +0 -122
  760. package/src/engine/engine-backup/index.ts +0 -14
  761. package/src/engine/engine-backup/piQueryBridge.ts +0 -396
  762. package/src/engine/index.ts +0 -14
  763. package/src/engine/piQueryBridge.ts +0 -396
  764. package/src/entrypoints/agentSdkTypes.ts +0 -443
  765. package/src/entrypoints/cli.tsx +0 -303
  766. package/src/entrypoints/init.ts +0 -340
  767. package/src/entrypoints/mcp.ts +0 -196
  768. package/src/entrypoints/sandboxTypes.ts +0 -156
  769. package/src/entrypoints/sdk/controlSchemas.ts +0 -663
  770. package/src/entrypoints/sdk/controlTypes.ts +0 -12
  771. package/src/entrypoints/sdk/coreSchemas.ts +0 -1889
  772. package/src/entrypoints/sdk/coreTypes.generated.ts +0 -1
  773. package/src/entrypoints/sdk/coreTypes.ts +0 -62
  774. package/src/entrypoints/sdk/runtimeTypes.ts +0 -18
  775. package/src/entrypoints/sdk/sdkUtilityTypes.ts +0 -1
  776. package/src/entrypoints/sdk/settingsTypes.generated.ts +0 -1
  777. package/src/entrypoints/sdk/toolTypes.ts +0 -2
  778. package/src/environment-runner/main.ts +0 -2
  779. package/src/history.ts +0 -464
  780. package/src/hooks/fileSuggestions.ts +0 -811
  781. package/src/hooks/notifs/useAntOrgWarningNotification.ts +0 -2
  782. package/src/hooks/notifs/useAutoModeUnavailableNotification.ts +0 -56
  783. package/src/hooks/notifs/useCanSwitchToExistingSubscription.tsx +0 -60
  784. package/src/hooks/notifs/useDeprecationWarningNotification.tsx +0 -44
  785. package/src/hooks/notifs/useFastModeNotification.tsx +0 -162
  786. package/src/hooks/notifs/useIDEStatusIndicator.tsx +0 -186
  787. package/src/hooks/notifs/useInstallMessages.tsx +0 -26
  788. package/src/hooks/notifs/useLspInitializationNotification.tsx +0 -143
  789. package/src/hooks/notifs/useMcpConnectivityStatus.tsx +0 -88
  790. package/src/hooks/notifs/useModelMigrationNotifications.tsx +0 -52
  791. package/src/hooks/notifs/useNpmDeprecationNotification.tsx +0 -25
  792. package/src/hooks/notifs/usePluginAutoupdateNotification.tsx +0 -83
  793. package/src/hooks/notifs/usePluginInstallationStatus.tsx +0 -128
  794. package/src/hooks/notifs/useRateLimitWarningNotification.tsx +0 -114
  795. package/src/hooks/notifs/useSettingsErrors.tsx +0 -69
  796. package/src/hooks/notifs/useStartupNotification.ts +0 -41
  797. package/src/hooks/notifs/useTeammateShutdownNotification.ts +0 -78
  798. package/src/hooks/renderPlaceholder.ts +0 -51
  799. package/src/hooks/toolPermission/PermissionContext.ts +0 -388
  800. package/src/hooks/toolPermission/handlers/coordinatorHandler.ts +0 -65
  801. package/src/hooks/toolPermission/handlers/interactiveHandler.ts +0 -536
  802. package/src/hooks/toolPermission/handlers/swarmWorkerHandler.ts +0 -159
  803. package/src/hooks/toolPermission/permissionLogging.ts +0 -238
  804. package/src/hooks/unifiedSuggestions.ts +0 -202
  805. package/src/hooks/useAfterFirstRender.ts +0 -17
  806. package/src/hooks/useApiKeyVerification.ts +0 -84
  807. package/src/hooks/useArrowKeyHistory.tsx +0 -229
  808. package/src/hooks/useAssistantHistory.ts +0 -250
  809. package/src/hooks/useAwaySummary.ts +0 -125
  810. package/src/hooks/useBackgroundTaskNavigation.ts +0 -251
  811. package/src/hooks/useBlink.ts +0 -34
  812. package/src/hooks/useCanUseTool.tsx +0 -204
  813. package/src/hooks/useCancelRequest.ts +0 -276
  814. package/src/hooks/useChromeExtensionNotification.tsx +0 -50
  815. package/src/hooks/useClaudeCodeHintRecommendation.tsx +0 -129
  816. package/src/hooks/useClipboardImageHint.ts +0 -77
  817. package/src/hooks/useCommandKeybindings.tsx +0 -108
  818. package/src/hooks/useCommandQueue.ts +0 -15
  819. package/src/hooks/useCopyOnSelect.ts +0 -98
  820. package/src/hooks/useDeferredHookMessages.ts +0 -46
  821. package/src/hooks/useDiffData.ts +0 -110
  822. package/src/hooks/useDiffInIDE.ts +0 -379
  823. package/src/hooks/useDirectConnect.ts +0 -229
  824. package/src/hooks/useDoublePress.ts +0 -62
  825. package/src/hooks/useDynamicConfig.ts +0 -22
  826. package/src/hooks/useElapsedTime.ts +0 -37
  827. package/src/hooks/useExitOnCtrlCD.ts +0 -95
  828. package/src/hooks/useExitOnCtrlCDWithKeybindings.ts +0 -24
  829. package/src/hooks/useFileHistorySnapshotInit.ts +0 -25
  830. package/src/hooks/useGlobalKeybindings.tsx +0 -249
  831. package/src/hooks/useHistorySearch.ts +0 -303
  832. package/src/hooks/useIDEIntegration.tsx +0 -70
  833. package/src/hooks/useIdeAtMentioned.ts +0 -76
  834. package/src/hooks/useIdeConnectionStatus.ts +0 -33
  835. package/src/hooks/useIdeLogging.ts +0 -41
  836. package/src/hooks/useIdeSelection.ts +0 -150
  837. package/src/hooks/useInboxPoller.ts +0 -969
  838. package/src/hooks/useInputBuffer.ts +0 -132
  839. package/src/hooks/useIssueFlagBanner.ts +0 -133
  840. package/src/hooks/useLogMessages.ts +0 -119
  841. package/src/hooks/useLspPluginRecommendation.tsx +0 -194
  842. package/src/hooks/useMailboxBridge.ts +0 -21
  843. package/src/hooks/useMainLoopModel.ts +0 -34
  844. package/src/hooks/useManagePlugins.ts +0 -304
  845. package/src/hooks/useMemoryUsage.ts +0 -39
  846. package/src/hooks/useMergedClients.ts +0 -23
  847. package/src/hooks/useMergedCommands.ts +0 -15
  848. package/src/hooks/useMergedTools.ts +0 -44
  849. package/src/hooks/useMinDisplayTime.ts +0 -35
  850. package/src/hooks/useNotifyAfterTimeout.ts +0 -65
  851. package/src/hooks/useOfficialMarketplaceNotification.tsx +0 -48
  852. package/src/hooks/usePasteHandler.ts +0 -285
  853. package/src/hooks/usePluginRecommendationBase.tsx +0 -105
  854. package/src/hooks/usePrStatus.ts +0 -106
  855. package/src/hooks/usePromptSuggestion.ts +0 -177
  856. package/src/hooks/usePromptsFromClaudeInChrome.tsx +0 -71
  857. package/src/hooks/useQueueProcessor.ts +0 -68
  858. package/src/hooks/useRemoteSession.ts +0 -605
  859. package/src/hooks/useReplBridge.tsx +0 -723
  860. package/src/hooks/useSSHSession.ts +0 -241
  861. package/src/hooks/useScheduledTasks.ts +0 -139
  862. package/src/hooks/useSearchInput.ts +0 -364
  863. package/src/hooks/useSessionBackgrounding.ts +0 -158
  864. package/src/hooks/useSettings.ts +0 -17
  865. package/src/hooks/useSettingsChange.ts +0 -25
  866. package/src/hooks/useSkillImprovementSurvey.ts +0 -105
  867. package/src/hooks/useSkillsChange.ts +0 -62
  868. package/src/hooks/useSwarmInitialization.ts +0 -81
  869. package/src/hooks/useSwarmPermissionPoller.ts +0 -330
  870. package/src/hooks/useTaskListWatcher.ts +0 -221
  871. package/src/hooks/useTasksV2.ts +0 -250
  872. package/src/hooks/useTeammateViewAutoExit.ts +0 -63
  873. package/src/hooks/useTeleportResume.tsx +0 -85
  874. package/src/hooks/useTerminalSize.ts +0 -15
  875. package/src/hooks/useTextInput.ts +0 -529
  876. package/src/hooks/useTimeout.ts +0 -14
  877. package/src/hooks/useTurnDiffs.ts +0 -213
  878. package/src/hooks/useTypeahead.tsx +0 -1385
  879. package/src/hooks/useUpdateNotification.ts +0 -34
  880. package/src/hooks/useVimInput.ts +0 -316
  881. package/src/hooks/useVirtualScroll.ts +0 -721
  882. package/src/hooks/useVoice.ts +0 -1144
  883. package/src/hooks/useVoiceEnabled.ts +0 -25
  884. package/src/hooks/useVoiceIntegration.tsx +0 -677
  885. package/src/hunter.ts +0 -1
  886. package/src/ink/Ansi.tsx +0 -292
  887. package/src/ink/bidi.ts +0 -139
  888. package/src/ink/clearTerminal.ts +0 -74
  889. package/src/ink/colorize.ts +0 -231
  890. package/src/ink/components/AlternateScreen.tsx +0 -80
  891. package/src/ink/components/App.tsx +0 -658
  892. package/src/ink/components/AppContext.ts +0 -21
  893. package/src/ink/components/Box.tsx +0 -214
  894. package/src/ink/components/Button.tsx +0 -192
  895. package/src/ink/components/ClockContext.tsx +0 -112
  896. package/src/ink/components/CursorDeclarationContext.ts +0 -32
  897. package/src/ink/components/ErrorOverview.tsx +0 -109
  898. package/src/ink/components/Link.tsx +0 -42
  899. package/src/ink/components/Newline.tsx +0 -39
  900. package/src/ink/components/NoSelect.tsx +0 -68
  901. package/src/ink/components/RawAnsi.tsx +0 -57
  902. package/src/ink/components/ScrollBox.tsx +0 -237
  903. package/src/ink/components/Spacer.tsx +0 -20
  904. package/src/ink/components/StdinContext.ts +0 -49
  905. package/src/ink/components/TerminalFocusContext.tsx +0 -52
  906. package/src/ink/components/TerminalSizeContext.tsx +0 -7
  907. package/src/ink/components/Text.tsx +0 -254
  908. package/src/ink/constants.ts +0 -2
  909. package/src/ink/cursor.ts +0 -1
  910. package/src/ink/devtools.ts +0 -2
  911. package/src/ink/dom.ts +0 -484
  912. package/src/ink/events/click-event.ts +0 -38
  913. package/src/ink/events/dispatcher.ts +0 -233
  914. package/src/ink/events/emitter.ts +0 -39
  915. package/src/ink/events/event-handlers.ts +0 -73
  916. package/src/ink/events/event.ts +0 -11
  917. package/src/ink/events/focus-event.ts +0 -21
  918. package/src/ink/events/input-event.ts +0 -205
  919. package/src/ink/events/keyboard-event.ts +0 -51
  920. package/src/ink/events/paste-event.ts +0 -1
  921. package/src/ink/events/resize-event.ts +0 -1
  922. package/src/ink/events/terminal-event.ts +0 -107
  923. package/src/ink/events/terminal-focus-event.ts +0 -19
  924. package/src/ink/focus.ts +0 -181
  925. package/src/ink/frame.ts +0 -124
  926. package/src/ink/get-max-width.ts +0 -27
  927. package/src/ink/global.d.ts +0 -1
  928. package/src/ink/hit-test.ts +0 -130
  929. package/src/ink/hooks/use-animation-frame.ts +0 -57
  930. package/src/ink/hooks/use-app.ts +0 -8
  931. package/src/ink/hooks/use-declared-cursor.ts +0 -73
  932. package/src/ink/hooks/use-input.ts +0 -92
  933. package/src/ink/hooks/use-interval.ts +0 -67
  934. package/src/ink/hooks/use-search-highlight.ts +0 -53
  935. package/src/ink/hooks/use-selection.ts +0 -104
  936. package/src/ink/hooks/use-stdin.ts +0 -8
  937. package/src/ink/hooks/use-tab-status.ts +0 -72
  938. package/src/ink/hooks/use-terminal-focus.ts +0 -16
  939. package/src/ink/hooks/use-terminal-title.ts +0 -31
  940. package/src/ink/hooks/use-terminal-viewport.ts +0 -96
  941. package/src/ink/ink.tsx +0 -1723
  942. package/src/ink/instances.ts +0 -10
  943. package/src/ink/layout/engine.ts +0 -6
  944. package/src/ink/layout/geometry.ts +0 -97
  945. package/src/ink/layout/node.ts +0 -152
  946. package/src/ink/layout/yoga.ts +0 -308
  947. package/src/ink/line-width-cache.ts +0 -24
  948. package/src/ink/log-update.ts +0 -773
  949. package/src/ink/measure-element.ts +0 -23
  950. package/src/ink/measure-text.ts +0 -47
  951. package/src/ink/node-cache.ts +0 -54
  952. package/src/ink/optimizer.ts +0 -93
  953. package/src/ink/output.ts +0 -797
  954. package/src/ink/parse-keypress.ts +0 -801
  955. package/src/ink/reconciler.ts +0 -512
  956. package/src/ink/render-border.ts +0 -231
  957. package/src/ink/render-node-to-output.ts +0 -1462
  958. package/src/ink/render-to-screen.ts +0 -231
  959. package/src/ink/renderer.ts +0 -178
  960. package/src/ink/root.ts +0 -184
  961. package/src/ink/screen.ts +0 -1486
  962. package/src/ink/searchHighlight.ts +0 -93
  963. package/src/ink/selection.ts +0 -917
  964. package/src/ink/squash-text-nodes.ts +0 -92
  965. package/src/ink/stringWidth.ts +0 -222
  966. package/src/ink/styles.ts +0 -771
  967. package/src/ink/supports-hyperlinks.ts +0 -57
  968. package/src/ink/tabstops.ts +0 -46
  969. package/src/ink/terminal-focus-state.ts +0 -47
  970. package/src/ink/terminal-querier.ts +0 -212
  971. package/src/ink/terminal.ts +0 -248
  972. package/src/ink/termio/ansi.ts +0 -75
  973. package/src/ink/termio/csi.ts +0 -319
  974. package/src/ink/termio/dec.ts +0 -60
  975. package/src/ink/termio/esc.ts +0 -67
  976. package/src/ink/termio/osc.ts +0 -493
  977. package/src/ink/termio/parser.ts +0 -394
  978. package/src/ink/termio/sgr.ts +0 -308
  979. package/src/ink/termio/tokenize.ts +0 -319
  980. package/src/ink/termio/types.ts +0 -236
  981. package/src/ink/termio.ts +0 -42
  982. package/src/ink/useTerminalNotification.ts +0 -126
  983. package/src/ink/warn.ts +0 -9
  984. package/src/ink/widest-line.ts +0 -19
  985. package/src/ink/wrap-text.ts +0 -74
  986. package/src/ink/wrapAnsi.ts +0 -20
  987. package/src/ink.ts +0 -85
  988. package/src/interactiveHelpers.tsx +0 -366
  989. package/src/jobs/classifier.ts +0 -2
  990. package/src/keybindings/KeybindingContext.tsx +0 -243
  991. package/src/keybindings/KeybindingProviderSetup.tsx +0 -308
  992. package/src/keybindings/defaultBindings.ts +0 -340
  993. package/src/keybindings/loadUserBindings.ts +0 -472
  994. package/src/keybindings/match.ts +0 -120
  995. package/src/keybindings/parser.ts +0 -203
  996. package/src/keybindings/reservedShortcuts.ts +0 -127
  997. package/src/keybindings/resolver.ts +0 -244
  998. package/src/keybindings/schema.ts +0 -236
  999. package/src/keybindings/shortcutFormat.ts +0 -63
  1000. package/src/keybindings/template.ts +0 -52
  1001. package/src/keybindings/types.ts +0 -3
  1002. package/src/keybindings/useKeybinding.ts +0 -196
  1003. package/src/keybindings/useShortcutDisplay.ts +0 -59
  1004. package/src/keybindings/validate.ts +0 -498
  1005. package/src/main.tsx +0 -4684
  1006. package/src/memdir/findRelevantMemories.ts +0 -141
  1007. package/src/memdir/memdir.ts +0 -507
  1008. package/src/memdir/memoryAge.ts +0 -53
  1009. package/src/memdir/memoryScan.ts +0 -94
  1010. package/src/memdir/memoryShapeTelemetry.ts +0 -2
  1011. package/src/memdir/memoryTypes.ts +0 -271
  1012. package/src/memdir/paths.ts +0 -278
  1013. package/src/memdir/teamMemPaths.ts +0 -292
  1014. package/src/memdir/teamMemPrompts.ts +0 -100
  1015. package/src/migrations/migrateAutoUpdatesToSettings.ts +0 -61
  1016. package/src/migrations/migrateBypassPermissionsAcceptedToSettings.ts +0 -40
  1017. package/src/migrations/migrateEnableAllProjectMcpServersToSettings.ts +0 -118
  1018. package/src/migrations/migrateFennecToOpus.ts +0 -45
  1019. package/src/migrations/migrateLegacyOpusToCurrent.ts +0 -57
  1020. package/src/migrations/migrateOpusToOpus1m.ts +0 -43
  1021. package/src/migrations/migrateReplBridgeEnabledToRemoteControlAtStartup.ts +0 -22
  1022. package/src/migrations/migrateSonnet1mToSonnet45.ts +0 -48
  1023. package/src/migrations/migrateSonnet45ToSonnet46.ts +0 -67
  1024. package/src/migrations/resetAutoModeOptInForDefaultOffer.ts +0 -51
  1025. package/src/migrations/resetProToOpusDefault.ts +0 -51
  1026. package/src/moreright/useMoreRight.tsx +0 -26
  1027. package/src/native-ts/color-diff/index.ts +0 -1001
  1028. package/src/native-ts/file-index/index.ts +0 -370
  1029. package/src/native-ts/yoga-layout/enums.ts +0 -134
  1030. package/src/native-ts/yoga-layout/index.ts +0 -2578
  1031. package/src/outputStyles/loadOutputStylesDir.ts +0 -98
  1032. package/src/plugins/builtinPlugins.ts +0 -159
  1033. package/src/plugins/bundled/index.ts +0 -23
  1034. package/src/proactive/index.ts +0 -1
  1035. package/src/proactive/useProactive.ts +0 -1
  1036. package/src/projectOnboardingState.ts +0 -83
  1037. package/src/query/config.ts +0 -46
  1038. package/src/query/deps.ts +0 -33
  1039. package/src/query/stopHooks.ts +0 -473
  1040. package/src/query/tokenBudget.ts +0 -93
  1041. package/src/query/transitions.ts +0 -2
  1042. package/src/query.ts +0 -1729
  1043. package/src/remote/RemoteSessionManager.ts +0 -343
  1044. package/src/remote/SessionsWebSocket.ts +0 -404
  1045. package/src/remote/remotePermissionBridge.ts +0 -78
  1046. package/src/remote/sdkMessageAdapter.ts +0 -302
  1047. package/src/replLauncher.tsx +0 -23
  1048. package/src/schemas/hooks.ts +0 -222
  1049. package/src/screens/Doctor.tsx +0 -575
  1050. package/src/screens/REPL.tsx +0 -5006
  1051. package/src/screens/ResumeConversation.tsx +0 -399
  1052. package/src/self-hosted-runner/main.ts +0 -2
  1053. package/src/server/backends/dangerousBackend.ts +0 -2
  1054. package/src/server/connectHeadless.ts +0 -2
  1055. package/src/server/createDirectConnectSession.ts +0 -88
  1056. package/src/server/directConnectManager.ts +0 -213
  1057. package/src/server/lockfile.ts +0 -2
  1058. package/src/server/parseConnectUrl.ts +0 -2
  1059. package/src/server/server.ts +0 -2
  1060. package/src/server/serverBanner.ts +0 -2
  1061. package/src/server/serverLog.ts +0 -2
  1062. package/src/server/sessionManager.ts +0 -2
  1063. package/src/server/types.ts +0 -57
  1064. package/src/services/AgentSummary/agentSummary.ts +0 -179
  1065. package/src/services/MagicDocs/magicDocs.ts +0 -254
  1066. package/src/services/MagicDocs/prompts.ts +0 -127
  1067. package/src/services/PromptSuggestion/promptSuggestion.ts +0 -523
  1068. package/src/services/PromptSuggestion/speculation.ts +0 -991
  1069. package/src/services/SessionMemory/prompts.ts +0 -324
  1070. package/src/services/SessionMemory/sessionMemory.ts +0 -495
  1071. package/src/services/SessionMemory/sessionMemoryUtils.ts +0 -207
  1072. package/src/services/analytics/config.ts +0 -38
  1073. package/src/services/analytics/datadog.ts +0 -307
  1074. package/src/services/analytics/firstPartyEventLogger.ts +0 -449
  1075. package/src/services/analytics/firstPartyEventLoggingExporter.ts +0 -806
  1076. package/src/services/analytics/growthbook.ts +0 -1155
  1077. package/src/services/analytics/index.ts +0 -173
  1078. package/src/services/analytics/metadata.ts +0 -973
  1079. package/src/services/analytics/sink.ts +0 -114
  1080. package/src/services/analytics/sinkKillswitch.ts +0 -25
  1081. package/src/services/api/adminRequests.ts +0 -119
  1082. package/src/services/api/bootstrap.ts +0 -141
  1083. package/src/services/api/claude.ts +0 -3419
  1084. package/src/services/api/client.ts +0 -389
  1085. package/src/services/api/dumpPrompts.ts +0 -226
  1086. package/src/services/api/emptyUsage.ts +0 -22
  1087. package/src/services/api/errorUtils.ts +0 -260
  1088. package/src/services/api/errors.ts +0 -1205
  1089. package/src/services/api/filesApi.ts +0 -748
  1090. package/src/services/api/firstTokenDate.ts +0 -60
  1091. package/src/services/api/grove.ts +0 -357
  1092. package/src/services/api/logging.ts +0 -788
  1093. package/src/services/api/metricsOptOut.ts +0 -159
  1094. package/src/services/api/overageCreditGrant.ts +0 -137
  1095. package/src/services/api/promptCacheBreakDetection.ts +0 -727
  1096. package/src/services/api/referral.ts +0 -281
  1097. package/src/services/api/sessionIngress.ts +0 -514
  1098. package/src/services/api/ultrareviewQuota.ts +0 -38
  1099. package/src/services/api/usage.ts +0 -63
  1100. package/src/services/api/withRetry.ts +0 -818
  1101. package/src/services/autoDream/autoDream.ts +0 -324
  1102. package/src/services/autoDream/config.ts +0 -21
  1103. package/src/services/autoDream/consolidationLock.ts +0 -140
  1104. package/src/services/autoDream/consolidationPrompt.ts +0 -65
  1105. package/src/services/autoDream/dream.ts +0 -1
  1106. package/src/services/awaySummary.ts +0 -74
  1107. package/src/services/claudeAiLimits.ts +0 -515
  1108. package/src/services/claudeAiLimitsHook.ts +0 -23
  1109. package/src/services/compact/apiMicrocompact.ts +0 -153
  1110. package/src/services/compact/autoCompact.ts +0 -351
  1111. package/src/services/compact/cachedMCConfig.ts +0 -2
  1112. package/src/services/compact/cachedMicrocompact.ts +0 -2
  1113. package/src/services/compact/compact.ts +0 -1705
  1114. package/src/services/compact/compactWarningHook.ts +0 -16
  1115. package/src/services/compact/compactWarningState.ts +0 -18
  1116. package/src/services/compact/grouping.ts +0 -63
  1117. package/src/services/compact/microCompact.ts +0 -530
  1118. package/src/services/compact/postCompactCleanup.ts +0 -77
  1119. package/src/services/compact/prompt.ts +0 -374
  1120. package/src/services/compact/reactiveCompact.ts +0 -2
  1121. package/src/services/compact/sessionMemoryCompact.ts +0 -630
  1122. package/src/services/compact/snipCompact.ts +0 -1
  1123. package/src/services/compact/snipProjection.ts +0 -2
  1124. package/src/services/compact/timeBasedMCConfig.ts +0 -43
  1125. package/src/services/contextCollapse/index.ts +0 -2
  1126. package/src/services/contextCollapse/operations.ts +0 -2
  1127. package/src/services/contextCollapse/persist.ts +0 -2
  1128. package/src/services/diagnosticTracking.ts +0 -397
  1129. package/src/services/extractMemories/extractMemories.ts +0 -615
  1130. package/src/services/extractMemories/prompts.ts +0 -154
  1131. package/src/services/internalLogging.ts +0 -90
  1132. package/src/services/lsp/LSPClient.ts +0 -447
  1133. package/src/services/lsp/LSPDiagnosticRegistry.ts +0 -386
  1134. package/src/services/lsp/LSPServerInstance.ts +0 -511
  1135. package/src/services/lsp/LSPServerManager.ts +0 -420
  1136. package/src/services/lsp/config.ts +0 -79
  1137. package/src/services/lsp/manager.ts +0 -289
  1138. package/src/services/lsp/passiveFeedback.ts +0 -328
  1139. package/src/services/lsp/types.ts +0 -3
  1140. package/src/services/mcp/InProcessTransport.ts +0 -63
  1141. package/src/services/mcp/MCPConnectionManager.tsx +0 -73
  1142. package/src/services/mcp/SdkControlTransport.ts +0 -136
  1143. package/src/services/mcp/auth.ts +0 -2465
  1144. package/src/services/mcp/channelAllowlist.ts +0 -76
  1145. package/src/services/mcp/channelNotification.ts +0 -316
  1146. package/src/services/mcp/channelPermissions.ts +0 -240
  1147. package/src/services/mcp/claudeai.ts +0 -164
  1148. package/src/services/mcp/client.ts +0 -3348
  1149. package/src/services/mcp/config.ts +0 -1578
  1150. package/src/services/mcp/elicitationHandler.ts +0 -313
  1151. package/src/services/mcp/envExpansion.ts +0 -38
  1152. package/src/services/mcp/headersHelper.ts +0 -138
  1153. package/src/services/mcp/mcpStringUtils.ts +0 -106
  1154. package/src/services/mcp/normalization.ts +0 -23
  1155. package/src/services/mcp/oauthPort.ts +0 -78
  1156. package/src/services/mcp/officialRegistry.ts +0 -72
  1157. package/src/services/mcp/types.ts +0 -258
  1158. package/src/services/mcp/useManageMCPConnections.ts +0 -1141
  1159. package/src/services/mcp/utils.ts +0 -575
  1160. package/src/services/mcp/vscodeSdkMcp.ts +0 -112
  1161. package/src/services/mcp/xaa.ts +0 -511
  1162. package/src/services/mcp/xaaIdpLogin.ts +0 -487
  1163. package/src/services/mcpServerApproval.tsx +0 -41
  1164. package/src/services/mockRateLimits.ts +0 -882
  1165. package/src/services/notifier.ts +0 -156
  1166. package/src/services/oauth/auth-code-listener.ts +0 -211
  1167. package/src/services/oauth/client.ts +0 -566
  1168. package/src/services/oauth/crypto.ts +0 -23
  1169. package/src/services/oauth/getOauthProfile.ts +0 -53
  1170. package/src/services/oauth/index.ts +0 -198
  1171. package/src/services/oauth/types.ts +0 -7
  1172. package/src/services/plugins/PluginInstallationManager.ts +0 -184
  1173. package/src/services/plugins/pluginCliCommands.ts +0 -344
  1174. package/src/services/plugins/pluginOperations.ts +0 -1088
  1175. package/src/services/policyLimits/index.ts +0 -663
  1176. package/src/services/policyLimits/types.ts +0 -27
  1177. package/src/services/preventSleep.ts +0 -165
  1178. package/src/services/rateLimitMessages.ts +0 -344
  1179. package/src/services/rateLimitMocking.ts +0 -144
  1180. package/src/services/remoteManagedSettings/index.ts +0 -638
  1181. package/src/services/remoteManagedSettings/securityCheck.tsx +0 -74
  1182. package/src/services/remoteManagedSettings/syncCache.ts +0 -112
  1183. package/src/services/remoteManagedSettings/syncCacheState.ts +0 -96
  1184. package/src/services/remoteManagedSettings/types.ts +0 -31
  1185. package/src/services/sessionTranscript/sessionTranscript.ts +0 -2
  1186. package/src/services/settingsSync/index.ts +0 -581
  1187. package/src/services/settingsSync/types.ts +0 -67
  1188. package/src/services/skillSearch/featureCheck.ts +0 -2
  1189. package/src/services/skillSearch/localSearch.ts +0 -2
  1190. package/src/services/skillSearch/prefetch.ts +0 -2
  1191. package/src/services/skillSearch/remoteSkillLoader.ts +0 -2
  1192. package/src/services/skillSearch/remoteSkillState.ts +0 -2
  1193. package/src/services/skillSearch/signals.ts +0 -1
  1194. package/src/services/skillSearch/telemetry.ts +0 -2
  1195. package/src/services/teamMemorySync/index.ts +0 -1256
  1196. package/src/services/teamMemorySync/secretScanner.ts +0 -324
  1197. package/src/services/teamMemorySync/teamMemSecretGuard.ts +0 -44
  1198. package/src/services/teamMemorySync/types.ts +0 -156
  1199. package/src/services/teamMemorySync/watcher.ts +0 -387
  1200. package/src/services/tips/tipHistory.ts +0 -17
  1201. package/src/services/tips/tipRegistry.ts +0 -686
  1202. package/src/services/tips/tipScheduler.ts +0 -58
  1203. package/src/services/tips/types.ts +0 -5
  1204. package/src/services/tokenEstimation.ts +0 -495
  1205. package/src/services/toolUseSummary/toolUseSummaryGenerator.ts +0 -112
  1206. package/src/services/tools/StreamingToolExecutor.ts +0 -530
  1207. package/src/services/tools/toolExecution.ts +0 -1745
  1208. package/src/services/tools/toolHooks.ts +0 -650
  1209. package/src/services/tools/toolOrchestration.ts +0 -188
  1210. package/src/services/vcr.ts +0 -406
  1211. package/src/services/voice.ts +0 -525
  1212. package/src/services/voiceKeyterms.ts +0 -106
  1213. package/src/services/voiceStreamSTT.ts +0 -544
  1214. package/src/setup.ts +0 -477
  1215. package/src/shims/bun-bundle.ts +0 -18
  1216. package/src/shims/macro.ts +0 -12
  1217. package/src/skills/bundled/batch.ts +0 -124
  1218. package/src/skills/bundled/claude-api/SKILL.md +0 -1
  1219. package/src/skills/bundled/claude-api/SKILL.md.ts +0 -1
  1220. package/src/skills/bundled/claude-api/csharp/claude-api.md +0 -1
  1221. package/src/skills/bundled/claude-api/csharp/claude-api.md.ts +0 -1
  1222. package/src/skills/bundled/claude-api/curl/examples.md +0 -1
  1223. package/src/skills/bundled/claude-api/curl/examples.md.ts +0 -1
  1224. package/src/skills/bundled/claude-api/go/claude-api.md +0 -1
  1225. package/src/skills/bundled/claude-api/go/claude-api.md.ts +0 -1
  1226. package/src/skills/bundled/claude-api/java/claude-api.md +0 -1
  1227. package/src/skills/bundled/claude-api/java/claude-api.md.ts +0 -1
  1228. package/src/skills/bundled/claude-api/php/claude-api.md +0 -1
  1229. package/src/skills/bundled/claude-api/php/claude-api.md.ts +0 -1
  1230. package/src/skills/bundled/claude-api/python/agent-sdk/README.md +0 -1
  1231. package/src/skills/bundled/claude-api/python/agent-sdk/README.md.ts +0 -1
  1232. package/src/skills/bundled/claude-api/python/agent-sdk/patterns.md +0 -1
  1233. package/src/skills/bundled/claude-api/python/agent-sdk/patterns.md.ts +0 -1
  1234. package/src/skills/bundled/claude-api/python/claude-api/README.md +0 -1
  1235. package/src/skills/bundled/claude-api/python/claude-api/README.md.ts +0 -1
  1236. package/src/skills/bundled/claude-api/python/claude-api/batches.md +0 -1
  1237. package/src/skills/bundled/claude-api/python/claude-api/batches.md.ts +0 -1
  1238. package/src/skills/bundled/claude-api/python/claude-api/files-api.md +0 -1
  1239. package/src/skills/bundled/claude-api/python/claude-api/files-api.md.ts +0 -1
  1240. package/src/skills/bundled/claude-api/python/claude-api/streaming.md +0 -1
  1241. package/src/skills/bundled/claude-api/python/claude-api/streaming.md.ts +0 -1
  1242. package/src/skills/bundled/claude-api/python/claude-api/tool-use.md +0 -1
  1243. package/src/skills/bundled/claude-api/python/claude-api/tool-use.md.ts +0 -1
  1244. package/src/skills/bundled/claude-api/ruby/claude-api.md +0 -1
  1245. package/src/skills/bundled/claude-api/ruby/claude-api.md.ts +0 -1
  1246. package/src/skills/bundled/claude-api/shared/error-codes.md +0 -1
  1247. package/src/skills/bundled/claude-api/shared/error-codes.md.ts +0 -1
  1248. package/src/skills/bundled/claude-api/shared/live-sources.md +0 -1
  1249. package/src/skills/bundled/claude-api/shared/live-sources.md.ts +0 -1
  1250. package/src/skills/bundled/claude-api/shared/models.md +0 -1
  1251. package/src/skills/bundled/claude-api/shared/models.md.ts +0 -1
  1252. package/src/skills/bundled/claude-api/shared/prompt-caching.md +0 -1
  1253. package/src/skills/bundled/claude-api/shared/prompt-caching.md.ts +0 -1
  1254. package/src/skills/bundled/claude-api/shared/tool-use-concepts.md +0 -1
  1255. package/src/skills/bundled/claude-api/shared/tool-use-concepts.md.ts +0 -1
  1256. package/src/skills/bundled/claude-api/typescript/agent-sdk/README.md +0 -1
  1257. package/src/skills/bundled/claude-api/typescript/agent-sdk/README.md.ts +0 -1
  1258. package/src/skills/bundled/claude-api/typescript/agent-sdk/patterns.md +0 -1
  1259. package/src/skills/bundled/claude-api/typescript/agent-sdk/patterns.md.ts +0 -1
  1260. package/src/skills/bundled/claude-api/typescript/claude-api/README.md +0 -1
  1261. package/src/skills/bundled/claude-api/typescript/claude-api/README.md.ts +0 -1
  1262. package/src/skills/bundled/claude-api/typescript/claude-api/batches.md +0 -1
  1263. package/src/skills/bundled/claude-api/typescript/claude-api/batches.md.ts +0 -1
  1264. package/src/skills/bundled/claude-api/typescript/claude-api/files-api.md +0 -1
  1265. package/src/skills/bundled/claude-api/typescript/claude-api/files-api.md.ts +0 -1
  1266. package/src/skills/bundled/claude-api/typescript/claude-api/streaming.md +0 -1
  1267. package/src/skills/bundled/claude-api/typescript/claude-api/streaming.md.ts +0 -1
  1268. package/src/skills/bundled/claude-api/typescript/claude-api/tool-use.md +0 -1
  1269. package/src/skills/bundled/claude-api/typescript/claude-api/tool-use.md.ts +0 -1
  1270. package/src/skills/bundled/claudeApi.ts +0 -196
  1271. package/src/skills/bundled/claudeApiContent.ts +0 -75
  1272. package/src/skills/bundled/claudeInChrome.ts +0 -34
  1273. package/src/skills/bundled/debug.ts +0 -103
  1274. package/src/skills/bundled/dream.ts +0 -1
  1275. package/src/skills/bundled/hunter.ts +0 -1
  1276. package/src/skills/bundled/index.ts +0 -79
  1277. package/src/skills/bundled/keybindings.ts +0 -339
  1278. package/src/skills/bundled/loop.ts +0 -92
  1279. package/src/skills/bundled/loremIpsum.ts +0 -282
  1280. package/src/skills/bundled/remember.ts +0 -82
  1281. package/src/skills/bundled/runSkillGenerator.ts +0 -1
  1282. package/src/skills/bundled/scheduleRemoteAgents.ts +0 -447
  1283. package/src/skills/bundled/simplify.ts +0 -69
  1284. package/src/skills/bundled/skillify.ts +0 -197
  1285. package/src/skills/bundled/stuck.ts +0 -79
  1286. package/src/skills/bundled/updateConfig.ts +0 -475
  1287. package/src/skills/bundled/verify/SKILL.md +0 -1
  1288. package/src/skills/bundled/verify/SKILL.md.ts +0 -1
  1289. package/src/skills/bundled/verify/examples/cli.md +0 -1
  1290. package/src/skills/bundled/verify/examples/cli.md.ts +0 -1
  1291. package/src/skills/bundled/verify/examples/server.md +0 -1
  1292. package/src/skills/bundled/verify/examples/server.md.ts +0 -1
  1293. package/src/skills/bundled/verify.ts +0 -30
  1294. package/src/skills/bundled/verifyContent.ts +0 -13
  1295. package/src/skills/bundledSkills.ts +0 -220
  1296. package/src/skills/loadSkillsDir.ts +0 -1086
  1297. package/src/skills/mcpSkillBuilders.ts +0 -44
  1298. package/src/skills/mcpSkills.ts +0 -2
  1299. package/src/ssh/SSHSessionManager.ts +0 -1
  1300. package/src/ssh/createSSHSession.ts +0 -1
  1301. package/src/state/AppState.tsx +0 -200
  1302. package/src/state/AppStateStore.ts +0 -569
  1303. package/src/state/onChangeAppState.ts +0 -171
  1304. package/src/state/selectors.ts +0 -76
  1305. package/src/state/store.ts +0 -34
  1306. package/src/state/teammateViewHelpers.ts +0 -141
  1307. package/src/tasks/DreamTask/DreamTask.ts +0 -157
  1308. package/src/tasks/InProcessTeammateTask/InProcessTeammateTask.tsx +0 -126
  1309. package/src/tasks/InProcessTeammateTask/types.ts +0 -121
  1310. package/src/tasks/LocalAgentTask/LocalAgentTask.tsx +0 -683
  1311. package/src/tasks/LocalMainSessionTask.ts +0 -479
  1312. package/src/tasks/LocalShellTask/LocalShellTask.tsx +0 -523
  1313. package/src/tasks/LocalShellTask/guards.ts +0 -41
  1314. package/src/tasks/LocalShellTask/killShellTasks.ts +0 -76
  1315. package/src/tasks/LocalWorkflowTask/LocalWorkflowTask.ts +0 -1
  1316. package/src/tasks/MonitorMcpTask/MonitorMcpTask.ts +0 -1
  1317. package/src/tasks/RemoteAgentTask/RemoteAgentTask.tsx +0 -856
  1318. package/src/tasks/pillLabel.ts +0 -82
  1319. package/src/tasks/stopTask.ts +0 -100
  1320. package/src/tasks/types.ts +0 -46
  1321. package/src/tasks.ts +0 -39
  1322. package/src/tools/AgentTool/AgentTool.tsx +0 -1398
  1323. package/src/tools/AgentTool/UI.tsx +0 -872
  1324. package/src/tools/AgentTool/agentColorManager.ts +0 -66
  1325. package/src/tools/AgentTool/agentDisplay.ts +0 -104
  1326. package/src/tools/AgentTool/agentMemory.ts +0 -177
  1327. package/src/tools/AgentTool/agentMemorySnapshot.ts +0 -197
  1328. package/src/tools/AgentTool/agentToolUtils.ts +0 -686
  1329. package/src/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +0 -205
  1330. package/src/tools/AgentTool/built-in/exploreAgent.ts +0 -87
  1331. package/src/tools/AgentTool/built-in/generalPurposeAgent.ts +0 -34
  1332. package/src/tools/AgentTool/built-in/planAgent.ts +0 -92
  1333. package/src/tools/AgentTool/built-in/statuslineSetup.ts +0 -144
  1334. package/src/tools/AgentTool/built-in/verificationAgent.ts +0 -152
  1335. package/src/tools/AgentTool/built-in/warpGrepAgent.ts +0 -67
  1336. package/src/tools/AgentTool/builtInAgents.ts +0 -73
  1337. package/src/tools/AgentTool/constants.ts +0 -12
  1338. package/src/tools/AgentTool/forkSubagent.ts +0 -210
  1339. package/src/tools/AgentTool/loadAgentsDir.ts +0 -755
  1340. package/src/tools/AgentTool/prompt.ts +0 -288
  1341. package/src/tools/AgentTool/resumeAgent.ts +0 -265
  1342. package/src/tools/AgentTool/runAgent.ts +0 -973
  1343. package/src/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +0 -266
  1344. package/src/tools/AskUserQuestionTool/prompt.ts +0 -44
  1345. package/src/tools/BashTool/BashTool.tsx +0 -1144
  1346. package/src/tools/BashTool/BashToolResultMessage.tsx +0 -191
  1347. package/src/tools/BashTool/UI.tsx +0 -185
  1348. package/src/tools/BashTool/bashCommandHelpers.ts +0 -265
  1349. package/src/tools/BashTool/bashPermissions.ts +0 -2621
  1350. package/src/tools/BashTool/bashSecurity.ts +0 -2592
  1351. package/src/tools/BashTool/commandSemantics.ts +0 -140
  1352. package/src/tools/BashTool/commentLabel.ts +0 -13
  1353. package/src/tools/BashTool/destructiveCommandWarning.ts +0 -102
  1354. package/src/tools/BashTool/modeValidation.ts +0 -115
  1355. package/src/tools/BashTool/pathValidation.ts +0 -1303
  1356. package/src/tools/BashTool/prompt.ts +0 -369
  1357. package/src/tools/BashTool/readOnlyValidation.ts +0 -1990
  1358. package/src/tools/BashTool/sedEditParser.ts +0 -322
  1359. package/src/tools/BashTool/sedValidation.ts +0 -684
  1360. package/src/tools/BashTool/shouldUseSandbox.ts +0 -153
  1361. package/src/tools/BashTool/toolName.ts +0 -2
  1362. package/src/tools/BashTool/utils.ts +0 -223
  1363. package/src/tools/BriefTool/BriefTool.ts +0 -204
  1364. package/src/tools/BriefTool/UI.tsx +0 -101
  1365. package/src/tools/BriefTool/attachments.ts +0 -110
  1366. package/src/tools/BriefTool/prompt.ts +0 -22
  1367. package/src/tools/BriefTool/upload.ts +0 -174
  1368. package/src/tools/ConfigTool/ConfigTool.ts +0 -467
  1369. package/src/tools/ConfigTool/UI.tsx +0 -38
  1370. package/src/tools/ConfigTool/constants.ts +0 -1
  1371. package/src/tools/ConfigTool/prompt.ts +0 -93
  1372. package/src/tools/ConfigTool/supportedSettings.ts +0 -211
  1373. package/src/tools/CtxInspectTool/CtxInspectTool.ts +0 -1
  1374. package/src/tools/DiscoverSkillsTool/prompt.ts +0 -2
  1375. package/src/tools/EnterPlanModeTool/EnterPlanModeTool.ts +0 -126
  1376. package/src/tools/EnterPlanModeTool/UI.tsx +0 -33
  1377. package/src/tools/EnterPlanModeTool/constants.ts +0 -1
  1378. package/src/tools/EnterPlanModeTool/prompt.ts +0 -170
  1379. package/src/tools/EnterWorktreeTool/EnterWorktreeTool.ts +0 -127
  1380. package/src/tools/EnterWorktreeTool/UI.tsx +0 -20
  1381. package/src/tools/EnterWorktreeTool/constants.ts +0 -1
  1382. package/src/tools/EnterWorktreeTool/prompt.ts +0 -30
  1383. package/src/tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts +0 -493
  1384. package/src/tools/ExitPlanModeTool/UI.tsx +0 -82
  1385. package/src/tools/ExitPlanModeTool/constants.ts +0 -2
  1386. package/src/tools/ExitPlanModeTool/prompt.ts +0 -29
  1387. package/src/tools/ExitWorktreeTool/ExitWorktreeTool.ts +0 -329
  1388. package/src/tools/ExitWorktreeTool/UI.tsx +0 -25
  1389. package/src/tools/ExitWorktreeTool/constants.ts +0 -1
  1390. package/src/tools/ExitWorktreeTool/prompt.ts +0 -32
  1391. package/src/tools/FileEditTool/FileEditTool.ts +0 -625
  1392. package/src/tools/FileEditTool/UI.tsx +0 -289
  1393. package/src/tools/FileEditTool/constants.ts +0 -11
  1394. package/src/tools/FileEditTool/prompt.ts +0 -28
  1395. package/src/tools/FileEditTool/types.ts +0 -85
  1396. package/src/tools/FileEditTool/utils.ts +0 -775
  1397. package/src/tools/FileReadTool/FileReadTool.ts +0 -1183
  1398. package/src/tools/FileReadTool/UI.tsx +0 -185
  1399. package/src/tools/FileReadTool/imageProcessor.ts +0 -94
  1400. package/src/tools/FileReadTool/limits.ts +0 -92
  1401. package/src/tools/FileReadTool/prompt.ts +0 -49
  1402. package/src/tools/FileWriteTool/FileWriteTool.ts +0 -434
  1403. package/src/tools/FileWriteTool/UI.tsx +0 -405
  1404. package/src/tools/FileWriteTool/prompt.ts +0 -18
  1405. package/src/tools/GlobTool/GlobTool.ts +0 -198
  1406. package/src/tools/GlobTool/UI.tsx +0 -63
  1407. package/src/tools/GlobTool/prompt.ts +0 -7
  1408. package/src/tools/GrepTool/GrepTool.ts +0 -577
  1409. package/src/tools/GrepTool/UI.tsx +0 -201
  1410. package/src/tools/GrepTool/prompt.ts +0 -18
  1411. package/src/tools/LSPTool/LSPTool.ts +0 -860
  1412. package/src/tools/LSPTool/UI.tsx +0 -228
  1413. package/src/tools/LSPTool/formatters.ts +0 -592
  1414. package/src/tools/LSPTool/prompt.ts +0 -21
  1415. package/src/tools/LSPTool/schemas.ts +0 -215
  1416. package/src/tools/LSPTool/symbolContext.ts +0 -90
  1417. package/src/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +0 -123
  1418. package/src/tools/ListMcpResourcesTool/UI.tsx +0 -29
  1419. package/src/tools/ListMcpResourcesTool/prompt.ts +0 -20
  1420. package/src/tools/ListPeersTool/ListPeersTool.ts +0 -1
  1421. package/src/tools/MCPTool/MCPTool.ts +0 -77
  1422. package/src/tools/MCPTool/UI.tsx +0 -403
  1423. package/src/tools/MCPTool/classifyForCollapse.ts +0 -604
  1424. package/src/tools/MCPTool/prompt.ts +0 -3
  1425. package/src/tools/McpAuthTool/McpAuthTool.ts +0 -215
  1426. package/src/tools/MonitorTool/MonitorTool.ts +0 -2
  1427. package/src/tools/NotebookEditTool/NotebookEditTool.ts +0 -490
  1428. package/src/tools/NotebookEditTool/UI.tsx +0 -93
  1429. package/src/tools/NotebookEditTool/constants.ts +0 -2
  1430. package/src/tools/NotebookEditTool/prompt.ts +0 -3
  1431. package/src/tools/OverflowTestTool/OverflowTestTool.ts +0 -2
  1432. package/src/tools/PowerShellTool/PowerShellTool.tsx +0 -1001
  1433. package/src/tools/PowerShellTool/UI.tsx +0 -131
  1434. package/src/tools/PowerShellTool/clmTypes.ts +0 -211
  1435. package/src/tools/PowerShellTool/commandSemantics.ts +0 -142
  1436. package/src/tools/PowerShellTool/commonParameters.ts +0 -30
  1437. package/src/tools/PowerShellTool/destructiveCommandWarning.ts +0 -109
  1438. package/src/tools/PowerShellTool/gitSafety.ts +0 -176
  1439. package/src/tools/PowerShellTool/modeValidation.ts +0 -404
  1440. package/src/tools/PowerShellTool/pathValidation.ts +0 -2049
  1441. package/src/tools/PowerShellTool/powershellPermissions.ts +0 -1648
  1442. package/src/tools/PowerShellTool/powershellSecurity.ts +0 -1090
  1443. package/src/tools/PowerShellTool/prompt.ts +0 -145
  1444. package/src/tools/PowerShellTool/readOnlyValidation.ts +0 -1823
  1445. package/src/tools/PowerShellTool/toolName.ts +0 -2
  1446. package/src/tools/PushNotificationTool/PushNotificationTool.ts +0 -1
  1447. package/src/tools/REPLTool/REPLTool.ts +0 -1
  1448. package/src/tools/REPLTool/constants.ts +0 -46
  1449. package/src/tools/REPLTool/primitiveTools.ts +0 -39
  1450. package/src/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +0 -158
  1451. package/src/tools/ReadMcpResourceTool/UI.tsx +0 -37
  1452. package/src/tools/ReadMcpResourceTool/prompt.ts +0 -16
  1453. package/src/tools/RemoteTriggerTool/RemoteTriggerTool.ts +0 -161
  1454. package/src/tools/RemoteTriggerTool/UI.tsx +0 -17
  1455. package/src/tools/RemoteTriggerTool/prompt.ts +0 -15
  1456. package/src/tools/ReviewArtifactTool/ReviewArtifactTool.ts +0 -2
  1457. package/src/tools/ScheduleCronTool/CronCreateTool.ts +0 -157
  1458. package/src/tools/ScheduleCronTool/CronDeleteTool.ts +0 -95
  1459. package/src/tools/ScheduleCronTool/CronListTool.ts +0 -97
  1460. package/src/tools/ScheduleCronTool/UI.tsx +0 -60
  1461. package/src/tools/ScheduleCronTool/prompt.ts +0 -135
  1462. package/src/tools/SendMessageTool/SendMessageTool.ts +0 -917
  1463. package/src/tools/SendMessageTool/UI.tsx +0 -31
  1464. package/src/tools/SendMessageTool/constants.ts +0 -1
  1465. package/src/tools/SendMessageTool/prompt.ts +0 -49
  1466. package/src/tools/SendUserFileTool/SendUserFileTool.ts +0 -1
  1467. package/src/tools/SendUserFileTool/prompt.ts +0 -2
  1468. package/src/tools/SkillTool/SkillTool.ts +0 -1108
  1469. package/src/tools/SkillTool/UI.tsx +0 -128
  1470. package/src/tools/SkillTool/constants.ts +0 -1
  1471. package/src/tools/SkillTool/prompt.ts +0 -241
  1472. package/src/tools/SleepTool/SleepTool.ts +0 -1
  1473. package/src/tools/SleepTool/prompt.ts +0 -17
  1474. package/src/tools/SnipTool/SnipTool.ts +0 -1
  1475. package/src/tools/SnipTool/prompt.ts +0 -2
  1476. package/src/tools/SubscribePRTool/SubscribePRTool.ts +0 -1
  1477. package/src/tools/SuggestBackgroundPRTool/SuggestBackgroundPRTool.ts +0 -1
  1478. package/src/tools/SyntheticOutputTool/SyntheticOutputTool.ts +0 -163
  1479. package/src/tools/TaskCreateTool/TaskCreateTool.ts +0 -138
  1480. package/src/tools/TaskCreateTool/constants.ts +0 -1
  1481. package/src/tools/TaskCreateTool/prompt.ts +0 -56
  1482. package/src/tools/TaskGetTool/TaskGetTool.ts +0 -128
  1483. package/src/tools/TaskGetTool/constants.ts +0 -1
  1484. package/src/tools/TaskGetTool/prompt.ts +0 -24
  1485. package/src/tools/TaskListTool/TaskListTool.ts +0 -116
  1486. package/src/tools/TaskListTool/constants.ts +0 -1
  1487. package/src/tools/TaskListTool/prompt.ts +0 -49
  1488. package/src/tools/TaskOutputTool/TaskOutputTool.tsx +0 -584
  1489. package/src/tools/TaskOutputTool/constants.ts +0 -1
  1490. package/src/tools/TaskStopTool/TaskStopTool.ts +0 -131
  1491. package/src/tools/TaskStopTool/UI.tsx +0 -41
  1492. package/src/tools/TaskStopTool/prompt.ts +0 -8
  1493. package/src/tools/TaskUpdateTool/TaskUpdateTool.ts +0 -406
  1494. package/src/tools/TaskUpdateTool/constants.ts +0 -1
  1495. package/src/tools/TaskUpdateTool/prompt.ts +0 -77
  1496. package/src/tools/TeamCreateTool/TeamCreateTool.ts +0 -240
  1497. package/src/tools/TeamCreateTool/UI.tsx +0 -6
  1498. package/src/tools/TeamCreateTool/constants.ts +0 -1
  1499. package/src/tools/TeamCreateTool/prompt.ts +0 -113
  1500. package/src/tools/TeamDeleteTool/TeamDeleteTool.ts +0 -139
  1501. package/src/tools/TeamDeleteTool/UI.tsx +0 -20
  1502. package/src/tools/TeamDeleteTool/constants.ts +0 -1
  1503. package/src/tools/TeamDeleteTool/prompt.ts +0 -16
  1504. package/src/tools/TerminalCaptureTool/TerminalCaptureTool.ts +0 -1
  1505. package/src/tools/TerminalCaptureTool/prompt.ts +0 -2
  1506. package/src/tools/TodoWriteTool/TodoWriteTool.ts +0 -115
  1507. package/src/tools/TodoWriteTool/constants.ts +0 -1
  1508. package/src/tools/TodoWriteTool/prompt.ts +0 -184
  1509. package/src/tools/ToolSearchTool/ToolSearchTool.ts +0 -471
  1510. package/src/tools/ToolSearchTool/constants.ts +0 -1
  1511. package/src/tools/ToolSearchTool/prompt.ts +0 -121
  1512. package/src/tools/TungstenTool/TungstenLiveMonitor.ts +0 -3
  1513. package/src/tools/TungstenTool/TungstenLiveMonitor.tsx +0 -6
  1514. package/src/tools/TungstenTool/TungstenTool.ts +0 -26
  1515. package/src/tools/VerifyPlanExecutionTool/VerifyPlanExecutionTool.ts +0 -1
  1516. package/src/tools/VerifyPlanExecutionTool/constants.ts +0 -2
  1517. package/src/tools/WarpGrepTool/WarpGrepTool.ts +0 -106
  1518. package/src/tools/WebBrowserTool/WebBrowserPanel.ts +0 -2
  1519. package/src/tools/WebBrowserTool/WebBrowserTool.ts +0 -1
  1520. package/src/tools/WebFetchTool/UI.tsx +0 -72
  1521. package/src/tools/WebFetchTool/WebFetchTool.ts +0 -318
  1522. package/src/tools/WebFetchTool/preapproved.ts +0 -166
  1523. package/src/tools/WebFetchTool/prompt.ts +0 -46
  1524. package/src/tools/WebFetchTool/utils.ts +0 -530
  1525. package/src/tools/WebSearchTool/UI.tsx +0 -101
  1526. package/src/tools/WebSearchTool/WebSearchTool.ts +0 -435
  1527. package/src/tools/WebSearchTool/prompt.ts +0 -34
  1528. package/src/tools/WorkflowTool/WorkflowPermissionRequest.ts +0 -2
  1529. package/src/tools/WorkflowTool/WorkflowTool.ts +0 -2
  1530. package/src/tools/WorkflowTool/bundled/index.ts +0 -1
  1531. package/src/tools/WorkflowTool/constants.ts +0 -1
  1532. package/src/tools/WorkflowTool/createWorkflowCommand.ts +0 -2
  1533. package/src/tools/shared/gitOperationTracking.ts +0 -277
  1534. package/src/tools/shared/spawnMultiAgent.ts +0 -1093
  1535. package/src/tools/testing/TestingPermissionTool.tsx +0 -74
  1536. package/src/tools/utils.ts +0 -40
  1537. package/src/tools.ts +0 -394
  1538. package/src/types/command.ts +0 -216
  1539. package/src/types/connectorText.ts +0 -3
  1540. package/src/types/declarations/bun-globals.d.ts +0 -19
  1541. package/src/types/declarations/external-modules.d.ts +0 -120
  1542. package/src/types/declarations/react-compiler.d.ts +0 -3
  1543. package/src/types/fileSuggestion.ts +0 -1
  1544. package/src/types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts +0 -865
  1545. package/src/types/generated/events_mono/common/v1/auth.ts +0 -100
  1546. package/src/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts +0 -223
  1547. package/src/types/generated/google/protobuf/timestamp.ts +0 -187
  1548. package/src/types/hooks.ts +0 -290
  1549. package/src/types/ids.ts +0 -44
  1550. package/src/types/logs.ts +0 -330
  1551. package/src/types/message.ts +0 -40
  1552. package/src/types/messageQueueTypes.ts +0 -2
  1553. package/src/types/notebook.ts +0 -7
  1554. package/src/types/permissions.ts +0 -441
  1555. package/src/types/plugin.ts +0 -363
  1556. package/src/types/statusLine.ts +0 -1
  1557. package/src/types/textInputTypes.ts +0 -387
  1558. package/src/types/tools.ts +0 -11
  1559. package/src/types/utils.ts +0 -2
  1560. package/src/upstreamproxy/relay.ts +0 -455
  1561. package/src/upstreamproxy/upstreamproxy.ts +0 -285
  1562. package/src/utils/CircularBuffer.ts +0 -84
  1563. package/src/utils/Cursor.ts +0 -1530
  1564. package/src/utils/QueryGuard.ts +0 -121
  1565. package/src/utils/Shell.ts +0 -474
  1566. package/src/utils/ShellCommand.ts +0 -465
  1567. package/src/utils/abortController.ts +0 -99
  1568. package/src/utils/activityManager.ts +0 -164
  1569. package/src/utils/advisor.ts +0 -145
  1570. package/src/utils/agentContext.ts +0 -178
  1571. package/src/utils/agentId.ts +0 -99
  1572. package/src/utils/agentSwarmsEnabled.ts +0 -44
  1573. package/src/utils/agenticSessionSearch.ts +0 -307
  1574. package/src/utils/analyzeContext.ts +0 -1382
  1575. package/src/utils/ansiToPng.ts +0 -334
  1576. package/src/utils/ansiToSvg.ts +0 -272
  1577. package/src/utils/api.ts +0 -718
  1578. package/src/utils/apiPreconnect.ts +0 -71
  1579. package/src/utils/appleTerminalBackup.ts +0 -124
  1580. package/src/utils/argumentSubstitution.ts +0 -145
  1581. package/src/utils/array.ts +0 -13
  1582. package/src/utils/asciicast.ts +0 -239
  1583. package/src/utils/attachments.ts +0 -3997
  1584. package/src/utils/attribution.ts +0 -393
  1585. package/src/utils/attributionHooks.ts +0 -2
  1586. package/src/utils/attributionTrailer.ts +0 -2
  1587. package/src/utils/auth.ts +0 -2002
  1588. package/src/utils/authFileDescriptor.ts +0 -196
  1589. package/src/utils/authPortable.ts +0 -19
  1590. package/src/utils/autoModeDenials.ts +0 -26
  1591. package/src/utils/autoRunIssue.tsx +0 -122
  1592. package/src/utils/autoUpdater.ts +0 -561
  1593. package/src/utils/aws.ts +0 -74
  1594. package/src/utils/awsAuthStatusManager.ts +0 -81
  1595. package/src/utils/background/remote/preconditions.ts +0 -235
  1596. package/src/utils/background/remote/remoteSession.ts +0 -98
  1597. package/src/utils/backgroundHousekeeping.ts +0 -94
  1598. package/src/utils/bash/ParsedCommand.ts +0 -318
  1599. package/src/utils/bash/ShellSnapshot.ts +0 -582
  1600. package/src/utils/bash/ast.ts +0 -2679
  1601. package/src/utils/bash/bashParser.ts +0 -4436
  1602. package/src/utils/bash/bashPipeCommand.ts +0 -294
  1603. package/src/utils/bash/commands.ts +0 -1339
  1604. package/src/utils/bash/heredoc.ts +0 -733
  1605. package/src/utils/bash/parser.ts +0 -230
  1606. package/src/utils/bash/prefix.ts +0 -204
  1607. package/src/utils/bash/registry.ts +0 -53
  1608. package/src/utils/bash/shellCompletion.ts +0 -259
  1609. package/src/utils/bash/shellPrefix.ts +0 -28
  1610. package/src/utils/bash/shellQuote.ts +0 -304
  1611. package/src/utils/bash/shellQuoting.ts +0 -128
  1612. package/src/utils/bash/specs/alias.ts +0 -14
  1613. package/src/utils/bash/specs/index.ts +0 -18
  1614. package/src/utils/bash/specs/nohup.ts +0 -13
  1615. package/src/utils/bash/specs/pyright.ts +0 -91
  1616. package/src/utils/bash/specs/sleep.ts +0 -13
  1617. package/src/utils/bash/specs/srun.ts +0 -31
  1618. package/src/utils/bash/specs/time.ts +0 -13
  1619. package/src/utils/bash/specs/timeout.ts +0 -20
  1620. package/src/utils/bash/treeSitterAnalysis.ts +0 -506
  1621. package/src/utils/betas.ts +0 -434
  1622. package/src/utils/billing.ts +0 -78
  1623. package/src/utils/binaryCheck.ts +0 -53
  1624. package/src/utils/browser.ts +0 -68
  1625. package/src/utils/bufferedWriter.ts +0 -100
  1626. package/src/utils/bundledMode.ts +0 -22
  1627. package/src/utils/caCerts.ts +0 -115
  1628. package/src/utils/caCertsConfig.ts +0 -88
  1629. package/src/utils/cachePaths.ts +0 -38
  1630. package/src/utils/ccshareResume.ts +0 -2
  1631. package/src/utils/classifierApprovals.ts +0 -88
  1632. package/src/utils/classifierApprovalsHook.ts +0 -17
  1633. package/src/utils/claudeCodeHints.ts +0 -193
  1634. package/src/utils/claudeDesktop.ts +0 -152
  1635. package/src/utils/claudeInChrome/chromeNativeHost.ts +0 -527
  1636. package/src/utils/claudeInChrome/common.ts +0 -540
  1637. package/src/utils/claudeInChrome/mcpServer.ts +0 -293
  1638. package/src/utils/claudeInChrome/prompt.ts +0 -83
  1639. package/src/utils/claudeInChrome/setup.ts +0 -400
  1640. package/src/utils/claudeInChrome/setupPortable.ts +0 -233
  1641. package/src/utils/claudeInChrome/toolRendering.tsx +0 -262
  1642. package/src/utils/claudemd.ts +0 -1479
  1643. package/src/utils/cleanup.ts +0 -602
  1644. package/src/utils/cleanupRegistry.ts +0 -25
  1645. package/src/utils/cliArgs.ts +0 -60
  1646. package/src/utils/cliHighlight.ts +0 -54
  1647. package/src/utils/codeIndexing.ts +0 -206
  1648. package/src/utils/collapseBackgroundBashNotifications.ts +0 -84
  1649. package/src/utils/collapseHookSummaries.ts +0 -59
  1650. package/src/utils/collapseReadSearch.ts +0 -1109
  1651. package/src/utils/collapseTeammateShutdowns.ts +0 -55
  1652. package/src/utils/combinedAbortSignal.ts +0 -47
  1653. package/src/utils/commandLifecycle.ts +0 -21
  1654. package/src/utils/commitAttribution.ts +0 -961
  1655. package/src/utils/completionCache.ts +0 -166
  1656. package/src/utils/computerUse/appNames.ts +0 -196
  1657. package/src/utils/computerUse/cleanup.ts +0 -86
  1658. package/src/utils/computerUse/common.ts +0 -61
  1659. package/src/utils/computerUse/computerUseLock.ts +0 -215
  1660. package/src/utils/computerUse/drainRunLoop.ts +0 -79
  1661. package/src/utils/computerUse/escHotkey.ts +0 -54
  1662. package/src/utils/computerUse/executor.ts +0 -658
  1663. package/src/utils/computerUse/gates.ts +0 -72
  1664. package/src/utils/computerUse/hostAdapter.ts +0 -69
  1665. package/src/utils/computerUse/inputLoader.ts +0 -30
  1666. package/src/utils/computerUse/mcpServer.ts +0 -106
  1667. package/src/utils/computerUse/setup.ts +0 -53
  1668. package/src/utils/computerUse/swiftLoader.ts +0 -23
  1669. package/src/utils/computerUse/toolRendering.tsx +0 -125
  1670. package/src/utils/computerUse/wrapper.tsx +0 -336
  1671. package/src/utils/concurrentSessions.ts +0 -204
  1672. package/src/utils/config.ts +0 -1817
  1673. package/src/utils/configConstants.ts +0 -21
  1674. package/src/utils/contentArray.ts +0 -51
  1675. package/src/utils/context.ts +0 -221
  1676. package/src/utils/contextAnalysis.ts +0 -272
  1677. package/src/utils/contextSuggestions.ts +0 -235
  1678. package/src/utils/controlMessageCompat.ts +0 -32
  1679. package/src/utils/conversationRecovery.ts +0 -597
  1680. package/src/utils/cron.ts +0 -308
  1681. package/src/utils/cronJitterConfig.ts +0 -75
  1682. package/src/utils/cronScheduler.ts +0 -565
  1683. package/src/utils/cronTasks.ts +0 -458
  1684. package/src/utils/cronTasksLock.ts +0 -195
  1685. package/src/utils/crossProjectResume.ts +0 -75
  1686. package/src/utils/crypto.ts +0 -13
  1687. package/src/utils/cwd.ts +0 -32
  1688. package/src/utils/debug.ts +0 -268
  1689. package/src/utils/debugFilter.ts +0 -157
  1690. package/src/utils/deepLink/banner.ts +0 -123
  1691. package/src/utils/deepLink/parseDeepLink.ts +0 -170
  1692. package/src/utils/deepLink/protocolHandler.ts +0 -136
  1693. package/src/utils/deepLink/registerProtocol.ts +0 -348
  1694. package/src/utils/deepLink/terminalLauncher.ts +0 -557
  1695. package/src/utils/deepLink/terminalPreference.ts +0 -54
  1696. package/src/utils/desktopDeepLink.ts +0 -236
  1697. package/src/utils/detectRepository.ts +0 -178
  1698. package/src/utils/diagLogs.ts +0 -94
  1699. package/src/utils/diff.ts +0 -177
  1700. package/src/utils/directMemberMessage.ts +0 -69
  1701. package/src/utils/displayTags.ts +0 -51
  1702. package/src/utils/doctorContextWarnings.ts +0 -265
  1703. package/src/utils/doctorDiagnostic.ts +0 -625
  1704. package/src/utils/dxt/helpers.ts +0 -88
  1705. package/src/utils/dxt/zip.ts +0 -226
  1706. package/src/utils/earlyInput.ts +0 -191
  1707. package/src/utils/editor.ts +0 -183
  1708. package/src/utils/effort.ts +0 -329
  1709. package/src/utils/embeddedTools.ts +0 -29
  1710. package/src/utils/env.ts +0 -347
  1711. package/src/utils/envDynamic.ts +0 -151
  1712. package/src/utils/envUtils.ts +0 -183
  1713. package/src/utils/envValidation.ts +0 -38
  1714. package/src/utils/errorLogSink.ts +0 -235
  1715. package/src/utils/errors.ts +0 -238
  1716. package/src/utils/eventLoopStallDetector.ts +0 -2
  1717. package/src/utils/exampleCommands.ts +0 -184
  1718. package/src/utils/execFileNoThrow.ts +0 -150
  1719. package/src/utils/execFileNoThrowPortable.ts +0 -89
  1720. package/src/utils/execSyncWrapper.ts +0 -38
  1721. package/src/utils/exportRenderer.tsx +0 -98
  1722. package/src/utils/extraUsage.ts +0 -23
  1723. package/src/utils/fastMode.ts +0 -532
  1724. package/src/utils/file.ts +0 -584
  1725. package/src/utils/fileHistory.ts +0 -1115
  1726. package/src/utils/fileOperationAnalytics.ts +0 -71
  1727. package/src/utils/filePersistence/filePersistence.ts +0 -287
  1728. package/src/utils/filePersistence/outputsScanner.ts +0 -126
  1729. package/src/utils/filePersistence/types.ts +0 -33
  1730. package/src/utils/fileRead.ts +0 -102
  1731. package/src/utils/fileReadCache.ts +0 -96
  1732. package/src/utils/fileStateCache.ts +0 -142
  1733. package/src/utils/findExecutable.ts +0 -17
  1734. package/src/utils/fingerprint.ts +0 -76
  1735. package/src/utils/forkedAgent.ts +0 -689
  1736. package/src/utils/format.ts +0 -308
  1737. package/src/utils/formatBriefTimestamp.ts +0 -81
  1738. package/src/utils/fpsTracker.ts +0 -47
  1739. package/src/utils/frontmatterParser.ts +0 -370
  1740. package/src/utils/fsOperations.ts +0 -770
  1741. package/src/utils/fullscreen.ts +0 -202
  1742. package/src/utils/generatedFiles.ts +0 -136
  1743. package/src/utils/generators.ts +0 -88
  1744. package/src/utils/genericProcessUtils.ts +0 -184
  1745. package/src/utils/getWorktreePaths.ts +0 -70
  1746. package/src/utils/getWorktreePathsPortable.ts +0 -27
  1747. package/src/utils/ghPrStatus.ts +0 -106
  1748. package/src/utils/git/gitConfigParser.ts +0 -277
  1749. package/src/utils/git/gitFilesystem.ts +0 -699
  1750. package/src/utils/git/gitignore.ts +0 -99
  1751. package/src/utils/git.ts +0 -926
  1752. package/src/utils/gitDiff.ts +0 -532
  1753. package/src/utils/gitSettings.ts +0 -18
  1754. package/src/utils/github/ghAuthStatus.ts +0 -29
  1755. package/src/utils/githubRepoPathMapping.ts +0 -162
  1756. package/src/utils/glob.ts +0 -130
  1757. package/src/utils/gracefulShutdown.ts +0 -529
  1758. package/src/utils/groupToolUses.ts +0 -182
  1759. package/src/utils/handlePromptSubmit.ts +0 -610
  1760. package/src/utils/hash.ts +0 -46
  1761. package/src/utils/headlessProfiler.ts +0 -178
  1762. package/src/utils/heapDumpService.ts +0 -303
  1763. package/src/utils/heatmap.ts +0 -198
  1764. package/src/utils/highlightMatch.tsx +0 -28
  1765. package/src/utils/hooks/AsyncHookRegistry.ts +0 -309
  1766. package/src/utils/hooks/apiQueryHookHelper.ts +0 -141
  1767. package/src/utils/hooks/execAgentHook.ts +0 -339
  1768. package/src/utils/hooks/execHttpHook.ts +0 -242
  1769. package/src/utils/hooks/execPromptHook.ts +0 -211
  1770. package/src/utils/hooks/fileChangedWatcher.ts +0 -191
  1771. package/src/utils/hooks/hookEvents.ts +0 -192
  1772. package/src/utils/hooks/hookHelpers.ts +0 -83
  1773. package/src/utils/hooks/hooksConfigManager.ts +0 -400
  1774. package/src/utils/hooks/hooksConfigSnapshot.ts +0 -133
  1775. package/src/utils/hooks/hooksSettings.ts +0 -271
  1776. package/src/utils/hooks/postSamplingHooks.ts +0 -70
  1777. package/src/utils/hooks/registerFrontmatterHooks.ts +0 -67
  1778. package/src/utils/hooks/registerSkillHooks.ts +0 -64
  1779. package/src/utils/hooks/sessionHooks.ts +0 -447
  1780. package/src/utils/hooks/skillImprovement.ts +0 -267
  1781. package/src/utils/hooks/ssrfGuard.ts +0 -294
  1782. package/src/utils/hooks.ts +0 -5022
  1783. package/src/utils/horizontalScroll.ts +0 -137
  1784. package/src/utils/http.ts +0 -136
  1785. package/src/utils/hyperlink.ts +0 -39
  1786. package/src/utils/iTermBackup.ts +0 -73
  1787. package/src/utils/ide.ts +0 -1494
  1788. package/src/utils/idePathConversion.ts +0 -90
  1789. package/src/utils/idleTimeout.ts +0 -53
  1790. package/src/utils/imagePaste.ts +0 -416
  1791. package/src/utils/imageResizer.ts +0 -880
  1792. package/src/utils/imageStore.ts +0 -167
  1793. package/src/utils/imageValidation.ts +0 -104
  1794. package/src/utils/immediateCommand.ts +0 -15
  1795. package/src/utils/inProcessTeammateHelpers.ts +0 -102
  1796. package/src/utils/ink.ts +0 -26
  1797. package/src/utils/intl.ts +0 -94
  1798. package/src/utils/jetbrains.ts +0 -191
  1799. package/src/utils/json.ts +0 -277
  1800. package/src/utils/jsonRead.ts +0 -16
  1801. package/src/utils/keyboardShortcuts.ts +0 -14
  1802. package/src/utils/lazySchema.ts +0 -8
  1803. package/src/utils/listSessionsImpl.ts +0 -454
  1804. package/src/utils/localInstaller.ts +0 -162
  1805. package/src/utils/lockfile.ts +0 -43
  1806. package/src/utils/log.ts +0 -362
  1807. package/src/utils/logoV2Utils.ts +0 -350
  1808. package/src/utils/mailbox.ts +0 -73
  1809. package/src/utils/managedEnv.ts +0 -199
  1810. package/src/utils/managedEnvConstants.ts +0 -191
  1811. package/src/utils/markdown.ts +0 -381
  1812. package/src/utils/markdownConfigLoader.ts +0 -600
  1813. package/src/utils/mcp/dateTimeParser.ts +0 -121
  1814. package/src/utils/mcp/elicitationValidation.ts +0 -336
  1815. package/src/utils/mcpInstructionsDelta.ts +0 -130
  1816. package/src/utils/mcpOutputStorage.ts +0 -189
  1817. package/src/utils/mcpValidation.ts +0 -208
  1818. package/src/utils/mcpWebSocketTransport.ts +0 -200
  1819. package/src/utils/memoize.ts +0 -269
  1820. package/src/utils/memory/types.ts +0 -12
  1821. package/src/utils/memory/versions.ts +0 -8
  1822. package/src/utils/memoryFileDetection.ts +0 -289
  1823. package/src/utils/messagePredicates.ts +0 -8
  1824. package/src/utils/messageQueueManager.ts +0 -547
  1825. package/src/utils/messages/mappers.ts +0 -290
  1826. package/src/utils/messages/systemInit.ts +0 -96
  1827. package/src/utils/messages.ts +0 -5512
  1828. package/src/utils/model/agent.ts +0 -157
  1829. package/src/utils/model/aliases.ts +0 -25
  1830. package/src/utils/model/antModels.ts +0 -64
  1831. package/src/utils/model/bedrock.ts +0 -265
  1832. package/src/utils/model/check1mAccess.ts +0 -72
  1833. package/src/utils/model/configs.ts +0 -118
  1834. package/src/utils/model/contextWindowUpgradeCheck.ts +0 -47
  1835. package/src/utils/model/deprecation.ts +0 -101
  1836. package/src/utils/model/model.ts +0 -618
  1837. package/src/utils/model/modelAllowlist.ts +0 -170
  1838. package/src/utils/model/modelCapabilities.ts +0 -118
  1839. package/src/utils/model/modelOptions.ts +0 -540
  1840. package/src/utils/model/modelStrings.ts +0 -166
  1841. package/src/utils/model/modelSupportOverrides.ts +0 -50
  1842. package/src/utils/model/providers.ts +0 -40
  1843. package/src/utils/model/validateModel.ts +0 -159
  1844. package/src/utils/modelCost.ts +0 -231
  1845. package/src/utils/modifiers.ts +0 -41
  1846. package/src/utils/mtls.ts +0 -179
  1847. package/src/utils/nativeInstaller/download.ts +0 -523
  1848. package/src/utils/nativeInstaller/index.ts +0 -18
  1849. package/src/utils/nativeInstaller/installer.ts +0 -1708
  1850. package/src/utils/nativeInstaller/packageManagers.ts +0 -336
  1851. package/src/utils/nativeInstaller/pidLock.ts +0 -433
  1852. package/src/utils/notebook.ts +0 -224
  1853. package/src/utils/objectGroupBy.ts +0 -18
  1854. package/src/utils/pasteStore.ts +0 -104
  1855. package/src/utils/path.ts +0 -155
  1856. package/src/utils/pdf.ts +0 -300
  1857. package/src/utils/pdfUtils.ts +0 -70
  1858. package/src/utils/peerAddress.ts +0 -21
  1859. package/src/utils/permissions/PermissionMode.ts +0 -141
  1860. package/src/utils/permissions/PermissionPromptToolResultSchema.ts +0 -127
  1861. package/src/utils/permissions/PermissionResult.ts +0 -35
  1862. package/src/utils/permissions/PermissionRule.ts +0 -40
  1863. package/src/utils/permissions/PermissionUpdate.ts +0 -389
  1864. package/src/utils/permissions/PermissionUpdateSchema.ts +0 -78
  1865. package/src/utils/permissions/autoModeState.ts +0 -39
  1866. package/src/utils/permissions/bashClassifier.ts +0 -61
  1867. package/src/utils/permissions/bypassPermissionsKillswitch.ts +0 -155
  1868. package/src/utils/permissions/classifierDecision.ts +0 -98
  1869. package/src/utils/permissions/classifierShared.ts +0 -39
  1870. package/src/utils/permissions/dangerousPatterns.ts +0 -80
  1871. package/src/utils/permissions/denialTracking.ts +0 -45
  1872. package/src/utils/permissions/filesystem.ts +0 -1777
  1873. package/src/utils/permissions/getNextPermissionMode.ts +0 -101
  1874. package/src/utils/permissions/pathValidation.ts +0 -485
  1875. package/src/utils/permissions/permissionExplainer.ts +0 -250
  1876. package/src/utils/permissions/permissionRuleParser.ts +0 -198
  1877. package/src/utils/permissions/permissionSetup.ts +0 -1532
  1878. package/src/utils/permissions/permissions.ts +0 -1486
  1879. package/src/utils/permissions/permissionsLoader.ts +0 -296
  1880. package/src/utils/permissions/shadowedRuleDetection.ts +0 -234
  1881. package/src/utils/permissions/shellRuleMatching.ts +0 -228
  1882. package/src/utils/permissions/yolo-classifier-prompts/auto_mode_system_prompt.txt +0 -1
  1883. package/src/utils/permissions/yolo-classifier-prompts/permissions_anthropic.txt +0 -1
  1884. package/src/utils/permissions/yolo-classifier-prompts/permissions_external.txt +0 -1
  1885. package/src/utils/permissions/yoloClassifier.ts +0 -1495
  1886. package/src/utils/planModeV2.ts +0 -95
  1887. package/src/utils/plans.ts +0 -397
  1888. package/src/utils/platform.ts +0 -150
  1889. package/src/utils/plugins/addDirPluginSettings.ts +0 -71
  1890. package/src/utils/plugins/cacheUtils.ts +0 -196
  1891. package/src/utils/plugins/dependencyResolver.ts +0 -305
  1892. package/src/utils/plugins/fetchTelemetry.ts +0 -135
  1893. package/src/utils/plugins/gitAvailability.ts +0 -69
  1894. package/src/utils/plugins/headlessPluginInstall.ts +0 -174
  1895. package/src/utils/plugins/hintRecommendation.ts +0 -164
  1896. package/src/utils/plugins/installCounts.ts +0 -292
  1897. package/src/utils/plugins/installedPluginsManager.ts +0 -1268
  1898. package/src/utils/plugins/loadPluginAgents.ts +0 -348
  1899. package/src/utils/plugins/loadPluginCommands.ts +0 -946
  1900. package/src/utils/plugins/loadPluginHooks.ts +0 -287
  1901. package/src/utils/plugins/loadPluginOutputStyles.ts +0 -178
  1902. package/src/utils/plugins/lspPluginIntegration.ts +0 -387
  1903. package/src/utils/plugins/lspRecommendation.ts +0 -374
  1904. package/src/utils/plugins/managedPlugins.ts +0 -27
  1905. package/src/utils/plugins/marketplaceHelpers.ts +0 -592
  1906. package/src/utils/plugins/marketplaceManager.ts +0 -2643
  1907. package/src/utils/plugins/mcpPluginIntegration.ts +0 -634
  1908. package/src/utils/plugins/mcpbHandler.ts +0 -968
  1909. package/src/utils/plugins/officialMarketplace.ts +0 -25
  1910. package/src/utils/plugins/officialMarketplaceGcs.ts +0 -216
  1911. package/src/utils/plugins/officialMarketplaceStartupCheck.ts +0 -439
  1912. package/src/utils/plugins/orphanedPluginFilter.ts +0 -114
  1913. package/src/utils/plugins/parseMarketplaceInput.ts +0 -162
  1914. package/src/utils/plugins/performStartupChecks.tsx +0 -70
  1915. package/src/utils/plugins/pluginAutoupdate.ts +0 -284
  1916. package/src/utils/plugins/pluginBlocklist.ts +0 -127
  1917. package/src/utils/plugins/pluginDirectories.ts +0 -178
  1918. package/src/utils/plugins/pluginFlagging.ts +0 -208
  1919. package/src/utils/plugins/pluginIdentifier.ts +0 -123
  1920. package/src/utils/plugins/pluginInstallationHelpers.ts +0 -595
  1921. package/src/utils/plugins/pluginLoader.ts +0 -3302
  1922. package/src/utils/plugins/pluginOptionsStorage.ts +0 -400
  1923. package/src/utils/plugins/pluginPolicy.ts +0 -20
  1924. package/src/utils/plugins/pluginStartupCheck.ts +0 -341
  1925. package/src/utils/plugins/pluginVersioning.ts +0 -157
  1926. package/src/utils/plugins/reconciler.ts +0 -265
  1927. package/src/utils/plugins/refresh.ts +0 -215
  1928. package/src/utils/plugins/schemas.ts +0 -1681
  1929. package/src/utils/plugins/validatePlugin.ts +0 -903
  1930. package/src/utils/plugins/walkPluginMarkdown.ts +0 -69
  1931. package/src/utils/plugins/zipCache.ts +0 -406
  1932. package/src/utils/plugins/zipCacheAdapters.ts +0 -164
  1933. package/src/utils/postCommitAttribution.ts +0 -2
  1934. package/src/utils/powershell/dangerousCmdlets.ts +0 -185
  1935. package/src/utils/powershell/parser.ts +0 -1804
  1936. package/src/utils/powershell/staticPrefix.ts +0 -316
  1937. package/src/utils/preflightChecks.tsx +0 -151
  1938. package/src/utils/privacyLevel.ts +0 -55
  1939. package/src/utils/process.ts +0 -68
  1940. package/src/utils/processUserInput/processBashCommand.tsx +0 -140
  1941. package/src/utils/processUserInput/processSlashCommand.tsx +0 -922
  1942. package/src/utils/processUserInput/processTextPrompt.ts +0 -100
  1943. package/src/utils/processUserInput/processUserInput.ts +0 -605
  1944. package/src/utils/profilerBase.ts +0 -46
  1945. package/src/utils/promptCategory.ts +0 -49
  1946. package/src/utils/promptEditor.ts +0 -188
  1947. package/src/utils/promptShellExecution.ts +0 -183
  1948. package/src/utils/protectedNamespace.ts +0 -2
  1949. package/src/utils/proxy.ts +0 -426
  1950. package/src/utils/queryContext.ts +0 -179
  1951. package/src/utils/queryHelpers.ts +0 -552
  1952. package/src/utils/queryProfiler.ts +0 -301
  1953. package/src/utils/queueProcessor.ts +0 -95
  1954. package/src/utils/readEditContext.ts +0 -227
  1955. package/src/utils/readFileInRange.ts +0 -383
  1956. package/src/utils/releaseNotes.ts +0 -360
  1957. package/src/utils/renderOptions.ts +0 -77
  1958. package/src/utils/ripgrep.ts +0 -679
  1959. package/src/utils/sandbox/sandbox-adapter.ts +0 -985
  1960. package/src/utils/sandbox/sandbox-ui-utils.ts +0 -12
  1961. package/src/utils/sanitization.ts +0 -91
  1962. package/src/utils/screenshotClipboard.ts +0 -121
  1963. package/src/utils/sdkEventQueue.ts +0 -134
  1964. package/src/utils/sdkHeapDumpMonitor.ts +0 -2
  1965. package/src/utils/secureStorage/fallbackStorage.ts +0 -70
  1966. package/src/utils/secureStorage/index.ts +0 -17
  1967. package/src/utils/secureStorage/keychainPrefetch.ts +0 -116
  1968. package/src/utils/secureStorage/macOsKeychainHelpers.ts +0 -111
  1969. package/src/utils/secureStorage/macOsKeychainStorage.ts +0 -231
  1970. package/src/utils/secureStorage/plainTextStorage.ts +0 -84
  1971. package/src/utils/secureStorage/types.ts +0 -2
  1972. package/src/utils/semanticBoolean.ts +0 -29
  1973. package/src/utils/semanticNumber.ts +0 -36
  1974. package/src/utils/semver.ts +0 -59
  1975. package/src/utils/sequential.ts +0 -56
  1976. package/src/utils/sessionActivity.ts +0 -133
  1977. package/src/utils/sessionDataUploader.ts +0 -2
  1978. package/src/utils/sessionEnvVars.ts +0 -22
  1979. package/src/utils/sessionEnvironment.ts +0 -166
  1980. package/src/utils/sessionFileAccessHooks.ts +0 -250
  1981. package/src/utils/sessionIngressAuth.ts +0 -140
  1982. package/src/utils/sessionRestore.ts +0 -551
  1983. package/src/utils/sessionStart.ts +0 -232
  1984. package/src/utils/sessionState.ts +0 -150
  1985. package/src/utils/sessionStorage.ts +0 -5105
  1986. package/src/utils/sessionStoragePortable.ts +0 -793
  1987. package/src/utils/sessionTitle.ts +0 -129
  1988. package/src/utils/sessionUrl.ts +0 -64
  1989. package/src/utils/set.ts +0 -53
  1990. package/src/utils/settings/allErrors.ts +0 -32
  1991. package/src/utils/settings/applySettingsChange.ts +0 -92
  1992. package/src/utils/settings/changeDetector.ts +0 -488
  1993. package/src/utils/settings/constants.ts +0 -202
  1994. package/src/utils/settings/internalWrites.ts +0 -37
  1995. package/src/utils/settings/managedPath.ts +0 -34
  1996. package/src/utils/settings/mdm/constants.ts +0 -81
  1997. package/src/utils/settings/mdm/rawRead.ts +0 -130
  1998. package/src/utils/settings/mdm/settings.ts +0 -316
  1999. package/src/utils/settings/permissionValidation.ts +0 -262
  2000. package/src/utils/settings/pluginOnlyPolicy.ts +0 -60
  2001. package/src/utils/settings/schemaOutput.ts +0 -8
  2002. package/src/utils/settings/settings.ts +0 -1015
  2003. package/src/utils/settings/settingsCache.ts +0 -80
  2004. package/src/utils/settings/toolValidationConfig.ts +0 -103
  2005. package/src/utils/settings/types.ts +0 -1148
  2006. package/src/utils/settings/validateEditTool.ts +0 -45
  2007. package/src/utils/settings/validation.ts +0 -265
  2008. package/src/utils/settings/validationTips.ts +0 -164
  2009. package/src/utils/shell/bashProvider.ts +0 -255
  2010. package/src/utils/shell/outputLimits.ts +0 -14
  2011. package/src/utils/shell/powershellDetection.ts +0 -107
  2012. package/src/utils/shell/powershellProvider.ts +0 -123
  2013. package/src/utils/shell/prefix.ts +0 -367
  2014. package/src/utils/shell/readOnlyCommandValidation.ts +0 -1893
  2015. package/src/utils/shell/resolveDefaultShell.ts +0 -14
  2016. package/src/utils/shell/shellProvider.ts +0 -33
  2017. package/src/utils/shell/shellToolUtils.ts +0 -22
  2018. package/src/utils/shell/specPrefix.ts +0 -241
  2019. package/src/utils/shellConfig.ts +0 -167
  2020. package/src/utils/sideQuery.ts +0 -222
  2021. package/src/utils/sideQuestion.ts +0 -155
  2022. package/src/utils/signal.ts +0 -43
  2023. package/src/utils/sinks.ts +0 -16
  2024. package/src/utils/skills/skillChangeDetector.ts +0 -311
  2025. package/src/utils/slashCommandParsing.ts +0 -60
  2026. package/src/utils/sleep.ts +0 -84
  2027. package/src/utils/sliceAnsi.ts +0 -91
  2028. package/src/utils/slowOperations.ts +0 -286
  2029. package/src/utils/standaloneAgent.ts +0 -23
  2030. package/src/utils/startupProfiler.ts +0 -194
  2031. package/src/utils/staticRender.tsx +0 -116
  2032. package/src/utils/stats.ts +0 -1061
  2033. package/src/utils/statsCache.ts +0 -434
  2034. package/src/utils/status.tsx +0 -362
  2035. package/src/utils/statusNoticeDefinitions.tsx +0 -198
  2036. package/src/utils/statusNoticeHelpers.ts +0 -20
  2037. package/src/utils/stream.ts +0 -76
  2038. package/src/utils/streamJsonStdoutGuard.ts +0 -123
  2039. package/src/utils/streamlinedTransform.ts +0 -201
  2040. package/src/utils/stringUtils.ts +0 -235
  2041. package/src/utils/subprocessEnv.ts +0 -99
  2042. package/src/utils/suggestions/commandSuggestions.ts +0 -567
  2043. package/src/utils/suggestions/directoryCompletion.ts +0 -263
  2044. package/src/utils/suggestions/shellHistoryCompletion.ts +0 -119
  2045. package/src/utils/suggestions/skillUsageTracking.ts +0 -55
  2046. package/src/utils/suggestions/slackChannelSuggestions.ts +0 -209
  2047. package/src/utils/swarm/It2SetupPrompt.tsx +0 -380
  2048. package/src/utils/swarm/backends/ITermBackend.ts +0 -370
  2049. package/src/utils/swarm/backends/InProcessBackend.ts +0 -339
  2050. package/src/utils/swarm/backends/PaneBackendExecutor.ts +0 -354
  2051. package/src/utils/swarm/backends/TmuxBackend.ts +0 -764
  2052. package/src/utils/swarm/backends/detection.ts +0 -128
  2053. package/src/utils/swarm/backends/it2Setup.ts +0 -245
  2054. package/src/utils/swarm/backends/registry.ts +0 -464
  2055. package/src/utils/swarm/backends/teammateModeSnapshot.ts +0 -87
  2056. package/src/utils/swarm/backends/types.ts +0 -311
  2057. package/src/utils/swarm/constants.ts +0 -33
  2058. package/src/utils/swarm/inProcessRunner.ts +0 -1552
  2059. package/src/utils/swarm/leaderPermissionBridge.ts +0 -54
  2060. package/src/utils/swarm/permissionSync.ts +0 -928
  2061. package/src/utils/swarm/reconnection.ts +0 -119
  2062. package/src/utils/swarm/spawnInProcess.ts +0 -328
  2063. package/src/utils/swarm/spawnUtils.ts +0 -146
  2064. package/src/utils/swarm/teamHelpers.ts +0 -683
  2065. package/src/utils/swarm/teammateInit.ts +0 -129
  2066. package/src/utils/swarm/teammateLayoutManager.ts +0 -107
  2067. package/src/utils/swarm/teammateModel.ts +0 -10
  2068. package/src/utils/swarm/teammatePromptAddendum.ts +0 -18
  2069. package/src/utils/systemDirectories.ts +0 -74
  2070. package/src/utils/systemPrompt.ts +0 -123
  2071. package/src/utils/systemPromptType.ts +0 -14
  2072. package/src/utils/systemTheme.ts +0 -119
  2073. package/src/utils/systemThemeWatcher.ts +0 -2
  2074. package/src/utils/taggedId.ts +0 -54
  2075. package/src/utils/task/TaskOutput.ts +0 -390
  2076. package/src/utils/task/diskOutput.ts +0 -451
  2077. package/src/utils/task/framework.ts +0 -308
  2078. package/src/utils/task/outputFormatting.ts +0 -38
  2079. package/src/utils/task/sdkProgress.ts +0 -36
  2080. package/src/utils/taskSummary.ts +0 -2
  2081. package/src/utils/tasks.ts +0 -862
  2082. package/src/utils/teamDiscovery.ts +0 -81
  2083. package/src/utils/teamMemoryOps.ts +0 -88
  2084. package/src/utils/teammate.ts +0 -292
  2085. package/src/utils/teammateContext.ts +0 -96
  2086. package/src/utils/teammateMailbox.ts +0 -1183
  2087. package/src/utils/telemetry/betaSessionTracing.ts +0 -491
  2088. package/src/utils/telemetry/bigqueryExporter.ts +0 -252
  2089. package/src/utils/telemetry/events.ts +0 -75
  2090. package/src/utils/telemetry/instrumentation.ts +0 -825
  2091. package/src/utils/telemetry/logger.ts +0 -26
  2092. package/src/utils/telemetry/perfettoTracing.ts +0 -1120
  2093. package/src/utils/telemetry/pluginTelemetry.ts +0 -289
  2094. package/src/utils/telemetry/sessionTracing.ts +0 -927
  2095. package/src/utils/telemetry/skillLoadedEvent.ts +0 -39
  2096. package/src/utils/telemetryAttributes.ts +0 -71
  2097. package/src/utils/teleport/api.ts +0 -466
  2098. package/src/utils/teleport/environmentSelection.ts +0 -77
  2099. package/src/utils/teleport/environments.ts +0 -120
  2100. package/src/utils/teleport/gitBundle.ts +0 -292
  2101. package/src/utils/teleport.tsx +0 -1226
  2102. package/src/utils/tempfile.ts +0 -31
  2103. package/src/utils/terminal.ts +0 -131
  2104. package/src/utils/terminalPanel.ts +0 -191
  2105. package/src/utils/textHighlighting.ts +0 -166
  2106. package/src/utils/theme.ts +0 -639
  2107. package/src/utils/thinking.ts +0 -162
  2108. package/src/utils/timeouts.ts +0 -39
  2109. package/src/utils/tmuxSocket.ts +0 -427
  2110. package/src/utils/todo/types.ts +0 -18
  2111. package/src/utils/tokenBudget.ts +0 -73
  2112. package/src/utils/tokens.ts +0 -261
  2113. package/src/utils/toolErrors.ts +0 -132
  2114. package/src/utils/toolPool.ts +0 -79
  2115. package/src/utils/toolResultStorage.ts +0 -1040
  2116. package/src/utils/toolSchemaCache.ts +0 -26
  2117. package/src/utils/toolSearch.ts +0 -756
  2118. package/src/utils/transcriptSearch.ts +0 -202
  2119. package/src/utils/treeify.ts +0 -170
  2120. package/src/utils/truncate.ts +0 -179
  2121. package/src/utils/udsClient.ts +0 -2
  2122. package/src/utils/udsMessaging.ts +0 -2
  2123. package/src/utils/ultraplan/ccrSession.ts +0 -349
  2124. package/src/utils/ultraplan/keyword.ts +0 -127
  2125. package/src/utils/ultraplan/prompt.txt +0 -1
  2126. package/src/utils/unaryLogging.ts +0 -39
  2127. package/src/utils/undercover.ts +0 -89
  2128. package/src/utils/user.ts +0 -194
  2129. package/src/utils/userAgent.ts +0 -10
  2130. package/src/utils/userPromptKeywords.ts +0 -27
  2131. package/src/utils/uuid.ts +0 -27
  2132. package/src/utils/warningHandler.ts +0 -121
  2133. package/src/utils/which.ts +0 -82
  2134. package/src/utils/windowsPaths.ts +0 -173
  2135. package/src/utils/withResolvers.ts +0 -13
  2136. package/src/utils/words.ts +0 -800
  2137. package/src/utils/workloadContext.ts +0 -57
  2138. package/src/utils/worktree.ts +0 -1519
  2139. package/src/utils/worktreeModeEnabled.ts +0 -11
  2140. package/src/utils/xdg.ts +0 -65
  2141. package/src/utils/xml.ts +0 -16
  2142. package/src/utils/yaml.ts +0 -15
  2143. package/src/utils/zodToJsonSchema.ts +0 -23
  2144. package/src/vim/motions.ts +0 -82
  2145. package/src/vim/operators.ts +0 -556
  2146. package/src/vim/textObjects.ts +0 -186
  2147. package/src/vim/transitions.ts +0 -490
  2148. package/src/vim/types.ts +0 -199
  2149. package/src/voice/voiceModeEnabled.ts +0 -54
  2150. package/stubs/@ant/claude-for-chrome-mcp/index.js +0 -1
  2151. package/stubs/@ant/claude-for-chrome-mcp/index.ts +0 -4
  2152. package/stubs/@ant/claude-for-chrome-mcp/package.json +0 -6
  2153. package/stubs/@ant/computer-use-input/index.js +0 -2
  2154. package/stubs/@ant/computer-use-input/index.ts +0 -3
  2155. package/stubs/@ant/computer-use-input/package.json +0 -6
  2156. package/stubs/@ant/computer-use-mcp/index.js +0 -1
  2157. package/stubs/@ant/computer-use-mcp/index.ts +0 -1
  2158. package/stubs/@ant/computer-use-mcp/package.json +0 -11
  2159. package/stubs/@ant/computer-use-mcp/sentinelApps.js +0 -3
  2160. package/stubs/@ant/computer-use-mcp/sentinelApps.ts +0 -3
  2161. package/stubs/@ant/computer-use-mcp/types.js +0 -2
  2162. package/stubs/@ant/computer-use-mcp/types.ts +0 -6
  2163. package/stubs/@ant/computer-use-swift/index.js +0 -2
  2164. package/stubs/@ant/computer-use-swift/index.ts +0 -2
  2165. package/stubs/@ant/computer-use-swift/package.json +0 -6
  2166. package/stubs/@anthropic-ai/claude-agent-sdk/index.js +0 -2
  2167. package/stubs/@anthropic-ai/claude-agent-sdk/index.ts +0 -2
  2168. package/stubs/@anthropic-ai/claude-agent-sdk/package.json +0 -6
  2169. package/stubs/@anthropic-ai/mcpb/index.js +0 -2
  2170. package/stubs/@anthropic-ai/mcpb/index.ts +0 -3
  2171. package/stubs/@anthropic-ai/mcpb/package.json +0 -6
  2172. package/stubs/@anthropic-ai/sandbox-runtime/index.js +0 -4
  2173. package/stubs/@anthropic-ai/sandbox-runtime/index.ts +0 -49
  2174. package/stubs/@anthropic-ai/sandbox-runtime/package.json +0 -6
  2175. package/stubs/globals.ts +0 -11
  2176. package/stubs/macro.d.ts +0 -9
  2177. package/tsconfig.json +0 -28
@@ -1,3200 +0,0 @@
1
- import { execFileSync } from 'child_process'
2
- import { diffLines } from 'diff'
3
- import { constants as fsConstants } from 'fs'
4
- import {
5
- copyFile,
6
- mkdir,
7
- mkdtemp,
8
- readdir,
9
- readFile,
10
- rm,
11
- unlink,
12
- writeFile,
13
- } from 'fs/promises'
14
- import { tmpdir } from 'os'
15
- import { extname, join } from 'path'
16
- import type { Command } from '../commands.js'
17
- import { queryWithModel } from '../services/api/claude.js'
18
- import {
19
- AGENT_TOOL_NAME,
20
- LEGACY_AGENT_TOOL_NAME,
21
- } from '../tools/AgentTool/constants.js'
22
- import type { LogOption } from '../types/logs.js'
23
- import { getClaudeConfigHomeDir } from '../utils/envUtils.js'
24
- import { toError } from '../utils/errors.js'
25
- import { execFileNoThrow } from '../utils/execFileNoThrow.js'
26
- import { logError } from '../utils/log.js'
27
- import { extractTextContent } from '../utils/messages.js'
28
- import { getDefaultOpusModel } from '../utils/model/model.js'
29
- import {
30
- getProjectsDir,
31
- getSessionFilesWithMtime,
32
- getSessionIdFromLog,
33
- loadAllLogsFromSessionFile,
34
- } from '../utils/sessionStorage.js'
35
- import { jsonParse, jsonStringify } from '../utils/slowOperations.js'
36
- import { countCharInString } from '../utils/stringUtils.js'
37
- import { asSystemPrompt } from '../utils/systemPromptType.js'
38
- import { escapeXmlAttr as escapeHtml } from '../utils/xml.js'
39
-
40
- // Model for facet extraction and summarization (Opus - best quality)
41
- function getAnalysisModel(): string {
42
- return getDefaultOpusModel()
43
- }
44
-
45
- // Model for narrative insights (Opus - best quality)
46
- function getInsightsModel(): string {
47
- return getDefaultOpusModel()
48
- }
49
-
50
- // ============================================================================
51
- // Homespace Data Collection
52
- // ============================================================================
53
-
54
- type RemoteHostInfo = {
55
- name: string
56
- sessionCount: number
57
- }
58
-
59
- /* eslint-disable custom-rules/no-process-env-top-level */
60
- const getRunningRemoteHosts: () => Promise<string[]> =
61
- process.env.USER_TYPE === 'ant'
62
- ? async () => {
63
- const { stdout, code } = await execFileNoThrow(
64
- 'coder',
65
- ['list', '-o', 'json'],
66
- { timeout: 30000 },
67
- )
68
- if (code !== 0) return []
69
- try {
70
- const workspaces = jsonParse(stdout) as Array<{
71
- name: string
72
- latest_build?: { status?: string }
73
- }>
74
- return workspaces
75
- .filter(w => w.latest_build?.status === 'running')
76
- .map(w => w.name)
77
- } catch {
78
- return []
79
- }
80
- }
81
- : async () => []
82
-
83
- const getRemoteHostSessionCount: (hs: string) => Promise<number> =
84
- process.env.USER_TYPE === 'ant'
85
- ? async (homespace: string) => {
86
- const { stdout, code } = await execFileNoThrow(
87
- 'ssh',
88
- [
89
- `${homespace}.coder`,
90
- 'find /root/.claude/projects -name "*.jsonl" 2>/dev/null | wc -l',
91
- ],
92
- { timeout: 30000 },
93
- )
94
- if (code !== 0) return 0
95
- return parseInt(stdout.trim(), 10) || 0
96
- }
97
- : async () => 0
98
-
99
- const collectFromRemoteHost: (
100
- hs: string,
101
- destDir: string,
102
- ) => Promise<{ copied: number; skipped: number }> =
103
- process.env.USER_TYPE === 'ant'
104
- ? async (homespace: string, destDir: string) => {
105
- const result = { copied: 0, skipped: 0 }
106
-
107
- // Create temp directory
108
- const tempDir = await mkdtemp(join(tmpdir(), 'claude-hs-'))
109
-
110
- try {
111
- // SCP the projects folder
112
- const scpResult = await execFileNoThrow(
113
- 'scp',
114
- ['-rq', `${homespace}.coder:/root/.claude/projects/`, tempDir],
115
- { timeout: 300000 },
116
- )
117
- if (scpResult.code !== 0) {
118
- // SCP failed
119
- return result
120
- }
121
-
122
- const projectsDir = join(tempDir, 'projects')
123
- let projectDirents: Awaited<ReturnType<typeof readdir>>
124
- try {
125
- projectDirents = await readdir(projectsDir, { withFileTypes: true })
126
- } catch {
127
- return result
128
- }
129
-
130
- // Merge into destination (parallel per project directory)
131
- await Promise.all(
132
- projectDirents.map(async dirent => {
133
- const projectName = dirent.name
134
- const projectPath = join(projectsDir, projectName)
135
-
136
- // Skip if not a directory
137
- if (!dirent.isDirectory()) return
138
-
139
- const destProjectName = `${projectName}__${homespace}`
140
- const destProjectPath = join(destDir, destProjectName)
141
-
142
- try {
143
- await mkdir(destProjectPath, { recursive: true })
144
- } catch {
145
- // Directory may already exist
146
- }
147
-
148
- // Copy session files (skip existing)
149
- let files: Awaited<ReturnType<typeof readdir>>
150
- try {
151
- files = await readdir(projectPath, { withFileTypes: true })
152
- } catch {
153
- return
154
- }
155
- await Promise.all(
156
- files.map(async fileDirent => {
157
- const fileName = fileDirent.name
158
- if (!fileName.endsWith('.jsonl')) return
159
-
160
- const srcFile = join(projectPath, fileName)
161
- const destFile = join(destProjectPath, fileName)
162
-
163
- try {
164
- await copyFile(srcFile, destFile, fsConstants.COPYFILE_EXCL)
165
- result.copied++
166
- } catch {
167
- // EEXIST from COPYFILE_EXCL means dest already exists
168
- result.skipped++
169
- }
170
- }),
171
- )
172
- }),
173
- )
174
- } finally {
175
- try {
176
- await rm(tempDir, { recursive: true, force: true })
177
- } catch {
178
- // Ignore cleanup errors
179
- }
180
- }
181
-
182
- return result
183
- }
184
- : async () => ({ copied: 0, skipped: 0 })
185
-
186
- const collectAllRemoteHostData: (destDir: string) => Promise<{
187
- hosts: RemoteHostInfo[]
188
- totalCopied: number
189
- totalSkipped: number
190
- }> =
191
- process.env.USER_TYPE === 'ant'
192
- ? async (destDir: string) => {
193
- const rHosts = await getRunningRemoteHosts()
194
- const result: RemoteHostInfo[] = []
195
- let totalCopied = 0
196
- let totalSkipped = 0
197
-
198
- // Collect from all hosts in parallel (SCP per host can take seconds)
199
- const hostResults = await Promise.all(
200
- rHosts.map(async hs => {
201
- const sessionCount = await getRemoteHostSessionCount(hs)
202
- if (sessionCount > 0) {
203
- const { copied, skipped } = await collectFromRemoteHost(
204
- hs,
205
- destDir,
206
- )
207
- return { name: hs, sessionCount, copied, skipped }
208
- }
209
- return { name: hs, sessionCount, copied: 0, skipped: 0 }
210
- }),
211
- )
212
-
213
- for (const hr of hostResults) {
214
- result.push({ name: hr.name, sessionCount: hr.sessionCount })
215
- totalCopied += hr.copied
216
- totalSkipped += hr.skipped
217
- }
218
-
219
- return { hosts: result, totalCopied, totalSkipped }
220
- }
221
- : async () => ({ hosts: [], totalCopied: 0, totalSkipped: 0 })
222
- /* eslint-enable custom-rules/no-process-env-top-level */
223
-
224
- // ============================================================================
225
- // Types
226
- // ============================================================================
227
-
228
- type SessionMeta = {
229
- session_id: string
230
- project_path: string
231
- start_time: string
232
- duration_minutes: number
233
- user_message_count: number
234
- assistant_message_count: number
235
- tool_counts: Record<string, number>
236
- languages: Record<string, number>
237
- git_commits: number
238
- git_pushes: number
239
- input_tokens: number
240
- output_tokens: number
241
- first_prompt: string
242
- summary?: string
243
- // New stats
244
- user_interruptions: number
245
- user_response_times: number[]
246
- tool_errors: number
247
- tool_error_categories: Record<string, number>
248
- uses_task_agent: boolean
249
- uses_mcp: boolean
250
- uses_web_search: boolean
251
- uses_web_fetch: boolean
252
- // Additional stats
253
- lines_added: number
254
- lines_removed: number
255
- files_modified: number
256
- message_hours: number[]
257
- user_message_timestamps: string[] // ISO timestamps for multi-clauding detection
258
- }
259
-
260
- type SessionFacets = {
261
- session_id: string
262
- underlying_goal: string
263
- goal_categories: Record<string, number>
264
- outcome: string
265
- user_satisfaction_counts: Record<string, number>
266
- claude_helpfulness: string
267
- session_type: string
268
- friction_counts: Record<string, number>
269
- friction_detail: string
270
- primary_success: string
271
- brief_summary: string
272
- user_instructions_to_claude?: string[]
273
- }
274
-
275
- type AggregatedData = {
276
- total_sessions: number
277
- total_sessions_scanned?: number
278
- sessions_with_facets: number
279
- date_range: { start: string; end: string }
280
- total_messages: number
281
- total_duration_hours: number
282
- total_input_tokens: number
283
- total_output_tokens: number
284
- tool_counts: Record<string, number>
285
- languages: Record<string, number>
286
- git_commits: number
287
- git_pushes: number
288
- projects: Record<string, number>
289
- goal_categories: Record<string, number>
290
- outcomes: Record<string, number>
291
- satisfaction: Record<string, number>
292
- helpfulness: Record<string, number>
293
- session_types: Record<string, number>
294
- friction: Record<string, number>
295
- success: Record<string, number>
296
- session_summaries: Array<{
297
- id: string
298
- date: string
299
- summary: string
300
- goal?: string
301
- }>
302
- // New aggregated stats
303
- total_interruptions: number
304
- total_tool_errors: number
305
- tool_error_categories: Record<string, number>
306
- user_response_times: number[]
307
- median_response_time: number
308
- avg_response_time: number
309
- sessions_using_task_agent: number
310
- sessions_using_mcp: number
311
- sessions_using_web_search: number
312
- sessions_using_web_fetch: number
313
- // Additional stats from Python reference
314
- total_lines_added: number
315
- total_lines_removed: number
316
- total_files_modified: number
317
- days_active: number
318
- messages_per_day: number
319
- message_hours: number[] // Hour of day for each user message (for time of day chart)
320
- // Multi-clauding stats (matching Python reference)
321
- multi_clauding: {
322
- overlap_events: number
323
- sessions_involved: number
324
- user_messages_during: number
325
- }
326
- }
327
-
328
- // ============================================================================
329
- // Constants
330
- // ============================================================================
331
-
332
- const EXTENSION_TO_LANGUAGE: Record<string, string> = {
333
- '.ts': 'TypeScript',
334
- '.tsx': 'TypeScript',
335
- '.js': 'JavaScript',
336
- '.jsx': 'JavaScript',
337
- '.py': 'Python',
338
- '.rb': 'Ruby',
339
- '.go': 'Go',
340
- '.rs': 'Rust',
341
- '.java': 'Java',
342
- '.md': 'Markdown',
343
- '.json': 'JSON',
344
- '.yaml': 'YAML',
345
- '.yml': 'YAML',
346
- '.sh': 'Shell',
347
- '.css': 'CSS',
348
- '.html': 'HTML',
349
- }
350
-
351
- // Label map for cleaning up category names (matching Python reference)
352
- const LABEL_MAP: Record<string, string> = {
353
- // Goal categories
354
- debug_investigate: 'Debug/Investigate',
355
- implement_feature: 'Implement Feature',
356
- fix_bug: 'Fix Bug',
357
- write_script_tool: 'Write Script/Tool',
358
- refactor_code: 'Refactor Code',
359
- configure_system: 'Configure System',
360
- create_pr_commit: 'Create PR/Commit',
361
- analyze_data: 'Analyze Data',
362
- understand_codebase: 'Understand Codebase',
363
- write_tests: 'Write Tests',
364
- write_docs: 'Write Docs',
365
- deploy_infra: 'Deploy/Infra',
366
- warmup_minimal: 'Cache Warmup',
367
- // Success factors
368
- fast_accurate_search: 'Fast/Accurate Search',
369
- correct_code_edits: 'Correct Code Edits',
370
- good_explanations: 'Good Explanations',
371
- proactive_help: 'Proactive Help',
372
- multi_file_changes: 'Multi-file Changes',
373
- handled_complexity: 'Multi-file Changes',
374
- good_debugging: 'Good Debugging',
375
- // Friction types
376
- misunderstood_request: 'Misunderstood Request',
377
- wrong_approach: 'Wrong Approach',
378
- buggy_code: 'Buggy Code',
379
- user_rejected_action: 'User Rejected Action',
380
- claude_got_blocked: 'Claude Got Blocked',
381
- user_stopped_early: 'User Stopped Early',
382
- wrong_file_or_location: 'Wrong File/Location',
383
- excessive_changes: 'Excessive Changes',
384
- slow_or_verbose: 'Slow/Verbose',
385
- tool_failed: 'Tool Failed',
386
- user_unclear: 'User Unclear',
387
- external_issue: 'External Issue',
388
- // Satisfaction labels
389
- frustrated: 'Frustrated',
390
- dissatisfied: 'Dissatisfied',
391
- likely_satisfied: 'Likely Satisfied',
392
- satisfied: 'Satisfied',
393
- happy: 'Happy',
394
- unsure: 'Unsure',
395
- neutral: 'Neutral',
396
- delighted: 'Delighted',
397
- // Session types
398
- single_task: 'Single Task',
399
- multi_task: 'Multi Task',
400
- iterative_refinement: 'Iterative Refinement',
401
- exploration: 'Exploration',
402
- quick_question: 'Quick Question',
403
- // Outcomes
404
- fully_achieved: 'Fully Achieved',
405
- mostly_achieved: 'Mostly Achieved',
406
- partially_achieved: 'Partially Achieved',
407
- not_achieved: 'Not Achieved',
408
- unclear_from_transcript: 'Unclear',
409
- // Helpfulness
410
- unhelpful: 'Unhelpful',
411
- slightly_helpful: 'Slightly Helpful',
412
- moderately_helpful: 'Moderately Helpful',
413
- very_helpful: 'Very Helpful',
414
- essential: 'Essential',
415
- }
416
-
417
- // Lazy getters: getClaudeConfigHomeDir() is memoized and reads process.env.
418
- // Calling it at module scope would populate the memoize cache before
419
- // entrypoints can set CLAUDE_CONFIG_DIR, breaking all 150+ other callers.
420
- function getDataDir(): string {
421
- return join(getClaudeConfigHomeDir(), 'usage-data')
422
- }
423
- function getFacetsDir(): string {
424
- return join(getDataDir(), 'facets')
425
- }
426
- function getSessionMetaDir(): string {
427
- return join(getDataDir(), 'session-meta')
428
- }
429
-
430
- const FACET_EXTRACTION_PROMPT = `Analyze this Claude Code session and extract structured facets.
431
-
432
- CRITICAL GUIDELINES:
433
-
434
- 1. **goal_categories**: Count ONLY what the USER explicitly asked for.
435
- - DO NOT count Claude's autonomous codebase exploration
436
- - DO NOT count work Claude decided to do on its own
437
- - ONLY count when user says "can you...", "please...", "I need...", "let's..."
438
-
439
- 2. **user_satisfaction_counts**: Base ONLY on explicit user signals.
440
- - "Yay!", "great!", "perfect!" → happy
441
- - "thanks", "looks good", "that works" → satisfied
442
- - "ok, now let's..." (continuing without complaint) → likely_satisfied
443
- - "that's not right", "try again" → dissatisfied
444
- - "this is broken", "I give up" → frustrated
445
-
446
- 3. **friction_counts**: Be specific about what went wrong.
447
- - misunderstood_request: Claude interpreted incorrectly
448
- - wrong_approach: Right goal, wrong solution method
449
- - buggy_code: Code didn't work correctly
450
- - user_rejected_action: User said no/stop to a tool call
451
- - excessive_changes: Over-engineered or changed too much
452
-
453
- 4. If very short or just warmup, use warmup_minimal for goal_category
454
-
455
- SESSION:
456
- `
457
-
458
- // ============================================================================
459
- // Helper Functions
460
- // ============================================================================
461
-
462
- function getLanguageFromPath(filePath: string): string | null {
463
- const ext = extname(filePath).toLowerCase()
464
- return EXTENSION_TO_LANGUAGE[ext] || null
465
- }
466
-
467
- function extractToolStats(log: LogOption): {
468
- toolCounts: Record<string, number>
469
- languages: Record<string, number>
470
- gitCommits: number
471
- gitPushes: number
472
- inputTokens: number
473
- outputTokens: number
474
- // New stats
475
- userInterruptions: number
476
- userResponseTimes: number[]
477
- toolErrors: number
478
- toolErrorCategories: Record<string, number>
479
- usesTaskAgent: boolean
480
- usesMcp: boolean
481
- usesWebSearch: boolean
482
- usesWebFetch: boolean
483
- // Additional stats
484
- linesAdded: number
485
- linesRemoved: number
486
- filesModified: Set<string>
487
- messageHours: number[]
488
- userMessageTimestamps: string[] // ISO timestamps for multi-clauding detection
489
- } {
490
- const toolCounts: Record<string, number> = {}
491
- const languages: Record<string, number> = {}
492
- let gitCommits = 0
493
- let gitPushes = 0
494
- let inputTokens = 0
495
- let outputTokens = 0
496
-
497
- // New stats
498
- let userInterruptions = 0
499
- const userResponseTimes: number[] = []
500
- let toolErrors = 0
501
- const toolErrorCategories: Record<string, number> = {}
502
- let usesTaskAgent = false
503
-
504
- // Additional stats
505
- let linesAdded = 0
506
- let linesRemoved = 0
507
- const filesModified = new Set<string>()
508
- const messageHours: number[] = []
509
- const userMessageTimestamps: string[] = [] // For multi-clauding detection
510
- let usesMcp = false
511
- let usesWebSearch = false
512
- let usesWebFetch = false
513
- let lastAssistantTimestamp: string | null = null
514
-
515
- for (const msg of log.messages) {
516
- // Get message timestamp for response time calculation
517
- const msgTimestamp = (msg as { timestamp?: string }).timestamp
518
-
519
- if (msg.type === 'assistant' && msg.message) {
520
- // Track timestamp for response time calculation
521
- if (msgTimestamp) {
522
- lastAssistantTimestamp = msgTimestamp
523
- }
524
-
525
- const usage = (
526
- msg.message as {
527
- usage?: { input_tokens?: number; output_tokens?: number }
528
- }
529
- ).usage
530
- if (usage) {
531
- inputTokens += usage.input_tokens || 0
532
- outputTokens += usage.output_tokens || 0
533
- }
534
-
535
- const content = msg.message.content
536
- if (Array.isArray(content)) {
537
- for (const block of content) {
538
- if (block.type === 'tool_use' && 'name' in block) {
539
- const toolName = block.name as string
540
- toolCounts[toolName] = (toolCounts[toolName] || 0) + 1
541
-
542
- // Check for special tool usage
543
- if (
544
- toolName === AGENT_TOOL_NAME ||
545
- toolName === LEGACY_AGENT_TOOL_NAME
546
- )
547
- usesTaskAgent = true
548
- if (toolName.startsWith('mcp__')) usesMcp = true
549
- if (toolName === 'WebSearch') usesWebSearch = true
550
- if (toolName === 'WebFetch') usesWebFetch = true
551
-
552
- const input = (block as { input?: Record<string, unknown> }).input
553
-
554
- if (input) {
555
- const filePath = (input.file_path as string) || ''
556
- if (filePath) {
557
- const lang = getLanguageFromPath(filePath)
558
- if (lang) {
559
- languages[lang] = (languages[lang] || 0) + 1
560
- }
561
- // Track files modified by Edit/Write tools
562
- if (toolName === 'Edit' || toolName === 'Write') {
563
- filesModified.add(filePath)
564
- }
565
- }
566
-
567
- if (toolName === 'Edit') {
568
- const oldString = (input.old_string as string) || ''
569
- const newString = (input.new_string as string) || ''
570
- for (const change of diffLines(oldString, newString)) {
571
- if (change.added) linesAdded += change.count || 0
572
- if (change.removed) linesRemoved += change.count || 0
573
- }
574
- }
575
-
576
- // Track lines from Write tool (all added)
577
- if (toolName === 'Write') {
578
- const writeContent = (input.content as string) || ''
579
- if (writeContent) {
580
- linesAdded += countCharInString(writeContent, '\n') + 1
581
- }
582
- }
583
-
584
- const command = (input.command as string) || ''
585
- if (command.includes('git commit')) gitCommits++
586
- if (command.includes('git push')) gitPushes++
587
- }
588
- }
589
- }
590
- }
591
- }
592
-
593
- // Check user messages
594
- if (msg.type === 'user' && msg.message) {
595
- const content = msg.message.content
596
-
597
- // Check if this is an actual human message (has text) vs just tool_result
598
- // matching Python reference logic
599
- let isHumanMessage = false
600
- if (typeof content === 'string' && content.trim()) {
601
- isHumanMessage = true
602
- } else if (Array.isArray(content)) {
603
- for (const block of content) {
604
- if (block.type === 'text' && 'text' in block) {
605
- isHumanMessage = true
606
- break
607
- }
608
- }
609
- }
610
-
611
- // Only track message hours and response times for actual human messages
612
- if (isHumanMessage) {
613
- // Track message hour for time-of-day analysis and timestamp for multi-clauding
614
- if (msgTimestamp) {
615
- try {
616
- const msgDate = new Date(msgTimestamp)
617
- const hour = msgDate.getHours() // Local hour 0-23
618
- messageHours.push(hour)
619
- // Collect timestamp for multi-clauding detection (matching Python)
620
- userMessageTimestamps.push(msgTimestamp)
621
- } catch {
622
- // Skip invalid timestamps
623
- }
624
- }
625
-
626
- // Calculate response time (time from last assistant message to this user message)
627
- // Only count gaps > 2 seconds (real user think time, not tool results)
628
- if (lastAssistantTimestamp && msgTimestamp) {
629
- const assistantTime = new Date(lastAssistantTimestamp).getTime()
630
- const userTime = new Date(msgTimestamp).getTime()
631
- const responseTimeSec = (userTime - assistantTime) / 1000
632
- // Only count reasonable response times (2s-1 hour) matching Python
633
- if (responseTimeSec > 2 && responseTimeSec < 3600) {
634
- userResponseTimes.push(responseTimeSec)
635
- }
636
- }
637
- }
638
-
639
- // Process tool results (for error tracking)
640
- if (Array.isArray(content)) {
641
- for (const block of content) {
642
- if (block.type === 'tool_result' && 'content' in block) {
643
- const isError = (block as { is_error?: boolean }).is_error
644
-
645
- // Count and categorize tool errors (matching Python reference logic)
646
- if (isError) {
647
- toolErrors++
648
- const resultContent = (block as { content?: string }).content
649
- let category = 'Other'
650
- if (typeof resultContent === 'string') {
651
- const lowerContent = resultContent.toLowerCase()
652
- if (lowerContent.includes('exit code')) {
653
- category = 'Command Failed'
654
- } else if (
655
- lowerContent.includes('rejected') ||
656
- lowerContent.includes("doesn't want")
657
- ) {
658
- category = 'User Rejected'
659
- } else if (
660
- lowerContent.includes('string to replace not found') ||
661
- lowerContent.includes('no changes')
662
- ) {
663
- category = 'Edit Failed'
664
- } else if (lowerContent.includes('modified since read')) {
665
- category = 'File Changed'
666
- } else if (
667
- lowerContent.includes('exceeds maximum') ||
668
- lowerContent.includes('too large')
669
- ) {
670
- category = 'File Too Large'
671
- } else if (
672
- lowerContent.includes('file not found') ||
673
- lowerContent.includes('does not exist')
674
- ) {
675
- category = 'File Not Found'
676
- }
677
- }
678
- toolErrorCategories[category] =
679
- (toolErrorCategories[category] || 0) + 1
680
- }
681
- }
682
- }
683
- }
684
-
685
- // Check for interruptions (matching Python reference)
686
- if (typeof content === 'string') {
687
- if (content.includes('[Request interrupted by user')) {
688
- userInterruptions++
689
- }
690
- } else if (Array.isArray(content)) {
691
- for (const block of content) {
692
- if (
693
- block.type === 'text' &&
694
- 'text' in block &&
695
- (block.text as string).includes('[Request interrupted by user')
696
- ) {
697
- userInterruptions++
698
- break
699
- }
700
- }
701
- }
702
- }
703
- }
704
-
705
- return {
706
- toolCounts,
707
- languages,
708
- gitCommits,
709
- gitPushes,
710
- inputTokens,
711
- outputTokens,
712
- // New stats
713
- userInterruptions,
714
- userResponseTimes,
715
- toolErrors,
716
- toolErrorCategories,
717
- usesTaskAgent,
718
- usesMcp,
719
- usesWebSearch,
720
- usesWebFetch,
721
- // Additional stats
722
- linesAdded,
723
- linesRemoved,
724
- filesModified,
725
- messageHours,
726
- userMessageTimestamps,
727
- }
728
- }
729
-
730
- function hasValidDates(log: LogOption): boolean {
731
- return (
732
- !Number.isNaN(log.created.getTime()) &&
733
- !Number.isNaN(log.modified.getTime())
734
- )
735
- }
736
-
737
- function logToSessionMeta(log: LogOption): SessionMeta {
738
- const stats = extractToolStats(log)
739
- const sessionId = getSessionIdFromLog(log) || 'unknown'
740
- const startTime = log.created.toISOString()
741
- const durationMinutes = Math.round(
742
- (log.modified.getTime() - log.created.getTime()) / 1000 / 60,
743
- )
744
-
745
- let userMessageCount = 0
746
- let assistantMessageCount = 0
747
- for (const msg of log.messages) {
748
- if (msg.type === 'assistant') assistantMessageCount++
749
- // Only count user messages that have actual text content (human messages)
750
- // not just tool_result messages (matching Python reference)
751
- if (msg.type === 'user' && msg.message) {
752
- const content = msg.message.content
753
- let isHumanMessage = false
754
- if (typeof content === 'string' && content.trim()) {
755
- isHumanMessage = true
756
- } else if (Array.isArray(content)) {
757
- for (const block of content) {
758
- if (block.type === 'text' && 'text' in block) {
759
- isHumanMessage = true
760
- break
761
- }
762
- }
763
- }
764
- if (isHumanMessage) {
765
- userMessageCount++
766
- }
767
- }
768
- }
769
-
770
- return {
771
- session_id: sessionId,
772
- project_path: log.projectPath || '',
773
- start_time: startTime,
774
- duration_minutes: durationMinutes,
775
- user_message_count: userMessageCount,
776
- assistant_message_count: assistantMessageCount,
777
- tool_counts: stats.toolCounts,
778
- languages: stats.languages,
779
- git_commits: stats.gitCommits,
780
- git_pushes: stats.gitPushes,
781
- input_tokens: stats.inputTokens,
782
- output_tokens: stats.outputTokens,
783
- first_prompt: log.firstPrompt || '',
784
- summary: log.summary,
785
- // New stats
786
- user_interruptions: stats.userInterruptions,
787
- user_response_times: stats.userResponseTimes,
788
- tool_errors: stats.toolErrors,
789
- tool_error_categories: stats.toolErrorCategories,
790
- uses_task_agent: stats.usesTaskAgent,
791
- uses_mcp: stats.usesMcp,
792
- uses_web_search: stats.usesWebSearch,
793
- uses_web_fetch: stats.usesWebFetch,
794
- // Additional stats
795
- lines_added: stats.linesAdded,
796
- lines_removed: stats.linesRemoved,
797
- files_modified: stats.filesModified.size,
798
- message_hours: stats.messageHours,
799
- user_message_timestamps: stats.userMessageTimestamps,
800
- }
801
- }
802
-
803
- /**
804
- * Deduplicate conversation branches within the same session.
805
- *
806
- * When a session file has multiple leaf messages (from retries or branching),
807
- * loadAllLogsFromSessionFile produces one LogOption per leaf. Each branch
808
- * shares the same root message, so its duration overlaps with sibling
809
- * branches. This keeps only the branch with the most user messages
810
- * (tie-break by longest duration) per session_id.
811
- */
812
- export function deduplicateSessionBranches(
813
- entries: Array<{ log: LogOption; meta: SessionMeta }>,
814
- ): Array<{ log: LogOption; meta: SessionMeta }> {
815
- const bestBySession = new Map<string, { log: LogOption; meta: SessionMeta }>()
816
- for (const entry of entries) {
817
- const id = entry.meta.session_id
818
- const existing = bestBySession.get(id)
819
- if (
820
- !existing ||
821
- entry.meta.user_message_count > existing.meta.user_message_count ||
822
- (entry.meta.user_message_count === existing.meta.user_message_count &&
823
- entry.meta.duration_minutes > existing.meta.duration_minutes)
824
- ) {
825
- bestBySession.set(id, entry)
826
- }
827
- }
828
- return [...bestBySession.values()]
829
- }
830
-
831
- function formatTranscriptForFacets(log: LogOption): string {
832
- const lines: string[] = []
833
- const meta = logToSessionMeta(log)
834
-
835
- lines.push(`Session: ${meta.session_id.slice(0, 8)}`)
836
- lines.push(`Date: ${meta.start_time}`)
837
- lines.push(`Project: ${meta.project_path}`)
838
- lines.push(`Duration: ${meta.duration_minutes} min`)
839
- lines.push('')
840
-
841
- for (const msg of log.messages) {
842
- if (msg.type === 'user' && msg.message) {
843
- const content = msg.message.content
844
- if (typeof content === 'string') {
845
- lines.push(`[User]: ${content.slice(0, 500)}`)
846
- } else if (Array.isArray(content)) {
847
- for (const block of content) {
848
- if (block.type === 'text' && 'text' in block) {
849
- lines.push(`[User]: ${(block.text as string).slice(0, 500)}`)
850
- }
851
- }
852
- }
853
- } else if (msg.type === 'assistant' && msg.message) {
854
- const content = msg.message.content
855
- if (Array.isArray(content)) {
856
- for (const block of content) {
857
- if (block.type === 'text' && 'text' in block) {
858
- lines.push(`[Assistant]: ${(block.text as string).slice(0, 300)}`)
859
- } else if (block.type === 'tool_use' && 'name' in block) {
860
- lines.push(`[Tool: ${block.name}]`)
861
- }
862
- }
863
- }
864
- }
865
- }
866
-
867
- return lines.join('\n')
868
- }
869
-
870
- const SUMMARIZE_CHUNK_PROMPT = `Summarize this portion of a Claude Code session transcript. Focus on:
871
- 1. What the user asked for
872
- 2. What Claude did (tools used, files modified)
873
- 3. Any friction or issues
874
- 4. The outcome
875
-
876
- Keep it concise - 3-5 sentences. Preserve specific details like file names, error messages, and user feedback.
877
-
878
- TRANSCRIPT CHUNK:
879
- `
880
-
881
- async function summarizeTranscriptChunk(chunk: string): Promise<string> {
882
- try {
883
- const result = await queryWithModel({
884
- systemPrompt: asSystemPrompt([]),
885
- userPrompt: SUMMARIZE_CHUNK_PROMPT + chunk,
886
- signal: new AbortController().signal,
887
- options: {
888
- model: getAnalysisModel(),
889
- querySource: 'insights',
890
- agents: [],
891
- isNonInteractiveSession: true,
892
- hasAppendSystemPrompt: false,
893
- mcpTools: [],
894
- maxOutputTokensOverride: 500,
895
- },
896
- })
897
-
898
- const text = extractTextContent(result.message.content)
899
- return text || chunk.slice(0, 2000)
900
- } catch {
901
- // On error, just return truncated chunk
902
- return chunk.slice(0, 2000)
903
- }
904
- }
905
-
906
- async function formatTranscriptWithSummarization(
907
- log: LogOption,
908
- ): Promise<string> {
909
- const fullTranscript = formatTranscriptForFacets(log)
910
-
911
- // If under 30k chars, use as-is
912
- if (fullTranscript.length <= 30000) {
913
- return fullTranscript
914
- }
915
-
916
- // For long transcripts, split into chunks and summarize in parallel
917
- const CHUNK_SIZE = 25000
918
- const chunks: string[] = []
919
-
920
- for (let i = 0; i < fullTranscript.length; i += CHUNK_SIZE) {
921
- chunks.push(fullTranscript.slice(i, i + CHUNK_SIZE))
922
- }
923
-
924
- // Summarize all chunks in parallel
925
- const summaries = await Promise.all(chunks.map(summarizeTranscriptChunk))
926
-
927
- // Combine summaries with session header
928
- const meta = logToSessionMeta(log)
929
- const header = [
930
- `Session: ${meta.session_id.slice(0, 8)}`,
931
- `Date: ${meta.start_time}`,
932
- `Project: ${meta.project_path}`,
933
- `Duration: ${meta.duration_minutes} min`,
934
- `[Long session - ${chunks.length} parts summarized]`,
935
- '',
936
- ].join('\n')
937
-
938
- return header + summaries.join('\n\n---\n\n')
939
- }
940
-
941
- async function loadCachedFacets(
942
- sessionId: string,
943
- ): Promise<SessionFacets | null> {
944
- const facetPath = join(getFacetsDir(), `${sessionId}.json`)
945
- try {
946
- const content = await readFile(facetPath, { encoding: 'utf-8' })
947
- const parsed: unknown = jsonParse(content)
948
- if (!isValidSessionFacets(parsed)) {
949
- // Delete corrupted cache file so it gets re-extracted next run
950
- try {
951
- await unlink(facetPath)
952
- } catch {
953
- // Ignore deletion errors
954
- }
955
- return null
956
- }
957
- return parsed
958
- } catch {
959
- return null
960
- }
961
- }
962
-
963
- async function saveFacets(facets: SessionFacets): Promise<void> {
964
- try {
965
- await mkdir(getFacetsDir(), { recursive: true })
966
- } catch {
967
- // Directory may already exist
968
- }
969
- const facetPath = join(getFacetsDir(), `${facets.session_id}.json`)
970
- await writeFile(facetPath, jsonStringify(facets, null, 2), {
971
- encoding: 'utf-8',
972
- mode: 0o600,
973
- })
974
- }
975
-
976
- async function loadCachedSessionMeta(
977
- sessionId: string,
978
- ): Promise<SessionMeta | null> {
979
- const metaPath = join(getSessionMetaDir(), `${sessionId}.json`)
980
- try {
981
- const content = await readFile(metaPath, { encoding: 'utf-8' })
982
- return jsonParse(content)
983
- } catch {
984
- return null
985
- }
986
- }
987
-
988
- async function saveSessionMeta(meta: SessionMeta): Promise<void> {
989
- try {
990
- await mkdir(getSessionMetaDir(), { recursive: true })
991
- } catch {
992
- // Directory may already exist
993
- }
994
- const metaPath = join(getSessionMetaDir(), `${meta.session_id}.json`)
995
- await writeFile(metaPath, jsonStringify(meta, null, 2), {
996
- encoding: 'utf-8',
997
- mode: 0o600,
998
- })
999
- }
1000
-
1001
- async function extractFacetsFromAPI(
1002
- log: LogOption,
1003
- sessionId: string,
1004
- ): Promise<SessionFacets | null> {
1005
- try {
1006
- // Use summarization for long transcripts
1007
- const transcript = await formatTranscriptWithSummarization(log)
1008
-
1009
- // Build prompt asking for JSON directly (no tool use)
1010
- const jsonPrompt = `${FACET_EXTRACTION_PROMPT}${transcript}
1011
-
1012
- RESPOND WITH ONLY A VALID JSON OBJECT matching this schema:
1013
- {
1014
- "underlying_goal": "What the user fundamentally wanted to achieve",
1015
- "goal_categories": {"category_name": count, ...},
1016
- "outcome": "fully_achieved|mostly_achieved|partially_achieved|not_achieved|unclear_from_transcript",
1017
- "user_satisfaction_counts": {"level": count, ...},
1018
- "claude_helpfulness": "unhelpful|slightly_helpful|moderately_helpful|very_helpful|essential",
1019
- "session_type": "single_task|multi_task|iterative_refinement|exploration|quick_question",
1020
- "friction_counts": {"friction_type": count, ...},
1021
- "friction_detail": "One sentence describing friction or empty",
1022
- "primary_success": "none|fast_accurate_search|correct_code_edits|good_explanations|proactive_help|multi_file_changes|good_debugging",
1023
- "brief_summary": "One sentence: what user wanted and whether they got it"
1024
- }`
1025
-
1026
- const result = await queryWithModel({
1027
- systemPrompt: asSystemPrompt([]),
1028
- userPrompt: jsonPrompt,
1029
- signal: new AbortController().signal,
1030
- options: {
1031
- model: getAnalysisModel(),
1032
- querySource: 'insights',
1033
- agents: [],
1034
- isNonInteractiveSession: true,
1035
- hasAppendSystemPrompt: false,
1036
- mcpTools: [],
1037
- maxOutputTokensOverride: 4096,
1038
- },
1039
- })
1040
-
1041
- const text = extractTextContent(result.message.content)
1042
-
1043
- // Parse JSON from response
1044
- const jsonMatch = text.match(/\{[\s\S]*\}/)
1045
- if (!jsonMatch) return null
1046
-
1047
- const parsed: unknown = jsonParse(jsonMatch[0])
1048
- if (!isValidSessionFacets(parsed)) return null
1049
- const facets: SessionFacets = { ...parsed, session_id: sessionId }
1050
- return facets
1051
- } catch (err) {
1052
- logError(new Error(`Facet extraction failed: ${toError(err).message}`))
1053
- return null
1054
- }
1055
- }
1056
-
1057
- /**
1058
- * Detects multi-clauding (using multiple Claude sessions concurrently).
1059
- * Uses a sliding window to find the pattern: session1 -> session2 -> session1
1060
- * within a 30-minute window.
1061
- */
1062
- export function detectMultiClauding(
1063
- sessions: Array<{
1064
- session_id: string
1065
- user_message_timestamps: string[]
1066
- }>,
1067
- ): {
1068
- overlap_events: number
1069
- sessions_involved: number
1070
- user_messages_during: number
1071
- } {
1072
- const OVERLAP_WINDOW_MS = 30 * 60000
1073
- const allSessionMessages: Array<{ ts: number; sessionId: string }> = []
1074
-
1075
- for (const session of sessions) {
1076
- for (const timestamp of session.user_message_timestamps) {
1077
- try {
1078
- const ts = new Date(timestamp).getTime()
1079
- allSessionMessages.push({ ts, sessionId: session.session_id })
1080
- } catch {
1081
- // Skip invalid timestamps
1082
- }
1083
- }
1084
- }
1085
-
1086
- allSessionMessages.sort((a, b) => a.ts - b.ts)
1087
-
1088
- const multiClaudeSessionPairs = new Set<string>()
1089
- const messagesDuringMulticlaude = new Set<string>()
1090
-
1091
- // Sliding window: sessionLastIndex tracks the most recent index for each session
1092
- let windowStart = 0
1093
- const sessionLastIndex = new Map<string, number>()
1094
-
1095
- for (let i = 0; i < allSessionMessages.length; i++) {
1096
- const msg = allSessionMessages[i]!
1097
-
1098
- // Shrink window from the left
1099
- while (
1100
- windowStart < i &&
1101
- msg.ts - allSessionMessages[windowStart]!.ts > OVERLAP_WINDOW_MS
1102
- ) {
1103
- const expiring = allSessionMessages[windowStart]!
1104
- if (sessionLastIndex.get(expiring.sessionId) === windowStart) {
1105
- sessionLastIndex.delete(expiring.sessionId)
1106
- }
1107
- windowStart++
1108
- }
1109
-
1110
- // Check if this session appeared earlier in the window (pattern: s1 -> s2 -> s1)
1111
- const prevIndex = sessionLastIndex.get(msg.sessionId)
1112
- if (prevIndex !== undefined) {
1113
- for (let j = prevIndex + 1; j < i; j++) {
1114
- const between = allSessionMessages[j]!
1115
- if (between.sessionId !== msg.sessionId) {
1116
- const pair = [msg.sessionId, between.sessionId].sort().join(':')
1117
- multiClaudeSessionPairs.add(pair)
1118
- messagesDuringMulticlaude.add(
1119
- `${allSessionMessages[prevIndex]!.ts}:${msg.sessionId}`,
1120
- )
1121
- messagesDuringMulticlaude.add(`${between.ts}:${between.sessionId}`)
1122
- messagesDuringMulticlaude.add(`${msg.ts}:${msg.sessionId}`)
1123
- break
1124
- }
1125
- }
1126
- }
1127
-
1128
- sessionLastIndex.set(msg.sessionId, i)
1129
- }
1130
-
1131
- const sessionsWithOverlaps = new Set<string>()
1132
- for (const pair of multiClaudeSessionPairs) {
1133
- const [s1, s2] = pair.split(':')
1134
- if (s1) sessionsWithOverlaps.add(s1)
1135
- if (s2) sessionsWithOverlaps.add(s2)
1136
- }
1137
-
1138
- return {
1139
- overlap_events: multiClaudeSessionPairs.size,
1140
- sessions_involved: sessionsWithOverlaps.size,
1141
- user_messages_during: messagesDuringMulticlaude.size,
1142
- }
1143
- }
1144
-
1145
- function aggregateData(
1146
- sessions: SessionMeta[],
1147
- facets: Map<string, SessionFacets>,
1148
- ): AggregatedData {
1149
- const result: AggregatedData = {
1150
- total_sessions: sessions.length,
1151
- sessions_with_facets: facets.size,
1152
- date_range: { start: '', end: '' },
1153
- total_messages: 0,
1154
- total_duration_hours: 0,
1155
- total_input_tokens: 0,
1156
- total_output_tokens: 0,
1157
- tool_counts: {},
1158
- languages: {},
1159
- git_commits: 0,
1160
- git_pushes: 0,
1161
- projects: {},
1162
- goal_categories: {},
1163
- outcomes: {},
1164
- satisfaction: {},
1165
- helpfulness: {},
1166
- session_types: {},
1167
- friction: {},
1168
- success: {},
1169
- session_summaries: [],
1170
- // New stats
1171
- total_interruptions: 0,
1172
- total_tool_errors: 0,
1173
- tool_error_categories: {},
1174
- user_response_times: [],
1175
- median_response_time: 0,
1176
- avg_response_time: 0,
1177
- sessions_using_task_agent: 0,
1178
- sessions_using_mcp: 0,
1179
- sessions_using_web_search: 0,
1180
- sessions_using_web_fetch: 0,
1181
- // Additional stats
1182
- total_lines_added: 0,
1183
- total_lines_removed: 0,
1184
- total_files_modified: 0,
1185
- days_active: 0,
1186
- messages_per_day: 0,
1187
- message_hours: [],
1188
- // Multi-clauding stats (matching Python reference)
1189
- multi_clauding: {
1190
- overlap_events: 0,
1191
- sessions_involved: 0,
1192
- user_messages_during: 0,
1193
- },
1194
- }
1195
-
1196
- const dates: string[] = []
1197
- const allResponseTimes: number[] = []
1198
- const allMessageHours: number[] = []
1199
-
1200
- for (const session of sessions) {
1201
- dates.push(session.start_time)
1202
- result.total_messages += session.user_message_count
1203
- result.total_duration_hours += session.duration_minutes / 60
1204
- result.total_input_tokens += session.input_tokens
1205
- result.total_output_tokens += session.output_tokens
1206
- result.git_commits += session.git_commits
1207
- result.git_pushes += session.git_pushes
1208
-
1209
- // New stats aggregation
1210
- result.total_interruptions += session.user_interruptions
1211
- result.total_tool_errors += session.tool_errors
1212
- for (const [cat, count] of Object.entries(session.tool_error_categories)) {
1213
- result.tool_error_categories[cat] =
1214
- (result.tool_error_categories[cat] || 0) + count
1215
- }
1216
- allResponseTimes.push(...session.user_response_times)
1217
- if (session.uses_task_agent) result.sessions_using_task_agent++
1218
- if (session.uses_mcp) result.sessions_using_mcp++
1219
- if (session.uses_web_search) result.sessions_using_web_search++
1220
- if (session.uses_web_fetch) result.sessions_using_web_fetch++
1221
-
1222
- // Additional stats aggregation
1223
- result.total_lines_added += session.lines_added
1224
- result.total_lines_removed += session.lines_removed
1225
- result.total_files_modified += session.files_modified
1226
- allMessageHours.push(...session.message_hours)
1227
-
1228
- for (const [tool, count] of Object.entries(session.tool_counts)) {
1229
- result.tool_counts[tool] = (result.tool_counts[tool] || 0) + count
1230
- }
1231
-
1232
- for (const [lang, count] of Object.entries(session.languages)) {
1233
- result.languages[lang] = (result.languages[lang] || 0) + count
1234
- }
1235
-
1236
- if (session.project_path) {
1237
- result.projects[session.project_path] =
1238
- (result.projects[session.project_path] || 0) + 1
1239
- }
1240
-
1241
- const sessionFacets = facets.get(session.session_id)
1242
- if (sessionFacets) {
1243
- // Goal categories
1244
- for (const [cat, count] of safeEntries(sessionFacets.goal_categories)) {
1245
- if (count > 0) {
1246
- result.goal_categories[cat] =
1247
- (result.goal_categories[cat] || 0) + count
1248
- }
1249
- }
1250
-
1251
- // Outcomes
1252
- result.outcomes[sessionFacets.outcome] =
1253
- (result.outcomes[sessionFacets.outcome] || 0) + 1
1254
-
1255
- // Satisfaction counts
1256
- for (const [level, count] of safeEntries(
1257
- sessionFacets.user_satisfaction_counts,
1258
- )) {
1259
- if (count > 0) {
1260
- result.satisfaction[level] = (result.satisfaction[level] || 0) + count
1261
- }
1262
- }
1263
-
1264
- // Helpfulness
1265
- result.helpfulness[sessionFacets.claude_helpfulness] =
1266
- (result.helpfulness[sessionFacets.claude_helpfulness] || 0) + 1
1267
-
1268
- // Session types
1269
- result.session_types[sessionFacets.session_type] =
1270
- (result.session_types[sessionFacets.session_type] || 0) + 1
1271
-
1272
- // Friction counts
1273
- for (const [type, count] of safeEntries(sessionFacets.friction_counts)) {
1274
- if (count > 0) {
1275
- result.friction[type] = (result.friction[type] || 0) + count
1276
- }
1277
- }
1278
-
1279
- // Success factors
1280
- if (sessionFacets.primary_success !== 'none') {
1281
- result.success[sessionFacets.primary_success] =
1282
- (result.success[sessionFacets.primary_success] || 0) + 1
1283
- }
1284
- }
1285
-
1286
- if (result.session_summaries.length < 50) {
1287
- result.session_summaries.push({
1288
- id: session.session_id.slice(0, 8),
1289
- date: session.start_time.split('T')[0] || '',
1290
- summary: session.summary || session.first_prompt.slice(0, 100),
1291
- goal: sessionFacets?.underlying_goal,
1292
- })
1293
- }
1294
- }
1295
-
1296
- dates.sort()
1297
- result.date_range.start = dates[0]?.split('T')[0] || ''
1298
- result.date_range.end = dates[dates.length - 1]?.split('T')[0] || ''
1299
-
1300
- // Calculate response time stats
1301
- result.user_response_times = allResponseTimes
1302
- if (allResponseTimes.length > 0) {
1303
- const sorted = [...allResponseTimes].sort((a, b) => a - b)
1304
- result.median_response_time = sorted[Math.floor(sorted.length / 2)] || 0
1305
- result.avg_response_time =
1306
- allResponseTimes.reduce((a, b) => a + b, 0) / allResponseTimes.length
1307
- }
1308
-
1309
- // Calculate days active and messages per day
1310
- const uniqueDays = new Set(dates.map(d => d.split('T')[0]))
1311
- result.days_active = uniqueDays.size
1312
- result.messages_per_day =
1313
- result.days_active > 0
1314
- ? Math.round((result.total_messages / result.days_active) * 10) / 10
1315
- : 0
1316
-
1317
- // Store message hours for time-of-day chart
1318
- result.message_hours = allMessageHours
1319
-
1320
- result.multi_clauding = detectMultiClauding(sessions)
1321
-
1322
- return result
1323
- }
1324
-
1325
- // ============================================================================
1326
- // Parallel Insights Generation (6 sections)
1327
- // ============================================================================
1328
-
1329
- type InsightSection = {
1330
- name: string
1331
- prompt: string
1332
- maxTokens: number
1333
- }
1334
-
1335
- // Sections that run in parallel first
1336
- const INSIGHT_SECTIONS: InsightSection[] = [
1337
- {
1338
- name: 'project_areas',
1339
- prompt: `Analyze this Claude Code usage data and identify project areas.
1340
-
1341
- RESPOND WITH ONLY A VALID JSON OBJECT:
1342
- {
1343
- "areas": [
1344
- {"name": "Area name", "session_count": N, "description": "2-3 sentences about what was worked on and how Claude Code was used."}
1345
- ]
1346
- }
1347
-
1348
- Include 4-5 areas. Skip internal CC operations.`,
1349
- maxTokens: 8192,
1350
- },
1351
- {
1352
- name: 'interaction_style',
1353
- prompt: `Analyze this Claude Code usage data and describe the user's interaction style.
1354
-
1355
- RESPOND WITH ONLY A VALID JSON OBJECT:
1356
- {
1357
- "narrative": "2-3 paragraphs analyzing HOW the user interacts with Claude Code. Use second person 'you'. Describe patterns: iterate quickly vs detailed upfront specs? Interrupt often or let Claude run? Include specific examples. Use **bold** for key insights.",
1358
- "key_pattern": "One sentence summary of most distinctive interaction style"
1359
- }`,
1360
- maxTokens: 8192,
1361
- },
1362
- {
1363
- name: 'what_works',
1364
- prompt: `Analyze this Claude Code usage data and identify what's working well for this user. Use second person ("you").
1365
-
1366
- RESPOND WITH ONLY A VALID JSON OBJECT:
1367
- {
1368
- "intro": "1 sentence of context",
1369
- "impressive_workflows": [
1370
- {"title": "Short title (3-6 words)", "description": "2-3 sentences describing the impressive workflow or approach. Use 'you' not 'the user'."}
1371
- ]
1372
- }
1373
-
1374
- Include 3 impressive workflows.`,
1375
- maxTokens: 8192,
1376
- },
1377
- {
1378
- name: 'friction_analysis',
1379
- prompt: `Analyze this Claude Code usage data and identify friction points for this user. Use second person ("you").
1380
-
1381
- RESPOND WITH ONLY A VALID JSON OBJECT:
1382
- {
1383
- "intro": "1 sentence summarizing friction patterns",
1384
- "categories": [
1385
- {"category": "Concrete category name", "description": "1-2 sentences explaining this category and what could be done differently. Use 'you' not 'the user'.", "examples": ["Specific example with consequence", "Another example"]}
1386
- ]
1387
- }
1388
-
1389
- Include 3 friction categories with 2 examples each.`,
1390
- maxTokens: 8192,
1391
- },
1392
- {
1393
- name: 'suggestions',
1394
- prompt: `Analyze this Claude Code usage data and suggest improvements.
1395
-
1396
- ## CC FEATURES REFERENCE (pick from these for features_to_try):
1397
- 1. **MCP Servers**: Connect Claude to external tools, databases, and APIs via Model Context Protocol.
1398
- - How to use: Run \`claude mcp add <server-name> -- <command>\`
1399
- - Good for: database queries, Slack integration, GitHub issue lookup, connecting to internal APIs
1400
-
1401
- 2. **Custom Skills**: Reusable prompts you define as markdown files that run with a single /command.
1402
- - How to use: Create \`.claude/skills/commit/SKILL.md\` with instructions. Then type \`/commit\` to run it.
1403
- - Good for: repetitive workflows - /commit, /review, /test, /deploy, /pr, or complex multi-step workflows
1404
-
1405
- 3. **Hooks**: Shell commands that auto-run at specific lifecycle events.
1406
- - How to use: Add to \`.claude/settings.json\` under "hooks" key.
1407
- - Good for: auto-formatting code, running type checks, enforcing conventions
1408
-
1409
- 4. **Headless Mode**: Run Claude non-interactively from scripts and CI/CD.
1410
- - How to use: \`claude -p "fix lint errors" --allowedTools "Edit,Read,Bash"\`
1411
- - Good for: CI/CD integration, batch code fixes, automated reviews
1412
-
1413
- 5. **Task Agents**: Claude spawns focused sub-agents for complex exploration or parallel work.
1414
- - How to use: Claude auto-invokes when helpful, or ask "use an agent to explore X"
1415
- - Good for: codebase exploration, understanding complex systems
1416
-
1417
- RESPOND WITH ONLY A VALID JSON OBJECT:
1418
- {
1419
- "claude_md_additions": [
1420
- {"addition": "A specific line or block to add to CLAUDE.md based on workflow patterns. E.g., 'Always run tests after modifying auth-related files'", "why": "1 sentence explaining why this would help based on actual sessions", "prompt_scaffold": "Instructions for where to add this in CLAUDE.md. E.g., 'Add under ## Testing section'"}
1421
- ],
1422
- "features_to_try": [
1423
- {"feature": "Feature name from CC FEATURES REFERENCE above", "one_liner": "What it does", "why_for_you": "Why this would help YOU based on your sessions", "example_code": "Actual command or config to copy"}
1424
- ],
1425
- "usage_patterns": [
1426
- {"title": "Short title", "suggestion": "1-2 sentence summary", "detail": "3-4 sentences explaining how this applies to YOUR work", "copyable_prompt": "A specific prompt to copy and try"}
1427
- ]
1428
- }
1429
-
1430
- IMPORTANT for claude_md_additions: PRIORITIZE instructions that appear MULTIPLE TIMES in the user data. If user told Claude the same thing in 2+ sessions (e.g., 'always run tests', 'use TypeScript'), that's a PRIME candidate - they shouldn't have to repeat themselves.
1431
-
1432
- IMPORTANT for features_to_try: Pick 2-3 from the CC FEATURES REFERENCE above. Include 2-3 items for each category.`,
1433
- maxTokens: 8192,
1434
- },
1435
- {
1436
- name: 'on_the_horizon',
1437
- prompt: `Analyze this Claude Code usage data and identify future opportunities.
1438
-
1439
- RESPOND WITH ONLY A VALID JSON OBJECT:
1440
- {
1441
- "intro": "1 sentence about evolving AI-assisted development",
1442
- "opportunities": [
1443
- {"title": "Short title (4-8 words)", "whats_possible": "2-3 ambitious sentences about autonomous workflows", "how_to_try": "1-2 sentences mentioning relevant tooling", "copyable_prompt": "Detailed prompt to try"}
1444
- ]
1445
- }
1446
-
1447
- Include 3 opportunities. Think BIG - autonomous workflows, parallel agents, iterating against tests.`,
1448
- maxTokens: 8192,
1449
- },
1450
- ...(process.env.USER_TYPE === 'ant'
1451
- ? [
1452
- {
1453
- name: 'cc_team_improvements',
1454
- prompt: `Analyze this Claude Code usage data and suggest product improvements for the CC team.
1455
-
1456
- RESPOND WITH ONLY A VALID JSON OBJECT:
1457
- {
1458
- "improvements": [
1459
- {"title": "Product/tooling improvement", "detail": "3-4 sentences describing the improvement", "evidence": "3-4 sentences with specific session examples"}
1460
- ]
1461
- }
1462
-
1463
- Include 2-3 improvements based on friction patterns observed.`,
1464
- maxTokens: 8192,
1465
- },
1466
- {
1467
- name: 'model_behavior_improvements',
1468
- prompt: `Analyze this Claude Code usage data and suggest model behavior improvements.
1469
-
1470
- RESPOND WITH ONLY A VALID JSON OBJECT:
1471
- {
1472
- "improvements": [
1473
- {"title": "Model behavior change", "detail": "3-4 sentences describing what the model should do differently", "evidence": "3-4 sentences with specific examples"}
1474
- ]
1475
- }
1476
-
1477
- Include 2-3 improvements based on friction patterns observed.`,
1478
- maxTokens: 8192,
1479
- },
1480
- ]
1481
- : []),
1482
- {
1483
- name: 'fun_ending',
1484
- prompt: `Analyze this Claude Code usage data and find a memorable moment.
1485
-
1486
- RESPOND WITH ONLY A VALID JSON OBJECT:
1487
- {
1488
- "headline": "A memorable QUALITATIVE moment from the transcripts - not a statistic. Something human, funny, or surprising.",
1489
- "detail": "Brief context about when/where this happened"
1490
- }
1491
-
1492
- Find something genuinely interesting or amusing from the session summaries.`,
1493
- maxTokens: 8192,
1494
- },
1495
- ]
1496
-
1497
- type InsightResults = {
1498
- at_a_glance?: {
1499
- whats_working?: string
1500
- whats_hindering?: string
1501
- quick_wins?: string
1502
- ambitious_workflows?: string
1503
- }
1504
- project_areas?: {
1505
- areas?: Array<{ name: string; session_count: number; description: string }>
1506
- }
1507
- interaction_style?: {
1508
- narrative?: string
1509
- key_pattern?: string
1510
- }
1511
- what_works?: {
1512
- intro?: string
1513
- impressive_workflows?: Array<{ title: string; description: string }>
1514
- }
1515
- friction_analysis?: {
1516
- intro?: string
1517
- categories?: Array<{
1518
- category: string
1519
- description: string
1520
- examples?: string[]
1521
- }>
1522
- }
1523
- suggestions?: {
1524
- claude_md_additions?: Array<{
1525
- addition: string
1526
- why: string
1527
- where?: string
1528
- prompt_scaffold?: string
1529
- }>
1530
- features_to_try?: Array<{
1531
- feature: string
1532
- one_liner: string
1533
- why_for_you: string
1534
- example_code?: string
1535
- }>
1536
- usage_patterns?: Array<{
1537
- title: string
1538
- suggestion: string
1539
- detail?: string
1540
- copyable_prompt?: string
1541
- }>
1542
- }
1543
- on_the_horizon?: {
1544
- intro?: string
1545
- opportunities?: Array<{
1546
- title: string
1547
- whats_possible: string
1548
- how_to_try?: string
1549
- copyable_prompt?: string
1550
- }>
1551
- }
1552
- cc_team_improvements?: {
1553
- improvements?: Array<{
1554
- title: string
1555
- detail: string
1556
- evidence?: string
1557
- }>
1558
- }
1559
- model_behavior_improvements?: {
1560
- improvements?: Array<{
1561
- title: string
1562
- detail: string
1563
- evidence?: string
1564
- }>
1565
- }
1566
- fun_ending?: {
1567
- headline?: string
1568
- detail?: string
1569
- }
1570
- }
1571
-
1572
- async function generateSectionInsight(
1573
- section: InsightSection,
1574
- dataContext: string,
1575
- ): Promise<{ name: string; result: unknown }> {
1576
- try {
1577
- const result = await queryWithModel({
1578
- systemPrompt: asSystemPrompt([]),
1579
- userPrompt: section.prompt + '\n\nDATA:\n' + dataContext,
1580
- signal: new AbortController().signal,
1581
- options: {
1582
- model: getInsightsModel(),
1583
- querySource: 'insights',
1584
- agents: [],
1585
- isNonInteractiveSession: true,
1586
- hasAppendSystemPrompt: false,
1587
- mcpTools: [],
1588
- maxOutputTokensOverride: section.maxTokens,
1589
- },
1590
- })
1591
-
1592
- const text = extractTextContent(result.message.content)
1593
-
1594
- if (text) {
1595
- // Parse JSON from response
1596
- const jsonMatch = text.match(/\{[\s\S]*\}/)
1597
- if (jsonMatch) {
1598
- try {
1599
- return { name: section.name, result: jsonParse(jsonMatch[0]) }
1600
- } catch {
1601
- return { name: section.name, result: null }
1602
- }
1603
- }
1604
- }
1605
- return { name: section.name, result: null }
1606
- } catch (err) {
1607
- logError(new Error(`${section.name} failed: ${toError(err).message}`))
1608
- return { name: section.name, result: null }
1609
- }
1610
- }
1611
-
1612
- async function generateParallelInsights(
1613
- data: AggregatedData,
1614
- facets: Map<string, SessionFacets>,
1615
- ): Promise<InsightResults> {
1616
- // Build data context string
1617
- const facetSummaries = Array.from(facets.values())
1618
- .slice(0, 50)
1619
- .map(f => `- ${f.brief_summary} (${f.outcome}, ${f.claude_helpfulness})`)
1620
- .join('\n')
1621
-
1622
- const frictionDetails = Array.from(facets.values())
1623
- .filter(f => f.friction_detail)
1624
- .slice(0, 20)
1625
- .map(f => `- ${f.friction_detail}`)
1626
- .join('\n')
1627
-
1628
- const userInstructions = Array.from(facets.values())
1629
- .flatMap(f => f.user_instructions_to_claude || [])
1630
- .slice(0, 15)
1631
- .map(i => `- ${i}`)
1632
- .join('\n')
1633
-
1634
- const dataContext = jsonStringify(
1635
- {
1636
- sessions: data.total_sessions,
1637
- analyzed: data.sessions_with_facets,
1638
- date_range: data.date_range,
1639
- messages: data.total_messages,
1640
- hours: Math.round(data.total_duration_hours),
1641
- commits: data.git_commits,
1642
- top_tools: Object.entries(data.tool_counts)
1643
- .sort((a, b) => b[1] - a[1])
1644
- .slice(0, 8),
1645
- top_goals: Object.entries(data.goal_categories)
1646
- .sort((a, b) => b[1] - a[1])
1647
- .slice(0, 8),
1648
- outcomes: data.outcomes,
1649
- satisfaction: data.satisfaction,
1650
- friction: data.friction,
1651
- success: data.success,
1652
- languages: data.languages,
1653
- },
1654
- null,
1655
- 2,
1656
- )
1657
-
1658
- const fullContext =
1659
- dataContext +
1660
- '\n\nSESSION SUMMARIES:\n' +
1661
- facetSummaries +
1662
- '\n\nFRICTION DETAILS:\n' +
1663
- frictionDetails +
1664
- '\n\nUSER INSTRUCTIONS TO CLAUDE:\n' +
1665
- (userInstructions || 'None captured')
1666
-
1667
- // Run sections in parallel first (excluding at_a_glance)
1668
- const results = await Promise.all(
1669
- INSIGHT_SECTIONS.map(section =>
1670
- generateSectionInsight(section, fullContext),
1671
- ),
1672
- )
1673
-
1674
- // Combine results
1675
- const insights: InsightResults = {}
1676
- for (const { name, result } of results) {
1677
- if (result) {
1678
- ;(insights as Record<string, unknown>)[name] = result
1679
- }
1680
- }
1681
-
1682
- // Build rich context from generated sections for At a Glance
1683
- const projectAreasText =
1684
- (
1685
- insights.project_areas as {
1686
- areas?: Array<{ name: string; description: string }>
1687
- }
1688
- )?.areas
1689
- ?.map(a => `- ${a.name}: ${a.description}`)
1690
- .join('\n') || ''
1691
-
1692
- const bigWinsText =
1693
- (
1694
- insights.what_works as {
1695
- impressive_workflows?: Array<{ title: string; description: string }>
1696
- }
1697
- )?.impressive_workflows
1698
- ?.map(w => `- ${w.title}: ${w.description}`)
1699
- .join('\n') || ''
1700
-
1701
- const frictionText =
1702
- (
1703
- insights.friction_analysis as {
1704
- categories?: Array<{ category: string; description: string }>
1705
- }
1706
- )?.categories
1707
- ?.map(c => `- ${c.category}: ${c.description}`)
1708
- .join('\n') || ''
1709
-
1710
- const featuresText =
1711
- (
1712
- insights.suggestions as {
1713
- features_to_try?: Array<{ feature: string; one_liner: string }>
1714
- }
1715
- )?.features_to_try
1716
- ?.map(f => `- ${f.feature}: ${f.one_liner}`)
1717
- .join('\n') || ''
1718
-
1719
- const patternsText =
1720
- (
1721
- insights.suggestions as {
1722
- usage_patterns?: Array<{ title: string; suggestion: string }>
1723
- }
1724
- )?.usage_patterns
1725
- ?.map(p => `- ${p.title}: ${p.suggestion}`)
1726
- .join('\n') || ''
1727
-
1728
- const horizonText =
1729
- (
1730
- insights.on_the_horizon as {
1731
- opportunities?: Array<{ title: string; whats_possible: string }>
1732
- }
1733
- )?.opportunities
1734
- ?.map(o => `- ${o.title}: ${o.whats_possible}`)
1735
- .join('\n') || ''
1736
-
1737
- // Now generate "At a Glance" with access to other sections' outputs
1738
- const atAGlancePrompt = `You're writing an "At a Glance" summary for a Claude Code usage insights report for Claude Code users. The goal is to help them understand their usage and improve how they can use Claude better, especially as models improve.
1739
-
1740
- Use this 4-part structure:
1741
-
1742
- 1. **What's working** - What is the user's unique style of interacting with Claude and what are some impactful things they've done? You can include one or two details, but keep it high level since things might not be fresh in the user's memory. Don't be fluffy or overly complimentary. Also, don't focus on the tool calls they use.
1743
-
1744
- 2. **What's hindering you** - Split into (a) Claude's fault (misunderstandings, wrong approaches, bugs) and (b) user-side friction (not providing enough context, environment issues -- ideally more general than just one project). Be honest but constructive.
1745
-
1746
- 3. **Quick wins to try** - Specific Claude Code features they could try from the examples below, or a workflow technique if you think it's really compelling. (Avoid stuff like "Ask Claude to confirm before taking actions" or "Type out more context up front" which are less compelling.)
1747
-
1748
- 4. **Ambitious workflows for better models** - As we move to much more capable models over the next 3-6 months, what should they prepare for? What workflows that seem impossible now will become possible? Draw from the appropriate section below.
1749
-
1750
- Keep each section to 2-3 not-too-long sentences. Don't overwhelm the user. Don't mention specific numerical stats or underlined_categories from the session data below. Use a coaching tone.
1751
-
1752
- RESPOND WITH ONLY A VALID JSON OBJECT:
1753
- {
1754
- "whats_working": "(refer to instructions above)",
1755
- "whats_hindering": "(refer to instructions above)",
1756
- "quick_wins": "(refer to instructions above)",
1757
- "ambitious_workflows": "(refer to instructions above)"
1758
- }
1759
-
1760
- SESSION DATA:
1761
- ${fullContext}
1762
-
1763
- ## Project Areas (what user works on)
1764
- ${projectAreasText}
1765
-
1766
- ## Big Wins (impressive accomplishments)
1767
- ${bigWinsText}
1768
-
1769
- ## Friction Categories (where things go wrong)
1770
- ${frictionText}
1771
-
1772
- ## Features to Try
1773
- ${featuresText}
1774
-
1775
- ## Usage Patterns to Adopt
1776
- ${patternsText}
1777
-
1778
- ## On the Horizon (ambitious workflows for better models)
1779
- ${horizonText}`
1780
-
1781
- const atAGlanceSection: InsightSection = {
1782
- name: 'at_a_glance',
1783
- prompt: atAGlancePrompt,
1784
- maxTokens: 8192,
1785
- }
1786
-
1787
- const atAGlanceResult = await generateSectionInsight(atAGlanceSection, '')
1788
- if (atAGlanceResult.result) {
1789
- insights.at_a_glance = atAGlanceResult.result as {
1790
- whats_working?: string
1791
- whats_hindering?: string
1792
- quick_wins?: string
1793
- ambitious_workflows?: string
1794
- }
1795
- }
1796
-
1797
- return insights
1798
- }
1799
-
1800
- // Escape HTML but render **bold** as <strong>
1801
- function escapeHtmlWithBold(text: string): string {
1802
- const escaped = escapeHtml(text)
1803
- return escaped.replace(/\*\*(.+?)\*\*/g, '<strong>$1</strong>')
1804
- }
1805
-
1806
- // Fixed orderings for specific charts (matching Python reference)
1807
- const SATISFACTION_ORDER = [
1808
- 'frustrated',
1809
- 'dissatisfied',
1810
- 'likely_satisfied',
1811
- 'satisfied',
1812
- 'happy',
1813
- 'unsure',
1814
- ]
1815
-
1816
- const OUTCOME_ORDER = [
1817
- 'not_achieved',
1818
- 'partially_achieved',
1819
- 'mostly_achieved',
1820
- 'fully_achieved',
1821
- 'unclear_from_transcript',
1822
- ]
1823
-
1824
- function generateBarChart(
1825
- data: Record<string, number>,
1826
- color: string,
1827
- maxItems = 6,
1828
- fixedOrder?: string[],
1829
- ): string {
1830
- let entries: [string, number][]
1831
-
1832
- if (fixedOrder) {
1833
- // Use fixed order, only including items that exist in data
1834
- entries = fixedOrder
1835
- .filter(key => key in data && (data[key] ?? 0) > 0)
1836
- .map(key => [key, data[key] ?? 0] as [string, number])
1837
- } else {
1838
- // Sort by count descending
1839
- entries = Object.entries(data)
1840
- .sort((a, b) => b[1] - a[1])
1841
- .slice(0, maxItems)
1842
- }
1843
-
1844
- if (entries.length === 0) return '<p class="empty">No data</p>'
1845
-
1846
- const maxVal = Math.max(...entries.map(e => e[1]))
1847
- return entries
1848
- .map(([label, count]) => {
1849
- const pct = (count / maxVal) * 100
1850
- // Use LABEL_MAP if available, otherwise clean up underscores and title case
1851
- const cleanLabel =
1852
- LABEL_MAP[label] ||
1853
- label.replace(/_/g, ' ').replace(/\b\w/g, c => c.toUpperCase())
1854
- return `<div class="bar-row">
1855
- <div class="bar-label">${escapeHtml(cleanLabel)}</div>
1856
- <div class="bar-track"><div class="bar-fill" style="width:${pct}%;background:${color}"></div></div>
1857
- <div class="bar-value">${count}</div>
1858
- </div>`
1859
- })
1860
- .join('\n')
1861
- }
1862
-
1863
- function generateResponseTimeHistogram(times: number[]): string {
1864
- if (times.length === 0) return '<p class="empty">No response time data</p>'
1865
-
1866
- // Create buckets (matching Python reference)
1867
- const buckets: Record<string, number> = {
1868
- '2-10s': 0,
1869
- '10-30s': 0,
1870
- '30s-1m': 0,
1871
- '1-2m': 0,
1872
- '2-5m': 0,
1873
- '5-15m': 0,
1874
- '>15m': 0,
1875
- }
1876
-
1877
- for (const t of times) {
1878
- if (t < 10) buckets['2-10s'] = (buckets['2-10s'] ?? 0) + 1
1879
- else if (t < 30) buckets['10-30s'] = (buckets['10-30s'] ?? 0) + 1
1880
- else if (t < 60) buckets['30s-1m'] = (buckets['30s-1m'] ?? 0) + 1
1881
- else if (t < 120) buckets['1-2m'] = (buckets['1-2m'] ?? 0) + 1
1882
- else if (t < 300) buckets['2-5m'] = (buckets['2-5m'] ?? 0) + 1
1883
- else if (t < 900) buckets['5-15m'] = (buckets['5-15m'] ?? 0) + 1
1884
- else buckets['>15m'] = (buckets['>15m'] ?? 0) + 1
1885
- }
1886
-
1887
- const maxVal = Math.max(...Object.values(buckets))
1888
- if (maxVal === 0) return '<p class="empty">No response time data</p>'
1889
-
1890
- return Object.entries(buckets)
1891
- .map(([label, count]) => {
1892
- const pct = (count / maxVal) * 100
1893
- return `<div class="bar-row">
1894
- <div class="bar-label">${label}</div>
1895
- <div class="bar-track"><div class="bar-fill" style="width:${pct}%;background:#6366f1"></div></div>
1896
- <div class="bar-value">${count}</div>
1897
- </div>`
1898
- })
1899
- .join('\n')
1900
- }
1901
-
1902
- function generateTimeOfDayChart(messageHours: number[]): string {
1903
- if (messageHours.length === 0) return '<p class="empty">No time data</p>'
1904
-
1905
- // Group into time periods
1906
- const periods = [
1907
- { label: 'Morning (6-12)', range: [6, 7, 8, 9, 10, 11] },
1908
- { label: 'Afternoon (12-18)', range: [12, 13, 14, 15, 16, 17] },
1909
- { label: 'Evening (18-24)', range: [18, 19, 20, 21, 22, 23] },
1910
- { label: 'Night (0-6)', range: [0, 1, 2, 3, 4, 5] },
1911
- ]
1912
-
1913
- const hourCounts: Record<number, number> = {}
1914
- for (const h of messageHours) {
1915
- hourCounts[h] = (hourCounts[h] || 0) + 1
1916
- }
1917
-
1918
- const periodCounts = periods.map(p => ({
1919
- label: p.label,
1920
- count: p.range.reduce((sum, h) => sum + (hourCounts[h] || 0), 0),
1921
- }))
1922
-
1923
- const maxVal = Math.max(...periodCounts.map(p => p.count)) || 1
1924
-
1925
- const barsHtml = periodCounts
1926
- .map(
1927
- p => `
1928
- <div class="bar-row">
1929
- <div class="bar-label">${p.label}</div>
1930
- <div class="bar-track"><div class="bar-fill" style="width:${(p.count / maxVal) * 100}%;background:#8b5cf6"></div></div>
1931
- <div class="bar-value">${p.count}</div>
1932
- </div>`,
1933
- )
1934
- .join('\n')
1935
-
1936
- return `<div id="hour-histogram">${barsHtml}</div>`
1937
- }
1938
-
1939
- function getHourCountsJson(messageHours: number[]): string {
1940
- const hourCounts: Record<number, number> = {}
1941
- for (const h of messageHours) {
1942
- hourCounts[h] = (hourCounts[h] || 0) + 1
1943
- }
1944
- return jsonStringify(hourCounts)
1945
- }
1946
-
1947
- function generateHtmlReport(
1948
- data: AggregatedData,
1949
- insights: InsightResults,
1950
- ): string {
1951
- const markdownToHtml = (md: string): string => {
1952
- if (!md) return ''
1953
- return md
1954
- .split('\n\n')
1955
- .map(p => {
1956
- let html = escapeHtml(p)
1957
- html = html.replace(/\*\*(.+?)\*\*/g, '<strong>$1</strong>')
1958
- html = html.replace(/^- /gm, '• ')
1959
- html = html.replace(/\n/g, '<br>')
1960
- return `<p>${html}</p>`
1961
- })
1962
- .join('\n')
1963
- }
1964
-
1965
- // Build At a Glance section (new 4-part format with links to sections)
1966
- const atAGlance = insights.at_a_glance
1967
- const atAGlanceHtml = atAGlance
1968
- ? `
1969
- <div class="at-a-glance">
1970
- <div class="glance-title">At a Glance</div>
1971
- <div class="glance-sections">
1972
- ${atAGlance.whats_working ? `<div class="glance-section"><strong>What's working:</strong> ${escapeHtmlWithBold(atAGlance.whats_working)} <a href="#section-wins" class="see-more">Impressive Things You Did →</a></div>` : ''}
1973
- ${atAGlance.whats_hindering ? `<div class="glance-section"><strong>What's hindering you:</strong> ${escapeHtmlWithBold(atAGlance.whats_hindering)} <a href="#section-friction" class="see-more">Where Things Go Wrong →</a></div>` : ''}
1974
- ${atAGlance.quick_wins ? `<div class="glance-section"><strong>Quick wins to try:</strong> ${escapeHtmlWithBold(atAGlance.quick_wins)} <a href="#section-features" class="see-more">Features to Try →</a></div>` : ''}
1975
- ${atAGlance.ambitious_workflows ? `<div class="glance-section"><strong>Ambitious workflows:</strong> ${escapeHtmlWithBold(atAGlance.ambitious_workflows)} <a href="#section-horizon" class="see-more">On the Horizon →</a></div>` : ''}
1976
- </div>
1977
- </div>
1978
- `
1979
- : ''
1980
-
1981
- // Build project areas section
1982
- const projectAreas = insights.project_areas?.areas || []
1983
- const projectAreasHtml =
1984
- projectAreas.length > 0
1985
- ? `
1986
- <h2 id="section-work">What You Work On</h2>
1987
- <div class="project-areas">
1988
- ${projectAreas
1989
- .map(
1990
- area => `
1991
- <div class="project-area">
1992
- <div class="area-header">
1993
- <span class="area-name">${escapeHtml(area.name)}</span>
1994
- <span class="area-count">~${area.session_count} sessions</span>
1995
- </div>
1996
- <div class="area-desc">${escapeHtml(area.description)}</div>
1997
- </div>
1998
- `,
1999
- )
2000
- .join('')}
2001
- </div>
2002
- `
2003
- : ''
2004
-
2005
- // Build interaction style section
2006
- const interactionStyle = insights.interaction_style
2007
- const interactionHtml = interactionStyle?.narrative
2008
- ? `
2009
- <h2 id="section-usage">How You Use Claude Code</h2>
2010
- <div class="narrative">
2011
- ${markdownToHtml(interactionStyle.narrative)}
2012
- ${interactionStyle.key_pattern ? `<div class="key-insight"><strong>Key pattern:</strong> ${escapeHtml(interactionStyle.key_pattern)}</div>` : ''}
2013
- </div>
2014
- `
2015
- : ''
2016
-
2017
- // Build what works section
2018
- const whatWorks = insights.what_works
2019
- const whatWorksHtml =
2020
- whatWorks?.impressive_workflows && whatWorks.impressive_workflows.length > 0
2021
- ? `
2022
- <h2 id="section-wins">Impressive Things You Did</h2>
2023
- ${whatWorks.intro ? `<p class="section-intro">${escapeHtml(whatWorks.intro)}</p>` : ''}
2024
- <div class="big-wins">
2025
- ${whatWorks.impressive_workflows
2026
- .map(
2027
- wf => `
2028
- <div class="big-win">
2029
- <div class="big-win-title">${escapeHtml(wf.title || '')}</div>
2030
- <div class="big-win-desc">${escapeHtml(wf.description || '')}</div>
2031
- </div>
2032
- `,
2033
- )
2034
- .join('')}
2035
- </div>
2036
- `
2037
- : ''
2038
-
2039
- // Build friction section
2040
- const frictionAnalysis = insights.friction_analysis
2041
- const frictionHtml =
2042
- frictionAnalysis?.categories && frictionAnalysis.categories.length > 0
2043
- ? `
2044
- <h2 id="section-friction">Where Things Go Wrong</h2>
2045
- ${frictionAnalysis.intro ? `<p class="section-intro">${escapeHtml(frictionAnalysis.intro)}</p>` : ''}
2046
- <div class="friction-categories">
2047
- ${frictionAnalysis.categories
2048
- .map(
2049
- cat => `
2050
- <div class="friction-category">
2051
- <div class="friction-title">${escapeHtml(cat.category || '')}</div>
2052
- <div class="friction-desc">${escapeHtml(cat.description || '')}</div>
2053
- ${cat.examples ? `<ul class="friction-examples">${cat.examples.map(ex => `<li>${escapeHtml(ex)}</li>`).join('')}</ul>` : ''}
2054
- </div>
2055
- `,
2056
- )
2057
- .join('')}
2058
- </div>
2059
- `
2060
- : ''
2061
-
2062
- // Build suggestions section
2063
- const suggestions = insights.suggestions
2064
- const suggestionsHtml = suggestions
2065
- ? `
2066
- ${
2067
- suggestions.claude_md_additions &&
2068
- suggestions.claude_md_additions.length > 0
2069
- ? `
2070
- <h2 id="section-features">Existing CC Features to Try</h2>
2071
- <div class="claude-md-section">
2072
- <h3>Suggested CLAUDE.md Additions</h3>
2073
- <p style="font-size: 12px; color: #64748b; margin-bottom: 12px;">Just copy this into Claude Code to add it to your CLAUDE.md.</p>
2074
- <div class="claude-md-actions">
2075
- <button class="copy-all-btn" onclick="copyAllCheckedClaudeMd()">Copy All Checked</button>
2076
- </div>
2077
- ${suggestions.claude_md_additions
2078
- .map(
2079
- (add, i) => `
2080
- <div class="claude-md-item">
2081
- <input type="checkbox" id="cmd-${i}" class="cmd-checkbox" checked data-text="${escapeHtml(add.prompt_scaffold || add.where || 'Add to CLAUDE.md')}\\n\\n${escapeHtml(add.addition)}">
2082
- <label for="cmd-${i}">
2083
- <code class="cmd-code">${escapeHtml(add.addition)}</code>
2084
- <button class="copy-btn" onclick="copyCmdItem(${i})">Copy</button>
2085
- </label>
2086
- <div class="cmd-why">${escapeHtml(add.why)}</div>
2087
- </div>
2088
- `,
2089
- )
2090
- .join('')}
2091
- </div>
2092
- `
2093
- : ''
2094
- }
2095
- ${
2096
- suggestions.features_to_try && suggestions.features_to_try.length > 0
2097
- ? `
2098
- <p style="font-size: 13px; color: #64748b; margin-bottom: 12px;">Just copy this into Claude Code and it'll set it up for you.</p>
2099
- <div class="features-section">
2100
- ${suggestions.features_to_try
2101
- .map(
2102
- feat => `
2103
- <div class="feature-card">
2104
- <div class="feature-title">${escapeHtml(feat.feature || '')}</div>
2105
- <div class="feature-oneliner">${escapeHtml(feat.one_liner || '')}</div>
2106
- <div class="feature-why"><strong>Why for you:</strong> ${escapeHtml(feat.why_for_you || '')}</div>
2107
- ${
2108
- feat.example_code
2109
- ? `
2110
- <div class="feature-examples">
2111
- <div class="feature-example">
2112
- <div class="example-code-row">
2113
- <code class="example-code">${escapeHtml(feat.example_code)}</code>
2114
- <button class="copy-btn" onclick="copyText(this)">Copy</button>
2115
- </div>
2116
- </div>
2117
- </div>
2118
- `
2119
- : ''
2120
- }
2121
- </div>
2122
- `,
2123
- )
2124
- .join('')}
2125
- </div>
2126
- `
2127
- : ''
2128
- }
2129
- ${
2130
- suggestions.usage_patterns && suggestions.usage_patterns.length > 0
2131
- ? `
2132
- <h2 id="section-patterns">New Ways to Use Claude Code</h2>
2133
- <p style="font-size: 13px; color: #64748b; margin-bottom: 12px;">Just copy this into Claude Code and it'll walk you through it.</p>
2134
- <div class="patterns-section">
2135
- ${suggestions.usage_patterns
2136
- .map(
2137
- pat => `
2138
- <div class="pattern-card">
2139
- <div class="pattern-title">${escapeHtml(pat.title || '')}</div>
2140
- <div class="pattern-summary">${escapeHtml(pat.suggestion || '')}</div>
2141
- ${pat.detail ? `<div class="pattern-detail">${escapeHtml(pat.detail)}</div>` : ''}
2142
- ${
2143
- pat.copyable_prompt
2144
- ? `
2145
- <div class="copyable-prompt-section">
2146
- <div class="prompt-label">Paste into Claude Code:</div>
2147
- <div class="copyable-prompt-row">
2148
- <code class="copyable-prompt">${escapeHtml(pat.copyable_prompt)}</code>
2149
- <button class="copy-btn" onclick="copyText(this)">Copy</button>
2150
- </div>
2151
- </div>
2152
- `
2153
- : ''
2154
- }
2155
- </div>
2156
- `,
2157
- )
2158
- .join('')}
2159
- </div>
2160
- `
2161
- : ''
2162
- }
2163
- `
2164
- : ''
2165
-
2166
- // Build On the Horizon section
2167
- const horizonData = insights.on_the_horizon
2168
- const horizonHtml =
2169
- horizonData?.opportunities && horizonData.opportunities.length > 0
2170
- ? `
2171
- <h2 id="section-horizon">On the Horizon</h2>
2172
- ${horizonData.intro ? `<p class="section-intro">${escapeHtml(horizonData.intro)}</p>` : ''}
2173
- <div class="horizon-section">
2174
- ${horizonData.opportunities
2175
- .map(
2176
- opp => `
2177
- <div class="horizon-card">
2178
- <div class="horizon-title">${escapeHtml(opp.title || '')}</div>
2179
- <div class="horizon-possible">${escapeHtml(opp.whats_possible || '')}</div>
2180
- ${opp.how_to_try ? `<div class="horizon-tip"><strong>Getting started:</strong> ${escapeHtml(opp.how_to_try)}</div>` : ''}
2181
- ${opp.copyable_prompt ? `<div class="pattern-prompt"><div class="prompt-label">Paste into Claude Code:</div><code>${escapeHtml(opp.copyable_prompt)}</code><button class="copy-btn" onclick="copyText(this)">Copy</button></div>` : ''}
2182
- </div>
2183
- `,
2184
- )
2185
- .join('')}
2186
- </div>
2187
- `
2188
- : ''
2189
-
2190
- // Build Team Feedback section (collapsible, ant-only)
2191
- const ccImprovements =
2192
- process.env.USER_TYPE === 'ant'
2193
- ? insights.cc_team_improvements?.improvements || []
2194
- : []
2195
- const modelImprovements =
2196
- process.env.USER_TYPE === 'ant'
2197
- ? insights.model_behavior_improvements?.improvements || []
2198
- : []
2199
- const teamFeedbackHtml =
2200
- ccImprovements.length > 0 || modelImprovements.length > 0
2201
- ? `
2202
- <h2 id="section-feedback" class="feedback-header">Closing the Loop: Feedback for Other Teams</h2>
2203
- <p class="feedback-intro">Suggestions for the CC product and model teams based on your usage patterns. Click to expand.</p>
2204
- ${
2205
- ccImprovements.length > 0
2206
- ? `
2207
- <div class="collapsible-section">
2208
- <div class="collapsible-header" onclick="toggleCollapsible(this)">
2209
- <span class="collapsible-arrow">▶</span>
2210
- <h3>Product Improvements for CC Team</h3>
2211
- </div>
2212
- <div class="collapsible-content">
2213
- <div class="suggestions-section">
2214
- ${ccImprovements
2215
- .map(
2216
- imp => `
2217
- <div class="feedback-card team-card">
2218
- <div class="feedback-title">${escapeHtml(imp.title || '')}</div>
2219
- <div class="feedback-detail">${escapeHtml(imp.detail || '')}</div>
2220
- ${imp.evidence ? `<div class="feedback-evidence"><em>Evidence:</em> ${escapeHtml(imp.evidence)}</div>` : ''}
2221
- </div>
2222
- `,
2223
- )
2224
- .join('')}
2225
- </div>
2226
- </div>
2227
- </div>
2228
- `
2229
- : ''
2230
- }
2231
- ${
2232
- modelImprovements.length > 0
2233
- ? `
2234
- <div class="collapsible-section">
2235
- <div class="collapsible-header" onclick="toggleCollapsible(this)">
2236
- <span class="collapsible-arrow">▶</span>
2237
- <h3>Model Behavior Improvements</h3>
2238
- </div>
2239
- <div class="collapsible-content">
2240
- <div class="suggestions-section">
2241
- ${modelImprovements
2242
- .map(
2243
- imp => `
2244
- <div class="feedback-card model-card">
2245
- <div class="feedback-title">${escapeHtml(imp.title || '')}</div>
2246
- <div class="feedback-detail">${escapeHtml(imp.detail || '')}</div>
2247
- ${imp.evidence ? `<div class="feedback-evidence"><em>Evidence:</em> ${escapeHtml(imp.evidence)}</div>` : ''}
2248
- </div>
2249
- `,
2250
- )
2251
- .join('')}
2252
- </div>
2253
- </div>
2254
- </div>
2255
- `
2256
- : ''
2257
- }
2258
- `
2259
- : ''
2260
-
2261
- // Build Fun Ending section
2262
- const funEnding = insights.fun_ending
2263
- const funEndingHtml = funEnding?.headline
2264
- ? `
2265
- <div class="fun-ending">
2266
- <div class="fun-headline">"${escapeHtml(funEnding.headline)}"</div>
2267
- ${funEnding.detail ? `<div class="fun-detail">${escapeHtml(funEnding.detail)}</div>` : ''}
2268
- </div>
2269
- `
2270
- : ''
2271
-
2272
- const css = `
2273
- * { box-sizing: border-box; margin: 0; padding: 0; }
2274
- body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; background: #f8fafc; color: #334155; line-height: 1.65; padding: 48px 24px; }
2275
- .container { max-width: 800px; margin: 0 auto; }
2276
- h1 { font-size: 32px; font-weight: 700; color: #0f172a; margin-bottom: 8px; }
2277
- h2 { font-size: 20px; font-weight: 600; color: #0f172a; margin-top: 48px; margin-bottom: 16px; }
2278
- .subtitle { color: #64748b; font-size: 15px; margin-bottom: 32px; }
2279
- .nav-toc { display: flex; flex-wrap: wrap; gap: 8px; margin: 24px 0 32px 0; padding: 16px; background: white; border-radius: 8px; border: 1px solid #e2e8f0; }
2280
- .nav-toc a { font-size: 12px; color: #64748b; text-decoration: none; padding: 6px 12px; border-radius: 6px; background: #f1f5f9; transition: all 0.15s; }
2281
- .nav-toc a:hover { background: #e2e8f0; color: #334155; }
2282
- .stats-row { display: flex; gap: 24px; margin-bottom: 40px; padding: 20px 0; border-top: 1px solid #e2e8f0; border-bottom: 1px solid #e2e8f0; flex-wrap: wrap; }
2283
- .stat { text-align: center; }
2284
- .stat-value { font-size: 24px; font-weight: 700; color: #0f172a; }
2285
- .stat-label { font-size: 11px; color: #64748b; text-transform: uppercase; }
2286
- .at-a-glance { background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); border: 1px solid #f59e0b; border-radius: 12px; padding: 20px 24px; margin-bottom: 32px; }
2287
- .glance-title { font-size: 16px; font-weight: 700; color: #92400e; margin-bottom: 16px; }
2288
- .glance-sections { display: flex; flex-direction: column; gap: 12px; }
2289
- .glance-section { font-size: 14px; color: #78350f; line-height: 1.6; }
2290
- .glance-section strong { color: #92400e; }
2291
- .see-more { color: #b45309; text-decoration: none; font-size: 13px; white-space: nowrap; }
2292
- .see-more:hover { text-decoration: underline; }
2293
- .project-areas { display: flex; flex-direction: column; gap: 12px; margin-bottom: 32px; }
2294
- .project-area { background: white; border: 1px solid #e2e8f0; border-radius: 8px; padding: 16px; }
2295
- .area-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
2296
- .area-name { font-weight: 600; font-size: 15px; color: #0f172a; }
2297
- .area-count { font-size: 12px; color: #64748b; background: #f1f5f9; padding: 2px 8px; border-radius: 4px; }
2298
- .area-desc { font-size: 14px; color: #475569; line-height: 1.5; }
2299
- .narrative { background: white; border: 1px solid #e2e8f0; border-radius: 8px; padding: 20px; margin-bottom: 24px; }
2300
- .narrative p { margin-bottom: 12px; font-size: 14px; color: #475569; line-height: 1.7; }
2301
- .key-insight { background: #f0fdf4; border: 1px solid #bbf7d0; border-radius: 8px; padding: 12px 16px; margin-top: 12px; font-size: 14px; color: #166534; }
2302
- .section-intro { font-size: 14px; color: #64748b; margin-bottom: 16px; }
2303
- .big-wins { display: flex; flex-direction: column; gap: 12px; margin-bottom: 24px; }
2304
- .big-win { background: #f0fdf4; border: 1px solid #bbf7d0; border-radius: 8px; padding: 16px; }
2305
- .big-win-title { font-weight: 600; font-size: 15px; color: #166534; margin-bottom: 8px; }
2306
- .big-win-desc { font-size: 14px; color: #15803d; line-height: 1.5; }
2307
- .friction-categories { display: flex; flex-direction: column; gap: 16px; margin-bottom: 24px; }
2308
- .friction-category { background: #fef2f2; border: 1px solid #fca5a5; border-radius: 8px; padding: 16px; }
2309
- .friction-title { font-weight: 600; font-size: 15px; color: #991b1b; margin-bottom: 6px; }
2310
- .friction-desc { font-size: 13px; color: #7f1d1d; margin-bottom: 10px; }
2311
- .friction-examples { margin: 0 0 0 20px; font-size: 13px; color: #334155; }
2312
- .friction-examples li { margin-bottom: 4px; }
2313
- .claude-md-section { background: #eff6ff; border: 1px solid #bfdbfe; border-radius: 8px; padding: 16px; margin-bottom: 20px; }
2314
- .claude-md-section h3 { font-size: 14px; font-weight: 600; color: #1e40af; margin: 0 0 12px 0; }
2315
- .claude-md-actions { margin-bottom: 12px; padding-bottom: 12px; border-bottom: 1px solid #dbeafe; }
2316
- .copy-all-btn { background: #2563eb; color: white; border: none; border-radius: 4px; padding: 6px 12px; font-size: 12px; cursor: pointer; font-weight: 500; transition: all 0.2s; }
2317
- .copy-all-btn:hover { background: #1d4ed8; }
2318
- .copy-all-btn.copied { background: #16a34a; }
2319
- .claude-md-item { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 8px; padding: 10px 0; border-bottom: 1px solid #dbeafe; }
2320
- .claude-md-item:last-child { border-bottom: none; }
2321
- .cmd-checkbox { margin-top: 2px; }
2322
- .cmd-code { background: white; padding: 8px 12px; border-radius: 4px; font-size: 12px; color: #1e40af; border: 1px solid #bfdbfe; font-family: monospace; display: block; white-space: pre-wrap; word-break: break-word; flex: 1; }
2323
- .cmd-why { font-size: 12px; color: #64748b; width: 100%; padding-left: 24px; margin-top: 4px; }
2324
- .features-section, .patterns-section { display: flex; flex-direction: column; gap: 12px; margin: 16px 0; }
2325
- .feature-card { background: #f0fdf4; border: 1px solid #86efac; border-radius: 8px; padding: 16px; }
2326
- .pattern-card { background: #f0f9ff; border: 1px solid #7dd3fc; border-radius: 8px; padding: 16px; }
2327
- .feature-title, .pattern-title { font-weight: 600; font-size: 15px; color: #0f172a; margin-bottom: 6px; }
2328
- .feature-oneliner { font-size: 14px; color: #475569; margin-bottom: 8px; }
2329
- .pattern-summary { font-size: 14px; color: #475569; margin-bottom: 8px; }
2330
- .feature-why, .pattern-detail { font-size: 13px; color: #334155; line-height: 1.5; }
2331
- .feature-examples { margin-top: 12px; }
2332
- .feature-example { padding: 8px 0; border-top: 1px solid #d1fae5; }
2333
- .feature-example:first-child { border-top: none; }
2334
- .example-desc { font-size: 13px; color: #334155; margin-bottom: 6px; }
2335
- .example-code-row { display: flex; align-items: flex-start; gap: 8px; }
2336
- .example-code { flex: 1; background: #f1f5f9; padding: 8px 12px; border-radius: 4px; font-family: monospace; font-size: 12px; color: #334155; overflow-x: auto; white-space: pre-wrap; }
2337
- .copyable-prompt-section { margin-top: 12px; padding-top: 12px; border-top: 1px solid #e2e8f0; }
2338
- .copyable-prompt-row { display: flex; align-items: flex-start; gap: 8px; }
2339
- .copyable-prompt { flex: 1; background: #f8fafc; padding: 10px 12px; border-radius: 4px; font-family: monospace; font-size: 12px; color: #334155; border: 1px solid #e2e8f0; white-space: pre-wrap; line-height: 1.5; }
2340
- .feature-code { background: #f8fafc; padding: 12px; border-radius: 6px; margin-top: 12px; border: 1px solid #e2e8f0; display: flex; align-items: flex-start; gap: 8px; }
2341
- .feature-code code { flex: 1; font-family: monospace; font-size: 12px; color: #334155; white-space: pre-wrap; }
2342
- .pattern-prompt { background: #f8fafc; padding: 12px; border-radius: 6px; margin-top: 12px; border: 1px solid #e2e8f0; }
2343
- .pattern-prompt code { font-family: monospace; font-size: 12px; color: #334155; display: block; white-space: pre-wrap; margin-bottom: 8px; }
2344
- .prompt-label { font-size: 11px; font-weight: 600; text-transform: uppercase; color: #64748b; margin-bottom: 6px; }
2345
- .copy-btn { background: #e2e8f0; border: none; border-radius: 4px; padding: 4px 8px; font-size: 11px; cursor: pointer; color: #475569; flex-shrink: 0; }
2346
- .copy-btn:hover { background: #cbd5e1; }
2347
- .charts-row { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; margin: 24px 0; }
2348
- .chart-card { background: white; border: 1px solid #e2e8f0; border-radius: 8px; padding: 16px; }
2349
- .chart-title { font-size: 12px; font-weight: 600; color: #64748b; text-transform: uppercase; margin-bottom: 12px; }
2350
- .bar-row { display: flex; align-items: center; margin-bottom: 6px; }
2351
- .bar-label { width: 100px; font-size: 11px; color: #475569; flex-shrink: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2352
- .bar-track { flex: 1; height: 6px; background: #f1f5f9; border-radius: 3px; margin: 0 8px; }
2353
- .bar-fill { height: 100%; border-radius: 3px; }
2354
- .bar-value { width: 28px; font-size: 11px; font-weight: 500; color: #64748b; text-align: right; }
2355
- .empty { color: #94a3b8; font-size: 13px; }
2356
- .horizon-section { display: flex; flex-direction: column; gap: 16px; }
2357
- .horizon-card { background: linear-gradient(135deg, #faf5ff 0%, #f5f3ff 100%); border: 1px solid #c4b5fd; border-radius: 8px; padding: 16px; }
2358
- .horizon-title { font-weight: 600; font-size: 15px; color: #5b21b6; margin-bottom: 8px; }
2359
- .horizon-possible { font-size: 14px; color: #334155; margin-bottom: 10px; line-height: 1.5; }
2360
- .horizon-tip { font-size: 13px; color: #6b21a8; background: rgba(255,255,255,0.6); padding: 8px 12px; border-radius: 4px; }
2361
- .feedback-header { margin-top: 48px; color: #64748b; font-size: 16px; }
2362
- .feedback-intro { font-size: 13px; color: #94a3b8; margin-bottom: 16px; }
2363
- .feedback-section { margin-top: 16px; }
2364
- .feedback-section h3 { font-size: 14px; font-weight: 600; color: #475569; margin-bottom: 12px; }
2365
- .feedback-card { background: white; border: 1px solid #e2e8f0; border-radius: 8px; padding: 16px; margin-bottom: 12px; }
2366
- .feedback-card.team-card { background: #eff6ff; border-color: #bfdbfe; }
2367
- .feedback-card.model-card { background: #faf5ff; border-color: #e9d5ff; }
2368
- .feedback-title { font-weight: 600; font-size: 14px; color: #0f172a; margin-bottom: 6px; }
2369
- .feedback-detail { font-size: 13px; color: #475569; line-height: 1.5; }
2370
- .feedback-evidence { font-size: 12px; color: #64748b; margin-top: 8px; }
2371
- .fun-ending { background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); border: 1px solid #fbbf24; border-radius: 12px; padding: 24px; margin-top: 40px; text-align: center; }
2372
- .fun-headline { font-size: 18px; font-weight: 600; color: #78350f; margin-bottom: 8px; }
2373
- .fun-detail { font-size: 14px; color: #92400e; }
2374
- .collapsible-section { margin-top: 16px; }
2375
- .collapsible-header { display: flex; align-items: center; gap: 8px; cursor: pointer; padding: 12px 0; border-bottom: 1px solid #e2e8f0; }
2376
- .collapsible-header h3 { margin: 0; font-size: 14px; font-weight: 600; color: #475569; }
2377
- .collapsible-arrow { font-size: 12px; color: #94a3b8; transition: transform 0.2s; }
2378
- .collapsible-content { display: none; padding-top: 16px; }
2379
- .collapsible-content.open { display: block; }
2380
- .collapsible-header.open .collapsible-arrow { transform: rotate(90deg); }
2381
- @media (max-width: 640px) { .charts-row { grid-template-columns: 1fr; } .stats-row { justify-content: center; } }
2382
- `
2383
-
2384
- const hourCountsJson = getHourCountsJson(data.message_hours)
2385
-
2386
- const js = `
2387
- function toggleCollapsible(header) {
2388
- header.classList.toggle('open');
2389
- const content = header.nextElementSibling;
2390
- content.classList.toggle('open');
2391
- }
2392
- function copyText(btn) {
2393
- const code = btn.previousElementSibling;
2394
- navigator.clipboard.writeText(code.textContent).then(() => {
2395
- btn.textContent = 'Copied!';
2396
- setTimeout(() => { btn.textContent = 'Copy'; }, 2000);
2397
- });
2398
- }
2399
- function copyCmdItem(idx) {
2400
- const checkbox = document.getElementById('cmd-' + idx);
2401
- if (checkbox) {
2402
- const text = checkbox.dataset.text;
2403
- navigator.clipboard.writeText(text).then(() => {
2404
- const btn = checkbox.nextElementSibling.querySelector('.copy-btn');
2405
- if (btn) { btn.textContent = 'Copied!'; setTimeout(() => { btn.textContent = 'Copy'; }, 2000); }
2406
- });
2407
- }
2408
- }
2409
- function copyAllCheckedClaudeMd() {
2410
- const checkboxes = document.querySelectorAll('.cmd-checkbox:checked');
2411
- const texts = [];
2412
- checkboxes.forEach(cb => {
2413
- if (cb.dataset.text) { texts.push(cb.dataset.text); }
2414
- });
2415
- const combined = texts.join('\\n');
2416
- const btn = document.querySelector('.copy-all-btn');
2417
- if (btn) {
2418
- navigator.clipboard.writeText(combined).then(() => {
2419
- btn.textContent = 'Copied ' + texts.length + ' items!';
2420
- btn.classList.add('copied');
2421
- setTimeout(() => { btn.textContent = 'Copy All Checked'; btn.classList.remove('copied'); }, 2000);
2422
- });
2423
- }
2424
- }
2425
- // Timezone selector for time of day chart (data is from our own analytics, not user input)
2426
- const rawHourCounts = ${hourCountsJson};
2427
- function updateHourHistogram(offsetFromPT) {
2428
- const periods = [
2429
- { label: "Morning (6-12)", range: [6,7,8,9,10,11] },
2430
- { label: "Afternoon (12-18)", range: [12,13,14,15,16,17] },
2431
- { label: "Evening (18-24)", range: [18,19,20,21,22,23] },
2432
- { label: "Night (0-6)", range: [0,1,2,3,4,5] }
2433
- ];
2434
- const adjustedCounts = {};
2435
- for (const [hour, count] of Object.entries(rawHourCounts)) {
2436
- const newHour = (parseInt(hour) + offsetFromPT + 24) % 24;
2437
- adjustedCounts[newHour] = (adjustedCounts[newHour] || 0) + count;
2438
- }
2439
- const periodCounts = periods.map(p => ({
2440
- label: p.label,
2441
- count: p.range.reduce((sum, h) => sum + (adjustedCounts[h] || 0), 0)
2442
- }));
2443
- const maxCount = Math.max(...periodCounts.map(p => p.count)) || 1;
2444
- const container = document.getElementById('hour-histogram');
2445
- container.textContent = '';
2446
- periodCounts.forEach(p => {
2447
- const row = document.createElement('div');
2448
- row.className = 'bar-row';
2449
- const label = document.createElement('div');
2450
- label.className = 'bar-label';
2451
- label.textContent = p.label;
2452
- const track = document.createElement('div');
2453
- track.className = 'bar-track';
2454
- const fill = document.createElement('div');
2455
- fill.className = 'bar-fill';
2456
- fill.style.width = (p.count / maxCount) * 100 + '%';
2457
- fill.style.background = '#8b5cf6';
2458
- track.appendChild(fill);
2459
- const value = document.createElement('div');
2460
- value.className = 'bar-value';
2461
- value.textContent = p.count;
2462
- row.appendChild(label);
2463
- row.appendChild(track);
2464
- row.appendChild(value);
2465
- container.appendChild(row);
2466
- });
2467
- }
2468
- document.getElementById('timezone-select').addEventListener('change', function() {
2469
- const customInput = document.getElementById('custom-offset');
2470
- if (this.value === 'custom') {
2471
- customInput.style.display = 'inline-block';
2472
- customInput.focus();
2473
- } else {
2474
- customInput.style.display = 'none';
2475
- updateHourHistogram(parseInt(this.value));
2476
- }
2477
- });
2478
- document.getElementById('custom-offset').addEventListener('change', function() {
2479
- const offset = parseInt(this.value) + 8;
2480
- updateHourHistogram(offset);
2481
- });
2482
- `
2483
-
2484
- return `<!DOCTYPE html>
2485
- <html>
2486
- <head>
2487
- <meta charset="utf-8">
2488
- <title>Claude Code Insights</title>
2489
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
2490
- <style>${css}</style>
2491
- </head>
2492
- <body>
2493
- <div class="container">
2494
- <h1>Claude Code Insights</h1>
2495
- <p class="subtitle">${data.total_messages.toLocaleString()} messages across ${data.total_sessions} sessions${data.total_sessions_scanned && data.total_sessions_scanned > data.total_sessions ? ` (${data.total_sessions_scanned.toLocaleString()} total)` : ''} | ${data.date_range.start} to ${data.date_range.end}</p>
2496
-
2497
- ${atAGlanceHtml}
2498
-
2499
- <nav class="nav-toc">
2500
- <a href="#section-work">What You Work On</a>
2501
- <a href="#section-usage">How You Use CC</a>
2502
- <a href="#section-wins">Impressive Things</a>
2503
- <a href="#section-friction">Where Things Go Wrong</a>
2504
- <a href="#section-features">Features to Try</a>
2505
- <a href="#section-patterns">New Usage Patterns</a>
2506
- <a href="#section-horizon">On the Horizon</a>
2507
- <a href="#section-feedback">Team Feedback</a>
2508
- </nav>
2509
-
2510
- <div class="stats-row">
2511
- <div class="stat"><div class="stat-value">${data.total_messages.toLocaleString()}</div><div class="stat-label">Messages</div></div>
2512
- <div class="stat"><div class="stat-value">+${data.total_lines_added.toLocaleString()}/-${data.total_lines_removed.toLocaleString()}</div><div class="stat-label">Lines</div></div>
2513
- <div class="stat"><div class="stat-value">${data.total_files_modified}</div><div class="stat-label">Files</div></div>
2514
- <div class="stat"><div class="stat-value">${data.days_active}</div><div class="stat-label">Days</div></div>
2515
- <div class="stat"><div class="stat-value">${data.messages_per_day}</div><div class="stat-label">Msgs/Day</div></div>
2516
- </div>
2517
-
2518
- ${projectAreasHtml}
2519
-
2520
- <div class="charts-row">
2521
- <div class="chart-card">
2522
- <div class="chart-title">What You Wanted</div>
2523
- ${generateBarChart(data.goal_categories, '#2563eb')}
2524
- </div>
2525
- <div class="chart-card">
2526
- <div class="chart-title">Top Tools Used</div>
2527
- ${generateBarChart(data.tool_counts, '#0891b2')}
2528
- </div>
2529
- </div>
2530
-
2531
- <div class="charts-row">
2532
- <div class="chart-card">
2533
- <div class="chart-title">Languages</div>
2534
- ${generateBarChart(data.languages, '#10b981')}
2535
- </div>
2536
- <div class="chart-card">
2537
- <div class="chart-title">Session Types</div>
2538
- ${generateBarChart(data.session_types || {}, '#8b5cf6')}
2539
- </div>
2540
- </div>
2541
-
2542
- ${interactionHtml}
2543
-
2544
- <!-- Response Time Distribution -->
2545
- <div class="chart-card" style="margin: 24px 0;">
2546
- <div class="chart-title">User Response Time Distribution</div>
2547
- ${generateResponseTimeHistogram(data.user_response_times)}
2548
- <div style="font-size: 12px; color: #64748b; margin-top: 8px;">
2549
- Median: ${data.median_response_time.toFixed(1)}s &bull; Average: ${data.avg_response_time.toFixed(1)}s
2550
- </div>
2551
- </div>
2552
-
2553
- <!-- Multi-clauding Section (matching Python reference) -->
2554
- <div class="chart-card" style="margin: 24px 0;">
2555
- <div class="chart-title">Multi-Clauding (Parallel Sessions)</div>
2556
- ${
2557
- data.multi_clauding.overlap_events === 0
2558
- ? `
2559
- <p style="font-size: 14px; color: #64748b; padding: 8px 0;">
2560
- No parallel session usage detected. You typically work with one Claude Code session at a time.
2561
- </p>
2562
- `
2563
- : `
2564
- <div style="display: flex; gap: 24px; margin: 12px 0;">
2565
- <div style="text-align: center;">
2566
- <div style="font-size: 24px; font-weight: 700; color: #7c3aed;">${data.multi_clauding.overlap_events}</div>
2567
- <div style="font-size: 11px; color: #64748b; text-transform: uppercase;">Overlap Events</div>
2568
- </div>
2569
- <div style="text-align: center;">
2570
- <div style="font-size: 24px; font-weight: 700; color: #7c3aed;">${data.multi_clauding.sessions_involved}</div>
2571
- <div style="font-size: 11px; color: #64748b; text-transform: uppercase;">Sessions Involved</div>
2572
- </div>
2573
- <div style="text-align: center;">
2574
- <div style="font-size: 24px; font-weight: 700; color: #7c3aed;">${data.total_messages > 0 ? Math.round((100 * data.multi_clauding.user_messages_during) / data.total_messages) : 0}%</div>
2575
- <div style="font-size: 11px; color: #64748b; text-transform: uppercase;">Of Messages</div>
2576
- </div>
2577
- </div>
2578
- <p style="font-size: 13px; color: #475569; margin-top: 12px;">
2579
- You run multiple Claude Code sessions simultaneously. Multi-clauding is detected when sessions
2580
- overlap in time, suggesting parallel workflows.
2581
- </p>
2582
- `
2583
- }
2584
- </div>
2585
-
2586
- <!-- Time of Day & Tool Errors -->
2587
- <div class="charts-row">
2588
- <div class="chart-card">
2589
- <div class="chart-title" style="display: flex; align-items: center; gap: 12px;">
2590
- User Messages by Time of Day
2591
- <select id="timezone-select" style="font-size: 12px; padding: 4px 8px; border-radius: 4px; border: 1px solid #e2e8f0;">
2592
- <option value="0">PT (UTC-8)</option>
2593
- <option value="3">ET (UTC-5)</option>
2594
- <option value="8">London (UTC)</option>
2595
- <option value="9">CET (UTC+1)</option>
2596
- <option value="17">Tokyo (UTC+9)</option>
2597
- <option value="custom">Custom offset...</option>
2598
- </select>
2599
- <input type="number" id="custom-offset" placeholder="UTC offset" style="display: none; width: 80px; font-size: 12px; padding: 4px; border-radius: 4px; border: 1px solid #e2e8f0;">
2600
- </div>
2601
- ${generateTimeOfDayChart(data.message_hours)}
2602
- </div>
2603
- <div class="chart-card">
2604
- <div class="chart-title">Tool Errors Encountered</div>
2605
- ${Object.keys(data.tool_error_categories).length > 0 ? generateBarChart(data.tool_error_categories, '#dc2626') : '<p class="empty">No tool errors</p>'}
2606
- </div>
2607
- </div>
2608
-
2609
- ${whatWorksHtml}
2610
-
2611
- <div class="charts-row">
2612
- <div class="chart-card">
2613
- <div class="chart-title">What Helped Most (Claude's Capabilities)</div>
2614
- ${generateBarChart(data.success, '#16a34a')}
2615
- </div>
2616
- <div class="chart-card">
2617
- <div class="chart-title">Outcomes</div>
2618
- ${generateBarChart(data.outcomes, '#8b5cf6', 6, OUTCOME_ORDER)}
2619
- </div>
2620
- </div>
2621
-
2622
- ${frictionHtml}
2623
-
2624
- <div class="charts-row">
2625
- <div class="chart-card">
2626
- <div class="chart-title">Primary Friction Types</div>
2627
- ${generateBarChart(data.friction, '#dc2626')}
2628
- </div>
2629
- <div class="chart-card">
2630
- <div class="chart-title">Inferred Satisfaction (model-estimated)</div>
2631
- ${generateBarChart(data.satisfaction, '#eab308', 6, SATISFACTION_ORDER)}
2632
- </div>
2633
- </div>
2634
-
2635
- ${suggestionsHtml}
2636
-
2637
- ${horizonHtml}
2638
-
2639
- ${funEndingHtml}
2640
-
2641
- ${teamFeedbackHtml}
2642
- </div>
2643
- <script>${js}</script>
2644
- </body>
2645
- </html>`
2646
- }
2647
-
2648
- // ============================================================================
2649
- // Export Types & Functions
2650
- // ============================================================================
2651
-
2652
- /**
2653
- * Structured export format for claudescope consumption
2654
- */
2655
- export type InsightsExport = {
2656
- metadata: {
2657
- username: string
2658
- generated_at: string
2659
- claude_code_version: string
2660
- date_range: { start: string; end: string }
2661
- session_count: number
2662
- remote_hosts_collected?: string[]
2663
- }
2664
- aggregated_data: AggregatedData
2665
- insights: InsightResults
2666
- facets_summary?: {
2667
- total: number
2668
- goal_categories: Record<string, number>
2669
- outcomes: Record<string, number>
2670
- satisfaction: Record<string, number>
2671
- friction: Record<string, number>
2672
- }
2673
- }
2674
-
2675
- /**
2676
- * Build export data from already-computed values.
2677
- * Used by background upload to S3.
2678
- */
2679
- export function buildExportData(
2680
- data: AggregatedData,
2681
- insights: InsightResults,
2682
- facets: Map<string, SessionFacets>,
2683
- remoteStats?: { hosts: RemoteHostInfo[]; totalCopied: number },
2684
- ): InsightsExport {
2685
- const version = typeof MACRO !== 'undefined' ? MACRO.VERSION : 'unknown'
2686
-
2687
- const remote_hosts_collected = remoteStats?.hosts
2688
- .filter(h => h.sessionCount > 0)
2689
- .map(h => h.name)
2690
-
2691
- const facets_summary = {
2692
- total: facets.size,
2693
- goal_categories: {} as Record<string, number>,
2694
- outcomes: {} as Record<string, number>,
2695
- satisfaction: {} as Record<string, number>,
2696
- friction: {} as Record<string, number>,
2697
- }
2698
- for (const f of facets.values()) {
2699
- for (const [cat, count] of safeEntries(f.goal_categories)) {
2700
- if (count > 0) {
2701
- facets_summary.goal_categories[cat] =
2702
- (facets_summary.goal_categories[cat] || 0) + count
2703
- }
2704
- }
2705
- facets_summary.outcomes[f.outcome] =
2706
- (facets_summary.outcomes[f.outcome] || 0) + 1
2707
- for (const [level, count] of safeEntries(f.user_satisfaction_counts)) {
2708
- if (count > 0) {
2709
- facets_summary.satisfaction[level] =
2710
- (facets_summary.satisfaction[level] || 0) + count
2711
- }
2712
- }
2713
- for (const [type, count] of safeEntries(f.friction_counts)) {
2714
- if (count > 0) {
2715
- facets_summary.friction[type] =
2716
- (facets_summary.friction[type] || 0) + count
2717
- }
2718
- }
2719
- }
2720
-
2721
- return {
2722
- metadata: {
2723
- username: process.env.SAFEUSER || process.env.USER || 'unknown',
2724
- generated_at: new Date().toISOString(),
2725
- claude_code_version: version,
2726
- date_range: data.date_range,
2727
- session_count: data.total_sessions,
2728
- ...(remote_hosts_collected &&
2729
- remote_hosts_collected.length > 0 && {
2730
- remote_hosts_collected,
2731
- }),
2732
- },
2733
- aggregated_data: data,
2734
- insights,
2735
- facets_summary,
2736
- }
2737
- }
2738
-
2739
- // ============================================================================
2740
- // Lite Session Scanning
2741
- // ============================================================================
2742
-
2743
- type LiteSessionInfo = {
2744
- sessionId: string
2745
- path: string
2746
- mtime: number
2747
- size: number
2748
- }
2749
-
2750
- /**
2751
- * Scans all project directories using filesystem metadata only (no JSONL parsing).
2752
- * Returns a list of session file info sorted by mtime descending.
2753
- * Yields to the event loop between project directories to keep the UI responsive.
2754
- */
2755
- async function scanAllSessions(): Promise<LiteSessionInfo[]> {
2756
- const projectsDir = getProjectsDir()
2757
-
2758
- let dirents: Awaited<ReturnType<typeof readdir>>
2759
- try {
2760
- dirents = await readdir(projectsDir, { withFileTypes: true })
2761
- } catch {
2762
- return []
2763
- }
2764
-
2765
- const projectDirs = dirents
2766
- .filter(dirent => dirent.isDirectory())
2767
- .map(dirent => join(projectsDir, dirent.name))
2768
-
2769
- const allSessions: LiteSessionInfo[] = []
2770
-
2771
- for (let i = 0; i < projectDirs.length; i++) {
2772
- const sessionFiles = await getSessionFilesWithMtime(projectDirs[i]!)
2773
- for (const [sessionId, fileInfo] of sessionFiles) {
2774
- allSessions.push({
2775
- sessionId,
2776
- path: fileInfo.path,
2777
- mtime: fileInfo.mtime,
2778
- size: fileInfo.size,
2779
- })
2780
- }
2781
- // Yield to event loop every 10 project directories
2782
- if (i % 10 === 9) {
2783
- await new Promise<void>(resolve => setImmediate(resolve))
2784
- }
2785
- }
2786
-
2787
- // Sort by mtime descending (most recent first)
2788
- allSessions.sort((a, b) => b.mtime - a.mtime)
2789
- return allSessions
2790
- }
2791
-
2792
- // ============================================================================
2793
- // Main Function
2794
- // ============================================================================
2795
-
2796
- export async function generateUsageReport(options?: {
2797
- collectRemote?: boolean
2798
- }): Promise<{
2799
- insights: InsightResults
2800
- htmlPath: string
2801
- data: AggregatedData
2802
- remoteStats?: { hosts: RemoteHostInfo[]; totalCopied: number }
2803
- facets: Map<string, SessionFacets>
2804
- }> {
2805
- let remoteStats: { hosts: RemoteHostInfo[]; totalCopied: number } | undefined
2806
-
2807
- // Optionally collect data from remote hosts first (ant-only)
2808
- if (process.env.USER_TYPE === 'ant' && options?.collectRemote) {
2809
- const destDir = join(getClaudeConfigHomeDir(), 'projects')
2810
- const { hosts, totalCopied } = await collectAllRemoteHostData(destDir)
2811
- remoteStats = { hosts, totalCopied }
2812
- }
2813
-
2814
- // Phase 1: Lite scan — filesystem metadata only (no JSONL parsing)
2815
- const allScannedSessions = await scanAllSessions()
2816
- const totalSessionsScanned = allScannedSessions.length
2817
-
2818
- // Phase 2: Load SessionMeta — use cache where available, parse only uncached
2819
- // Read cached metas in parallel batches to avoid blocking the event loop
2820
- const META_BATCH_SIZE = 50
2821
- const MAX_SESSIONS_TO_LOAD = 200
2822
- let allMetas: SessionMeta[] = []
2823
- const uncachedSessions: LiteSessionInfo[] = []
2824
-
2825
- for (let i = 0; i < allScannedSessions.length; i += META_BATCH_SIZE) {
2826
- const batch = allScannedSessions.slice(i, i + META_BATCH_SIZE)
2827
- const results = await Promise.all(
2828
- batch.map(async sessionInfo => ({
2829
- sessionInfo,
2830
- cached: await loadCachedSessionMeta(sessionInfo.sessionId),
2831
- })),
2832
- )
2833
- for (const { sessionInfo, cached } of results) {
2834
- if (cached) {
2835
- allMetas.push(cached)
2836
- } else if (uncachedSessions.length < MAX_SESSIONS_TO_LOAD) {
2837
- uncachedSessions.push(sessionInfo)
2838
- }
2839
- }
2840
- }
2841
-
2842
- // Load full message data only for uncached sessions and compute SessionMeta
2843
- const logsForFacets = new Map<string, LogOption>()
2844
-
2845
- // Filter out /insights meta-sessions (facet extraction API calls get logged as sessions)
2846
- const isMetaSession = (log: LogOption): boolean => {
2847
- for (const msg of log.messages.slice(0, 5)) {
2848
- if (msg.type === 'user' && msg.message) {
2849
- const content = msg.message.content
2850
- if (typeof content === 'string') {
2851
- if (
2852
- content.includes('RESPOND WITH ONLY A VALID JSON OBJECT') ||
2853
- content.includes('record_facets')
2854
- ) {
2855
- return true
2856
- }
2857
- }
2858
- }
2859
- }
2860
- return false
2861
- }
2862
-
2863
- // Load uncached sessions in batches to yield to event loop between batches
2864
- const LOAD_BATCH_SIZE = 10
2865
- for (let i = 0; i < uncachedSessions.length; i += LOAD_BATCH_SIZE) {
2866
- const batch = uncachedSessions.slice(i, i + LOAD_BATCH_SIZE)
2867
- const batchResults = await Promise.all(
2868
- batch.map(async sessionInfo => {
2869
- try {
2870
- return await loadAllLogsFromSessionFile(sessionInfo.path)
2871
- } catch {
2872
- return []
2873
- }
2874
- }),
2875
- )
2876
- // Collect metas synchronously, then save them in parallel (independent writes)
2877
- const metasToSave: SessionMeta[] = []
2878
- for (const logs of batchResults) {
2879
- for (const log of logs) {
2880
- if (isMetaSession(log) || !hasValidDates(log)) continue
2881
- const meta = logToSessionMeta(log)
2882
- allMetas.push(meta)
2883
- metasToSave.push(meta)
2884
- // Keep the log around for potential facet extraction
2885
- logsForFacets.set(meta.session_id, log)
2886
- }
2887
- }
2888
- await Promise.all(metasToSave.map(meta => saveSessionMeta(meta)))
2889
- }
2890
-
2891
- // Deduplicate session branches (keep the one with most user messages per session_id)
2892
- // This prevents inflated totals when a session has multiple conversation branches
2893
- const bestBySession = new Map<string, SessionMeta>()
2894
- for (const meta of allMetas) {
2895
- const existing = bestBySession.get(meta.session_id)
2896
- if (
2897
- !existing ||
2898
- meta.user_message_count > existing.user_message_count ||
2899
- (meta.user_message_count === existing.user_message_count &&
2900
- meta.duration_minutes > existing.duration_minutes)
2901
- ) {
2902
- bestBySession.set(meta.session_id, meta)
2903
- }
2904
- }
2905
- // Replace allMetas with deduplicated list and remove unused logs from logsForFacets
2906
- const keptSessionIds = new Set(bestBySession.keys())
2907
- allMetas = [...bestBySession.values()]
2908
- for (const sessionId of logsForFacets.keys()) {
2909
- if (!keptSessionIds.has(sessionId)) {
2910
- logsForFacets.delete(sessionId)
2911
- }
2912
- }
2913
-
2914
- // Sort all metas by start_time descending (most recent first)
2915
- allMetas.sort((a, b) => b.start_time.localeCompare(a.start_time))
2916
-
2917
- // Pre-filter obviously minimal sessions to save API calls
2918
- // (matching Python's substantive filtering concept)
2919
- const isSubstantiveSession = (meta: SessionMeta): boolean => {
2920
- // Skip sessions with very few user messages
2921
- if (meta.user_message_count < 2) return false
2922
- // Skip very short sessions (< 1 minute)
2923
- if (meta.duration_minutes < 1) return false
2924
- return true
2925
- }
2926
-
2927
- const substantiveMetas = allMetas.filter(isSubstantiveSession)
2928
-
2929
- // Phase 3: Facet extraction — only for sessions without cached facets
2930
- const facets = new Map<string, SessionFacets>()
2931
- const toExtract: Array<{ log: LogOption; sessionId: string }> = []
2932
- const MAX_FACET_EXTRACTIONS = 50
2933
-
2934
- // Load cached facets for all substantive sessions in parallel
2935
- const cachedFacetResults = await Promise.all(
2936
- substantiveMetas.map(async meta => ({
2937
- sessionId: meta.session_id,
2938
- cached: await loadCachedFacets(meta.session_id),
2939
- })),
2940
- )
2941
- for (const { sessionId, cached } of cachedFacetResults) {
2942
- if (cached) {
2943
- facets.set(sessionId, cached)
2944
- } else {
2945
- const log = logsForFacets.get(sessionId)
2946
- if (log && toExtract.length < MAX_FACET_EXTRACTIONS) {
2947
- toExtract.push({ log, sessionId })
2948
- }
2949
- }
2950
- }
2951
-
2952
- // Extract facets for sessions that need them (50 concurrent)
2953
- const CONCURRENCY = 50
2954
- for (let i = 0; i < toExtract.length; i += CONCURRENCY) {
2955
- const batch = toExtract.slice(i, i + CONCURRENCY)
2956
- const results = await Promise.all(
2957
- batch.map(async ({ log, sessionId }) => {
2958
- const newFacets = await extractFacetsFromAPI(log, sessionId)
2959
- return { sessionId, newFacets }
2960
- }),
2961
- )
2962
- // Collect facets synchronously, save in parallel (independent writes)
2963
- const facetsToSave: SessionFacets[] = []
2964
- for (const { sessionId, newFacets } of results) {
2965
- if (newFacets) {
2966
- facets.set(sessionId, newFacets)
2967
- facetsToSave.push(newFacets)
2968
- }
2969
- }
2970
- await Promise.all(facetsToSave.map(f => saveFacets(f)))
2971
- }
2972
-
2973
- // Filter out warmup/minimal sessions (matching Python's is_minimal)
2974
- // A session is minimal if warmup_minimal is the ONLY goal category
2975
- const isMinimalSession = (sessionId: string): boolean => {
2976
- const sessionFacets = facets.get(sessionId)
2977
- if (!sessionFacets) return false
2978
- const cats = sessionFacets.goal_categories
2979
- const catKeys = safeKeys(cats).filter(k => (cats[k] ?? 0) > 0)
2980
- return catKeys.length === 1 && catKeys[0] === 'warmup_minimal'
2981
- }
2982
-
2983
- const substantiveSessions = substantiveMetas.filter(
2984
- s => !isMinimalSession(s.session_id),
2985
- )
2986
-
2987
- const substantiveFacets = new Map<string, SessionFacets>()
2988
- for (const [sessionId, f] of facets) {
2989
- if (!isMinimalSession(sessionId)) {
2990
- substantiveFacets.set(sessionId, f)
2991
- }
2992
- }
2993
-
2994
- const aggregated = aggregateData(substantiveSessions, substantiveFacets)
2995
- aggregated.total_sessions_scanned = totalSessionsScanned
2996
-
2997
- // Generate parallel insights from Claude (6 sections)
2998
- const insights = await generateParallelInsights(aggregated, facets)
2999
-
3000
- // Generate HTML report
3001
- const htmlReport = generateHtmlReport(aggregated, insights)
3002
-
3003
- // Save reports
3004
- try {
3005
- await mkdir(getDataDir(), { recursive: true })
3006
- } catch {
3007
- // Directory may already exist
3008
- }
3009
-
3010
- const htmlPath = join(getDataDir(), 'report.html')
3011
- await writeFile(htmlPath, htmlReport, {
3012
- encoding: 'utf-8',
3013
- mode: 0o600,
3014
- })
3015
-
3016
- return {
3017
- insights,
3018
- htmlPath,
3019
- data: aggregated,
3020
- remoteStats,
3021
- facets: substantiveFacets,
3022
- }
3023
- }
3024
-
3025
- function safeEntries<V>(
3026
- obj: Record<string, V> | undefined | null,
3027
- ): [string, V][] {
3028
- return obj ? Object.entries(obj) : []
3029
- }
3030
-
3031
- function safeKeys(obj: Record<string, unknown> | undefined | null): string[] {
3032
- return obj ? Object.keys(obj) : []
3033
- }
3034
-
3035
- // ============================================================================
3036
- // Command Definition
3037
- // ============================================================================
3038
-
3039
- const usageReport: Command = {
3040
- type: 'prompt',
3041
- name: 'insights',
3042
- description: 'Generate a report analyzing your Claude Code sessions',
3043
- contentLength: 0, // Dynamic content
3044
- progressMessage: 'analyzing your sessions',
3045
- source: 'builtin',
3046
- async getPromptForCommand(args) {
3047
- let collectRemote = false
3048
- let remoteHosts: string[] = []
3049
- let hasRemoteHosts = false
3050
-
3051
- if (process.env.USER_TYPE === 'ant') {
3052
- // Parse --homespaces flag
3053
- collectRemote = args?.includes('--homespaces') ?? false
3054
-
3055
- // Check for available remote hosts
3056
- remoteHosts = await getRunningRemoteHosts()
3057
- hasRemoteHosts = remoteHosts.length > 0
3058
-
3059
- // Show collection message if collecting
3060
- if (collectRemote && hasRemoteHosts) {
3061
- // biome-ignore lint/suspicious/noConsole: intentional
3062
- console.error(
3063
- `Collecting sessions from ${remoteHosts.length} homespace(s): ${remoteHosts.join(', ')}...`,
3064
- )
3065
- }
3066
- }
3067
-
3068
- const { insights, htmlPath, data, remoteStats } = await generateUsageReport(
3069
- { collectRemote },
3070
- )
3071
-
3072
- let reportUrl = `file://${htmlPath}`
3073
- let uploadHint = ''
3074
-
3075
- if (process.env.USER_TYPE === 'ant') {
3076
- // Try to upload to S3
3077
- const timestamp = new Date()
3078
- .toISOString()
3079
- .replace(/[-:]/g, '')
3080
- .replace('T', '_')
3081
- .slice(0, 15)
3082
- const username = process.env.SAFEUSER || process.env.USER || 'unknown'
3083
- const filename = `${username}_insights_${timestamp}.html`
3084
- const s3Path = `s3://anthropic-serve/atamkin/cc-user-reports/${filename}`
3085
- const s3Url = `https://s3-frontend.infra.ant.dev/anthropic-serve/atamkin/cc-user-reports/${filename}`
3086
-
3087
- reportUrl = s3Url
3088
- try {
3089
- execFileSync('ff', ['cp', htmlPath, s3Path], {
3090
- timeout: 60000,
3091
- stdio: 'pipe', // Suppress output
3092
- })
3093
- } catch {
3094
- // Upload failed - fall back to local file and show upload command
3095
- reportUrl = `file://${htmlPath}`
3096
- uploadHint = `\nAutomatic upload failed. Are you on the boron namespace? Try \`use-bo\` and ensure you've run \`sso\`.
3097
- To share, run: ff cp ${htmlPath} ${s3Path}
3098
- Then access at: ${s3Url}`
3099
- }
3100
- }
3101
-
3102
- // Build header with stats
3103
- const sessionLabel =
3104
- data.total_sessions_scanned &&
3105
- data.total_sessions_scanned > data.total_sessions
3106
- ? `${data.total_sessions_scanned.toLocaleString()} sessions total · ${data.total_sessions} analyzed`
3107
- : `${data.total_sessions} sessions`
3108
- const stats = [
3109
- sessionLabel,
3110
- `${data.total_messages.toLocaleString()} messages`,
3111
- `${Math.round(data.total_duration_hours)}h`,
3112
- `${data.git_commits} commits`,
3113
- ].join(' · ')
3114
-
3115
- // Build remote host info (ant-only)
3116
- let remoteInfo = ''
3117
- if (process.env.USER_TYPE === 'ant') {
3118
- if (remoteStats && remoteStats.totalCopied > 0) {
3119
- const hsNames = remoteStats.hosts
3120
- .filter(h => h.sessionCount > 0)
3121
- .map(h => h.name)
3122
- .join(', ')
3123
- remoteInfo = `\n_Collected ${remoteStats.totalCopied} new sessions from: ${hsNames}_\n`
3124
- } else if (!collectRemote && hasRemoteHosts) {
3125
- // Suggest using --homespaces if they have remote hosts but didn't use the flag
3126
- remoteInfo = `\n_Tip: Run \`/insights --homespaces\` to include sessions from your ${remoteHosts.length} running homespace(s)_\n`
3127
- }
3128
- }
3129
-
3130
- // Build markdown summary from insights
3131
- const atAGlance = insights.at_a_glance
3132
- const summaryText = atAGlance
3133
- ? `## At a Glance
3134
-
3135
- ${atAGlance.whats_working ? `**What's working:** ${atAGlance.whats_working} See _Impressive Things You Did_.` : ''}
3136
-
3137
- ${atAGlance.whats_hindering ? `**What's hindering you:** ${atAGlance.whats_hindering} See _Where Things Go Wrong_.` : ''}
3138
-
3139
- ${atAGlance.quick_wins ? `**Quick wins to try:** ${atAGlance.quick_wins} See _Features to Try_.` : ''}
3140
-
3141
- ${atAGlance.ambitious_workflows ? `**Ambitious workflows:** ${atAGlance.ambitious_workflows} See _On the Horizon_.` : ''}`
3142
- : '_No insights generated_'
3143
-
3144
- const header = `# Claude Code Insights
3145
-
3146
- ${stats}
3147
- ${data.date_range.start} to ${data.date_range.end}
3148
- ${remoteInfo}
3149
- `
3150
-
3151
- const userSummary = `${header}${summaryText}
3152
-
3153
- Your full shareable insights report is ready: ${reportUrl}${uploadHint}`
3154
-
3155
- // Return prompt for Claude to respond to
3156
- return [
3157
- {
3158
- type: 'text',
3159
- text: `The user just ran /insights to generate a usage report analyzing their Claude Code sessions.
3160
-
3161
- Here is the full insights data:
3162
- ${jsonStringify(insights, null, 2)}
3163
-
3164
- Report URL: ${reportUrl}
3165
- HTML file: ${htmlPath}
3166
- Facets directory: ${getFacetsDir()}
3167
-
3168
- Here is what the user sees:
3169
- ${userSummary}
3170
-
3171
- Now output the following message exactly:
3172
-
3173
- <message>
3174
- Your shareable insights report is ready:
3175
- ${reportUrl}${uploadHint}
3176
-
3177
- Want to dig into any section or try one of the suggestions?
3178
- </message>`,
3179
- },
3180
- ]
3181
- },
3182
- }
3183
-
3184
- function isValidSessionFacets(obj: unknown): obj is SessionFacets {
3185
- if (!obj || typeof obj !== 'object') return false
3186
- const o = obj as Record<string, unknown>
3187
- return (
3188
- typeof o.underlying_goal === 'string' &&
3189
- typeof o.outcome === 'string' &&
3190
- typeof o.brief_summary === 'string' &&
3191
- o.goal_categories !== null &&
3192
- typeof o.goal_categories === 'object' &&
3193
- o.user_satisfaction_counts !== null &&
3194
- typeof o.user_satisfaction_counts === 'object' &&
3195
- o.friction_counts !== null &&
3196
- typeof o.friction_counts === 'object'
3197
- )
3198
- }
3199
-
3200
- export default usageReport