@urateam/core 0.1.25 → 0.1.27

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 (146) hide show
  1. package/dist/__tests__/agent-stream-cache-tokens.test.d.ts +2 -0
  2. package/dist/__tests__/agent-stream-cache-tokens.test.d.ts.map +1 -0
  3. package/dist/__tests__/agent-stream-cache-tokens.test.js +25 -0
  4. package/dist/__tests__/agent-stream-cache-tokens.test.js.map +1 -0
  5. package/dist/__tests__/audit/pm-skipped-circuit-breaker-event.test.d.ts +2 -0
  6. package/dist/__tests__/audit/pm-skipped-circuit-breaker-event.test.d.ts.map +1 -0
  7. package/dist/__tests__/audit/pm-skipped-circuit-breaker-event.test.js +32 -0
  8. package/dist/__tests__/audit/pm-skipped-circuit-breaker-event.test.js.map +1 -0
  9. package/dist/__tests__/audit/review-model-low-output-ratio-event.test.d.ts +2 -0
  10. package/dist/__tests__/audit/review-model-low-output-ratio-event.test.d.ts.map +1 -0
  11. package/dist/__tests__/audit/review-model-low-output-ratio-event.test.js +23 -0
  12. package/dist/__tests__/audit/review-model-low-output-ratio-event.test.js.map +1 -0
  13. package/dist/__tests__/audit-immutability.test.js +2 -0
  14. package/dist/__tests__/audit-immutability.test.js.map +1 -1
  15. package/dist/__tests__/bec-181-circuit-breaker-audit-gap.test.d.ts +24 -0
  16. package/dist/__tests__/bec-181-circuit-breaker-audit-gap.test.d.ts.map +1 -0
  17. package/dist/__tests__/bec-181-circuit-breaker-audit-gap.test.js +253 -0
  18. package/dist/__tests__/bec-181-circuit-breaker-audit-gap.test.js.map +1 -0
  19. package/dist/__tests__/executor/review-feedback-profile-override.test.d.ts +2 -0
  20. package/dist/__tests__/executor/review-feedback-profile-override.test.d.ts.map +1 -0
  21. package/dist/__tests__/executor/review-feedback-profile-override.test.js +32 -0
  22. package/dist/__tests__/executor/review-feedback-profile-override.test.js.map +1 -0
  23. package/dist/__tests__/executor/review-feedback-prompt.test.d.ts +2 -0
  24. package/dist/__tests__/executor/review-feedback-prompt.test.d.ts.map +1 -0
  25. package/dist/__tests__/executor/review-feedback-prompt.test.js +29 -0
  26. package/dist/__tests__/executor/review-feedback-prompt.test.js.map +1 -0
  27. package/dist/__tests__/extract-handoff.test.js +74 -0
  28. package/dist/__tests__/extract-handoff.test.js.map +1 -1
  29. package/dist/__tests__/pipeline/pr-cost-summary.test.js +23 -0
  30. package/dist/__tests__/pipeline/pr-cost-summary.test.js.map +1 -1
  31. package/dist/__tests__/pm-circuit-breaker.test.js +86 -15
  32. package/dist/__tests__/pm-circuit-breaker.test.js.map +1 -1
  33. package/dist/__tests__/pm-slack-interface.test.js +40 -1
  34. package/dist/__tests__/pm-slack-interface.test.js.map +1 -1
  35. package/dist/__tests__/post-fanout-comments.test.js +52 -0
  36. package/dist/__tests__/post-fanout-comments.test.js.map +1 -1
  37. package/dist/__tests__/prune-worktrees-in-repo-dirs.test.d.ts +2 -0
  38. package/dist/__tests__/prune-worktrees-in-repo-dirs.test.d.ts.map +1 -0
  39. package/dist/__tests__/prune-worktrees-in-repo-dirs.test.js +64 -0
  40. package/dist/__tests__/prune-worktrees-in-repo-dirs.test.js.map +1 -0
  41. package/dist/__tests__/review/model-health.test.d.ts +2 -0
  42. package/dist/__tests__/review/model-health.test.d.ts.map +1 -0
  43. package/dist/__tests__/review/model-health.test.js +122 -0
  44. package/dist/__tests__/review/model-health.test.js.map +1 -0
  45. package/dist/__tests__/review-feedback.test.js +3 -2
  46. package/dist/__tests__/review-feedback.test.js.map +1 -1
  47. package/dist/__tests__/runner-ralph-feedback-skip.test.d.ts +2 -0
  48. package/dist/__tests__/runner-ralph-feedback-skip.test.d.ts.map +1 -0
  49. package/dist/__tests__/runner-ralph-feedback-skip.test.js +23 -0
  50. package/dist/__tests__/runner-ralph-feedback-skip.test.js.map +1 -0
  51. package/dist/__tests__/templates.test.js +4 -2
  52. package/dist/__tests__/templates.test.js.map +1 -1
  53. package/dist/__tests__/validate-review-models.test.d.ts +2 -0
  54. package/dist/__tests__/validate-review-models.test.d.ts.map +1 -0
  55. package/dist/__tests__/validate-review-models.test.js +155 -0
  56. package/dist/__tests__/validate-review-models.test.js.map +1 -0
  57. package/dist/__tests__/worktree-stale-recovery.test.js +11 -1
  58. package/dist/__tests__/worktree-stale-recovery.test.js.map +1 -1
  59. package/dist/audit/events.d.ts +12 -0
  60. package/dist/audit/events.d.ts.map +1 -1
  61. package/dist/audit/events.js +26 -0
  62. package/dist/audit/events.js.map +1 -1
  63. package/dist/db/migrations/postgres/013_stage_runs_cache_tokens.sql +6 -0
  64. package/dist/db/migrations/sqlite/012_stage_runs_cache_tokens.sql +6 -0
  65. package/dist/db/schema.d.ts +34 -0
  66. package/dist/db/schema.d.ts.map +1 -1
  67. package/dist/db/schema.js +2 -0
  68. package/dist/db/schema.js.map +1 -1
  69. package/dist/executor/agent-stream.d.ts +4 -0
  70. package/dist/executor/agent-stream.d.ts.map +1 -1
  71. package/dist/executor/agent-stream.js +5 -1
  72. package/dist/executor/agent-stream.js.map +1 -1
  73. package/dist/executor/executor.d.ts +9 -1
  74. package/dist/executor/executor.d.ts.map +1 -1
  75. package/dist/executor/executor.js +26 -4
  76. package/dist/executor/executor.js.map +1 -1
  77. package/dist/executor/prompt/templates.d.ts.map +1 -1
  78. package/dist/executor/prompt/templates.js +15 -15
  79. package/dist/executor/prompt/templates.js.map +1 -1
  80. package/dist/executor/review/model-health.d.ts +28 -0
  81. package/dist/executor/review/model-health.d.ts.map +1 -0
  82. package/dist/executor/review/model-health.js +64 -0
  83. package/dist/executor/review/model-health.js.map +1 -0
  84. package/dist/executor/review/post-fanout-comments.d.ts +7 -0
  85. package/dist/executor/review/post-fanout-comments.d.ts.map +1 -1
  86. package/dist/executor/review/post-fanout-comments.js +17 -3
  87. package/dist/executor/review/post-fanout-comments.js.map +1 -1
  88. package/dist/executor/review/review-provider.d.ts +15 -0
  89. package/dist/executor/review/review-provider.d.ts.map +1 -1
  90. package/dist/executor/review/review-provider.js +78 -1
  91. package/dist/executor/review/review-provider.js.map +1 -1
  92. package/dist/index.d.ts +1 -0
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.js +1 -0
  95. package/dist/index.js.map +1 -1
  96. package/dist/pipeline/cost-summary.d.ts +2 -0
  97. package/dist/pipeline/cost-summary.d.ts.map +1 -1
  98. package/dist/pipeline/cost-summary.js +18 -7
  99. package/dist/pipeline/cost-summary.js.map +1 -1
  100. package/dist/pipeline/review-providers-runner.d.ts.map +1 -1
  101. package/dist/pipeline/review-providers-runner.js +49 -0
  102. package/dist/pipeline/review-providers-runner.js.map +1 -1
  103. package/dist/pipeline/runner-ralph-helpers.d.ts +8 -0
  104. package/dist/pipeline/runner-ralph-helpers.d.ts.map +1 -0
  105. package/dist/pipeline/runner-ralph-helpers.js +15 -0
  106. package/dist/pipeline/runner-ralph-helpers.js.map +1 -0
  107. package/dist/pipeline/runner.d.ts +2 -2
  108. package/dist/pipeline/runner.d.ts.map +1 -1
  109. package/dist/pipeline/runner.js +11 -19
  110. package/dist/pipeline/runner.js.map +1 -1
  111. package/dist/pm/actions/db-queries.d.ts +11 -0
  112. package/dist/pm/actions/db-queries.d.ts.map +1 -1
  113. package/dist/pm/actions/db-queries.js +46 -0
  114. package/dist/pm/actions/db-queries.js.map +1 -1
  115. package/dist/pm/actions/promote.d.ts +5 -4
  116. package/dist/pm/actions/promote.d.ts.map +1 -1
  117. package/dist/pm/actions/promote.js +24 -4
  118. package/dist/pm/actions/promote.js.map +1 -1
  119. package/dist/pm/actions/start-todo.d.ts +4 -3
  120. package/dist/pm/actions/start-todo.d.ts.map +1 -1
  121. package/dist/pm/actions/start-todo.js +29 -8
  122. package/dist/pm/actions/start-todo.js.map +1 -1
  123. package/dist/pm/linear-helpers.d.ts +14 -0
  124. package/dist/pm/linear-helpers.d.ts.map +1 -1
  125. package/dist/pm/linear-helpers.js +23 -0
  126. package/dist/pm/linear-helpers.js.map +1 -1
  127. package/dist/pm/scheduler.d.ts.map +1 -1
  128. package/dist/pm/scheduler.js +22 -23
  129. package/dist/pm/scheduler.js.map +1 -1
  130. package/dist/pm/slack-interface.d.ts +12 -0
  131. package/dist/pm/slack-interface.d.ts.map +1 -1
  132. package/dist/pm/slack-interface.js +16 -10
  133. package/dist/pm/slack-interface.js.map +1 -1
  134. package/dist/repo/git.d.ts +27 -2
  135. package/dist/repo/git.d.ts.map +1 -1
  136. package/dist/repo/git.js +67 -8
  137. package/dist/repo/git.js.map +1 -1
  138. package/dist/security/review-checklist.d.ts +8 -2
  139. package/dist/security/review-checklist.d.ts.map +1 -1
  140. package/dist/security/review-checklist.js +39 -9
  141. package/dist/security/review-checklist.js.map +1 -1
  142. package/dist/types.d.ts +10 -0
  143. package/dist/types.d.ts.map +1 -1
  144. package/dist/types.js +2 -1
  145. package/dist/types.js.map +1 -1
  146. package/package.json +1 -1
@@ -0,0 +1,28 @@
1
+ import type { AnyDb } from "../../db/client.js";
2
+ export interface ModelHealthScore {
3
+ runs: number;
4
+ outputRatio: number;
5
+ lastSeen: Date;
6
+ }
7
+ export interface HealthOptions {
8
+ lookbackHours: number;
9
+ minRuns: number;
10
+ }
11
+ export interface FlagOptions {
12
+ threshold: number;
13
+ minRuns: number;
14
+ }
15
+ /**
16
+ * Aggregate per-model health stats from review_model_runs over a rolling
17
+ * window. Only `status = 'completed'` runs contribute to the output-ratio
18
+ * computation — failed runs typically have zero in/out tokens and would
19
+ * dilute the signal.
20
+ */
21
+ export declare function getModelHealthScores(db: AnyDb, opts: HealthOptions): Promise<Map<string, ModelHealthScore>>;
22
+ /**
23
+ * Filter a list of model IDs down to those that look low-yield given the
24
+ * health scores. Models with insufficient data (`runs < minRuns`) are NOT
25
+ * flagged — we don't want a single bad-luck call to suspend a model.
26
+ */
27
+ export declare function flagLowYieldModels(scores: Map<string, ModelHealthScore>, models: string[], opts: FlagOptions): string[];
28
+ //# sourceMappingURL=model-health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-health.d.ts","sourceRoot":"","sources":["../../../src/executor/review/model-health.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAGhD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,KAAK,EACT,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAuCxC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,EACrC,MAAM,EAAE,MAAM,EAAE,EAChB,IAAI,EAAE,WAAW,GAChB,MAAM,EAAE,CASV"}
@@ -0,0 +1,64 @@
1
+ import { gte } from "drizzle-orm";
2
+ import { reviewModelRuns } from "../../db/schema.js";
3
+ /**
4
+ * Aggregate per-model health stats from review_model_runs over a rolling
5
+ * window. Only `status = 'completed'` runs contribute to the output-ratio
6
+ * computation — failed runs typically have zero in/out tokens and would
7
+ * dilute the signal.
8
+ */
9
+ export async function getModelHealthScores(db, opts) {
10
+ const cutoff = new Date(Date.now() - opts.lookbackHours * 3600_000);
11
+ const rows = await db
12
+ .select({
13
+ modelId: reviewModelRuns.modelId,
14
+ inputTokens: reviewModelRuns.inputTokens,
15
+ outputTokens: reviewModelRuns.outputTokens,
16
+ startedAt: reviewModelRuns.startedAt,
17
+ status: reviewModelRuns.status,
18
+ })
19
+ .from(reviewModelRuns)
20
+ .where(gte(reviewModelRuns.startedAt, cutoff));
21
+ const acc = new Map();
22
+ for (const r of rows) {
23
+ if (r.status !== "completed")
24
+ continue;
25
+ const cur = acc.get(r.modelId) ?? {
26
+ runs: 0,
27
+ sumIn: 0,
28
+ sumOut: 0,
29
+ lastSeen: new Date(0),
30
+ };
31
+ cur.runs += 1;
32
+ cur.sumIn += r.inputTokens;
33
+ cur.sumOut += r.outputTokens;
34
+ if (r.startedAt && r.startedAt > cur.lastSeen)
35
+ cur.lastSeen = r.startedAt;
36
+ acc.set(r.modelId, cur);
37
+ }
38
+ const result = new Map();
39
+ for (const [modelId, v] of acc) {
40
+ const denom = v.sumIn + v.sumOut;
41
+ const outputRatio = denom > 0 ? v.sumOut / denom : 0;
42
+ result.set(modelId, { runs: v.runs, outputRatio, lastSeen: v.lastSeen });
43
+ }
44
+ return result;
45
+ }
46
+ /**
47
+ * Filter a list of model IDs down to those that look low-yield given the
48
+ * health scores. Models with insufficient data (`runs < minRuns`) are NOT
49
+ * flagged — we don't want a single bad-luck call to suspend a model.
50
+ */
51
+ export function flagLowYieldModels(scores, models, opts) {
52
+ const flagged = [];
53
+ for (const modelId of models) {
54
+ const s = scores.get(modelId);
55
+ if (!s)
56
+ continue;
57
+ if (s.runs < opts.minRuns)
58
+ continue;
59
+ if (s.outputRatio < opts.threshold)
60
+ flagged.push(modelId);
61
+ }
62
+ return flagged;
63
+ }
64
+ //# sourceMappingURL=model-health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-health.js","sourceRoot":"","sources":["../../../src/executor/review/model-health.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,13 @@ import type { ReviewModelRun } from "./review-provider.js";
3
3
  export interface PostFanoutResult {
4
4
  /** Number of runs where raw-output fallback was used (structured parse failed). */
5
5
  fallbackCount: number;
6
+ /**
7
+ * Number of per-model comments suppressed because the model returned empty findings
8
+ * with no rawOutput (i.e. the model legitimately found nothing to report).
9
+ * Suppression rule: `findings.length === 0 && rawOutput === undefined && status !== "failed"`.
10
+ * Audit events (`review.fanout_model_completed`) still fire for suppressed runs.
11
+ */
12
+ suppressedEmptyCount: number;
6
13
  }
7
14
  export declare function postFanoutCommentsToPR(octokit: Octokit, owner: string, repo: string, prNumber: number, runs: ReviewModelRun[]): Promise<PostFanoutResult>;
8
15
  export declare function renderRunMarkdown(run: ReviewModelRun): string;
@@ -1 +1 @@
1
- {"version":3,"file":"post-fanout-comments.d.ts","sourceRoot":"","sources":["../../../src/executor/review/post-fanout-comments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,MAAM,WAAW,gBAAgB;IAC/B,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,cAAc,EAAE,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAiB3B;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CA2C7D"}
1
+ {"version":3,"file":"post-fanout-comments.d.ts","sourceRoot":"","sources":["../../../src/executor/review/post-fanout-comments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,MAAM,WAAW,gBAAgB;IAC/B,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,cAAc,EAAE,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAoC3B;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CA2C7D"}
@@ -2,15 +2,29 @@ import { addPRComment } from "../../repo/github.js";
2
2
  import { createLogger } from "../../logger.js";
3
3
  const log = createLogger({ component: "PostFanoutComments" });
4
4
  export async function postFanoutCommentsToPR(octokit, owner, repo, prNumber, runs) {
5
- const results = await Promise.allSettled(runs.map((run) => addPRComment(octokit, owner, repo, prNumber, renderRunMarkdown(run))));
5
+ const toPost = [];
6
+ let suppressedEmptyCount = 0;
7
+ for (const run of runs) {
8
+ const shouldSuppress = run.status !== "failed" &&
9
+ run.findings.length === 0 &&
10
+ run.rawOutput === undefined;
11
+ if (shouldSuppress) {
12
+ suppressedEmptyCount++;
13
+ log.debug({ modelId: run.modelId }, "fanout: suppressing empty-findings comment (no findings, no rawOutput)");
14
+ }
15
+ else {
16
+ toPost.push(run);
17
+ }
18
+ }
19
+ const results = await Promise.allSettled(toPost.map((run) => addPRComment(octokit, owner, repo, prNumber, renderRunMarkdown(run))));
6
20
  results.forEach((res, i) => {
7
21
  if (res.status === "rejected") {
8
22
  const err = res.reason instanceof Error ? res.reason.message : String(res.reason);
9
- log.warn({ modelId: runs[i].modelId, err }, "failed to post fanout PR comment");
23
+ log.warn({ modelId: toPost[i].modelId, err }, "failed to post fanout PR comment");
10
24
  }
11
25
  });
12
26
  const fallbackCount = runs.filter((r) => r.rawOutput !== undefined).length;
13
- return { fallbackCount };
27
+ return { fallbackCount, suppressedEmptyCount };
14
28
  }
15
29
  export function renderRunMarkdown(run) {
16
30
  const tokens = `${run.inputTokens.toLocaleString()} in / ${run.outputTokens.toLocaleString()} out tokens`;
@@ -1 +1 @@
1
- {"version":3,"file":"post-fanout-comments.js","sourceRoot":"","sources":["../../../src/executor/review/post-fanout-comments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"post-fanout-comments.js","sourceRoot":"","sources":["../../../src/executor/review/post-fanout-comments.ts"],"names":[],"mappings":"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"}
@@ -26,4 +26,19 @@ export interface ReviewProvider {
26
26
  runReview(ctx: ReviewContext): Promise<ReviewModelRun[]>;
27
27
  }
28
28
  export declare function getEnabledProviders(env: NodeJS.ProcessEnv): ReviewProvider[];
29
+ /**
30
+ * Validates that every model ID in env.REVIEW_MODELS exists in the OpenRouter
31
+ * catalog. Called at CLI startup (packages/cli/src/commands/start.ts and
32
+ * packages/cli/src/commands/dev.ts) when both REVIEW_MODELS and
33
+ * OPENROUTER_API_KEY are set.
34
+ *
35
+ * Never throws and never blocks startup — if the catalog endpoint is
36
+ * unreachable, a debug log is emitted and validation is skipped. For each
37
+ * unknown model ID a warn is emitted with up to 3 closest-name suggestions so
38
+ * operators can correct typos before they burn API budget on silent 404s.
39
+ *
40
+ * @param env - The process environment (NodeJS.ProcessEnv)
41
+ * @returns Promise<void> — always resolves.
42
+ */
43
+ export declare function validateReviewModels(env: NodeJS.ProcessEnv): Promise<void>;
29
44
  //# sourceMappingURL=review-provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"review-provider.d.ts","sourceRoot":"","sources":["../../../src/executor/review/review-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAOrE,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,YAAY,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,gBAAgB,CAAC;IAC9B,SAAS,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CAC1D;AAcD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,cAAc,EAAE,CA+C5E"}
1
+ {"version":3,"file":"review-provider.d.ts","sourceRoot":"","sources":["../../../src/executor/review/review-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAOrE,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,YAAY,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,gBAAgB,CAAC;IAC9B,SAAS,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CAC1D;AAsBD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,cAAc,EAAE,CA+C5E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAyChF"}
@@ -13,10 +13,17 @@ const DEFAULT_MAX_INPUT_TOKENS = 150_000;
13
13
  * (no auto-correction — preserves operator intent for unusual setups).
14
14
  */
15
15
  const SANE_OUTPUT_TOKENS_FLOOR = 256;
16
+ /** Timeout for the one-shot startup catalog validation fetch. Short on purpose:
17
+ * this is a non-blocking best-effort check and must not delay boot. */
18
+ const CATALOG_FETCH_TIMEOUT_MS = 10_000;
19
+ /** Splits a comma-separated model list, trims whitespace, drops empty entries. */
20
+ function parseModels(raw) {
21
+ return raw.split(",").map((s) => s.trim()).filter(Boolean);
22
+ }
16
23
  export function getEnabledProviders(env) {
17
24
  const providers = [new AgenticDeepReviewProvider()];
18
25
  const rawModels = env.REVIEW_MODELS ?? "";
19
- const models = rawModels.split(",").map((s) => s.trim()).filter(Boolean);
26
+ const models = parseModels(rawModels);
20
27
  const apiKey = env.OPENROUTER_API_KEY ?? "";
21
28
  const fanoutDesired = models.length > 0;
22
29
  const keyPresent = apiKey.length > 0;
@@ -49,6 +56,76 @@ export function getEnabledProviders(env) {
49
56
  }));
50
57
  return providers;
51
58
  }
59
+ /**
60
+ * Validates that every model ID in env.REVIEW_MODELS exists in the OpenRouter
61
+ * catalog. Called at CLI startup (packages/cli/src/commands/start.ts and
62
+ * packages/cli/src/commands/dev.ts) when both REVIEW_MODELS and
63
+ * OPENROUTER_API_KEY are set.
64
+ *
65
+ * Never throws and never blocks startup — if the catalog endpoint is
66
+ * unreachable, a debug log is emitted and validation is skipped. For each
67
+ * unknown model ID a warn is emitted with up to 3 closest-name suggestions so
68
+ * operators can correct typos before they burn API budget on silent 404s.
69
+ *
70
+ * @param env - The process environment (NodeJS.ProcessEnv)
71
+ * @returns Promise<void> — always resolves.
72
+ */
73
+ export async function validateReviewModels(env) {
74
+ const rawModels = env.REVIEW_MODELS ?? "";
75
+ const models = parseModels(rawModels);
76
+ const apiKey = env.OPENROUTER_API_KEY ?? "";
77
+ // Only run when both vars are configured — same symmetric requirement as
78
+ // getEnabledProviders. Return silently when either is absent.
79
+ if (models.length === 0 || !apiKey)
80
+ return;
81
+ const baseUrl = env.OPENROUTER_BASE_URL ?? DEFAULT_BASE_URL;
82
+ const catalogUrl = `${baseUrl}/models`;
83
+ let catalogIds;
84
+ try {
85
+ const resp = await fetch(catalogUrl, { signal: AbortSignal.timeout(CATALOG_FETCH_TIMEOUT_MS) });
86
+ if (!resp.ok) {
87
+ log.debug({ status: resp.status, url: catalogUrl }, "OpenRouter catalog fetch returned non-2xx; skipping REVIEW_MODELS validation");
88
+ return;
89
+ }
90
+ const body = (await resp.json());
91
+ catalogIds = (body.data ?? []).map((m) => m.id);
92
+ }
93
+ catch (err) {
94
+ log.debug({ err, url: catalogUrl }, "OpenRouter catalog fetch failed; skipping REVIEW_MODELS validation");
95
+ return;
96
+ }
97
+ const catalogSet = new Set(catalogIds);
98
+ for (const model of models) {
99
+ if (catalogSet.has(model))
100
+ continue;
101
+ const available = findClosestMatches(model, catalogIds, 3);
102
+ log.warn({ model, available }, "REVIEW_MODELS entry not found in OpenRouter catalog — fanout will 404");
103
+ }
104
+ }
105
+ /** Returns the `n` catalog IDs closest to `target` by Levenshtein distance. */
106
+ function findClosestMatches(target, candidates, n) {
107
+ return candidates
108
+ .map((c) => ({ id: c, dist: levenshtein(target, c) }))
109
+ .sort((a, b) => a.dist - b.dist)
110
+ .slice(0, n)
111
+ .map((x) => x.id);
112
+ }
113
+ /** Space-optimised single-row Levenshtein distance. */
114
+ function levenshtein(a, b) {
115
+ const m = a.length;
116
+ const n = b.length;
117
+ const dp = Array.from({ length: n + 1 }, (_, j) => j);
118
+ for (let i = 1; i <= m; i++) {
119
+ let prev = dp[0];
120
+ dp[0] = i;
121
+ for (let j = 1; j <= n; j++) {
122
+ const temp = dp[j];
123
+ dp[j] = a[i - 1] === b[j - 1] ? prev : 1 + Math.min(prev, dp[j], dp[j - 1]);
124
+ prev = temp;
125
+ }
126
+ }
127
+ return dp[n];
128
+ }
52
129
  function parseIntOr(raw, fallback) {
53
130
  if (!raw)
54
131
  return fallback;
@@ -1 +1 @@
1
- {"version":3,"file":"review-provider.js","sourceRoot":"","sources":["../../../src/executor/review/review-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review-provider.js","sourceRoot":"","sources":["../../../src/executor/review/review-provider.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -17,6 +17,7 @@ export { createWebhookHandler } from "./webhook/index.js";
17
17
  export { CompositeNotifier, LinearNotifier, SlackNotifier, DiscordNotifier, SlackAlertManager, SlackAlertStream, createSlackAlertStream, initSlackAlertManager, getSlackAlertManager, type AlertEntry, } from "./notifier/index.js";
18
18
  export { assemblePrompt, sanitize, mapIssueToSchema } from "./executor/index.js";
19
19
  export { executeStage } from "./executor/index.js";
20
+ export { validateReviewModels } from "./executor/review/review-provider.js";
20
21
  export { validateHandoff, type ValidationResult } from "./executor/validate.js";
21
22
  export { extractHandoff } from "./executor/extract-handoff.js";
22
23
  export { resolveTooling, type ResolvedTools, type PluginSpec } from "./executor/mcp-resolver.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -18,6 +18,7 @@ export { createWebhookHandler } from "./webhook/index.js";
18
18
  export { CompositeNotifier, LinearNotifier, SlackNotifier, DiscordNotifier, SlackAlertManager, SlackAlertStream, createSlackAlertStream, initSlackAlertManager, getSlackAlertManager, } from "./notifier/index.js";
19
19
  export { assemblePrompt, sanitize, mapIssueToSchema } from "./executor/index.js";
20
20
  export { executeStage } from "./executor/index.js";
21
+ export { validateReviewModels } from "./executor/review/review-provider.js";
21
22
  export { validateHandoff } from "./executor/validate.js";
22
23
  export { extractHandoff } from "./executor/extract-handoff.js";
23
24
  export { resolveTooling } from "./executor/mcp-resolver.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@ export interface StageCostBreakdown {
3
3
  stage: string;
4
4
  inputTokens: number;
5
5
  outputTokens: number;
6
+ cacheCreationInputTokens?: number;
7
+ cacheReadInputTokens?: number;
6
8
  /** When present, per-model rows from the fanout review stage. */
7
9
  modelRuns?: ModelRunRow[];
8
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cost-summary.d.ts","sourceRoot":"","sources":["../../src/pipeline/cost-summary.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,eAAe,EAAE,MAAM,CAAC;YAAC,gBAAgB,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACtF,CAAC;IACF,eAAe,CAAC,EAAE,MAAM,CACtB,MAAM,EACN;QACE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,OAAO,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC9B,CACF,CAAC;CACH;AA4DD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,kBAAkB,EAAE,EAC5B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,iBAAiB,GACxB,MAAM,CAuBR"}
1
+ {"version":3,"file":"cost-summary.d.ts","sourceRoot":"","sources":["../../src/pipeline/cost-summary.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iEAAiE;IACjE,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,eAAe,EAAE,MAAM,CAAC;YAAC,gBAAgB,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACtF,CAAC;IACF,eAAe,CAAC,EAAE,MAAM,CACtB,MAAM,EACN;QACE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,OAAO,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC9B,CACF,CAAC;CACH;AA4DD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,kBAAkB,EAAE,EAC5B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,iBAAiB,GACxB,MAAM,CAkCR"}
@@ -42,20 +42,31 @@ function renderStage(stage, pipelineKey, config) {
42
42
  * report (caller should suppress the comment).
43
43
  */
44
44
  export function formatPRCostSummary(stages, pipelineKey, config) {
45
- const rendered = stages
46
- .map((s) => renderStage(s, pipelineKey, config))
47
- .filter((r) => r.inputTokens > 0 || r.outputTokens > 0);
48
- if (rendered.length === 0)
45
+ const pairs = stages
46
+ .map((s) => ({ stage: s, rendered: renderStage(s, pipelineKey, config) }))
47
+ .filter(({ rendered: r }) => r.inputTokens > 0 || r.outputTokens > 0);
48
+ if (pairs.length === 0)
49
49
  return "";
50
+ const rendered = pairs.map(({ rendered: r }) => r);
50
51
  const labelWidth = Math.max(...rendered.map((r) => r.label.length));
51
52
  const inWidth = Math.max(...rendered.map((r) => fmt(r.inputTokens).length));
52
53
  const outWidth = Math.max(...rendered.map((r) => fmt(r.outputTokens).length));
53
- const lines = rendered.map((r) => {
54
+ const lines = [];
55
+ for (const { stage: s, rendered: r } of pairs) {
54
56
  const labelPad = `${r.label}:`.padEnd(labelWidth + 1);
55
57
  const inPad = fmt(r.inputTokens).padStart(inWidth);
56
58
  const outPad = fmt(r.outputTokens).padStart(outWidth);
57
- return `- ${labelPad} ${inPad} in / ${outPad} out tokens — $${r.dollars.toFixed(4)}`;
58
- });
59
+ lines.push(`- ${labelPad} ${inPad} in / ${outPad} out tokens — $${r.dollars.toFixed(4)}`);
60
+ const cacheRead = s.cacheReadInputTokens ?? 0;
61
+ const cacheCreation = s.cacheCreationInputTokens ?? 0;
62
+ if (cacheRead > 0 || cacheCreation > 0) {
63
+ const divisor = cacheRead + cacheCreation + s.inputTokens;
64
+ const pct = divisor > 0 ? Math.round((cacheRead / divisor) * 100) : 0;
65
+ const readK = (cacheRead / 1000).toFixed(1);
66
+ const createdK = (cacheCreation / 1000).toFixed(1);
67
+ lines.push(` cache hit: ${pct}% — read ${readK}K / created ${createdK}K`);
68
+ }
69
+ }
59
70
  const totalDollars = rendered.reduce((a, r) => a + r.dollars, 0);
60
71
  return [
61
72
  "🤖 **Pipeline cost summary**",
@@ -1 +1 @@
1
- {"version":3,"file":"cost-summary.js","sourceRoot":"","sources":["../../src/pipeline/cost-summary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cost-summary.js","sourceRoot":"","sources":["../../src/pipeline/cost-summary.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"review-providers-runner.d.ts","sourceRoot":"","sources":["../../src/pipeline/review-providers-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKjD,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,EAAE,EAAE,KAAK,CAAC;CACX;AAED,MAAM,WAAW,wBAAwB;IACvC,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,wBAAwB,CAAC,CAmDnC"}
1
+ {"version":3,"file":"review-providers-runner.d.ts","sourceRoot":"","sources":["../../src/pipeline/review-providers-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAmBjD,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,EAAE,EAAE,KAAK,CAAC;CACX;AAED,MAAM,WAAW,wBAAwB;IACvC,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,wBAAwB,CAAC,CA4FnC"}
@@ -1,7 +1,22 @@
1
1
  import { getEnabledProviders, } from "../executor/review/review-provider.js";
2
2
  import { insertReviewModelRuns } from "../db/review-model-runs.js";
3
3
  import { createLogger } from "../logger.js";
4
+ import { logAuditEventUnchecked } from "../audit/writer.js";
5
+ import { reviewModelLowOutputRatioEvent } from "../audit/events.js";
6
+ import { getModelHealthScores, flagLowYieldModels } from "../executor/review/model-health.js";
4
7
  const log = createLogger({ component: "ReviewProvidersRunner" });
8
+ function parseFloatOr(envValue, fallback) {
9
+ if (!envValue)
10
+ return fallback;
11
+ const n = parseFloat(envValue);
12
+ return Number.isFinite(n) && n >= 0 ? n : fallback;
13
+ }
14
+ function parseIntOr(envValue, fallback) {
15
+ if (!envValue)
16
+ return fallback;
17
+ const n = parseInt(envValue, 10);
18
+ return Number.isFinite(n) && n >= 0 ? n : fallback;
19
+ }
5
20
  /**
6
21
  * Runs all enabled review providers in sequence and persists their per-model
7
22
  * results to `review_model_runs` when a stage_run row id is provided.
@@ -21,6 +36,40 @@ const log = createLogger({ component: "ReviewProvidersRunner" });
21
36
  export async function runReviewProviders(ctx, opts) {
22
37
  const providers = getEnabledProviders(opts.env);
23
38
  const allRuns = [];
39
+ // BEC-178 follow-up: low-yield review-model health check. Advisory only —
40
+ // emit a warn + audit event for models below threshold; operator removes
41
+ // from REVIEW_MODELS manually. Auto-suspend deliberately scoped out
42
+ // (transient outage feedback-loop risk).
43
+ const modelIds = (opts.env.REVIEW_MODELS ?? "")
44
+ .split(",")
45
+ .map((s) => s.trim())
46
+ .filter(Boolean);
47
+ const healthThreshold = parseFloatOr(process.env.REVIEW_MODELS_MIN_OUTPUT_RATIO, 0.05);
48
+ const healthLookbackHours = parseIntOr(process.env.REVIEW_MODELS_HEALTH_LOOKBACK_HOURS, 168);
49
+ const healthMinRuns = parseIntOr(process.env.REVIEW_MODELS_MIN_RUNS, 5);
50
+ try {
51
+ const scores = await getModelHealthScores(opts.db, {
52
+ lookbackHours: healthLookbackHours,
53
+ minRuns: healthMinRuns,
54
+ });
55
+ const flagged = flagLowYieldModels(scores, modelIds, {
56
+ threshold: healthThreshold,
57
+ minRuns: healthMinRuns,
58
+ });
59
+ for (const modelId of flagged) {
60
+ const s = scores.get(modelId);
61
+ log.warn({ modelId, outputRatio: s.outputRatio, runs: s.runs, threshold: healthThreshold }, `review model below output-ratio threshold — consider removing from REVIEW_MODELS`);
62
+ void logAuditEventUnchecked(opts.db, reviewModelLowOutputRatioEvent({
63
+ modelId,
64
+ outputRatio: s.outputRatio,
65
+ runs: s.runs,
66
+ threshold: healthThreshold,
67
+ }));
68
+ }
69
+ }
70
+ catch (err) {
71
+ log.warn({ err }, "model-health probe failed — skipping flagging this tick");
72
+ }
24
73
  for (const p of providers) {
25
74
  try {
26
75
  const runs = await p.runReview(ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"review-providers-runner.js","sourceRoot":"","sources":["../../src/pipeline/review-providers-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,GAGpB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAAC,CAAC;AAcjE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAkB,EAClB,IAA4B;IAE5B,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,OAAO,GAAqB,EAAE,CAAC;IAErC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CACN,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAC3E,uDAAuD,CACxD,CAAC;YACF,OAAO,CAAC,IAAI,CAAC;gBACX,OAAO,EAAE,CAAC,CAAC,EAAE;gBACb,UAAU,EAAE,CAAC,CAAC,EAAE;gBAChB,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,CAAC;gBACd,YAAY,EAAE,CAAC;gBACf,UAAU,EAAE,CAAC;gBACb,YAAY,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aAC/D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CACN,EAAE,GAAG,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACzD,2CAA2C,CAC5C,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,IAAI,CACN,8EAA8E,CAC/E,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,OAAO;SAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC;SACzC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAE9B,OAAO;QACL,eAAe;QACf,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAChE,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;QAClE,OAAO;KACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"review-providers-runner.js","sourceRoot":"","sources":["../../src/pipeline/review-providers-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Pure helper for RALPH iteration computation — extracted to enable unit testing
3
+ * without pulling in the full runner module. (BEC-182)
4
+ */
5
+ export declare function computeEffectiveRalphIterations(run: {
6
+ runType?: string | null;
7
+ }, configIterations: number | undefined, hasDeepReviewLicense: boolean): number;
8
+ //# sourceMappingURL=runner-ralph-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner-ralph-helpers.d.ts","sourceRoot":"","sources":["../../src/pipeline/runner-ralph-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAChC,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,oBAAoB,EAAE,OAAO,GAC5B,MAAM,CAOR"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Pure helper for RALPH iteration computation — extracted to enable unit testing
3
+ * without pulling in the full runner module. (BEC-182)
4
+ */
5
+ export function computeEffectiveRalphIterations(run, configIterations, hasDeepReviewLicense) {
6
+ // BEC-182: skip RALPH for review-feedback runs — RALPH re-evaluates against
7
+ // the original issue ACs but feedback work is bounded to the comments, not
8
+ // the full ACs. RALPH adds turn cost without value here.
9
+ if (run.runType === "review-feedback")
10
+ return 0;
11
+ if (hasDeepReviewLicense)
12
+ return configIterations ?? 2;
13
+ return Math.min(configIterations ?? 1, 1);
14
+ }
15
+ //# sourceMappingURL=runner-ralph-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner-ralph-helpers.js","sourceRoot":"","sources":["../../src/pipeline/runner-ralph-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,+BAA+B,CAC7C,GAAgC,EAChC,gBAAoC,EACpC,oBAA6B;IAE7B,4EAA4E;IAC5E,2EAA2E;IAC3E,yDAAyD;IACzD,IAAI,GAAG,CAAC,OAAO,KAAK,iBAAiB;QAAE,OAAO,CAAC,CAAC;IAChD,IAAI,oBAAoB;QAAE,OAAO,gBAAgB,IAAI,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5C,CAAC"}
@@ -126,8 +126,8 @@ export declare class PipelineRunner {
126
126
  recoverStuckRuns(): Promise<void>;
127
127
  /**
128
128
  * Run `git worktree prune` on every repository directory found under
129
- * repoCloneDir. Uses gitExecSafe so failures (e.g. non-git directories)
130
- * are silently ignored.
129
+ * repoCloneDir. BEC-180: skips entries with no `.git/` (e.g. the BEC-174
130
+ * `.agent-sweep/` parent dir) so they don't produce noisy ERROR logs.
131
131
  */
132
132
  private pruneAllWorktreeRefs;
133
133
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/pipeline/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/pipeline/runner.ts"],"names":[],"mappings":"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"}