subagent-cli 0.2.9 → 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 (2149) hide show
  1. package/dist/cli.cjs +30 -34
  2. package/dist/sa +0 -0
  3. package/package.json +4 -9
  4. package/bin/sa.js +0 -4
  5. package/bunfig.toml +0 -2
  6. package/src/QueryEngine.ts +0 -1295
  7. package/src/Task.ts +0 -125
  8. package/src/Tool.ts +0 -792
  9. package/src/_stubs/bun-bundle.ts +0 -6
  10. package/src/assistant/AssistantSessionChooser.ts +0 -2
  11. package/src/assistant/gate.ts +0 -2
  12. package/src/assistant/index.ts +0 -2
  13. package/src/assistant/sessionDiscovery.ts +0 -1
  14. package/src/assistant/sessionHistory.ts +0 -87
  15. package/src/bootstrap/state.ts +0 -1762
  16. package/src/bridge/bridgeApi.ts +0 -539
  17. package/src/bridge/bridgeConfig.ts +0 -48
  18. package/src/bridge/bridgeDebug.ts +0 -135
  19. package/src/bridge/bridgeEnabled.ts +0 -202
  20. package/src/bridge/bridgeMain.ts +0 -2999
  21. package/src/bridge/bridgeMessaging.ts +0 -461
  22. package/src/bridge/bridgePermissionCallbacks.ts +0 -43
  23. package/src/bridge/bridgePointer.ts +0 -210
  24. package/src/bridge/bridgeStatusUtil.ts +0 -163
  25. package/src/bridge/bridgeUI.ts +0 -530
  26. package/src/bridge/capacityWake.ts +0 -56
  27. package/src/bridge/codeSessionApi.ts +0 -168
  28. package/src/bridge/createSession.ts +0 -384
  29. package/src/bridge/debugUtils.ts +0 -141
  30. package/src/bridge/envLessBridgeConfig.ts +0 -165
  31. package/src/bridge/flushGate.ts +0 -71
  32. package/src/bridge/inboundAttachments.ts +0 -175
  33. package/src/bridge/inboundMessages.ts +0 -80
  34. package/src/bridge/initReplBridge.ts +0 -569
  35. package/src/bridge/jwtUtils.ts +0 -256
  36. package/src/bridge/peerSessions.ts +0 -2
  37. package/src/bridge/pollConfig.ts +0 -110
  38. package/src/bridge/pollConfigDefaults.ts +0 -82
  39. package/src/bridge/remoteBridgeCore.ts +0 -1008
  40. package/src/bridge/replBridge.ts +0 -2406
  41. package/src/bridge/replBridgeHandle.ts +0 -36
  42. package/src/bridge/replBridgeTransport.ts +0 -370
  43. package/src/bridge/sessionIdCompat.ts +0 -57
  44. package/src/bridge/sessionRunner.ts +0 -550
  45. package/src/bridge/trustedDevice.ts +0 -210
  46. package/src/bridge/types.ts +0 -262
  47. package/src/bridge/webhookSanitizer.ts +0 -2
  48. package/src/bridge/workSecret.ts +0 -127
  49. package/src/buddy/CompanionSprite.tsx +0 -371
  50. package/src/buddy/companion.ts +0 -133
  51. package/src/buddy/prompt.ts +0 -36
  52. package/src/buddy/sprites.ts +0 -514
  53. package/src/buddy/types.ts +0 -148
  54. package/src/buddy/useBuddyNotification.tsx +0 -98
  55. package/src/cli/bg.ts +0 -2
  56. package/src/cli/exit.ts +0 -31
  57. package/src/cli/handlers/agents.ts +0 -70
  58. package/src/cli/handlers/ant.ts +0 -2
  59. package/src/cli/handlers/auth.ts +0 -330
  60. package/src/cli/handlers/autoMode.ts +0 -170
  61. package/src/cli/handlers/mcp.tsx +0 -362
  62. package/src/cli/handlers/plugins.ts +0 -878
  63. package/src/cli/handlers/templateJobs.ts +0 -2
  64. package/src/cli/handlers/util.tsx +0 -110
  65. package/src/cli/ndjsonSafeStringify.ts +0 -32
  66. package/src/cli/print.ts +0 -5594
  67. package/src/cli/remoteIO.ts +0 -255
  68. package/src/cli/rollback.ts +0 -3
  69. package/src/cli/structuredIO.ts +0 -859
  70. package/src/cli/transports/HybridTransport.ts +0 -282
  71. package/src/cli/transports/SSETransport.ts +0 -711
  72. package/src/cli/transports/SerialBatchEventUploader.ts +0 -275
  73. package/src/cli/transports/Transport.ts +0 -1
  74. package/src/cli/transports/WebSocketTransport.ts +0 -800
  75. package/src/cli/transports/WorkerStateUploader.ts +0 -131
  76. package/src/cli/transports/ccrClient.ts +0 -998
  77. package/src/cli/transports/transportUtils.ts +0 -45
  78. package/src/cli/up.ts +0 -3
  79. package/src/cli/update.ts +0 -422
  80. package/src/commands/add-dir/add-dir.tsx +0 -126
  81. package/src/commands/add-dir/index.ts +0 -11
  82. package/src/commands/add-dir/validation.ts +0 -110
  83. package/src/commands/advisor.ts +0 -109
  84. package/src/commands/agents/agents.tsx +0 -12
  85. package/src/commands/agents/index.ts +0 -10
  86. package/src/commands/ant-trace/index.js +0 -1
  87. package/src/commands/assistant/assistant.ts +0 -2
  88. package/src/commands/autofix-pr/index.js +0 -1
  89. package/src/commands/backfill-sessions/index.js +0 -1
  90. package/src/commands/branch/branch.ts +0 -296
  91. package/src/commands/branch/index.ts +0 -14
  92. package/src/commands/break-cache/index.js +0 -1
  93. package/src/commands/bridge/bridge.tsx +0 -509
  94. package/src/commands/bridge/index.ts +0 -26
  95. package/src/commands/bridge-kick.ts +0 -200
  96. package/src/commands/brief.ts +0 -130
  97. package/src/commands/btw/btw.tsx +0 -243
  98. package/src/commands/btw/index.ts +0 -13
  99. package/src/commands/buddy/index.ts +0 -2
  100. package/src/commands/bughunter/index.js +0 -1
  101. package/src/commands/chrome/chrome.tsx +0 -285
  102. package/src/commands/chrome/index.ts +0 -13
  103. package/src/commands/clear/caches.ts +0 -144
  104. package/src/commands/clear/clear.ts +0 -7
  105. package/src/commands/clear/conversation.ts +0 -251
  106. package/src/commands/clear/index.ts +0 -19
  107. package/src/commands/color/color.ts +0 -93
  108. package/src/commands/color/index.ts +0 -16
  109. package/src/commands/commit-push-pr.ts +0 -158
  110. package/src/commands/commit.ts +0 -92
  111. package/src/commands/compact/compact.ts +0 -287
  112. package/src/commands/compact/index.ts +0 -15
  113. package/src/commands/config/config.tsx +0 -7
  114. package/src/commands/config/index.ts +0 -11
  115. package/src/commands/context/context-noninteractive.ts +0 -325
  116. package/src/commands/context/context.tsx +0 -64
  117. package/src/commands/context/index.ts +0 -24
  118. package/src/commands/copy/copy.tsx +0 -371
  119. package/src/commands/copy/index.ts +0 -15
  120. package/src/commands/cost/cost.ts +0 -24
  121. package/src/commands/cost/index.ts +0 -23
  122. package/src/commands/createMovedToPluginCommand.ts +0 -65
  123. package/src/commands/ctx_viz/index.js +0 -1
  124. package/src/commands/debug-tool-call/index.js +0 -1
  125. package/src/commands/desktop/desktop.tsx +0 -9
  126. package/src/commands/desktop/index.ts +0 -26
  127. package/src/commands/diff/diff.tsx +0 -9
  128. package/src/commands/diff/index.ts +0 -8
  129. package/src/commands/doctor/doctor.tsx +0 -7
  130. package/src/commands/doctor/index.ts +0 -12
  131. package/src/commands/effort/effort.tsx +0 -183
  132. package/src/commands/effort/index.ts +0 -13
  133. package/src/commands/env/index.js +0 -1
  134. package/src/commands/exit/exit.tsx +0 -33
  135. package/src/commands/exit/index.ts +0 -12
  136. package/src/commands/export/export.tsx +0 -91
  137. package/src/commands/export/index.ts +0 -11
  138. package/src/commands/extra-usage/extra-usage-core.ts +0 -118
  139. package/src/commands/extra-usage/extra-usage-noninteractive.ts +0 -16
  140. package/src/commands/extra-usage/extra-usage.tsx +0 -17
  141. package/src/commands/extra-usage/index.ts +0 -31
  142. package/src/commands/fast/fast.tsx +0 -269
  143. package/src/commands/fast/index.ts +0 -26
  144. package/src/commands/feedback/feedback.tsx +0 -25
  145. package/src/commands/feedback/index.ts +0 -26
  146. package/src/commands/files/files.ts +0 -19
  147. package/src/commands/files/index.ts +0 -12
  148. package/src/commands/fork/index.ts +0 -2
  149. package/src/commands/good-claude/index.js +0 -1
  150. package/src/commands/heapdump/heapdump.ts +0 -17
  151. package/src/commands/heapdump/index.ts +0 -12
  152. package/src/commands/help/help.tsx +0 -11
  153. package/src/commands/help/index.ts +0 -10
  154. package/src/commands/hooks/hooks.tsx +0 -13
  155. package/src/commands/hooks/index.ts +0 -11
  156. package/src/commands/ide/ide.tsx +0 -646
  157. package/src/commands/ide/index.ts +0 -11
  158. package/src/commands/init-verifiers.ts +0 -262
  159. package/src/commands/init.ts +0 -256
  160. package/src/commands/insights.ts +0 -3200
  161. package/src/commands/install-github-app/ApiKeyStep.tsx +0 -231
  162. package/src/commands/install-github-app/CheckExistingSecretStep.tsx +0 -190
  163. package/src/commands/install-github-app/CheckGitHubStep.tsx +0 -15
  164. package/src/commands/install-github-app/ChooseRepoStep.tsx +0 -211
  165. package/src/commands/install-github-app/CreatingStep.tsx +0 -65
  166. package/src/commands/install-github-app/ErrorStep.tsx +0 -85
  167. package/src/commands/install-github-app/ExistingWorkflowStep.tsx +0 -103
  168. package/src/commands/install-github-app/InstallAppStep.tsx +0 -94
  169. package/src/commands/install-github-app/OAuthFlowStep.tsx +0 -276
  170. package/src/commands/install-github-app/SuccessStep.tsx +0 -96
  171. package/src/commands/install-github-app/WarningsStep.tsx +0 -73
  172. package/src/commands/install-github-app/index.ts +0 -13
  173. package/src/commands/install-github-app/install-github-app.tsx +0 -587
  174. package/src/commands/install-github-app/setupGitHubActions.ts +0 -325
  175. package/src/commands/install-github-app/types.ts +0 -3
  176. package/src/commands/install-slack-app/index.ts +0 -12
  177. package/src/commands/install-slack-app/install-slack-app.ts +0 -30
  178. package/src/commands/install.tsx +0 -300
  179. package/src/commands/issue/index.js +0 -1
  180. package/src/commands/keybindings/index.ts +0 -13
  181. package/src/commands/keybindings/keybindings.ts +0 -53
  182. package/src/commands/login/index.ts +0 -14
  183. package/src/commands/login/login.tsx +0 -104
  184. package/src/commands/logout/index.ts +0 -10
  185. package/src/commands/logout/logout.tsx +0 -82
  186. package/src/commands/mcp/addCommand.ts +0 -280
  187. package/src/commands/mcp/index.ts +0 -12
  188. package/src/commands/mcp/mcp.tsx +0 -85
  189. package/src/commands/mcp/xaaIdpCommand.ts +0 -266
  190. package/src/commands/memory/index.ts +0 -10
  191. package/src/commands/memory/memory.tsx +0 -90
  192. package/src/commands/mobile/index.ts +0 -11
  193. package/src/commands/mobile/mobile.tsx +0 -274
  194. package/src/commands/mock-limits/index.js +0 -1
  195. package/src/commands/model/index.ts +0 -16
  196. package/src/commands/model/model.tsx +0 -297
  197. package/src/commands/oauth-refresh/index.js +0 -1
  198. package/src/commands/onboarding/index.js +0 -1
  199. package/src/commands/output-style/index.ts +0 -11
  200. package/src/commands/output-style/output-style.tsx +0 -7
  201. package/src/commands/passes/index.ts +0 -22
  202. package/src/commands/passes/passes.tsx +0 -24
  203. package/src/commands/peers/index.ts +0 -2
  204. package/src/commands/perf-issue/index.js +0 -1
  205. package/src/commands/permissions/index.ts +0 -11
  206. package/src/commands/permissions/permissions.tsx +0 -10
  207. package/src/commands/plan/index.ts +0 -11
  208. package/src/commands/plan/plan.tsx +0 -122
  209. package/src/commands/plugin/AddMarketplace.tsx +0 -162
  210. package/src/commands/plugin/BrowseMarketplace.tsx +0 -802
  211. package/src/commands/plugin/DiscoverPlugins.tsx +0 -781
  212. package/src/commands/plugin/ManageMarketplaces.tsx +0 -838
  213. package/src/commands/plugin/ManagePlugins.tsx +0 -2215
  214. package/src/commands/plugin/PluginErrors.tsx +0 -124
  215. package/src/commands/plugin/PluginOptionsDialog.tsx +0 -357
  216. package/src/commands/plugin/PluginOptionsFlow.tsx +0 -135
  217. package/src/commands/plugin/PluginSettings.tsx +0 -1072
  218. package/src/commands/plugin/PluginTrustWarning.tsx +0 -32
  219. package/src/commands/plugin/UnifiedInstalledCell.tsx +0 -565
  220. package/src/commands/plugin/ValidatePlugin.tsx +0 -98
  221. package/src/commands/plugin/index.tsx +0 -11
  222. package/src/commands/plugin/parseArgs.ts +0 -103
  223. package/src/commands/plugin/plugin.tsx +0 -7
  224. package/src/commands/plugin/pluginDetailsHelpers.tsx +0 -117
  225. package/src/commands/plugin/types.ts +0 -2
  226. package/src/commands/plugin/unifiedTypes.ts +0 -4
  227. package/src/commands/plugin/usePagination.ts +0 -171
  228. package/src/commands/pr_comments/index.ts +0 -50
  229. package/src/commands/privacy-settings/index.ts +0 -14
  230. package/src/commands/privacy-settings/privacy-settings.tsx +0 -58
  231. package/src/commands/rate-limit-options/index.ts +0 -19
  232. package/src/commands/rate-limit-options/rate-limit-options.tsx +0 -210
  233. package/src/commands/release-notes/index.ts +0 -11
  234. package/src/commands/release-notes/release-notes.ts +0 -50
  235. package/src/commands/reload-plugins/index.ts +0 -18
  236. package/src/commands/reload-plugins/reload-plugins.ts +0 -61
  237. package/src/commands/remote-env/index.ts +0 -15
  238. package/src/commands/remote-env/remote-env.tsx +0 -7
  239. package/src/commands/remote-setup/api.ts +0 -182
  240. package/src/commands/remote-setup/index.ts +0 -20
  241. package/src/commands/remote-setup/remote-setup.tsx +0 -187
  242. package/src/commands/rename/generateSessionName.ts +0 -67
  243. package/src/commands/rename/index.ts +0 -12
  244. package/src/commands/rename/rename.ts +0 -87
  245. package/src/commands/reset-limits/index.js +0 -4
  246. package/src/commands/resume/index.ts +0 -12
  247. package/src/commands/resume/resume.tsx +0 -275
  248. package/src/commands/review/UltrareviewOverageDialog.tsx +0 -96
  249. package/src/commands/review/reviewRemote.ts +0 -316
  250. package/src/commands/review/ultrareviewCommand.tsx +0 -58
  251. package/src/commands/review/ultrareviewEnabled.ts +0 -14
  252. package/src/commands/review.ts +0 -57
  253. package/src/commands/rewind/index.ts +0 -13
  254. package/src/commands/rewind/rewind.ts +0 -13
  255. package/src/commands/sandbox-toggle/index.ts +0 -50
  256. package/src/commands/sandbox-toggle/sandbox-toggle.tsx +0 -83
  257. package/src/commands/security-review.ts +0 -243
  258. package/src/commands/session/index.ts +0 -16
  259. package/src/commands/session/session.tsx +0 -140
  260. package/src/commands/share/index.js +0 -1
  261. package/src/commands/skills/index.ts +0 -10
  262. package/src/commands/skills/skills.tsx +0 -8
  263. package/src/commands/stats/index.ts +0 -10
  264. package/src/commands/stats/stats.tsx +0 -7
  265. package/src/commands/status/index.ts +0 -12
  266. package/src/commands/status/status.tsx +0 -8
  267. package/src/commands/statusline.tsx +0 -24
  268. package/src/commands/stickers/index.ts +0 -11
  269. package/src/commands/stickers/stickers.ts +0 -16
  270. package/src/commands/summary/index.js +0 -1
  271. package/src/commands/tag/index.ts +0 -12
  272. package/src/commands/tag/tag.tsx +0 -215
  273. package/src/commands/tasks/index.ts +0 -11
  274. package/src/commands/tasks/tasks.tsx +0 -8
  275. package/src/commands/teleport/index.js +0 -1
  276. package/src/commands/terminalSetup/index.ts +0 -23
  277. package/src/commands/terminalSetup/terminalSetup.tsx +0 -531
  278. package/src/commands/theme/index.ts +0 -10
  279. package/src/commands/theme/theme.tsx +0 -57
  280. package/src/commands/thinkback/index.ts +0 -13
  281. package/src/commands/thinkback/thinkback.tsx +0 -554
  282. package/src/commands/thinkback-play/index.ts +0 -17
  283. package/src/commands/thinkback-play/thinkback-play.ts +0 -43
  284. package/src/commands/ultraplan.tsx +0 -471
  285. package/src/commands/upgrade/index.ts +0 -16
  286. package/src/commands/upgrade/upgrade.tsx +0 -38
  287. package/src/commands/usage/index.ts +0 -9
  288. package/src/commands/usage/usage.tsx +0 -7
  289. package/src/commands/version.ts +0 -22
  290. package/src/commands/vim/index.ts +0 -11
  291. package/src/commands/vim/vim.ts +0 -38
  292. package/src/commands/voice/index.ts +0 -20
  293. package/src/commands/voice/voice.ts +0 -150
  294. package/src/commands/workflows/index.ts +0 -2
  295. package/src/commands.ts +0 -754
  296. package/src/components/AgentProgressLine.tsx +0 -136
  297. package/src/components/App.tsx +0 -56
  298. package/src/components/ApproveApiKey.tsx +0 -123
  299. package/src/components/AutoModeOptInDialog.tsx +0 -142
  300. package/src/components/AutoUpdater.tsx +0 -198
  301. package/src/components/AutoUpdaterWrapper.tsx +0 -91
  302. package/src/components/AwsAuthStatusBox.tsx +0 -82
  303. package/src/components/BaseTextInput.tsx +0 -136
  304. package/src/components/BashModeProgress.tsx +0 -56
  305. package/src/components/BridgeDialog.tsx +0 -401
  306. package/src/components/BypassPermissionsModeDialog.tsx +0 -87
  307. package/src/components/ChannelDowngradeDialog.tsx +0 -102
  308. package/src/components/ClaudeCodeHint/PluginHintMenu.tsx +0 -78
  309. package/src/components/ClaudeInChromeOnboarding.tsx +0 -121
  310. package/src/components/ClaudeMdExternalIncludesDialog.tsx +0 -137
  311. package/src/components/ClickableImageRef.tsx +0 -73
  312. package/src/components/CompactSummary.tsx +0 -118
  313. package/src/components/ConfigurableShortcutHint.tsx +0 -57
  314. package/src/components/ConsoleOAuthFlow.tsx +0 -631
  315. package/src/components/ContextSuggestions.tsx +0 -47
  316. package/src/components/ContextVisualization.tsx +0 -489
  317. package/src/components/CoordinatorAgentStatus.tsx +0 -273
  318. package/src/components/CostThresholdDialog.tsx +0 -50
  319. package/src/components/CtrlOToExpand.tsx +0 -51
  320. package/src/components/CustomSelect/SelectMulti.tsx +0 -213
  321. package/src/components/CustomSelect/index.ts +0 -3
  322. package/src/components/CustomSelect/option-map.ts +0 -50
  323. package/src/components/CustomSelect/select-input-option.tsx +0 -488
  324. package/src/components/CustomSelect/select-option.tsx +0 -68
  325. package/src/components/CustomSelect/select.tsx +0 -690
  326. package/src/components/CustomSelect/use-multi-select-state.ts +0 -414
  327. package/src/components/CustomSelect/use-select-input.ts +0 -287
  328. package/src/components/CustomSelect/use-select-navigation.ts +0 -653
  329. package/src/components/CustomSelect/use-select-state.ts +0 -157
  330. package/src/components/DesktopHandoff.tsx +0 -193
  331. package/src/components/DesktopUpsell/DesktopUpsellStartup.tsx +0 -171
  332. package/src/components/DevBar.tsx +0 -49
  333. package/src/components/DevChannelsDialog.tsx +0 -105
  334. package/src/components/DiagnosticsDisplay.tsx +0 -95
  335. package/src/components/EffortCallout.tsx +0 -265
  336. package/src/components/EffortIndicator.ts +0 -42
  337. package/src/components/ExitFlow.tsx +0 -48
  338. package/src/components/ExportDialog.tsx +0 -128
  339. package/src/components/FallbackToolUseErrorMessage.tsx +0 -116
  340. package/src/components/FallbackToolUseRejectedMessage.tsx +0 -16
  341. package/src/components/FastIcon.tsx +0 -46
  342. package/src/components/Feedback.tsx +0 -592
  343. package/src/components/FeedbackSurvey/FeedbackSurvey.tsx +0 -174
  344. package/src/components/FeedbackSurvey/FeedbackSurveyView.tsx +0 -108
  345. package/src/components/FeedbackSurvey/TranscriptSharePrompt.tsx +0 -88
  346. package/src/components/FeedbackSurvey/submitTranscriptShare.ts +0 -112
  347. package/src/components/FeedbackSurvey/useDebouncedDigitInput.ts +0 -82
  348. package/src/components/FeedbackSurvey/useFeedbackSurvey.tsx +0 -296
  349. package/src/components/FeedbackSurvey/useFrustrationDetection.ts +0 -2
  350. package/src/components/FeedbackSurvey/useMemorySurvey.tsx +0 -213
  351. package/src/components/FeedbackSurvey/usePostCompactSurvey.tsx +0 -206
  352. package/src/components/FeedbackSurvey/useSurveyState.tsx +0 -100
  353. package/src/components/FeedbackSurvey/utils.ts +0 -2
  354. package/src/components/FileEditToolDiff.tsx +0 -181
  355. package/src/components/FileEditToolUpdatedMessage.tsx +0 -124
  356. package/src/components/FileEditToolUseRejectedMessage.tsx +0 -170
  357. package/src/components/FilePathLink.tsx +0 -43
  358. package/src/components/FullscreenLayout.tsx +0 -637
  359. package/src/components/GlobalSearchDialog.tsx +0 -343
  360. package/src/components/HelpV2/Commands.tsx +0 -82
  361. package/src/components/HelpV2/General.tsx +0 -23
  362. package/src/components/HelpV2/HelpV2.tsx +0 -184
  363. package/src/components/HighlightedCode/Fallback.tsx +0 -193
  364. package/src/components/HighlightedCode.tsx +0 -190
  365. package/src/components/HistorySearchDialog.tsx +0 -118
  366. package/src/components/IdeAutoConnectDialog.tsx +0 -154
  367. package/src/components/IdeOnboardingDialog.tsx +0 -167
  368. package/src/components/IdeStatusIndicator.tsx +0 -58
  369. package/src/components/IdleReturnDialog.tsx +0 -118
  370. package/src/components/InterruptedByUser.tsx +0 -15
  371. package/src/components/InvalidConfigDialog.tsx +0 -156
  372. package/src/components/InvalidSettingsDialog.tsx +0 -89
  373. package/src/components/KeybindingWarnings.tsx +0 -55
  374. package/src/components/LanguagePicker.tsx +0 -86
  375. package/src/components/LogSelector.tsx +0 -1575
  376. package/src/components/LogoV2/AnimatedAsterisk.tsx +0 -50
  377. package/src/components/LogoV2/AnimatedClawd.tsx +0 -124
  378. package/src/components/LogoV2/ChannelsNotice.tsx +0 -266
  379. package/src/components/LogoV2/Clawd.tsx +0 -25
  380. package/src/components/LogoV2/CondensedLogo.tsx +0 -161
  381. package/src/components/LogoV2/EmergencyTip.tsx +0 -58
  382. package/src/components/LogoV2/Feed.tsx +0 -112
  383. package/src/components/LogoV2/FeedColumn.tsx +0 -59
  384. package/src/components/LogoV2/GuestPassesUpsell.tsx +0 -70
  385. package/src/components/LogoV2/LogoV2.tsx +0 -543
  386. package/src/components/LogoV2/Opus1mMergeNotice.tsx +0 -55
  387. package/src/components/LogoV2/OverageCreditUpsell.tsx +0 -166
  388. package/src/components/LogoV2/VoiceModeNotice.tsx +0 -68
  389. package/src/components/LogoV2/WelcomeV2.tsx +0 -433
  390. package/src/components/LogoV2/feedConfigs.tsx +0 -92
  391. package/src/components/LspRecommendation/LspRecommendationMenu.tsx +0 -88
  392. package/src/components/MCPServerApprovalDialog.tsx +0 -115
  393. package/src/components/MCPServerDesktopImportDialog.tsx +0 -203
  394. package/src/components/MCPServerDialogCopy.tsx +0 -15
  395. package/src/components/MCPServerMultiselectDialog.tsx +0 -133
  396. package/src/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.tsx +0 -149
  397. package/src/components/ManagedSettingsSecurityDialog/utils.ts +0 -144
  398. package/src/components/Markdown.tsx +0 -236
  399. package/src/components/MarkdownTable.tsx +0 -322
  400. package/src/components/MemoryUsageIndicator.tsx +0 -37
  401. package/src/components/Message.tsx +0 -627
  402. package/src/components/MessageModel.tsx +0 -43
  403. package/src/components/MessageResponse.tsx +0 -78
  404. package/src/components/MessageRow.tsx +0 -383
  405. package/src/components/MessageSelector.tsx +0 -831
  406. package/src/components/MessageTimestamp.tsx +0 -63
  407. package/src/components/Messages.tsx +0 -834
  408. package/src/components/ModelPicker.tsx +0 -448
  409. package/src/components/NativeAutoUpdater.tsx +0 -193
  410. package/src/components/NotebookEditToolUseRejectedMessage.tsx +0 -92
  411. package/src/components/OffscreenFreeze.tsx +0 -44
  412. package/src/components/Onboarding.tsx +0 -244
  413. package/src/components/OutputStylePicker.tsx +0 -112
  414. package/src/components/PackageManagerAutoUpdater.tsx +0 -104
  415. package/src/components/Passes/Passes.tsx +0 -184
  416. package/src/components/PrBadge.tsx +0 -97
  417. package/src/components/PressEnterToContinue.tsx +0 -15
  418. package/src/components/PromptInput/HistorySearchInput.tsx +0 -51
  419. package/src/components/PromptInput/IssueFlagBanner.tsx +0 -12
  420. package/src/components/PromptInput/Notifications.tsx +0 -332
  421. package/src/components/PromptInput/PromptInput.tsx +0 -2339
  422. package/src/components/PromptInput/PromptInputFooter.tsx +0 -191
  423. package/src/components/PromptInput/PromptInputFooterLeftSide.tsx +0 -517
  424. package/src/components/PromptInput/PromptInputFooterSuggestions.tsx +0 -293
  425. package/src/components/PromptInput/PromptInputHelpMenu.tsx +0 -358
  426. package/src/components/PromptInput/PromptInputModeIndicator.tsx +0 -93
  427. package/src/components/PromptInput/PromptInputQueuedCommands.tsx +0 -117
  428. package/src/components/PromptInput/PromptInputStashNotice.tsx +0 -25
  429. package/src/components/PromptInput/SandboxPromptFooterHint.tsx +0 -64
  430. package/src/components/PromptInput/ShimmeredInput.tsx +0 -143
  431. package/src/components/PromptInput/VoiceIndicator.tsx +0 -137
  432. package/src/components/PromptInput/inputModes.ts +0 -33
  433. package/src/components/PromptInput/inputPaste.ts +0 -90
  434. package/src/components/PromptInput/useMaybeTruncateInput.ts +0 -58
  435. package/src/components/PromptInput/usePromptInputPlaceholder.ts +0 -76
  436. package/src/components/PromptInput/useShowFastIconHint.ts +0 -31
  437. package/src/components/PromptInput/useSwarmBanner.ts +0 -155
  438. package/src/components/PromptInput/utils.ts +0 -60
  439. package/src/components/QuickOpenDialog.tsx +0 -244
  440. package/src/components/RemoteCallout.tsx +0 -76
  441. package/src/components/RemoteEnvironmentDialog.tsx +0 -340
  442. package/src/components/ResumeTask.tsx +0 -268
  443. package/src/components/SandboxViolationExpandedView.tsx +0 -99
  444. package/src/components/ScrollKeybindingHandler.tsx +0 -1012
  445. package/src/components/SearchBox.tsx +0 -72
  446. package/src/components/SentryErrorBoundary.ts +0 -28
  447. package/src/components/SessionBackgroundHint.tsx +0 -108
  448. package/src/components/SessionPreview.tsx +0 -194
  449. package/src/components/Settings/Config.tsx +0 -1822
  450. package/src/components/Settings/Settings.tsx +0 -137
  451. package/src/components/Settings/Status.tsx +0 -241
  452. package/src/components/Settings/Usage.tsx +0 -377
  453. package/src/components/ShowInIDEPrompt.tsx +0 -170
  454. package/src/components/SkillImprovementSurvey.tsx +0 -152
  455. package/src/components/Spinner/FlashingChar.tsx +0 -61
  456. package/src/components/Spinner/GlimmerMessage.tsx +0 -328
  457. package/src/components/Spinner/ShimmerChar.tsx +0 -36
  458. package/src/components/Spinner/SpinnerAnimationRow.tsx +0 -265
  459. package/src/components/Spinner/SpinnerGlyph.tsx +0 -80
  460. package/src/components/Spinner/TeammateSpinnerLine.tsx +0 -233
  461. package/src/components/Spinner/TeammateSpinnerTree.tsx +0 -272
  462. package/src/components/Spinner/index.ts +0 -10
  463. package/src/components/Spinner/teammateSelectHint.ts +0 -1
  464. package/src/components/Spinner/types.ts +0 -2
  465. package/src/components/Spinner/useShimmerAnimation.ts +0 -31
  466. package/src/components/Spinner/useStalledAnimation.ts +0 -75
  467. package/src/components/Spinner/utils.ts +0 -84
  468. package/src/components/Spinner.tsx +0 -562
  469. package/src/components/Stats.tsx +0 -1228
  470. package/src/components/StatusLine.tsx +0 -324
  471. package/src/components/StatusNotices.tsx +0 -55
  472. package/src/components/StructuredDiff/Fallback.tsx +0 -487
  473. package/src/components/StructuredDiff/colorDiff.ts +0 -37
  474. package/src/components/StructuredDiff.tsx +0 -190
  475. package/src/components/StructuredDiffList.tsx +0 -30
  476. package/src/components/TagTabs.tsx +0 -139
  477. package/src/components/TaskListV2.tsx +0 -378
  478. package/src/components/TeammateViewHeader.tsx +0 -82
  479. package/src/components/TeleportError.tsx +0 -189
  480. package/src/components/TeleportProgress.tsx +0 -140
  481. package/src/components/TeleportRepoMismatchDialog.tsx +0 -104
  482. package/src/components/TeleportResumeWrapper.tsx +0 -167
  483. package/src/components/TeleportStash.tsx +0 -116
  484. package/src/components/TextInput.tsx +0 -124
  485. package/src/components/ThemePicker.tsx +0 -333
  486. package/src/components/ThinkingToggle.tsx +0 -153
  487. package/src/components/TokenWarning.tsx +0 -179
  488. package/src/components/ToolUseLoader.tsx +0 -42
  489. package/src/components/TrustDialog/TrustDialog.tsx +0 -290
  490. package/src/components/TrustDialog/utils.ts +0 -245
  491. package/src/components/ValidationErrorsList.tsx +0 -148
  492. package/src/components/VimTextInput.tsx +0 -140
  493. package/src/components/VirtualMessageList.tsx +0 -1082
  494. package/src/components/WorkflowMultiselectDialog.tsx +0 -128
  495. package/src/components/WorktreeExitDialog.tsx +0 -231
  496. package/src/components/agents/AgentDetail.tsx +0 -220
  497. package/src/components/agents/AgentEditor.tsx +0 -178
  498. package/src/components/agents/AgentNavigationFooter.tsx +0 -26
  499. package/src/components/agents/AgentsList.tsx +0 -440
  500. package/src/components/agents/AgentsMenu.tsx +0 -800
  501. package/src/components/agents/ColorPicker.tsx +0 -112
  502. package/src/components/agents/ModelSelector.tsx +0 -68
  503. package/src/components/agents/SnapshotUpdateDialog.ts +0 -2
  504. package/src/components/agents/ToolSelector.tsx +0 -562
  505. package/src/components/agents/agentFileUtils.ts +0 -272
  506. package/src/components/agents/generateAgent.ts +0 -197
  507. package/src/components/agents/new-agent-creation/CreateAgentWizard.tsx +0 -97
  508. package/src/components/agents/new-agent-creation/types.ts +0 -1
  509. package/src/components/agents/new-agent-creation/wizard-steps/ColorStep.tsx +0 -84
  510. package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStep.tsx +0 -378
  511. package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.tsx +0 -74
  512. package/src/components/agents/new-agent-creation/wizard-steps/DescriptionStep.tsx +0 -123
  513. package/src/components/agents/new-agent-creation/wizard-steps/GenerateStep.tsx +0 -143
  514. package/src/components/agents/new-agent-creation/wizard-steps/LocationStep.tsx +0 -80
  515. package/src/components/agents/new-agent-creation/wizard-steps/MemoryStep.tsx +0 -113
  516. package/src/components/agents/new-agent-creation/wizard-steps/MethodStep.tsx +0 -80
  517. package/src/components/agents/new-agent-creation/wizard-steps/ModelStep.tsx +0 -52
  518. package/src/components/agents/new-agent-creation/wizard-steps/PromptStep.tsx +0 -128
  519. package/src/components/agents/new-agent-creation/wizard-steps/ToolsStep.tsx +0 -61
  520. package/src/components/agents/new-agent-creation/wizard-steps/TypeStep.tsx +0 -103
  521. package/src/components/agents/types.ts +0 -27
  522. package/src/components/agents/utils.ts +0 -18
  523. package/src/components/agents/validateAgent.ts +0 -109
  524. package/src/components/design-system/Byline.tsx +0 -77
  525. package/src/components/design-system/Dialog.tsx +0 -138
  526. package/src/components/design-system/Divider.tsx +0 -149
  527. package/src/components/design-system/FuzzyPicker.tsx +0 -312
  528. package/src/components/design-system/KeyboardShortcutHint.tsx +0 -81
  529. package/src/components/design-system/ListItem.tsx +0 -244
  530. package/src/components/design-system/LoadingState.tsx +0 -94
  531. package/src/components/design-system/Pane.tsx +0 -77
  532. package/src/components/design-system/ProgressBar.tsx +0 -86
  533. package/src/components/design-system/Ratchet.tsx +0 -80
  534. package/src/components/design-system/StatusIcon.tsx +0 -95
  535. package/src/components/design-system/Tabs.tsx +0 -340
  536. package/src/components/design-system/ThemeProvider.tsx +0 -170
  537. package/src/components/design-system/ThemedBox.tsx +0 -156
  538. package/src/components/design-system/ThemedText.tsx +0 -124
  539. package/src/components/design-system/color.ts +0 -30
  540. package/src/components/diff/DiffDetailView.tsx +0 -281
  541. package/src/components/diff/DiffDialog.tsx +0 -383
  542. package/src/components/diff/DiffFileList.tsx +0 -292
  543. package/src/components/grove/Grove.tsx +0 -463
  544. package/src/components/hooks/HooksConfigMenu.tsx +0 -578
  545. package/src/components/hooks/PromptDialog.tsx +0 -90
  546. package/src/components/hooks/SelectEventMode.tsx +0 -127
  547. package/src/components/hooks/SelectHookMode.tsx +0 -112
  548. package/src/components/hooks/SelectMatcherMode.tsx +0 -144
  549. package/src/components/hooks/ViewHookMode.tsx +0 -199
  550. package/src/components/mcp/CapabilitiesSection.tsx +0 -61
  551. package/src/components/mcp/ElicitationDialog.tsx +0 -1169
  552. package/src/components/mcp/MCPAgentServerMenu.tsx +0 -183
  553. package/src/components/mcp/MCPListPanel.tsx +0 -504
  554. package/src/components/mcp/MCPReconnect.tsx +0 -167
  555. package/src/components/mcp/MCPRemoteServerMenu.tsx +0 -649
  556. package/src/components/mcp/MCPSettings.tsx +0 -398
  557. package/src/components/mcp/MCPStdioServerMenu.tsx +0 -177
  558. package/src/components/mcp/MCPToolDetailView.tsx +0 -212
  559. package/src/components/mcp/MCPToolListView.tsx +0 -141
  560. package/src/components/mcp/McpParsingWarnings.tsx +0 -213
  561. package/src/components/mcp/index.ts +0 -9
  562. package/src/components/mcp/types.ts +0 -7
  563. package/src/components/mcp/utils/reconnectHelpers.tsx +0 -49
  564. package/src/components/memory/MemoryFileSelector.tsx +0 -438
  565. package/src/components/memory/MemoryUpdateNotification.tsx +0 -45
  566. package/src/components/messageActions.tsx +0 -450
  567. package/src/components/messages/AdvisorMessage.tsx +0 -158
  568. package/src/components/messages/AssistantRedactedThinkingMessage.tsx +0 -31
  569. package/src/components/messages/AssistantTextMessage.tsx +0 -270
  570. package/src/components/messages/AssistantThinkingMessage.tsx +0 -86
  571. package/src/components/messages/AssistantToolUseMessage.tsx +0 -368
  572. package/src/components/messages/AttachmentMessage.tsx +0 -536
  573. package/src/components/messages/CollapsedReadSearchContent.tsx +0 -484
  574. package/src/components/messages/CompactBoundaryMessage.tsx +0 -18
  575. package/src/components/messages/GroupedToolUseContent.tsx +0 -58
  576. package/src/components/messages/HighlightedThinkingText.tsx +0 -162
  577. package/src/components/messages/HookProgressMessage.tsx +0 -116
  578. package/src/components/messages/PlanApprovalMessage.tsx +0 -222
  579. package/src/components/messages/RateLimitMessage.tsx +0 -161
  580. package/src/components/messages/ShutdownMessage.tsx +0 -132
  581. package/src/components/messages/SnipBoundaryMessage.ts +0 -2
  582. package/src/components/messages/SystemAPIErrorMessage.tsx +0 -141
  583. package/src/components/messages/SystemTextMessage.tsx +0 -827
  584. package/src/components/messages/TaskAssignmentMessage.tsx +0 -76
  585. package/src/components/messages/UserAgentNotificationMessage.tsx +0 -83
  586. package/src/components/messages/UserBashInputMessage.tsx +0 -58
  587. package/src/components/messages/UserBashOutputMessage.tsx +0 -54
  588. package/src/components/messages/UserChannelMessage.tsx +0 -137
  589. package/src/components/messages/UserCommandMessage.tsx +0 -108
  590. package/src/components/messages/UserCrossSessionMessage.ts +0 -2
  591. package/src/components/messages/UserForkBoilerplateMessage.ts +0 -2
  592. package/src/components/messages/UserGitHubWebhookMessage.ts +0 -2
  593. package/src/components/messages/UserImageMessage.tsx +0 -59
  594. package/src/components/messages/UserLocalCommandOutputMessage.tsx +0 -167
  595. package/src/components/messages/UserMemoryInputMessage.tsx +0 -75
  596. package/src/components/messages/UserPlanMessage.tsx +0 -42
  597. package/src/components/messages/UserPromptMessage.tsx +0 -80
  598. package/src/components/messages/UserResourceUpdateMessage.tsx +0 -121
  599. package/src/components/messages/UserTeammateMessage.tsx +0 -206
  600. package/src/components/messages/UserTextMessage.tsx +0 -275
  601. package/src/components/messages/UserToolResultMessage/RejectedPlanMessage.tsx +0 -31
  602. package/src/components/messages/UserToolResultMessage/RejectedToolUseMessage.tsx +0 -16
  603. package/src/components/messages/UserToolResultMessage/UserToolCanceledMessage.tsx +0 -16
  604. package/src/components/messages/UserToolResultMessage/UserToolErrorMessage.tsx +0 -103
  605. package/src/components/messages/UserToolResultMessage/UserToolRejectMessage.tsx +0 -95
  606. package/src/components/messages/UserToolResultMessage/UserToolResultMessage.tsx +0 -106
  607. package/src/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx +0 -104
  608. package/src/components/messages/UserToolResultMessage/utils.tsx +0 -44
  609. package/src/components/messages/nullRenderingAttachments.ts +0 -70
  610. package/src/components/messages/teamMemCollapsed.tsx +0 -140
  611. package/src/components/messages/teamMemSaved.ts +0 -19
  612. package/src/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.tsx +0 -645
  613. package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewBox.tsx +0 -229
  614. package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewQuestionView.tsx +0 -328
  615. package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionNavigationBar.tsx +0 -178
  616. package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionView.tsx +0 -465
  617. package/src/components/permissions/AskUserQuestionPermissionRequest/SubmitQuestionsView.tsx +0 -144
  618. package/src/components/permissions/AskUserQuestionPermissionRequest/use-multiple-choice-state.ts +0 -179
  619. package/src/components/permissions/BashPermissionRequest/BashPermissionRequest.tsx +0 -482
  620. package/src/components/permissions/BashPermissionRequest/bashToolUseOptions.tsx +0 -147
  621. package/src/components/permissions/ComputerUseApproval/ComputerUseApproval.tsx +0 -441
  622. package/src/components/permissions/EnterPlanModePermissionRequest/EnterPlanModePermissionRequest.tsx +0 -122
  623. package/src/components/permissions/ExitPlanModePermissionRequest/ExitPlanModePermissionRequest.tsx +0 -768
  624. package/src/components/permissions/FallbackPermissionRequest.tsx +0 -333
  625. package/src/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.tsx +0 -182
  626. package/src/components/permissions/FilePermissionDialog/FilePermissionDialog.tsx +0 -204
  627. package/src/components/permissions/FilePermissionDialog/ideDiffConfig.ts +0 -42
  628. package/src/components/permissions/FilePermissionDialog/permissionOptions.tsx +0 -177
  629. package/src/components/permissions/FilePermissionDialog/useFilePermissionDialog.ts +0 -212
  630. package/src/components/permissions/FilePermissionDialog/usePermissionHandler.ts +0 -185
  631. package/src/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.tsx +0 -161
  632. package/src/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.tsx +0 -89
  633. package/src/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.tsx +0 -115
  634. package/src/components/permissions/MonitorPermissionRequest/MonitorPermissionRequest.ts +0 -2
  635. package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditPermissionRequest.tsx +0 -166
  636. package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditToolDiff.tsx +0 -235
  637. package/src/components/permissions/PermissionDecisionDebugInfo.tsx +0 -460
  638. package/src/components/permissions/PermissionDialog.tsx +0 -72
  639. package/src/components/permissions/PermissionExplanation.tsx +0 -272
  640. package/src/components/permissions/PermissionPrompt.tsx +0 -336
  641. package/src/components/permissions/PermissionRequest.tsx +0 -217
  642. package/src/components/permissions/PermissionRequestTitle.tsx +0 -66
  643. package/src/components/permissions/PermissionRuleExplanation.tsx +0 -121
  644. package/src/components/permissions/PowerShellPermissionRequest/PowerShellPermissionRequest.tsx +0 -235
  645. package/src/components/permissions/PowerShellPermissionRequest/powershellToolUseOptions.tsx +0 -91
  646. package/src/components/permissions/ReviewArtifactPermissionRequest/ReviewArtifactPermissionRequest.ts +0 -2
  647. package/src/components/permissions/SandboxPermissionRequest.tsx +0 -163
  648. package/src/components/permissions/SedEditPermissionRequest/SedEditPermissionRequest.tsx +0 -230
  649. package/src/components/permissions/SkillPermissionRequest/SkillPermissionRequest.tsx +0 -369
  650. package/src/components/permissions/WebFetchPermissionRequest/WebFetchPermissionRequest.tsx +0 -258
  651. package/src/components/permissions/WorkerBadge.tsx +0 -49
  652. package/src/components/permissions/WorkerPendingPermission.tsx +0 -105
  653. package/src/components/permissions/hooks.ts +0 -209
  654. package/src/components/permissions/rules/AddPermissionRules.tsx +0 -180
  655. package/src/components/permissions/rules/AddWorkspaceDirectory.tsx +0 -340
  656. package/src/components/permissions/rules/PermissionRuleDescription.tsx +0 -76
  657. package/src/components/permissions/rules/PermissionRuleInput.tsx +0 -138
  658. package/src/components/permissions/rules/PermissionRuleList.tsx +0 -1179
  659. package/src/components/permissions/rules/RecentDenialsTab.tsx +0 -207
  660. package/src/components/permissions/rules/RemoveWorkspaceDirectory.tsx +0 -110
  661. package/src/components/permissions/rules/WorkspaceTab.tsx +0 -150
  662. package/src/components/permissions/shellPermissionHelpers.tsx +0 -164
  663. package/src/components/permissions/useShellPermissionFeedback.ts +0 -148
  664. package/src/components/permissions/utils.ts +0 -25
  665. package/src/components/sandbox/SandboxConfigTab.tsx +0 -45
  666. package/src/components/sandbox/SandboxDependenciesTab.tsx +0 -120
  667. package/src/components/sandbox/SandboxDoctorSection.tsx +0 -46
  668. package/src/components/sandbox/SandboxOverridesTab.tsx +0 -193
  669. package/src/components/sandbox/SandboxSettings.tsx +0 -296
  670. package/src/components/shell/ExpandShellOutputContext.tsx +0 -36
  671. package/src/components/shell/OutputLine.tsx +0 -118
  672. package/src/components/shell/ShellProgressMessage.tsx +0 -150
  673. package/src/components/shell/ShellTimeDisplay.tsx +0 -74
  674. package/src/components/skills/SkillsMenu.tsx +0 -237
  675. package/src/components/tasks/AsyncAgentDetailDialog.tsx +0 -229
  676. package/src/components/tasks/BackgroundTask.tsx +0 -345
  677. package/src/components/tasks/BackgroundTaskStatus.tsx +0 -429
  678. package/src/components/tasks/BackgroundTasksDialog.tsx +0 -652
  679. package/src/components/tasks/DreamDetailDialog.tsx +0 -251
  680. package/src/components/tasks/InProcessTeammateDetailDialog.tsx +0 -266
  681. package/src/components/tasks/MonitorMcpDetailDialog.ts +0 -2
  682. package/src/components/tasks/RemoteSessionDetailDialog.tsx +0 -904
  683. package/src/components/tasks/RemoteSessionProgress.tsx +0 -243
  684. package/src/components/tasks/ShellDetailDialog.tsx +0 -404
  685. package/src/components/tasks/ShellProgress.tsx +0 -87
  686. package/src/components/tasks/WorkflowDetailDialog.ts +0 -2
  687. package/src/components/tasks/renderToolActivity.tsx +0 -33
  688. package/src/components/tasks/taskStatusUtils.tsx +0 -107
  689. package/src/components/teams/TeamStatus.tsx +0 -80
  690. package/src/components/teams/TeamsDialog.tsx +0 -715
  691. package/src/components/ui/OrderedList.tsx +0 -71
  692. package/src/components/ui/OrderedListItem.tsx +0 -45
  693. package/src/components/ui/TreeSelect.tsx +0 -397
  694. package/src/components/ui/option.ts +0 -4
  695. package/src/components/wizard/WizardDialogLayout.tsx +0 -65
  696. package/src/components/wizard/WizardNavigationFooter.tsx +0 -24
  697. package/src/components/wizard/WizardProvider.tsx +0 -213
  698. package/src/components/wizard/index.ts +0 -9
  699. package/src/components/wizard/types.ts +0 -3
  700. package/src/components/wizard/useWizard.ts +0 -13
  701. package/src/constants/apiLimits.ts +0 -94
  702. package/src/constants/betas.ts +0 -52
  703. package/src/constants/common.ts +0 -33
  704. package/src/constants/cyberRiskInstruction.ts +0 -24
  705. package/src/constants/errorIds.ts +0 -15
  706. package/src/constants/figures.ts +0 -45
  707. package/src/constants/files.ts +0 -156
  708. package/src/constants/github-app.ts +0 -144
  709. package/src/constants/keys.ts +0 -11
  710. package/src/constants/messages.ts +0 -1
  711. package/src/constants/oauth.ts +0 -234
  712. package/src/constants/outputStyles.ts +0 -216
  713. package/src/constants/product.ts +0 -76
  714. package/src/constants/prompts.ts +0 -915
  715. package/src/constants/querySource.ts +0 -1
  716. package/src/constants/spinnerVerbs.ts +0 -204
  717. package/src/constants/system.ts +0 -95
  718. package/src/constants/systemPromptSections.ts +0 -68
  719. package/src/constants/toolLimits.ts +0 -56
  720. package/src/constants/tools.ts +0 -112
  721. package/src/constants/turnCompletionVerbs.ts +0 -12
  722. package/src/constants/xml.ts +0 -86
  723. package/src/context/QueuedMessageContext.tsx +0 -63
  724. package/src/context/fpsMetrics.tsx +0 -30
  725. package/src/context/mailbox.tsx +0 -38
  726. package/src/context/modalContext.tsx +0 -58
  727. package/src/context/notifications.tsx +0 -240
  728. package/src/context/overlayContext.tsx +0 -151
  729. package/src/context/promptOverlayContext.tsx +0 -125
  730. package/src/context/stats.tsx +0 -220
  731. package/src/context/voice.tsx +0 -88
  732. package/src/context.ts +0 -189
  733. package/src/coordinator/coordinatorMode.ts +0 -369
  734. package/src/coordinator/workerAgent.ts +0 -2
  735. package/src/cost-tracker.ts +0 -323
  736. package/src/costHook.ts +0 -22
  737. package/src/daemon/main.ts +0 -2
  738. package/src/daemon/workerRegistry.ts +0 -2
  739. package/src/dialogLaunchers.tsx +0 -133
  740. package/src/engine/CostMapper.ts +0 -57
  741. package/src/engine/MessageMapper.ts +0 -276
  742. package/src/engine/ModelResolver.ts +0 -153
  743. package/src/engine/PermissionBridge.ts +0 -114
  744. package/src/engine/PiAgentAdapter.ts +0 -299
  745. package/src/engine/SubagentTools.ts +0 -92
  746. package/src/engine/ToolAdapter.ts +0 -122
  747. package/src/engine/engine-backup/CostMapper.ts +0 -57
  748. package/src/engine/engine-backup/MessageMapper.ts +0 -276
  749. package/src/engine/engine-backup/ModelResolver.ts +0 -153
  750. package/src/engine/engine-backup/PermissionBridge.ts +0 -114
  751. package/src/engine/engine-backup/PiAgentAdapter.ts +0 -299
  752. package/src/engine/engine-backup/SubagentTools.ts +0 -92
  753. package/src/engine/engine-backup/ToolAdapter.ts +0 -122
  754. package/src/engine/engine-backup/index.ts +0 -14
  755. package/src/engine/engine-backup/piQueryBridge.ts +0 -396
  756. package/src/engine/index.ts +0 -14
  757. package/src/engine/piQueryBridge.ts +0 -396
  758. package/src/entrypoints/agentSdkTypes.ts +0 -443
  759. package/src/entrypoints/cli.tsx +0 -303
  760. package/src/entrypoints/init.ts +0 -340
  761. package/src/entrypoints/mcp.ts +0 -196
  762. package/src/entrypoints/sandboxTypes.ts +0 -156
  763. package/src/entrypoints/sdk/controlSchemas.ts +0 -663
  764. package/src/entrypoints/sdk/controlTypes.ts +0 -12
  765. package/src/entrypoints/sdk/coreSchemas.ts +0 -1889
  766. package/src/entrypoints/sdk/coreTypes.generated.ts +0 -1
  767. package/src/entrypoints/sdk/coreTypes.ts +0 -62
  768. package/src/entrypoints/sdk/runtimeTypes.ts +0 -18
  769. package/src/entrypoints/sdk/sdkUtilityTypes.ts +0 -1
  770. package/src/entrypoints/sdk/settingsTypes.generated.ts +0 -1
  771. package/src/entrypoints/sdk/toolTypes.ts +0 -2
  772. package/src/environment-runner/main.ts +0 -2
  773. package/src/history.ts +0 -464
  774. package/src/hooks/fileSuggestions.ts +0 -811
  775. package/src/hooks/notifs/useAntOrgWarningNotification.ts +0 -2
  776. package/src/hooks/notifs/useAutoModeUnavailableNotification.ts +0 -56
  777. package/src/hooks/notifs/useCanSwitchToExistingSubscription.tsx +0 -60
  778. package/src/hooks/notifs/useDeprecationWarningNotification.tsx +0 -44
  779. package/src/hooks/notifs/useFastModeNotification.tsx +0 -162
  780. package/src/hooks/notifs/useIDEStatusIndicator.tsx +0 -186
  781. package/src/hooks/notifs/useInstallMessages.tsx +0 -26
  782. package/src/hooks/notifs/useLspInitializationNotification.tsx +0 -143
  783. package/src/hooks/notifs/useMcpConnectivityStatus.tsx +0 -88
  784. package/src/hooks/notifs/useModelMigrationNotifications.tsx +0 -52
  785. package/src/hooks/notifs/useNpmDeprecationNotification.tsx +0 -25
  786. package/src/hooks/notifs/usePluginAutoupdateNotification.tsx +0 -83
  787. package/src/hooks/notifs/usePluginInstallationStatus.tsx +0 -128
  788. package/src/hooks/notifs/useRateLimitWarningNotification.tsx +0 -114
  789. package/src/hooks/notifs/useSettingsErrors.tsx +0 -69
  790. package/src/hooks/notifs/useStartupNotification.ts +0 -41
  791. package/src/hooks/notifs/useTeammateShutdownNotification.ts +0 -78
  792. package/src/hooks/renderPlaceholder.ts +0 -51
  793. package/src/hooks/toolPermission/PermissionContext.ts +0 -388
  794. package/src/hooks/toolPermission/handlers/coordinatorHandler.ts +0 -65
  795. package/src/hooks/toolPermission/handlers/interactiveHandler.ts +0 -536
  796. package/src/hooks/toolPermission/handlers/swarmWorkerHandler.ts +0 -159
  797. package/src/hooks/toolPermission/permissionLogging.ts +0 -238
  798. package/src/hooks/unifiedSuggestions.ts +0 -202
  799. package/src/hooks/useAfterFirstRender.ts +0 -17
  800. package/src/hooks/useApiKeyVerification.ts +0 -84
  801. package/src/hooks/useArrowKeyHistory.tsx +0 -229
  802. package/src/hooks/useAssistantHistory.ts +0 -250
  803. package/src/hooks/useAwaySummary.ts +0 -125
  804. package/src/hooks/useBackgroundTaskNavigation.ts +0 -251
  805. package/src/hooks/useBlink.ts +0 -34
  806. package/src/hooks/useCanUseTool.tsx +0 -204
  807. package/src/hooks/useCancelRequest.ts +0 -276
  808. package/src/hooks/useChromeExtensionNotification.tsx +0 -50
  809. package/src/hooks/useClaudeCodeHintRecommendation.tsx +0 -129
  810. package/src/hooks/useClipboardImageHint.ts +0 -77
  811. package/src/hooks/useCommandKeybindings.tsx +0 -108
  812. package/src/hooks/useCommandQueue.ts +0 -15
  813. package/src/hooks/useCopyOnSelect.ts +0 -98
  814. package/src/hooks/useDeferredHookMessages.ts +0 -46
  815. package/src/hooks/useDiffData.ts +0 -110
  816. package/src/hooks/useDiffInIDE.ts +0 -379
  817. package/src/hooks/useDirectConnect.ts +0 -229
  818. package/src/hooks/useDoublePress.ts +0 -62
  819. package/src/hooks/useDynamicConfig.ts +0 -22
  820. package/src/hooks/useElapsedTime.ts +0 -37
  821. package/src/hooks/useExitOnCtrlCD.ts +0 -95
  822. package/src/hooks/useExitOnCtrlCDWithKeybindings.ts +0 -24
  823. package/src/hooks/useFileHistorySnapshotInit.ts +0 -25
  824. package/src/hooks/useGlobalKeybindings.tsx +0 -249
  825. package/src/hooks/useHistorySearch.ts +0 -303
  826. package/src/hooks/useIDEIntegration.tsx +0 -70
  827. package/src/hooks/useIdeAtMentioned.ts +0 -76
  828. package/src/hooks/useIdeConnectionStatus.ts +0 -33
  829. package/src/hooks/useIdeLogging.ts +0 -41
  830. package/src/hooks/useIdeSelection.ts +0 -150
  831. package/src/hooks/useInboxPoller.ts +0 -969
  832. package/src/hooks/useInputBuffer.ts +0 -132
  833. package/src/hooks/useIssueFlagBanner.ts +0 -133
  834. package/src/hooks/useLogMessages.ts +0 -119
  835. package/src/hooks/useLspPluginRecommendation.tsx +0 -194
  836. package/src/hooks/useMailboxBridge.ts +0 -21
  837. package/src/hooks/useMainLoopModel.ts +0 -34
  838. package/src/hooks/useManagePlugins.ts +0 -304
  839. package/src/hooks/useMemoryUsage.ts +0 -39
  840. package/src/hooks/useMergedClients.ts +0 -23
  841. package/src/hooks/useMergedCommands.ts +0 -15
  842. package/src/hooks/useMergedTools.ts +0 -44
  843. package/src/hooks/useMinDisplayTime.ts +0 -35
  844. package/src/hooks/useNotifyAfterTimeout.ts +0 -65
  845. package/src/hooks/useOfficialMarketplaceNotification.tsx +0 -48
  846. package/src/hooks/usePasteHandler.ts +0 -285
  847. package/src/hooks/usePluginRecommendationBase.tsx +0 -105
  848. package/src/hooks/usePrStatus.ts +0 -106
  849. package/src/hooks/usePromptSuggestion.ts +0 -177
  850. package/src/hooks/usePromptsFromClaudeInChrome.tsx +0 -71
  851. package/src/hooks/useQueueProcessor.ts +0 -68
  852. package/src/hooks/useRemoteSession.ts +0 -605
  853. package/src/hooks/useReplBridge.tsx +0 -723
  854. package/src/hooks/useSSHSession.ts +0 -241
  855. package/src/hooks/useScheduledTasks.ts +0 -139
  856. package/src/hooks/useSearchInput.ts +0 -364
  857. package/src/hooks/useSessionBackgrounding.ts +0 -158
  858. package/src/hooks/useSettings.ts +0 -17
  859. package/src/hooks/useSettingsChange.ts +0 -25
  860. package/src/hooks/useSkillImprovementSurvey.ts +0 -105
  861. package/src/hooks/useSkillsChange.ts +0 -62
  862. package/src/hooks/useSwarmInitialization.ts +0 -81
  863. package/src/hooks/useSwarmPermissionPoller.ts +0 -330
  864. package/src/hooks/useTaskListWatcher.ts +0 -221
  865. package/src/hooks/useTasksV2.ts +0 -250
  866. package/src/hooks/useTeammateViewAutoExit.ts +0 -63
  867. package/src/hooks/useTeleportResume.tsx +0 -85
  868. package/src/hooks/useTerminalSize.ts +0 -15
  869. package/src/hooks/useTextInput.ts +0 -529
  870. package/src/hooks/useTimeout.ts +0 -14
  871. package/src/hooks/useTurnDiffs.ts +0 -213
  872. package/src/hooks/useTypeahead.tsx +0 -1385
  873. package/src/hooks/useUpdateNotification.ts +0 -34
  874. package/src/hooks/useVimInput.ts +0 -316
  875. package/src/hooks/useVirtualScroll.ts +0 -721
  876. package/src/hooks/useVoice.ts +0 -1144
  877. package/src/hooks/useVoiceEnabled.ts +0 -25
  878. package/src/hooks/useVoiceIntegration.tsx +0 -677
  879. package/src/ink/Ansi.tsx +0 -292
  880. package/src/ink/bidi.ts +0 -139
  881. package/src/ink/clearTerminal.ts +0 -74
  882. package/src/ink/colorize.ts +0 -231
  883. package/src/ink/components/AlternateScreen.tsx +0 -80
  884. package/src/ink/components/App.tsx +0 -658
  885. package/src/ink/components/AppContext.ts +0 -21
  886. package/src/ink/components/Box.tsx +0 -214
  887. package/src/ink/components/Button.tsx +0 -192
  888. package/src/ink/components/ClockContext.tsx +0 -112
  889. package/src/ink/components/CursorDeclarationContext.ts +0 -32
  890. package/src/ink/components/ErrorOverview.tsx +0 -109
  891. package/src/ink/components/Link.tsx +0 -42
  892. package/src/ink/components/Newline.tsx +0 -39
  893. package/src/ink/components/NoSelect.tsx +0 -68
  894. package/src/ink/components/RawAnsi.tsx +0 -57
  895. package/src/ink/components/ScrollBox.tsx +0 -237
  896. package/src/ink/components/Spacer.tsx +0 -20
  897. package/src/ink/components/StdinContext.ts +0 -49
  898. package/src/ink/components/TerminalFocusContext.tsx +0 -52
  899. package/src/ink/components/TerminalSizeContext.tsx +0 -7
  900. package/src/ink/components/Text.tsx +0 -254
  901. package/src/ink/constants.ts +0 -2
  902. package/src/ink/cursor.ts +0 -1
  903. package/src/ink/devtools.ts +0 -2
  904. package/src/ink/dom.ts +0 -484
  905. package/src/ink/events/click-event.ts +0 -38
  906. package/src/ink/events/dispatcher.ts +0 -233
  907. package/src/ink/events/emitter.ts +0 -39
  908. package/src/ink/events/event-handlers.ts +0 -73
  909. package/src/ink/events/event.ts +0 -11
  910. package/src/ink/events/focus-event.ts +0 -21
  911. package/src/ink/events/input-event.ts +0 -205
  912. package/src/ink/events/keyboard-event.ts +0 -51
  913. package/src/ink/events/paste-event.ts +0 -1
  914. package/src/ink/events/resize-event.ts +0 -1
  915. package/src/ink/events/terminal-event.ts +0 -107
  916. package/src/ink/events/terminal-focus-event.ts +0 -19
  917. package/src/ink/focus.ts +0 -181
  918. package/src/ink/frame.ts +0 -124
  919. package/src/ink/get-max-width.ts +0 -27
  920. package/src/ink/global.d.ts +0 -1
  921. package/src/ink/hit-test.ts +0 -130
  922. package/src/ink/hooks/use-animation-frame.ts +0 -57
  923. package/src/ink/hooks/use-app.ts +0 -8
  924. package/src/ink/hooks/use-declared-cursor.ts +0 -73
  925. package/src/ink/hooks/use-input.ts +0 -92
  926. package/src/ink/hooks/use-interval.ts +0 -67
  927. package/src/ink/hooks/use-search-highlight.ts +0 -53
  928. package/src/ink/hooks/use-selection.ts +0 -104
  929. package/src/ink/hooks/use-stdin.ts +0 -8
  930. package/src/ink/hooks/use-tab-status.ts +0 -72
  931. package/src/ink/hooks/use-terminal-focus.ts +0 -16
  932. package/src/ink/hooks/use-terminal-title.ts +0 -31
  933. package/src/ink/hooks/use-terminal-viewport.ts +0 -96
  934. package/src/ink/ink.tsx +0 -1723
  935. package/src/ink/instances.ts +0 -10
  936. package/src/ink/layout/engine.ts +0 -6
  937. package/src/ink/layout/geometry.ts +0 -97
  938. package/src/ink/layout/node.ts +0 -152
  939. package/src/ink/layout/yoga.ts +0 -308
  940. package/src/ink/line-width-cache.ts +0 -24
  941. package/src/ink/log-update.ts +0 -773
  942. package/src/ink/measure-element.ts +0 -23
  943. package/src/ink/measure-text.ts +0 -47
  944. package/src/ink/node-cache.ts +0 -54
  945. package/src/ink/optimizer.ts +0 -93
  946. package/src/ink/output.ts +0 -797
  947. package/src/ink/parse-keypress.ts +0 -801
  948. package/src/ink/reconciler.ts +0 -512
  949. package/src/ink/render-border.ts +0 -231
  950. package/src/ink/render-node-to-output.ts +0 -1462
  951. package/src/ink/render-to-screen.ts +0 -231
  952. package/src/ink/renderer.ts +0 -178
  953. package/src/ink/root.ts +0 -184
  954. package/src/ink/screen.ts +0 -1486
  955. package/src/ink/searchHighlight.ts +0 -93
  956. package/src/ink/selection.ts +0 -917
  957. package/src/ink/squash-text-nodes.ts +0 -92
  958. package/src/ink/stringWidth.ts +0 -222
  959. package/src/ink/styles.ts +0 -771
  960. package/src/ink/supports-hyperlinks.ts +0 -57
  961. package/src/ink/tabstops.ts +0 -46
  962. package/src/ink/terminal-focus-state.ts +0 -47
  963. package/src/ink/terminal-querier.ts +0 -212
  964. package/src/ink/terminal.ts +0 -248
  965. package/src/ink/termio/ansi.ts +0 -75
  966. package/src/ink/termio/csi.ts +0 -319
  967. package/src/ink/termio/dec.ts +0 -60
  968. package/src/ink/termio/esc.ts +0 -67
  969. package/src/ink/termio/osc.ts +0 -493
  970. package/src/ink/termio/parser.ts +0 -394
  971. package/src/ink/termio/sgr.ts +0 -308
  972. package/src/ink/termio/tokenize.ts +0 -319
  973. package/src/ink/termio/types.ts +0 -236
  974. package/src/ink/termio.ts +0 -42
  975. package/src/ink/useTerminalNotification.ts +0 -126
  976. package/src/ink/warn.ts +0 -9
  977. package/src/ink/widest-line.ts +0 -19
  978. package/src/ink/wrap-text.ts +0 -74
  979. package/src/ink/wrapAnsi.ts +0 -20
  980. package/src/ink.ts +0 -85
  981. package/src/interactiveHelpers.tsx +0 -366
  982. package/src/jobs/classifier.ts +0 -2
  983. package/src/keybindings/KeybindingContext.tsx +0 -243
  984. package/src/keybindings/KeybindingProviderSetup.tsx +0 -308
  985. package/src/keybindings/defaultBindings.ts +0 -340
  986. package/src/keybindings/loadUserBindings.ts +0 -472
  987. package/src/keybindings/match.ts +0 -120
  988. package/src/keybindings/parser.ts +0 -203
  989. package/src/keybindings/reservedShortcuts.ts +0 -127
  990. package/src/keybindings/resolver.ts +0 -244
  991. package/src/keybindings/schema.ts +0 -236
  992. package/src/keybindings/shortcutFormat.ts +0 -63
  993. package/src/keybindings/template.ts +0 -52
  994. package/src/keybindings/types.ts +0 -3
  995. package/src/keybindings/useKeybinding.ts +0 -196
  996. package/src/keybindings/useShortcutDisplay.ts +0 -59
  997. package/src/keybindings/validate.ts +0 -498
  998. package/src/main.tsx +0 -4684
  999. package/src/memdir/findRelevantMemories.ts +0 -141
  1000. package/src/memdir/memdir.ts +0 -507
  1001. package/src/memdir/memoryAge.ts +0 -53
  1002. package/src/memdir/memoryScan.ts +0 -94
  1003. package/src/memdir/memoryShapeTelemetry.ts +0 -2
  1004. package/src/memdir/memoryTypes.ts +0 -271
  1005. package/src/memdir/paths.ts +0 -278
  1006. package/src/memdir/teamMemPaths.ts +0 -292
  1007. package/src/memdir/teamMemPrompts.ts +0 -100
  1008. package/src/migrations/migrateAutoUpdatesToSettings.ts +0 -61
  1009. package/src/migrations/migrateBypassPermissionsAcceptedToSettings.ts +0 -40
  1010. package/src/migrations/migrateEnableAllProjectMcpServersToSettings.ts +0 -118
  1011. package/src/migrations/migrateFennecToOpus.ts +0 -45
  1012. package/src/migrations/migrateLegacyOpusToCurrent.ts +0 -57
  1013. package/src/migrations/migrateOpusToOpus1m.ts +0 -43
  1014. package/src/migrations/migrateReplBridgeEnabledToRemoteControlAtStartup.ts +0 -22
  1015. package/src/migrations/migrateSonnet1mToSonnet45.ts +0 -48
  1016. package/src/migrations/migrateSonnet45ToSonnet46.ts +0 -67
  1017. package/src/migrations/resetAutoModeOptInForDefaultOffer.ts +0 -51
  1018. package/src/migrations/resetProToOpusDefault.ts +0 -51
  1019. package/src/moreright/useMoreRight.tsx +0 -26
  1020. package/src/native-ts/color-diff/index.ts +0 -1001
  1021. package/src/native-ts/file-index/index.ts +0 -370
  1022. package/src/native-ts/yoga-layout/enums.ts +0 -134
  1023. package/src/native-ts/yoga-layout/index.ts +0 -2578
  1024. package/src/outputStyles/loadOutputStylesDir.ts +0 -98
  1025. package/src/plugins/builtinPlugins.ts +0 -159
  1026. package/src/plugins/bundled/index.ts +0 -23
  1027. package/src/proactive/index.ts +0 -2
  1028. package/src/projectOnboardingState.ts +0 -83
  1029. package/src/query/config.ts +0 -46
  1030. package/src/query/deps.ts +0 -33
  1031. package/src/query/stopHooks.ts +0 -473
  1032. package/src/query/tokenBudget.ts +0 -93
  1033. package/src/query/transitions.ts +0 -2
  1034. package/src/query.ts +0 -1729
  1035. package/src/remote/RemoteSessionManager.ts +0 -343
  1036. package/src/remote/SessionsWebSocket.ts +0 -404
  1037. package/src/remote/remotePermissionBridge.ts +0 -78
  1038. package/src/remote/sdkMessageAdapter.ts +0 -302
  1039. package/src/replLauncher.tsx +0 -23
  1040. package/src/schemas/hooks.ts +0 -222
  1041. package/src/screens/Doctor.tsx +0 -575
  1042. package/src/screens/REPL.tsx +0 -5006
  1043. package/src/screens/ResumeConversation.tsx +0 -399
  1044. package/src/self-hosted-runner/main.ts +0 -2
  1045. package/src/server/backends/dangerousBackend.ts +0 -2
  1046. package/src/server/connectHeadless.ts +0 -2
  1047. package/src/server/createDirectConnectSession.ts +0 -88
  1048. package/src/server/directConnectManager.ts +0 -213
  1049. package/src/server/lockfile.ts +0 -2
  1050. package/src/server/parseConnectUrl.ts +0 -2
  1051. package/src/server/server.ts +0 -2
  1052. package/src/server/serverBanner.ts +0 -2
  1053. package/src/server/serverLog.ts +0 -2
  1054. package/src/server/sessionManager.ts +0 -2
  1055. package/src/server/types.ts +0 -57
  1056. package/src/services/AgentSummary/agentSummary.ts +0 -179
  1057. package/src/services/MagicDocs/magicDocs.ts +0 -254
  1058. package/src/services/MagicDocs/prompts.ts +0 -127
  1059. package/src/services/PromptSuggestion/promptSuggestion.ts +0 -523
  1060. package/src/services/PromptSuggestion/speculation.ts +0 -991
  1061. package/src/services/SessionMemory/prompts.ts +0 -324
  1062. package/src/services/SessionMemory/sessionMemory.ts +0 -495
  1063. package/src/services/SessionMemory/sessionMemoryUtils.ts +0 -207
  1064. package/src/services/analytics/config.ts +0 -38
  1065. package/src/services/analytics/datadog.ts +0 -307
  1066. package/src/services/analytics/firstPartyEventLogger.ts +0 -449
  1067. package/src/services/analytics/firstPartyEventLoggingExporter.ts +0 -806
  1068. package/src/services/analytics/growthbook.ts +0 -1155
  1069. package/src/services/analytics/index.ts +0 -173
  1070. package/src/services/analytics/metadata.ts +0 -973
  1071. package/src/services/analytics/sink.ts +0 -114
  1072. package/src/services/analytics/sinkKillswitch.ts +0 -25
  1073. package/src/services/api/adminRequests.ts +0 -119
  1074. package/src/services/api/bootstrap.ts +0 -141
  1075. package/src/services/api/claude.ts +0 -3419
  1076. package/src/services/api/client.ts +0 -389
  1077. package/src/services/api/dumpPrompts.ts +0 -226
  1078. package/src/services/api/emptyUsage.ts +0 -22
  1079. package/src/services/api/errorUtils.ts +0 -260
  1080. package/src/services/api/errors.ts +0 -1205
  1081. package/src/services/api/filesApi.ts +0 -748
  1082. package/src/services/api/firstTokenDate.ts +0 -60
  1083. package/src/services/api/grove.ts +0 -357
  1084. package/src/services/api/logging.ts +0 -788
  1085. package/src/services/api/metricsOptOut.ts +0 -159
  1086. package/src/services/api/overageCreditGrant.ts +0 -137
  1087. package/src/services/api/promptCacheBreakDetection.ts +0 -727
  1088. package/src/services/api/referral.ts +0 -281
  1089. package/src/services/api/sessionIngress.ts +0 -514
  1090. package/src/services/api/ultrareviewQuota.ts +0 -38
  1091. package/src/services/api/usage.ts +0 -63
  1092. package/src/services/api/withRetry.ts +0 -818
  1093. package/src/services/autoDream/autoDream.ts +0 -324
  1094. package/src/services/autoDream/config.ts +0 -21
  1095. package/src/services/autoDream/consolidationLock.ts +0 -140
  1096. package/src/services/autoDream/consolidationPrompt.ts +0 -65
  1097. package/src/services/awaySummary.ts +0 -74
  1098. package/src/services/claudeAiLimits.ts +0 -515
  1099. package/src/services/claudeAiLimitsHook.ts +0 -23
  1100. package/src/services/compact/apiMicrocompact.ts +0 -153
  1101. package/src/services/compact/autoCompact.ts +0 -351
  1102. package/src/services/compact/cachedMCConfig.ts +0 -2
  1103. package/src/services/compact/cachedMicrocompact.ts +0 -2
  1104. package/src/services/compact/compact.ts +0 -1705
  1105. package/src/services/compact/compactWarningHook.ts +0 -16
  1106. package/src/services/compact/compactWarningState.ts +0 -18
  1107. package/src/services/compact/grouping.ts +0 -63
  1108. package/src/services/compact/microCompact.ts +0 -530
  1109. package/src/services/compact/postCompactCleanup.ts +0 -77
  1110. package/src/services/compact/prompt.ts +0 -374
  1111. package/src/services/compact/reactiveCompact.ts +0 -2
  1112. package/src/services/compact/sessionMemoryCompact.ts +0 -630
  1113. package/src/services/compact/snipCompact.ts +0 -2
  1114. package/src/services/compact/snipProjection.ts +0 -2
  1115. package/src/services/compact/timeBasedMCConfig.ts +0 -43
  1116. package/src/services/contextCollapse/index.ts +0 -2
  1117. package/src/services/contextCollapse/operations.ts +0 -2
  1118. package/src/services/contextCollapse/persist.ts +0 -2
  1119. package/src/services/diagnosticTracking.ts +0 -397
  1120. package/src/services/extractMemories/extractMemories.ts +0 -615
  1121. package/src/services/extractMemories/prompts.ts +0 -154
  1122. package/src/services/internalLogging.ts +0 -90
  1123. package/src/services/lsp/LSPClient.ts +0 -447
  1124. package/src/services/lsp/LSPDiagnosticRegistry.ts +0 -386
  1125. package/src/services/lsp/LSPServerInstance.ts +0 -511
  1126. package/src/services/lsp/LSPServerManager.ts +0 -420
  1127. package/src/services/lsp/config.ts +0 -79
  1128. package/src/services/lsp/manager.ts +0 -289
  1129. package/src/services/lsp/passiveFeedback.ts +0 -328
  1130. package/src/services/lsp/types.ts +0 -3
  1131. package/src/services/mcp/InProcessTransport.ts +0 -63
  1132. package/src/services/mcp/MCPConnectionManager.tsx +0 -73
  1133. package/src/services/mcp/SdkControlTransport.ts +0 -136
  1134. package/src/services/mcp/auth.ts +0 -2465
  1135. package/src/services/mcp/channelAllowlist.ts +0 -76
  1136. package/src/services/mcp/channelNotification.ts +0 -316
  1137. package/src/services/mcp/channelPermissions.ts +0 -240
  1138. package/src/services/mcp/claudeai.ts +0 -164
  1139. package/src/services/mcp/client.ts +0 -3348
  1140. package/src/services/mcp/config.ts +0 -1578
  1141. package/src/services/mcp/elicitationHandler.ts +0 -313
  1142. package/src/services/mcp/envExpansion.ts +0 -38
  1143. package/src/services/mcp/headersHelper.ts +0 -138
  1144. package/src/services/mcp/mcpStringUtils.ts +0 -106
  1145. package/src/services/mcp/normalization.ts +0 -23
  1146. package/src/services/mcp/oauthPort.ts +0 -78
  1147. package/src/services/mcp/officialRegistry.ts +0 -72
  1148. package/src/services/mcp/types.ts +0 -258
  1149. package/src/services/mcp/useManageMCPConnections.ts +0 -1141
  1150. package/src/services/mcp/utils.ts +0 -575
  1151. package/src/services/mcp/vscodeSdkMcp.ts +0 -112
  1152. package/src/services/mcp/xaa.ts +0 -511
  1153. package/src/services/mcp/xaaIdpLogin.ts +0 -487
  1154. package/src/services/mcpServerApproval.tsx +0 -41
  1155. package/src/services/mockRateLimits.ts +0 -882
  1156. package/src/services/notifier.ts +0 -156
  1157. package/src/services/oauth/auth-code-listener.ts +0 -211
  1158. package/src/services/oauth/client.ts +0 -566
  1159. package/src/services/oauth/crypto.ts +0 -23
  1160. package/src/services/oauth/getOauthProfile.ts +0 -53
  1161. package/src/services/oauth/index.ts +0 -198
  1162. package/src/services/oauth/types.ts +0 -7
  1163. package/src/services/plugins/PluginInstallationManager.ts +0 -184
  1164. package/src/services/plugins/pluginCliCommands.ts +0 -344
  1165. package/src/services/plugins/pluginOperations.ts +0 -1088
  1166. package/src/services/policyLimits/index.ts +0 -663
  1167. package/src/services/policyLimits/types.ts +0 -27
  1168. package/src/services/preventSleep.ts +0 -165
  1169. package/src/services/rateLimitMessages.ts +0 -344
  1170. package/src/services/rateLimitMocking.ts +0 -144
  1171. package/src/services/remoteManagedSettings/index.ts +0 -638
  1172. package/src/services/remoteManagedSettings/securityCheck.tsx +0 -74
  1173. package/src/services/remoteManagedSettings/syncCache.ts +0 -112
  1174. package/src/services/remoteManagedSettings/syncCacheState.ts +0 -96
  1175. package/src/services/remoteManagedSettings/types.ts +0 -31
  1176. package/src/services/sessionTranscript/sessionTranscript.ts +0 -2
  1177. package/src/services/settingsSync/index.ts +0 -581
  1178. package/src/services/settingsSync/types.ts +0 -67
  1179. package/src/services/skillSearch/featureCheck.ts +0 -2
  1180. package/src/services/skillSearch/localSearch.ts +0 -2
  1181. package/src/services/skillSearch/prefetch.ts +0 -2
  1182. package/src/services/skillSearch/remoteSkillLoader.ts +0 -2
  1183. package/src/services/skillSearch/remoteSkillState.ts +0 -2
  1184. package/src/services/skillSearch/signals.ts +0 -1
  1185. package/src/services/skillSearch/telemetry.ts +0 -2
  1186. package/src/services/teamMemorySync/index.ts +0 -1256
  1187. package/src/services/teamMemorySync/secretScanner.ts +0 -324
  1188. package/src/services/teamMemorySync/teamMemSecretGuard.ts +0 -44
  1189. package/src/services/teamMemorySync/types.ts +0 -156
  1190. package/src/services/teamMemorySync/watcher.ts +0 -387
  1191. package/src/services/tips/tipHistory.ts +0 -17
  1192. package/src/services/tips/tipRegistry.ts +0 -686
  1193. package/src/services/tips/tipScheduler.ts +0 -58
  1194. package/src/services/tips/types.ts +0 -5
  1195. package/src/services/tokenEstimation.ts +0 -495
  1196. package/src/services/toolUseSummary/toolUseSummaryGenerator.ts +0 -112
  1197. package/src/services/tools/StreamingToolExecutor.ts +0 -530
  1198. package/src/services/tools/toolExecution.ts +0 -1745
  1199. package/src/services/tools/toolHooks.ts +0 -650
  1200. package/src/services/tools/toolOrchestration.ts +0 -188
  1201. package/src/services/vcr.ts +0 -406
  1202. package/src/services/voice.ts +0 -525
  1203. package/src/services/voiceKeyterms.ts +0 -106
  1204. package/src/services/voiceStreamSTT.ts +0 -544
  1205. package/src/setup.ts +0 -477
  1206. package/src/shims/bun-bundle.ts +0 -18
  1207. package/src/shims/macro.ts +0 -12
  1208. package/src/skills/bundled/batch.ts +0 -124
  1209. package/src/skills/bundled/claude-api/SKILL.md +0 -1
  1210. package/src/skills/bundled/claude-api/SKILL.md.ts +0 -1
  1211. package/src/skills/bundled/claude-api/csharp/claude-api.md +0 -1
  1212. package/src/skills/bundled/claude-api/csharp/claude-api.md.ts +0 -1
  1213. package/src/skills/bundled/claude-api/curl/examples.md +0 -1
  1214. package/src/skills/bundled/claude-api/curl/examples.md.ts +0 -1
  1215. package/src/skills/bundled/claude-api/go/claude-api.md +0 -1
  1216. package/src/skills/bundled/claude-api/go/claude-api.md.ts +0 -1
  1217. package/src/skills/bundled/claude-api/java/claude-api.md +0 -1
  1218. package/src/skills/bundled/claude-api/java/claude-api.md.ts +0 -1
  1219. package/src/skills/bundled/claude-api/php/claude-api.md +0 -1
  1220. package/src/skills/bundled/claude-api/php/claude-api.md.ts +0 -1
  1221. package/src/skills/bundled/claude-api/python/agent-sdk/README.md +0 -1
  1222. package/src/skills/bundled/claude-api/python/agent-sdk/README.md.ts +0 -1
  1223. package/src/skills/bundled/claude-api/python/agent-sdk/patterns.md +0 -1
  1224. package/src/skills/bundled/claude-api/python/agent-sdk/patterns.md.ts +0 -1
  1225. package/src/skills/bundled/claude-api/python/claude-api/README.md +0 -1
  1226. package/src/skills/bundled/claude-api/python/claude-api/README.md.ts +0 -1
  1227. package/src/skills/bundled/claude-api/python/claude-api/batches.md +0 -1
  1228. package/src/skills/bundled/claude-api/python/claude-api/batches.md.ts +0 -1
  1229. package/src/skills/bundled/claude-api/python/claude-api/files-api.md +0 -1
  1230. package/src/skills/bundled/claude-api/python/claude-api/files-api.md.ts +0 -1
  1231. package/src/skills/bundled/claude-api/python/claude-api/streaming.md +0 -1
  1232. package/src/skills/bundled/claude-api/python/claude-api/streaming.md.ts +0 -1
  1233. package/src/skills/bundled/claude-api/python/claude-api/tool-use.md +0 -1
  1234. package/src/skills/bundled/claude-api/python/claude-api/tool-use.md.ts +0 -1
  1235. package/src/skills/bundled/claude-api/ruby/claude-api.md +0 -1
  1236. package/src/skills/bundled/claude-api/ruby/claude-api.md.ts +0 -1
  1237. package/src/skills/bundled/claude-api/shared/error-codes.md +0 -1
  1238. package/src/skills/bundled/claude-api/shared/error-codes.md.ts +0 -1
  1239. package/src/skills/bundled/claude-api/shared/live-sources.md +0 -1
  1240. package/src/skills/bundled/claude-api/shared/live-sources.md.ts +0 -1
  1241. package/src/skills/bundled/claude-api/shared/models.md +0 -1
  1242. package/src/skills/bundled/claude-api/shared/models.md.ts +0 -1
  1243. package/src/skills/bundled/claude-api/shared/prompt-caching.md +0 -1
  1244. package/src/skills/bundled/claude-api/shared/prompt-caching.md.ts +0 -1
  1245. package/src/skills/bundled/claude-api/shared/tool-use-concepts.md +0 -1
  1246. package/src/skills/bundled/claude-api/shared/tool-use-concepts.md.ts +0 -1
  1247. package/src/skills/bundled/claude-api/typescript/agent-sdk/README.md +0 -1
  1248. package/src/skills/bundled/claude-api/typescript/agent-sdk/README.md.ts +0 -1
  1249. package/src/skills/bundled/claude-api/typescript/agent-sdk/patterns.md +0 -1
  1250. package/src/skills/bundled/claude-api/typescript/agent-sdk/patterns.md.ts +0 -1
  1251. package/src/skills/bundled/claude-api/typescript/claude-api/README.md +0 -1
  1252. package/src/skills/bundled/claude-api/typescript/claude-api/README.md.ts +0 -1
  1253. package/src/skills/bundled/claude-api/typescript/claude-api/batches.md +0 -1
  1254. package/src/skills/bundled/claude-api/typescript/claude-api/batches.md.ts +0 -1
  1255. package/src/skills/bundled/claude-api/typescript/claude-api/files-api.md +0 -1
  1256. package/src/skills/bundled/claude-api/typescript/claude-api/files-api.md.ts +0 -1
  1257. package/src/skills/bundled/claude-api/typescript/claude-api/streaming.md +0 -1
  1258. package/src/skills/bundled/claude-api/typescript/claude-api/streaming.md.ts +0 -1
  1259. package/src/skills/bundled/claude-api/typescript/claude-api/tool-use.md +0 -1
  1260. package/src/skills/bundled/claude-api/typescript/claude-api/tool-use.md.ts +0 -1
  1261. package/src/skills/bundled/claudeApi.ts +0 -196
  1262. package/src/skills/bundled/claudeApiContent.ts +0 -75
  1263. package/src/skills/bundled/claudeInChrome.ts +0 -34
  1264. package/src/skills/bundled/debug.ts +0 -103
  1265. package/src/skills/bundled/index.ts +0 -79
  1266. package/src/skills/bundled/keybindings.ts +0 -339
  1267. package/src/skills/bundled/loop.ts +0 -92
  1268. package/src/skills/bundled/loremIpsum.ts +0 -282
  1269. package/src/skills/bundled/remember.ts +0 -82
  1270. package/src/skills/bundled/scheduleRemoteAgents.ts +0 -447
  1271. package/src/skills/bundled/simplify.ts +0 -69
  1272. package/src/skills/bundled/skillify.ts +0 -197
  1273. package/src/skills/bundled/stuck.ts +0 -79
  1274. package/src/skills/bundled/updateConfig.ts +0 -475
  1275. package/src/skills/bundled/verify/SKILL.md +0 -1
  1276. package/src/skills/bundled/verify/SKILL.md.ts +0 -1
  1277. package/src/skills/bundled/verify/examples/cli.md +0 -1
  1278. package/src/skills/bundled/verify/examples/cli.md.ts +0 -1
  1279. package/src/skills/bundled/verify/examples/server.md +0 -1
  1280. package/src/skills/bundled/verify/examples/server.md.ts +0 -1
  1281. package/src/skills/bundled/verify.ts +0 -30
  1282. package/src/skills/bundled/verifyContent.ts +0 -13
  1283. package/src/skills/bundledSkills.ts +0 -220
  1284. package/src/skills/loadSkillsDir.ts +0 -1086
  1285. package/src/skills/mcpSkillBuilders.ts +0 -44
  1286. package/src/skills/mcpSkills.ts +0 -2
  1287. package/src/ssh/SSHSessionManager.ts +0 -1
  1288. package/src/ssh/createSSHSession.ts +0 -1
  1289. package/src/state/AppState.tsx +0 -200
  1290. package/src/state/AppStateStore.ts +0 -569
  1291. package/src/state/onChangeAppState.ts +0 -171
  1292. package/src/state/selectors.ts +0 -76
  1293. package/src/state/store.ts +0 -34
  1294. package/src/state/teammateViewHelpers.ts +0 -141
  1295. package/src/tasks/DreamTask/DreamTask.ts +0 -157
  1296. package/src/tasks/InProcessTeammateTask/InProcessTeammateTask.tsx +0 -126
  1297. package/src/tasks/InProcessTeammateTask/types.ts +0 -121
  1298. package/src/tasks/LocalAgentTask/LocalAgentTask.tsx +0 -683
  1299. package/src/tasks/LocalMainSessionTask.ts +0 -479
  1300. package/src/tasks/LocalShellTask/LocalShellTask.tsx +0 -523
  1301. package/src/tasks/LocalShellTask/guards.ts +0 -41
  1302. package/src/tasks/LocalShellTask/killShellTasks.ts +0 -76
  1303. package/src/tasks/LocalWorkflowTask/LocalWorkflowTask.ts +0 -1
  1304. package/src/tasks/MonitorMcpTask/MonitorMcpTask.ts +0 -1
  1305. package/src/tasks/RemoteAgentTask/RemoteAgentTask.tsx +0 -856
  1306. package/src/tasks/pillLabel.ts +0 -82
  1307. package/src/tasks/stopTask.ts +0 -100
  1308. package/src/tasks/types.ts +0 -46
  1309. package/src/tasks.ts +0 -39
  1310. package/src/tools/AgentTool/AgentTool.tsx +0 -1398
  1311. package/src/tools/AgentTool/UI.tsx +0 -872
  1312. package/src/tools/AgentTool/agentColorManager.ts +0 -66
  1313. package/src/tools/AgentTool/agentDisplay.ts +0 -104
  1314. package/src/tools/AgentTool/agentMemory.ts +0 -177
  1315. package/src/tools/AgentTool/agentMemorySnapshot.ts +0 -197
  1316. package/src/tools/AgentTool/agentToolUtils.ts +0 -686
  1317. package/src/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +0 -205
  1318. package/src/tools/AgentTool/built-in/exploreAgent.ts +0 -87
  1319. package/src/tools/AgentTool/built-in/generalPurposeAgent.ts +0 -34
  1320. package/src/tools/AgentTool/built-in/planAgent.ts +0 -92
  1321. package/src/tools/AgentTool/built-in/statuslineSetup.ts +0 -144
  1322. package/src/tools/AgentTool/built-in/verificationAgent.ts +0 -152
  1323. package/src/tools/AgentTool/built-in/warpGrepAgent.ts +0 -67
  1324. package/src/tools/AgentTool/builtInAgents.ts +0 -73
  1325. package/src/tools/AgentTool/constants.ts +0 -12
  1326. package/src/tools/AgentTool/forkSubagent.ts +0 -210
  1327. package/src/tools/AgentTool/loadAgentsDir.ts +0 -755
  1328. package/src/tools/AgentTool/prompt.ts +0 -288
  1329. package/src/tools/AgentTool/resumeAgent.ts +0 -265
  1330. package/src/tools/AgentTool/runAgent.ts +0 -973
  1331. package/src/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +0 -266
  1332. package/src/tools/AskUserQuestionTool/prompt.ts +0 -44
  1333. package/src/tools/BashTool/BashTool.tsx +0 -1144
  1334. package/src/tools/BashTool/BashToolResultMessage.tsx +0 -191
  1335. package/src/tools/BashTool/UI.tsx +0 -185
  1336. package/src/tools/BashTool/bashCommandHelpers.ts +0 -265
  1337. package/src/tools/BashTool/bashPermissions.ts +0 -2621
  1338. package/src/tools/BashTool/bashSecurity.ts +0 -2592
  1339. package/src/tools/BashTool/commandSemantics.ts +0 -140
  1340. package/src/tools/BashTool/commentLabel.ts +0 -13
  1341. package/src/tools/BashTool/destructiveCommandWarning.ts +0 -102
  1342. package/src/tools/BashTool/modeValidation.ts +0 -115
  1343. package/src/tools/BashTool/pathValidation.ts +0 -1303
  1344. package/src/tools/BashTool/prompt.ts +0 -369
  1345. package/src/tools/BashTool/readOnlyValidation.ts +0 -1990
  1346. package/src/tools/BashTool/sedEditParser.ts +0 -322
  1347. package/src/tools/BashTool/sedValidation.ts +0 -684
  1348. package/src/tools/BashTool/shouldUseSandbox.ts +0 -153
  1349. package/src/tools/BashTool/toolName.ts +0 -2
  1350. package/src/tools/BashTool/utils.ts +0 -223
  1351. package/src/tools/BriefTool/BriefTool.ts +0 -204
  1352. package/src/tools/BriefTool/UI.tsx +0 -101
  1353. package/src/tools/BriefTool/attachments.ts +0 -110
  1354. package/src/tools/BriefTool/prompt.ts +0 -22
  1355. package/src/tools/BriefTool/upload.ts +0 -174
  1356. package/src/tools/ConfigTool/ConfigTool.ts +0 -467
  1357. package/src/tools/ConfigTool/UI.tsx +0 -38
  1358. package/src/tools/ConfigTool/constants.ts +0 -1
  1359. package/src/tools/ConfigTool/prompt.ts +0 -93
  1360. package/src/tools/ConfigTool/supportedSettings.ts +0 -211
  1361. package/src/tools/DiscoverSkillsTool/prompt.ts +0 -2
  1362. package/src/tools/EnterPlanModeTool/EnterPlanModeTool.ts +0 -126
  1363. package/src/tools/EnterPlanModeTool/UI.tsx +0 -33
  1364. package/src/tools/EnterPlanModeTool/constants.ts +0 -1
  1365. package/src/tools/EnterPlanModeTool/prompt.ts +0 -170
  1366. package/src/tools/EnterWorktreeTool/EnterWorktreeTool.ts +0 -127
  1367. package/src/tools/EnterWorktreeTool/UI.tsx +0 -20
  1368. package/src/tools/EnterWorktreeTool/constants.ts +0 -1
  1369. package/src/tools/EnterWorktreeTool/prompt.ts +0 -30
  1370. package/src/tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts +0 -493
  1371. package/src/tools/ExitPlanModeTool/UI.tsx +0 -82
  1372. package/src/tools/ExitPlanModeTool/constants.ts +0 -2
  1373. package/src/tools/ExitPlanModeTool/prompt.ts +0 -29
  1374. package/src/tools/ExitWorktreeTool/ExitWorktreeTool.ts +0 -329
  1375. package/src/tools/ExitWorktreeTool/UI.tsx +0 -25
  1376. package/src/tools/ExitWorktreeTool/constants.ts +0 -1
  1377. package/src/tools/ExitWorktreeTool/prompt.ts +0 -32
  1378. package/src/tools/FileEditTool/FileEditTool.ts +0 -625
  1379. package/src/tools/FileEditTool/UI.tsx +0 -289
  1380. package/src/tools/FileEditTool/constants.ts +0 -11
  1381. package/src/tools/FileEditTool/prompt.ts +0 -28
  1382. package/src/tools/FileEditTool/types.ts +0 -85
  1383. package/src/tools/FileEditTool/utils.ts +0 -775
  1384. package/src/tools/FileReadTool/FileReadTool.ts +0 -1183
  1385. package/src/tools/FileReadTool/UI.tsx +0 -185
  1386. package/src/tools/FileReadTool/imageProcessor.ts +0 -94
  1387. package/src/tools/FileReadTool/limits.ts +0 -92
  1388. package/src/tools/FileReadTool/prompt.ts +0 -49
  1389. package/src/tools/FileWriteTool/FileWriteTool.ts +0 -434
  1390. package/src/tools/FileWriteTool/UI.tsx +0 -405
  1391. package/src/tools/FileWriteTool/prompt.ts +0 -18
  1392. package/src/tools/GlobTool/GlobTool.ts +0 -198
  1393. package/src/tools/GlobTool/UI.tsx +0 -63
  1394. package/src/tools/GlobTool/prompt.ts +0 -7
  1395. package/src/tools/GrepTool/GrepTool.ts +0 -577
  1396. package/src/tools/GrepTool/UI.tsx +0 -201
  1397. package/src/tools/GrepTool/prompt.ts +0 -18
  1398. package/src/tools/LSPTool/LSPTool.ts +0 -860
  1399. package/src/tools/LSPTool/UI.tsx +0 -228
  1400. package/src/tools/LSPTool/formatters.ts +0 -592
  1401. package/src/tools/LSPTool/prompt.ts +0 -21
  1402. package/src/tools/LSPTool/schemas.ts +0 -215
  1403. package/src/tools/LSPTool/symbolContext.ts +0 -90
  1404. package/src/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +0 -123
  1405. package/src/tools/ListMcpResourcesTool/UI.tsx +0 -29
  1406. package/src/tools/ListMcpResourcesTool/prompt.ts +0 -20
  1407. package/src/tools/MCPTool/MCPTool.ts +0 -77
  1408. package/src/tools/MCPTool/UI.tsx +0 -403
  1409. package/src/tools/MCPTool/classifyForCollapse.ts +0 -604
  1410. package/src/tools/MCPTool/prompt.ts +0 -3
  1411. package/src/tools/McpAuthTool/McpAuthTool.ts +0 -215
  1412. package/src/tools/MonitorTool/MonitorTool.ts +0 -2
  1413. package/src/tools/NotebookEditTool/NotebookEditTool.ts +0 -490
  1414. package/src/tools/NotebookEditTool/UI.tsx +0 -93
  1415. package/src/tools/NotebookEditTool/constants.ts +0 -2
  1416. package/src/tools/NotebookEditTool/prompt.ts +0 -3
  1417. package/src/tools/OverflowTestTool/OverflowTestTool.ts +0 -2
  1418. package/src/tools/PowerShellTool/PowerShellTool.tsx +0 -1001
  1419. package/src/tools/PowerShellTool/UI.tsx +0 -131
  1420. package/src/tools/PowerShellTool/clmTypes.ts +0 -211
  1421. package/src/tools/PowerShellTool/commandSemantics.ts +0 -142
  1422. package/src/tools/PowerShellTool/commonParameters.ts +0 -30
  1423. package/src/tools/PowerShellTool/destructiveCommandWarning.ts +0 -109
  1424. package/src/tools/PowerShellTool/gitSafety.ts +0 -176
  1425. package/src/tools/PowerShellTool/modeValidation.ts +0 -404
  1426. package/src/tools/PowerShellTool/pathValidation.ts +0 -2049
  1427. package/src/tools/PowerShellTool/powershellPermissions.ts +0 -1648
  1428. package/src/tools/PowerShellTool/powershellSecurity.ts +0 -1090
  1429. package/src/tools/PowerShellTool/prompt.ts +0 -145
  1430. package/src/tools/PowerShellTool/readOnlyValidation.ts +0 -1823
  1431. package/src/tools/PowerShellTool/toolName.ts +0 -2
  1432. package/src/tools/REPLTool/constants.ts +0 -46
  1433. package/src/tools/REPLTool/primitiveTools.ts +0 -39
  1434. package/src/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +0 -158
  1435. package/src/tools/ReadMcpResourceTool/UI.tsx +0 -37
  1436. package/src/tools/ReadMcpResourceTool/prompt.ts +0 -16
  1437. package/src/tools/RemoteTriggerTool/RemoteTriggerTool.ts +0 -161
  1438. package/src/tools/RemoteTriggerTool/UI.tsx +0 -17
  1439. package/src/tools/RemoteTriggerTool/prompt.ts +0 -15
  1440. package/src/tools/ReviewArtifactTool/ReviewArtifactTool.ts +0 -2
  1441. package/src/tools/ScheduleCronTool/CronCreateTool.ts +0 -157
  1442. package/src/tools/ScheduleCronTool/CronDeleteTool.ts +0 -95
  1443. package/src/tools/ScheduleCronTool/CronListTool.ts +0 -97
  1444. package/src/tools/ScheduleCronTool/UI.tsx +0 -60
  1445. package/src/tools/ScheduleCronTool/prompt.ts +0 -135
  1446. package/src/tools/SendMessageTool/SendMessageTool.ts +0 -917
  1447. package/src/tools/SendMessageTool/UI.tsx +0 -31
  1448. package/src/tools/SendMessageTool/constants.ts +0 -1
  1449. package/src/tools/SendMessageTool/prompt.ts +0 -49
  1450. package/src/tools/SendUserFileTool/prompt.ts +0 -2
  1451. package/src/tools/SkillTool/SkillTool.ts +0 -1108
  1452. package/src/tools/SkillTool/UI.tsx +0 -128
  1453. package/src/tools/SkillTool/constants.ts +0 -1
  1454. package/src/tools/SkillTool/prompt.ts +0 -241
  1455. package/src/tools/SleepTool/prompt.ts +0 -17
  1456. package/src/tools/SnipTool/prompt.ts +0 -2
  1457. package/src/tools/SyntheticOutputTool/SyntheticOutputTool.ts +0 -163
  1458. package/src/tools/TaskCreateTool/TaskCreateTool.ts +0 -138
  1459. package/src/tools/TaskCreateTool/constants.ts +0 -1
  1460. package/src/tools/TaskCreateTool/prompt.ts +0 -56
  1461. package/src/tools/TaskGetTool/TaskGetTool.ts +0 -128
  1462. package/src/tools/TaskGetTool/constants.ts +0 -1
  1463. package/src/tools/TaskGetTool/prompt.ts +0 -24
  1464. package/src/tools/TaskListTool/TaskListTool.ts +0 -116
  1465. package/src/tools/TaskListTool/constants.ts +0 -1
  1466. package/src/tools/TaskListTool/prompt.ts +0 -49
  1467. package/src/tools/TaskOutputTool/TaskOutputTool.tsx +0 -584
  1468. package/src/tools/TaskOutputTool/constants.ts +0 -1
  1469. package/src/tools/TaskStopTool/TaskStopTool.ts +0 -131
  1470. package/src/tools/TaskStopTool/UI.tsx +0 -41
  1471. package/src/tools/TaskStopTool/prompt.ts +0 -8
  1472. package/src/tools/TaskUpdateTool/TaskUpdateTool.ts +0 -406
  1473. package/src/tools/TaskUpdateTool/constants.ts +0 -1
  1474. package/src/tools/TaskUpdateTool/prompt.ts +0 -77
  1475. package/src/tools/TeamCreateTool/TeamCreateTool.ts +0 -240
  1476. package/src/tools/TeamCreateTool/UI.tsx +0 -6
  1477. package/src/tools/TeamCreateTool/constants.ts +0 -1
  1478. package/src/tools/TeamCreateTool/prompt.ts +0 -113
  1479. package/src/tools/TeamDeleteTool/TeamDeleteTool.ts +0 -139
  1480. package/src/tools/TeamDeleteTool/UI.tsx +0 -20
  1481. package/src/tools/TeamDeleteTool/constants.ts +0 -1
  1482. package/src/tools/TeamDeleteTool/prompt.ts +0 -16
  1483. package/src/tools/TerminalCaptureTool/prompt.ts +0 -2
  1484. package/src/tools/TodoWriteTool/TodoWriteTool.ts +0 -115
  1485. package/src/tools/TodoWriteTool/constants.ts +0 -1
  1486. package/src/tools/TodoWriteTool/prompt.ts +0 -184
  1487. package/src/tools/ToolSearchTool/ToolSearchTool.ts +0 -471
  1488. package/src/tools/ToolSearchTool/constants.ts +0 -1
  1489. package/src/tools/ToolSearchTool/prompt.ts +0 -121
  1490. package/src/tools/TungstenTool/TungstenLiveMonitor.ts +0 -3
  1491. package/src/tools/TungstenTool/TungstenLiveMonitor.tsx +0 -6
  1492. package/src/tools/TungstenTool/TungstenTool.ts +0 -26
  1493. package/src/tools/VerifyPlanExecutionTool/constants.ts +0 -2
  1494. package/src/tools/WarpGrepTool/WarpGrepTool.ts +0 -106
  1495. package/src/tools/WebBrowserTool/WebBrowserPanel.ts +0 -2
  1496. package/src/tools/WebFetchTool/UI.tsx +0 -72
  1497. package/src/tools/WebFetchTool/WebFetchTool.ts +0 -318
  1498. package/src/tools/WebFetchTool/preapproved.ts +0 -166
  1499. package/src/tools/WebFetchTool/prompt.ts +0 -46
  1500. package/src/tools/WebFetchTool/utils.ts +0 -530
  1501. package/src/tools/WebSearchTool/UI.tsx +0 -101
  1502. package/src/tools/WebSearchTool/WebSearchTool.ts +0 -435
  1503. package/src/tools/WebSearchTool/prompt.ts +0 -34
  1504. package/src/tools/WorkflowTool/WorkflowPermissionRequest.ts +0 -2
  1505. package/src/tools/WorkflowTool/WorkflowTool.ts +0 -2
  1506. package/src/tools/WorkflowTool/constants.ts +0 -1
  1507. package/src/tools/WorkflowTool/createWorkflowCommand.ts +0 -2
  1508. package/src/tools/shared/gitOperationTracking.ts +0 -277
  1509. package/src/tools/shared/spawnMultiAgent.ts +0 -1093
  1510. package/src/tools/testing/TestingPermissionTool.tsx +0 -74
  1511. package/src/tools/utils.ts +0 -40
  1512. package/src/tools.ts +0 -394
  1513. package/src/types/command.ts +0 -216
  1514. package/src/types/connectorText.ts +0 -3
  1515. package/src/types/declarations/bun-globals.d.ts +0 -19
  1516. package/src/types/declarations/external-modules.d.ts +0 -120
  1517. package/src/types/declarations/react-compiler.d.ts +0 -3
  1518. package/src/types/fileSuggestion.ts +0 -1
  1519. package/src/types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts +0 -865
  1520. package/src/types/generated/events_mono/common/v1/auth.ts +0 -100
  1521. package/src/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts +0 -223
  1522. package/src/types/generated/google/protobuf/timestamp.ts +0 -187
  1523. package/src/types/hooks.ts +0 -290
  1524. package/src/types/ids.ts +0 -44
  1525. package/src/types/logs.ts +0 -330
  1526. package/src/types/message.ts +0 -40
  1527. package/src/types/messageQueueTypes.ts +0 -2
  1528. package/src/types/notebook.ts +0 -7
  1529. package/src/types/permissions.ts +0 -441
  1530. package/src/types/plugin.ts +0 -363
  1531. package/src/types/statusLine.ts +0 -1
  1532. package/src/types/textInputTypes.ts +0 -387
  1533. package/src/types/tools.ts +0 -11
  1534. package/src/types/utils.ts +0 -2
  1535. package/src/upstreamproxy/relay.ts +0 -455
  1536. package/src/upstreamproxy/upstreamproxy.ts +0 -285
  1537. package/src/utils/CircularBuffer.ts +0 -84
  1538. package/src/utils/Cursor.ts +0 -1530
  1539. package/src/utils/QueryGuard.ts +0 -121
  1540. package/src/utils/Shell.ts +0 -474
  1541. package/src/utils/ShellCommand.ts +0 -465
  1542. package/src/utils/abortController.ts +0 -99
  1543. package/src/utils/activityManager.ts +0 -164
  1544. package/src/utils/advisor.ts +0 -145
  1545. package/src/utils/agentContext.ts +0 -178
  1546. package/src/utils/agentId.ts +0 -99
  1547. package/src/utils/agentSwarmsEnabled.ts +0 -44
  1548. package/src/utils/agenticSessionSearch.ts +0 -307
  1549. package/src/utils/analyzeContext.ts +0 -1382
  1550. package/src/utils/ansiToPng.ts +0 -334
  1551. package/src/utils/ansiToSvg.ts +0 -272
  1552. package/src/utils/api.ts +0 -718
  1553. package/src/utils/apiPreconnect.ts +0 -71
  1554. package/src/utils/appleTerminalBackup.ts +0 -124
  1555. package/src/utils/argumentSubstitution.ts +0 -145
  1556. package/src/utils/array.ts +0 -13
  1557. package/src/utils/asciicast.ts +0 -239
  1558. package/src/utils/attachments.ts +0 -3997
  1559. package/src/utils/attribution.ts +0 -393
  1560. package/src/utils/attributionHooks.ts +0 -2
  1561. package/src/utils/attributionTrailer.ts +0 -2
  1562. package/src/utils/auth.ts +0 -2002
  1563. package/src/utils/authFileDescriptor.ts +0 -196
  1564. package/src/utils/authPortable.ts +0 -19
  1565. package/src/utils/autoModeDenials.ts +0 -26
  1566. package/src/utils/autoRunIssue.tsx +0 -122
  1567. package/src/utils/autoUpdater.ts +0 -561
  1568. package/src/utils/aws.ts +0 -74
  1569. package/src/utils/awsAuthStatusManager.ts +0 -81
  1570. package/src/utils/background/remote/preconditions.ts +0 -235
  1571. package/src/utils/background/remote/remoteSession.ts +0 -98
  1572. package/src/utils/backgroundHousekeeping.ts +0 -94
  1573. package/src/utils/bash/ParsedCommand.ts +0 -318
  1574. package/src/utils/bash/ShellSnapshot.ts +0 -582
  1575. package/src/utils/bash/ast.ts +0 -2679
  1576. package/src/utils/bash/bashParser.ts +0 -4436
  1577. package/src/utils/bash/bashPipeCommand.ts +0 -294
  1578. package/src/utils/bash/commands.ts +0 -1339
  1579. package/src/utils/bash/heredoc.ts +0 -733
  1580. package/src/utils/bash/parser.ts +0 -230
  1581. package/src/utils/bash/prefix.ts +0 -204
  1582. package/src/utils/bash/registry.ts +0 -53
  1583. package/src/utils/bash/shellCompletion.ts +0 -259
  1584. package/src/utils/bash/shellPrefix.ts +0 -28
  1585. package/src/utils/bash/shellQuote.ts +0 -304
  1586. package/src/utils/bash/shellQuoting.ts +0 -128
  1587. package/src/utils/bash/specs/alias.ts +0 -14
  1588. package/src/utils/bash/specs/index.ts +0 -18
  1589. package/src/utils/bash/specs/nohup.ts +0 -13
  1590. package/src/utils/bash/specs/pyright.ts +0 -91
  1591. package/src/utils/bash/specs/sleep.ts +0 -13
  1592. package/src/utils/bash/specs/srun.ts +0 -31
  1593. package/src/utils/bash/specs/time.ts +0 -13
  1594. package/src/utils/bash/specs/timeout.ts +0 -20
  1595. package/src/utils/bash/treeSitterAnalysis.ts +0 -506
  1596. package/src/utils/betas.ts +0 -434
  1597. package/src/utils/billing.ts +0 -78
  1598. package/src/utils/binaryCheck.ts +0 -53
  1599. package/src/utils/browser.ts +0 -68
  1600. package/src/utils/bufferedWriter.ts +0 -100
  1601. package/src/utils/bundledMode.ts +0 -22
  1602. package/src/utils/caCerts.ts +0 -115
  1603. package/src/utils/caCertsConfig.ts +0 -88
  1604. package/src/utils/cachePaths.ts +0 -38
  1605. package/src/utils/ccshareResume.ts +0 -2
  1606. package/src/utils/classifierApprovals.ts +0 -88
  1607. package/src/utils/classifierApprovalsHook.ts +0 -17
  1608. package/src/utils/claudeCodeHints.ts +0 -193
  1609. package/src/utils/claudeDesktop.ts +0 -152
  1610. package/src/utils/claudeInChrome/chromeNativeHost.ts +0 -527
  1611. package/src/utils/claudeInChrome/common.ts +0 -540
  1612. package/src/utils/claudeInChrome/mcpServer.ts +0 -293
  1613. package/src/utils/claudeInChrome/prompt.ts +0 -83
  1614. package/src/utils/claudeInChrome/setup.ts +0 -400
  1615. package/src/utils/claudeInChrome/setupPortable.ts +0 -233
  1616. package/src/utils/claudeInChrome/toolRendering.tsx +0 -262
  1617. package/src/utils/claudemd.ts +0 -1479
  1618. package/src/utils/cleanup.ts +0 -602
  1619. package/src/utils/cleanupRegistry.ts +0 -25
  1620. package/src/utils/cliArgs.ts +0 -60
  1621. package/src/utils/cliHighlight.ts +0 -54
  1622. package/src/utils/codeIndexing.ts +0 -206
  1623. package/src/utils/collapseBackgroundBashNotifications.ts +0 -84
  1624. package/src/utils/collapseHookSummaries.ts +0 -59
  1625. package/src/utils/collapseReadSearch.ts +0 -1109
  1626. package/src/utils/collapseTeammateShutdowns.ts +0 -55
  1627. package/src/utils/combinedAbortSignal.ts +0 -47
  1628. package/src/utils/commandLifecycle.ts +0 -21
  1629. package/src/utils/commitAttribution.ts +0 -961
  1630. package/src/utils/completionCache.ts +0 -166
  1631. package/src/utils/computerUse/appNames.ts +0 -196
  1632. package/src/utils/computerUse/cleanup.ts +0 -86
  1633. package/src/utils/computerUse/common.ts +0 -61
  1634. package/src/utils/computerUse/computerUseLock.ts +0 -215
  1635. package/src/utils/computerUse/drainRunLoop.ts +0 -79
  1636. package/src/utils/computerUse/escHotkey.ts +0 -54
  1637. package/src/utils/computerUse/executor.ts +0 -658
  1638. package/src/utils/computerUse/gates.ts +0 -72
  1639. package/src/utils/computerUse/hostAdapter.ts +0 -69
  1640. package/src/utils/computerUse/inputLoader.ts +0 -30
  1641. package/src/utils/computerUse/mcpServer.ts +0 -106
  1642. package/src/utils/computerUse/setup.ts +0 -53
  1643. package/src/utils/computerUse/swiftLoader.ts +0 -23
  1644. package/src/utils/computerUse/toolRendering.tsx +0 -125
  1645. package/src/utils/computerUse/wrapper.tsx +0 -336
  1646. package/src/utils/concurrentSessions.ts +0 -204
  1647. package/src/utils/config.ts +0 -1817
  1648. package/src/utils/configConstants.ts +0 -21
  1649. package/src/utils/contentArray.ts +0 -51
  1650. package/src/utils/context.ts +0 -221
  1651. package/src/utils/contextAnalysis.ts +0 -272
  1652. package/src/utils/contextSuggestions.ts +0 -235
  1653. package/src/utils/controlMessageCompat.ts +0 -32
  1654. package/src/utils/conversationRecovery.ts +0 -597
  1655. package/src/utils/cron.ts +0 -308
  1656. package/src/utils/cronJitterConfig.ts +0 -75
  1657. package/src/utils/cronScheduler.ts +0 -565
  1658. package/src/utils/cronTasks.ts +0 -458
  1659. package/src/utils/cronTasksLock.ts +0 -195
  1660. package/src/utils/crossProjectResume.ts +0 -75
  1661. package/src/utils/crypto.ts +0 -13
  1662. package/src/utils/cwd.ts +0 -32
  1663. package/src/utils/debug.ts +0 -268
  1664. package/src/utils/debugFilter.ts +0 -157
  1665. package/src/utils/deepLink/banner.ts +0 -123
  1666. package/src/utils/deepLink/parseDeepLink.ts +0 -170
  1667. package/src/utils/deepLink/protocolHandler.ts +0 -136
  1668. package/src/utils/deepLink/registerProtocol.ts +0 -348
  1669. package/src/utils/deepLink/terminalLauncher.ts +0 -557
  1670. package/src/utils/deepLink/terminalPreference.ts +0 -54
  1671. package/src/utils/desktopDeepLink.ts +0 -236
  1672. package/src/utils/detectRepository.ts +0 -178
  1673. package/src/utils/diagLogs.ts +0 -94
  1674. package/src/utils/diff.ts +0 -177
  1675. package/src/utils/directMemberMessage.ts +0 -69
  1676. package/src/utils/displayTags.ts +0 -51
  1677. package/src/utils/doctorContextWarnings.ts +0 -265
  1678. package/src/utils/doctorDiagnostic.ts +0 -625
  1679. package/src/utils/dxt/helpers.ts +0 -88
  1680. package/src/utils/dxt/zip.ts +0 -226
  1681. package/src/utils/earlyInput.ts +0 -191
  1682. package/src/utils/editor.ts +0 -183
  1683. package/src/utils/effort.ts +0 -329
  1684. package/src/utils/embeddedTools.ts +0 -29
  1685. package/src/utils/env.ts +0 -347
  1686. package/src/utils/envDynamic.ts +0 -151
  1687. package/src/utils/envUtils.ts +0 -183
  1688. package/src/utils/envValidation.ts +0 -38
  1689. package/src/utils/errorLogSink.ts +0 -235
  1690. package/src/utils/errors.ts +0 -238
  1691. package/src/utils/eventLoopStallDetector.ts +0 -2
  1692. package/src/utils/exampleCommands.ts +0 -184
  1693. package/src/utils/execFileNoThrow.ts +0 -150
  1694. package/src/utils/execFileNoThrowPortable.ts +0 -89
  1695. package/src/utils/execSyncWrapper.ts +0 -38
  1696. package/src/utils/exportRenderer.tsx +0 -98
  1697. package/src/utils/extraUsage.ts +0 -23
  1698. package/src/utils/fastMode.ts +0 -532
  1699. package/src/utils/file.ts +0 -584
  1700. package/src/utils/fileHistory.ts +0 -1115
  1701. package/src/utils/fileOperationAnalytics.ts +0 -71
  1702. package/src/utils/filePersistence/filePersistence.ts +0 -287
  1703. package/src/utils/filePersistence/outputsScanner.ts +0 -126
  1704. package/src/utils/filePersistence/types.ts +0 -33
  1705. package/src/utils/fileRead.ts +0 -102
  1706. package/src/utils/fileReadCache.ts +0 -96
  1707. package/src/utils/fileStateCache.ts +0 -142
  1708. package/src/utils/findExecutable.ts +0 -17
  1709. package/src/utils/fingerprint.ts +0 -76
  1710. package/src/utils/forkedAgent.ts +0 -689
  1711. package/src/utils/format.ts +0 -308
  1712. package/src/utils/formatBriefTimestamp.ts +0 -81
  1713. package/src/utils/fpsTracker.ts +0 -47
  1714. package/src/utils/frontmatterParser.ts +0 -370
  1715. package/src/utils/fsOperations.ts +0 -770
  1716. package/src/utils/fullscreen.ts +0 -202
  1717. package/src/utils/generatedFiles.ts +0 -136
  1718. package/src/utils/generators.ts +0 -88
  1719. package/src/utils/genericProcessUtils.ts +0 -184
  1720. package/src/utils/getWorktreePaths.ts +0 -70
  1721. package/src/utils/getWorktreePathsPortable.ts +0 -27
  1722. package/src/utils/ghPrStatus.ts +0 -106
  1723. package/src/utils/git/gitConfigParser.ts +0 -277
  1724. package/src/utils/git/gitFilesystem.ts +0 -699
  1725. package/src/utils/git/gitignore.ts +0 -99
  1726. package/src/utils/git.ts +0 -926
  1727. package/src/utils/gitDiff.ts +0 -532
  1728. package/src/utils/gitSettings.ts +0 -18
  1729. package/src/utils/github/ghAuthStatus.ts +0 -29
  1730. package/src/utils/githubRepoPathMapping.ts +0 -162
  1731. package/src/utils/glob.ts +0 -130
  1732. package/src/utils/gracefulShutdown.ts +0 -529
  1733. package/src/utils/groupToolUses.ts +0 -182
  1734. package/src/utils/handlePromptSubmit.ts +0 -610
  1735. package/src/utils/hash.ts +0 -46
  1736. package/src/utils/headlessProfiler.ts +0 -178
  1737. package/src/utils/heapDumpService.ts +0 -303
  1738. package/src/utils/heatmap.ts +0 -198
  1739. package/src/utils/highlightMatch.tsx +0 -28
  1740. package/src/utils/hooks/AsyncHookRegistry.ts +0 -309
  1741. package/src/utils/hooks/apiQueryHookHelper.ts +0 -141
  1742. package/src/utils/hooks/execAgentHook.ts +0 -339
  1743. package/src/utils/hooks/execHttpHook.ts +0 -242
  1744. package/src/utils/hooks/execPromptHook.ts +0 -211
  1745. package/src/utils/hooks/fileChangedWatcher.ts +0 -191
  1746. package/src/utils/hooks/hookEvents.ts +0 -192
  1747. package/src/utils/hooks/hookHelpers.ts +0 -83
  1748. package/src/utils/hooks/hooksConfigManager.ts +0 -400
  1749. package/src/utils/hooks/hooksConfigSnapshot.ts +0 -133
  1750. package/src/utils/hooks/hooksSettings.ts +0 -271
  1751. package/src/utils/hooks/postSamplingHooks.ts +0 -70
  1752. package/src/utils/hooks/registerFrontmatterHooks.ts +0 -67
  1753. package/src/utils/hooks/registerSkillHooks.ts +0 -64
  1754. package/src/utils/hooks/sessionHooks.ts +0 -447
  1755. package/src/utils/hooks/skillImprovement.ts +0 -267
  1756. package/src/utils/hooks/ssrfGuard.ts +0 -294
  1757. package/src/utils/hooks.ts +0 -5022
  1758. package/src/utils/horizontalScroll.ts +0 -137
  1759. package/src/utils/http.ts +0 -136
  1760. package/src/utils/hyperlink.ts +0 -39
  1761. package/src/utils/iTermBackup.ts +0 -73
  1762. package/src/utils/ide.ts +0 -1494
  1763. package/src/utils/idePathConversion.ts +0 -90
  1764. package/src/utils/idleTimeout.ts +0 -53
  1765. package/src/utils/imagePaste.ts +0 -416
  1766. package/src/utils/imageResizer.ts +0 -880
  1767. package/src/utils/imageStore.ts +0 -167
  1768. package/src/utils/imageValidation.ts +0 -104
  1769. package/src/utils/immediateCommand.ts +0 -15
  1770. package/src/utils/inProcessTeammateHelpers.ts +0 -102
  1771. package/src/utils/ink.ts +0 -26
  1772. package/src/utils/intl.ts +0 -94
  1773. package/src/utils/jetbrains.ts +0 -191
  1774. package/src/utils/json.ts +0 -277
  1775. package/src/utils/jsonRead.ts +0 -16
  1776. package/src/utils/keyboardShortcuts.ts +0 -14
  1777. package/src/utils/lazySchema.ts +0 -8
  1778. package/src/utils/listSessionsImpl.ts +0 -454
  1779. package/src/utils/localInstaller.ts +0 -162
  1780. package/src/utils/lockfile.ts +0 -43
  1781. package/src/utils/log.ts +0 -362
  1782. package/src/utils/logoV2Utils.ts +0 -350
  1783. package/src/utils/mailbox.ts +0 -73
  1784. package/src/utils/managedEnv.ts +0 -199
  1785. package/src/utils/managedEnvConstants.ts +0 -191
  1786. package/src/utils/markdown.ts +0 -381
  1787. package/src/utils/markdownConfigLoader.ts +0 -600
  1788. package/src/utils/mcp/dateTimeParser.ts +0 -121
  1789. package/src/utils/mcp/elicitationValidation.ts +0 -336
  1790. package/src/utils/mcpInstructionsDelta.ts +0 -130
  1791. package/src/utils/mcpOutputStorage.ts +0 -189
  1792. package/src/utils/mcpValidation.ts +0 -208
  1793. package/src/utils/mcpWebSocketTransport.ts +0 -200
  1794. package/src/utils/memoize.ts +0 -269
  1795. package/src/utils/memory/types.ts +0 -12
  1796. package/src/utils/memory/versions.ts +0 -8
  1797. package/src/utils/memoryFileDetection.ts +0 -289
  1798. package/src/utils/messagePredicates.ts +0 -8
  1799. package/src/utils/messageQueueManager.ts +0 -547
  1800. package/src/utils/messages/mappers.ts +0 -290
  1801. package/src/utils/messages/systemInit.ts +0 -96
  1802. package/src/utils/messages.ts +0 -5512
  1803. package/src/utils/model/agent.ts +0 -157
  1804. package/src/utils/model/aliases.ts +0 -25
  1805. package/src/utils/model/antModels.ts +0 -64
  1806. package/src/utils/model/bedrock.ts +0 -265
  1807. package/src/utils/model/check1mAccess.ts +0 -72
  1808. package/src/utils/model/configs.ts +0 -118
  1809. package/src/utils/model/contextWindowUpgradeCheck.ts +0 -47
  1810. package/src/utils/model/deprecation.ts +0 -101
  1811. package/src/utils/model/model.ts +0 -618
  1812. package/src/utils/model/modelAllowlist.ts +0 -170
  1813. package/src/utils/model/modelCapabilities.ts +0 -118
  1814. package/src/utils/model/modelOptions.ts +0 -540
  1815. package/src/utils/model/modelStrings.ts +0 -166
  1816. package/src/utils/model/modelSupportOverrides.ts +0 -50
  1817. package/src/utils/model/providers.ts +0 -40
  1818. package/src/utils/model/validateModel.ts +0 -159
  1819. package/src/utils/modelCost.ts +0 -231
  1820. package/src/utils/modifiers.ts +0 -41
  1821. package/src/utils/mtls.ts +0 -179
  1822. package/src/utils/nativeInstaller/download.ts +0 -523
  1823. package/src/utils/nativeInstaller/index.ts +0 -18
  1824. package/src/utils/nativeInstaller/installer.ts +0 -1708
  1825. package/src/utils/nativeInstaller/packageManagers.ts +0 -336
  1826. package/src/utils/nativeInstaller/pidLock.ts +0 -433
  1827. package/src/utils/notebook.ts +0 -224
  1828. package/src/utils/objectGroupBy.ts +0 -18
  1829. package/src/utils/pasteStore.ts +0 -104
  1830. package/src/utils/path.ts +0 -155
  1831. package/src/utils/pdf.ts +0 -300
  1832. package/src/utils/pdfUtils.ts +0 -70
  1833. package/src/utils/peerAddress.ts +0 -21
  1834. package/src/utils/permissions/PermissionMode.ts +0 -141
  1835. package/src/utils/permissions/PermissionPromptToolResultSchema.ts +0 -127
  1836. package/src/utils/permissions/PermissionResult.ts +0 -35
  1837. package/src/utils/permissions/PermissionRule.ts +0 -40
  1838. package/src/utils/permissions/PermissionUpdate.ts +0 -389
  1839. package/src/utils/permissions/PermissionUpdateSchema.ts +0 -78
  1840. package/src/utils/permissions/autoModeState.ts +0 -39
  1841. package/src/utils/permissions/bashClassifier.ts +0 -61
  1842. package/src/utils/permissions/bypassPermissionsKillswitch.ts +0 -155
  1843. package/src/utils/permissions/classifierDecision.ts +0 -98
  1844. package/src/utils/permissions/classifierShared.ts +0 -39
  1845. package/src/utils/permissions/dangerousPatterns.ts +0 -80
  1846. package/src/utils/permissions/denialTracking.ts +0 -45
  1847. package/src/utils/permissions/filesystem.ts +0 -1777
  1848. package/src/utils/permissions/getNextPermissionMode.ts +0 -101
  1849. package/src/utils/permissions/pathValidation.ts +0 -485
  1850. package/src/utils/permissions/permissionExplainer.ts +0 -250
  1851. package/src/utils/permissions/permissionRuleParser.ts +0 -198
  1852. package/src/utils/permissions/permissionSetup.ts +0 -1532
  1853. package/src/utils/permissions/permissions.ts +0 -1486
  1854. package/src/utils/permissions/permissionsLoader.ts +0 -296
  1855. package/src/utils/permissions/shadowedRuleDetection.ts +0 -234
  1856. package/src/utils/permissions/shellRuleMatching.ts +0 -228
  1857. package/src/utils/permissions/yoloClassifier.ts +0 -1495
  1858. package/src/utils/planModeV2.ts +0 -95
  1859. package/src/utils/plans.ts +0 -397
  1860. package/src/utils/platform.ts +0 -150
  1861. package/src/utils/plugins/addDirPluginSettings.ts +0 -71
  1862. package/src/utils/plugins/cacheUtils.ts +0 -196
  1863. package/src/utils/plugins/dependencyResolver.ts +0 -305
  1864. package/src/utils/plugins/fetchTelemetry.ts +0 -135
  1865. package/src/utils/plugins/gitAvailability.ts +0 -69
  1866. package/src/utils/plugins/headlessPluginInstall.ts +0 -174
  1867. package/src/utils/plugins/hintRecommendation.ts +0 -164
  1868. package/src/utils/plugins/installCounts.ts +0 -292
  1869. package/src/utils/plugins/installedPluginsManager.ts +0 -1268
  1870. package/src/utils/plugins/loadPluginAgents.ts +0 -348
  1871. package/src/utils/plugins/loadPluginCommands.ts +0 -946
  1872. package/src/utils/plugins/loadPluginHooks.ts +0 -287
  1873. package/src/utils/plugins/loadPluginOutputStyles.ts +0 -178
  1874. package/src/utils/plugins/lspPluginIntegration.ts +0 -387
  1875. package/src/utils/plugins/lspRecommendation.ts +0 -374
  1876. package/src/utils/plugins/managedPlugins.ts +0 -27
  1877. package/src/utils/plugins/marketplaceHelpers.ts +0 -592
  1878. package/src/utils/plugins/marketplaceManager.ts +0 -2643
  1879. package/src/utils/plugins/mcpPluginIntegration.ts +0 -634
  1880. package/src/utils/plugins/mcpbHandler.ts +0 -968
  1881. package/src/utils/plugins/officialMarketplace.ts +0 -25
  1882. package/src/utils/plugins/officialMarketplaceGcs.ts +0 -216
  1883. package/src/utils/plugins/officialMarketplaceStartupCheck.ts +0 -439
  1884. package/src/utils/plugins/orphanedPluginFilter.ts +0 -114
  1885. package/src/utils/plugins/parseMarketplaceInput.ts +0 -162
  1886. package/src/utils/plugins/performStartupChecks.tsx +0 -70
  1887. package/src/utils/plugins/pluginAutoupdate.ts +0 -284
  1888. package/src/utils/plugins/pluginBlocklist.ts +0 -127
  1889. package/src/utils/plugins/pluginDirectories.ts +0 -178
  1890. package/src/utils/plugins/pluginFlagging.ts +0 -208
  1891. package/src/utils/plugins/pluginIdentifier.ts +0 -123
  1892. package/src/utils/plugins/pluginInstallationHelpers.ts +0 -595
  1893. package/src/utils/plugins/pluginLoader.ts +0 -3302
  1894. package/src/utils/plugins/pluginOptionsStorage.ts +0 -400
  1895. package/src/utils/plugins/pluginPolicy.ts +0 -20
  1896. package/src/utils/plugins/pluginStartupCheck.ts +0 -341
  1897. package/src/utils/plugins/pluginVersioning.ts +0 -157
  1898. package/src/utils/plugins/reconciler.ts +0 -265
  1899. package/src/utils/plugins/refresh.ts +0 -215
  1900. package/src/utils/plugins/schemas.ts +0 -1681
  1901. package/src/utils/plugins/validatePlugin.ts +0 -903
  1902. package/src/utils/plugins/walkPluginMarkdown.ts +0 -69
  1903. package/src/utils/plugins/zipCache.ts +0 -406
  1904. package/src/utils/plugins/zipCacheAdapters.ts +0 -164
  1905. package/src/utils/postCommitAttribution.ts +0 -2
  1906. package/src/utils/powershell/dangerousCmdlets.ts +0 -185
  1907. package/src/utils/powershell/parser.ts +0 -1804
  1908. package/src/utils/powershell/staticPrefix.ts +0 -316
  1909. package/src/utils/preflightChecks.tsx +0 -151
  1910. package/src/utils/privacyLevel.ts +0 -55
  1911. package/src/utils/process.ts +0 -68
  1912. package/src/utils/processUserInput/processBashCommand.tsx +0 -140
  1913. package/src/utils/processUserInput/processSlashCommand.tsx +0 -922
  1914. package/src/utils/processUserInput/processTextPrompt.ts +0 -100
  1915. package/src/utils/processUserInput/processUserInput.ts +0 -605
  1916. package/src/utils/profilerBase.ts +0 -46
  1917. package/src/utils/promptCategory.ts +0 -49
  1918. package/src/utils/promptEditor.ts +0 -188
  1919. package/src/utils/promptShellExecution.ts +0 -183
  1920. package/src/utils/protectedNamespace.ts +0 -2
  1921. package/src/utils/proxy.ts +0 -426
  1922. package/src/utils/queryContext.ts +0 -179
  1923. package/src/utils/queryHelpers.ts +0 -552
  1924. package/src/utils/queryProfiler.ts +0 -301
  1925. package/src/utils/queueProcessor.ts +0 -95
  1926. package/src/utils/readEditContext.ts +0 -227
  1927. package/src/utils/readFileInRange.ts +0 -383
  1928. package/src/utils/releaseNotes.ts +0 -360
  1929. package/src/utils/renderOptions.ts +0 -77
  1930. package/src/utils/ripgrep.ts +0 -679
  1931. package/src/utils/sandbox/sandbox-adapter.ts +0 -985
  1932. package/src/utils/sandbox/sandbox-ui-utils.ts +0 -12
  1933. package/src/utils/sanitization.ts +0 -91
  1934. package/src/utils/screenshotClipboard.ts +0 -121
  1935. package/src/utils/sdkEventQueue.ts +0 -134
  1936. package/src/utils/sdkHeapDumpMonitor.ts +0 -2
  1937. package/src/utils/secureStorage/fallbackStorage.ts +0 -70
  1938. package/src/utils/secureStorage/index.ts +0 -17
  1939. package/src/utils/secureStorage/keychainPrefetch.ts +0 -116
  1940. package/src/utils/secureStorage/macOsKeychainHelpers.ts +0 -111
  1941. package/src/utils/secureStorage/macOsKeychainStorage.ts +0 -231
  1942. package/src/utils/secureStorage/plainTextStorage.ts +0 -84
  1943. package/src/utils/secureStorage/types.ts +0 -2
  1944. package/src/utils/semanticBoolean.ts +0 -29
  1945. package/src/utils/semanticNumber.ts +0 -36
  1946. package/src/utils/semver.ts +0 -59
  1947. package/src/utils/sequential.ts +0 -56
  1948. package/src/utils/sessionActivity.ts +0 -133
  1949. package/src/utils/sessionDataUploader.ts +0 -2
  1950. package/src/utils/sessionEnvVars.ts +0 -22
  1951. package/src/utils/sessionEnvironment.ts +0 -166
  1952. package/src/utils/sessionFileAccessHooks.ts +0 -250
  1953. package/src/utils/sessionIngressAuth.ts +0 -140
  1954. package/src/utils/sessionRestore.ts +0 -551
  1955. package/src/utils/sessionStart.ts +0 -232
  1956. package/src/utils/sessionState.ts +0 -150
  1957. package/src/utils/sessionStorage.ts +0 -5105
  1958. package/src/utils/sessionStoragePortable.ts +0 -793
  1959. package/src/utils/sessionTitle.ts +0 -129
  1960. package/src/utils/sessionUrl.ts +0 -64
  1961. package/src/utils/set.ts +0 -53
  1962. package/src/utils/settings/allErrors.ts +0 -32
  1963. package/src/utils/settings/applySettingsChange.ts +0 -92
  1964. package/src/utils/settings/changeDetector.ts +0 -488
  1965. package/src/utils/settings/constants.ts +0 -202
  1966. package/src/utils/settings/internalWrites.ts +0 -37
  1967. package/src/utils/settings/managedPath.ts +0 -34
  1968. package/src/utils/settings/mdm/constants.ts +0 -81
  1969. package/src/utils/settings/mdm/rawRead.ts +0 -130
  1970. package/src/utils/settings/mdm/settings.ts +0 -316
  1971. package/src/utils/settings/permissionValidation.ts +0 -262
  1972. package/src/utils/settings/pluginOnlyPolicy.ts +0 -60
  1973. package/src/utils/settings/schemaOutput.ts +0 -8
  1974. package/src/utils/settings/settings.ts +0 -1015
  1975. package/src/utils/settings/settingsCache.ts +0 -80
  1976. package/src/utils/settings/toolValidationConfig.ts +0 -103
  1977. package/src/utils/settings/types.ts +0 -1148
  1978. package/src/utils/settings/validateEditTool.ts +0 -45
  1979. package/src/utils/settings/validation.ts +0 -265
  1980. package/src/utils/settings/validationTips.ts +0 -164
  1981. package/src/utils/shell/bashProvider.ts +0 -255
  1982. package/src/utils/shell/outputLimits.ts +0 -14
  1983. package/src/utils/shell/powershellDetection.ts +0 -107
  1984. package/src/utils/shell/powershellProvider.ts +0 -123
  1985. package/src/utils/shell/prefix.ts +0 -367
  1986. package/src/utils/shell/readOnlyCommandValidation.ts +0 -1893
  1987. package/src/utils/shell/resolveDefaultShell.ts +0 -14
  1988. package/src/utils/shell/shellProvider.ts +0 -33
  1989. package/src/utils/shell/shellToolUtils.ts +0 -22
  1990. package/src/utils/shell/specPrefix.ts +0 -241
  1991. package/src/utils/shellConfig.ts +0 -167
  1992. package/src/utils/sideQuery.ts +0 -222
  1993. package/src/utils/sideQuestion.ts +0 -155
  1994. package/src/utils/signal.ts +0 -43
  1995. package/src/utils/sinks.ts +0 -16
  1996. package/src/utils/skills/skillChangeDetector.ts +0 -311
  1997. package/src/utils/slashCommandParsing.ts +0 -60
  1998. package/src/utils/sleep.ts +0 -84
  1999. package/src/utils/sliceAnsi.ts +0 -91
  2000. package/src/utils/slowOperations.ts +0 -286
  2001. package/src/utils/standaloneAgent.ts +0 -23
  2002. package/src/utils/startupProfiler.ts +0 -194
  2003. package/src/utils/staticRender.tsx +0 -116
  2004. package/src/utils/stats.ts +0 -1061
  2005. package/src/utils/statsCache.ts +0 -434
  2006. package/src/utils/status.tsx +0 -362
  2007. package/src/utils/statusNoticeDefinitions.tsx +0 -198
  2008. package/src/utils/statusNoticeHelpers.ts +0 -20
  2009. package/src/utils/stream.ts +0 -76
  2010. package/src/utils/streamJsonStdoutGuard.ts +0 -123
  2011. package/src/utils/streamlinedTransform.ts +0 -201
  2012. package/src/utils/stringUtils.ts +0 -235
  2013. package/src/utils/subprocessEnv.ts +0 -99
  2014. package/src/utils/suggestions/commandSuggestions.ts +0 -567
  2015. package/src/utils/suggestions/directoryCompletion.ts +0 -263
  2016. package/src/utils/suggestions/shellHistoryCompletion.ts +0 -119
  2017. package/src/utils/suggestions/skillUsageTracking.ts +0 -55
  2018. package/src/utils/suggestions/slackChannelSuggestions.ts +0 -209
  2019. package/src/utils/swarm/It2SetupPrompt.tsx +0 -380
  2020. package/src/utils/swarm/backends/ITermBackend.ts +0 -370
  2021. package/src/utils/swarm/backends/InProcessBackend.ts +0 -339
  2022. package/src/utils/swarm/backends/PaneBackendExecutor.ts +0 -354
  2023. package/src/utils/swarm/backends/TmuxBackend.ts +0 -764
  2024. package/src/utils/swarm/backends/detection.ts +0 -128
  2025. package/src/utils/swarm/backends/it2Setup.ts +0 -245
  2026. package/src/utils/swarm/backends/registry.ts +0 -464
  2027. package/src/utils/swarm/backends/teammateModeSnapshot.ts +0 -87
  2028. package/src/utils/swarm/backends/types.ts +0 -311
  2029. package/src/utils/swarm/constants.ts +0 -33
  2030. package/src/utils/swarm/inProcessRunner.ts +0 -1552
  2031. package/src/utils/swarm/leaderPermissionBridge.ts +0 -54
  2032. package/src/utils/swarm/permissionSync.ts +0 -928
  2033. package/src/utils/swarm/reconnection.ts +0 -119
  2034. package/src/utils/swarm/spawnInProcess.ts +0 -328
  2035. package/src/utils/swarm/spawnUtils.ts +0 -146
  2036. package/src/utils/swarm/teamHelpers.ts +0 -683
  2037. package/src/utils/swarm/teammateInit.ts +0 -129
  2038. package/src/utils/swarm/teammateLayoutManager.ts +0 -107
  2039. package/src/utils/swarm/teammateModel.ts +0 -10
  2040. package/src/utils/swarm/teammatePromptAddendum.ts +0 -18
  2041. package/src/utils/systemDirectories.ts +0 -74
  2042. package/src/utils/systemPrompt.ts +0 -123
  2043. package/src/utils/systemPromptType.ts +0 -14
  2044. package/src/utils/systemTheme.ts +0 -119
  2045. package/src/utils/systemThemeWatcher.ts +0 -2
  2046. package/src/utils/taggedId.ts +0 -54
  2047. package/src/utils/task/TaskOutput.ts +0 -390
  2048. package/src/utils/task/diskOutput.ts +0 -451
  2049. package/src/utils/task/framework.ts +0 -308
  2050. package/src/utils/task/outputFormatting.ts +0 -38
  2051. package/src/utils/task/sdkProgress.ts +0 -36
  2052. package/src/utils/taskSummary.ts +0 -2
  2053. package/src/utils/tasks.ts +0 -862
  2054. package/src/utils/teamDiscovery.ts +0 -81
  2055. package/src/utils/teamMemoryOps.ts +0 -88
  2056. package/src/utils/teammate.ts +0 -292
  2057. package/src/utils/teammateContext.ts +0 -96
  2058. package/src/utils/teammateMailbox.ts +0 -1183
  2059. package/src/utils/telemetry/betaSessionTracing.ts +0 -491
  2060. package/src/utils/telemetry/bigqueryExporter.ts +0 -252
  2061. package/src/utils/telemetry/events.ts +0 -75
  2062. package/src/utils/telemetry/instrumentation.ts +0 -825
  2063. package/src/utils/telemetry/logger.ts +0 -26
  2064. package/src/utils/telemetry/perfettoTracing.ts +0 -1120
  2065. package/src/utils/telemetry/pluginTelemetry.ts +0 -289
  2066. package/src/utils/telemetry/sessionTracing.ts +0 -927
  2067. package/src/utils/telemetry/skillLoadedEvent.ts +0 -39
  2068. package/src/utils/telemetryAttributes.ts +0 -71
  2069. package/src/utils/teleport/api.ts +0 -466
  2070. package/src/utils/teleport/environmentSelection.ts +0 -77
  2071. package/src/utils/teleport/environments.ts +0 -120
  2072. package/src/utils/teleport/gitBundle.ts +0 -292
  2073. package/src/utils/teleport.tsx +0 -1226
  2074. package/src/utils/tempfile.ts +0 -31
  2075. package/src/utils/terminal.ts +0 -131
  2076. package/src/utils/terminalPanel.ts +0 -191
  2077. package/src/utils/textHighlighting.ts +0 -166
  2078. package/src/utils/theme.ts +0 -639
  2079. package/src/utils/thinking.ts +0 -162
  2080. package/src/utils/timeouts.ts +0 -39
  2081. package/src/utils/tmuxSocket.ts +0 -427
  2082. package/src/utils/todo/types.ts +0 -18
  2083. package/src/utils/tokenBudget.ts +0 -73
  2084. package/src/utils/tokens.ts +0 -261
  2085. package/src/utils/toolErrors.ts +0 -132
  2086. package/src/utils/toolPool.ts +0 -79
  2087. package/src/utils/toolResultStorage.ts +0 -1040
  2088. package/src/utils/toolSchemaCache.ts +0 -26
  2089. package/src/utils/toolSearch.ts +0 -756
  2090. package/src/utils/transcriptSearch.ts +0 -202
  2091. package/src/utils/treeify.ts +0 -170
  2092. package/src/utils/truncate.ts +0 -179
  2093. package/src/utils/udsClient.ts +0 -2
  2094. package/src/utils/udsMessaging.ts +0 -2
  2095. package/src/utils/ultraplan/ccrSession.ts +0 -349
  2096. package/src/utils/ultraplan/keyword.ts +0 -127
  2097. package/src/utils/ultraplan/prompt.txt +0 -1
  2098. package/src/utils/unaryLogging.ts +0 -39
  2099. package/src/utils/undercover.ts +0 -89
  2100. package/src/utils/user.ts +0 -194
  2101. package/src/utils/userAgent.ts +0 -10
  2102. package/src/utils/userPromptKeywords.ts +0 -27
  2103. package/src/utils/uuid.ts +0 -27
  2104. package/src/utils/warningHandler.ts +0 -121
  2105. package/src/utils/which.ts +0 -82
  2106. package/src/utils/windowsPaths.ts +0 -173
  2107. package/src/utils/withResolvers.ts +0 -13
  2108. package/src/utils/words.ts +0 -800
  2109. package/src/utils/workloadContext.ts +0 -57
  2110. package/src/utils/worktree.ts +0 -1519
  2111. package/src/utils/worktreeModeEnabled.ts +0 -11
  2112. package/src/utils/xdg.ts +0 -65
  2113. package/src/utils/xml.ts +0 -16
  2114. package/src/utils/yaml.ts +0 -15
  2115. package/src/utils/zodToJsonSchema.ts +0 -23
  2116. package/src/vim/motions.ts +0 -82
  2117. package/src/vim/operators.ts +0 -556
  2118. package/src/vim/textObjects.ts +0 -186
  2119. package/src/vim/transitions.ts +0 -490
  2120. package/src/vim/types.ts +0 -199
  2121. package/src/voice/voiceModeEnabled.ts +0 -54
  2122. package/stubs/@ant/claude-for-chrome-mcp/index.js +0 -4
  2123. package/stubs/@ant/claude-for-chrome-mcp/index.ts +0 -4
  2124. package/stubs/@ant/claude-for-chrome-mcp/package.json +0 -6
  2125. package/stubs/@ant/computer-use-input/index.js +0 -2
  2126. package/stubs/@ant/computer-use-input/index.ts +0 -3
  2127. package/stubs/@ant/computer-use-input/package.json +0 -6
  2128. package/stubs/@ant/computer-use-mcp/index.js +0 -5
  2129. package/stubs/@ant/computer-use-mcp/index.ts +0 -5
  2130. package/stubs/@ant/computer-use-mcp/package.json +0 -11
  2131. package/stubs/@ant/computer-use-mcp/sentinelApps.js +0 -3
  2132. package/stubs/@ant/computer-use-mcp/sentinelApps.ts +0 -3
  2133. package/stubs/@ant/computer-use-mcp/types.js +0 -2
  2134. package/stubs/@ant/computer-use-mcp/types.ts +0 -6
  2135. package/stubs/@ant/computer-use-swift/index.js +0 -2
  2136. package/stubs/@ant/computer-use-swift/index.ts +0 -2
  2137. package/stubs/@ant/computer-use-swift/package.json +0 -6
  2138. package/stubs/@anthropic-ai/claude-agent-sdk/index.js +0 -2
  2139. package/stubs/@anthropic-ai/claude-agent-sdk/index.ts +0 -2
  2140. package/stubs/@anthropic-ai/claude-agent-sdk/package.json +0 -6
  2141. package/stubs/@anthropic-ai/mcpb/index.js +0 -2
  2142. package/stubs/@anthropic-ai/mcpb/index.ts +0 -3
  2143. package/stubs/@anthropic-ai/mcpb/package.json +0 -6
  2144. package/stubs/@anthropic-ai/sandbox-runtime/index.js +0 -42
  2145. package/stubs/@anthropic-ai/sandbox-runtime/index.ts +0 -49
  2146. package/stubs/@anthropic-ai/sandbox-runtime/package.json +0 -6
  2147. package/stubs/globals.ts +0 -11
  2148. package/stubs/macro.d.ts +0 -9
  2149. 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