@amplitude/wizard 1.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. package/LICENSE +47 -0
  2. package/README.md +119 -0
  3. package/dist/bin.d.ts +2 -0
  4. package/dist/bin.js +763 -0
  5. package/dist/package.json +144 -0
  6. package/dist/src/frameworks/android/android-wizard-agent.d.ts +6 -0
  7. package/dist/src/frameworks/android/android-wizard-agent.js +72 -0
  8. package/dist/src/frameworks/android/utils.d.ts +11 -0
  9. package/dist/src/frameworks/android/utils.js +32 -0
  10. package/dist/src/frameworks/django/django-wizard-agent.d.ts +8 -0
  11. package/dist/src/frameworks/django/django-wizard-agent.js +171 -0
  12. package/dist/src/frameworks/django/utils.d.ts +31 -0
  13. package/dist/src/frameworks/django/utils.js +305 -0
  14. package/dist/src/frameworks/fastapi/fastapi-wizard-agent.d.ts +11 -0
  15. package/dist/src/frameworks/fastapi/fastapi-wizard-agent.js +189 -0
  16. package/dist/src/frameworks/fastapi/utils.d.ts +26 -0
  17. package/dist/src/frameworks/fastapi/utils.js +257 -0
  18. package/dist/src/frameworks/flask/flask-wizard-agent.d.ts +8 -0
  19. package/dist/src/frameworks/flask/flask-wizard-agent.js +177 -0
  20. package/dist/src/frameworks/flask/utils.d.ts +28 -0
  21. package/dist/src/frameworks/flask/utils.js +343 -0
  22. package/dist/src/frameworks/flutter/flutter-wizard-agent.d.ts +4 -0
  23. package/dist/src/frameworks/flutter/flutter-wizard-agent.js +57 -0
  24. package/dist/src/frameworks/flutter/utils.d.ts +7 -0
  25. package/dist/src/frameworks/flutter/utils.js +64 -0
  26. package/dist/src/frameworks/generic/generic-wizard-agent.d.ts +2 -0
  27. package/dist/src/frameworks/generic/generic-wizard-agent.js +176 -0
  28. package/dist/src/frameworks/go/go-wizard-agent.d.ts +4 -0
  29. package/dist/src/frameworks/go/go-wizard-agent.js +57 -0
  30. package/dist/src/frameworks/go/utils.d.ts +5 -0
  31. package/dist/src/frameworks/go/utils.js +44 -0
  32. package/dist/src/frameworks/java/java-wizard-agent.d.ts +7 -0
  33. package/dist/src/frameworks/java/java-wizard-agent.js +73 -0
  34. package/dist/src/frameworks/java/utils.d.ts +15 -0
  35. package/dist/src/frameworks/java/utils.js +64 -0
  36. package/dist/src/frameworks/javascript-node/javascript-node-wizard-agent.d.ts +4 -0
  37. package/dist/src/frameworks/javascript-node/javascript-node-wizard-agent.js +57 -0
  38. package/dist/src/frameworks/javascript-web/javascript-web-wizard-agent.d.ts +3 -0
  39. package/dist/src/frameworks/javascript-web/javascript-web-wizard-agent.js +151 -0
  40. package/dist/src/frameworks/javascript-web/utils.d.ts +28 -0
  41. package/dist/src/frameworks/javascript-web/utils.js +153 -0
  42. package/dist/src/frameworks/nextjs/nextjs-wizard-agent.d.ts +7 -0
  43. package/dist/src/frameworks/nextjs/nextjs-wizard-agent.js +98 -0
  44. package/dist/src/frameworks/nextjs/utils.d.ts +12 -0
  45. package/dist/src/frameworks/nextjs/utils.js +51 -0
  46. package/dist/src/frameworks/python/python-wizard-agent.d.ts +7 -0
  47. package/dist/src/frameworks/python/python-wizard-agent.js +193 -0
  48. package/dist/src/frameworks/python/utils.d.ts +28 -0
  49. package/dist/src/frameworks/python/utils.js +146 -0
  50. package/dist/src/frameworks/react-native/react-native-wizard-agent.d.ts +6 -0
  51. package/dist/src/frameworks/react-native/react-native-wizard-agent.js +84 -0
  52. package/dist/src/frameworks/react-native/utils.d.ts +21 -0
  53. package/dist/src/frameworks/react-native/utils.js +82 -0
  54. package/dist/src/frameworks/react-router/react-router-wizard-agent.d.ts +7 -0
  55. package/dist/src/frameworks/react-router/react-router-wizard-agent.js +98 -0
  56. package/dist/src/frameworks/react-router/utils.d.ts +13 -0
  57. package/dist/src/frameworks/react-router/utils.js +160 -0
  58. package/dist/src/frameworks/swift/swift-wizard-agent.d.ts +7 -0
  59. package/dist/src/frameworks/swift/swift-wizard-agent.js +72 -0
  60. package/dist/src/frameworks/swift/utils.d.ts +12 -0
  61. package/dist/src/frameworks/swift/utils.js +82 -0
  62. package/dist/src/frameworks/unity/unity-wizard-agent.d.ts +6 -0
  63. package/dist/src/frameworks/unity/unity-wizard-agent.js +79 -0
  64. package/dist/src/frameworks/unity/utils.d.ts +12 -0
  65. package/dist/src/frameworks/unity/utils.js +66 -0
  66. package/dist/src/frameworks/unreal/unreal-wizard-agent.d.ts +6 -0
  67. package/dist/src/frameworks/unreal/unreal-wizard-agent.js +77 -0
  68. package/dist/src/frameworks/unreal/utils.d.ts +10 -0
  69. package/dist/src/frameworks/unreal/utils.js +29 -0
  70. package/dist/src/frameworks/vue/vue-wizard-agent.d.ts +4 -0
  71. package/dist/src/frameworks/vue/vue-wizard-agent.js +64 -0
  72. package/dist/src/lib/agent-hooks.d.ts +26 -0
  73. package/dist/src/lib/agent-hooks.js +118 -0
  74. package/dist/src/lib/agent-interface.d.ts +175 -0
  75. package/dist/src/lib/agent-interface.js +1217 -0
  76. package/dist/src/lib/agent-runner.d.ts +9 -0
  77. package/dist/src/lib/agent-runner.js +415 -0
  78. package/dist/src/lib/ampli-config.d.ts +105 -0
  79. package/dist/src/lib/ampli-config.js +178 -0
  80. package/dist/src/lib/api.d.ts +107 -0
  81. package/dist/src/lib/api.js +442 -0
  82. package/dist/src/lib/commandments.d.ts +1 -0
  83. package/dist/src/lib/commandments.js +24 -0
  84. package/dist/src/lib/console-query.d.ts +27 -0
  85. package/dist/src/lib/console-query.js +121 -0
  86. package/dist/src/lib/constants.d.ts +124 -0
  87. package/dist/src/lib/constants.js +170 -0
  88. package/dist/src/lib/detect-amplitude.d.ts +31 -0
  89. package/dist/src/lib/detect-amplitude.js +407 -0
  90. package/dist/src/lib/framework-config.d.ts +188 -0
  91. package/dist/src/lib/framework-config.js +21 -0
  92. package/dist/src/lib/health-checks/endpoints.d.ts +3 -0
  93. package/dist/src/lib/health-checks/endpoints.js +45 -0
  94. package/dist/src/lib/health-checks/index.d.ts +4 -0
  95. package/dist/src/lib/health-checks/index.js +22 -0
  96. package/dist/src/lib/health-checks/readiness.d.ts +24 -0
  97. package/dist/src/lib/health-checks/readiness.js +118 -0
  98. package/dist/src/lib/health-checks/statuspage.d.ts +9 -0
  99. package/dist/src/lib/health-checks/statuspage.js +104 -0
  100. package/dist/src/lib/health-checks/types.d.ts +31 -0
  101. package/dist/src/lib/health-checks/types.js +9 -0
  102. package/dist/src/lib/helper-functions.d.ts +1 -0
  103. package/dist/src/lib/helper-functions.js +5 -0
  104. package/dist/src/lib/middleware/benchmark.d.ts +54 -0
  105. package/dist/src/lib/middleware/benchmark.js +48 -0
  106. package/dist/src/lib/middleware/benchmarks/cache-tracker.d.ts +44 -0
  107. package/dist/src/lib/middleware/benchmarks/cache-tracker.js +80 -0
  108. package/dist/src/lib/middleware/benchmarks/compaction-tracker.d.ts +29 -0
  109. package/dist/src/lib/middleware/benchmarks/compaction-tracker.js +59 -0
  110. package/dist/src/lib/middleware/benchmarks/context-size-tracker.d.ts +26 -0
  111. package/dist/src/lib/middleware/benchmarks/context-size-tracker.js +55 -0
  112. package/dist/src/lib/middleware/benchmarks/cost-tracker.d.ts +16 -0
  113. package/dist/src/lib/middleware/benchmarks/cost-tracker.js +75 -0
  114. package/dist/src/lib/middleware/benchmarks/duration-tracker.d.ts +20 -0
  115. package/dist/src/lib/middleware/benchmarks/duration-tracker.js +39 -0
  116. package/dist/src/lib/middleware/benchmarks/index.d.ts +9 -0
  117. package/dist/src/lib/middleware/benchmarks/index.js +67 -0
  118. package/dist/src/lib/middleware/benchmarks/json-writer.d.ts +15 -0
  119. package/dist/src/lib/middleware/benchmarks/json-writer.js +144 -0
  120. package/dist/src/lib/middleware/benchmarks/summary.d.ts +9 -0
  121. package/dist/src/lib/middleware/benchmarks/summary.js +105 -0
  122. package/dist/src/lib/middleware/benchmarks/token-tracker.d.ts +40 -0
  123. package/dist/src/lib/middleware/benchmarks/token-tracker.js +76 -0
  124. package/dist/src/lib/middleware/benchmarks/turn-counter.d.ts +34 -0
  125. package/dist/src/lib/middleware/benchmarks/turn-counter.js +58 -0
  126. package/dist/src/lib/middleware/config.d.ts +24 -0
  127. package/dist/src/lib/middleware/config.js +96 -0
  128. package/dist/src/lib/middleware/index.d.ts +11 -0
  129. package/dist/src/lib/middleware/index.js +17 -0
  130. package/dist/src/lib/middleware/phase-detector.d.ts +8 -0
  131. package/dist/src/lib/middleware/phase-detector.js +63 -0
  132. package/dist/src/lib/middleware/pipeline.d.ts +29 -0
  133. package/dist/src/lib/middleware/pipeline.js +81 -0
  134. package/dist/src/lib/middleware/schemas.d.ts +27 -0
  135. package/dist/src/lib/middleware/schemas.js +84 -0
  136. package/dist/src/lib/middleware/types.d.ts +94 -0
  137. package/dist/src/lib/middleware/types.js +8 -0
  138. package/dist/src/lib/package-manager-detection.d.ts +42 -0
  139. package/dist/src/lib/package-manager-detection.js +292 -0
  140. package/dist/src/lib/registry.d.ts +3 -0
  141. package/dist/src/lib/registry.js +42 -0
  142. package/dist/src/lib/safe-tools.d.ts +2 -0
  143. package/dist/src/lib/safe-tools.js +214 -0
  144. package/dist/src/lib/wizard-session.d.ts +220 -0
  145. package/dist/src/lib/wizard-session.js +127 -0
  146. package/dist/src/lib/wizard-tools.d.ts +82 -0
  147. package/dist/src/lib/wizard-tools.js +499 -0
  148. package/dist/src/run.d.ts +19 -0
  149. package/dist/src/run.js +151 -0
  150. package/dist/src/steps/add-mcp-server-to-clients/MCPClient.d.ts +30 -0
  151. package/dist/src/steps/add-mcp-server-to-clients/MCPClient.js +141 -0
  152. package/dist/src/steps/add-mcp-server-to-clients/clients/claude-code.d.ts +29 -0
  153. package/dist/src/steps/add-mcp-server-to-clients/clients/claude-code.js +180 -0
  154. package/dist/src/steps/add-mcp-server-to-clients/clients/claude.d.ts +20 -0
  155. package/dist/src/steps/add-mcp-server-to-clients/clients/claude.js +63 -0
  156. package/dist/src/steps/add-mcp-server-to-clients/clients/codex.d.ts +28 -0
  157. package/dist/src/steps/add-mcp-server-to-clients/clients/codex.js +77 -0
  158. package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.d.ts +24 -0
  159. package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.js +60 -0
  160. package/dist/src/steps/add-mcp-server-to-clients/clients/visual-studio-code.d.ts +27 -0
  161. package/dist/src/steps/add-mcp-server-to-clients/clients/visual-studio-code.js +101 -0
  162. package/dist/src/steps/add-mcp-server-to-clients/clients/zed.d.ts +26 -0
  163. package/dist/src/steps/add-mcp-server-to-clients/clients/zed.js +102 -0
  164. package/dist/src/steps/add-mcp-server-to-clients/defaults.d.ts +44 -0
  165. package/dist/src/steps/add-mcp-server-to-clients/defaults.js +123 -0
  166. package/dist/src/steps/add-mcp-server-to-clients/index.d.ts +19 -0
  167. package/dist/src/steps/add-mcp-server-to-clients/index.js +110 -0
  168. package/dist/src/steps/add-or-update-environment-variables.d.ts +10 -0
  169. package/dist/src/steps/add-or-update-environment-variables.js +188 -0
  170. package/dist/src/steps/index.d.ts +4 -0
  171. package/dist/src/steps/index.js +20 -0
  172. package/dist/src/steps/run-prettier.d.ts +5 -0
  173. package/dist/src/steps/run-prettier.js +90 -0
  174. package/dist/src/steps/upload-environment-variables/EnvironmentProvider.d.ts +11 -0
  175. package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js +11 -0
  176. package/dist/src/steps/upload-environment-variables/index.d.ts +6 -0
  177. package/dist/src/steps/upload-environment-variables/index.js +37 -0
  178. package/dist/src/steps/upload-environment-variables/providers/vercel.d.ts +15 -0
  179. package/dist/src/steps/upload-environment-variables/providers/vercel.js +145 -0
  180. package/dist/src/telemetry.d.ts +2 -0
  181. package/dist/src/telemetry.js +12 -0
  182. package/dist/src/ui/index.d.ts +8 -0
  183. package/dist/src/ui/index.js +16 -0
  184. package/dist/src/ui/logging-ui.d.ts +56 -0
  185. package/dist/src/ui/logging-ui.js +157 -0
  186. package/dist/src/ui/tui/App.d.ts +6 -0
  187. package/dist/src/ui/tui/App.js +34 -0
  188. package/dist/src/ui/tui/components/AmplitudeLogo.d.ts +5 -0
  189. package/dist/src/ui/tui/components/AmplitudeLogo.js +81 -0
  190. package/dist/src/ui/tui/components/AmplitudeTextLogo.d.ts +3 -0
  191. package/dist/src/ui/tui/components/AmplitudeTextLogo.js +31 -0
  192. package/dist/src/ui/tui/components/ConsoleView.d.ts +23 -0
  193. package/dist/src/ui/tui/components/ConsoleView.js +220 -0
  194. package/dist/src/ui/tui/components/TitleBar.d.ts +6 -0
  195. package/dist/src/ui/tui/components/TitleBar.js +16 -0
  196. package/dist/src/ui/tui/console-commands.d.ts +16 -0
  197. package/dist/src/ui/tui/console-commands.js +31 -0
  198. package/dist/src/ui/tui/context/CommandModeContext.d.ts +2 -0
  199. package/dist/src/ui/tui/context/CommandModeContext.js +3 -0
  200. package/dist/src/ui/tui/flows.d.ts +48 -0
  201. package/dist/src/ui/tui/flows.js +154 -0
  202. package/dist/src/ui/tui/hooks/useScreenInput.d.ts +13 -0
  203. package/dist/src/ui/tui/hooks/useScreenInput.js +18 -0
  204. package/dist/src/ui/tui/hooks/useStdoutDimensions.d.ts +9 -0
  205. package/dist/src/ui/tui/hooks/useStdoutDimensions.js +29 -0
  206. package/dist/src/ui/tui/ink-ui.d.ts +62 -0
  207. package/dist/src/ui/tui/ink-ui.js +142 -0
  208. package/dist/src/ui/tui/primitives/CardLayout.d.ts +12 -0
  209. package/dist/src/ui/tui/primitives/CardLayout.js +9 -0
  210. package/dist/src/ui/tui/primitives/ConfirmationInput.d.ts +13 -0
  211. package/dist/src/ui/tui/primitives/ConfirmationInput.js +35 -0
  212. package/dist/src/ui/tui/primitives/DissolveTransition.d.ts +21 -0
  213. package/dist/src/ui/tui/primitives/DissolveTransition.js +143 -0
  214. package/dist/src/ui/tui/primitives/EventPlanViewer.d.ts +9 -0
  215. package/dist/src/ui/tui/primitives/EventPlanViewer.js +9 -0
  216. package/dist/src/ui/tui/primitives/KagiSmallWebViewer.d.ts +7 -0
  217. package/dist/src/ui/tui/primitives/KagiSmallWebViewer.js +101 -0
  218. package/dist/src/ui/tui/primitives/LoadingBox.d.ts +8 -0
  219. package/dist/src/ui/tui/primitives/LoadingBox.js +9 -0
  220. package/dist/src/ui/tui/primitives/LogViewer.d.ts +11 -0
  221. package/dist/src/ui/tui/primitives/LogViewer.js +55 -0
  222. package/dist/src/ui/tui/primitives/PickerMenu.d.ts +20 -0
  223. package/dist/src/ui/tui/primitives/PickerMenu.js +212 -0
  224. package/dist/src/ui/tui/primitives/ProgressList.d.ts +15 -0
  225. package/dist/src/ui/tui/primitives/ProgressList.js +29 -0
  226. package/dist/src/ui/tui/primitives/PromptLabel.d.ts +11 -0
  227. package/dist/src/ui/tui/primitives/PromptLabel.js +12 -0
  228. package/dist/src/ui/tui/primitives/ReportViewer.d.ts +12 -0
  229. package/dist/src/ui/tui/primitives/ReportViewer.js +99 -0
  230. package/dist/src/ui/tui/primitives/ScreenErrorBoundary.d.ts +26 -0
  231. package/dist/src/ui/tui/primitives/ScreenErrorBoundary.js +29 -0
  232. package/dist/src/ui/tui/primitives/SlashCommandInput.d.ts +21 -0
  233. package/dist/src/ui/tui/primitives/SlashCommandInput.js +85 -0
  234. package/dist/src/ui/tui/primitives/SnakeGame.d.ts +1 -0
  235. package/dist/src/ui/tui/primitives/SnakeGame.js +1 -0
  236. package/dist/src/ui/tui/primitives/SplitView.d.ts +11 -0
  237. package/dist/src/ui/tui/primitives/SplitView.js +8 -0
  238. package/dist/src/ui/tui/primitives/TabContainer.d.ts +18 -0
  239. package/dist/src/ui/tui/primitives/TabContainer.js +30 -0
  240. package/dist/src/ui/tui/primitives/index.d.ts +23 -0
  241. package/dist/src/ui/tui/primitives/index.js +19 -0
  242. package/dist/src/ui/tui/router.d.ts +61 -0
  243. package/dist/src/ui/tui/router.js +104 -0
  244. package/dist/src/ui/tui/screen-registry.d.ts +19 -0
  245. package/dist/src/ui/tui/screen-registry.js +56 -0
  246. package/dist/src/ui/tui/screens/ActivationOptionsScreen.d.ts +12 -0
  247. package/dist/src/ui/tui/screens/ActivationOptionsScreen.js +57 -0
  248. package/dist/src/ui/tui/screens/AuthScreen.d.ts +18 -0
  249. package/dist/src/ui/tui/screens/AuthScreen.js +107 -0
  250. package/dist/src/ui/tui/screens/ChecklistScreen.d.ts +22 -0
  251. package/dist/src/ui/tui/screens/ChecklistScreen.js +122 -0
  252. package/dist/src/ui/tui/screens/DataIngestionCheckScreen.d.ts +24 -0
  253. package/dist/src/ui/tui/screens/DataIngestionCheckScreen.js +113 -0
  254. package/dist/src/ui/tui/screens/DataSetupScreen.d.ts +17 -0
  255. package/dist/src/ui/tui/screens/DataSetupScreen.js +73 -0
  256. package/dist/src/ui/tui/screens/IntroScreen.d.ts +16 -0
  257. package/dist/src/ui/tui/screens/IntroScreen.js +86 -0
  258. package/dist/src/ui/tui/screens/LoginScreen.d.ts +15 -0
  259. package/dist/src/ui/tui/screens/LoginScreen.js +65 -0
  260. package/dist/src/ui/tui/screens/LogoutScreen.d.ts +12 -0
  261. package/dist/src/ui/tui/screens/LogoutScreen.js +28 -0
  262. package/dist/src/ui/tui/screens/McpScreen.d.ts +26 -0
  263. package/dist/src/ui/tui/screens/McpScreen.js +148 -0
  264. package/dist/src/ui/tui/screens/OutageScreen.d.ts +10 -0
  265. package/dist/src/ui/tui/screens/OutageScreen.js +17 -0
  266. package/dist/src/ui/tui/screens/OutroScreen.d.ts +11 -0
  267. package/dist/src/ui/tui/screens/OutroScreen.js +69 -0
  268. package/dist/src/ui/tui/screens/RegionSelectScreen.d.ts +17 -0
  269. package/dist/src/ui/tui/screens/RegionSelectScreen.js +40 -0
  270. package/dist/src/ui/tui/screens/RunScreen.d.ts +16 -0
  271. package/dist/src/ui/tui/screens/RunScreen.js +212 -0
  272. package/dist/src/ui/tui/screens/SettingsOverrideScreen.d.ts +10 -0
  273. package/dist/src/ui/tui/screens/SettingsOverrideScreen.js +23 -0
  274. package/dist/src/ui/tui/screens/SetupScreen.d.ts +13 -0
  275. package/dist/src/ui/tui/screens/SetupScreen.js +73 -0
  276. package/dist/src/ui/tui/screens/SlackScreen.d.ts +25 -0
  277. package/dist/src/ui/tui/screens/SlackScreen.js +97 -0
  278. package/dist/src/ui/tui/services/mcp-installer.d.ts +25 -0
  279. package/dist/src/ui/tui/services/mcp-installer.js +82 -0
  280. package/dist/src/ui/tui/start-tui.d.ts +10 -0
  281. package/dist/src/ui/tui/start-tui.js +50 -0
  282. package/dist/src/ui/tui/store.d.ts +231 -0
  283. package/dist/src/ui/tui/store.js +568 -0
  284. package/dist/src/ui/tui/styles.d.ts +31 -0
  285. package/dist/src/ui/tui/styles.js +33 -0
  286. package/dist/src/ui/wizard-ui.d.ts +110 -0
  287. package/dist/src/ui/wizard-ui.js +18 -0
  288. package/dist/src/utils/ampli-settings.d.ts +37 -0
  289. package/dist/src/utils/ampli-settings.js +182 -0
  290. package/dist/src/utils/analytics.d.ts +35 -0
  291. package/dist/src/utils/analytics.js +133 -0
  292. package/dist/src/utils/anthropic-status.d.ts +17 -0
  293. package/dist/src/utils/anthropic-status.js +51 -0
  294. package/dist/src/utils/api-key-store.d.ts +35 -0
  295. package/dist/src/utils/api-key-store.js +176 -0
  296. package/dist/src/utils/bash.d.ts +2 -0
  297. package/dist/src/utils/bash.js +53 -0
  298. package/dist/src/utils/custom-headers.d.ts +9 -0
  299. package/dist/src/utils/custom-headers.js +23 -0
  300. package/dist/src/utils/debug.d.ts +23 -0
  301. package/dist/src/utils/debug.js +86 -0
  302. package/dist/src/utils/environment.d.ts +4 -0
  303. package/dist/src/utils/environment.js +76 -0
  304. package/dist/src/utils/file-utils.d.ts +2 -0
  305. package/dist/src/utils/file-utils.js +16 -0
  306. package/dist/src/utils/get-api-key.d.ts +17 -0
  307. package/dist/src/utils/get-api-key.js +50 -0
  308. package/dist/src/utils/logging.d.ts +9 -0
  309. package/dist/src/utils/logging.js +48 -0
  310. package/dist/src/utils/oauth.d.ts +53 -0
  311. package/dist/src/utils/oauth.js +354 -0
  312. package/dist/src/utils/package-json.d.ts +25 -0
  313. package/dist/src/utils/package-json.js +26 -0
  314. package/dist/src/utils/package-manager.d.ts +21 -0
  315. package/dist/src/utils/package-manager.js +208 -0
  316. package/dist/src/utils/semver.d.ts +21 -0
  317. package/dist/src/utils/semver.js +61 -0
  318. package/dist/src/utils/setup-utils.d.ts +82 -0
  319. package/dist/src/utils/setup-utils.js +467 -0
  320. package/dist/src/utils/shell-completions.d.ts +10 -0
  321. package/dist/src/utils/shell-completions.js +199 -0
  322. package/dist/src/utils/string.d.ts +1 -0
  323. package/dist/src/utils/string.js +8 -0
  324. package/dist/src/utils/types.d.ts +72 -0
  325. package/dist/src/utils/types.js +2 -0
  326. package/dist/src/utils/urls.d.ts +14 -0
  327. package/dist/src/utils/urls.js +69 -0
  328. package/dist/src/utils/vendor/is-unicorn-supported.d.ts +1 -0
  329. package/dist/src/utils/vendor/is-unicorn-supported.js +23 -0
  330. package/dist/src/utils/wizard-abort.d.ts +13 -0
  331. package/dist/src/utils/wizard-abort.js +56 -0
  332. package/man/amplitude-wizard.1 +170 -0
  333. package/package.json +144 -0
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Context size tracking plugin (context tokens in/out per phase).
3
+ *
4
+ * Context tokens out = sum of input + cache_read + cache_creation from the
5
+ * last assistant message's usage (per-turn, NOT aggregate).
6
+ * Context tokens in = previous phase's context tokens out.
7
+ */
8
+ import type { Middleware, MiddlewareContext, MiddlewareStore, SDKMessage } from '../types';
9
+ export interface ContextSizeData {
10
+ /** Per-phase context size snapshots */
11
+ phaseSnapshots: Array<{
12
+ phase: string;
13
+ contextTokensIn?: number;
14
+ contextTokensOut?: number;
15
+ freshContext: boolean;
16
+ }>;
17
+ }
18
+ export declare class ContextSizeTrackerPlugin implements Middleware {
19
+ readonly name = "contextSize";
20
+ private phaseSnapshots;
21
+ private lastContextTokensOut?;
22
+ onPhaseTransition(fromPhase: string, _toPhase: string, ctx: MiddlewareContext, store: MiddlewareStore): void;
23
+ onFinalize(_resultMessage: SDKMessage, _totalDurationMs: number, ctx: MiddlewareContext, store: MiddlewareStore): void;
24
+ private computeContextTokensOut;
25
+ private getData;
26
+ }
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ /**
3
+ * Context size tracking plugin (context tokens in/out per phase).
4
+ *
5
+ * Context tokens out = sum of input + cache_read + cache_creation from the
6
+ * last assistant message's usage (per-turn, NOT aggregate).
7
+ * Context tokens in = previous phase's context tokens out.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.ContextSizeTrackerPlugin = void 0;
11
+ class ContextSizeTrackerPlugin {
12
+ name = 'contextSize';
13
+ phaseSnapshots = [];
14
+ lastContextTokensOut;
15
+ onPhaseTransition(fromPhase, _toPhase, ctx, store) {
16
+ const tokens = ctx.get('tokens');
17
+ const contextTokensOut = this.computeContextTokensOut(tokens?.lastUsage);
18
+ this.phaseSnapshots.push({
19
+ phase: fromPhase,
20
+ contextTokensIn: ctx.currentPhaseFreshContext
21
+ ? undefined
22
+ : this.lastContextTokensOut,
23
+ contextTokensOut,
24
+ freshContext: ctx.currentPhaseFreshContext,
25
+ });
26
+ this.lastContextTokensOut = contextTokensOut;
27
+ store.set('contextSize', this.getData());
28
+ }
29
+ onFinalize(_resultMessage, _totalDurationMs, ctx, store) {
30
+ const tokens = ctx.get('tokens');
31
+ const contextTokensOut = this.computeContextTokensOut(tokens?.lastUsage);
32
+ this.phaseSnapshots.push({
33
+ phase: ctx.currentPhase,
34
+ contextTokensIn: ctx.currentPhaseFreshContext
35
+ ? undefined
36
+ : this.lastContextTokensOut,
37
+ contextTokensOut,
38
+ freshContext: ctx.currentPhaseFreshContext,
39
+ });
40
+ store.set('contextSize', this.getData());
41
+ }
42
+ computeContextTokensOut(usage) {
43
+ if (!usage)
44
+ return undefined;
45
+ return (Number(usage.input_tokens ?? 0) +
46
+ Number(usage.cache_read_input_tokens ?? 0) +
47
+ Number(usage.cache_creation_input_tokens ?? 0));
48
+ }
49
+ getData() {
50
+ return {
51
+ phaseSnapshots: [...this.phaseSnapshots],
52
+ };
53
+ }
54
+ }
55
+ exports.ContextSizeTrackerPlugin = ContextSizeTrackerPlugin;
@@ -0,0 +1,16 @@
1
+ import type { Middleware, MiddlewareContext, MiddlewareStore, SDKMessage } from '../types';
2
+ export interface CostData {
3
+ totalCost: number;
4
+ phaseCosts: Array<{
5
+ phase: string;
6
+ cost: number;
7
+ }>;
8
+ }
9
+ export declare class CostTrackerPlugin implements Middleware {
10
+ readonly name = "cost";
11
+ private phaseCosts;
12
+ private totalCost;
13
+ onPhaseTransition(fromPhase: string, _toPhase: string, ctx: MiddlewareContext, store: MiddlewareStore): void;
14
+ onFinalize(resultMessage: SDKMessage, _totalDurationMs: number, ctx: MiddlewareContext, store: MiddlewareStore): void;
15
+ private getData;
16
+ }
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CostTrackerPlugin = void 0;
4
+ /** Claude Sonnet 4.6 pricing (USD per 1M tokens) */
5
+ const PRICE_PER_MTOK = {
6
+ input: 3,
7
+ output: 15,
8
+ cacheRead: 0.3,
9
+ cacheCreation5m: 3.75,
10
+ cacheCreation1h: 6,
11
+ };
12
+ function computeCost(inputTokens, outputTokens, cacheReadTokens, cacheCreation5m, cacheCreation1h, cacheCreationFallback) {
13
+ const hasBreakdown = cacheCreation5m > 0 || cacheCreation1h > 0;
14
+ return (inputTokens * (PRICE_PER_MTOK.input / 1e6) +
15
+ outputTokens * (PRICE_PER_MTOK.output / 1e6) +
16
+ cacheReadTokens * (PRICE_PER_MTOK.cacheRead / 1e6) +
17
+ (hasBreakdown
18
+ ? cacheCreation5m * (PRICE_PER_MTOK.cacheCreation5m / 1e6) +
19
+ cacheCreation1h * (PRICE_PER_MTOK.cacheCreation1h / 1e6)
20
+ : cacheCreationFallback * (PRICE_PER_MTOK.cacheCreation5m / 1e6)));
21
+ }
22
+ class CostTrackerPlugin {
23
+ name = 'cost';
24
+ phaseCosts = [];
25
+ totalCost = 0;
26
+ onPhaseTransition(fromPhase, _toPhase, ctx, store) {
27
+ const tokens = ctx.get('tokens');
28
+ const cache = ctx.get('cache');
29
+ const tokenSnap = tokens?.phaseSnapshots.at(-1);
30
+ const cacheSnap = cache?.phaseSnapshots.at(-1);
31
+ const totalIn = tokenSnap?.inputTokens ?? 0;
32
+ const read = cacheSnap?.cacheReadTokens ?? 0;
33
+ const creation = cacheSnap?.cacheCreationTokens ?? 0;
34
+ const c5m = cacheSnap?.cacheCreation5m ?? 0;
35
+ const c1h = cacheSnap?.cacheCreation1h ?? 0;
36
+ const baseIn = Math.max(0, totalIn - read - creation);
37
+ const phaseCost = computeCost(baseIn, tokenSnap?.outputTokens ?? 0, read, c5m, c1h, creation);
38
+ this.phaseCosts.push({ phase: fromPhase, cost: phaseCost });
39
+ this.totalCost += phaseCost;
40
+ store.set('cost', this.getData());
41
+ }
42
+ onFinalize(resultMessage, _totalDurationMs, ctx, store) {
43
+ const tokens = ctx.get('tokens');
44
+ const cache = ctx.get('cache');
45
+ const tokenSnap = tokens?.phaseSnapshots.at(-1);
46
+ const cacheSnap = cache?.phaseSnapshots.at(-1);
47
+ const totalIn = tokenSnap?.inputTokens ?? 0;
48
+ const read = cacheSnap?.cacheReadTokens ?? 0;
49
+ const creation = cacheSnap?.cacheCreationTokens ?? 0;
50
+ const c5m = cacheSnap?.cacheCreation5m ?? 0;
51
+ const c1h = cacheSnap?.cacheCreation1h ?? 0;
52
+ const baseIn = Math.max(0, totalIn - read - creation);
53
+ const lastPhaseCost = computeCost(baseIn, tokenSnap?.outputTokens ?? 0, read, c5m, c1h, creation);
54
+ this.phaseCosts.push({ phase: ctx.currentPhase, cost: lastPhaseCost });
55
+ this.totalCost += lastPhaseCost;
56
+ const sdkTotal = Number(resultMessage?.usage?.total_cost_usd ?? 0) ||
57
+ Number(resultMessage?.total_cost_usd ?? 0);
58
+ if (sdkTotal > 0 && this.totalCost > 0) {
59
+ const scale = sdkTotal / this.totalCost;
60
+ this.phaseCosts = this.phaseCosts.map((p) => ({
61
+ phase: p.phase,
62
+ cost: p.cost * scale,
63
+ }));
64
+ this.totalCost = sdkTotal;
65
+ }
66
+ store.set('cost', this.getData());
67
+ }
68
+ getData() {
69
+ return {
70
+ totalCost: this.totalCost,
71
+ phaseCosts: [...this.phaseCosts],
72
+ };
73
+ }
74
+ }
75
+ exports.CostTrackerPlugin = CostTrackerPlugin;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Duration tracking plugin (per-phase and total).
3
+ */
4
+ import type { Middleware, MiddlewareContext, MiddlewareStore, SDKMessage } from '../types';
5
+ export interface DurationData {
6
+ phaseSnapshots: Array<{
7
+ phase: string;
8
+ startTime: number;
9
+ endTime: number;
10
+ durationMs: number;
11
+ }>;
12
+ totalDurationMs: number;
13
+ }
14
+ export declare class DurationTrackerPlugin implements Middleware {
15
+ readonly name = "duration";
16
+ private phaseStartTime;
17
+ private phaseSnapshots;
18
+ onPhaseTransition(fromPhase: string, _toPhase: string, _ctx: MiddlewareContext, store: MiddlewareStore): void;
19
+ onFinalize(_resultMessage: SDKMessage, totalDurationMs: number, ctx: MiddlewareContext, store: MiddlewareStore): void;
20
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ /**
3
+ * Duration tracking plugin (per-phase and total).
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DurationTrackerPlugin = void 0;
7
+ class DurationTrackerPlugin {
8
+ name = 'duration';
9
+ phaseStartTime = Date.now();
10
+ phaseSnapshots = [];
11
+ onPhaseTransition(fromPhase, _toPhase, _ctx, store) {
12
+ const now = Date.now();
13
+ this.phaseSnapshots.push({
14
+ phase: fromPhase,
15
+ startTime: this.phaseStartTime,
16
+ endTime: now,
17
+ durationMs: now - this.phaseStartTime,
18
+ });
19
+ this.phaseStartTime = now;
20
+ store.set('duration', {
21
+ phaseSnapshots: [...this.phaseSnapshots],
22
+ totalDurationMs: 0,
23
+ });
24
+ }
25
+ onFinalize(_resultMessage, totalDurationMs, ctx, store) {
26
+ const now = Date.now();
27
+ this.phaseSnapshots.push({
28
+ phase: ctx.currentPhase,
29
+ startTime: this.phaseStartTime,
30
+ endTime: now,
31
+ durationMs: now - this.phaseStartTime,
32
+ });
33
+ store.set('duration', {
34
+ phaseSnapshots: [...this.phaseSnapshots],
35
+ totalDurationMs,
36
+ });
37
+ }
38
+ }
39
+ exports.DurationTrackerPlugin = DurationTrackerPlugin;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Plugin registry and factory.
3
+ *
4
+ * Maps plugin names to constructors and creates the ordered plugin list
5
+ * from a BenchmarkConfig.
6
+ */
7
+ import type { Middleware, MiddlewareFactoryOptions } from '../types';
8
+ import type { BenchmarkConfig } from '../config';
9
+ export declare function createPluginsFromConfig(config: BenchmarkConfig, opts: MiddlewareFactoryOptions): Middleware[];
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ /**
3
+ * Plugin registry and factory.
4
+ *
5
+ * Maps plugin names to constructors and creates the ordered plugin list
6
+ * from a BenchmarkConfig.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.createPluginsFromConfig = createPluginsFromConfig;
10
+ const turn_counter_1 = require("./turn-counter");
11
+ const token_tracker_1 = require("./token-tracker");
12
+ const cache_tracker_1 = require("./cache-tracker");
13
+ const compaction_tracker_1 = require("./compaction-tracker");
14
+ const context_size_tracker_1 = require("./context-size-tracker");
15
+ const cost_tracker_1 = require("./cost-tracker");
16
+ const duration_tracker_1 = require("./duration-tracker");
17
+ const summary_1 = require("./summary");
18
+ const json_writer_1 = require("./json-writer");
19
+ const PLUGIN_REGISTRY = {
20
+ turns: () => new turn_counter_1.TurnCounterPlugin(),
21
+ tokens: () => new token_tracker_1.TokenTrackerPlugin(),
22
+ cache: () => new cache_tracker_1.CacheTrackerPlugin(),
23
+ compactions: () => new compaction_tracker_1.CompactionTrackerPlugin(),
24
+ contextSize: () => new context_size_tracker_1.ContextSizeTrackerPlugin(),
25
+ cost: () => new cost_tracker_1.CostTrackerPlugin(),
26
+ duration: () => new duration_tracker_1.DurationTrackerPlugin(),
27
+ summary: (opts) => {
28
+ if (!opts.spinner)
29
+ throw new Error('SummaryPlugin requires a spinner');
30
+ return new summary_1.SummaryPlugin(opts.spinner);
31
+ },
32
+ jsonWriter: (opts) => {
33
+ if (!opts.outputPath)
34
+ throw new Error('JsonWriterPlugin requires outputPath');
35
+ return new json_writer_1.JsonWriterPlugin(opts.outputPath);
36
+ },
37
+ };
38
+ /**
39
+ * Execution order — data producers before consumers:
40
+ * turns (dedup) -> tokens -> cache -> compactions -> contextSize -> cost -> duration -> summary -> jsonWriter
41
+ */
42
+ const PLUGIN_ORDER = [
43
+ 'turns',
44
+ 'tokens',
45
+ 'cache',
46
+ 'compactions',
47
+ 'contextSize',
48
+ 'cost',
49
+ 'duration',
50
+ 'summary',
51
+ 'jsonWriter',
52
+ ];
53
+ function createPluginsFromConfig(config, opts) {
54
+ const resolvedOpts = {
55
+ ...opts,
56
+ outputPath: opts.outputPath ?? config.output.benchmarkPath,
57
+ };
58
+ // If suppressWizardLogs is set, disable the summary plugin
59
+ const effectivePlugins = { ...config.plugins };
60
+ if (config.output.suppressWizardLogs) {
61
+ effectivePlugins.summary = false;
62
+ }
63
+ return PLUGIN_ORDER.filter((name) => effectivePlugins[name] !== false)
64
+ .map((name) => PLUGIN_REGISTRY[name])
65
+ .filter(Boolean)
66
+ .map((factory) => factory(resolvedOpts));
67
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * JSON file output plugin.
3
+ *
4
+ * Assembles the BenchmarkData structure from all upstream plugin data
5
+ * and writes it to a JSON file. Returns the BenchmarkData for backward compat.
6
+ */
7
+ import type { Middleware, MiddlewareContext, MiddlewareStore, SDKMessage } from '../types';
8
+ import type { BenchmarkData } from '../benchmark';
9
+ export declare class JsonWriterPlugin implements Middleware {
10
+ readonly name = "jsonWriter";
11
+ private outputPath;
12
+ constructor(outputPath: string);
13
+ onFinalize(resultMessage: SDKMessage, totalDurationMs: number, ctx: MiddlewareContext, _store: MiddlewareStore): BenchmarkData;
14
+ private writeBenchmarkData;
15
+ }
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ /**
3
+ * JSON file output plugin.
4
+ *
5
+ * Assembles the BenchmarkData structure from all upstream plugin data
6
+ * and writes it to a JSON file. Returns the BenchmarkData for backward compat.
7
+ */
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.JsonWriterPlugin = void 0;
13
+ const fs_1 = __importDefault(require("fs"));
14
+ const ui_1 = require("../../../ui");
15
+ const chalk_1 = __importDefault(require("chalk"));
16
+ const debug_1 = require("../../../utils/debug");
17
+ const agent_interface_1 = require("../../agent-interface");
18
+ /**
19
+ * Sum token usage across all models from the SDK's modelUsage field.
20
+ */
21
+ function sumModelUsage(modelUsage) {
22
+ let input_tokens = 0;
23
+ let output_tokens = 0;
24
+ let cache_creation_input_tokens = 0;
25
+ let cache_read_input_tokens = 0;
26
+ for (const model of Object.values(modelUsage)) {
27
+ input_tokens += model.inputTokens ?? 0;
28
+ output_tokens += model.outputTokens ?? 0;
29
+ cache_creation_input_tokens += model.cacheCreationInputTokens ?? 0;
30
+ cache_read_input_tokens += model.cacheReadInputTokens ?? 0;
31
+ }
32
+ return {
33
+ input_tokens,
34
+ output_tokens,
35
+ cache_creation_input_tokens,
36
+ cache_read_input_tokens,
37
+ };
38
+ }
39
+ class JsonWriterPlugin {
40
+ name = 'jsonWriter';
41
+ outputPath;
42
+ constructor(outputPath) {
43
+ this.outputPath = outputPath;
44
+ }
45
+ onFinalize(resultMessage, totalDurationMs, ctx, _store) {
46
+ const tokens = ctx.get('tokens');
47
+ const cache = ctx.get('cache');
48
+ const turns = ctx.get('turns');
49
+ const cost = ctx.get('cost');
50
+ const duration = ctx.get('duration');
51
+ const compactions = ctx.get('compactions');
52
+ const contextSize = ctx.get('contextSize');
53
+ const modelUsage = resultMessage?.modelUsage ?? {};
54
+ const aggregateUsage = sumModelUsage(modelUsage);
55
+ const phaseSnapshots = duration?.phaseSnapshots ?? [];
56
+ const steps = [];
57
+ for (let i = 0; i < phaseSnapshots.length; i++) {
58
+ const dur = phaseSnapshots[i];
59
+ const tokenSnap = tokens?.phaseSnapshots[i];
60
+ const cacheSnap = cache?.phaseSnapshots[i];
61
+ const turnSnap = turns?.phaseSnapshots[i];
62
+ const costSnap = cost?.phaseCosts[i];
63
+ const compSnap = compactions?.phaseSnapshots[i];
64
+ const ctxSnap = contextSize?.phaseSnapshots[i];
65
+ const step = {
66
+ name: dur.phase,
67
+ usage: {
68
+ input_tokens: tokenSnap?.inputTokens ?? 0,
69
+ output_tokens: tokenSnap?.outputTokens ?? 0,
70
+ cache_creation_input_tokens: cacheSnap?.cacheCreationTokens ?? 0,
71
+ cache_read_input_tokens: cacheSnap?.cacheReadTokens ?? 0,
72
+ ...((cacheSnap?.cacheCreation5m ?? 0) +
73
+ (cacheSnap?.cacheCreation1h ?? 0) >
74
+ 0 && {
75
+ cache_creation: {
76
+ ephemeral_5m_input_tokens: cacheSnap?.cacheCreation5m ?? 0,
77
+ ephemeral_1h_input_tokens: cacheSnap?.cacheCreation1h ?? 0,
78
+ },
79
+ }),
80
+ },
81
+ modelUsage: {},
82
+ totalCostUsd: costSnap?.cost ?? 0,
83
+ durationMs: dur.durationMs,
84
+ durationApiMs: 0,
85
+ numTurns: turnSnap?.turns ?? 0,
86
+ ...(ctxSnap?.contextTokensIn !== undefined && {
87
+ contextTokensIn: ctxSnap.contextTokensIn,
88
+ }),
89
+ ...(ctxSnap?.contextTokensOut !== undefined && {
90
+ contextTokensOut: ctxSnap.contextTokensOut,
91
+ }),
92
+ ...(compSnap && compSnap.compactions > 0
93
+ ? {
94
+ compactions: compSnap.compactions,
95
+ compactionPreTokens: compSnap.preTokens,
96
+ }
97
+ : {}),
98
+ };
99
+ steps.push(step);
100
+ }
101
+ const totalTurns = turns?.totalTurns ?? 0;
102
+ const totalCost = cost?.totalCost ?? 0;
103
+ const totalCompactions = compactions?.totalCompactions ?? 0;
104
+ const fromModelUsage = aggregateUsage.input_tokens +
105
+ aggregateUsage.cache_read_input_tokens +
106
+ aggregateUsage.cache_creation_input_tokens;
107
+ const inputTokens = fromModelUsage > 0
108
+ ? fromModelUsage
109
+ : (tokens?.totalInput ?? 0) +
110
+ (cache?.totalRead ?? 0) +
111
+ (cache?.totalCreation ?? 0);
112
+ const outputTokens = aggregateUsage.output_tokens > 0
113
+ ? aggregateUsage.output_tokens
114
+ : tokens?.totalOutput ?? 0;
115
+ const benchmark = {
116
+ timestamp: new Date().toISOString(),
117
+ steps,
118
+ totals: {
119
+ totalCostUsd: totalCost,
120
+ durationMs: totalDurationMs,
121
+ inputTokens,
122
+ outputTokens,
123
+ numTurns: resultMessage?.num_turns ?? totalTurns,
124
+ totalCompactions,
125
+ totalCacheReadTokens: cache?.totalRead ?? 0,
126
+ totalCacheCreation5mTokens: cache?.totalCreation5m ?? 0,
127
+ totalCacheCreation1hTokens: cache?.totalCreation1h ?? 0,
128
+ },
129
+ };
130
+ this.writeBenchmarkData(benchmark);
131
+ return benchmark;
132
+ }
133
+ writeBenchmarkData(data) {
134
+ try {
135
+ fs_1.default.writeFileSync(this.outputPath, JSON.stringify(data, null, 2));
136
+ (0, debug_1.logToFile)(`Benchmark data written to ${this.outputPath}`);
137
+ (0, ui_1.getUI)().log.info(`${chalk_1.default.blue('●')} ${chalk_1.default.cyan(agent_interface_1.AgentSignals.BENCHMARK)} Results written to ${this.outputPath}`);
138
+ }
139
+ catch (error) {
140
+ (0, debug_1.logToFile)('Failed to write benchmark data:', error);
141
+ }
142
+ }
143
+ }
144
+ exports.JsonWriterPlugin = JsonWriterPlugin;
@@ -0,0 +1,9 @@
1
+ import { type SpinnerHandle } from '../../../ui';
2
+ import type { Middleware, MiddlewareContext, MiddlewareStore, SDKMessage } from '../types';
3
+ export declare class SummaryPlugin implements Middleware {
4
+ readonly name = "summary";
5
+ private spinner;
6
+ constructor(spinner: SpinnerHandle);
7
+ onPhaseTransition(fromPhase: string, toPhase: string, ctx: MiddlewareContext, _store: MiddlewareStore): void;
8
+ onFinalize(_resultMessage: SDKMessage, totalDurationMs: number, ctx: MiddlewareContext, _store: MiddlewareStore): void;
9
+ }
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SummaryPlugin = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const ui_1 = require("../../../ui");
9
+ const agent_interface_1 = require("../../agent-interface");
10
+ function fmtDuration(ms) {
11
+ const s = Math.round(ms / 1000);
12
+ const m = Math.floor(s / 60);
13
+ return m > 0 ? `${m}m ${s % 60}s` : `${s}s`;
14
+ }
15
+ function fmtTok(n) {
16
+ if (n >= 1_000_000)
17
+ return `${(n / 1_000_000).toFixed(1)}M`;
18
+ if (n >= 1_000)
19
+ return `${(n / 1000).toFixed(1)}K`;
20
+ return n.toLocaleString();
21
+ }
22
+ function fmtCost(usd) {
23
+ if (usd > 0 && usd < 0.01)
24
+ return `$${usd.toFixed(4)}`;
25
+ return `$${usd.toFixed(2)}`;
26
+ }
27
+ function printPhase(s) {
28
+ const baseIn = Math.max(0, s.inputTokens - s.cacheRead - s.cacheCreation5m - s.cacheCreation1h);
29
+ return [
30
+ `${chalk_1.default.bold(s.phase)}: ${fmtDuration(s.durationMs)}, ${s.turns} turns, cost: ${fmtCost(s.cost)}`,
31
+ ` in: ${fmtTok(baseIn)}, out: ${fmtTok(s.outputTokens)}, cache_read: ${fmtTok(s.cacheRead)}, cache_5m: ${fmtTok(s.cacheCreation5m)}, cache_1h: ${fmtTok(s.cacheCreation1h)}`,
32
+ s.compactions > 0 ? ` ${s.compactions} compaction(s)` : null,
33
+ s.contextOut !== undefined ? ` ctx_out: ${fmtTok(s.contextOut)}` : null,
34
+ ]
35
+ .filter(Boolean)
36
+ .join('\n');
37
+ }
38
+ function getPhaseStats(i, ctx) {
39
+ const duration = ctx.get('duration');
40
+ const dur = duration?.phaseSnapshots[i];
41
+ if (!dur)
42
+ return null;
43
+ const tokens = ctx.get('tokens');
44
+ const turns = ctx.get('turns');
45
+ const cost = ctx.get('cost');
46
+ const compactions = ctx.get('compactions');
47
+ const contextSize = ctx.get('contextSize');
48
+ const cache = ctx.get('cache');
49
+ return {
50
+ phase: dur.phase,
51
+ durationMs: dur.durationMs,
52
+ turns: turns?.phaseSnapshots[i]?.turns ?? 0,
53
+ inputTokens: tokens?.phaseSnapshots[i]?.inputTokens ?? 0,
54
+ outputTokens: tokens?.phaseSnapshots[i]?.outputTokens ?? 0,
55
+ cacheRead: cache?.phaseSnapshots[i]?.cacheReadTokens ?? 0,
56
+ cacheCreation5m: cache?.phaseSnapshots[i]?.cacheCreation5m ?? 0,
57
+ cacheCreation1h: cache?.phaseSnapshots[i]?.cacheCreation1h ?? 0,
58
+ cost: cost?.phaseCosts[i]?.cost ?? 0,
59
+ compactions: compactions?.phaseSnapshots[i]?.compactions ?? 0,
60
+ contextOut: contextSize?.phaseSnapshots[i]?.contextTokensOut,
61
+ };
62
+ }
63
+ class SummaryPlugin {
64
+ name = 'summary';
65
+ spinner;
66
+ constructor(spinner) {
67
+ this.spinner = spinner;
68
+ }
69
+ onPhaseTransition(fromPhase, toPhase, ctx, _store) {
70
+ const duration = ctx.get('duration');
71
+ const idx = (duration?.phaseSnapshots.length ?? 1) - 1;
72
+ const stats = getPhaseStats(idx, ctx);
73
+ if (stats) {
74
+ this.spinner.stop(`${chalk_1.default.cyan(agent_interface_1.AgentSignals.BENCHMARK)} ${printPhase(stats)}`);
75
+ }
76
+ else {
77
+ this.spinner.stop(`${chalk_1.default.cyan(agent_interface_1.AgentSignals.BENCHMARK)} ${fromPhase}`);
78
+ }
79
+ (0, ui_1.getUI)().log.info(`${chalk_1.default.cyan(agent_interface_1.AgentSignals.BENCHMARK)} Starting phase: ${chalk_1.default.bold(toPhase)}`);
80
+ this.spinner.start(`Integrating Amplitude (${toPhase})...`);
81
+ }
82
+ onFinalize(_resultMessage, totalDurationMs, ctx, _store) {
83
+ const duration = ctx.get('duration');
84
+ const cost = ctx.get('cost');
85
+ const tokens = ctx.get('tokens');
86
+ const cache = ctx.get('cache');
87
+ const phaseCount = duration?.phaseSnapshots.length ?? 0;
88
+ const totalCost = cost?.totalCost ?? 0;
89
+ (0, ui_1.getUI)().log.info('');
90
+ (0, ui_1.getUI)().log.info(`${chalk_1.default.green('◇')} ${chalk_1.default.cyan(agent_interface_1.AgentSignals.BENCHMARK)} ${phaseCount} phases in ${fmtDuration(totalDurationMs)}, cost: ${fmtCost(totalCost)}`);
91
+ (0, ui_1.getUI)().log.info(` total in: ${fmtTok(tokens?.totalInput ?? 0)}, out: ${fmtTok(tokens?.totalOutput ?? 0)}, cache_read: ${fmtTok(cache?.totalRead ?? 0)}, cache_5m: ${fmtTok(cache?.totalCreation5m ?? 0)}, cache_1h: ${fmtTok(cache?.totalCreation1h ?? 0)}`);
92
+ (0, ui_1.getUI)().log.info('');
93
+ (0, ui_1.getUI)().log.info(`${chalk_1.default.blue('●')} ${chalk_1.default.cyan(agent_interface_1.AgentSignals.BENCHMARK)} Summary by phase:`);
94
+ if (duration?.phaseSnapshots) {
95
+ for (let i = 0; i < duration.phaseSnapshots.length; i++) {
96
+ const stats = getPhaseStats(i, ctx);
97
+ if (stats) {
98
+ (0, ui_1.getUI)().log.info(printPhase(stats));
99
+ }
100
+ }
101
+ }
102
+ (0, ui_1.getUI)().log.info('');
103
+ }
104
+ }
105
+ exports.SummaryPlugin = SummaryPlugin;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Token tracking plugin for input/output tokens.
3
+ *
4
+ * Accumulates per-turn token usage (input_tokens + cache_read_input_tokens
5
+ * + cache_creation_input_tokens = total input; output_tokens = output).
6
+ * Respects the dedup flag from TurnCounterPlugin. Cache breakdown (r/5m/1h)
7
+ * is tracked by CacheTrackerPlugin for reporting and pricing.
8
+ */
9
+ import type { Middleware, MiddlewareContext, MiddlewareStore, SDKMessage, SDKUsage } from '../types';
10
+ export interface TokenData {
11
+ phaseInput: number;
12
+ phaseOutput: number;
13
+ totalInput: number;
14
+ totalOutput: number;
15
+ /** The raw usage object from the last non-duplicate assistant message */
16
+ lastUsage: SDKUsage | null;
17
+ /** Per-phase token snapshots */
18
+ phaseSnapshots: Array<{
19
+ phase: string;
20
+ inputTokens: number;
21
+ outputTokens: number;
22
+ /** Number of turns in this phase that had usage (SDK may not report all) */
23
+ messagesWithUsage: number;
24
+ }>;
25
+ }
26
+ export declare class TokenTrackerPlugin implements Middleware {
27
+ readonly name = "tokens";
28
+ private phaseInput;
29
+ private phaseOutput;
30
+ private totalInput;
31
+ private totalOutput;
32
+ private lastUsage;
33
+ private phaseSnapshots;
34
+ private currentPhase;
35
+ private phaseMessagesWithUsage;
36
+ onMessage(message: SDKMessage, ctx: MiddlewareContext, store: MiddlewareStore): void;
37
+ onPhaseTransition(fromPhase: string, toPhase: string, _ctx: MiddlewareContext, store: MiddlewareStore): void;
38
+ onFinalize(_resultMessage: SDKMessage, _totalDurationMs: number, _ctx: MiddlewareContext, store: MiddlewareStore): void;
39
+ private getData;
40
+ }