@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,351 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { safeInt } from '../tokens.js';
3
+ import { createLogger } from '../logger.js';
4
+ const factoryLogger = createLogger('events-factory');
5
+ // Mirror safeInt but for float cost fields: NaN / Infinity -> null (§F1).
6
+ function safeFiniteOrNull(v) {
7
+ if (v == null)
8
+ return null;
9
+ return Number.isFinite(v) ? v : null;
10
+ }
11
+ /**
12
+ * Warn-once for missing entityGuid.
13
+ *
14
+ * NR's entity model usually requires both `appName` and `entityGuid` to attach
15
+ * events to a specific entity surface (APM service, browser app, etc.).
16
+ * Without an entityGuid, events still ingest but land in a "standalone events"
17
+ * view rather than attaching to a service.
18
+ *
19
+ * §11.8: warn once PER EVENT TYPE rather than once globally. The old boolean
20
+ * flag would silence all subsequent factory calls after the very first
21
+ * missing-entityGuid event, regardless of type — an operator who added
22
+ * entityGuid to AiRequest but not AiAgentTaskSummary would never see the
23
+ * warning for the summary events. A Set keyed by eventType gives one warning
24
+ * per type, covering partial-coverage scenarios without flooding stderr.
25
+ */
26
+ const entityGuidWarnedTypes = new Set();
27
+ function warnIfMissingEntityGuid(eventType, entityGuid) {
28
+ if (entityGuidWarnedTypes.has(eventType))
29
+ return;
30
+ if (entityGuid === null || entityGuid === undefined || entityGuid === '') {
31
+ entityGuidWarnedTypes.add(eventType);
32
+ factoryLogger.warn(`${eventType} created without entityGuid — events will not attach to an NR entity. ` +
33
+ 'Pass entityGuid alongside appName for entity-scoped routing.');
34
+ }
35
+ }
36
+ /**
37
+ * Reset the warn-once set. Test-only — production code never resets.
38
+ * Exported behind a `__` prefix so it's clearly internal.
39
+ */
40
+ export function __resetEntityGuidWarning() {
41
+ entityGuidWarnedTypes.clear();
42
+ }
43
+ export function createAiRequest(params) {
44
+ if (!params.model) {
45
+ throw new Error('AiRequest requires a model');
46
+ }
47
+ if (!params.provider) {
48
+ throw new Error('AiRequest requires a provider');
49
+ }
50
+ if (!params.requestMethod) {
51
+ throw new Error('AiRequest requires a requestMethod');
52
+ }
53
+ if (!params.appName) {
54
+ throw new Error('AiRequest requires an appName');
55
+ }
56
+ warnIfMissingEntityGuid('AiRequest', params.entityGuid);
57
+ return {
58
+ id: params.id ?? randomUUID(),
59
+ timestamp: params.timestamp ?? Date.now(),
60
+ provider: params.provider,
61
+ model: params.model,
62
+ requestMethod: params.requestMethod,
63
+ // Sanitize numeric fields so NaN / Infinity / negative values don't reach
64
+ // the wire (§EV1). safeInt for integer counts; safeFiniteOrNull for floats.
65
+ maxTokens: params.maxTokens != null ? safeInt(params.maxTokens) : null,
66
+ temperature: safeFiniteOrNull(params.temperature),
67
+ topP: safeFiniteOrNull(params.topP),
68
+ systemPromptLength: params.systemPromptLength != null ? safeInt(params.systemPromptLength) : null,
69
+ messageCount: safeInt(params.messageCount),
70
+ toolCount: safeInt(params.toolCount ?? 0),
71
+ toolNames: params.toolNames ?? [],
72
+ thinkingEnabled: params.thinkingEnabled ?? false,
73
+ thinkingBudgetTokens: params.thinkingBudgetTokens != null ? safeInt(params.thinkingBudgetTokens) : null,
74
+ streamingEnabled: params.streamingEnabled,
75
+ 'nr.appName': params.appName,
76
+ 'nr.entityGuid': params.entityGuid ?? null,
77
+ customAttributes: params.customAttributes ?? {},
78
+ };
79
+ }
80
+ export function createAiResponse(params) {
81
+ if (!params.model) {
82
+ throw new Error('AiResponse requires a model');
83
+ }
84
+ if (!params.provider) {
85
+ throw new Error('AiResponse requires a provider');
86
+ }
87
+ if (!params.appName) {
88
+ throw new Error('AiResponse requires an appName');
89
+ }
90
+ warnIfMissingEntityGuid('AiResponse', params.entityGuid);
91
+ // coerce token fields through safeInt so NaN, Infinity,
92
+ // negative numbers, and floats from buggy callers don't propagate as
93
+ // null/Infinity into the serialized event (where JSON.stringify maps them
94
+ // to "null", which NR Events API silently drops).
95
+ const inputTokens = safeInt(params.inputTokens);
96
+ const outputTokens = safeInt(params.outputTokens);
97
+ const thinkingTokens = safeInt(params.thinkingTokens);
98
+ const cacheReadTokens = safeInt(params.cacheReadTokens);
99
+ const cacheCreationTokens = safeInt(params.cacheCreationTokens);
100
+ // For Google and OpenAI, inputTokens already includes cached content (cache
101
+ // tokens are a subset, not additive). Adding them again double-counts (§EV2).
102
+ // Same provider-aware logic as serialize.ts gen_ai.usage.input_tokens (§S1).
103
+ //
104
+ // §11.2: For OpenAI, thinkingTokens (reasoning_tokens from
105
+ // completion_tokens_details) is already a SUBSET of outputTokens
106
+ // (completion_tokens) — not a separate additive field. The prior code
107
+ // added it unconditionally, relying on a comment that said "extractors
108
+ // produce thinkingTokens=0 for OpenAI" — which is false for o1/o3/o4-mini.
109
+ // Fix: OpenAI totalTokens = inputTokens + outputTokens (no thinking, no cache).
110
+ // For Google, thinkingTokens (thoughtsTokenCount) IS disjoint from
111
+ // outputTokens (candidatesTokenCount) per the Gemini API spec, so it is
112
+ // still added for that provider.
113
+ const totalTokens = params.provider === 'openai'
114
+ ? inputTokens + outputTokens
115
+ : params.provider === 'google'
116
+ ? inputTokens + outputTokens + thinkingTokens
117
+ : inputTokens + outputTokens + thinkingTokens + cacheReadTokens + cacheCreationTokens;
118
+ // durationMs: coerce to a non-negative integer, matching createAiAgentTaskSummary
119
+ // (§FAC1). safeInt(NaN|Infinity|negative) → 0. Fractional ms is caller error.
120
+ const durationMs = safeInt(Number.isFinite(params.durationMs) && params.durationMs >= 0 ? params.durationMs : 0);
121
+ // timeToFirstTokenMs: apply the same non-negative finite guard (§FAC2).
122
+ // NaN → null; Infinity → null; negative → null.
123
+ const timeToFirstTokenMs = params.timeToFirstTokenMs != null &&
124
+ Number.isFinite(params.timeToFirstTokenMs) &&
125
+ params.timeToFirstTokenMs >= 0
126
+ ? params.timeToFirstTokenMs
127
+ : null;
128
+ const tokensPerSecond = durationMs > 0 && outputTokens > 0 ? (outputTokens / durationMs) * 1000 : null;
129
+ return {
130
+ id: params.id ?? randomUUID(),
131
+ timestamp: params.timestamp ?? Date.now(),
132
+ provider: params.provider,
133
+ model: params.model,
134
+ durationMs,
135
+ timeToFirstTokenMs,
136
+ tokensPerSecond,
137
+ inputTokens,
138
+ outputTokens,
139
+ thinkingTokens,
140
+ cacheReadTokens,
141
+ cacheCreationTokens,
142
+ totalTokens,
143
+ costInputUsd: safeFiniteOrNull(params.costInputUsd),
144
+ costOutputUsd: safeFiniteOrNull(params.costOutputUsd),
145
+ costThinkingUsd: safeFiniteOrNull(params.costThinkingUsd),
146
+ costCacheReadUsd: safeFiniteOrNull(params.costCacheReadUsd),
147
+ costCacheCreationUsd: safeFiniteOrNull(params.costCacheCreationUsd),
148
+ costTotalUsd: safeFiniteOrNull(params.costTotalUsd),
149
+ stopReason: params.stopReason ?? null,
150
+ contentBlockTypes: params.contentBlockTypes ?? [],
151
+ error: params.error ?? null,
152
+ 'nr.appName': params.appName,
153
+ 'nr.entityGuid': params.entityGuid ?? null,
154
+ customAttributes: params.customAttributes ?? {},
155
+ };
156
+ }
157
+ export function createAiMessage(params) {
158
+ if (!params.role) {
159
+ throw new Error('AiMessage requires a role');
160
+ }
161
+ // 13: required-field validation made uniform across the
162
+ // three factory functions. `content` is typed as `string` but JS callers
163
+ // bypass the type system; reject `null` / `undefined` here so downstream
164
+ // serialization doesn't emit `content: "null"` / `content: "undefined"`
165
+ // verbatim. Empty string is allowed — a deliberately-empty assistant
166
+ // response is a valid record.
167
+ if (params.content === null || params.content === undefined) {
168
+ throw new Error('AiMessage requires content');
169
+ }
170
+ if (!params.appName) {
171
+ throw new Error('AiMessage requires an appName');
172
+ }
173
+ warnIfMissingEntityGuid('AiMessage', params.entityGuid);
174
+ return {
175
+ id: params.id ?? randomUUID(),
176
+ timestamp: params.timestamp ?? Date.now(),
177
+ role: params.role,
178
+ content: params.content,
179
+ contentLength: safeInt(params.contentLength),
180
+ sequence: params.sequence,
181
+ 'nr.appName': params.appName,
182
+ 'nr.entityGuid': params.entityGuid ?? null,
183
+ customAttributes: params.customAttributes ?? {},
184
+ };
185
+ }
186
+ export function createAiAgentTaskSummary(params) {
187
+ if (!params.traceId) {
188
+ throw new Error('AiAgentTaskSummary requires a traceId');
189
+ }
190
+ if (!params.spanId) {
191
+ throw new Error('AiAgentTaskSummary requires a spanId');
192
+ }
193
+ if (!params.taskName) {
194
+ throw new Error('AiAgentTaskSummary requires a taskName');
195
+ }
196
+ if (!params.appName) {
197
+ throw new Error('AiAgentTaskSummary requires an appName');
198
+ }
199
+ warnIfMissingEntityGuid('AiAgentTaskSummary', params.entityGuid);
200
+ return {
201
+ id: params.id ?? randomUUID(),
202
+ timestamp: params.timestamp ?? Date.now(),
203
+ traceId: params.traceId,
204
+ spanId: params.spanId,
205
+ taskName: params.taskName,
206
+ // Sanitize numeric fields through safeInt so a buggy caller passing NaN /
207
+ // Infinity doesn't propagate through serialize.ts as `null` and confuse
208
+ // downstream NRQL aggregations.
209
+ durationMs: safeInt(params.durationMs),
210
+ totalLlmCalls: safeInt(params.totalLlmCalls),
211
+ totalToolCalls: safeInt(params.totalToolCalls),
212
+ totalTokens: safeInt(params.totalTokens),
213
+ totalCostUsd: safeFiniteOrNull(params.totalCostUsd),
214
+ stepCount: safeInt(params.stepCount),
215
+ success: params.success,
216
+ provider: params.provider,
217
+ delegationCount: params.delegationCount !== undefined ? safeInt(params.delegationCount) : undefined,
218
+ spawnCount: params.spawnCount !== undefined ? safeInt(params.spawnCount) : undefined,
219
+ delegationDepth: params.delegationDepth !== undefined ? safeInt(params.delegationDepth) : undefined,
220
+ interAgentMessages: params.interAgentMessages !== undefined ? safeInt(params.interAgentMessages) : undefined,
221
+ delegationOverheadMs: params.delegationOverheadMs !== undefined ? safeInt(params.delegationOverheadMs) : undefined,
222
+ 'nr.appName': params.appName,
223
+ 'nr.entityGuid': params.entityGuid ?? null,
224
+ customAttributes: params.customAttributes ?? {},
225
+ };
226
+ }
227
+ export function createAiAntiPattern(params) {
228
+ if (!params.traceId) {
229
+ throw new Error('AiAntiPattern requires a traceId');
230
+ }
231
+ if (!params.patternType) {
232
+ throw new Error('AiAntiPattern requires a patternType');
233
+ }
234
+ if (!params.severity) {
235
+ throw new Error('AiAntiPattern requires a severity');
236
+ }
237
+ if (!params.description) {
238
+ throw new Error('AiAntiPattern requires a description');
239
+ }
240
+ if (!params.appName) {
241
+ throw new Error('AiAntiPattern requires an appName');
242
+ }
243
+ warnIfMissingEntityGuid('AiAntiPattern', params.entityGuid);
244
+ return {
245
+ id: params.id ?? randomUUID(),
246
+ timestamp: params.timestamp ?? Date.now(),
247
+ traceId: params.traceId,
248
+ patternType: params.patternType,
249
+ severity: params.severity,
250
+ description: params.description,
251
+ provider: params.provider,
252
+ toolName: params.toolName,
253
+ repeatCount: params.repeatCount !== undefined ? safeInt(params.repeatCount) : undefined,
254
+ depthIndex: params.depthIndex !== undefined ? safeInt(params.depthIndex) : undefined,
255
+ taskComplexity: params.taskComplexity,
256
+ contextPressure: safeFiniteOrNull(params.contextPressure),
257
+ tokenShare: safeFiniteOrNull(params.tokenShare),
258
+ attemptCount: params.attemptCount !== undefined ? safeInt(params.attemptCount) : undefined,
259
+ 'nr.appName': params.appName,
260
+ 'nr.entityGuid': params.entityGuid ?? null,
261
+ customAttributes: params.customAttributes ?? {},
262
+ };
263
+ }
264
+ export function createAiAgentMessage(params) {
265
+ if (!params.traceId) {
266
+ throw new Error('AiAgentMessage requires a traceId');
267
+ }
268
+ if (!params.fromAgent) {
269
+ throw new Error('AiAgentMessage requires a fromAgent');
270
+ }
271
+ if (!params.toAgent) {
272
+ throw new Error('AiAgentMessage requires a toAgent');
273
+ }
274
+ if (!params.messageType) {
275
+ throw new Error('AiAgentMessage requires a messageType');
276
+ }
277
+ if (!params.appName) {
278
+ throw new Error('AiAgentMessage requires an appName');
279
+ }
280
+ warnIfMissingEntityGuid('AiAgentMessage', params.entityGuid);
281
+ return {
282
+ id: params.id ?? randomUUID(),
283
+ timestamp: params.timestamp ?? Date.now(),
284
+ traceId: params.traceId,
285
+ fromAgent: params.fromAgent,
286
+ toAgent: params.toAgent,
287
+ messageType: params.messageType,
288
+ provider: params.provider,
289
+ tokenCount: params.tokenCount === undefined ? undefined : safeInt(params.tokenCount),
290
+ 'nr.appName': params.appName,
291
+ 'nr.entityGuid': params.entityGuid ?? null,
292
+ customAttributes: params.customAttributes ?? {},
293
+ };
294
+ }
295
+ export function createAiContextReset(params) {
296
+ if (!params.traceId) {
297
+ throw new Error('AiContextReset requires a traceId');
298
+ }
299
+ if (!params.conversationId) {
300
+ throw new Error('AiContextReset requires a conversationId');
301
+ }
302
+ if (!params.reason) {
303
+ throw new Error('AiContextReset requires a reason');
304
+ }
305
+ if (!params.appName) {
306
+ throw new Error('AiContextReset requires an appName');
307
+ }
308
+ warnIfMissingEntityGuid('AiContextReset', params.entityGuid);
309
+ const tokensBefore = safeInt(params.tokensBefore);
310
+ const tokensAfter = safeInt(params.tokensAfter);
311
+ // Derived fields — compute here so callers don't have to remember the
312
+ // contract. tokensRemoved is `before - after` (clamped at 0 because a
313
+ // post-reset count higher than the pre-reset count is nonsensical, and
314
+ // the resulting negative value would corrupt NRQL aggregations).
315
+ const tokensRemoved = Math.max(0, tokensBefore - tokensAfter);
316
+ // tokensBefore === 0 → identity reset (no content to compress); return 1.0
317
+ // so dashboards averaging compressionRatio don't see artificially low values
318
+ // from no-op resets. ratio > 1.0 is possible (summarizer preamble > savings)
319
+ // and is preserved; a debug log makes the rare case diagnosable (§F2).
320
+ let compressionRatio;
321
+ if (tokensBefore === 0) {
322
+ compressionRatio = 1;
323
+ }
324
+ else {
325
+ compressionRatio = tokensAfter / tokensBefore;
326
+ if (compressionRatio > 1) {
327
+ factoryLogger.debug('AiContextReset compressionRatio > 1 (post-reset tokens exceed pre-reset)', {
328
+ tokensBefore,
329
+ tokensAfter,
330
+ compressionRatio,
331
+ });
332
+ }
333
+ }
334
+ return {
335
+ id: params.id ?? randomUUID(),
336
+ timestamp: params.timestamp ?? Date.now(),
337
+ traceId: params.traceId,
338
+ conversationId: params.conversationId,
339
+ tokensBefore,
340
+ tokensAfter,
341
+ tokensRemoved,
342
+ compressionRatio,
343
+ reason: params.reason,
344
+ provider: params.provider,
345
+ turnsRemoved: params.turnsRemoved !== undefined ? safeInt(params.turnsRemoved) : undefined,
346
+ 'nr.appName': params.appName,
347
+ 'nr.entityGuid': params.entityGuid ?? null,
348
+ customAttributes: params.customAttributes ?? {},
349
+ };
350
+ }
351
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/shared/events/factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type { AiProvider, AiRequestMethod, AiRequest, AiResponse, AiMessageRole, AiMessage, NrEventData, AiAgentTaskSummary, AntiPatternType, AiAntiPattern, AiAgentMessage, AiContextReset, } from './types.js';
2
+ export { createAiRequest, createAiResponse, createAiMessage, createAiAgentTaskSummary, createAiAntiPattern, createAiAgentMessage, createAiContextReset, } from './factory.js';
3
+ export type { CreateAiRequestParams, CreateAiResponseParams, CreateAiMessageParams, CreateAiAgentTaskSummaryParams, CreateAiAntiPatternParams, CreateAiAgentMessageParams, CreateAiContextResetParams, } from './factory.js';
4
+ export { aiRequestToNrEvent, aiResponseToNrEvent, aiMessageToNrEvent, aiAgentTaskSummaryToNrEvent, aiAntiPatternToNrEvent, aiAgentMessageToNrEvent, aiContextResetToNrEvent, EVENT_SCHEMA_VERSION, } from './serialize.js';
5
+ export type { SerializeOptions } from './serialize.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/events/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,eAAe,EACf,SAAS,EACT,UAAU,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,cAAc,EACd,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,EAC9B,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { createAiRequest, createAiResponse, createAiMessage, createAiAgentTaskSummary, createAiAntiPattern, createAiAgentMessage, createAiContextReset, } from './factory.js';
2
+ export { aiRequestToNrEvent, aiResponseToNrEvent, aiMessageToNrEvent, aiAgentTaskSummaryToNrEvent, aiAntiPatternToNrEvent, aiAgentMessageToNrEvent, aiContextResetToNrEvent, EVENT_SCHEMA_VERSION, } from './serialize.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/events/index.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAUtB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,87 @@
1
+ import type { AiRequest, AiResponse, AiMessage, AiAgentTaskSummary, AiAntiPattern, AiAgentMessage, AiContextReset, NrEventData } from './types.js';
2
+ /**
3
+ * High-security mode field-suppression contract.
4
+ *
5
+ * When `highSecurity: true` is passed to a serializer, the resulting
6
+ * NrEventData has the following content-bearing fields suppressed:
7
+ *
8
+ * - `error.message` is **omitted entirely** (provider error bodies often
9
+ * echo verbatim prompt fragments back). `error.type` and
10
+ * `error.statusCode` are still emitted — they are bounded enum-like
11
+ * values useful for triage and don't leak content. Applies to
12
+ * `aiResponseToNrEvent`.
13
+ *
14
+ * - Every string value in `customAttributes` is **clipped to 256
15
+ * characters** (with a trailing `...` marker). Numeric custom
16
+ * attributes pass through unchanged. Applies to **all** serializers.
17
+ * In normal mode (highSecurity: false / omitted), string values are
18
+ * still truncated at 4000 chars so a long attribute cannot push the
19
+ * event past NR's 4096-byte per-attribute cap.
20
+ *
21
+ * Structural / metadata fields are intentionally NOT suppressed in
22
+ * high-security mode — they are bounded identifiers, not free-form
23
+ * content:
24
+ *
25
+ * - `toolNames`, `contentBlockTypes`, `requestMethod`, `model`,
26
+ * `provider`, `stopReason`, `patternType`, `severity`, etc.
27
+ * - `AiAntiPattern.description` (enum-derived diagnostic text written
28
+ * by the agent, not by the upstream model).
29
+ *
30
+ * Per-message content (`AiMessage.content`) is gated separately by
31
+ * `recordContent` on the consumer's `AgentConfig`, which `highSecurity`
32
+ * forces to `false` at config-load time. The message serializer assumes
33
+ * the caller has already honored that flag and does not clip `content`
34
+ * here.
35
+ */
36
+ export interface SerializeOptions {
37
+ readonly highSecurity?: boolean;
38
+ }
39
+ /**
40
+ * Event schema version. Bump whenever the wire-format
41
+ * shape of any serializer changes in a way that downstream NR dashboards
42
+ * built on the previous shape would silently mis-render. The current value
43
+ * is stamped on every emitted event (`schemaVersion: 1`) so dashboards can
44
+ * filter on `WHERE schemaVersion = 1` and catch a future migration before
45
+ * the data renders incorrectly.
46
+ *
47
+ * Bumping policy:
48
+ * - Add a field: NO bump required (new field is null/missing on old events).
49
+ * - Remove or rename a field: bump.
50
+ * - Change a field's type or unit: bump.
51
+ * - Change a field's semantic meaning: bump.
52
+ *
53
+ * The §4.9 metric-API summary migration is an analogous (separate) wire
54
+ * change and is covered by NR's metric `type` field, not this schema version.
55
+ */
56
+ export declare const EVENT_SCHEMA_VERSION = 1;
57
+ export declare function aiRequestToNrEvent(event: AiRequest, options?: SerializeOptions): NrEventData;
58
+ export declare function aiResponseToNrEvent(event: AiResponse, options?: SerializeOptions): NrEventData;
59
+ export declare function aiMessageToNrEvent(event: AiMessage, options?: SerializeOptions): NrEventData;
60
+ /**
61
+ * dotted-key naming convention for the four newer
62
+ * agent-shaped event types (`AiAgentTaskSummary`, `AiAntiPattern`,
63
+ * `AiAgentMessage`, `AiContextReset`). These serializers emit attributes
64
+ * with a `<namespace>.<field>` shape (e.g. `ai.agent.task_duration_ms`,
65
+ * `ai.antipattern.severity`) alongside top-level non-namespaced fields
66
+ * (e.g. `id`, `timestamp`, `taskName`).
67
+ *
68
+ * The dotted form is the OTel-style and aligns with `gen_ai.*` already in
69
+ * use on AiRequest/AiResponse — operators querying these in NRQL must
70
+ * backtick-quote: `SELECT \`ai.agent.task_duration_ms\` FROM AiAgentTaskSummary`.
71
+ *
72
+ * The mixed top-level + namespaced shape (`taskName` flat, `ai.agent.*`
73
+ * dotted) is intentional: the top-level fields carry record identity that
74
+ * the eventType bucket already groups by (you query `FROM AiAgentTaskSummary`
75
+ * so `eventType` provides the namespace), while the `ai.<area>.*` fields
76
+ * cluster metric-shaped attributes by source area so dashboards can
77
+ * `SELECT keyset() WHERE attribute LIKE 'ai.agent.%'`.
78
+ *
79
+ * This convention is documented here rather than enforced — adding new
80
+ * fields to these event types should follow it for consistency, but the
81
+ * library does not validate the shape at runtime.
82
+ */
83
+ export declare function aiAgentTaskSummaryToNrEvent(event: AiAgentTaskSummary, options?: SerializeOptions): NrEventData;
84
+ export declare function aiAntiPatternToNrEvent(event: AiAntiPattern, options?: SerializeOptions): NrEventData;
85
+ export declare function aiAgentMessageToNrEvent(event: AiAgentMessage, options?: SerializeOptions): NrEventData;
86
+ export declare function aiContextResetToNrEvent(event: AiContextReset, options?: SerializeOptions): NrEventData;
87
+ //# sourceMappingURL=serialize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../../src/shared/events/serialize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,SAAS,EACT,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,cAAc,EACd,WAAW,EACZ,MAAM,YAAY,CAAC;AAsIpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAsED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,WAAW,CAwC5F;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,WAAW,CA8F9F;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,WAAW,CAoB5F;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,kBAAkB,EACzB,OAAO,CAAC,EAAE,gBAAgB,GACzB,WAAW,CAkCb;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,aAAa,EACpB,OAAO,CAAC,EAAE,gBAAgB,GACzB,WAAW,CA0Bb;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,cAAc,EACrB,OAAO,CAAC,EAAE,gBAAgB,GACzB,WAAW,CAoBb;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,cAAc,EACrB,OAAO,CAAC,EAAE,gBAAgB,GACzB,WAAW,CAuBb"}