@urateam/core 0.1.34 → 0.1.36
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.
- package/dist/__tests__/audit-immutability.test.js +7 -0
- package/dist/__tests__/audit-immutability.test.js.map +1 -1
- package/dist/__tests__/auto-deep-review.test.d.ts +2 -0
- package/dist/__tests__/auto-deep-review.test.d.ts.map +1 -0
- package/dist/__tests__/auto-deep-review.test.js +250 -0
- package/dist/__tests__/auto-deep-review.test.js.map +1 -0
- package/dist/__tests__/review-convention-prompt.test.d.ts +2 -0
- package/dist/__tests__/review-convention-prompt.test.d.ts.map +1 -0
- package/dist/__tests__/review-convention-prompt.test.js +142 -0
- package/dist/__tests__/review-convention-prompt.test.js.map +1 -0
- package/dist/audit/events.d.ts +22 -0
- package/dist/audit/events.d.ts.map +1 -1
- package/dist/audit/events.js +21 -0
- package/dist/audit/events.js.map +1 -1
- package/dist/executor/prompt/templates.d.ts.map +1 -1
- package/dist/executor/prompt/templates.js +6 -3
- package/dist/executor/prompt/templates.js.map +1 -1
- package/dist/executor/review/review-prompt.d.ts.map +1 -1
- package/dist/executor/review/review-prompt.js +8 -2
- package/dist/executor/review/review-prompt.js.map +1 -1
- package/dist/pipeline/auto-deep-review.d.ts +70 -0
- package/dist/pipeline/auto-deep-review.d.ts.map +1 -0
- package/dist/pipeline/auto-deep-review.js +86 -0
- package/dist/pipeline/auto-deep-review.js.map +1 -0
- package/dist/pipeline/runner.d.ts.map +1 -1
- package/dist/pipeline/runner.js +71 -8
- package/dist/pipeline/runner.js.map +1 -1
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +1 -1
- package/dist/security/index.js.map +1 -1
- package/dist/security/review-checklist.d.ts +16 -1
- package/dist/security/review-checklist.d.ts.map +1 -1
- package/dist/security/review-checklist.js +85 -1
- package/dist/security/review-checklist.js.map +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +26 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SECURITY_REVIEW_CHECKLIST, REVIEW_OUTPUT_FORMAT, } from "../../security/review-checklist.js";
|
|
1
|
+
import { SECURITY_REVIEW_CHECKLIST, PROJECT_CONVENTION_CHECKLIST, REVIEW_OUTPUT_FORMAT, } from "../../security/review-checklist.js";
|
|
2
2
|
import { sanitize } from "./sanitizer.js";
|
|
3
3
|
// ---------------------------------------------------------------------------
|
|
4
4
|
// XML-escape helper (prevents reviewer content from breaking prompt structure)
|
|
@@ -292,9 +292,12 @@ ${handoffBlock(handoff)}
|
|
|
292
292
|
|
|
293
293
|
${SECURITY_REVIEW_CHECKLIST}
|
|
294
294
|
|
|
295
|
+
${PROJECT_CONVENTION_CHECKLIST}
|
|
296
|
+
|
|
295
297
|
Instructions:
|
|
296
|
-
- Review all changed files for correctness, style,
|
|
297
|
-
- Apply the security checklist
|
|
298
|
+
- Review all changed files for correctness, style, security, AND adherence to the Project Convention Checklist above.
|
|
299
|
+
- Apply the security checklist to every change.
|
|
300
|
+
- Apply the Tier 2 convention checklist to every change. The 9 categories (scratch-files, db-ddl-drift, audit-bypass-undocumented, credential-in-interface, spec-vs-impl, convention-execfile, convention-console, convention-throw, convention-as-any) are blocking-severity by default — use them verbatim in your \`ReviewFinding.category\` field so operators see one consistent vocabulary across the deterministic gates (Tiers 1a/1b/1c) and your findings.
|
|
298
301
|
- IMPORTANT: Cross-reference the implementation against the acceptance criteria listed in the issue data above. For each criterion, verify there is corresponding code in the diff. If any acceptance criterion is NOT addressed by the code changes, report it as a blocking finding with category "incomplete-implementation".
|
|
299
302
|
- DEAD CODE CHECK: For every new export (function, class, constant) in the changed files, use Grep to check if it is imported and called from at least one file other than its own test file. Re-exports in index/barrel files do NOT count as callers — there must be an actual invocation. Exception: side-effect-only registrations that run at import time are acceptable. If a new export has no callers outside its definition and test files, report it as a BLOCKING finding with category "dead-code" — the implementation is not wired into the pipeline and will have no effect at runtime.
|
|
300
303
|
- DOCUMENTATION CHECK: If the changes introduce new configuration options, CLI flags, environment variables, or change existing behavior, check whether CLAUDE.md, README.md, or deploy/README.md were updated. If documentation was not updated, report it as a warning finding with category "missing-documentation".
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/executor/prompt/templates.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/executor/prompt/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-prompt.d.ts","sourceRoot":"","sources":["../../../src/executor/review/review-prompt.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"review-prompt.d.ts","sourceRoot":"","sources":["../../../src/executor/review/review-prompt.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE/F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAwB1D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,WAAW,CAkDtE;AA0CD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE,CAqBhE"}
|
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { ReviewFindingSchema } from "../../types.js";
|
|
3
|
-
|
|
3
|
+
import { PROJECT_CONVENTION_CHECKLIST } from "../../security/review-checklist.js";
|
|
4
|
+
const SYSTEM_PROMPT = `You are a careful code reviewer. Review the diff and changed files for issues in three dimensions plus the urateam project conventions enumerated below.
|
|
5
|
+
|
|
6
|
+
Primary dimensions:
|
|
4
7
|
- reuse: duplication of existing code
|
|
5
8
|
- quality: bugs, error-handling, type misuse, edge cases
|
|
6
9
|
- efficiency: needless work, N+1 queries, hot-loop allocations
|
|
7
10
|
|
|
11
|
+
${PROJECT_CONVENTION_CHECKLIST}
|
|
12
|
+
|
|
8
13
|
Output exactly one JSON object and nothing else, matching this shape:
|
|
9
14
|
{ "findings": [
|
|
10
15
|
{ "severity": "blocking" | "warning" | "suggestion",
|
|
11
16
|
"file": "path/to/file.ext",
|
|
12
17
|
"line": <integer>,
|
|
13
|
-
"category": "reuse" | "quality" | "efficiency",
|
|
18
|
+
"category": "reuse" | "quality" | "efficiency" | "scratch-files" | "db-ddl-drift" | "audit-bypass-undocumented" | "credential-in-interface" | "spec-vs-impl" | "convention-execfile" | "convention-console" | "convention-throw" | "convention-as-any",
|
|
14
19
|
"description": "<concise>",
|
|
15
20
|
"fix": "<concrete suggestion>" }
|
|
16
21
|
]
|
|
17
22
|
}
|
|
23
|
+
Use the Tier 2 project-convention category strings VERBATIM for convention violations — operators see one consistent vocabulary across both the main review agent and the OpenRouter fanout.
|
|
18
24
|
Return an empty findings array if you find nothing.`;
|
|
19
25
|
/** Cheap heuristic: ~4 chars/token. Good enough to gate truncation. */
|
|
20
26
|
export function estimateTokens(s) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-prompt.js","sourceRoot":"","sources":["../../../src/executor/review/review-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAA4C,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"review-prompt.js","sourceRoot":"","sources":["../../../src/executor/review/review-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tier 3 — auto-deep-review thresholds.
|
|
3
|
+
*
|
|
4
|
+
* Promotes the deep-review fanout from opt-in (`config.deepReviewPasses ?? 0`)
|
|
5
|
+
* to default-on for PRs above heuristic thresholds. The decision logic lives
|
|
6
|
+
* here as pure functions; the runner reads `shouldAutoDeepReview(...)` and
|
|
7
|
+
* bumps `deepReviewPasses` to at least 1 when the heuristic fires.
|
|
8
|
+
*
|
|
9
|
+
* Three thresholds — any one trips:
|
|
10
|
+
* • newFiles ≥ N — proxy for "non-trivial scope"
|
|
11
|
+
* • totalLines ≥ N — measures actual diff size
|
|
12
|
+
* • newPublicExports ≥ N — surface-area changes (new functions/types)
|
|
13
|
+
*
|
|
14
|
+
* Defaults: { newFiles: 5, totalLines: 200, newPublicExports: 2 } — per the
|
|
15
|
+
* operator brief.
|
|
16
|
+
*
|
|
17
|
+
* Escape hatches:
|
|
18
|
+
* 1. `URATEAM_DISABLE_AUTO_DEEP_REVIEW=true` short-circuits the heuristic.
|
|
19
|
+
* 2. Per-pipeline `autoDeepReviewThresholds: { newFiles: 999999, ... }`
|
|
20
|
+
* raises the bar so the heuristic effectively never fires.
|
|
21
|
+
*
|
|
22
|
+
* Deep-review findings remain blocking-by-default (Tier 3 design); the
|
|
23
|
+
* existing review-fix loop already escalates blocking findings, so no
|
|
24
|
+
* runner-side blocking-flag mechanism is needed beyond bumping
|
|
25
|
+
* `deepReviewPasses`.
|
|
26
|
+
*/
|
|
27
|
+
export interface AutoDeepReviewThresholds {
|
|
28
|
+
/** Number of files changed (added + modified + deleted) in the diff. */
|
|
29
|
+
changedFiles: number;
|
|
30
|
+
/** Sum of insertions + deletions across the diff. */
|
|
31
|
+
totalLines: number;
|
|
32
|
+
/** Number of newly-added top-level `export` lines under source paths. */
|
|
33
|
+
newPublicExports: number;
|
|
34
|
+
}
|
|
35
|
+
export declare const DEFAULT_AUTO_DEEP_REVIEW_THRESHOLDS: AutoDeepReviewThresholds;
|
|
36
|
+
export interface DiffMetrics {
|
|
37
|
+
/** Number of files changed (added + modified + deleted) in the diff. The
|
|
38
|
+
* `git diff --stat` "N files changed" line counts all three; the threshold
|
|
39
|
+
* is named accordingly to avoid the older `newFiles` misnomer the brief
|
|
40
|
+
* used. */
|
|
41
|
+
changedFiles: number;
|
|
42
|
+
/** Sum of insertions and deletions across the diff. */
|
|
43
|
+
totalLines: number;
|
|
44
|
+
/** Count of newly-added top-level `export` lines under monorepo
|
|
45
|
+
* `packages/<pkg>/src/` OR repo-root `src/` (for non-monorepo
|
|
46
|
+
* consumers), excluding `__tests__/`. Counts named exports (`export
|
|
47
|
+
* function`, `export class`, ...), default exports (`export default
|
|
48
|
+
* ...`), named re-exports (`export { foo }`), and wildcard re-exports
|
|
49
|
+
* (`export * from`). */
|
|
50
|
+
newPublicExports: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Pure parser: scans a unified diff for newly-added `export` declarations
|
|
54
|
+
* under `packages/<pkg>/src/` (excluding `__tests__/`). Used by Tier 3's heuristic
|
|
55
|
+
* to decide whether the diff introduces enough new public surface area to
|
|
56
|
+
* warrant a deep review.
|
|
57
|
+
*
|
|
58
|
+
* Counts only LINES — does not deduplicate by symbol. The heuristic is
|
|
59
|
+
* "approximately how much new public surface is in the diff", not "exact
|
|
60
|
+
* symbol count", so per-line counting is the right level.
|
|
61
|
+
*/
|
|
62
|
+
export declare function countNewPublicExports(diff: string): number;
|
|
63
|
+
/**
|
|
64
|
+
* Decide whether to force an auto-deep-review pass. Honors the env-var
|
|
65
|
+
* escape hatch first; otherwise compares each metric against its threshold
|
|
66
|
+
* (any one tripping is sufficient — these are alternative triggers, not
|
|
67
|
+
* AND-ed conditions).
|
|
68
|
+
*/
|
|
69
|
+
export declare function shouldAutoDeepReview(metrics: DiffMetrics, thresholds?: AutoDeepReviewThresholds): boolean;
|
|
70
|
+
//# sourceMappingURL=auto-deep-review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-deep-review.d.ts","sourceRoot":"","sources":["../../src/pipeline/auto-deep-review.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,WAAW,wBAAwB;IACvC,wEAAwE;IACxE,YAAY,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,mCAAmC,EAAE,wBAIjD,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B;;;gBAGY;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;6BAKyB;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAiBD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoB1D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,WAAW,EACpB,UAAU,GAAE,wBAA8D,GACzE,OAAO,CAOT"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tier 3 — auto-deep-review thresholds.
|
|
3
|
+
*
|
|
4
|
+
* Promotes the deep-review fanout from opt-in (`config.deepReviewPasses ?? 0`)
|
|
5
|
+
* to default-on for PRs above heuristic thresholds. The decision logic lives
|
|
6
|
+
* here as pure functions; the runner reads `shouldAutoDeepReview(...)` and
|
|
7
|
+
* bumps `deepReviewPasses` to at least 1 when the heuristic fires.
|
|
8
|
+
*
|
|
9
|
+
* Three thresholds — any one trips:
|
|
10
|
+
* • newFiles ≥ N — proxy for "non-trivial scope"
|
|
11
|
+
* • totalLines ≥ N — measures actual diff size
|
|
12
|
+
* • newPublicExports ≥ N — surface-area changes (new functions/types)
|
|
13
|
+
*
|
|
14
|
+
* Defaults: { newFiles: 5, totalLines: 200, newPublicExports: 2 } — per the
|
|
15
|
+
* operator brief.
|
|
16
|
+
*
|
|
17
|
+
* Escape hatches:
|
|
18
|
+
* 1. `URATEAM_DISABLE_AUTO_DEEP_REVIEW=true` short-circuits the heuristic.
|
|
19
|
+
* 2. Per-pipeline `autoDeepReviewThresholds: { newFiles: 999999, ... }`
|
|
20
|
+
* raises the bar so the heuristic effectively never fires.
|
|
21
|
+
*
|
|
22
|
+
* Deep-review findings remain blocking-by-default (Tier 3 design); the
|
|
23
|
+
* existing review-fix loop already escalates blocking findings, so no
|
|
24
|
+
* runner-side blocking-flag mechanism is needed beyond bumping
|
|
25
|
+
* `deepReviewPasses`.
|
|
26
|
+
*/
|
|
27
|
+
export const DEFAULT_AUTO_DEEP_REVIEW_THRESHOLDS = {
|
|
28
|
+
changedFiles: 5,
|
|
29
|
+
totalLines: 200,
|
|
30
|
+
newPublicExports: 2,
|
|
31
|
+
};
|
|
32
|
+
const EXPORT_REGEX = /^\+export\s+(default\s+)?(async\s+)?(function|class|const|let|interface|type|enum|\{|\*)/;
|
|
33
|
+
const PATH_HEADER_REGEX = /^\+\+\+ b\/(.+)$/;
|
|
34
|
+
/** Source paths that count toward `newPublicExports`:
|
|
35
|
+
* - `packages/<pkg>/src/...` — monorepo case
|
|
36
|
+
* - `src/...` — non-monorepo case (single-package projects)
|
|
37
|
+
* Both exclude `__tests__/` (tests aren't public surface).
|
|
38
|
+
*/
|
|
39
|
+
const SOURCE_PATH_MONOREPO = /^packages\/[^/]+\/src\//;
|
|
40
|
+
const SOURCE_PATH_SINGLE = /^src\//;
|
|
41
|
+
const TESTS_PATH_FRAGMENT = "/__tests__/";
|
|
42
|
+
/**
|
|
43
|
+
* Pure parser: scans a unified diff for newly-added `export` declarations
|
|
44
|
+
* under `packages/<pkg>/src/` (excluding `__tests__/`). Used by Tier 3's heuristic
|
|
45
|
+
* to decide whether the diff introduces enough new public surface area to
|
|
46
|
+
* warrant a deep review.
|
|
47
|
+
*
|
|
48
|
+
* Counts only LINES — does not deduplicate by symbol. The heuristic is
|
|
49
|
+
* "approximately how much new public surface is in the diff", not "exact
|
|
50
|
+
* symbol count", so per-line counting is the right level.
|
|
51
|
+
*/
|
|
52
|
+
export function countNewPublicExports(diff) {
|
|
53
|
+
let currentFile = null;
|
|
54
|
+
let currentFileInScope = false;
|
|
55
|
+
let count = 0;
|
|
56
|
+
for (const line of diff.split("\n")) {
|
|
57
|
+
const pathMatch = PATH_HEADER_REGEX.exec(line);
|
|
58
|
+
if (pathMatch) {
|
|
59
|
+
currentFile = pathMatch[1];
|
|
60
|
+
currentFileInScope =
|
|
61
|
+
(SOURCE_PATH_MONOREPO.test(currentFile) ||
|
|
62
|
+
SOURCE_PATH_SINGLE.test(currentFile)) &&
|
|
63
|
+
!currentFile.includes(TESTS_PATH_FRAGMENT);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (!currentFile || !currentFileInScope)
|
|
67
|
+
continue;
|
|
68
|
+
if (EXPORT_REGEX.test(line))
|
|
69
|
+
count++;
|
|
70
|
+
}
|
|
71
|
+
return count;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Decide whether to force an auto-deep-review pass. Honors the env-var
|
|
75
|
+
* escape hatch first; otherwise compares each metric against its threshold
|
|
76
|
+
* (any one tripping is sufficient — these are alternative triggers, not
|
|
77
|
+
* AND-ed conditions).
|
|
78
|
+
*/
|
|
79
|
+
export function shouldAutoDeepReview(metrics, thresholds = DEFAULT_AUTO_DEEP_REVIEW_THRESHOLDS) {
|
|
80
|
+
if (process.env.URATEAM_DISABLE_AUTO_DEEP_REVIEW === "true")
|
|
81
|
+
return false;
|
|
82
|
+
return (metrics.changedFiles >= thresholds.changedFiles ||
|
|
83
|
+
metrics.totalLines >= thresholds.totalLines ||
|
|
84
|
+
metrics.newPublicExports >= thresholds.newPublicExports);
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=auto-deep-review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-deep-review.js","sourceRoot":"","sources":["../../src/pipeline/auto-deep-review.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAWH,MAAM,CAAC,MAAM,mCAAmC,GAA6B;IAC3E,YAAY,EAAE,CAAC;IACf,UAAU,EAAE,GAAG;IACf,gBAAgB,EAAE,CAAC;CACpB,CAAC;AAmBF,MAAM,YAAY,GAChB,0FAA0F,CAAC;AAE7F,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAE7C;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,yBAAyB,CAAC;AACvD,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAEpC,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAE1C;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,IAAI,WAAW,GAAkB,IAAI,CAAC;IACtC,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,SAAS,EAAE,CAAC;YACd,WAAW,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;YAC5B,kBAAkB;gBAChB,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC;oBACrC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBACvC,CAAC,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YAC7C,SAAS;QACX,CAAC;QACD,IAAI,CAAC,WAAW,IAAI,CAAC,kBAAkB;YAAE,SAAS;QAClD,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,KAAK,EAAE,CAAC;IACvC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAoB,EACpB,aAAuC,mCAAmC;IAE1E,IAAI,OAAO,CAAC,GAAG,CAAC,gCAAgC,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1E,OAAO,CACL,OAAO,CAAC,YAAY,IAAI,UAAU,CAAC,YAAY;QAC/C,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU;QAC3C,OAAO,CAAC,gBAAgB,IAAI,UAAU,CAAC,gBAAgB,CACxD,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/pipeline/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EAEV,QAAQ,EACR,WAAW,EAEX,cAAc,EAIf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAajD,OAAO,EAA+C,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/pipeline/runner.ts"],"names":[],"mappings":"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"}
|
package/dist/pipeline/runner.js
CHANGED
|
@@ -21,7 +21,7 @@ import { homedir } from "node:os";
|
|
|
21
21
|
import { execFile as execFileCb } from "node:child_process";
|
|
22
22
|
import { promisify } from "node:util";
|
|
23
23
|
const execFileAsync = promisify(execFileCb);
|
|
24
|
-
import { cloneRepo, createWorktree, deleteWorktree, pushBranch, pushBranchForce, choosePushStrategy, rebaseBranch, abortRebase, autoCommitChanges, getAgentCommits, createPRViaCli, mergePRViaCli, getDiffLineCount, getChangedFiles, checkDuplicateBranch, branchName, pruneWorktreesInRepoDirs, } from "../repo/git.js";
|
|
24
|
+
import { cloneRepo, createWorktree, deleteWorktree, pushBranch, pushBranchForce, choosePushStrategy, rebaseBranch, abortRebase, autoCommitChanges, getAgentCommits, createPRViaCli, mergePRViaCli, getDiffLineCount, getChangedFiles, checkDuplicateBranch, branchName, pruneWorktreesInRepoDirs, gitExecSafe, } from "../repo/git.js";
|
|
25
25
|
import { addPRComment, createGitHubClient, createPR, prHasCommentStartingWith, } from "../repo/github.js";
|
|
26
26
|
import { createMR, buildAuthenticatedUrl, } from "../repo/gitlab.js";
|
|
27
27
|
import { parseRepoUrl, parseGitLabUrl } from "../repo/config.js";
|
|
@@ -36,11 +36,12 @@ import { createLogger, runWithLogContext } from "../logger.js";
|
|
|
36
36
|
import { isTransientError, MAX_TRANSIENT_RETRIES } from "./error-classifier.js";
|
|
37
37
|
import { evaluatePolicyGates } from "../policy/evaluate.js";
|
|
38
38
|
import { buildReviewerRequest, verifyApprovalsReceived } from "../policy/index.js";
|
|
39
|
-
import { logAuditEvent, policyReviewersRequestedEvent, reviewFanoutFallbackUsedEvent, pipelineScratchFilesBlockedEvent, pipelineTypecheckFailedEvent, pipelineSpecVsImplFailedEvent, } from "../audit/index.js";
|
|
39
|
+
import { logAuditEvent, policyReviewersRequestedEvent, reviewFanoutFallbackUsedEvent, pipelineScratchFilesBlockedEvent, pipelineTypecheckFailedEvent, pipelineSpecVsImplFailedEvent, pipelineAutoDeepReviewBumpedEvent, } from "../audit/index.js";
|
|
40
40
|
import { matchesAnyPattern } from "../util/glob.js";
|
|
41
41
|
import { findScratchFiles } from "./scratch-file-guard.js";
|
|
42
42
|
import { runTypecheck } from "./typecheck-gate.js";
|
|
43
43
|
import { checkSpecVsImpl } from "./spec-vs-impl-gate.js";
|
|
44
|
+
import { countNewPublicExports, shouldAutoDeepReview, DEFAULT_AUTO_DEEP_REVIEW_THRESHOLDS, } from "./auto-deep-review.js";
|
|
44
45
|
import { startFeedbackPipeline, } from "./feedback-pipeline.js";
|
|
45
46
|
// Re-export from extracted module so existing callers (including tests) still
|
|
46
47
|
// find buildReviewFeedbackContext at pipeline/runner.js without changing their
|
|
@@ -1051,13 +1052,62 @@ export class PipelineRunner {
|
|
|
1051
1052
|
// run 3 parallel sub-agents (reuse, quality, efficiency) to harden code
|
|
1052
1053
|
// quality. Configurable via deepReviewPasses (default 0/disabled) and
|
|
1053
1054
|
// maxDeepReviewPasses (hard cap, default 3).
|
|
1054
|
-
|
|
1055
|
+
let effectiveDeepReviewPasses = isFeatureLicensed("deep-review")
|
|
1055
1056
|
? config.deepReviewPasses ?? 0
|
|
1056
1057
|
: 0;
|
|
1057
|
-
const deepReviewPasses = effectiveDeepReviewPasses;
|
|
1058
|
-
const maxDeepReviewPasses = config.maxDeepReviewPasses ?? 3;
|
|
1059
1058
|
const hasReview = config.stages.includes("review");
|
|
1060
1059
|
const hasImplement = config.stages.includes("implement");
|
|
1060
|
+
// Tier 3 — auto-bump deepReviewPasses to ≥1 when the agent's diff trips
|
|
1061
|
+
// any of the heuristic thresholds (changedFiles / totalLines /
|
|
1062
|
+
// newPublicExports). The agentic deep-review provider runs on Claude
|
|
1063
|
+
// and is enabled by `deep-review` license alone — no OpenRouter env
|
|
1064
|
+
// vars required. OpenRouter fanout is an additional provider that
|
|
1065
|
+
// runs on top when its env vars are set, but the bump is useful
|
|
1066
|
+
// regardless because the agentic provider always activates.
|
|
1067
|
+
if (isFeatureLicensed("deep-review") && hasReview && hasImplement) {
|
|
1068
|
+
try {
|
|
1069
|
+
const diffOut = await gitExecSafe(["diff", "--stat", `origin/${repoConfig.defaultBranch}...HEAD`], worktreePath);
|
|
1070
|
+
// "N files changed, X insertions(+), Y deletions(-)" — last line.
|
|
1071
|
+
// git diff --stat reports changed (added + modified + deleted) — the
|
|
1072
|
+
// field is named `changedFiles` to match.
|
|
1073
|
+
const tail = diffOut.split("\n").filter(Boolean).pop() ?? "";
|
|
1074
|
+
const changedFilesMatch = /^\s*(\d+)\s+files? changed/.exec(tail);
|
|
1075
|
+
const insertionsMatch = /(\d+)\s+insertion/.exec(tail);
|
|
1076
|
+
const deletionsMatch = /(\d+)\s+deletion/.exec(tail);
|
|
1077
|
+
const changedFiles = changedFilesMatch ? Number(changedFilesMatch[1]) : 0;
|
|
1078
|
+
const totalLines = (insertionsMatch ? Number(insertionsMatch[1]) : 0) +
|
|
1079
|
+
(deletionsMatch ? Number(deletionsMatch[1]) : 0);
|
|
1080
|
+
const fullDiff = await gitExecSafe(["diff", `origin/${repoConfig.defaultBranch}...HEAD`], worktreePath);
|
|
1081
|
+
const newPublicExports = countNewPublicExports(fullDiff);
|
|
1082
|
+
const thresholds = config.autoDeepReviewThresholds ??
|
|
1083
|
+
DEFAULT_AUTO_DEEP_REVIEW_THRESHOLDS;
|
|
1084
|
+
if (shouldAutoDeepReview({ changedFiles, totalLines, newPublicExports }, thresholds)) {
|
|
1085
|
+
const bumped = Math.max(effectiveDeepReviewPasses, 1);
|
|
1086
|
+
if (bumped > effectiveDeepReviewPasses) {
|
|
1087
|
+
runLog.info({
|
|
1088
|
+
metrics: { changedFiles, totalLines, newPublicExports },
|
|
1089
|
+
thresholds,
|
|
1090
|
+
from: effectiveDeepReviewPasses,
|
|
1091
|
+
to: bumped,
|
|
1092
|
+
}, "auto-deep-review: thresholds tripped — forcing deepReviewPasses ≥ 1");
|
|
1093
|
+
await logAuditEvent(this.db, pipelineAutoDeepReviewBumpedEvent({
|
|
1094
|
+
runId,
|
|
1095
|
+
issueId: sanitizedIssue.id,
|
|
1096
|
+
metrics: { changedFiles, totalLines, newPublicExports },
|
|
1097
|
+
thresholds,
|
|
1098
|
+
from: effectiveDeepReviewPasses,
|
|
1099
|
+
to: bumped,
|
|
1100
|
+
}));
|
|
1101
|
+
effectiveDeepReviewPasses = bumped;
|
|
1102
|
+
}
|
|
1103
|
+
}
|
|
1104
|
+
}
|
|
1105
|
+
catch (autoErr) {
|
|
1106
|
+
runLog.warn({ err: autoErr }, "auto-deep-review: heuristic evaluation failed — proceeding with configured deepReviewPasses");
|
|
1107
|
+
}
|
|
1108
|
+
}
|
|
1109
|
+
const deepReviewPasses = effectiveDeepReviewPasses;
|
|
1110
|
+
const maxDeepReviewPasses = config.maxDeepReviewPasses ?? 3;
|
|
1061
1111
|
if (deepReviewPasses > 0 && hasReview && hasImplement) {
|
|
1062
1112
|
// Cap deep review iterations against maxReviewPasses
|
|
1063
1113
|
const passLimit = Math.min(deepReviewPasses, maxDeepReviewPasses);
|
|
@@ -1203,17 +1253,30 @@ export class PipelineRunner {
|
|
|
1203
1253
|
handoff = drReviewResult.handoffArtifact;
|
|
1204
1254
|
// Merge deep review findings into handoff context so downstream logic
|
|
1205
1255
|
// (e.g. auto-merge gate) can see them as standard ReviewFindings.
|
|
1256
|
+
//
|
|
1257
|
+
// Tier 3 — when `deepReviewFindingsAreBlocking` is true (default),
|
|
1258
|
+
// upgrade every deep-review finding's severity to "blocking" so it
|
|
1259
|
+
// forces draft. Operators who want the pre-Tier-3 advisory behavior
|
|
1260
|
+
// can set `deepReviewFindingsAreBlocking: false` per pipeline.
|
|
1206
1261
|
if (handoff && deepResult.findings.length > 0) {
|
|
1207
|
-
|
|
1208
|
-
|
|
1262
|
+
const findingsAreBlocking = config.deepReviewFindingsAreBlocking ?? true;
|
|
1263
|
+
const incoming = findingsAreBlocking
|
|
1264
|
+
? deepResult.findings.map((f) => ({ ...f, severity: "blocking" }))
|
|
1265
|
+
: deepResult.findings;
|
|
1209
1266
|
const existingFindings = handoff.context.reviewFindings ?? [];
|
|
1210
1267
|
handoff = {
|
|
1211
1268
|
...handoff,
|
|
1212
1269
|
context: {
|
|
1213
1270
|
...handoff.context,
|
|
1214
|
-
reviewFindings: [...existingFindings, ...
|
|
1271
|
+
reviewFindings: [...existingFindings, ...incoming],
|
|
1215
1272
|
},
|
|
1216
1273
|
};
|
|
1274
|
+
if (findingsAreBlocking) {
|
|
1275
|
+
runLog.info({
|
|
1276
|
+
drPass,
|
|
1277
|
+
upgraded: deepResult.findings.length,
|
|
1278
|
+
}, "deep review: findings upgraded to blocking (Tier 3 deepReviewFindingsAreBlocking)");
|
|
1279
|
+
}
|
|
1217
1280
|
}
|
|
1218
1281
|
}
|
|
1219
1282
|
}
|