@newrelic/preflight 0.0.1-pre.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +860 -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 +103 -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 +125 -1
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Resolve the Claude Code session_id for the running MCP process.
3
+ *
4
+ * Two sources, in order:
5
+ * 1. `CLAUDE_JOB_DIR` env var → read `<dir>/state.json`, regex-extract the
6
+ * session UUID from the `linkScanPath` field's filename. Instant; used
7
+ * by background-job MCPs.
8
+ * 2. PPID breadcrumb at `<storage>/session-by-ppid/<process.ppid>.txt` —
9
+ * written by the hook collector on every tool call. Polled at exponential
10
+ * backoff: 100ms, 200ms, 500ms, 1s, 2s, then steady at 2s. No hard
11
+ * timeout; logs a single WARN at 60s if still unresolved.
12
+ *
13
+ * The MCP must never fabricate its own session_id. If neither path resolves,
14
+ * tool handlers should report "session_id not yet resolved" rather than make
15
+ * one up.
16
+ */
17
+ import { existsSync, readFileSync } from 'node:fs';
18
+ import { resolve, basename } from 'node:path';
19
+ import { homedir } from 'node:os';
20
+ import { createLogger } from '../shared/index.js';
21
+ const logger = createLogger('session-resolver');
22
+ const SESSION_ID_RE = /^[a-zA-Z0-9_-]{1,128}$/;
23
+ const DEFAULT_STORAGE_DIR = resolve(homedir(), '.newrelic-preflight');
24
+ const POLL_SCHEDULE_MS = [100, 200, 500, 1000, 2000];
25
+ const STEADY_POLL_MS = 2000;
26
+ const WARN_AFTER_MS = 60_000;
27
+ /**
28
+ * Try to resolve the session_id synchronously from `CLAUDE_JOB_DIR/state.json`.
29
+ * Returns the validated session_id or null.
30
+ */
31
+ export function resolveFromJobDir(claudeJobDir) {
32
+ if (!claudeJobDir || typeof claudeJobDir !== 'string')
33
+ return null;
34
+ const statePath = resolve(claudeJobDir, 'state.json');
35
+ if (!existsSync(statePath))
36
+ return null;
37
+ let raw;
38
+ try {
39
+ raw = readFileSync(statePath, 'utf-8');
40
+ }
41
+ catch (err) {
42
+ logger.debug('CLAUDE_JOB_DIR/state.json unreadable', { error: String(err) });
43
+ return null;
44
+ }
45
+ let parsed;
46
+ try {
47
+ parsed = JSON.parse(raw);
48
+ }
49
+ catch (err) {
50
+ logger.debug('CLAUDE_JOB_DIR/state.json invalid JSON', { error: String(err) });
51
+ return null;
52
+ }
53
+ if (parsed === null || typeof parsed !== 'object')
54
+ return null;
55
+ const linkScanPath = parsed.linkScanPath;
56
+ if (typeof linkScanPath !== 'string' || linkScanPath.length === 0)
57
+ return null;
58
+ // The session UUID is the basename minus its extension. Validate against
59
+ // the same character class used everywhere else so we never accept a
60
+ // path-traversing value.
61
+ const file = basename(linkScanPath);
62
+ const dot = file.lastIndexOf('.');
63
+ const sid = dot > 0 ? file.slice(0, dot) : file;
64
+ if (!SESSION_ID_RE.test(sid))
65
+ return null;
66
+ return sid;
67
+ }
68
+ /**
69
+ * Try to resolve the session_id synchronously from the PPID breadcrumb file.
70
+ * Returns the validated session_id or null.
71
+ */
72
+ export function resolveFromBreadcrumb(storagePath, ppid) {
73
+ if (typeof ppid !== 'number' || ppid <= 0)
74
+ return null;
75
+ const breadcrumbPath = resolve(storagePath, 'session-by-ppid', `${ppid}.txt`);
76
+ if (!existsSync(breadcrumbPath))
77
+ return null;
78
+ let raw;
79
+ try {
80
+ raw = readFileSync(breadcrumbPath, 'utf-8');
81
+ }
82
+ catch (err) {
83
+ logger.debug('Breadcrumb file unreadable', { error: String(err) });
84
+ return null;
85
+ }
86
+ const sid = raw.trim();
87
+ if (!SESSION_ID_RE.test(sid))
88
+ return null;
89
+ return sid;
90
+ }
91
+ /**
92
+ * Returns the next poll delay for attempt index `i` (0-based).
93
+ * Schedule: 100ms, 200ms, 500ms, 1s, 2s, then steady 2s.
94
+ */
95
+ export function nextDelayMs(attempt) {
96
+ if (attempt < POLL_SCHEDULE_MS.length)
97
+ return POLL_SCHEDULE_MS[attempt];
98
+ return STEADY_POLL_MS;
99
+ }
100
+ /**
101
+ * Resolve the Claude Code session_id, polling forever if needed.
102
+ *
103
+ * - First tries `CLAUDE_JOB_DIR` (synchronous, free).
104
+ * - Falls back to the PPID breadcrumb with exponential backoff polling.
105
+ * - Resolves to a validated session_id string when found. Never resolves to
106
+ * null; the only way out is success, the optional `signal`, or the caller
107
+ * stopping the surrounding process.
108
+ * - Logs a single WARN at 60s if still unresolved.
109
+ *
110
+ * Pass an `AbortSignal` to allow shutdown to break the loop.
111
+ */
112
+ export async function resolveSessionId(options = {}) {
113
+ const claudeJobDir = options.claudeJobDir !== undefined
114
+ ? options.claudeJobDir
115
+ : (process.env.CLAUDE_JOB_DIR ?? null);
116
+ const ppid = options.ppid ?? process.ppid;
117
+ const storagePath = options.storagePath ?? DEFAULT_STORAGE_DIR;
118
+ // Fast path: CLAUDE_JOB_DIR is set and contains a usable state.json. Used
119
+ // by background-job MCPs where the parent doesn't fire hooks.
120
+ const fromJobDir = resolveFromJobDir(claudeJobDir);
121
+ if (fromJobDir) {
122
+ logger.info('Resolved session_id from CLAUDE_JOB_DIR', { sessionId: fromJobDir });
123
+ return fromJobDir;
124
+ }
125
+ // Synchronous attempt before we wait — common case is the breadcrumb is
126
+ // already on disk because the user already typed at least one message.
127
+ const immediate = resolveFromBreadcrumb(storagePath, ppid);
128
+ if (immediate) {
129
+ logger.info('Resolved session_id from breadcrumb (immediate)', { sessionId: immediate });
130
+ return immediate;
131
+ }
132
+ const startTime = Date.now();
133
+ let warnedAt60s = false;
134
+ let attempt = 0;
135
+ return new Promise((resolvePromise, rejectPromise) => {
136
+ const onAbort = () => {
137
+ rejectPromise(new Error('session resolution aborted'));
138
+ };
139
+ if (options.signal) {
140
+ if (options.signal.aborted) {
141
+ onAbort();
142
+ return;
143
+ }
144
+ options.signal.addEventListener('abort', onAbort, { once: true });
145
+ // Re-check after registering in case the signal fired in the gap
146
+ // between the earlier aborted check and addEventListener.
147
+ if (options.signal.aborted) {
148
+ onAbort();
149
+ return;
150
+ }
151
+ }
152
+ const tick = () => {
153
+ if (options.signal?.aborted) {
154
+ options.signal.removeEventListener('abort', onAbort);
155
+ return;
156
+ }
157
+ const sid = resolveFromBreadcrumb(storagePath, ppid);
158
+ if (sid) {
159
+ const elapsed = Date.now() - startTime;
160
+ logger.info('Resolved session_id from breadcrumb', { sessionId: sid, elapsedMs: elapsed });
161
+ if (options.signal)
162
+ options.signal.removeEventListener('abort', onAbort);
163
+ resolvePromise(sid);
164
+ return;
165
+ }
166
+ const elapsed = Date.now() - startTime;
167
+ if (!warnedAt60s && elapsed >= WARN_AFTER_MS && !options.suppressWarn) {
168
+ warnedAt60s = true;
169
+ logger.warn('session_id unresolved after 60s — breadcrumb missing; check that hook collector is installed and writing.');
170
+ }
171
+ const delay = nextDelayMs(attempt++);
172
+ const handle = setTimeout(tick, delay);
173
+ // Don't keep the event loop alive on this timer alone — Ctrl+C / stdin
174
+ // close should be able to terminate the MCP without explicitly
175
+ // cancelling resolution.
176
+ handle.unref?.();
177
+ };
178
+ const delay = nextDelayMs(attempt++);
179
+ const handle = setTimeout(tick, delay);
180
+ handle.unref?.();
181
+ });
182
+ }
183
+ /**
184
+ * Returns true for session IDs that are MCP-internal synthetic identifiers
185
+ * (not real Claude Code session IDs). These should be hidden from user-facing
186
+ * surfaces such as the dashboard session list and audit trail.
187
+ *
188
+ * Single source of truth: kept here alongside the other session-ID logic so
189
+ * that adding a new synthetic prefix only requires one change.
190
+ */
191
+ export function isSyntheticSessionId(id) {
192
+ if (!id)
193
+ return false;
194
+ return id.startsWith('local-') || id.startsWith('proxy-');
195
+ }
196
+ //# sourceMappingURL=session-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-resolver.js","sourceRoot":"","sources":["../../src/hooks/session-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Tool-specific field parsers for Claude Code hook events.
3
+ *
4
+ * Each parser extracts structured metadata from a tool's `tool_input` and
5
+ * `tool_response` objects. The dispatcher routes to the appropriate parser
6
+ * based on tool name. Unknown tools return an empty record.
7
+ *
8
+ * All parsers are defensive — null/undefined inputs return {}, and any
9
+ * parsing error is caught and returns {}.
10
+ */
11
+ type ToolFields = Record<string, string | number | boolean>;
12
+ /**
13
+ * Extract tool-specific structured fields from a tool's input and output.
14
+ * Returns a flat record of fields to spread into the ToolCallRecord.
15
+ * Unknown tools or parsing errors return {}.
16
+ */
17
+ export declare function parseToolSpecificFields(toolName: string, input: unknown, output: unknown): ToolFields;
18
+ export {};
19
+ //# sourceMappingURL=tool-parsers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-parsers.d.ts","sourceRoot":"","sources":["../../src/hooks/tool-parsers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AA+M5D;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,OAAO,GACd,UAAU,CA2BZ"}
@@ -0,0 +1,260 @@
1
+ /**
2
+ * Tool-specific field parsers for Claude Code hook events.
3
+ *
4
+ * Each parser extracts structured metadata from a tool's `tool_input` and
5
+ * `tool_response` objects. The dispatcher routes to the appropriate parser
6
+ * based on tool name. Unknown tools return an empty record.
7
+ *
8
+ * All parsers are defensive — null/undefined inputs return {}, and any
9
+ * parsing error is caught and returns {}.
10
+ */
11
+ import { classifyBash } from './bash-classifier.js';
12
+ // ---------------------------------------------------------------------------
13
+ // Helpers
14
+ // ---------------------------------------------------------------------------
15
+ function countLines(text) {
16
+ if (text === '')
17
+ return 0;
18
+ return (text.match(/\n/g) || []).length + 1;
19
+ }
20
+ // ---------------------------------------------------------------------------
21
+ // Bash command classification heuristics
22
+ // ---------------------------------------------------------------------------
23
+ const TEST_COMMAND_RE = /\b(jest|vitest|mocha|pytest|go\s+test|npm\s+test|npm\s+run\s+test|npx\s+jest|npx\s+vitest|cargo\s+test|bun\s+test|bun\s+run\s+test|pnpm\s+test|pnpm\s+run\s+test|yarn\s+test)\b/i;
24
+ const BUILD_COMMAND_RE = /\b(tsc|npm\s+run\s+build|make\b|cargo\s+build|go\s+build|webpack|vite\s+build)\b/i;
25
+ const LINT_COMMAND_RE = /\b(eslint|prettier|pylint|golangci-lint|rubocop|clippy|biome\s+(check|lint))\b/i;
26
+ // ---------------------------------------------------------------------------
27
+ // Per-tool parsers
28
+ // ---------------------------------------------------------------------------
29
+ function parseRead(input) {
30
+ const fields = {};
31
+ if (typeof input.file_path === 'string')
32
+ fields.filePath = input.file_path;
33
+ if (typeof input.offset === 'number')
34
+ fields.lineOffset = input.offset;
35
+ if (typeof input.limit === 'number')
36
+ fields.lineLimit = input.limit;
37
+ return fields;
38
+ }
39
+ function parseWrite(input) {
40
+ const fields = {};
41
+ if (typeof input.file_path === 'string')
42
+ fields.filePath = input.file_path;
43
+ if (typeof input.contentLength === 'number') {
44
+ fields.contentLength = input.contentLength;
45
+ if (typeof input.lineCount === 'number')
46
+ fields.lineCount = input.lineCount;
47
+ }
48
+ else if (typeof input.content === 'string') {
49
+ fields.contentLength = input.content.length;
50
+ fields.lineCount = countLines(input.content);
51
+ }
52
+ return fields;
53
+ }
54
+ function parseEdit(input) {
55
+ const fields = {};
56
+ if (typeof input.file_path === 'string')
57
+ fields.filePath = input.file_path;
58
+ if (typeof input.oldStringLength === 'number') {
59
+ fields.oldStringLength = input.oldStringLength;
60
+ if (typeof input.oldLineCount === 'number')
61
+ fields.oldLineCount = input.oldLineCount;
62
+ }
63
+ else if (typeof input.old_string === 'string') {
64
+ fields.oldStringLength = input.old_string.length;
65
+ fields.oldLineCount = countLines(input.old_string);
66
+ }
67
+ if (typeof input.newStringLength === 'number') {
68
+ fields.newStringLength = input.newStringLength;
69
+ if (typeof input.newLineCount === 'number')
70
+ fields.newLineCount = input.newLineCount;
71
+ if (typeof input.isDelete === 'boolean')
72
+ fields.isDelete = input.isDelete;
73
+ }
74
+ else if (typeof input.new_string === 'string') {
75
+ fields.newStringLength = input.new_string.length;
76
+ fields.newLineCount = input.new_string.length > 0 ? countLines(input.new_string) : 0;
77
+ fields.isDelete = input.new_string.length === 0;
78
+ }
79
+ if (typeof input.replace_all === 'boolean')
80
+ fields.replaceAll = input.replace_all;
81
+ return fields;
82
+ }
83
+ function parseBash(input) {
84
+ const fields = {};
85
+ if (typeof input.command === 'string') {
86
+ fields.command = input.command;
87
+ fields.isTestCommand = TEST_COMMAND_RE.test(input.command);
88
+ fields.isBuildCommand = BUILD_COMMAND_RE.test(input.command);
89
+ fields.isLintCommand = LINT_COMMAND_RE.test(input.command);
90
+ // Coarse classification for downstream telemetry: turns the polymorphic
91
+ // command string into a fixed category (git / test-runner / build / ...)
92
+ // so dashboards and trackers can bucket Bash by shape, not just by name.
93
+ const classification = classifyBash(input.command);
94
+ fields.bashCategory = classification.category;
95
+ fields.bashLeading = classification.leading;
96
+ fields.bashDestructive = classification.isDestructive;
97
+ fields.bashNetwork = classification.isNetwork;
98
+ }
99
+ if (typeof input.description === 'string')
100
+ fields.commandDescription = input.description;
101
+ if (typeof input.timeout === 'number')
102
+ fields.commandTimeout = input.timeout;
103
+ if (typeof input.run_in_background === 'boolean')
104
+ fields.runInBackground = input.run_in_background;
105
+ return fields;
106
+ }
107
+ function parseGrep(input) {
108
+ const fields = {};
109
+ if (typeof input.pattern === 'string')
110
+ fields.pattern = input.pattern;
111
+ if (typeof input.path === 'string')
112
+ fields.grepPath = input.path;
113
+ if (typeof input.output_mode === 'string')
114
+ fields.outputMode = input.output_mode;
115
+ return fields;
116
+ }
117
+ function parseGlob(input) {
118
+ const fields = {};
119
+ if (typeof input.pattern === 'string')
120
+ fields.pattern = input.pattern;
121
+ if (typeof input.path === 'string')
122
+ fields.globPath = input.path;
123
+ return fields;
124
+ }
125
+ function parseAgent(input) {
126
+ const fields = {};
127
+ if (typeof input.description === 'string')
128
+ fields.agentDescription = input.description;
129
+ if (typeof input.subagent_type === 'string')
130
+ fields.subagentType = input.subagent_type;
131
+ if (typeof input.promptLength === 'number') {
132
+ fields.promptLength = input.promptLength;
133
+ }
134
+ else if (typeof input.prompt === 'string') {
135
+ fields.promptLength = input.prompt.length;
136
+ }
137
+ if (typeof input.run_in_background === 'boolean')
138
+ fields.runInBackground = input.run_in_background;
139
+ if (typeof input.name === 'string')
140
+ fields.agentName = input.name;
141
+ if (typeof input.team_name === 'string')
142
+ fields.agentTeamName = input.team_name;
143
+ if (typeof input.isolation === 'string')
144
+ fields.agentIsolation = input.isolation;
145
+ if (typeof input.model === 'string')
146
+ fields.agentModel = input.model;
147
+ return fields;
148
+ }
149
+ function parseAskUserQuestion(input) {
150
+ const fields = {};
151
+ if (Array.isArray(input.questions))
152
+ fields.questionCount = input.questions.length;
153
+ return fields;
154
+ }
155
+ function parseTaskCreate(input) {
156
+ const fields = {};
157
+ if (typeof input.subject === 'string')
158
+ fields.taskSubject = input.subject;
159
+ return fields;
160
+ }
161
+ function parseTaskUpdate(input) {
162
+ const fields = {};
163
+ if (typeof input.taskId === 'string')
164
+ fields.taskId = input.taskId;
165
+ if (typeof input.status === 'string')
166
+ fields.taskStatus = input.status;
167
+ if (typeof input.subject === 'string')
168
+ fields.taskSubject = input.subject;
169
+ return fields;
170
+ }
171
+ // ---------------------------------------------------------------------------
172
+ // Dispatcher
173
+ // ---------------------------------------------------------------------------
174
+ const INPUT_PARSERS = {
175
+ Read: parseRead,
176
+ Write: parseWrite,
177
+ Edit: parseEdit,
178
+ Bash: parseBash,
179
+ Grep: parseGrep,
180
+ Glob: parseGlob,
181
+ Agent: parseAgent,
182
+ AskUserQuestion: parseAskUserQuestion,
183
+ TaskCreate: parseTaskCreate,
184
+ TaskUpdate: parseTaskUpdate,
185
+ };
186
+ function parseEditOutput(output) {
187
+ const fields = {};
188
+ if (typeof output.editSuccess === 'boolean')
189
+ fields.editSuccess = output.editSuccess;
190
+ if (typeof output.editMatched === 'boolean')
191
+ fields.editMatched = output.editMatched;
192
+ if (typeof output.editError === 'string')
193
+ fields.editErrorReason = output.editError;
194
+ return fields;
195
+ }
196
+ function parseGrepOutput(output) {
197
+ const fields = {};
198
+ if (typeof output.grepMatchCount === 'number')
199
+ fields.grepMatchCount = output.grepMatchCount;
200
+ if (typeof output.grepResultLines === 'number')
201
+ fields.grepResultLines = output.grepResultLines;
202
+ return fields;
203
+ }
204
+ function parseAgentOutput(output) {
205
+ const fields = {};
206
+ if (typeof output.agentCompleted === 'boolean')
207
+ fields.agentCompleted = output.agentCompleted;
208
+ if (typeof output.agentInterrupted === 'boolean')
209
+ fields.agentInterrupted = output.agentInterrupted;
210
+ if (typeof output.agentResultLength === 'number')
211
+ fields.agentResultLength = output.agentResultLength;
212
+ return fields;
213
+ }
214
+ const OUTPUT_PARSERS = {
215
+ Bash: (output) => {
216
+ const fields = {};
217
+ if (typeof output.exitCode === 'number') {
218
+ fields.exitCode = output.exitCode;
219
+ }
220
+ else if (typeof output.exitCode === 'string') {
221
+ const parsed = Number(output.exitCode);
222
+ if (!Number.isNaN(parsed))
223
+ fields.exitCode = parsed;
224
+ }
225
+ return fields;
226
+ },
227
+ Edit: parseEditOutput,
228
+ Grep: parseGrepOutput,
229
+ Agent: parseAgentOutput,
230
+ };
231
+ /**
232
+ * Extract tool-specific structured fields from a tool's input and output.
233
+ * Returns a flat record of fields to spread into the ToolCallRecord.
234
+ * Unknown tools or parsing errors return {}.
235
+ */
236
+ export function parseToolSpecificFields(toolName, input, output) {
237
+ try {
238
+ const fields = {};
239
+ // Normalize tool name: try exact match first, then capitalize first letter
240
+ // to handle variants like "read" → "Read" from non-Claude-Code platforms.
241
+ const normalizedName = INPUT_PARSERS[toolName] !== undefined
242
+ ? toolName
243
+ : toolName.charAt(0).toUpperCase() + toolName.slice(1);
244
+ // Parse input fields
245
+ const inputParser = INPUT_PARSERS[normalizedName];
246
+ if (inputParser && input !== null && input !== undefined && typeof input === 'object') {
247
+ Object.assign(fields, inputParser(input));
248
+ }
249
+ // Parse output fields
250
+ const outputParser = OUTPUT_PARSERS[normalizedName];
251
+ if (outputParser && output !== null && output !== undefined && typeof output === 'object') {
252
+ Object.assign(fields, outputParser(output));
253
+ }
254
+ return fields;
255
+ }
256
+ catch {
257
+ return {};
258
+ }
259
+ }
260
+ //# sourceMappingURL=tool-parsers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-parsers.js","sourceRoot":"","sources":["../../src/hooks/tool-parsers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ #!/usr/bin/env node
2
+ import 'dotenv/config';
3
+ import { VERSION } from './shared/index.js';
4
+ import { LocalStore } from './storage/index.js';
5
+ import { LiveSessionRegistry } from './metrics/live-session-registry.js';
6
+ import { DashboardServer } from './dashboard/dashboard-server.js';
7
+ import type { CliOptions } from './types.js';
8
+ export { VERSION };
9
+ export { NrMcpServer, createServer } from './server.js';
10
+ export { loadMcpConfig, redactSensitive } from './config.js';
11
+ export type { McpServerConfig } from './config.js';
12
+ export { LocalStore } from './storage/index.js';
13
+ export type { HookEvent, SessionSummary, AuditEntry } from './storage/index.js';
14
+ export type { CliOptions, ServerOptions } from './types.js';
15
+ export { ProxyManager } from './proxy/index.js';
16
+ export type { ProxyToolCallRecord, ProxyRequestRecord, UpstreamConfig } from './proxy/index.js';
17
+ export { ClaudeCodeAdapter, CursorAdapter, WindsurfAdapter, CopilotAdapter, ZedAdapter, ContinueAdapter, AmazonQAdapter, parseCopilotUsageResponse, GenericMcpAdapter, validateReportToolCallInput, REPORT_TOOL_CALL_TOOL, REPORT_SESSION_START_TOOL, REPORT_SESSION_END_TOOL, PlatformRegistry, createDefaultRegistry, } from './platforms/index.js';
18
+ export type { NormalizedToolCall, PlatformConfig, PlatformSessionMetadata, PlatformAdapter, ReportToolCallInput, ReportSessionStartInput, ReportSessionEndInput, } from './platforms/index.js';
19
+ export declare function maskCredential(key: string): string;
20
+ /**
21
+ * Result of evaluating a dashboard-server start error.
22
+ *
23
+ * - kind: 'skip' — EADDRINUSE was observed; caller should drop the dashboard
24
+ * server reference and continue without binding. The `message` field is a
25
+ * human-readable INFO-level log line explaining the situation.
26
+ * - kind: 'rethrow' — non-EADDRINUSE error (or non-error value); caller should
27
+ * re-throw `error` unchanged.
28
+ */
29
+ export type DashboardStartFailure = {
30
+ kind: 'skip';
31
+ message: string;
32
+ } | {
33
+ kind: 'rethrow';
34
+ error: unknown;
35
+ };
36
+ /**
37
+ * Decide how to handle a failure returned from `DashboardServer.start()`.
38
+ *
39
+ * When N concurrent `preflight --stdio` instances launch (one per
40
+ * Claude Code session) only one can bind the dashboard port; the rest receive
41
+ * EADDRINUSE. Rather than fataling the whole MCP server (which would render
42
+ * the session's tools unusable in Claude Code's UI), we log an INFO line and
43
+ * continue without the dashboard. Other errors still propagate.
44
+ */
45
+ export declare function classifyDashboardStartError(err: unknown, host: string, port: number): DashboardStartFailure;
46
+ /**
47
+ * Default interval (ms) between dashboard re-bind attempts when this MCP
48
+ * started in headless mode (Fix 1 EADDRINUSE skip path). Overridable via
49
+ * NR_AI_DASHBOARD_REPOLL_MS — kept simple to avoid threading a new config
50
+ * field through the loader for what is essentially a knob for tests.
51
+ */
52
+ export declare const DEFAULT_DASHBOARD_REPOLL_MS = 30000;
53
+ export declare function getDashboardRepollIntervalMs(): number;
54
+ /**
55
+ * Side-effects wired up once the dashboard HTTP server has bound the port.
56
+ * Runs on the initial-bind success path and on the re-poll takeover path so
57
+ * a headless MCP that later seizes the dashboard performs the same setup
58
+ * (orphan GC, openOnStart warning) as one that bound on first try.
59
+ *
60
+ * Returns the orphan-GC interval handle so the shutdown path can clear it.
61
+ */
62
+ export interface DashboardPostBindDeps {
63
+ readonly localStore: LocalStore;
64
+ readonly liveSessionRegistry: LiveSessionRegistry | undefined;
65
+ readonly openOnStart: boolean;
66
+ }
67
+ export declare function setupDashboardPostBind(addr: {
68
+ address: string;
69
+ port: number;
70
+ }, deps: DashboardPostBindDeps): NodeJS.Timeout;
71
+ /**
72
+ * Schedule periodic re-bind attempts after a headless start (Fix 1 path).
73
+ *
74
+ * After Fix 1 the first MCP to launch wins port 7777 and serves the
75
+ * dashboard; the rest run headless. If the owner exits while the headless
76
+ * MCPs are still alive, the port is freed and nobody picks it up — the
77
+ * dashboard goes dead. This re-poll closes that gap: every
78
+ * `intervalMs` (default 30s) the headless MCP retries `start()`, and the
79
+ * first one to succeed promotes itself to dashboard owner and runs the
80
+ * post-bind setup (GC interval, etc.).
81
+ *
82
+ * The interval is unref'd so a process whose only remaining handle is this
83
+ * timer can still exit cleanly when stdin closes (matters for stdio mode).
84
+ */
85
+ export interface DashboardRepollOptions {
86
+ readonly dashboardServer: DashboardServer;
87
+ readonly host: string;
88
+ readonly port: number;
89
+ readonly intervalMs?: number;
90
+ readonly postBind: (addr: {
91
+ address: string;
92
+ port: number;
93
+ }) => NodeJS.Timeout;
94
+ readonly onTakeover?: (gcInterval: NodeJS.Timeout) => void;
95
+ readonly logger?: {
96
+ info: (msg: string, meta?: Record<string, unknown>) => void;
97
+ warn: (msg: string, meta?: Record<string, unknown>) => void;
98
+ };
99
+ }
100
+ export declare function startDashboardRepoll(opts: DashboardRepollOptions): NodeJS.Timeout;
101
+ /**
102
+ * If argv[2] is a known subcommand, run it and return its exit code.
103
+ * Otherwise return null so main() can continue with its flag-based dispatch.
104
+ */
105
+ export declare function dispatchSubcommand(argv: string[]): Promise<number | null>;
106
+ export declare function parseArgs(argv: string[]): CliOptions;
107
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}