@oneuptime/common 11.5.12 → 11.6.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 (193) hide show
  1. package/Models/DatabaseModels/AIInsight.ts +30 -0
  2. package/Models/DatabaseModels/EnterpriseLicense.ts +21 -0
  3. package/Models/DatabaseModels/EnterpriseLicenseInstance.ts +25 -0
  4. package/Models/DatabaseModels/GlobalConfig.ts +76 -0
  5. package/Models/DatabaseModels/Project.ts +30 -0
  6. package/Models/DatabaseModels/TelemetryException.ts +128 -0
  7. package/Server/API/AIAgentDataAPI.ts +129 -5
  8. package/Server/API/AIInvestigationAPI.ts +87 -0
  9. package/Server/API/EnterpriseLicenseAPI.ts +57 -0
  10. package/Server/API/GlobalConfigAPI.ts +62 -1
  11. package/Server/EnvironmentConfig.ts +22 -0
  12. package/Server/Infrastructure/Postgres/SchemaMigrations/1784640000000-AddExceptionTriageAndPrivacyColumns.ts +56 -0
  13. package/Server/Infrastructure/Postgres/SchemaMigrations/1784659816363-AddInstanceVersionAndLatestReleaseColumns.ts +38 -0
  14. package/Server/Infrastructure/Postgres/SchemaMigrations/1784705487674-AddEnterpriseLicenseEvaluationColumns.ts +25 -0
  15. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
  16. package/Server/Services/AIRunService.ts +8 -0
  17. package/Server/Services/AnalyticsDatabaseService.ts +48 -45
  18. package/Server/Services/DatabaseService.ts +66 -1
  19. package/Server/Services/TelemetryExceptionService.ts +320 -24
  20. package/Server/Services/WorkflowService.ts +100 -39
  21. package/Server/Types/Workflow/Components/Schedule.ts +57 -32
  22. package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +15 -4
  23. package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +15 -4
  24. package/Server/Utils/AI/SRE/Insights/InsightScanner.ts +222 -24
  25. package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +225 -9
  26. package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +39 -0
  27. package/Server/Utils/AI/SRE/TelemetryImprovementTaskTrigger.ts +114 -0
  28. package/Server/Utils/AnalyticsDatabase/InsertDedupContext.ts +59 -0
  29. package/Server/Utils/Express.ts +13 -0
  30. package/Server/Utils/Telemetry/ExceptionSanitizer.ts +222 -0
  31. package/Server/Utils/Telemetry/TelemetryFanInWriter.ts +799 -0
  32. package/Server/Utils/Telemetry/TelemetryWriterClient.ts +263 -0
  33. package/Server/Utils/Telemetry/TelemetryWriterServer.ts +240 -0
  34. package/Server/Utils/Telemetry/TelemetryWriterShedMetrics.ts +93 -0
  35. package/Tests/Server/Services/DatabaseServiceSanitizeUpdateData.test.ts +232 -0
  36. package/Tests/Server/Services/TelemetryExceptionCodeFixRun.test.ts +205 -1
  37. package/Tests/Server/Services/UpdateOneByIdKeepsRowId.test.ts +107 -0
  38. package/Tests/Server/Services/WorkflowService.test.ts +308 -0
  39. package/Tests/Server/Utils/AI/Insights/InsightScanner.test.ts +150 -141
  40. package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +277 -1
  41. package/Tests/Server/Utils/Attribution.test.ts +203 -0
  42. package/Tests/Server/Utils/ExceptionSanitizer.test.ts +70 -0
  43. package/Tests/Server/Utils/InsightTriageClassification.test.ts +57 -0
  44. package/Tests/Server/Utils/Marketing/ConversionUploadProvider.test.ts +183 -0
  45. package/Tests/Server/Utils/Marketing/GoogleAds.test.ts +340 -0
  46. package/Tests/Server/Utils/Monitor/Criteria/ExceptionMonitorCriteria.test.ts +87 -0
  47. package/Tests/Server/Utils/Monitor/Criteria/LogMonitorCriteria.test.ts +165 -0
  48. package/Tests/Server/Utils/Monitor/Criteria/TraceMonitorCriteria.test.ts +86 -0
  49. package/Tests/Server/Utils/Telemetry/TelemetryFanInWriter.test.ts +1565 -0
  50. package/Tests/Server/Utils/Telemetry/TelemetryWriterClient.test.ts +313 -0
  51. package/Tests/Server/Utils/Telemetry/TelemetryWriterServer.test.ts +270 -0
  52. package/Tests/Server/Utils/Telemetry/TelemetryWriterShedMetrics.test.ts +127 -0
  53. package/Tests/Server/Utils/TelemetryImprovementTaskTrigger.test.ts +141 -0
  54. package/Tests/Types/AI/CodeFixTaskType.test.ts +3 -0
  55. package/Tests/Types/Monitor/MonitorCriteriaMetricVariables.test.ts +228 -0
  56. package/Tests/Types/Monitor/MonitorStepDefaultTelemetryConfig.test.ts +169 -0
  57. package/Tests/Types/Monitor/MonitorStepExceptionMonitor.test.ts +289 -0
  58. package/Tests/Types/Monitor/MonitorStepLogMonitor.test.ts +231 -0
  59. package/Tests/Types/Monitor/MonitorStepMetricViewConfigUtil.test.ts +245 -0
  60. package/Tests/Types/Monitor/MonitorStepNetworkDeviceMonitor.test.ts +155 -0
  61. package/Tests/Types/Monitor/MonitorStepTelemetrySerialization.test.ts +141 -0
  62. package/Tests/Types/Monitor/MonitorStepTraceMonitor.test.ts +137 -0
  63. package/Tests/Types/Workspace/NotificationRules/NotificationRuleCondition.test.ts +311 -0
  64. package/Tests/UI/Components/ModelTableSelectFromColumns.test.ts +259 -0
  65. package/Tests/UI/Utils/Breadcrumb/BreadcrumbTrailResolver.test.ts +461 -0
  66. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +2852 -0
  67. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +758 -0
  68. package/Tests/UI/Utils/NotificationMethodUtil.test.ts +564 -0
  69. package/Tests/Utils/Array.test.ts +156 -0
  70. package/Tests/Utils/CronTab.test.ts +199 -0
  71. package/Tests/Utils/ModelImportExport.test.ts +101 -0
  72. package/Tests/Utils/Number.test.ts +179 -0
  73. package/Tests/Utils/VersionUtil.test.ts +348 -0
  74. package/Tests/jest.setup.ts +1 -0
  75. package/Types/AI/CodeFixTaskContext.ts +6 -0
  76. package/Types/AI/CodeFixTaskType.ts +38 -1
  77. package/Types/AI/ExceptionAIClassification.ts +27 -0
  78. package/Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary.ts +6 -0
  79. package/Types/Log/LogScrubPatternType.ts +7 -0
  80. package/Types/Monitor/MonitorStep.ts +24 -4
  81. package/Types/Monitor/MonitorStepMetricViewConfigUtil.ts +105 -0
  82. package/Types/Trace/TraceScrubPatternType.ts +7 -0
  83. package/UI/Components/EditionLabel/EditionLabel.tsx +445 -12
  84. package/UI/Components/ModelTable/BaseModelTable.tsx +15 -46
  85. package/UI/Components/ModelTable/SelectFromColumns.ts +129 -0
  86. package/UI/Components/Workflow/ArgumentsForm.tsx +68 -30
  87. package/UI/Components/Workflow/CronScheduleField.tsx +411 -0
  88. package/UI/Utils/Breadcrumb/BreadcrumbTrailResolver.ts +176 -0
  89. package/UI/Utils/NotificationMethodUtil.ts +310 -0
  90. package/Utils/CronTab.ts +823 -0
  91. package/Utils/ModelImportExport.ts +21 -6
  92. package/Utils/VersionUtil.ts +260 -0
  93. package/build/dist/Models/DatabaseModels/AIInsight.js +31 -0
  94. package/build/dist/Models/DatabaseModels/AIInsight.js.map +1 -1
  95. package/build/dist/Models/DatabaseModels/EnterpriseLicense.js +22 -0
  96. package/build/dist/Models/DatabaseModels/EnterpriseLicense.js.map +1 -1
  97. package/build/dist/Models/DatabaseModels/EnterpriseLicenseInstance.js +26 -0
  98. package/build/dist/Models/DatabaseModels/EnterpriseLicenseInstance.js.map +1 -1
  99. package/build/dist/Models/DatabaseModels/GlobalConfig.js +81 -0
  100. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  101. package/build/dist/Models/DatabaseModels/Project.js +31 -0
  102. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  103. package/build/dist/Models/DatabaseModels/TelemetryException.js +134 -0
  104. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  105. package/build/dist/Server/API/AIAgentDataAPI.js +97 -8
  106. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  107. package/build/dist/Server/API/AIInvestigationAPI.js +55 -0
  108. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  109. package/build/dist/Server/API/EnterpriseLicenseAPI.js +47 -0
  110. package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +1 -1
  111. package/build/dist/Server/API/GlobalConfigAPI.js +52 -1
  112. package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
  113. package/build/dist/Server/EnvironmentConfig.js +17 -0
  114. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  115. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784640000000-AddExceptionTriageAndPrivacyColumns.js +33 -0
  116. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784640000000-AddExceptionTriageAndPrivacyColumns.js.map +1 -0
  117. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784659816363-AddInstanceVersionAndLatestReleaseColumns.js +18 -0
  118. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784659816363-AddInstanceVersionAndLatestReleaseColumns.js.map +1 -0
  119. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784705487674-AddEnterpriseLicenseEvaluationColumns.js +14 -0
  120. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784705487674-AddEnterpriseLicenseEvaluationColumns.js.map +1 -0
  121. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
  122. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  123. package/build/dist/Server/Services/AIRunService.js +9 -2
  124. package/build/dist/Server/Services/AIRunService.js.map +1 -1
  125. package/build/dist/Server/Services/AnalyticsDatabaseService.js +44 -16
  126. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  127. package/build/dist/Server/Services/DatabaseService.js +53 -1
  128. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  129. package/build/dist/Server/Services/TelemetryExceptionService.js +263 -22
  130. package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
  131. package/build/dist/Server/Services/WorkflowService.js +80 -30
  132. package/build/dist/Server/Services/WorkflowService.js.map +1 -1
  133. package/build/dist/Server/Types/Workflow/Components/Schedule.js +44 -19
  134. package/build/dist/Server/Types/Workflow/Components/Schedule.js.map +1 -1
  135. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +12 -4
  136. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
  137. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +12 -4
  138. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
  139. package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js +193 -22
  140. package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js.map +1 -1
  141. package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +178 -9
  142. package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -1
  143. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +37 -0
  144. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -1
  145. package/build/dist/Server/Utils/AI/SRE/TelemetryImprovementTaskTrigger.js +98 -0
  146. package/build/dist/Server/Utils/AI/SRE/TelemetryImprovementTaskTrigger.js.map +1 -0
  147. package/build/dist/Server/Utils/AnalyticsDatabase/InsertDedupContext.js +24 -0
  148. package/build/dist/Server/Utils/AnalyticsDatabase/InsertDedupContext.js.map +1 -0
  149. package/build/dist/Server/Utils/Express.js +12 -0
  150. package/build/dist/Server/Utils/Express.js.map +1 -1
  151. package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js +149 -0
  152. package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js.map +1 -0
  153. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js +496 -0
  154. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js.map +1 -0
  155. package/build/dist/Server/Utils/Telemetry/TelemetryWriterClient.js +165 -0
  156. package/build/dist/Server/Utils/Telemetry/TelemetryWriterClient.js.map +1 -0
  157. package/build/dist/Server/Utils/Telemetry/TelemetryWriterServer.js +136 -0
  158. package/build/dist/Server/Utils/Telemetry/TelemetryWriterServer.js.map +1 -0
  159. package/build/dist/Server/Utils/Telemetry/TelemetryWriterShedMetrics.js +76 -0
  160. package/build/dist/Server/Utils/Telemetry/TelemetryWriterShedMetrics.js.map +1 -0
  161. package/build/dist/Types/AI/CodeFixTaskType.js +38 -1
  162. package/build/dist/Types/AI/CodeFixTaskType.js.map +1 -1
  163. package/build/dist/Types/AI/ExceptionAIClassification.js +28 -0
  164. package/build/dist/Types/AI/ExceptionAIClassification.js.map +1 -0
  165. package/build/dist/Types/Log/LogScrubPatternType.js +7 -0
  166. package/build/dist/Types/Log/LogScrubPatternType.js.map +1 -1
  167. package/build/dist/Types/Monitor/MonitorStep.js +20 -4
  168. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  169. package/build/dist/Types/Monitor/MonitorStepMetricViewConfigUtil.js +73 -0
  170. package/build/dist/Types/Monitor/MonitorStepMetricViewConfigUtil.js.map +1 -0
  171. package/build/dist/Types/Trace/TraceScrubPatternType.js +7 -0
  172. package/build/dist/Types/Trace/TraceScrubPatternType.js.map +1 -1
  173. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +261 -13
  174. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  175. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +12 -37
  176. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  177. package/build/dist/UI/Components/ModelTable/SelectFromColumns.js +82 -0
  178. package/build/dist/UI/Components/ModelTable/SelectFromColumns.js.map +1 -0
  179. package/build/dist/UI/Components/Workflow/ArgumentsForm.js +30 -6
  180. package/build/dist/UI/Components/Workflow/ArgumentsForm.js.map +1 -1
  181. package/build/dist/UI/Components/Workflow/CronScheduleField.js +209 -0
  182. package/build/dist/UI/Components/Workflow/CronScheduleField.js.map +1 -0
  183. package/build/dist/UI/Utils/Breadcrumb/BreadcrumbTrailResolver.js +129 -0
  184. package/build/dist/UI/Utils/Breadcrumb/BreadcrumbTrailResolver.js.map +1 -0
  185. package/build/dist/UI/Utils/NotificationMethodUtil.js +189 -0
  186. package/build/dist/UI/Utils/NotificationMethodUtil.js.map +1 -0
  187. package/build/dist/Utils/CronTab.js +609 -0
  188. package/build/dist/Utils/CronTab.js.map +1 -0
  189. package/build/dist/Utils/ModelImportExport.js +20 -6
  190. package/build/dist/Utils/ModelImportExport.js.map +1 -1
  191. package/build/dist/Utils/VersionUtil.js +193 -0
  192. package/build/dist/Utils/VersionUtil.js.map +1 -0
  193. package/package.json +1 -1
@@ -17,6 +17,12 @@ import InsightDetectors from "./Detectors/Index";
17
17
  import InsightStore from "./InsightStore";
18
18
  import InsightFixRouting from "./FixRouting";
19
19
  import InsightTriage from "./Triage";
20
+ import AIInsightType from "../../../../../Types/AI/AIInsightType";
21
+ import AIRunType from "../../../../../Types/AI/AIRunType";
22
+ import AIRunStatus from "../../../../../Types/AI/AIRunStatus";
23
+ import ExceptionAIClassification from "../../../../../Types/AI/ExceptionAIClassification";
24
+ import AIRunService from "../../../../Services/AIRunService";
25
+ import QueryHelper from "../../../../Types/Database/QueryHelper";
20
26
  import logger from "../../../Logger";
21
27
  import CaptureSpan from "../../../Telemetry/CaptureSpan";
22
28
  /*
@@ -24,8 +30,9 @@ import CaptureSpan from "../../../Telemetry/CaptureSpan";
24
30
  *
25
31
  * THE RULE: no LLM here. Detectors are deterministic statistical sensors;
26
32
  * the LLM only engages per-finding AFTERWARDS through InsightTriage
27
- * (budgeted, read-only), and the fix decision inside InsightFixRouting is
28
- * deterministic and reuses the existing budgeted CodeFix creation paths.
33
+ * (budgeted, read-only). The automatic fix decision happens after triage
34
+ * completes (InsightTriageRunner InsightFixRouting) and only for
35
+ * insights the triage classified as code faults.
29
36
  *
30
37
  * Everything is opt-in and quiet: only projects with the default-false
31
38
  * enableAiInsights flag are scanned, insights never page and never
@@ -73,8 +80,8 @@ export default class InsightScanner {
73
80
  * One project's scan: self-heal any insight an earlier tick left unrouted,
74
81
  * run every registered detector (isolated — one failing sensor must not
75
82
  * blind the others), dedupe/upsert the candidates through InsightStore,
76
- * then route each NEWLY created insight to FixOpened or ActionRequired and
77
- * enqueue its triage.
83
+ * then route each NEWLY created insight to ActionRequired and enqueue its
84
+ * triage (which, on a code-fault verdict, routes the fix).
78
85
  */
79
86
  static async scanProjectForInsights(project) {
80
87
  var _a;
@@ -189,32 +196,196 @@ export default class InsightScanner {
189
196
  logger.error(`AI Insights: re-routing failed for stranded insight ${(_a = insight.id) === null || _a === void 0 ? void 0 : _a.toString()} (project ${projectId.toString()}) — continuing with the remaining stranded insights: ${error}`);
190
197
  }
191
198
  }
199
+ await this.resweepUntriagedInsights({ projectId });
200
+ await this.resweepUnroutedCodeFaults({ projectId, project });
201
+ }
202
+ /*
203
+ * Stranded shape 2: ActionRequired insights that never got a triage
204
+ * verdict. With triage gating the automatic fix, a triage that was
205
+ * quiet-skipped (token budget exhausted), expired in the queue, or
206
+ * failed would otherwise strand the insight verdict-less FOREVER — and
207
+ * with it any automatic fix. Re-enqueueing is safe and cheap: the
208
+ * triage enqueue dedupes to one non-terminal run per insight and
209
+ * quiet-skips when the budget still has no headroom. Bounded two ways:
210
+ * only insights from the last 7 days (older rows predate the verdict
211
+ * gate or were consciously left alone), and only while fewer than 3
212
+ * triage attempts have ended in failure (a permanently failing triage
213
+ * must not retry every 15 minutes for a week).
214
+ */
215
+ static async resweepUntriagedInsights(data) {
216
+ var _a;
217
+ const { projectId } = data;
218
+ try {
219
+ const untriaged = await AIInsightService.findBy({
220
+ query: {
221
+ projectId: projectId,
222
+ status: AIInsightStatus.ActionRequired,
223
+ triageCompletedAt: QueryHelper.isNull(),
224
+ createdAt: QueryHelper.greaterThanEqualTo(OneUptimeDate.addRemoveDays(OneUptimeDate.getCurrentDate(), -7)),
225
+ },
226
+ select: {
227
+ _id: true,
228
+ projectId: true,
229
+ insightType: true,
230
+ serviceName: true,
231
+ traceId: true,
232
+ telemetryExceptionId: true,
233
+ evidence: true,
234
+ },
235
+ limit: LIMIT_MAX,
236
+ skip: 0,
237
+ props: { isRoot: true },
238
+ });
239
+ for (const insight of untriaged) {
240
+ try {
241
+ const failedTriageAttempts = (await AIRunService.countBy({
242
+ query: {
243
+ runType: AIRunType.Investigation,
244
+ triggeredByAiInsightId: insight.id,
245
+ status: QueryHelper.any([
246
+ AIRunStatus.Error,
247
+ AIRunStatus.Cancelled,
248
+ AIRunStatus.Stale,
249
+ ]),
250
+ },
251
+ props: { isRoot: true },
252
+ })).toNumber();
253
+ if (failedTriageAttempts >= 3) {
254
+ continue;
255
+ }
256
+ const triageResult = await InsightTriage.enqueueInsightTriage({ insight: insight });
257
+ if (triageResult.triageAiRunId) {
258
+ await AIInsightService.updateOneById({
259
+ id: insight.id,
260
+ data: {
261
+ triageAiRunId: triageResult.triageAiRunId,
262
+ },
263
+ props: { isRoot: true },
264
+ });
265
+ }
266
+ }
267
+ catch (error) {
268
+ logger.error(`AI Insights: triage re-enqueue failed for insight ${(_a = insight.id) === null || _a === void 0 ? void 0 : _a.toString()} — continuing: ${error}`);
269
+ }
270
+ }
271
+ }
272
+ catch (error) {
273
+ logger.error(`AI Insights: failed to sweep untriaged insights for project ${projectId.toString()} — continuing with the scan: ${error}`);
274
+ }
275
+ }
276
+ /*
277
+ * Stranded shape 3: a code-fault verdict was recorded but the fix was
278
+ * never routed — the pod died between the verdict write and the fix
279
+ * routing, or routing quiet-skipped on a transient gate (daily fix
280
+ * budget, readiness). Re-routing is idempotent: the creation path's
281
+ * per-(exception, recipe) dedupe and the cross-group guard refuse
282
+ * duplicates, and the conditional status flip only moves
283
+ * ActionRequired → FixOpened. Bounded to verdicts from the last 24
284
+ * hours so a permanently refused group (declined by a human, capped
285
+ * repo) does not retry forever. Latency insights are excluded — they
286
+ * are fix-routed deterministically at scan time.
287
+ */
288
+ static async resweepUnroutedCodeFaults(data) {
289
+ var _a;
290
+ const { projectId, project } = data;
291
+ try {
292
+ const unrouted = await AIInsightService.findBy({
293
+ query: {
294
+ projectId: projectId,
295
+ status: AIInsightStatus.ActionRequired,
296
+ classification: ExceptionAIClassification.CodeFault,
297
+ fixAiRunId: QueryHelper.isNull(),
298
+ triageCompletedAt: QueryHelper.greaterThanEqualTo(OneUptimeDate.addRemoveDays(OneUptimeDate.getCurrentDate(), -1)),
299
+ },
300
+ select: {
301
+ _id: true,
302
+ projectId: true,
303
+ insightType: true,
304
+ serviceName: true,
305
+ traceId: true,
306
+ telemetryExceptionId: true,
307
+ evidence: true,
308
+ },
309
+ limit: LIMIT_MAX,
310
+ skip: 0,
311
+ props: { isRoot: true },
312
+ });
313
+ for (const insight of unrouted) {
314
+ if (insight.insightType === AIInsightType.TraceLatencyRegression) {
315
+ continue;
316
+ }
317
+ try {
318
+ const fixResult = await InsightFixRouting.routeInsightFix({
319
+ insight: insight,
320
+ project: project,
321
+ });
322
+ if (fixResult.fixAiRunId) {
323
+ await AIInsightService.updateOneBy({
324
+ query: {
325
+ _id: insight.id.toString(),
326
+ status: AIInsightStatus.ActionRequired,
327
+ },
328
+ data: {
329
+ status: AIInsightStatus.FixOpened,
330
+ fixAiRunId: fixResult.fixAiRunId,
331
+ },
332
+ props: { isRoot: true },
333
+ });
334
+ }
335
+ }
336
+ catch (error) {
337
+ logger.error(`AI Insights: fix re-routing failed for insight ${(_a = insight.id) === null || _a === void 0 ? void 0 : _a.toString()} — continuing: ${error}`);
338
+ }
339
+ }
340
+ }
341
+ catch (error) {
342
+ logger.error(`AI Insights: failed to sweep unrouted code-fault insights for project ${projectId.toString()} — continuing with the scan: ${error}`);
343
+ }
192
344
  }
193
345
  /*
194
346
  * Route one insight — newly created this tick, or swept up as stranded
195
- * from an earlier one — out of the defensive Detected state:
196
- * 1. deterministic fix routing (gated on enableAi + enableInsightFixTasks
197
- * inside InsightFixRouting) FixOpened + fixAiRunId, else
198
- * ActionRequired;
199
- * 2. triage enqueue for EVERY new insight triage enriches fix and
200
- * non-fix insights alike triageAiRunId when a run was enqueued.
201
- * Both collaborators are never-throws by contract, but they are wrapped
202
- * anyway: a contract breach must degrade (no fix / no triage), not leave
203
- * the insight stuck in Detected or fail the scan.
347
+ * from an earlier one — out of the defensive Detected state.
348
+ *
349
+ * TRIAGE GATES THE FIX. The automatic fix decision no longer happens
350
+ * here: every new insight goes to ActionRequired and gets its triage
351
+ * enqueued; when the triage run completes with a code-fault
352
+ * classification, InsightTriageRunner routes the fix (via
353
+ * InsightFixRouting) and flips the insight to FixOpened. This exists
354
+ * because roughly half of real exception insights turn out to be
355
+ * expected user errors or intentional denials (auth, paywalls, scanner
356
+ * probes) — opening an unreviewed fix PR for those is worse than
357
+ * opening none: the agent's only "fix" is to weaken the check that
358
+ * correctly fired. Fail-closed by design: no triage verdict, no
359
+ * automatic PR. The manual "Fix with AI" button on the exception page
360
+ * is unaffected.
361
+ *
362
+ * The collaborator is never-throws by contract, but it is wrapped
363
+ * anyway: a contract breach must degrade (no triage), not leave the
364
+ * insight stuck in Detected or fail the scan.
204
365
  */
205
366
  static async routeNewInsight(data) {
206
367
  var _a, _b;
207
368
  const { insight, project } = data;
369
+ /*
370
+ * TraceLatencyRegression keeps DETERMINISTIC scan-time fix routing:
371
+ * its evidence is the SpanTreeAnalyzer's own findings (N+1, dominant
372
+ * span, sequential fan-out) — no LLM verdict adds signal there, and
373
+ * the exception-centric classification taxonomy would mislabel most
374
+ * latency regressions as "infrastructure". Exception insights go
375
+ * through the verdict gate instead.
376
+ */
208
377
  let fixAiRunId = undefined;
209
- try {
210
- const fixResult = await InsightFixRouting.routeInsightFix({
211
- insight: insight,
212
- project: project,
213
- });
214
- fixAiRunId = fixResult.fixAiRunId;
215
- }
216
- catch (error) {
217
- logger.error(`AI Insights: fix routing threw for insight ${(_a = insight.id) === null || _a === void 0 ? void 0 : _a.toString()} (treating as no fix opened): ${error}`);
378
+ if (insight.insightType === AIInsightType.TraceLatencyRegression) {
379
+ try {
380
+ const fixResult = await InsightFixRouting.routeInsightFix({
381
+ insight: insight,
382
+ project: project,
383
+ });
384
+ fixAiRunId = fixResult.fixAiRunId;
385
+ }
386
+ catch (error) {
387
+ logger.error(`AI Insights: fix routing threw for latency insight ${(_a = insight.id) === null || _a === void 0 ? void 0 : _a.toString()} (treating as no fix opened): ${error}`);
388
+ }
218
389
  }
219
390
  if (fixAiRunId) {
220
391
  await AIInsightService.updateOneById({
@@ -1 +1 @@
1
- {"version":3,"file":"InsightScanner.js","sourceRoot":"","sources":["../../../../../../../Server/Utils/AI/SRE/Insights/InsightScanner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InsightScanner.js","sourceRoot":"","sources":["../../../../../../../Server/Utils/AI/SRE/Insights/InsightScanner.ts"],"names":[],"mappings":"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"}
@@ -8,10 +8,17 @@ var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
10
  import OneUptimeDate from "../../../../../Types/Date";
11
+ import AIInsightStatus, { AIInsightStatusHelper, } from "../../../../../Types/AI/AIInsightStatus";
12
+ import AIInsightType from "../../../../../Types/AI/AIInsightType";
13
+ import ExceptionAIClassification from "../../../../../Types/AI/ExceptionAIClassification";
11
14
  import AIInsightService from "../../../../Services/AIInsightService";
15
+ import ProjectService from "../../../../Services/ProjectService";
16
+ import TelemetryExceptionService from "../../../../Services/TelemetryExceptionService";
12
17
  import { AI_INSIGHT_TRIAGE_FEATURE } from "../../../../Services/AIService";
13
18
  import AIInvestigationEngine from "../AIInvestigationEngine";
14
19
  import AIInvestigationQueue from "../InvestigationQueue";
20
+ import InsightFixRouting from "./FixRouting";
21
+ import ToolResultSerializer from "../../Toolbox/Serializer";
15
22
  import logger from "../../../Logger";
16
23
  import CaptureSpan from "../../../Telemetry/CaptureSpan";
17
24
  /*
@@ -45,7 +52,17 @@ const PREVENTIVE_TRIAGE_FRAMING = `IMPORTANT — this is PREVENTIVE TRIAGE, not
45
52
  - Establish the most likely root cause of the finding.
46
53
  - Estimate the blast radius: which services/users/operations are affected, and how badly.
47
54
  - Recommend exactly ONE next action (the single most useful thing an engineer should do first).
48
- Cite the evidence for every factual claim. If the telemetry cannot support a conclusion, say so plainly. Do not refer to "the incident" — there is none.`;
55
+ Cite the evidence for every factual claim. If the telemetry cannot support a conclusion, say so plainly. Do not refer to "the incident" — there is none.
56
+
57
+ CLASSIFICATION — you MUST end your analysis with one line in EXACTLY this format, on its own line, with nothing after it:
58
+ Classification: <verdict>
59
+ where <verdict> is exactly one of: code-fault, user-error, expected-denial, infrastructure, unknown.
60
+ - code-fault: a defect in the monitored code that a code change should fix.
61
+ - user-error: an expected consequence of invalid end-user input (bad parameters, malformed values, garbage in a URL). The code rejected it correctly; the input was wrong.
62
+ - expected-denial: an intentional check doing its job — authentication/authorization failures, plan or paywall rejections, rate limits, or security scanners/fuzzers tripping validation on purpose-built probes.
63
+ - infrastructure: an environmental condition (network timeout, connection reset, resource exhaustion, dependency outage) rather than a logic defect.
64
+ - unknown: the evidence does not support a confident verdict.
65
+ This verdict gates automation: ONLY code-fault findings may get an automatic fix pull request, so classify conservatively — when torn between code-fault and anything else, pick the other one.`;
49
66
  export default class InsightTriageRunner {
50
67
  /*
51
68
  * Execute a claimed triage run: load the insight, build its description
@@ -56,11 +73,13 @@ export default class InsightTriageRunner {
56
73
  static async executeTriage(data) {
57
74
  const { aiRunId, projectId, sentinelInsightId, attemptCount } = data;
58
75
  let contextSummary;
76
+ let insight = null;
59
77
  try {
60
- const insight = await AIInsightService.findOneById({
78
+ insight = await AIInsightService.findOneById({
61
79
  id: sentinelInsightId,
62
80
  select: {
63
81
  _id: true,
82
+ projectId: true,
64
83
  insightType: true,
65
84
  severity: true,
66
85
  title: true,
@@ -68,6 +87,7 @@ export default class InsightTriageRunner {
68
87
  evidence: true,
69
88
  serviceName: true,
70
89
  traceId: true,
90
+ telemetryExceptionId: true,
71
91
  metricName: true,
72
92
  firstSeenAt: true,
73
93
  lastSeenAt: true,
@@ -101,25 +121,168 @@ export default class InsightTriageRunner {
101
121
  feature: AI_INSIGHT_TRIAGE_FEATURE,
102
122
  contextSummary,
103
123
  postAnalysis: async (postData) => {
124
+ const classification = this.parseClassification(postData.analysisMarkdown);
104
125
  /*
105
- * The quiet inbox — deliberately the ONLY write: no feed items,
106
- * no workspace notification, no owner/on-call ping, no metrics,
107
- * and no instrumentation-task trigger. Insights never page and
108
- * never enter the notification pipeline (Preventive-lane rule);
109
- * the summary waits on the Insights page until a human looks.
126
+ * The quiet inbox — the summary and verdict land on the insight
127
+ * row: no feed items, no workspace notification, no owner/on-call
128
+ * ping, no metrics, and no instrumentation-task trigger. Insights
129
+ * never page and never enter the notification pipeline
130
+ * (Preventive-lane rule); the summary waits on the Insights page
131
+ * until a human looks.
110
132
  */
111
133
  await AIInsightService.updateOneById({
112
134
  id: sentinelInsightId,
113
135
  data: {
114
136
  triageSummaryMarkdown: postData.analysisMarkdown,
115
137
  triageCompletedAt: OneUptimeDate.getCurrentDate(),
138
+ classification: classification,
116
139
  },
117
140
  props: { isRoot: true },
118
141
  });
119
- logger.debug(`AI insights: triage summary posted for insight ${sentinelInsightId.toString()} (run ${aiRunId.toString()}, confident=${postData.confidence.confident} via ${postData.confidence.source}).`);
142
+ logger.debug(`AI insights: triage summary posted for insight ${sentinelInsightId.toString()} (run ${aiRunId.toString()}, classification=${classification}, confident=${postData.confidence.confident} via ${postData.confidence.source}).`);
143
+ /*
144
+ * Verdict-driven follow-through. Best-effort by design: the
145
+ * triage summary is already posted, and a failure here must not
146
+ * fail the triage run itself.
147
+ */
148
+ try {
149
+ await this.actOnClassification({
150
+ insight: insight,
151
+ classification: classification,
152
+ });
153
+ }
154
+ catch (error) {
155
+ logger.error(`AI insights: post-triage action failed for insight ${sentinelInsightId.toString()} (verdict ${classification}): ${error}`);
156
+ }
157
+ },
158
+ },
159
+ });
160
+ }
161
+ /*
162
+ * Parse the mandatory trailing "Classification: <verdict>" line out of
163
+ * the triage analysis. The LAST match wins (the model may discuss the
164
+ * taxonomy earlier in its reasoning). Anything unparseable is Unknown —
165
+ * and Unknown never routes a fix, so a malformed answer fails closed.
166
+ */
167
+ static parseClassification(analysisMarkdown) {
168
+ const matches = Array.from((analysisMarkdown || "").matchAll(/^\s*\**\s*classification\s*\**\s*[:=]\s*\**\s*(code-fault|user-error|expected-denial|infrastructure|unknown)\b/gim));
169
+ const last = matches[matches.length - 1];
170
+ if (!last || !last[1]) {
171
+ return ExceptionAIClassification.Unknown;
172
+ }
173
+ return last[1].toLowerCase();
174
+ }
175
+ /*
176
+ * Act on the triage verdict:
177
+ *
178
+ * 1. Stamp the verdict onto the exception group row (aiClassification)
179
+ * so the exceptions list can filter on it and the fix lane can skip
180
+ * known-non-defects without re-triaging.
181
+ * 2. code-fault → route the automatic fix (InsightFixRouting owns every
182
+ * gate: enableAi, enableInsightFixTasks, budget, readiness, dedupe)
183
+ * and flip the insight to FixOpened when a run was queued.
184
+ * 3. expected-denial → optionally auto-archive the exception group when
185
+ * the project opted in (autoArchiveNonActionableExceptions). Only
186
+ * expected denials are archived — user errors and infrastructure
187
+ * conditions stay visible for a human to judge.
188
+ */
189
+ static async actOnClassification(data) {
190
+ const { insight, classification } = data;
191
+ if (!insight.id || !insight.projectId) {
192
+ return;
193
+ }
194
+ /*
195
+ * The verdict stamp on the exception group is metadata and always
196
+ * lands; the AUTOMATION below (fix PR, auto-archive) additionally
197
+ * requires that no human closed the insight while the triage run sat
198
+ * in the queue or executed. The `insight` object is a snapshot from
199
+ * claim time — minutes to half an hour old — so the status MUST be
200
+ * re-read here: an insight a human Dismissed or Resolved in the
201
+ * meantime gets no PR and keeps its terminal status.
202
+ */
203
+ if (insight.telemetryExceptionId) {
204
+ await TelemetryExceptionService.updateOneById({
205
+ id: insight.telemetryExceptionId,
206
+ data: {
207
+ aiClassification: classification,
120
208
  },
209
+ props: { isRoot: true },
210
+ });
211
+ }
212
+ const currentInsight = await AIInsightService.findOneById({
213
+ id: insight.id,
214
+ select: {
215
+ _id: true,
216
+ status: true,
217
+ },
218
+ props: { isRoot: true },
219
+ });
220
+ if (!currentInsight ||
221
+ (currentInsight.status &&
222
+ AIInsightStatusHelper.isTerminalStatus(currentInsight.status))) {
223
+ logger.debug(`AI insights: skipping post-triage automation for insight ${insight.id.toString()} — insight is ${(currentInsight === null || currentInsight === void 0 ? void 0 : currentInsight.status) || "deleted"}.`);
224
+ return;
225
+ }
226
+ const project = await ProjectService.findOneById({
227
+ id: insight.projectId,
228
+ select: {
229
+ _id: true,
230
+ enableAi: true,
231
+ enableInsightFixTasks: true,
232
+ autoArchiveNonActionableExceptions: true,
121
233
  },
234
+ props: { isRoot: true },
122
235
  });
236
+ if (!project) {
237
+ return;
238
+ }
239
+ /*
240
+ * TraceLatencyRegression insights are fix-routed DETERMINISTICALLY at
241
+ * scan time (their span-tree evidence needs no LLM verdict — see
242
+ * InsightScanner.routeNewInsight); routing them again here would
243
+ * duplicate the run/PR. The verdict gate applies to exception
244
+ * insights only.
245
+ */
246
+ const isVerdictGatedInsight = insight.insightType !== AIInsightType.TraceLatencyRegression;
247
+ if (classification === ExceptionAIClassification.CodeFault &&
248
+ isVerdictGatedInsight) {
249
+ const fixResult = await InsightFixRouting.routeInsightFix({
250
+ insight: insight,
251
+ project: project,
252
+ });
253
+ if (fixResult.fixAiRunId) {
254
+ /*
255
+ * Conditional flip: only a still-ActionRequired insight moves to
256
+ * FixOpened, so a dismissal landing between the status re-read
257
+ * above and this write can never be clobbered.
258
+ */
259
+ await AIInsightService.updateOneBy({
260
+ query: {
261
+ _id: insight.id.toString(),
262
+ status: AIInsightStatus.ActionRequired,
263
+ },
264
+ data: {
265
+ status: AIInsightStatus.FixOpened,
266
+ fixAiRunId: fixResult.fixAiRunId,
267
+ },
268
+ props: { isRoot: true },
269
+ });
270
+ }
271
+ return;
272
+ }
273
+ if (classification === ExceptionAIClassification.ExpectedDenial &&
274
+ project.autoArchiveNonActionableExceptions === true &&
275
+ insight.telemetryExceptionId) {
276
+ await TelemetryExceptionService.updateOneById({
277
+ id: insight.telemetryExceptionId,
278
+ data: {
279
+ isArchived: true,
280
+ markedAsArchivedAt: OneUptimeDate.getCurrentDate(),
281
+ },
282
+ props: { isRoot: true },
283
+ });
284
+ logger.debug(`AI insights: auto-archived exception ${insight.telemetryExceptionId.toString()} (expected-denial verdict, project opted in).`);
285
+ }
123
286
  }
124
287
  // Build the compact insight record that seeds the triage.
125
288
  static buildInsightSummary(insight) {
@@ -159,7 +322,13 @@ export default class InsightTriageRunner {
159
322
  lines.push("## Raw evidence values");
160
323
  lines.push(renderedEvidence);
161
324
  }
162
- return lines.join("\n");
325
+ /*
326
+ * Detector detailMarkdown and evidence quote raw exception messages —
327
+ * sweep secrets/PII before the text reaches the LLM provider. (The
328
+ * chat/investigation toolbox path already redacts its tool results;
329
+ * this closes the same gap for the detector-supplied context.)
330
+ */
331
+ return ToolResultSerializer.redact(lines.join("\n")).text;
163
332
  }
164
333
  /*
165
334
  * Render the stored evidence JSON compactly: one line per populated
@@ -1 +1 @@
1
- {"version":3,"file":"InsightTriageRunner.js","sourceRoot":"","sources":["../../../../../../../Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,aAAa,MAAM,2BAA2B,CAAC;AAGtD,OAAO,gBAAgB,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAC7D,OAAO,oBAAoB,MAAM,uBAAuB,CAAC;AAGzD,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,WAAW,MAAM,gCAAgC,CAAC;AAEzD;;;;;;;;;;;;;GAaG;AAEH;;;;GAIG;AACH,MAAM,2BAA2B,GAAW,IAAI,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,yBAAyB,GAAW;;;;yJAI+G,CAAC;AAE1J,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACtC;;;;;OAKG;IAEiB,AAAb,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,IAKjC;QACC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QAErE,IAAI,cAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,OAAO,GAAqB,MAAM,gBAAgB,CAAC,WAAW,CAAC;gBACnE,EAAE,EAAE,iBAAiB;gBACrB,MAAM,EAAE;oBACN,GAAG,EAAE,IAAI;oBACT,WAAW,EAAE,IAAI;oBACjB,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,IAAI;oBACX,cAAc,EAAE,IAAI;oBACpB,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,IAAI;oBACjB,OAAO,EAAE,IAAI;oBACb,UAAU,EAAE,IAAI;oBAChB,WAAW,EAAE,IAAI;oBACjB,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,IAAI;iBACtB;gBACD,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;aACxB,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;YACJ,CAAC;YAED,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf;;;eAGG;YACH,MAAM,oBAAoB,CAAC,aAAa,CAAC;gBACvC,OAAO;gBACP,YAAY;gBACZ,YAAY,EAAE,oCACZ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE;gBACF,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,qBAAqB,CAAC,UAAU,CAAC;YACrC,OAAO;YACP,SAAS;YACT,YAAY;YACZ,OAAO,EAAE;gBACP,OAAO,EAAE,yBAAyB;gBAClC,cAAc;gBACd,YAAY,EAAE,KAAK,EAAE,QAIpB,EAAiB,EAAE;oBAClB;;;;;;uBAMG;oBACH,MAAM,gBAAgB,CAAC,aAAa,CAAC;wBACnC,EAAE,EAAE,iBAAiB;wBACrB,IAAI,EAAE;4BACJ,qBAAqB,EAAE,QAAQ,CAAC,gBAAgB;4BAChD,iBAAiB,EAAE,aAAa,CAAC,cAAc,EAAE;yBAClD;wBACD,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;qBACxB,CAAC,CAAC;oBAEH,MAAM,CAAC,KAAK,CACV,kDAAkD,iBAAiB,CAAC,QAAQ,EAAE,SAAS,OAAO,CAAC,QAAQ,EAAE,eAAe,QAAQ,CAAC,UAAU,CAAC,SAAS,QAAQ,QAAQ,CAAC,UAAU,CAAC,MAAM,IAAI,CAC5L,CAAC;gBACJ,CAAC;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,0DAA0D;IAClD,MAAM,CAAC,mBAAmB,CAAC,OAAkB;QACnD,MAAM,KAAK,GAAkB,EAAE,CAAC;QAEhC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,WAAW,IAAI,KAAK,EAAE,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAC;QAErD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,4BAA4B,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CACR,eAAe,aAAa,CAAC,wBAAwB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAC7E,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CACR,cAAc,aAAa,CAAC,wBAAwB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAC3E,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,mBAAmB,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CACR,iEAAiE,CAClE,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,gBAAgB,GAAW,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvE,IAAI,gBAAgB,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,cAAc,CAC3B,QAAuC;QAEvC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAkB,EAAE,CAAC;QAEhC,MAAM,QAAQ,GAAmC;YAC/C,WAAW;YACX,UAAU;YACV,SAAS;YACT,aAAa;SACd,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,KAAK,GACT,QAAQ,CAAC,OAAO,CAAC,CAAC;YAEpB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,SAAS;YACX,CAAC;YAED,IAAI,QAAgB,CAAC;YACrB,IAAI,CAAC;gBACH,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;YAAC,WAAM,CAAC;gBACP,SAAS;YACX,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,GAAG,2BAA2B,EAAE,CAAC;gBAClD,QAAQ,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,2BAA2B,CAAC,eAAe,CAAC;YAClF,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,KAAK,QAAQ,EAAE,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF;AAzLqB;IADnB,WAAW,EAAE;;;;8CAuFb"}
1
+ {"version":3,"file":"InsightTriageRunner.js","sourceRoot":"","sources":["../../../../../../../Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts"],"names":[],"mappings":"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"}
@@ -98,6 +98,37 @@ export default class SubjectCodeFixRun {
98
98
  return ((_a = run.taskContext) === null || _a === void 0 ? void 0 : _a.traceId) === data.traceId;
99
99
  }) || null);
100
100
  }
101
+ /*
102
+ * Per-(service, recipe) dedupe for the service-scoped instrumentation
103
+ * recipes (ImproveLogging / ImproveTracing): at most one non-terminal
104
+ * run of a recipe per (project, telemetryServiceId). Same in-memory
105
+ * taskContext matching as the per-trace guard above — the id lives in
106
+ * JSON the Query layer cannot filter on, and the candidate set is
107
+ * bounded and rare.
108
+ */
109
+ static async findNonTerminalRunForTelemetryService(data) {
110
+ const activeRuns = await AIRunService.findBy({
111
+ query: {
112
+ projectId: data.projectId,
113
+ runType: AIRunType.CodeFix,
114
+ codeFixTaskType: data.taskType,
115
+ status: QueryHelper.notIn([
116
+ AIRunStatus.Completed,
117
+ AIRunStatus.Error,
118
+ AIRunStatus.Cancelled,
119
+ AIRunStatus.Stale,
120
+ ]),
121
+ },
122
+ select: { _id: true, taskContext: true },
123
+ limit: LIMIT_PER_PROJECT,
124
+ skip: 0,
125
+ props: { isRoot: true },
126
+ });
127
+ return (activeRuns.find((run) => {
128
+ var _a;
129
+ return ((_a = run.taskContext) === null || _a === void 0 ? void 0 : _a.telemetryServiceId) === data.telemetryServiceId;
130
+ }) || null);
131
+ }
101
132
  /*
102
133
  * Record the durable intent as a Queued CodeFix AIRun that the external
103
134
  * agent worker claims via /ai-agent-task/get-pending-task. `userId` is
@@ -158,6 +189,12 @@ __decorate([
158
189
  __metadata("design:paramtypes", [Object]),
159
190
  __metadata("design:returntype", Promise)
160
191
  ], SubjectCodeFixRun, "findNonTerminalPerformanceFixRunForTrace", null);
192
+ __decorate([
193
+ CaptureSpan(),
194
+ __metadata("design:type", Function),
195
+ __metadata("design:paramtypes", [Object]),
196
+ __metadata("design:returntype", Promise)
197
+ ], SubjectCodeFixRun, "findNonTerminalRunForTelemetryService", null);
161
198
  __decorate([
162
199
  CaptureSpan(),
163
200
  __metadata("design:type", Function),
@@ -1 +1 @@
1
- {"version":3,"file":"SubjectCodeFixRun.js","sourceRoot":"","sources":["../../../../../../Server/Utils/AI/SRE/SubjectCodeFixRun.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SubjectCodeFixRun.js","sourceRoot":"","sources":["../../../../../../Server/Utils/AI/SRE/SubjectCodeFixRun.ts"],"names":[],"mappings":"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"}