@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":"setup-wizard.js","sourceRoot":"","sources":["../../src/install/setup-wizard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Shared local-day helpers used by both the dashboard server and the React UI.
3
+ *
4
+ * Both surfaces previously implemented their own "is today" / "start of today"
5
+ * logic — the server via `new Date(); setHours(0,0,0,0)` and the client via a
6
+ * private `isToday(ts)` helper in Today.tsx. When server and client clocks
7
+ * diverged (containerized server in UTC, browser in user-local), the two
8
+ * sides drew the day boundary at different moments and visible inconsistencies
9
+ * appeared (chart shows session active, sidebar filter drops it, etc.).
10
+ *
11
+ * These helpers operate in the host process's local timezone — same as the
12
+ * previous inline implementations. Both sides should call them so any future
13
+ * tz/DST handling change lands in one place.
14
+ */
15
+ /**
16
+ * Epoch ms at local midnight of the day containing `refTs`.
17
+ * Defaults to `Date.now()` when `refTs` is omitted.
18
+ */
19
+ export declare function localStartOfDay(refTs?: number): number;
20
+ /**
21
+ * True iff `ts` and `refTs` (or now) fall on the same local-time calendar day.
22
+ * Uses Y/M/D comparison so DST transitions don't introduce off-by-one bugs
23
+ * (a "day" can be 23 h or 25 h on DST boundaries; raw ts-range arithmetic
24
+ * gets that wrong, Y/M/D comparison doesn't).
25
+ */
26
+ export declare function isSameLocalDay(ts: number, refTs?: number): boolean;
27
+ /**
28
+ * Local-time YYYY-MM-DD key for `ts` (or now). Used as a Map key for per-day
29
+ * cost buckets. Must agree with localStartOfDay/isSameLocalDay so server-side
30
+ * bucketing and client-side filters draw the day boundary at the same instant.
31
+ */
32
+ export declare function localDateKey(ts?: number): string;
33
+ /**
34
+ * How much of `session.estimatedCostUsd` was spent during today's local day,
35
+ * given the session's start, end, and timeline. Fixes the cross-midnight bug
36
+ * where whole-session cost was attributed to the day a session started.
37
+ *
38
+ * Strategy:
39
+ * - Session entirely before today's local day: return 0.
40
+ * - Session entirely after today's local day: return 0.
41
+ * - Session entirely within today: return total cost.
42
+ * - Session straddling midnight: pro-rate by tool-call count when a timeline
43
+ * is available (better correlated with cost than wall time, which can
44
+ * include long idle stretches), else by elapsed-time overlap.
45
+ */
46
+ export declare function todayPortionOfSessionCost(session: {
47
+ startTime: number;
48
+ endTime: number;
49
+ estimatedCostUsd: number | null;
50
+ timeline?: ReadonlyArray<{
51
+ timestamp: number;
52
+ }>;
53
+ }, refTs?: number): number;
54
+ //# sourceMappingURL=date.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/lib/date.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAItD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAQlE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAMhD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE;IACP,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,aAAa,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD,EACD,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAwBR"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Shared local-day helpers used by both the dashboard server and the React UI.
3
+ *
4
+ * Both surfaces previously implemented their own "is today" / "start of today"
5
+ * logic — the server via `new Date(); setHours(0,0,0,0)` and the client via a
6
+ * private `isToday(ts)` helper in Today.tsx. When server and client clocks
7
+ * diverged (containerized server in UTC, browser in user-local), the two
8
+ * sides drew the day boundary at different moments and visible inconsistencies
9
+ * appeared (chart shows session active, sidebar filter drops it, etc.).
10
+ *
11
+ * These helpers operate in the host process's local timezone — same as the
12
+ * previous inline implementations. Both sides should call them so any future
13
+ * tz/DST handling change lands in one place.
14
+ */
15
+ /**
16
+ * Epoch ms at local midnight of the day containing `refTs`.
17
+ * Defaults to `Date.now()` when `refTs` is omitted.
18
+ */
19
+ export function localStartOfDay(refTs) {
20
+ const d = refTs == null ? new Date() : new Date(refTs);
21
+ d.setHours(0, 0, 0, 0);
22
+ return d.getTime();
23
+ }
24
+ /**
25
+ * True iff `ts` and `refTs` (or now) fall on the same local-time calendar day.
26
+ * Uses Y/M/D comparison so DST transitions don't introduce off-by-one bugs
27
+ * (a "day" can be 23 h or 25 h on DST boundaries; raw ts-range arithmetic
28
+ * gets that wrong, Y/M/D comparison doesn't).
29
+ */
30
+ export function isSameLocalDay(ts, refTs) {
31
+ const a = new Date(ts);
32
+ const b = refTs == null ? new Date() : new Date(refTs);
33
+ return (a.getFullYear() === b.getFullYear() &&
34
+ a.getMonth() === b.getMonth() &&
35
+ a.getDate() === b.getDate());
36
+ }
37
+ /**
38
+ * Local-time YYYY-MM-DD key for `ts` (or now). Used as a Map key for per-day
39
+ * cost buckets. Must agree with localStartOfDay/isSameLocalDay so server-side
40
+ * bucketing and client-side filters draw the day boundary at the same instant.
41
+ */
42
+ export function localDateKey(ts) {
43
+ const d = ts == null ? new Date() : new Date(ts);
44
+ const year = d.getFullYear();
45
+ const month = String(d.getMonth() + 1).padStart(2, '0');
46
+ const day = String(d.getDate()).padStart(2, '0');
47
+ return `${year}-${month}-${day}`;
48
+ }
49
+ /**
50
+ * How much of `session.estimatedCostUsd` was spent during today's local day,
51
+ * given the session's start, end, and timeline. Fixes the cross-midnight bug
52
+ * where whole-session cost was attributed to the day a session started.
53
+ *
54
+ * Strategy:
55
+ * - Session entirely before today's local day: return 0.
56
+ * - Session entirely after today's local day: return 0.
57
+ * - Session entirely within today: return total cost.
58
+ * - Session straddling midnight: pro-rate by tool-call count when a timeline
59
+ * is available (better correlated with cost than wall time, which can
60
+ * include long idle stretches), else by elapsed-time overlap.
61
+ */
62
+ export function todayPortionOfSessionCost(session, refTs) {
63
+ const cost = session.estimatedCostUsd;
64
+ if (cost == null || cost <= 0)
65
+ return 0;
66
+ const dayStart = localStartOfDay(refTs);
67
+ const dayEnd = dayStart + 86_400_000;
68
+ if (session.endTime < dayStart)
69
+ return 0;
70
+ if (session.startTime >= dayEnd)
71
+ return 0;
72
+ const entirelyToday = session.startTime >= dayStart && session.endTime < dayEnd;
73
+ if (entirelyToday)
74
+ return cost;
75
+ if (session.timeline && session.timeline.length > 0) {
76
+ const total = session.timeline.length;
77
+ const todayCount = session.timeline.filter((t) => t.timestamp >= dayStart && t.timestamp < dayEnd).length;
78
+ if (total > 0)
79
+ return cost * (todayCount / total);
80
+ }
81
+ const overlapMs = Math.min(session.endTime, dayEnd) - Math.max(session.startTime, dayStart);
82
+ const totalMs = Math.max(1, session.endTime - session.startTime);
83
+ return cost * (overlapMs / totalMs);
84
+ }
85
+ //# sourceMappingURL=date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/lib/date.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Anti-Pattern Detection — analyzes tool call sequences to identify
3
+ * inefficient AI coding patterns.
4
+ *
5
+ * Detects:
6
+ * 1. Thrashing: Edit → test FAIL cycles on the same file
7
+ * 2. Re-reading: reading the same file excessively
8
+ * 3. Stuck loop: running the same Bash command repeatedly
9
+ * 4. Blind editing: multiple edits without verification
10
+ * 5. Over-delegation: spawning too many sub-agents
11
+ *
12
+ * The detector is stateless: `analyze(toolCalls)` returns detected patterns
13
+ * for a given sequence (typically one task's worth of tool calls).
14
+ */
15
+ import type { MetricAggregator } from '../shared/index.js';
16
+ import type { ToolCallRecord } from '../storage/types.js';
17
+ export type AntiPatternType = 'thrashing' | 're_reading' | 'stuck_loop' | 'blind_editing' | 'over_delegation';
18
+ export interface AntiPattern {
19
+ readonly type: AntiPatternType;
20
+ readonly file?: string;
21
+ readonly command?: string;
22
+ /** Coarse Bash category (e.g. 'test-runner', 'build', 'git') when the pattern originates from a Bash call. */
23
+ readonly bashCategory?: string;
24
+ readonly iterations?: number;
25
+ readonly readCount?: number;
26
+ readonly repeatCount?: number;
27
+ readonly editCount?: number;
28
+ readonly agentCount?: number;
29
+ readonly suggestion: string;
30
+ }
31
+ export interface AntiPatternMetrics {
32
+ readonly readEfficiency: number | null;
33
+ readonly verifyRate: number | null;
34
+ readonly patterns: AntiPattern[];
35
+ }
36
+ export interface AntiPatternOptions {
37
+ readonly thrashThreshold?: number;
38
+ readonly reReadThreshold?: number;
39
+ readonly stuckLoopThreshold?: number;
40
+ readonly blindEditThreshold?: number;
41
+ readonly overDelegationThreshold?: number;
42
+ }
43
+ export declare class AntiPatternDetector {
44
+ private readonly thrashThreshold;
45
+ private readonly reReadThreshold;
46
+ private readonly stuckLoopThreshold;
47
+ private readonly blindEditThreshold;
48
+ private readonly overDelegationThreshold;
49
+ private lastMetrics;
50
+ constructor(options?: AntiPatternOptions);
51
+ analyze(toolCalls: ToolCallRecord[]): AntiPatternMetrics;
52
+ getCurrentPatterns(): readonly AntiPattern[];
53
+ emitMetrics(aggregator: MetricAggregator, patterns: AntiPattern[]): void;
54
+ private detectThrashing;
55
+ private detectReReading;
56
+ private detectStuckLoop;
57
+ private detectBlindEditing;
58
+ private detectOverDelegation;
59
+ private computeReadEfficiency;
60
+ private computeVerifyRate;
61
+ }
62
+ //# sourceMappingURL=anti-patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anti-patterns.d.ts","sourceRoot":"","sources":["../../src/metrics/anti-patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAM1D,MAAM,MAAM,eAAe,GACvB,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,eAAe,GACf,iBAAiB,CAAC;AAEtB,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,8GAA8G;IAC9G,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAC3C;AAmCD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAS;IACjD,OAAO,CAAC,WAAW,CAAmC;gBAE1C,OAAO,CAAC,EAAE,kBAAkB;IASxC,OAAO,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,kBAAkB;IAmBxD,kBAAkB,IAAI,SAAS,WAAW,EAAE;IAI5C,WAAW,CAAC,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI;IAUxE,OAAO,CAAC,eAAe;IAmDvB,OAAO,CAAC,eAAe;IAqCvB,OAAO,CAAC,eAAe;IA8CvB,OAAO,CAAC,kBAAkB;IA+C1B,OAAO,CAAC,oBAAoB;IA0B5B,OAAO,CAAC,qBAAqB;IAgB7B,OAAO,CAAC,iBAAiB;CAuB1B"}
@@ -0,0 +1,301 @@
1
+ /**
2
+ * Anti-Pattern Detection — analyzes tool call sequences to identify
3
+ * inefficient AI coding patterns.
4
+ *
5
+ * Detects:
6
+ * 1. Thrashing: Edit → test FAIL cycles on the same file
7
+ * 2. Re-reading: reading the same file excessively
8
+ * 3. Stuck loop: running the same Bash command repeatedly
9
+ * 4. Blind editing: multiple edits without verification
10
+ * 5. Over-delegation: spawning too many sub-agents
11
+ *
12
+ * The detector is stateless: `analyze(toolCalls)` returns detected patterns
13
+ * for a given sequence (typically one task's worth of tool calls).
14
+ */
15
+ // ---------------------------------------------------------------------------
16
+ // Defaults
17
+ // ---------------------------------------------------------------------------
18
+ const DEFAULT_THRASH_THRESHOLD = 3;
19
+ const DEFAULT_RE_READ_THRESHOLD = 3;
20
+ const DEFAULT_STUCK_LOOP_THRESHOLD = 3;
21
+ const DEFAULT_BLIND_EDIT_THRESHOLD = 3;
22
+ const DEFAULT_OVER_DELEGATION_THRESHOLD = 3;
23
+ // ---------------------------------------------------------------------------
24
+ // Per-category guidance for stuck-loop detection
25
+ // ---------------------------------------------------------------------------
26
+ function stuckLoopSuggestion(bashCategory) {
27
+ switch (bashCategory) {
28
+ case 'test-runner':
29
+ return 'Same test command keeps running — read the failure output before re-running, or change the test/code being verified';
30
+ case 'build':
31
+ return 'Same build command keeps running — re-running rarely fixes a build error; address the reported error';
32
+ case 'git':
33
+ return 'Same git command keeps running — re-running git commands rarely changes their output; check the working tree state';
34
+ case 'network':
35
+ return 'Same network request keeps being made — check the response body or change the request shape rather than retrying';
36
+ default:
37
+ return 'The same command is being run repeatedly — try a different approach';
38
+ }
39
+ }
40
+ // ---------------------------------------------------------------------------
41
+ // AntiPatternDetector
42
+ // ---------------------------------------------------------------------------
43
+ export class AntiPatternDetector {
44
+ thrashThreshold;
45
+ reReadThreshold;
46
+ stuckLoopThreshold;
47
+ blindEditThreshold;
48
+ overDelegationThreshold;
49
+ lastMetrics = null;
50
+ constructor(options) {
51
+ this.thrashThreshold = options?.thrashThreshold ?? DEFAULT_THRASH_THRESHOLD;
52
+ this.reReadThreshold = options?.reReadThreshold ?? DEFAULT_RE_READ_THRESHOLD;
53
+ this.stuckLoopThreshold = options?.stuckLoopThreshold ?? DEFAULT_STUCK_LOOP_THRESHOLD;
54
+ this.blindEditThreshold = options?.blindEditThreshold ?? DEFAULT_BLIND_EDIT_THRESHOLD;
55
+ this.overDelegationThreshold =
56
+ options?.overDelegationThreshold ?? DEFAULT_OVER_DELEGATION_THRESHOLD;
57
+ }
58
+ analyze(toolCalls) {
59
+ const patterns = [];
60
+ patterns.push(...this.detectThrashing(toolCalls));
61
+ patterns.push(...this.detectReReading(toolCalls));
62
+ patterns.push(...this.detectStuckLoop(toolCalls));
63
+ patterns.push(...this.detectBlindEditing(toolCalls));
64
+ patterns.push(...this.detectOverDelegation(toolCalls));
65
+ const metrics = {
66
+ readEfficiency: this.computeReadEfficiency(toolCalls),
67
+ verifyRate: this.computeVerifyRate(toolCalls),
68
+ patterns,
69
+ };
70
+ this.lastMetrics = metrics;
71
+ return metrics;
72
+ }
73
+ getCurrentPatterns() {
74
+ return this.lastMetrics?.patterns ?? [];
75
+ }
76
+ emitMetrics(aggregator, patterns) {
77
+ for (const pattern of patterns) {
78
+ aggregator.record('ai.anti_pattern.count', 1, { type: pattern.type });
79
+ }
80
+ }
81
+ // ---------------------------------------------------------------------------
82
+ // Thrashing: Edit(file) → Bash(test:FAIL) repeated on the same file
83
+ // ---------------------------------------------------------------------------
84
+ detectThrashing(toolCalls) {
85
+ // Track per-file: consecutive Edit→test-FAIL cycles
86
+ const fileCycles = new Map();
87
+ const flagged = new Map();
88
+ let lastEditFile = null;
89
+ for (const call of toolCalls) {
90
+ if (call.toolName === 'Edit' || call.toolName === 'Write') {
91
+ const file = call.filePath;
92
+ if (file) {
93
+ lastEditFile = file;
94
+ }
95
+ else {
96
+ lastEditFile = null;
97
+ }
98
+ }
99
+ else if (call.toolName === 'Bash' && call.isTestCommand && lastEditFile !== null) {
100
+ if (!call.success) {
101
+ // Edit → test FAIL cycle
102
+ const count = (fileCycles.get(lastEditFile) ?? 0) + 1;
103
+ fileCycles.set(lastEditFile, count);
104
+ if (count >= this.thrashThreshold) {
105
+ flagged.set(lastEditFile, count);
106
+ }
107
+ }
108
+ else {
109
+ // Test passed — reset cycle count for this file, but keep tracking the file
110
+ // for subsequent test attempts (flaky tests may fail again)
111
+ fileCycles.set(lastEditFile, 0);
112
+ }
113
+ // Note: Don't clear lastEditFile here. It persists until a new Edit to a different file.
114
+ // This allows proper tracking of cycles when tests fail again after passing.
115
+ }
116
+ }
117
+ const patterns = [];
118
+ for (const [file, iterations] of flagged) {
119
+ patterns.push({
120
+ type: 'thrashing',
121
+ file,
122
+ iterations,
123
+ suggestion: 'Consider reading the test output more carefully or reading the test framework docs',
124
+ });
125
+ }
126
+ return patterns;
127
+ }
128
+ // ---------------------------------------------------------------------------
129
+ // Re-reading: same file read more than threshold times
130
+ // ---------------------------------------------------------------------------
131
+ detectReReading(toolCalls) {
132
+ const readCounts = new Map();
133
+ for (const call of toolCalls) {
134
+ // Match Read and common platform-specific read variants (NotebookRead, mcp__ide__read, etc.)
135
+ if (call.toolName === 'Read' ||
136
+ call.toolName === 'NotebookRead' ||
137
+ call.toolName.toLowerCase().includes('read')) {
138
+ const file = call.filePath;
139
+ if (file) {
140
+ readCounts.set(file, (readCounts.get(file) ?? 0) + 1);
141
+ }
142
+ }
143
+ }
144
+ const patterns = [];
145
+ for (const [file, count] of readCounts) {
146
+ if (count >= this.reReadThreshold) {
147
+ patterns.push({
148
+ type: 're_reading',
149
+ file,
150
+ readCount: count,
151
+ suggestion: 'Context may have been compressed — consider breaking the task into smaller pieces',
152
+ });
153
+ }
154
+ }
155
+ return patterns;
156
+ }
157
+ // ---------------------------------------------------------------------------
158
+ // Stuck loop: same Bash command repeated consecutively
159
+ // ---------------------------------------------------------------------------
160
+ detectStuckLoop(toolCalls) {
161
+ const flagged = new Map();
162
+ let lastCommand = null;
163
+ let lastCategory;
164
+ let consecutiveCount = 0;
165
+ for (const call of toolCalls) {
166
+ if (call.toolName === 'Bash') {
167
+ const command = call.command;
168
+ const category = typeof call.bashCategory === 'string' ? call.bashCategory : undefined;
169
+ if (command != null) {
170
+ if (command === lastCommand) {
171
+ consecutiveCount++;
172
+ if (consecutiveCount >= this.stuckLoopThreshold) {
173
+ flagged.set(command, { repeatCount: consecutiveCount, bashCategory: lastCategory });
174
+ }
175
+ }
176
+ else {
177
+ lastCommand = command;
178
+ lastCategory = category;
179
+ consecutiveCount = 1;
180
+ }
181
+ }
182
+ }
183
+ // Non-Bash calls are transparent to stuck-loop detection: Bash(cmd) → Read → Bash(cmd)
184
+ // still counts as two repetitions of the same command.
185
+ }
186
+ const patterns = [];
187
+ for (const [command, { repeatCount, bashCategory }] of flagged) {
188
+ patterns.push({
189
+ type: 'stuck_loop',
190
+ command,
191
+ repeatCount,
192
+ bashCategory,
193
+ suggestion: stuckLoopSuggestion(bashCategory),
194
+ });
195
+ }
196
+ return patterns;
197
+ }
198
+ // ---------------------------------------------------------------------------
199
+ // Blind editing: multiple Edit/Write to same file without verification
200
+ // ---------------------------------------------------------------------------
201
+ detectBlindEditing(toolCalls) {
202
+ // Track consecutive edits per file without an intervening verification command
203
+ const editStreaks = new Map();
204
+ const flagged = new Map();
205
+ for (const call of toolCalls) {
206
+ if (call.toolName === 'Edit' || call.toolName === 'Write') {
207
+ const file = call.filePath;
208
+ if (file) {
209
+ const count = (editStreaks.get(file) ?? 0) + 1;
210
+ editStreaks.set(file, count);
211
+ if (count >= this.blindEditThreshold) {
212
+ flagged.set(file, count);
213
+ }
214
+ }
215
+ }
216
+ else if (call.toolName === 'Read') {
217
+ const file = call.filePath;
218
+ if (file) {
219
+ editStreaks.delete(file);
220
+ }
221
+ }
222
+ else if (call.toolName === 'Bash' &&
223
+ (call.isTestCommand || call.isBuildCommand || call.isLintCommand)) {
224
+ if (call.success) {
225
+ editStreaks.clear();
226
+ }
227
+ }
228
+ }
229
+ const patterns = [];
230
+ for (const [file, editCount] of flagged) {
231
+ patterns.push({
232
+ type: 'blind_editing',
233
+ file,
234
+ editCount,
235
+ suggestion: 'Verify changes with tests between edits',
236
+ });
237
+ }
238
+ return patterns;
239
+ }
240
+ // ---------------------------------------------------------------------------
241
+ // Over-delegation: too many Agent tool calls
242
+ // ---------------------------------------------------------------------------
243
+ detectOverDelegation(toolCalls) {
244
+ let agentCount = 0;
245
+ for (const call of toolCalls) {
246
+ if (call.toolName === 'Agent') {
247
+ agentCount++;
248
+ }
249
+ }
250
+ if (agentCount >= this.overDelegationThreshold) {
251
+ return [
252
+ {
253
+ type: 'over_delegation',
254
+ agentCount,
255
+ suggestion: 'Too many sub-agents spawned — consider handling more work directly',
256
+ },
257
+ ];
258
+ }
259
+ return [];
260
+ }
261
+ // ---------------------------------------------------------------------------
262
+ // Efficiency metrics
263
+ // ---------------------------------------------------------------------------
264
+ computeReadEfficiency(toolCalls) {
265
+ const uniqueFiles = new Set();
266
+ let totalReads = 0;
267
+ for (const call of toolCalls) {
268
+ if (call.toolName === 'Read') {
269
+ totalReads++;
270
+ const file = call.filePath;
271
+ if (file)
272
+ uniqueFiles.add(file);
273
+ }
274
+ }
275
+ if (totalReads === 0)
276
+ return null;
277
+ return Math.round((uniqueFiles.size / totalReads) * 100) / 100;
278
+ }
279
+ computeVerifyRate(toolCalls) {
280
+ let totalEdits = 0;
281
+ let editsFollowedByVerification = 0;
282
+ let pendingEditCount = 0;
283
+ for (const call of toolCalls) {
284
+ if (call.toolName === 'Edit' || call.toolName === 'Write') {
285
+ totalEdits++;
286
+ pendingEditCount++;
287
+ }
288
+ else if (call.toolName === 'Bash' &&
289
+ (call.isTestCommand || call.isBuildCommand || call.isLintCommand)) {
290
+ if (pendingEditCount > 0) {
291
+ editsFollowedByVerification += pendingEditCount;
292
+ pendingEditCount = 0;
293
+ }
294
+ }
295
+ }
296
+ if (totalEdits === 0)
297
+ return null;
298
+ return Math.round((editsFollowedByVerification / totalEdits) * 1000) / 1000;
299
+ }
300
+ }
301
+ //# sourceMappingURL=anti-patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anti-patterns.js","sourceRoot":"","sources":["../../src/metrics/anti-patterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import type { MetricAggregator } from '../shared/index.js';
2
+ export type ApiErrorType = 'rate_limit' | 'timeout' | 'connection_error' | 'server_error' | 'context_length_exceeded' | 'authentication' | 'unknown';
3
+ export type SessionPhase = 'early' | 'middle' | 'late';
4
+ export interface ApiFailureEvent {
5
+ readonly errorType: ApiErrorType;
6
+ readonly model: string;
7
+ readonly timestamp: number;
8
+ readonly turnNumber: number;
9
+ readonly tokensInFlight: number;
10
+ readonly recoveryMs: number | null;
11
+ readonly retryCount: number;
12
+ readonly recoverySucceeded: boolean | null;
13
+ readonly sessionPhase: SessionPhase;
14
+ readonly duringToolExecution: boolean;
15
+ }
16
+ export interface ModelReliabilityScorecard {
17
+ readonly model: string;
18
+ readonly totalRequests: number;
19
+ readonly failureCount: number;
20
+ readonly failureRate: number | null;
21
+ readonly throttleCount: number;
22
+ readonly throttleFrequency: number | null;
23
+ readonly meanRecoveryMs: number | null;
24
+ readonly p95LatencyMs: number | null;
25
+ readonly tokensLost: number;
26
+ readonly estimatedCostLostUsd: number;
27
+ }
28
+ export interface ThrottleAlert {
29
+ readonly model: string;
30
+ readonly count: number;
31
+ readonly windowMinutes: number;
32
+ readonly timestamp: number;
33
+ }
34
+ export interface ApiFailureMetrics {
35
+ readonly totalFailures: number;
36
+ readonly byErrorType: Readonly<Record<ApiErrorType, number>>;
37
+ readonly byModel: Readonly<Record<string, ModelReliabilityScorecard>>;
38
+ readonly bySessionPhase: Readonly<Record<SessionPhase, number>>;
39
+ readonly totalTokensLost: number;
40
+ readonly totalEstimatedCostLostUsd: number;
41
+ readonly meanTimeToRecoveryMs: number | null;
42
+ readonly throttleAlerts: readonly ThrottleAlert[];
43
+ readonly recentFailures: readonly ApiFailureEvent[];
44
+ }
45
+ export interface ApiFailureTrackerOptions {
46
+ readonly throttleAlertThreshold?: number;
47
+ readonly throttleAlertWindowMinutes?: number;
48
+ readonly maxEvents?: number;
49
+ readonly costPerTokenUsd?: number;
50
+ readonly onThrottleAlert?: (alert: ThrottleAlert) => void;
51
+ }
52
+ export declare class ApiFailureTracker {
53
+ private readonly throttleThreshold;
54
+ private readonly throttleWindowMinutes;
55
+ private readonly maxEvents;
56
+ private readonly costPerTokenUsd;
57
+ private readonly onThrottleAlert;
58
+ private readonly events;
59
+ private readonly throttleAlerts;
60
+ private totalRequests;
61
+ private readonly latenciesByModel;
62
+ constructor(options?: ApiFailureTrackerOptions);
63
+ recordRequest(model: string, latencyMs: number): void;
64
+ recordFailure(event: {
65
+ errorType: ApiErrorType;
66
+ model: string;
67
+ turnNumber: number;
68
+ tokensInFlight: number;
69
+ recoveryMs?: number | null;
70
+ retryCount?: number;
71
+ recoverySucceeded?: boolean | null;
72
+ totalTurnsInSession?: number;
73
+ duringToolExecution?: boolean;
74
+ }): ApiFailureEvent;
75
+ getMetrics(): ApiFailureMetrics;
76
+ emitMetrics(aggregator: MetricAggregator): void;
77
+ reset(_sessionId: string): void;
78
+ private computePhase;
79
+ private checkThrottleRate;
80
+ private computeModelScorecards;
81
+ }
82
+ //# sourceMappingURL=api-failure-tracker.d.ts.map