@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 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Test-only helper for asserting on captured stderr output
3
+ * (CODE_REVIEW §9.20).
4
+ *
5
+ * Across the test suite, the structured logger writes to stderr (which
6
+ * tests stub via `jest.spyOn(console, 'error').mockImplementation(...)`)
7
+ * and assertions then need to materialize the captured frames into a
8
+ * single concatenated string for `.toContain(...)` checks. The pattern
9
+ * `stderrSpy.mock.calls.map(c => c[0]).join('')` was repeated in
10
+ * `pricing.test.ts`, `config.test.ts`, `tokens.test.ts`, and
11
+ * `harvest-scheduler.test.ts` — 25 sites total. This helper exists so
12
+ * each site collapses to `getLogOutput(stderrSpy)`.
13
+ *
14
+ * Lives under `src/__test-utils__/` (Jest's conventional double-underscore
15
+ * directory for test-only support code) so the build-time tsconfig
16
+ * exclude can keep it out of `dist/` — see `tsconfig.json`'s `exclude`
17
+ * list. The file is not a test file (no `.test.ts` suffix) so Jest's
18
+ * `testMatch` will not try to run it.
19
+ */
20
+ /**
21
+ * Minimal shape needed off a `jest.spyOn(console, 'error')` result.
22
+ * Spelled out as a structural interface rather than `jest.SpyInstance`
23
+ * so the helper doesn't depend on the (frequently-renamed) Jest type
24
+ * surface and stays narrow — `mock.calls[i][0]` is the only field we
25
+ * read.
26
+ */
27
+ interface StderrSpyShape {
28
+ readonly mock: {
29
+ readonly calls: ReadonlyArray<ReadonlyArray<unknown>>;
30
+ };
31
+ }
32
+ /**
33
+ * Concatenate every stderr frame captured by `stderrSpy` into a single
34
+ * string suitable for `.toContain(...)` / `.toMatch(...)` assertions.
35
+ *
36
+ * Tests across this package only ever inspect the first argument of
37
+ * each `console.error` call (the log line itself), which matches the
38
+ * runtime behavior of the structured logger — it always emits the JSON
39
+ * payload as the sole call argument.
40
+ *
41
+ * The default separator is `''` (concatenated). Pass `'\n'` (or any
42
+ * other delimiter) when the assertion needs frame boundaries preserved
43
+ * — e.g. `getLogOutput(spy, '\n').split('\n')` to inspect frames
44
+ * individually. Both styles existed in the suite pre-helper and both
45
+ * are kept supported.
46
+ */
47
+ export declare function getLogOutput(stderrSpy: StderrSpyShape, separator?: string): string;
48
+ export {};
49
+ //# sourceMappingURL=log-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-output.d.ts","sourceRoot":"","sources":["../../../src/shared/__test-utils__/log-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;GAMG;AACH,UAAU,cAAc;IACtB,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;KAAE,CAAC;CAC1E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,cAAc,EAAE,SAAS,GAAE,MAAW,GAAG,MAAM,CAEtF"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Test-only helper for asserting on captured stderr output
3
+ * (CODE_REVIEW §9.20).
4
+ *
5
+ * Across the test suite, the structured logger writes to stderr (which
6
+ * tests stub via `jest.spyOn(console, 'error').mockImplementation(...)`)
7
+ * and assertions then need to materialize the captured frames into a
8
+ * single concatenated string for `.toContain(...)` checks. The pattern
9
+ * `stderrSpy.mock.calls.map(c => c[0]).join('')` was repeated in
10
+ * `pricing.test.ts`, `config.test.ts`, `tokens.test.ts`, and
11
+ * `harvest-scheduler.test.ts` — 25 sites total. This helper exists so
12
+ * each site collapses to `getLogOutput(stderrSpy)`.
13
+ *
14
+ * Lives under `src/__test-utils__/` (Jest's conventional double-underscore
15
+ * directory for test-only support code) so the build-time tsconfig
16
+ * exclude can keep it out of `dist/` — see `tsconfig.json`'s `exclude`
17
+ * list. The file is not a test file (no `.test.ts` suffix) so Jest's
18
+ * `testMatch` will not try to run it.
19
+ */
20
+ /**
21
+ * Concatenate every stderr frame captured by `stderrSpy` into a single
22
+ * string suitable for `.toContain(...)` / `.toMatch(...)` assertions.
23
+ *
24
+ * Tests across this package only ever inspect the first argument of
25
+ * each `console.error` call (the log line itself), which matches the
26
+ * runtime behavior of the structured logger — it always emits the JSON
27
+ * payload as the sole call argument.
28
+ *
29
+ * The default separator is `''` (concatenated). Pass `'\n'` (or any
30
+ * other delimiter) when the assertion needs frame boundaries preserved
31
+ * — e.g. `getLogOutput(spy, '\n').split('\n')` to inspect frames
32
+ * individually. Both styles existed in the suite pre-helper and both
33
+ * are kept supported.
34
+ */
35
+ export function getLogOutput(stderrSpy, separator = '') {
36
+ return stderrSpy.mock.calls.map((c) => String(c[0])).join(separator);
37
+ }
38
+ //# sourceMappingURL=log-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-output.js","sourceRoot":"","sources":["../../../src/shared/__test-utils__/log-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAaH;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,YAAY,CAAC,SAAyB,EAAE,YAAoB,EAAE;IAC5E,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACvE,CAAC"}
@@ -0,0 +1,56 @@
1
+ import type { LogLevel } from './logger.js';
2
+ import type { TransportMode } from './transport/types.js';
3
+ export interface AgentConfig {
4
+ readonly licenseKey: string;
5
+ readonly appName: string;
6
+ readonly enabled: boolean;
7
+ readonly recordContent: boolean;
8
+ readonly costTrackingEnabled: boolean;
9
+ readonly qualityTrackingEnabled: boolean;
10
+ readonly conversationTrackingEnabled: boolean;
11
+ readonly thinkingTrackingEnabled: boolean;
12
+ readonly customPricingFile: string | null;
13
+ readonly contentMaxLength: number;
14
+ readonly highSecurity: boolean;
15
+ readonly logLevel: LogLevel;
16
+ readonly collectorHost: string | null;
17
+ readonly accountId: string | null;
18
+ readonly attributionDefaults: Record<string, string> | null;
19
+ readonly otlpEndpoint: string | null;
20
+ readonly otlpHeaders: Readonly<Record<string, string>>;
21
+ readonly transport: TransportMode;
22
+ /**
23
+ * Identifies the consuming client in telemetry identifiers: HTTP
24
+ * `User-Agent` headers and OTel instrumentation scope / logger names.
25
+ * Defaults to `'ai-telemetry'` when not set.
26
+ *
27
+ * Pass `'preflight'` from the Preflight MCP server or `'my-agent'`
28
+ * from the TypeScript agent so telemetry from each consumer is
29
+ * distinguishable in the NR UI.
30
+ */
31
+ readonly clientName: string;
32
+ }
33
+ /**
34
+ * Load and validate agent config from `process.env`, with optional `overrides`
35
+ * winning over the env values. Returns a deep-frozen `AgentConfig` so the
36
+ * result cannot be mutated by accident or by a buggy consumer that holds a
37
+ * shared reference.
38
+ *
39
+ * Precedence: `overrides` (when present per key) > env vars > defaults. The
40
+ * function is stateless from the library's perspective — call it again to
41
+ * pick up env-var changes (12 documents the SIGHUP pattern).
42
+ *
43
+ * License-key validation enforces a printable-ASCII regex (20–128 chars,
44
+ * no whitespace) — strict enough to catch trailing newlines from `cat` pipes
45
+ * and empty strings, lenient enough to accept older keys without an `NRAL`
46
+ * suffix. Never logs the key value.
47
+ *
48
+ * @param overrides Optional partial config that wins over env vars.
49
+ * @returns Deep-frozen `AgentConfig`.
50
+ * @throws If `licenseKey` is missing or malformed.
51
+ */
52
+ export type AgentConfigInput = Omit<Partial<AgentConfig>, 'attributionDefaults'> & {
53
+ attributionDefaults?: Record<string, string | undefined> | null;
54
+ };
55
+ export declare function loadConfig(overrides?: AgentConfigInput): Readonly<AgentConfig>;
56
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/shared/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAmB1D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,2BAA2B,EAAE,OAAO,CAAC;IAC9C,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAC1C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAC5D,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC;;;;;;;;OAQG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAmMD;;;;;;;;;;;;;;;;;;GAkBG;AAMH,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,qBAAqB,CAAC,GAAG;IACjF,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;CACjE,CAAC;AAEF,wBAAgB,UAAU,CAAC,SAAS,CAAC,EAAE,gBAAgB,GAAG,QAAQ,CAAC,WAAW,CAAC,CA+G9E"}
@@ -0,0 +1,290 @@
1
+ import { createLogger } from './logger.js';
2
+ import { DEFAULT_CLIENT_NAME } from './transport/otlp-shared.js';
3
+ /**
4
+ * Strings that count as `true`. The lowercased env
5
+ * value is checked against these literal sets — any other value falls
6
+ * through to the default.
7
+ */
8
+ const ENV_TRUTHY = new Set(['true', '1', 'yes', 'on']);
9
+ const ENV_FALSY = new Set(['false', '0', 'no', 'off']);
10
+ /**
11
+ * Module-level config logger. Per 5 the underlying
12
+ * `createLogger` now resolves the minimum log level per-call via the cached
13
+ * `getMinLevel()`, so a runtime env mutation followed by `__resetLogLevelCache()`
14
+ * propagates here without re-constructing this logger.
15
+ */
16
+ const configLogger = createLogger('config');
17
+ /**
18
+ * Parse a boolean environment variable. Accepts `true|1|yes|on` as truthy
19
+ * and `false|0|no|off` as falsy (case-insensitive, 8). Any
20
+ * other value (or missing env var) returns the default. Unknown values emit
21
+ * a debug log so misconfigurations are diagnosable.
22
+ */
23
+ function envBool(key, defaultValue) {
24
+ const raw = process.env[key];
25
+ if (raw === undefined)
26
+ return defaultValue;
27
+ const val = raw.toLowerCase().trim();
28
+ if (ENV_TRUTHY.has(val))
29
+ return true;
30
+ if (ENV_FALSY.has(val))
31
+ return false;
32
+ configLogger.debug(`${key}: unrecognized boolean value, falling back to default. Accepted: true|1|yes|on or false|0|no|off`, { value: raw, defaultValue });
33
+ return defaultValue;
34
+ }
35
+ /**
36
+ * Parse an integer environment variable. Out-of-bound values are clamped to
37
+ * the bound and emit a debug log so the override is observable
38
+ *.
39
+ */
40
+ function envInt(key, defaultValue, bounds) {
41
+ const val = process.env[key];
42
+ if (val === undefined)
43
+ return defaultValue;
44
+ // Reject values with trailing garbage (e.g. '4kb', '1e3') that parseInt
45
+ // would accept silently; fall back to the default with a diagnostic log (§C2).
46
+ if (!/^-?\d+$/.test(val.trim())) {
47
+ configLogger.debug(`${key}: not a valid integer, using default`, { value: val, defaultValue });
48
+ return defaultValue;
49
+ }
50
+ const parsed = parseInt(val, 10);
51
+ if (Number.isNaN(parsed))
52
+ return defaultValue;
53
+ if (bounds?.min !== undefined && parsed < bounds.min) {
54
+ configLogger.debug(`${key}: value clamped to min`, { requested: parsed, min: bounds.min });
55
+ return bounds.min;
56
+ }
57
+ if (bounds?.max !== undefined && parsed > bounds.max) {
58
+ configLogger.debug(`${key}: value clamped to max`, { requested: parsed, max: bounds.max });
59
+ return bounds.max;
60
+ }
61
+ return parsed;
62
+ }
63
+ function envLogLevel(key, defaultValue) {
64
+ const val = process.env[key]?.toLowerCase().trim();
65
+ if (val === 'debug' || val === 'info' || val === 'warn' || val === 'error')
66
+ return val;
67
+ if (val !== undefined) {
68
+ // Use warn (not debug) so the diagnostic is visible even at the fallback
69
+ // 'info' log level — an invalid log level is always worth surfacing.
70
+ configLogger.warn(`${key}: unrecognized log level, using default`, {
71
+ value: val,
72
+ defaultValue,
73
+ });
74
+ }
75
+ return defaultValue;
76
+ }
77
+ // Returns the env var value, or null if the var is absent or empty string.
78
+ // `export VAR=` in a shell produces '' — treat that the same as unset (§C3).
79
+ function envOrNull(key) {
80
+ const v = process.env[key];
81
+ return v === undefined || v === '' ? null : v;
82
+ }
83
+ // Normalize a string override value: undefined passes through (fall back to
84
+ // env); empty string coerces to null; any other value (including null) wins
85
+ // over the env var. Mirrors envOrNull for the override path (§CFG3).
86
+ function overrideString(v, envFn) {
87
+ if (v === undefined)
88
+ return envFn();
89
+ return v === '' ? null : v;
90
+ }
91
+ /**
92
+ * Parse the transport-mode env var. Accepts the same
93
+ * values as the `transport` field on `AgentConfig`. Unrecognized values
94
+ * fall back to the default and emit a debug log so misconfigurations are
95
+ * diagnosable.
96
+ */
97
+ function envTransport(key, defaultValue) {
98
+ const raw = process.env[key];
99
+ if (raw === undefined)
100
+ return defaultValue;
101
+ const val = raw.toLowerCase().trim();
102
+ if (val === 'nr-events-api' || val === 'otlp' || val === 'both')
103
+ return val;
104
+ configLogger.debug(`${key}: unrecognized transport, falling back to default. Accepted: nr-events-api | otlp | both`, { value: raw, defaultValue });
105
+ return defaultValue;
106
+ }
107
+ function buildAttributionDefaults(overrideDefaults) {
108
+ const result = {};
109
+ // Env-var defaults for the four standard attribution fields.
110
+ //
111
+ // 11: empty-string env values are intentionally treated as
112
+ // "not set" via the truthiness check below. NR's events API rejects empty
113
+ // string attribute values, so a deliberately-empty env var (e.g. to "clear"
114
+ // a higher-precedence default) would only produce a 400 at ingest time —
115
+ // not the desired clear semantics. Consumers wanting to clear a default
116
+ // should pass `attributionDefaults: { feature: undefined }` (or omit the
117
+ // key entirely from overrides), not set the env var to "".
118
+ const envFeature = process.env.NEW_RELIC_AI_ATTRIBUTION_FEATURE;
119
+ const envTeam = process.env.NEW_RELIC_AI_ATTRIBUTION_TEAM;
120
+ const envUser = process.env.NEW_RELIC_AI_ATTRIBUTION_USER;
121
+ const envEnvironment = process.env.NEW_RELIC_AI_ATTRIBUTION_ENVIRONMENT;
122
+ // Truthiness check: exclude undefined (not set) and '' (empty — NR Events
123
+ // API rejects empty-string attributes, §3.3.11). Do NOT exclude '0' or
124
+ // 'false' — those are valid attribution tag values (§CFG4).
125
+ if (envFeature !== undefined && envFeature !== '')
126
+ result.feature = envFeature;
127
+ if (envTeam !== undefined && envTeam !== '')
128
+ result.team = envTeam;
129
+ if (envUser !== undefined && envUser !== '')
130
+ result.user = envUser;
131
+ if (envEnvironment !== undefined && envEnvironment !== '')
132
+ result.environment = envEnvironment;
133
+ // Merge override defaults (they win over env vars).
134
+ // Passing `undefined` as a value explicitly removes the key so that
135
+ // `attributionDefaults: { feature: undefined }` clears a prior env-set
136
+ // default, matching the documented "clear" pattern (§C1).
137
+ if (overrideDefaults) {
138
+ for (const [k, v] of Object.entries(overrideDefaults)) {
139
+ if (v === undefined) {
140
+ delete result[k];
141
+ }
142
+ else {
143
+ result[k] = v;
144
+ }
145
+ }
146
+ }
147
+ return Object.keys(result).length > 0 ? result : null;
148
+ }
149
+ // Per OTel spec for OTEL_EXPORTER_OTLP_HEADERS:
150
+ // - Comma-separated list of `key=value` pairs.
151
+ // - `=` and `,` inside a key OR value must be percent-encoded as `%3D` and `%2C`.
152
+ // - Whitespace around the `=` is stripped.
153
+ // - Only the FIRST `=` separates key from value (so a value can legitimately
154
+ // contain `=` if it appears later in the substring after percent-decoding).
155
+ // - Keys and values are percent-decoded after splitting.
156
+ function parseOtlpHeaders(headerString) {
157
+ if (!headerString)
158
+ return {};
159
+ const result = {};
160
+ for (const pair of headerString.split(',')) {
161
+ const eqIdx = pair.indexOf('=');
162
+ if (eqIdx <= 0)
163
+ continue; // missing '=' or empty key — skip
164
+ // OTel spec: trim key whitespace; do NOT trim value (§CF1).
165
+ const rawKey = pair.slice(0, eqIdx).trim();
166
+ const rawValue = pair.slice(eqIdx + 1);
167
+ if (!rawKey)
168
+ continue;
169
+ let key;
170
+ let value;
171
+ try {
172
+ key = decodeURIComponent(rawKey);
173
+ }
174
+ catch {
175
+ // §11.4: warn so operators can diagnose a misconfigured auth header that
176
+ // will be forwarded malformed and likely rejected by the OTLP collector.
177
+ configLogger.warn('OTEL_EXPORTER_OTLP_HEADERS: malformed percent-encoding in key — using raw string', { rawKey });
178
+ key = rawKey;
179
+ }
180
+ try {
181
+ value = decodeURIComponent(rawValue);
182
+ }
183
+ catch {
184
+ // §11.4: same as key path — warn so a broken Authorization value is visible.
185
+ configLogger.warn('OTEL_EXPORTER_OTLP_HEADERS: malformed percent-encoding in value — using raw string', { rawKey });
186
+ value = rawValue;
187
+ }
188
+ result[key] = value;
189
+ }
190
+ return result;
191
+ }
192
+ // License keys must be printable ASCII (no whitespace, no control chars)
193
+ // and a plausible length. We're deliberately lenient on the exact format
194
+ // (no NRAL-suffix enforcement) to avoid false-rejecting older keys, but
195
+ // strict enough to catch common mistakes: trailing newlines from `cat`
196
+ // pipes, embedded CR/LF (would inject HTTP headers), or empty strings.
197
+ const LICENSE_KEY_RE = /^[\x21-\x7E]{20,128}$/;
198
+ export function loadConfig(overrides) {
199
+ const rawLicenseKey = overrides?.licenseKey ?? process.env.NEW_RELIC_LICENSE_KEY;
200
+ if (!rawLicenseKey) {
201
+ throw new Error('Missing required configuration: NEW_RELIC_LICENSE_KEY. ' +
202
+ 'Set the NEW_RELIC_LICENSE_KEY environment variable or pass licenseKey in options.');
203
+ }
204
+ // Strip leading/trailing whitespace before validating — guards against
205
+ // accidental newlines from `cat key.txt`-style sourcing.
206
+ const licenseKey = rawLicenseKey.trim();
207
+ if (!LICENSE_KEY_RE.test(licenseKey)) {
208
+ throw new Error('Invalid configuration: NEW_RELIC_LICENSE_KEY must be 20-128 printable ASCII ' +
209
+ 'characters with no whitespace. (Note: never log the key value.)');
210
+ }
211
+ const appName = overrides?.appName ?? process.env.NEW_RELIC_APP_NAME;
212
+ if (!appName) {
213
+ throw new Error('Missing required configuration: NEW_RELIC_APP_NAME. ' +
214
+ 'Set the NEW_RELIC_APP_NAME environment variable or pass appName in options.');
215
+ }
216
+ // Reject control characters (CR/LF etc.) to prevent header injection if
217
+ // appName is ever used in an HTTP context, and cap length at 255 chars (§CF2).
218
+ if (/[\r\n\x00-\x1f]/.test(appName) || appName.length > 255) {
219
+ throw new Error('Invalid configuration: NEW_RELIC_APP_NAME must be 1-255 characters with no control characters.');
220
+ }
221
+ // Use explicit undefined-check so `accountId: null` in overrides wins over the
222
+ // env var — `??` would treat null as "not provided" and fall through to the
223
+ // env var, silently ignoring an explicit null override (§CFG1).
224
+ const accountId = overrides?.accountId !== undefined
225
+ ? overrides.accountId
226
+ : (process.env.NEW_RELIC_ACCOUNT_ID ?? null);
227
+ if (accountId !== null && !/^[1-9]\d*$/.test(accountId)) {
228
+ // 6: positive-integer-only, no leading zeros, any length.
229
+ // - Removes the prior 12-digit cap so consumers don't have to release a
230
+ // new version when NR issues 13+ digit account IDs server-side.
231
+ // - Rejects '0' / leading-zero strings (e.g. '07' would have passed the
232
+ // old `/^\d{1,12}$/` regex even though no NR account uses leading zeros).
233
+ // The upper bound is enforced server-side by the ingest API.
234
+ throw new Error('Invalid configuration: NEW_RELIC_ACCOUNT_ID must be a positive decimal integer (no leading zeros). ' +
235
+ `Received: "${accountId}"`);
236
+ }
237
+ // F3: hoist `transport` resolution so we can fail fast when
238
+ // accountId is missing for transports that need it. Without this check, the
239
+ // NR Events API URL becomes ".../accounts/null/events", which NR returns 404
240
+ // on; the harvest scheduler then silently retry-loops every batch until the
241
+ // retry buffer overflows. Surface the misconfiguration at startup instead.
242
+ const transport = overrides?.transport ?? envTransport('NEW_RELIC_AI_TRANSPORT', 'nr-events-api');
243
+ if ((transport === 'nr-events-api' || transport === 'both') && accountId === null) {
244
+ throw new Error(`Missing required configuration: NEW_RELIC_ACCOUNT_ID. ` +
245
+ `Required when transport is "${transport}" (NR Events API URLs include the account ID in the path). ` +
246
+ `Set the NEW_RELIC_ACCOUNT_ID environment variable or pass accountId in options. ` +
247
+ `Only the "otlp" transport mode can omit accountId.`);
248
+ }
249
+ const highSecurity = overrides?.highSecurity ?? envBool('NEW_RELIC_AI_HIGH_SECURITY', false);
250
+ const recordContent = highSecurity
251
+ ? false
252
+ : (overrides?.recordContent ?? envBool('NEW_RELIC_AI_RECORD_CONTENT', false));
253
+ // Build global attribution defaults from env vars and/or overrides
254
+ const attributionDefaults = buildAttributionDefaults(overrides?.attributionDefaults);
255
+ const config = {
256
+ licenseKey,
257
+ appName,
258
+ enabled: overrides?.enabled ?? envBool('NEW_RELIC_AI_ENABLED', true),
259
+ recordContent,
260
+ costTrackingEnabled: overrides?.costTrackingEnabled ?? envBool('NEW_RELIC_AI_COST_TRACKING', true),
261
+ qualityTrackingEnabled: overrides?.qualityTrackingEnabled ?? envBool('NEW_RELIC_AI_QUALITY_TRACKING', true),
262
+ conversationTrackingEnabled: overrides?.conversationTrackingEnabled ?? envBool('NEW_RELIC_AI_CONVERSATION_TRACKING', true),
263
+ thinkingTrackingEnabled: overrides?.thinkingTrackingEnabled ?? envBool('NEW_RELIC_AI_THINKING_TRACKING', true),
264
+ customPricingFile: overrideString(overrides?.customPricingFile, () => envOrNull('NEW_RELIC_AI_CUSTOM_PRICING_FILE')),
265
+ contentMaxLength: overrides?.contentMaxLength ??
266
+ envInt('NEW_RELIC_AI_CONTENT_MAX_LENGTH', 4096, { min: 1, max: 1_048_576 }),
267
+ highSecurity,
268
+ logLevel: overrides?.logLevel ?? envLogLevel('NEW_RELIC_AI_LOG_LEVEL', 'info'),
269
+ collectorHost: overrideString(overrides?.collectorHost, () => envOrNull('NEW_RELIC_HOST')),
270
+ accountId,
271
+ attributionDefaults,
272
+ otlpEndpoint: overrideString(overrides?.otlpEndpoint, () => envOrNull('OTEL_EXPORTER_OTLP_ENDPOINT')),
273
+ otlpHeaders: overrides?.otlpHeaders ?? parseOtlpHeaders(process.env.OTEL_EXPORTER_OTLP_HEADERS),
274
+ transport,
275
+ clientName: overrides?.clientName || process.env.NEW_RELIC_AI_CLIENT_NAME || DEFAULT_CLIENT_NAME,
276
+ };
277
+ return deepFreeze(config);
278
+ }
279
+ function deepFreeze(obj) {
280
+ if (obj && typeof obj === 'object' && !Object.isFrozen(obj)) {
281
+ for (const value of Object.values(obj)) {
282
+ if (value && typeof value === 'object') {
283
+ deepFreeze(value);
284
+ }
285
+ }
286
+ Object.freeze(obj);
287
+ }
288
+ return obj;
289
+ }
290
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/shared/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ import type { AiProvider } from './events/types.js';
2
+ /**
3
+ * Canonical error classifications produced by {@link classifyError} and
4
+ * {@link classifyErrorDetailed}.
5
+ *
6
+ * Implemented as a `const` object plus derived string-literal union
7
+ * rather than a TypeScript `enum`, so that:
8
+ * - runtime usage (`AiErrorClassification.RATE_LIMIT`) keeps working
9
+ * identically for existing call sites;
10
+ * - the type is a string-literal union, matching every other
11
+ * enum-like type in this package (`AiProvider`, `AiRequestMethod`,
12
+ * `LogLevel`, `TransportMode`, etc.) — one consistent style;
13
+ * - bundlers can tree-shake unused members (TS enums emit a runtime
14
+ * object even when none of its members are referenced);
15
+ * - the wire-format strings (`'RATE_LIMIT'`, `'OVERLOADED'`, …) are
16
+ * usable directly as values without going through an enum lookup,
17
+ * which simplifies serialization paths.
18
+ */
19
+ export declare const AiErrorClassification: {
20
+ readonly RATE_LIMIT: "RATE_LIMIT";
21
+ readonly OVERLOADED: "OVERLOADED";
22
+ readonly CONTENT_POLICY: "CONTENT_POLICY";
23
+ readonly CONTEXT_LENGTH_EXCEEDED: "CONTEXT_LENGTH_EXCEEDED";
24
+ readonly AUTHENTICATION: "AUTHENTICATION";
25
+ readonly NOT_FOUND: "NOT_FOUND";
26
+ readonly TIMEOUT: "TIMEOUT";
27
+ readonly SERVER_ERROR: "SERVER_ERROR";
28
+ readonly NETWORK_ERROR: "NETWORK_ERROR";
29
+ readonly UNKNOWN: "UNKNOWN";
30
+ };
31
+ export type AiErrorClassification = (typeof AiErrorClassification)[keyof typeof AiErrorClassification];
32
+ /**
33
+ * Classifications that `isRetryable()` reports as retryable. Exported as a
34
+ * `ReadonlySet` so consumers can build their own retry policy on top of the
35
+ * canonical list (e.g. layered backoff per category, custom routing) without
36
+ * having to re-derive it. Mutation is rejected at the type level.
37
+ */
38
+ export declare const RETRYABLE: ReadonlySet<AiErrorClassification>;
39
+ /**
40
+ * Classify an arbitrary `unknown` error from a provider SDK or `fetch` into
41
+ * one of the canonical {@link AiErrorClassification} categories. The
42
+ * decision routes through HTTP status (when present), Node `code` for
43
+ * network/timeout cases, and provider-specific 400 disambiguation
44
+ * — content policy vs. context length vs. generic.
45
+ *
46
+ * Designed for retry-loop consumption — see {@link isRetryable} and
47
+ * {@link RETRYABLE} for the policy applied downstream. For UI / logging
48
+ * surfaces that need the original message + status alongside the
49
+ * classification, use {@link classifyErrorDetailed} instead.
50
+ *
51
+ * @param error The thrown value (Error, plain object, or anything else).
52
+ * @param provider The provider that produced the error — affects 400
53
+ * disambiguation and Anthropic-specific 529 (OVERLOADED) handling.
54
+ */
55
+ export declare function classifyError(error: unknown, provider: AiProvider): AiErrorClassification;
56
+ /**
57
+ * Whether `classification` is one of the categories the library's retry
58
+ * loop will re-attempt: `RATE_LIMIT`, `OVERLOADED`, `TIMEOUT`,
59
+ * `SERVER_ERROR`, `NETWORK_ERROR`. Backed by the {@link RETRYABLE} set.
60
+ * Use this when implementing a custom retry policy on top of
61
+ * {@link classifyError}.
62
+ */
63
+ export declare function isRetryable(classification: AiErrorClassification): boolean;
64
+ export interface RateLimitInfo {
65
+ readonly tokensRemaining: number | null;
66
+ readonly requestsRemaining: number | null;
67
+ readonly tokensReset: string | null;
68
+ readonly requestsReset: string | null;
69
+ }
70
+ /**
71
+ * Extract rate-limit metadata from a provider error's `headers` field.
72
+ *
73
+ * Returns `null` when the error carries no `headers` at all,
74
+ * letting callers distinguish "no headers in the response" from "headers
75
+ * present but no rate-limit headers parsed". When `headers` is present but
76
+ * none of the recognized rate-limit headers parse, returns a `RateLimitInfo`
77
+ * with all four fields null.
78
+ *
79
+ * Provider coverage: Anthropic, OpenAI, Gemini, Mistral. Bedrock and Cohere
80
+ * intentionally return all-null — Bedrock exposes throttling in the
81
+ * ThrottlingException body rather than response headers; Cohere has no
82
+ * documented rate-limit headers for their Chat v2 API.
83
+ */
84
+ export declare function extractRateLimitHeaders(error: unknown): RateLimitInfo | null;
85
+ /**
86
+ * Truncate `message` to `maxLength` chars (default 1024), suffixing `...`
87
+ * when truncation occurs. Useful for keeping provider error messages within
88
+ * NR's per-attribute 4096-byte limit before they're logged or attached to
89
+ * events.
90
+ *
91
+ * The minimum effective `maxLength` is 4 — a shorter cap is silently
92
+ * clamped to 4 so the result is always at least `'X...'` for some single
93
+ * character of the original message.
94
+ *
95
+ * Examples:
96
+ * ```
97
+ * truncateErrorMessage('hello world', 8) // => 'hello...'
98
+ * truncateErrorMessage('hi', 8) // => 'hi' (already short)
99
+ * truncateErrorMessage('hello', 3) // => 'h...' (clamp to 4)
100
+ * truncateErrorMessage('hello', 0) // => 'h...' (clamp to 4)
101
+ * ```
102
+ *
103
+ * @param message The message to truncate.
104
+ * @param maxLength Maximum length of the returned string. Values < 4 are
105
+ * clamped to 4. Default is 1024.
106
+ */
107
+ export declare function truncateErrorMessage(message: string, maxLength?: number): string;
108
+ /**
109
+ * Rich classification result that pairs the {@link AiErrorClassification}
110
+ * enum value with the original error context — message, HTTP status, and
111
+ * Node system code (15, §E6).
112
+ *
113
+ * `code` is the Node system-level error code (e.g. `'ECONNREFUSED'`,
114
+ * `'ETIMEDOUT'`), extracted by walking the cause chain. It is NOT the
115
+ * provider body-level typed code (e.g. `'content_filter'`,
116
+ * `'context_length_exceeded'`) — those only appear inside the 400-body
117
+ * handling of `classifyError` and are not currently surfaced here.
118
+ */
119
+ export interface ClassifiedError {
120
+ readonly classification: AiErrorClassification;
121
+ readonly originalMessage: string | null;
122
+ readonly status: number | null;
123
+ /** Node system code (e.g. `'ECONNREFUSED'`), or null. Not the provider body error code. */
124
+ readonly code: string | null;
125
+ }
126
+ /**
127
+ * Same classification logic as {@link classifyError}, but returns a
128
+ * {@link ClassifiedError} carrying the original message, HTTP status, and
129
+ * provider error code alongside the enum value. Useful when the caller
130
+ * wants to log a richer line ("Rate limit hit: ...message...") or
131
+ * propagate the original message to a UI surface.
132
+ *
133
+ * The retry path in `http-client.ts` does not currently consume this —
134
+ * its decision is purely "is this retryable?". This is exposed as a
135
+ * separate function so existing callers of `classifyError` continue to
136
+ * work unchanged.
137
+ */
138
+ export declare function classifyErrorDetailed(error: unknown, provider: AiProvider): ClassifiedError;
139
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/shared/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;CAWxB,CAAC;AACX,MAAM,MAAM,qBAAqB,GAC/B,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,OAAO,qBAAqB,CAAC,CAAC;AAkBrE;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,WAAW,CAAC,qBAAqB,CAMvD,CAAC;AAsBH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,GAAG,qBAAqB,CAsFzF;AA4DD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,cAAc,EAAE,qBAAqB,GAAG,OAAO,CAE1E;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AA8ED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CA8B5E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,MAAM,CAS9E;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;IAC/C,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,2FAA2F;IAC3F,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,GAAG,eAAe,CAc3F"}