@newrelic/preflight 0.0.1-pre.1 → 1.0.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 (578) hide show
  1. package/LICENSE +183 -0
  2. package/README.md +498 -0
  3. package/dist/alerts/alert-log.d.ts +24 -0
  4. package/dist/alerts/alert-log.d.ts.map +1 -0
  5. package/dist/alerts/alert-log.js +159 -0
  6. package/dist/alerts/alert-log.js.map +1 -0
  7. package/dist/alerts/alert-snapshot-collector.d.ts +168 -0
  8. package/dist/alerts/alert-snapshot-collector.d.ts.map +1 -0
  9. package/dist/alerts/alert-snapshot-collector.js +243 -0
  10. package/dist/alerts/alert-snapshot-collector.js.map +1 -0
  11. package/dist/alerts/local-alert-engine.d.ts +86 -0
  12. package/dist/alerts/local-alert-engine.d.ts.map +1 -0
  13. package/dist/alerts/local-alert-engine.js +466 -0
  14. package/dist/alerts/local-alert-engine.js.map +1 -0
  15. package/dist/alerts/local-alert-rule.d.ts +439 -0
  16. package/dist/alerts/local-alert-rule.d.ts.map +1 -0
  17. package/dist/alerts/local-alert-rule.js +139 -0
  18. package/dist/alerts/local-alert-rule.js.map +1 -0
  19. package/dist/alerts/os-notifier.d.ts +39 -0
  20. package/dist/alerts/os-notifier.d.ts.map +1 -0
  21. package/dist/alerts/os-notifier.js +170 -0
  22. package/dist/alerts/os-notifier.js.map +1 -0
  23. package/dist/alerts/types.d.ts +35 -0
  24. package/dist/alerts/types.d.ts.map +1 -0
  25. package/dist/alerts/types.js +8 -0
  26. package/dist/alerts/types.js.map +1 -0
  27. package/dist/config.d.ts +169 -0
  28. package/dist/config.d.ts.map +1 -0
  29. package/dist/config.js +868 -0
  30. package/dist/config.js.map +1 -0
  31. package/dist/dashboard/dashboard-server.d.ts +38 -0
  32. package/dist/dashboard/dashboard-server.d.ts.map +1 -0
  33. package/dist/dashboard/dashboard-server.js +207 -0
  34. package/dist/dashboard/dashboard-server.js.map +1 -0
  35. package/dist/dashboard/index.d.ts +3 -0
  36. package/dist/dashboard/index.d.ts.map +1 -0
  37. package/dist/dashboard/index.js +2 -0
  38. package/dist/dashboard/index.js.map +1 -0
  39. package/dist/dashboard/live-event-bus.d.ts +99 -0
  40. package/dist/dashboard/live-event-bus.d.ts.map +1 -0
  41. package/dist/dashboard/live-event-bus.js +56 -0
  42. package/dist/dashboard/live-event-bus.js.map +1 -0
  43. package/dist/dashboard/routes/api-handler.d.ts +122 -0
  44. package/dist/dashboard/routes/api-handler.d.ts.map +1 -0
  45. package/dist/dashboard/routes/api-handler.js +1414 -0
  46. package/dist/dashboard/routes/api-handler.js.map +1 -0
  47. package/dist/dashboard/routes/replay-analyzer.d.ts +15 -0
  48. package/dist/dashboard/routes/replay-analyzer.d.ts.map +1 -0
  49. package/dist/dashboard/routes/replay-analyzer.js +227 -0
  50. package/dist/dashboard/routes/replay-analyzer.js.map +1 -0
  51. package/dist/dashboard/routes/sse-handler.d.ts +4 -0
  52. package/dist/dashboard/routes/sse-handler.d.ts.map +1 -0
  53. package/dist/dashboard/routes/sse-handler.js +122 -0
  54. package/dist/dashboard/routes/sse-handler.js.map +1 -0
  55. package/dist/dashboard/routes/static-handler.d.ts +3 -0
  56. package/dist/dashboard/routes/static-handler.d.ts.map +1 -0
  57. package/dist/dashboard/routes/static-handler.js +123 -0
  58. package/dist/dashboard/routes/static-handler.js.map +1 -0
  59. package/dist/data/alerts/conditions/01-daily-cost-spike.json +16 -0
  60. package/dist/data/alerts/conditions/02-low-efficiency-score.json +16 -0
  61. package/dist/data/alerts/conditions/03-stuck-loop-rate.json +16 -0
  62. package/dist/data/alerts/conditions/04-anti-pattern-rate.json +16 -0
  63. package/dist/data/alerts/conditions/05-session-cost-budget.json +16 -0
  64. package/dist/data/alerts/conditions-personal/01-personal-daily-cost.json +16 -0
  65. package/dist/data/alerts/conditions-personal/02-personal-session-cost.json +16 -0
  66. package/dist/data/alerts/conditions-personal/03-personal-low-efficiency.json +16 -0
  67. package/dist/data/alerts/conditions-personal/04-personal-anti-pattern-rate.json +16 -0
  68. package/dist/data/alerts/conditions-personal/05-personal-stuck-loop.json +16 -0
  69. package/dist/data/alerts/policy.json +4 -0
  70. package/dist/data/dashboards/ai-coding-assistant-manager-view.json +103 -0
  71. package/dist/data/dashboards/ai-coding-assistant-overview.json +239 -0
  72. package/dist/data/dashboards/ai-coding-assistant-personal.json +442 -0
  73. package/dist/data/dashboards/ai-coding-assistant-platform-comparison.json +320 -0
  74. package/dist/data/dashboards/ai-coding-assistant-security.json +275 -0
  75. package/dist/data/dashboards/ai-coding-assistant-session-detail.json +296 -0
  76. package/dist/data/dashboards/ai-coding-assistant-team-view.json +345 -0
  77. package/dist/deploy/data-paths.d.ts +22 -0
  78. package/dist/deploy/data-paths.d.ts.map +1 -0
  79. package/dist/deploy/data-paths.js +69 -0
  80. package/dist/deploy/data-paths.js.map +1 -0
  81. package/dist/deploy/deploy-alerts.d.ts +58 -0
  82. package/dist/deploy/deploy-alerts.d.ts.map +1 -0
  83. package/dist/deploy/deploy-alerts.js +371 -0
  84. package/dist/deploy/deploy-alerts.js.map +1 -0
  85. package/dist/deploy/deploy-dashboards.d.ts +92 -0
  86. package/dist/deploy/deploy-dashboards.d.ts.map +1 -0
  87. package/dist/deploy/deploy-dashboards.js +282 -0
  88. package/dist/deploy/deploy-dashboards.js.map +1 -0
  89. package/dist/digest/digest-formatter.d.ts +3 -0
  90. package/dist/digest/digest-formatter.d.ts.map +1 -0
  91. package/dist/digest/digest-formatter.js +37 -0
  92. package/dist/digest/digest-formatter.js.map +1 -0
  93. package/dist/digest/digest-sender.d.ts +2 -0
  94. package/dist/digest/digest-sender.d.ts.map +1 -0
  95. package/dist/digest/digest-sender.js +29 -0
  96. package/dist/digest/digest-sender.js.map +1 -0
  97. package/dist/hooks/bash-classifier.d.ts +26 -0
  98. package/dist/hooks/bash-classifier.d.ts.map +1 -0
  99. package/dist/hooks/bash-classifier.js +409 -0
  100. package/dist/hooks/bash-classifier.js.map +1 -0
  101. package/dist/hooks/collector-script.d.ts +47 -0
  102. package/dist/hooks/collector-script.d.ts.map +1 -0
  103. package/dist/hooks/collector-script.js +662 -0
  104. package/dist/hooks/collector-script.js.map +1 -0
  105. package/dist/hooks/event-processor.d.ts +65 -0
  106. package/dist/hooks/event-processor.d.ts.map +1 -0
  107. package/dist/hooks/event-processor.js +342 -0
  108. package/dist/hooks/event-processor.js.map +1 -0
  109. package/dist/hooks/index.d.ts +7 -0
  110. package/dist/hooks/index.d.ts.map +1 -0
  111. package/dist/hooks/index.js +5 -0
  112. package/dist/hooks/index.js.map +1 -0
  113. package/dist/hooks/session-resolver.d.ts +66 -0
  114. package/dist/hooks/session-resolver.d.ts.map +1 -0
  115. package/dist/hooks/session-resolver.js +196 -0
  116. package/dist/hooks/session-resolver.js.map +1 -0
  117. package/dist/hooks/tool-parsers.d.ts +19 -0
  118. package/dist/hooks/tool-parsers.d.ts.map +1 -0
  119. package/dist/hooks/tool-parsers.js +260 -0
  120. package/dist/hooks/tool-parsers.js.map +1 -0
  121. package/dist/index.d.ts +107 -0
  122. package/dist/index.d.ts.map +1 -0
  123. package/dist/index.js +1505 -0
  124. package/dist/index.js.map +1 -0
  125. package/dist/install/cli.d.ts +11 -0
  126. package/dist/install/cli.d.ts.map +1 -0
  127. package/dist/install/cli.js +365 -0
  128. package/dist/install/cli.js.map +1 -0
  129. package/dist/install/index.d.ts +4 -0
  130. package/dist/install/index.d.ts.map +1 -0
  131. package/dist/install/index.js +3 -0
  132. package/dist/install/index.js.map +1 -0
  133. package/dist/install/install-helper.d.ts +35 -0
  134. package/dist/install/install-helper.d.ts.map +1 -0
  135. package/dist/install/install-helper.js +227 -0
  136. package/dist/install/install-helper.js.map +1 -0
  137. package/dist/install/key-validator.d.ts +19 -0
  138. package/dist/install/key-validator.d.ts.map +1 -0
  139. package/dist/install/key-validator.js +122 -0
  140. package/dist/install/key-validator.js.map +1 -0
  141. package/dist/install/migrate.d.ts +12 -0
  142. package/dist/install/migrate.d.ts.map +1 -0
  143. package/dist/install/migrate.js +115 -0
  144. package/dist/install/migrate.js.map +1 -0
  145. package/dist/install/schedule.d.ts +11 -0
  146. package/dist/install/schedule.d.ts.map +1 -0
  147. package/dist/install/schedule.js +114 -0
  148. package/dist/install/schedule.js.map +1 -0
  149. package/dist/install/setup-wizard.d.ts +40 -0
  150. package/dist/install/setup-wizard.d.ts.map +1 -0
  151. package/dist/install/setup-wizard.js +489 -0
  152. package/dist/install/setup-wizard.js.map +1 -0
  153. package/dist/lib/date.d.ts +54 -0
  154. package/dist/lib/date.d.ts.map +1 -0
  155. package/dist/lib/date.js +85 -0
  156. package/dist/lib/date.js.map +1 -0
  157. package/dist/metrics/anti-patterns.d.ts +62 -0
  158. package/dist/metrics/anti-patterns.d.ts.map +1 -0
  159. package/dist/metrics/anti-patterns.js +301 -0
  160. package/dist/metrics/anti-patterns.js.map +1 -0
  161. package/dist/metrics/api-failure-tracker.d.ts +82 -0
  162. package/dist/metrics/api-failure-tracker.d.ts.map +1 -0
  163. package/dist/metrics/api-failure-tracker.js +202 -0
  164. package/dist/metrics/api-failure-tracker.js.map +1 -0
  165. package/dist/metrics/budget-tracker.d.ts +60 -0
  166. package/dist/metrics/budget-tracker.d.ts.map +1 -0
  167. package/dist/metrics/budget-tracker.js +130 -0
  168. package/dist/metrics/budget-tracker.js.map +1 -0
  169. package/dist/metrics/claudemd-tracker.d.ts +108 -0
  170. package/dist/metrics/claudemd-tracker.d.ts.map +1 -0
  171. package/dist/metrics/claudemd-tracker.js +337 -0
  172. package/dist/metrics/claudemd-tracker.js.map +1 -0
  173. package/dist/metrics/collaboration-profile.d.ts +65 -0
  174. package/dist/metrics/collaboration-profile.d.ts.map +1 -0
  175. package/dist/metrics/collaboration-profile.js +231 -0
  176. package/dist/metrics/collaboration-profile.js.map +1 -0
  177. package/dist/metrics/context-composition-tracker.d.ts +74 -0
  178. package/dist/metrics/context-composition-tracker.d.ts.map +1 -0
  179. package/dist/metrics/context-composition-tracker.js +202 -0
  180. package/dist/metrics/context-composition-tracker.js.map +1 -0
  181. package/dist/metrics/context-tracker.d.ts +78 -0
  182. package/dist/metrics/context-tracker.d.ts.map +1 -0
  183. package/dist/metrics/context-tracker.js +222 -0
  184. package/dist/metrics/context-tracker.js.map +1 -0
  185. package/dist/metrics/context-window-tracker.d.ts +18 -0
  186. package/dist/metrics/context-window-tracker.d.ts.map +1 -0
  187. package/dist/metrics/context-window-tracker.js +35 -0
  188. package/dist/metrics/context-window-tracker.js.map +1 -0
  189. package/dist/metrics/cost-forecast.d.ts +36 -0
  190. package/dist/metrics/cost-forecast.d.ts.map +1 -0
  191. package/dist/metrics/cost-forecast.js +91 -0
  192. package/dist/metrics/cost-forecast.js.map +1 -0
  193. package/dist/metrics/cost-per-outcome.d.ts +102 -0
  194. package/dist/metrics/cost-per-outcome.d.ts.map +1 -0
  195. package/dist/metrics/cost-per-outcome.js +266 -0
  196. package/dist/metrics/cost-per-outcome.js.map +1 -0
  197. package/dist/metrics/cost-tracker.d.ts +78 -0
  198. package/dist/metrics/cost-tracker.d.ts.map +1 -0
  199. package/dist/metrics/cost-tracker.js +169 -0
  200. package/dist/metrics/cost-tracker.js.map +1 -0
  201. package/dist/metrics/decision-tracker.d.ts +49 -0
  202. package/dist/metrics/decision-tracker.d.ts.map +1 -0
  203. package/dist/metrics/decision-tracker.js +161 -0
  204. package/dist/metrics/decision-tracker.js.map +1 -0
  205. package/dist/metrics/efficiency-score.d.ts +80 -0
  206. package/dist/metrics/efficiency-score.d.ts.map +1 -0
  207. package/dist/metrics/efficiency-score.js +219 -0
  208. package/dist/metrics/efficiency-score.js.map +1 -0
  209. package/dist/metrics/git-efficiency-tracker.d.ts +165 -0
  210. package/dist/metrics/git-efficiency-tracker.d.ts.map +1 -0
  211. package/dist/metrics/git-efficiency-tracker.js +1056 -0
  212. package/dist/metrics/git-efficiency-tracker.js.map +1 -0
  213. package/dist/metrics/index.d.ts +26 -0
  214. package/dist/metrics/index.d.ts.map +1 -0
  215. package/dist/metrics/index.js +14 -0
  216. package/dist/metrics/index.js.map +1 -0
  217. package/dist/metrics/instruction-drift-tracker.d.ts +69 -0
  218. package/dist/metrics/instruction-drift-tracker.d.ts.map +1 -0
  219. package/dist/metrics/instruction-drift-tracker.js +213 -0
  220. package/dist/metrics/instruction-drift-tracker.js.map +1 -0
  221. package/dist/metrics/latency-decomposition.d.ts +50 -0
  222. package/dist/metrics/latency-decomposition.d.ts.map +1 -0
  223. package/dist/metrics/latency-decomposition.js +112 -0
  224. package/dist/metrics/latency-decomposition.js.map +1 -0
  225. package/dist/metrics/latency-tracker.d.ts +33 -0
  226. package/dist/metrics/latency-tracker.d.ts.map +1 -0
  227. package/dist/metrics/latency-tracker.js +93 -0
  228. package/dist/metrics/latency-tracker.js.map +1 -0
  229. package/dist/metrics/live-session-registry.d.ts +29 -0
  230. package/dist/metrics/live-session-registry.d.ts.map +1 -0
  231. package/dist/metrics/live-session-registry.js +103 -0
  232. package/dist/metrics/live-session-registry.js.map +1 -0
  233. package/dist/metrics/model-usage-tracker.d.ts +21 -0
  234. package/dist/metrics/model-usage-tracker.d.ts.map +1 -0
  235. package/dist/metrics/model-usage-tracker.js +53 -0
  236. package/dist/metrics/model-usage-tracker.js.map +1 -0
  237. package/dist/metrics/percentile.d.ts +5 -0
  238. package/dist/metrics/percentile.d.ts.map +1 -0
  239. package/dist/metrics/percentile.js +10 -0
  240. package/dist/metrics/percentile.js.map +1 -0
  241. package/dist/metrics/personal-coach.d.ts +47 -0
  242. package/dist/metrics/personal-coach.d.ts.map +1 -0
  243. package/dist/metrics/personal-coach.js +241 -0
  244. package/dist/metrics/personal-coach.js.map +1 -0
  245. package/dist/metrics/prompt-feedback.d.ts +75 -0
  246. package/dist/metrics/prompt-feedback.d.ts.map +1 -0
  247. package/dist/metrics/prompt-feedback.js +286 -0
  248. package/dist/metrics/prompt-feedback.js.map +1 -0
  249. package/dist/metrics/proxy-metrics.d.ts +54 -0
  250. package/dist/metrics/proxy-metrics.d.ts.map +1 -0
  251. package/dist/metrics/proxy-metrics.js +228 -0
  252. package/dist/metrics/proxy-metrics.js.map +1 -0
  253. package/dist/metrics/quality-proxy-tracker.d.ts +51 -0
  254. package/dist/metrics/quality-proxy-tracker.d.ts.map +1 -0
  255. package/dist/metrics/quality-proxy-tracker.js +162 -0
  256. package/dist/metrics/quality-proxy-tracker.js.map +1 -0
  257. package/dist/metrics/recommendation-engine.d.ts +72 -0
  258. package/dist/metrics/recommendation-engine.d.ts.map +1 -0
  259. package/dist/metrics/recommendation-engine.js +207 -0
  260. package/dist/metrics/recommendation-engine.js.map +1 -0
  261. package/dist/metrics/retry-detector.d.ts +43 -0
  262. package/dist/metrics/retry-detector.d.ts.map +1 -0
  263. package/dist/metrics/retry-detector.js +179 -0
  264. package/dist/metrics/retry-detector.js.map +1 -0
  265. package/dist/metrics/session-tracker.d.ts +75 -0
  266. package/dist/metrics/session-tracker.d.ts.map +1 -0
  267. package/dist/metrics/session-tracker.js +249 -0
  268. package/dist/metrics/session-tracker.js.map +1 -0
  269. package/dist/metrics/task-completion-tracker.d.ts +15 -0
  270. package/dist/metrics/task-completion-tracker.d.ts.map +1 -0
  271. package/dist/metrics/task-completion-tracker.js +27 -0
  272. package/dist/metrics/task-completion-tracker.js.map +1 -0
  273. package/dist/metrics/task-detector.d.ts +84 -0
  274. package/dist/metrics/task-detector.d.ts.map +1 -0
  275. package/dist/metrics/task-detector.js +302 -0
  276. package/dist/metrics/task-detector.js.map +1 -0
  277. package/dist/metrics/tool-selection-scorer.d.ts +39 -0
  278. package/dist/metrics/tool-selection-scorer.d.ts.map +1 -0
  279. package/dist/metrics/tool-selection-scorer.js +193 -0
  280. package/dist/metrics/tool-selection-scorer.js.map +1 -0
  281. package/dist/metrics/trend-analyzer.d.ts +92 -0
  282. package/dist/metrics/trend-analyzer.d.ts.map +1 -0
  283. package/dist/metrics/trend-analyzer.js +293 -0
  284. package/dist/metrics/trend-analyzer.js.map +1 -0
  285. package/dist/metrics/turn-cost-attributor.d.ts +41 -0
  286. package/dist/metrics/turn-cost-attributor.d.ts.map +1 -0
  287. package/dist/metrics/turn-cost-attributor.js +118 -0
  288. package/dist/metrics/turn-cost-attributor.js.map +1 -0
  289. package/dist/metrics/turn-tracker.d.ts +49 -0
  290. package/dist/metrics/turn-tracker.d.ts.map +1 -0
  291. package/dist/metrics/turn-tracker.js +192 -0
  292. package/dist/metrics/turn-tracker.js.map +1 -0
  293. package/dist/platforms/amazon-q-adapter.d.ts +10 -0
  294. package/dist/platforms/amazon-q-adapter.d.ts.map +1 -0
  295. package/dist/platforms/amazon-q-adapter.js +75 -0
  296. package/dist/platforms/amazon-q-adapter.js.map +1 -0
  297. package/dist/platforms/claude-code-adapter.d.ts +10 -0
  298. package/dist/platforms/claude-code-adapter.d.ts.map +1 -0
  299. package/dist/platforms/claude-code-adapter.js +48 -0
  300. package/dist/platforms/claude-code-adapter.js.map +1 -0
  301. package/dist/platforms/continue-adapter.d.ts +10 -0
  302. package/dist/platforms/continue-adapter.d.ts.map +1 -0
  303. package/dist/platforms/continue-adapter.js +73 -0
  304. package/dist/platforms/continue-adapter.js.map +1 -0
  305. package/dist/platforms/copilot-adapter.d.ts +37 -0
  306. package/dist/platforms/copilot-adapter.d.ts.map +1 -0
  307. package/dist/platforms/copilot-adapter.js +66 -0
  308. package/dist/platforms/copilot-adapter.js.map +1 -0
  309. package/dist/platforms/cursor-adapter.d.ts +10 -0
  310. package/dist/platforms/cursor-adapter.d.ts.map +1 -0
  311. package/dist/platforms/cursor-adapter.js +60 -0
  312. package/dist/platforms/cursor-adapter.js.map +1 -0
  313. package/dist/platforms/generic-mcp-adapter.d.ts +113 -0
  314. package/dist/platforms/generic-mcp-adapter.d.ts.map +1 -0
  315. package/dist/platforms/generic-mcp-adapter.js +139 -0
  316. package/dist/platforms/generic-mcp-adapter.js.map +1 -0
  317. package/dist/platforms/index.d.ts +15 -0
  318. package/dist/platforms/index.d.ts.map +1 -0
  319. package/dist/platforms/index.js +12 -0
  320. package/dist/platforms/index.js.map +1 -0
  321. package/dist/platforms/platform-registry.d.ts +11 -0
  322. package/dist/platforms/platform-registry.d.ts.map +1 -0
  323. package/dist/platforms/platform-registry.js +54 -0
  324. package/dist/platforms/platform-registry.js.map +1 -0
  325. package/dist/platforms/types.d.ts +36 -0
  326. package/dist/platforms/types.d.ts.map +1 -0
  327. package/dist/platforms/types.js +2 -0
  328. package/dist/platforms/types.js.map +1 -0
  329. package/dist/platforms/windsurf-adapter.d.ts +10 -0
  330. package/dist/platforms/windsurf-adapter.d.ts.map +1 -0
  331. package/dist/platforms/windsurf-adapter.js +63 -0
  332. package/dist/platforms/windsurf-adapter.js.map +1 -0
  333. package/dist/platforms/zed-adapter.d.ts +10 -0
  334. package/dist/platforms/zed-adapter.d.ts.map +1 -0
  335. package/dist/platforms/zed-adapter.js +72 -0
  336. package/dist/platforms/zed-adapter.js.map +1 -0
  337. package/dist/proxy/index.d.ts +7 -0
  338. package/dist/proxy/index.d.ts.map +1 -0
  339. package/dist/proxy/index.js +5 -0
  340. package/dist/proxy/index.js.map +1 -0
  341. package/dist/proxy/otlp-receiver.d.ts +28 -0
  342. package/dist/proxy/otlp-receiver.d.ts.map +1 -0
  343. package/dist/proxy/otlp-receiver.js +319 -0
  344. package/dist/proxy/otlp-receiver.js.map +1 -0
  345. package/dist/proxy/proxy-manager.d.ts +47 -0
  346. package/dist/proxy/proxy-manager.d.ts.map +1 -0
  347. package/dist/proxy/proxy-manager.js +338 -0
  348. package/dist/proxy/proxy-manager.js.map +1 -0
  349. package/dist/proxy/types.d.ts +72 -0
  350. package/dist/proxy/types.d.ts.map +1 -0
  351. package/dist/proxy/types.js +33 -0
  352. package/dist/proxy/types.js.map +1 -0
  353. package/dist/proxy/upstream-http.d.ts +26 -0
  354. package/dist/proxy/upstream-http.d.ts.map +1 -0
  355. package/dist/proxy/upstream-http.js +209 -0
  356. package/dist/proxy/upstream-http.js.map +1 -0
  357. package/dist/proxy/upstream-stdio.d.ts +25 -0
  358. package/dist/proxy/upstream-stdio.d.ts.map +1 -0
  359. package/dist/proxy/upstream-stdio.js +256 -0
  360. package/dist/proxy/upstream-stdio.js.map +1 -0
  361. package/dist/security/audit-trail.d.ts +74 -0
  362. package/dist/security/audit-trail.d.ts.map +1 -0
  363. package/dist/security/audit-trail.js +338 -0
  364. package/dist/security/audit-trail.js.map +1 -0
  365. package/dist/security/index.d.ts +5 -0
  366. package/dist/security/index.d.ts.map +1 -0
  367. package/dist/security/index.js +4 -0
  368. package/dist/security/index.js.map +1 -0
  369. package/dist/security/ssrf.d.ts +2 -0
  370. package/dist/security/ssrf.d.ts.map +1 -0
  371. package/dist/security/ssrf.js +126 -0
  372. package/dist/security/ssrf.js.map +1 -0
  373. package/dist/server.d.ts +14 -0
  374. package/dist/server.d.ts.map +1 -0
  375. package/dist/server.js +117 -0
  376. package/dist/server.js.map +1 -0
  377. package/dist/shared/__test-utils__/log-output.d.ts +49 -0
  378. package/dist/shared/__test-utils__/log-output.d.ts.map +1 -0
  379. package/dist/shared/__test-utils__/log-output.js +38 -0
  380. package/dist/shared/__test-utils__/log-output.js.map +1 -0
  381. package/dist/shared/config.d.ts +56 -0
  382. package/dist/shared/config.d.ts.map +1 -0
  383. package/dist/shared/config.js +290 -0
  384. package/dist/shared/config.js.map +1 -0
  385. package/dist/shared/errors.d.ts +139 -0
  386. package/dist/shared/errors.d.ts.map +1 -0
  387. package/dist/shared/errors.js +406 -0
  388. package/dist/shared/errors.js.map +1 -0
  389. package/dist/shared/events/factory.d.ts +143 -0
  390. package/dist/shared/events/factory.d.ts.map +1 -0
  391. package/dist/shared/events/factory.js +351 -0
  392. package/dist/shared/events/factory.js.map +1 -0
  393. package/dist/shared/events/index.d.ts +6 -0
  394. package/dist/shared/events/index.d.ts.map +1 -0
  395. package/dist/shared/events/index.js +3 -0
  396. package/dist/shared/events/index.js.map +1 -0
  397. package/dist/shared/events/serialize.d.ts +87 -0
  398. package/dist/shared/events/serialize.d.ts.map +1 -0
  399. package/dist/shared/events/serialize.js +510 -0
  400. package/dist/shared/events/serialize.js.map +1 -0
  401. package/dist/shared/events/types.d.ts +139 -0
  402. package/dist/shared/events/types.d.ts.map +1 -0
  403. package/dist/shared/events/types.js +2 -0
  404. package/dist/shared/events/types.js.map +1 -0
  405. package/dist/shared/harvest/event-buffer.d.ts +59 -0
  406. package/dist/shared/harvest/event-buffer.d.ts.map +1 -0
  407. package/dist/shared/harvest/event-buffer.js +100 -0
  408. package/dist/shared/harvest/event-buffer.js.map +1 -0
  409. package/dist/shared/harvest/harvest-scheduler.d.ts +200 -0
  410. package/dist/shared/harvest/harvest-scheduler.d.ts.map +1 -0
  411. package/dist/shared/harvest/harvest-scheduler.js +647 -0
  412. package/dist/shared/harvest/harvest-scheduler.js.map +1 -0
  413. package/dist/shared/harvest/index.d.ts +7 -0
  414. package/dist/shared/harvest/index.d.ts.map +1 -0
  415. package/dist/shared/harvest/index.js +4 -0
  416. package/dist/shared/harvest/index.js.map +1 -0
  417. package/dist/shared/harvest/metric-aggregator.d.ts +115 -0
  418. package/dist/shared/harvest/metric-aggregator.d.ts.map +1 -0
  419. package/dist/shared/harvest/metric-aggregator.js +247 -0
  420. package/dist/shared/harvest/metric-aggregator.js.map +1 -0
  421. package/dist/shared/index.d.ts +22 -0
  422. package/dist/shared/index.d.ts.map +1 -0
  423. package/dist/shared/index.js +13 -0
  424. package/dist/shared/index.js.map +1 -0
  425. package/dist/shared/logger.d.ts +57 -0
  426. package/dist/shared/logger.d.ts.map +1 -0
  427. package/dist/shared/logger.js +166 -0
  428. package/dist/shared/logger.js.map +1 -0
  429. package/dist/shared/pricing-data.d.ts +4 -0
  430. package/dist/shared/pricing-data.d.ts.map +1 -0
  431. package/dist/shared/pricing-data.js +473 -0
  432. package/dist/shared/pricing-data.js.map +1 -0
  433. package/dist/shared/pricing.d.ts +148 -0
  434. package/dist/shared/pricing.d.ts.map +1 -0
  435. package/dist/shared/pricing.js +528 -0
  436. package/dist/shared/pricing.js.map +1 -0
  437. package/dist/shared/redact.d.ts +33 -0
  438. package/dist/shared/redact.d.ts.map +1 -0
  439. package/dist/shared/redact.js +110 -0
  440. package/dist/shared/redact.js.map +1 -0
  441. package/dist/shared/timing.d.ts +96 -0
  442. package/dist/shared/timing.d.ts.map +1 -0
  443. package/dist/shared/timing.js +173 -0
  444. package/dist/shared/timing.js.map +1 -0
  445. package/dist/shared/tokens.d.ts +145 -0
  446. package/dist/shared/tokens.d.ts.map +1 -0
  447. package/dist/shared/tokens.js +492 -0
  448. package/dist/shared/tokens.js.map +1 -0
  449. package/dist/shared/transport/events-api.d.ts +14 -0
  450. package/dist/shared/transport/events-api.d.ts.map +1 -0
  451. package/dist/shared/transport/events-api.js +29 -0
  452. package/dist/shared/transport/events-api.js.map +1 -0
  453. package/dist/shared/transport/http-client.d.ts +49 -0
  454. package/dist/shared/transport/http-client.d.ts.map +1 -0
  455. package/dist/shared/transport/http-client.js +381 -0
  456. package/dist/shared/transport/http-client.js.map +1 -0
  457. package/dist/shared/transport/index.d.ts +10 -0
  458. package/dist/shared/transport/index.d.ts.map +1 -0
  459. package/dist/shared/transport/index.js +6 -0
  460. package/dist/shared/transport/index.js.map +1 -0
  461. package/dist/shared/transport/logs-api.d.ts +29 -0
  462. package/dist/shared/transport/logs-api.d.ts.map +1 -0
  463. package/dist/shared/transport/logs-api.js +40 -0
  464. package/dist/shared/transport/logs-api.js.map +1 -0
  465. package/dist/shared/transport/metric-api.d.ts +9 -0
  466. package/dist/shared/transport/metric-api.d.ts.map +1 -0
  467. package/dist/shared/transport/metric-api.js +39 -0
  468. package/dist/shared/transport/metric-api.js.map +1 -0
  469. package/dist/shared/transport/otlp-event-bridge.d.ts +22 -0
  470. package/dist/shared/transport/otlp-event-bridge.d.ts.map +1 -0
  471. package/dist/shared/transport/otlp-event-bridge.js +50 -0
  472. package/dist/shared/transport/otlp-event-bridge.js.map +1 -0
  473. package/dist/shared/transport/otlp-shared.d.ts +14 -0
  474. package/dist/shared/transport/otlp-shared.d.ts.map +1 -0
  475. package/dist/shared/transport/otlp-shared.js +49 -0
  476. package/dist/shared/transport/otlp-shared.js.map +1 -0
  477. package/dist/shared/transport/otlp-transport.d.ts +58 -0
  478. package/dist/shared/transport/otlp-transport.d.ts.map +1 -0
  479. package/dist/shared/transport/otlp-transport.js +236 -0
  480. package/dist/shared/transport/otlp-transport.js.map +1 -0
  481. package/dist/shared/transport/types.d.ts +129 -0
  482. package/dist/shared/transport/types.d.ts.map +1 -0
  483. package/dist/shared/transport/types.js +2 -0
  484. package/dist/shared/transport/types.js.map +1 -0
  485. package/dist/shared/version.d.ts +2 -0
  486. package/dist/shared/version.d.ts.map +1 -0
  487. package/dist/shared/version.js +2 -0
  488. package/dist/shared/version.js.map +1 -0
  489. package/dist/storage/index.d.ts +7 -0
  490. package/dist/storage/index.d.ts.map +1 -0
  491. package/dist/storage/index.js +4 -0
  492. package/dist/storage/index.js.map +1 -0
  493. package/dist/storage/local-store.d.ts +153 -0
  494. package/dist/storage/local-store.d.ts.map +1 -0
  495. package/dist/storage/local-store.js +719 -0
  496. package/dist/storage/local-store.js.map +1 -0
  497. package/dist/storage/retention.d.ts +2 -0
  498. package/dist/storage/retention.d.ts.map +1 -0
  499. package/dist/storage/retention.js +53 -0
  500. package/dist/storage/retention.js.map +1 -0
  501. package/dist/storage/session-store.d.ts +97 -0
  502. package/dist/storage/session-store.d.ts.map +1 -0
  503. package/dist/storage/session-store.js +391 -0
  504. package/dist/storage/session-store.js.map +1 -0
  505. package/dist/storage/types.d.ts +64 -0
  506. package/dist/storage/types.d.ts.map +1 -0
  507. package/dist/storage/types.js +2 -0
  508. package/dist/storage/types.js.map +1 -0
  509. package/dist/storage/weekly-summary.d.ts +61 -0
  510. package/dist/storage/weekly-summary.d.ts.map +1 -0
  511. package/dist/storage/weekly-summary.js +243 -0
  512. package/dist/storage/weekly-summary.js.map +1 -0
  513. package/dist/tools/analytics-tools.d.ts +101 -0
  514. package/dist/tools/analytics-tools.d.ts.map +1 -0
  515. package/dist/tools/analytics-tools.js +71 -0
  516. package/dist/tools/analytics-tools.js.map +1 -0
  517. package/dist/tools/cost-tools.d.ts +121 -0
  518. package/dist/tools/cost-tools.d.ts.map +1 -0
  519. package/dist/tools/cost-tools.js +174 -0
  520. package/dist/tools/cost-tools.js.map +1 -0
  521. package/dist/tools/cross-session-tools.d.ts +376 -0
  522. package/dist/tools/cross-session-tools.d.ts.map +1 -0
  523. package/dist/tools/cross-session-tools.js +820 -0
  524. package/dist/tools/cross-session-tools.js.map +1 -0
  525. package/dist/tools/extended-analytics-tools.d.ts +164 -0
  526. package/dist/tools/extended-analytics-tools.d.ts.map +1 -0
  527. package/dist/tools/extended-analytics-tools.js +121 -0
  528. package/dist/tools/extended-analytics-tools.js.map +1 -0
  529. package/dist/tools/index.d.ts +7 -0
  530. package/dist/tools/index.d.ts.map +1 -0
  531. package/dist/tools/index.js +4 -0
  532. package/dist/tools/index.js.map +1 -0
  533. package/dist/tools/session-stats.d.ts +162 -0
  534. package/dist/tools/session-stats.d.ts.map +1 -0
  535. package/dist/tools/session-stats.js +1054 -0
  536. package/dist/tools/session-stats.js.map +1 -0
  537. package/dist/tools/workflow-tools.d.ts +126 -0
  538. package/dist/tools/workflow-tools.d.ts.map +1 -0
  539. package/dist/tools/workflow-tools.js +274 -0
  540. package/dist/tools/workflow-tools.js.map +1 -0
  541. package/dist/tracing/mcp-tracer.d.ts +4 -0
  542. package/dist/tracing/mcp-tracer.d.ts.map +1 -0
  543. package/dist/tracing/mcp-tracer.js +14 -0
  544. package/dist/tracing/mcp-tracer.js.map +1 -0
  545. package/dist/tracing/session-span.d.ts +14 -0
  546. package/dist/tracing/session-span.d.ts.map +1 -0
  547. package/dist/tracing/session-span.js +53 -0
  548. package/dist/tracing/session-span.js.map +1 -0
  549. package/dist/tracing/task-span-tracker.d.ts +11 -0
  550. package/dist/tracing/task-span-tracker.d.ts.map +1 -0
  551. package/dist/tracing/task-span-tracker.js +59 -0
  552. package/dist/tracing/task-span-tracker.js.map +1 -0
  553. package/dist/tracing/tool-call-span.d.ts +4 -0
  554. package/dist/tracing/tool-call-span.d.ts.map +1 -0
  555. package/dist/tracing/tool-call-span.js +60 -0
  556. package/dist/tracing/tool-call-span.js.map +1 -0
  557. package/dist/transport/index.d.ts +3 -0
  558. package/dist/transport/index.d.ts.map +1 -0
  559. package/dist/transport/index.js +2 -0
  560. package/dist/transport/index.js.map +1 -0
  561. package/dist/transport/log-ingest.d.ts +42 -0
  562. package/dist/transport/log-ingest.d.ts.map +1 -0
  563. package/dist/transport/log-ingest.js +151 -0
  564. package/dist/transport/log-ingest.js.map +1 -0
  565. package/dist/transport/nr-ingest.d.ts +171 -0
  566. package/dist/transport/nr-ingest.d.ts.map +1 -0
  567. package/dist/transport/nr-ingest.js +659 -0
  568. package/dist/transport/nr-ingest.js.map +1 -0
  569. package/dist/types.d.ts +45 -0
  570. package/dist/types.d.ts.map +1 -0
  571. package/dist/types.js +2 -0
  572. package/dist/types.js.map +1 -0
  573. package/dist/web/assets/index-BrL281N-.css +2 -0
  574. package/dist/web/assets/index-CcaYZzXm.js +42 -0
  575. package/dist/web/favicon.svg +15 -0
  576. package/dist/web/index.html +15 -0
  577. package/examples/local-alert-rules.json +106 -0
  578. package/package.json +129 -1
@@ -0,0 +1,492 @@
1
+ import { createLogger } from './logger.js';
2
+ const tokenLogger = createLogger('tokens');
3
+ /**
4
+ * Coerce a value to a non-negative integer. Returns 0 if the value is not a
5
+ * finite non-negative number. Useful for tolerating provider responses with
6
+ * missing, null, undefined, NaN, Infinity, negative, or float token counts.
7
+ *
8
+ * Floors fractional values (e.g. `safeInt(10.7) === 10`). When truncation
9
+ * actually drops a fractional part, emits a debug-level log so operators can
10
+ * diagnose buggy provider stubs that return non-integer token counts
11
+ *. The log is debug, not warn — token counts are
12
+ * provider-controlled and a single fractional value is not a library bug.
13
+ */
14
+ export function safeInt(value) {
15
+ if (typeof value === 'number' && Number.isFinite(value) && value >= 0) {
16
+ const floored = Math.floor(value);
17
+ if (floored !== value) {
18
+ tokenLogger.debug('safeInt truncated fractional value', { value, floored });
19
+ }
20
+ return floored;
21
+ }
22
+ return 0;
23
+ }
24
+ /**
25
+ * Frozen zero-valued `TokenUsage` template. Use `{ ...EMPTY_USAGE }` (a
26
+ * spread copy) when constructing a fresh mutable accumulator — the spread
27
+ * is intentional: `TokenAccumulator` mutates `latestUsage` in place across
28
+ * stream chunks. The frozen master is shared across
29
+ * call sites so a misuse like `(EMPTY_USAGE as TokenUsage).inputTokens = 5`
30
+ * throws in strict mode rather than silently corrupting future returns.
31
+ */
32
+ const EMPTY_USAGE = Object.freeze({
33
+ inputTokens: 0,
34
+ outputTokens: 0,
35
+ thinkingTokens: 0,
36
+ cacheReadTokens: 0,
37
+ cacheCreationTokens: 0,
38
+ totalTokens: 0,
39
+ });
40
+ export function extractAnthropicTokens(response) {
41
+ if (!response.usage)
42
+ return { ...EMPTY_USAGE };
43
+ const usage = response.usage;
44
+ const inputTokens = safeInt(usage.input_tokens);
45
+ const outputTokens = safeInt(usage.output_tokens);
46
+ const cacheReadTokens = safeInt(usage.cache_read_input_tokens);
47
+ const cacheCreationTokens = safeInt(usage.cache_creation_input_tokens);
48
+ // Anthropic currently folds thinking into output_tokens. If a future SDK
49
+ // exposes a dedicated thinking_tokens field, pick it up automatically.
50
+ // safeInt(undefined) === 0 preserves current behavior when absent.
51
+ const thinkingTokens = safeInt(usage.thinking_tokens);
52
+ return {
53
+ inputTokens,
54
+ outputTokens,
55
+ thinkingTokens,
56
+ cacheReadTokens,
57
+ cacheCreationTokens,
58
+ totalTokens: inputTokens + outputTokens + thinkingTokens + cacheReadTokens + cacheCreationTokens,
59
+ };
60
+ }
61
+ export function extractGeminiTokens(response) {
62
+ if (!response.usageMetadata)
63
+ return { ...EMPTY_USAGE };
64
+ const meta = response.usageMetadata;
65
+ const inputTokens = safeInt(meta.promptTokenCount);
66
+ const outputTokens = safeInt(meta.candidatesTokenCount);
67
+ const thinkingTokens = safeInt(meta.thoughtsTokenCount);
68
+ const cacheReadTokens = safeInt(meta.cachedContentTokenCount);
69
+ let totalTokens;
70
+ if (meta.totalTokenCount !== undefined) {
71
+ const apiTotal = safeInt(meta.totalTokenCount);
72
+ // Gemini's totalTokenCount is authoritative per
73
+ // the API spec and may legitimately diverge from the component sum
74
+ // (e.g. billable-vs-counted distinctions, deduplication). Use the API
75
+ // value, but emit a debug log on divergence so operators can spot drift
76
+ // if the API ever stops reporting totals consistently.
77
+ const componentSum = inputTokens + outputTokens + thinkingTokens + cacheReadTokens;
78
+ if (apiTotal !== componentSum) {
79
+ tokenLogger.debug('Gemini totalTokenCount differs from component sum', {
80
+ apiTotal,
81
+ componentSum,
82
+ inputTokens,
83
+ outputTokens,
84
+ thinkingTokens,
85
+ cacheReadTokens,
86
+ });
87
+ }
88
+ totalTokens = apiTotal;
89
+ }
90
+ else {
91
+ totalTokens = inputTokens + outputTokens + thinkingTokens + cacheReadTokens;
92
+ }
93
+ return {
94
+ inputTokens,
95
+ outputTokens,
96
+ thinkingTokens,
97
+ cacheReadTokens,
98
+ cacheCreationTokens: 0, // Gemini does not expose cache creation tokens
99
+ totalTokens,
100
+ };
101
+ }
102
+ /**
103
+ * Extract `TokenUsage` from an OpenAI Chat Completions response (or the final
104
+ * stream chunk when `stream_options: { include_usage: true }` is set — the
105
+ * shape is identical).
106
+ *
107
+ * Mapping:
108
+ * - `prompt_tokens` → `inputTokens`
109
+ * - `completion_tokens` → `outputTokens`
110
+ * - `prompt_tokens_details.cached_tokens` → `cacheReadTokens`
111
+ * - `completion_tokens_details.reasoning_tokens` → `thinkingTokens`
112
+ *
113
+ * `total_tokens` (if present) is authoritative and used as `totalTokens`,
114
+ * matching the Gemini extractor's behavior. OpenAI does not expose
115
+ * cache-creation tokens — they're set to 0.
116
+ */
117
+ export function extractOpenAITokens(response) {
118
+ if (!response.usage)
119
+ return { ...EMPTY_USAGE };
120
+ const usage = response.usage;
121
+ const inputTokens = safeInt(usage.prompt_tokens);
122
+ const outputTokens = safeInt(usage.completion_tokens);
123
+ const cacheReadTokens = safeInt(usage.prompt_tokens_details?.cached_tokens);
124
+ const thinkingTokens = safeInt(usage.completion_tokens_details?.reasoning_tokens);
125
+ let totalTokens;
126
+ if (usage.total_tokens !== undefined) {
127
+ totalTokens = safeInt(usage.total_tokens);
128
+ }
129
+ else {
130
+ // §11.3: for OpenAI, cacheReadTokens (prompt_tokens_details.cached_tokens)
131
+ // is a SUBSET of inputTokens (prompt_tokens), not an additive field.
132
+ // thinkingTokens (reasoning_tokens) is a SUBSET of outputTokens (completion_tokens).
133
+ // Including either again would double-count when total_tokens is absent.
134
+ totalTokens = inputTokens + outputTokens;
135
+ }
136
+ return {
137
+ inputTokens,
138
+ outputTokens,
139
+ thinkingTokens,
140
+ cacheReadTokens,
141
+ cacheCreationTokens: 0,
142
+ totalTokens,
143
+ };
144
+ }
145
+ export function extractCohereTokens(response) {
146
+ const usage = response.usage ?? response.meta;
147
+ if (!usage)
148
+ return { ...EMPTY_USAGE };
149
+ // Prefer the `tokens` block (actual counts). Fall back to `billed_units`
150
+ // when `tokens` is missing — Cohere has historically populated both, but
151
+ // older / less-common endpoints may surface only one.
152
+ const counts = usage.tokens ?? usage.billed_units ?? {};
153
+ const inputTokens = safeInt(counts.input_tokens);
154
+ const outputTokens = safeInt(counts.output_tokens);
155
+ return {
156
+ inputTokens,
157
+ outputTokens,
158
+ thinkingTokens: 0, // Cohere does not expose reasoning tokens
159
+ cacheReadTokens: 0,
160
+ cacheCreationTokens: 0,
161
+ totalTokens: inputTokens + outputTokens,
162
+ };
163
+ }
164
+ export function extractMistralTokens(response) {
165
+ if (!response.usage)
166
+ return { ...EMPTY_USAGE };
167
+ const usage = response.usage;
168
+ const inputTokens = safeInt(usage.prompt_tokens);
169
+ const outputTokens = safeInt(usage.completion_tokens);
170
+ let totalTokens;
171
+ if (usage.total_tokens !== undefined) {
172
+ totalTokens = safeInt(usage.total_tokens);
173
+ }
174
+ else {
175
+ totalTokens = inputTokens + outputTokens;
176
+ }
177
+ return {
178
+ inputTokens,
179
+ outputTokens,
180
+ thinkingTokens: 0, // Mistral Chat Completions does not expose reasoning tokens
181
+ cacheReadTokens: 0, // Mistral does not expose prompt-cache fields today
182
+ cacheCreationTokens: 0,
183
+ totalTokens,
184
+ };
185
+ }
186
+ export function extractBedrockTokens(response) {
187
+ if (!response.usage)
188
+ return { ...EMPTY_USAGE };
189
+ const usage = response.usage;
190
+ const inputTokens = safeInt(usage.inputTokens);
191
+ const outputTokens = safeInt(usage.outputTokens);
192
+ const cacheReadTokens = safeInt(usage.cacheReadInputTokens);
193
+ const cacheCreationTokens = safeInt(usage.cacheWriteInputTokens);
194
+ let totalTokens;
195
+ if (usage.totalTokens !== undefined) {
196
+ totalTokens = safeInt(usage.totalTokens);
197
+ }
198
+ else {
199
+ totalTokens = inputTokens + outputTokens + cacheReadTokens + cacheCreationTokens;
200
+ }
201
+ return {
202
+ inputTokens,
203
+ outputTokens,
204
+ thinkingTokens: 0, // Bedrock Converse does not surface reasoning tokens distinctly
205
+ cacheReadTokens,
206
+ cacheCreationTokens,
207
+ totalTokens,
208
+ };
209
+ }
210
+ // ---------------------------------------------------------------------------
211
+ // Unified stream extraction
212
+ // ---------------------------------------------------------------------------
213
+ /**
214
+ * Track providers we've already warned about for unsupported streaming token
215
+ * extraction One-shot per process — a noisy provider
216
+ * shouldn't flood stderr, but the first call is loud enough to be discovered.
217
+ */
218
+ const unsupportedProvidersWarned = new Set();
219
+ function warnUnsupportedProviderOnce(provider, source) {
220
+ if (unsupportedProvidersWarned.has(provider))
221
+ return;
222
+ unsupportedProvidersWarned.add(provider);
223
+ tokenLogger.warn(`${source}: token extraction not implemented for provider "${provider}" — returning zero usage. ` +
224
+ `Cost reports for this provider will be $0 until an extractor is added. ` +
225
+ `Pass usage data manually via createAiResponse if you have it.`, { provider });
226
+ }
227
+ /**
228
+ * Test-only — reset the warn-once set so per-test assertions can re-trigger.
229
+ */
230
+ export function __resetUnsupportedProvidersWarned() {
231
+ unsupportedProvidersWarned.clear();
232
+ }
233
+ export function extractStreamTokens(
234
+ // Accepts both non-streaming response shapes and streaming final-chunk
235
+ // shapes (which may nest usage differently). Duck-typed internally.
236
+ finalChunk, provider) {
237
+ // Guard against null/non-object for all providers — each extractor begins with
238
+ // `if (!response.usage) return EMPTY_USAGE` but that dereferences response
239
+ // first, throwing TypeError if it is null (§TK2).
240
+ if (finalChunk == null || typeof finalChunk !== 'object') {
241
+ return { ...EMPTY_USAGE };
242
+ }
243
+ if (provider === 'anthropic') {
244
+ return extractAnthropicTokens(finalChunk);
245
+ }
246
+ if (provider === 'google') {
247
+ return extractGeminiTokens(finalChunk);
248
+ }
249
+ if (provider === 'openai') {
250
+ return extractOpenAITokens(finalChunk);
251
+ }
252
+ if (provider === 'bedrock') {
253
+ // Bedrock stream final chunks nest usage under metadata.usage; non-streaming
254
+ // responses have it at the top level. Unwrap before delegating (§T1).
255
+ // null/non-object already guarded above (§TK2).
256
+ const bedrockChunk = finalChunk;
257
+ if ('metadata' in bedrockChunk) {
258
+ // This is a streaming-shaped chunk (has a metadata key). Keep shape
259
+ // detection separate from usage-presence so a future metadata event type
260
+ // that carries no usage does not fall through to the non-streaming extractor
261
+ // where the top-level usage field is also absent (§TK1).
262
+ const streamUsage = bedrockChunk.metadata?.usage;
263
+ if (streamUsage) {
264
+ return extractBedrockTokens({ usage: streamUsage });
265
+ }
266
+ tokenLogger.debug('Bedrock streaming chunk has metadata but no usage — returning empty', {
267
+ keys: Object.keys(bedrockChunk),
268
+ });
269
+ return { ...EMPTY_USAGE };
270
+ }
271
+ return extractBedrockTokens(bedrockChunk);
272
+ }
273
+ if (provider === 'mistral') {
274
+ return extractMistralTokens(finalChunk);
275
+ }
276
+ if (provider === 'cohere') {
277
+ // Cohere stream final chunks (message-end) nest usage under delta.usage;
278
+ // non-streaming responses have it at the top level (§T1).
279
+ // null/non-object already guarded above (§TK2).
280
+ const cohereChunk = finalChunk;
281
+ const streamUsage = cohereChunk.delta?.usage;
282
+ if ('delta' in cohereChunk && streamUsage) {
283
+ return extractCohereTokens({ usage: streamUsage });
284
+ }
285
+ return extractCohereTokens(cohereChunk);
286
+ }
287
+ // Defensive guard for hypothetical future providers added to AiProvider
288
+ // without a matching extractor branch above.
289
+ warnUnsupportedProviderOnce(provider, 'extractStreamTokens');
290
+ return { ...EMPTY_USAGE };
291
+ }
292
+ export class TokenAccumulator {
293
+ provider;
294
+ latestUsage = { ...EMPTY_USAGE };
295
+ finalized = false;
296
+ constructor(provider) {
297
+ this.provider = provider;
298
+ }
299
+ addChunk(chunk) {
300
+ if (this.finalized)
301
+ return;
302
+ if (this.provider === 'anthropic') {
303
+ this.addAnthropicChunk(chunk);
304
+ return;
305
+ }
306
+ if (this.provider === 'google') {
307
+ this.addGeminiChunk(chunk);
308
+ return;
309
+ }
310
+ if (this.provider === 'openai') {
311
+ this.addOpenAIChunk(chunk);
312
+ return;
313
+ }
314
+ if (this.provider === 'bedrock') {
315
+ this.addBedrockChunk(chunk);
316
+ return;
317
+ }
318
+ if (this.provider === 'mistral') {
319
+ this.addMistralChunk(chunk);
320
+ return;
321
+ }
322
+ if (this.provider === 'cohere') {
323
+ this.addCohereChunk(chunk);
324
+ return;
325
+ }
326
+ // Defensive guard for hypothetical future providers added to AiProvider
327
+ // without a matching extractor branch above.
328
+ warnUnsupportedProviderOnce(this.provider, 'TokenAccumulator');
329
+ }
330
+ finalize() {
331
+ this.finalized = true;
332
+ return { ...this.latestUsage };
333
+ }
334
+ /**
335
+ * Reset the accumulator so it can be reused for a new stream
336
+ *. Zeroes the latest usage snapshot and clears the
337
+ * `finalized` flag. The provider binding is preserved — to track a
338
+ * different provider, construct a new `TokenAccumulator`.
339
+ *
340
+ * Useful when a streaming operation retries mid-stream (provider-side
341
+ * disconnect, client-side reconnect): instead of allocating a fresh
342
+ * instance for each attempt, the caller can `reset()` the existing one.
343
+ * Without this method `addChunk()` is a no-op after `finalize()` and
344
+ * subsequent `finalize()` calls return the stale snapshot.
345
+ */
346
+ reset() {
347
+ this.latestUsage = { ...EMPTY_USAGE };
348
+ this.finalized = false;
349
+ }
350
+ addAnthropicChunk(event) {
351
+ // message_start carries the initial usage with input token counts (§TK3).
352
+ if (event.type === 'message_start' && event.message?.usage) {
353
+ const usage = event.message.usage;
354
+ this.latestUsage.inputTokens = safeInt(usage.input_tokens);
355
+ this.latestUsage.cacheReadTokens = safeInt(usage.cache_read_input_tokens);
356
+ this.latestUsage.cacheCreationTokens = safeInt(usage.cache_creation_input_tokens);
357
+ this.latestUsage.totalTokens =
358
+ this.latestUsage.inputTokens +
359
+ this.latestUsage.outputTokens +
360
+ this.latestUsage.thinkingTokens +
361
+ this.latestUsage.cacheReadTokens +
362
+ this.latestUsage.cacheCreationTokens;
363
+ }
364
+ // message_delta carries the FINAL counts. Per the Anthropic streaming
365
+ // spec it includes input_tokens, output_tokens, cache_read_input_tokens,
366
+ // and cache_creation_input_tokens — all of which may differ from
367
+ // message_start. Only overwrite a field when the delta carries it,
368
+ // so single-event-mocks (older tests, simpler stubs) continue to work.
369
+ if (event.type === 'message_delta' && event.usage) {
370
+ const u = event.usage;
371
+ if (u.output_tokens !== undefined) {
372
+ this.latestUsage.outputTokens = safeInt(u.output_tokens);
373
+ }
374
+ if (u.input_tokens !== undefined) {
375
+ this.latestUsage.inputTokens = safeInt(u.input_tokens);
376
+ }
377
+ if (u.cache_read_input_tokens !== undefined) {
378
+ this.latestUsage.cacheReadTokens = safeInt(u.cache_read_input_tokens);
379
+ }
380
+ if (u.cache_creation_input_tokens !== undefined) {
381
+ this.latestUsage.cacheCreationTokens = safeInt(u.cache_creation_input_tokens);
382
+ }
383
+ // Pick up thinking_tokens when Anthropic starts emitting it on streaming
384
+ // events. Matches the non-streaming path in extractAnthropicTokens (§TK1).
385
+ if (u.thinking_tokens !== undefined) {
386
+ this.latestUsage.thinkingTokens = safeInt(u.thinking_tokens);
387
+ }
388
+ // Recalculate totalTokens only when a usage update was received (§TK3).
389
+ // Moving this inside the branch avoids re-computing on every non-usage
390
+ // event (content_block_delta etc.) and is consistent with the Gemini/
391
+ // OpenAI/Bedrock/Cohere accumulators which all update inside their guards.
392
+ this.latestUsage.totalTokens =
393
+ this.latestUsage.inputTokens +
394
+ this.latestUsage.outputTokens +
395
+ this.latestUsage.thinkingTokens +
396
+ this.latestUsage.cacheReadTokens +
397
+ this.latestUsage.cacheCreationTokens;
398
+ }
399
+ }
400
+ addGeminiChunk(chunk) {
401
+ // Each Gemini chunk may carry usageMetadata; the last one is authoritative
402
+ if (chunk.usageMetadata) {
403
+ const meta = chunk.usageMetadata;
404
+ this.latestUsage.inputTokens = safeInt(meta.promptTokenCount);
405
+ this.latestUsage.outputTokens = safeInt(meta.candidatesTokenCount);
406
+ this.latestUsage.thinkingTokens = safeInt(meta.thoughtsTokenCount);
407
+ this.latestUsage.cacheReadTokens = safeInt(meta.cachedContentTokenCount);
408
+ this.latestUsage.totalTokens =
409
+ meta.totalTokenCount !== undefined
410
+ ? safeInt(meta.totalTokenCount)
411
+ : this.latestUsage.inputTokens +
412
+ this.latestUsage.outputTokens +
413
+ this.latestUsage.thinkingTokens +
414
+ this.latestUsage.cacheReadTokens +
415
+ this.latestUsage.cacheCreationTokens;
416
+ }
417
+ }
418
+ addOpenAIChunk(chunk) {
419
+ // Only the final chunk (when stream_options.include_usage is set) carries
420
+ // `usage`. Earlier chunks are no-ops here. The values are absolute, not
421
+ // deltas, so overwrite rather than accumulate.
422
+ if (chunk.usage) {
423
+ const u = chunk.usage;
424
+ this.latestUsage.inputTokens = safeInt(u.prompt_tokens);
425
+ this.latestUsage.outputTokens = safeInt(u.completion_tokens);
426
+ this.latestUsage.cacheReadTokens = safeInt(u.prompt_tokens_details?.cached_tokens);
427
+ this.latestUsage.thinkingTokens = safeInt(u.completion_tokens_details?.reasoning_tokens);
428
+ this.latestUsage.totalTokens =
429
+ u.total_tokens !== undefined
430
+ ? safeInt(u.total_tokens)
431
+ : // §11.3: same subset semantics as extractOpenAITokens — neither
432
+ // cacheReadTokens nor thinkingTokens is additive for OpenAI.
433
+ this.latestUsage.inputTokens + this.latestUsage.outputTokens;
434
+ }
435
+ }
436
+ addCohereChunk(chunk) {
437
+ // Only the `message-end` event carries usage; earlier event types are
438
+ // no-ops here. The values are absolute, not deltas, so overwrite rather
439
+ // than accumulate.
440
+ const usage = chunk.delta?.usage;
441
+ if (usage) {
442
+ const counts = usage.tokens ?? usage.billed_units ?? {};
443
+ this.latestUsage.inputTokens = safeInt(counts.input_tokens);
444
+ this.latestUsage.outputTokens = safeInt(counts.output_tokens);
445
+ this.latestUsage.totalTokens =
446
+ this.latestUsage.inputTokens +
447
+ this.latestUsage.outputTokens +
448
+ this.latestUsage.thinkingTokens +
449
+ this.latestUsage.cacheReadTokens +
450
+ this.latestUsage.cacheCreationTokens;
451
+ }
452
+ }
453
+ addMistralChunk(chunk) {
454
+ // Final chunk carries usage. The values are absolute, not deltas, so
455
+ // overwrite rather than accumulate.
456
+ if (chunk.usage) {
457
+ const u = chunk.usage;
458
+ this.latestUsage.inputTokens = safeInt(u.prompt_tokens);
459
+ this.latestUsage.outputTokens = safeInt(u.completion_tokens);
460
+ this.latestUsage.totalTokens =
461
+ u.total_tokens !== undefined
462
+ ? safeInt(u.total_tokens)
463
+ : this.latestUsage.inputTokens +
464
+ this.latestUsage.outputTokens +
465
+ this.latestUsage.thinkingTokens +
466
+ this.latestUsage.cacheReadTokens +
467
+ this.latestUsage.cacheCreationTokens;
468
+ }
469
+ }
470
+ addBedrockChunk(chunk) {
471
+ // Bedrock ConverseStream emits the `metadata` event near the end of
472
+ // the stream; earlier events (messageStart, contentBlockDelta,
473
+ // messageStop) carry no usage. The values are absolute, not deltas,
474
+ // so overwrite rather than accumulate.
475
+ const usage = chunk.metadata?.usage;
476
+ if (usage) {
477
+ this.latestUsage.inputTokens = safeInt(usage.inputTokens);
478
+ this.latestUsage.outputTokens = safeInt(usage.outputTokens);
479
+ this.latestUsage.cacheReadTokens = safeInt(usage.cacheReadInputTokens);
480
+ this.latestUsage.cacheCreationTokens = safeInt(usage.cacheWriteInputTokens);
481
+ this.latestUsage.totalTokens =
482
+ usage.totalTokens !== undefined
483
+ ? safeInt(usage.totalTokens)
484
+ : this.latestUsage.inputTokens +
485
+ this.latestUsage.outputTokens +
486
+ this.latestUsage.thinkingTokens +
487
+ this.latestUsage.cacheReadTokens +
488
+ this.latestUsage.cacheCreationTokens;
489
+ }
490
+ }
491
+ }
492
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/shared/tokens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { NrEventData } from '../events/types.js';
2
+ import type { TransportOptions, TransportResult } from './types.js';
3
+ /**
4
+ * Send a batch of events to NR's Events API. Compresses with gzip, retries
5
+ * with exponential backoff (capped, jittered, Retry-After-aware), and
6
+ * surfaces 4xx response bodies in the result so callers can distinguish
7
+ * license-key from payload-shape failures (7 / §5.8).
8
+ *
9
+ * Returns a {@link TransportResult} the harvest scheduler uses to decide
10
+ * whether to requeue the batch. Per-request timeout is honored via
11
+ * `AbortSignal.timeout`.
12
+ */
13
+ export declare function sendEvents(events: NrEventData[], licenseKey: string, options: TransportOptions): Promise<TransportResult>;
14
+ //# sourceMappingURL=events-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-api.d.ts","sourceRoot":"","sources":["../../../src/shared/transport/events-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGpE;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,WAAW,EAAE,EACrB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CAkB1B"}
@@ -0,0 +1,29 @@
1
+ import { sendWithRetry, resolveRegion, getEventsApiUrl } from './http-client.js';
2
+ /**
3
+ * Send a batch of events to NR's Events API. Compresses with gzip, retries
4
+ * with exponential backoff (capped, jittered, Retry-After-aware), and
5
+ * surfaces 4xx response bodies in the result so callers can distinguish
6
+ * license-key from payload-shape failures (7 / §5.8).
7
+ *
8
+ * Returns a {@link TransportResult} the harvest scheduler uses to decide
9
+ * whether to requeue the batch. Per-request timeout is honored via
10
+ * `AbortSignal.timeout`.
11
+ */
12
+ export async function sendEvents(events, licenseKey, options) {
13
+ if (events.length === 0) {
14
+ return { success: true, statusCode: null, retryCount: 0 };
15
+ }
16
+ const region = resolveRegion(licenseKey, options.collectorHost ?? null);
17
+ const url = getEventsApiUrl(options.accountId, region, options.collectorHost ?? null);
18
+ return sendWithRetry({
19
+ url,
20
+ body: events,
21
+ licenseKey,
22
+ maxRetries: options.maxRetries ?? 3,
23
+ baseDelayMs: options.baseDelayMs ?? 1000,
24
+ maxDelayMs: options.maxDelayMs ?? 30_000,
25
+ requestTimeoutMs: options.requestTimeoutMs ?? 30_000,
26
+ clientName: options.clientName,
27
+ });
28
+ }
29
+ //# sourceMappingURL=events-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-api.js","sourceRoot":"","sources":["../../../src/shared/transport/events-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEjF;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAqB,EACrB,UAAkB,EAClB,OAAyB;IAEzB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC;IACxE,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC;IAEtF,OAAO,aAAa,CAAC;QACnB,GAAG;QACH,IAAI,EAAE,MAAM;QACZ,UAAU;QACV,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,CAAC;QACnC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;QACxC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,MAAM;QACxC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,MAAM;QACpD,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,49 @@
1
+ import type { HttpSendOptions, TransportResult } from './types.js';
2
+ /**
3
+ * Supported New Relic regions for data ingest.
4
+ *
5
+ * - `us` — default/global region (insights-collector.newrelic.com)
6
+ * - `eu` — EU data center (insights-collector.eu01.nr-data.net)
7
+ * - `gov` — FedRAMP / US gov cloud (gov-* hostnames)
8
+ *
9
+ * License-key prefix mapping: `us01` → us, `eu01` → eu, `gov01` → gov.
10
+ * Legacy keys (no recognizable region prefix) default to `us`.
11
+ */
12
+ export type Region = 'us' | 'eu' | 'gov';
13
+ export declare function resolveRegion(licenseKey: string, collectorHost: string | null): Region;
14
+ export declare function getEventsApiUrl(accountId: string, region: Region, collectorHost?: string | null): string;
15
+ export declare function getMetricApiUrl(region: Region, collectorHost?: string | null): string;
16
+ export declare function getLogsApiUrl(region: Region, collectorHost?: string | null): string;
17
+ /**
18
+ * gzip-compress a JSON-serializable payload.
19
+ *
20
+ * Node 18+'s `zlib.gzip` accepts a string directly and performs UTF-8
21
+ * encoding internally, so we hand it `JSON.stringify(data)` and skip the
22
+ * extra `Buffer.from(json)` allocation that the previous implementation
23
+ * incurred (one less buffer per harvest).
24
+ *
25
+ * The returned Buffer is immutable after the call (`zlib.gzip` is a
26
+ * one-shot, not a stateful stream), so it is safe for `sendWithRetry` to
27
+ * reuse the same `compressed` Buffer across retry attempts (§5.16). If a
28
+ * future refactor moves to a stateful gzip stream, that reuse becomes
29
+ * unsafe — pin the call site outside the retry loop accordingly.
30
+ */
31
+ export declare function compressPayload(data: unknown): Promise<Buffer>;
32
+ /**
33
+ * AWS-recommended decorrelated-jitter exponential backoff.
34
+ *
35
+ * sleep = min(maxDelayMs, random_between(baseDelayMs, prevSleepMs * 3))
36
+ *
37
+ * Compared to "equal jitter" (`backoff * (0.5 + Math.random() * 0.5)`),
38
+ * decorrelated jitter:
39
+ * - smears retries more uniformly across time, reducing the thundering-herd
40
+ * effect when many clients are retrying the same 429,
41
+ * - lets a slow-start grow naturally toward `maxDelayMs` rather than locking
42
+ * the schedule to powers of two of `baseDelayMs`.
43
+ *
44
+ * `prevSleepMs` should start at `baseDelayMs` for the first retry, then carry
45
+ * the chosen wait forward so each subsequent retry samples from a wider band.
46
+ */
47
+ export declare function decorrelatedJitter(baseDelayMs: number, maxDelayMs: number, prevSleepMs: number): number;
48
+ export declare function sendWithRetry(options: HttpSendOptions): Promise<TransportResult>;
49
+ //# sourceMappingURL=http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../src/shared/transport/http-client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA0BnE;;;;;;;;;GASG;AACH,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;AAgBzC,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAsCtF;AA4DD,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAC5B,MAAM,CAiBR;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAKrF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAKnF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAEpE;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,MAAM,CAQR;AA4BD,wBAAsB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAwKtF"}