@prism-d1/cli 1.10.1 → 1.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/kirocrew-app/skills/prism-fix-findings/SKILL.md +19 -12
- package/dist/src/codewatch/config.d.ts +33 -0
- package/dist/src/codewatch/config.d.ts.map +1 -1
- package/dist/src/codewatch/config.js +83 -0
- package/dist/src/codewatch/config.js.map +1 -1
- package/dist/src/codewatch/gitleaks.d.ts +67 -0
- package/dist/src/codewatch/gitleaks.d.ts.map +1 -1
- package/dist/src/codewatch/gitleaks.js +158 -2
- package/dist/src/codewatch/gitleaks.js.map +1 -1
- package/dist/src/codewatch/harness/claude.d.ts +83 -0
- package/dist/src/codewatch/harness/claude.d.ts.map +1 -0
- package/dist/src/codewatch/harness/claude.js +429 -0
- package/dist/src/codewatch/harness/claude.js.map +1 -0
- package/dist/src/codewatch/harness/diff.d.ts +51 -0
- package/dist/src/codewatch/harness/diff.d.ts.map +1 -0
- package/dist/src/codewatch/harness/diff.js +227 -0
- package/dist/src/codewatch/harness/diff.js.map +1 -0
- package/dist/src/codewatch/harness/engine.d.ts +127 -0
- package/dist/src/codewatch/harness/engine.d.ts.map +1 -0
- package/dist/src/codewatch/harness/engine.js +710 -0
- package/dist/src/codewatch/harness/engine.js.map +1 -0
- package/dist/src/codewatch/harness/state.d.ts +48 -0
- package/dist/src/codewatch/harness/state.d.ts.map +1 -0
- package/dist/src/codewatch/harness/state.js +168 -0
- package/dist/src/codewatch/harness/state.js.map +1 -0
- package/dist/src/codewatch/prepush.d.ts +4 -1
- package/dist/src/codewatch/prepush.d.ts.map +1 -1
- package/dist/src/codewatch/prepush.js +19 -23
- package/dist/src/codewatch/prepush.js.map +1 -1
- package/dist/src/codewatch/pushbase.d.ts +19 -0
- package/dist/src/codewatch/pushbase.d.ts.map +1 -0
- package/dist/src/codewatch/pushbase.js +82 -0
- package/dist/src/codewatch/pushbase.js.map +1 -0
- package/dist/src/codewatch/results.d.ts +32 -3
- package/dist/src/codewatch/results.d.ts.map +1 -1
- package/dist/src/codewatch/results.js +6 -2
- package/dist/src/codewatch/results.js.map +1 -1
- package/dist/src/codewatch/reviewers/claude.d.ts.map +1 -1
- package/dist/src/codewatch/reviewers/claude.js +4 -2
- package/dist/src/codewatch/reviewers/claude.js.map +1 -1
- package/dist/src/codewatch/reviewers/index.d.ts +3 -1
- package/dist/src/codewatch/reviewers/index.d.ts.map +1 -1
- package/dist/src/codewatch/reviewers/index.js +4 -2
- package/dist/src/codewatch/reviewers/index.js.map +1 -1
- package/dist/src/codewatch/reviewers/kiro.d.ts.map +1 -1
- package/dist/src/codewatch/reviewers/kiro.js +2 -1
- package/dist/src/codewatch/reviewers/kiro.js.map +1 -1
- package/dist/src/codewatch/reviewers/types.d.ts +4 -0
- package/dist/src/codewatch/reviewers/types.d.ts.map +1 -1
- package/dist/src/codewatch/reviewers/types.js.map +1 -1
- package/dist/src/codewatch/rules.d.ts +13 -0
- package/dist/src/codewatch/rules.d.ts.map +1 -1
- package/dist/src/codewatch/rules.js +20 -1
- package/dist/src/codewatch/rules.js.map +1 -1
- package/dist/src/commands/_top/mcp.js +1 -1
- package/dist/src/commands/_top/mcp.js.map +1 -1
- package/dist/src/commands/codewatch/hook.d.ts +17 -0
- package/dist/src/commands/codewatch/hook.d.ts.map +1 -0
- package/dist/src/commands/codewatch/hook.js +46 -0
- package/dist/src/commands/codewatch/hook.js.map +1 -0
- package/dist/src/commands/codewatch/review.d.ts +25 -0
- package/dist/src/commands/codewatch/review.d.ts.map +1 -0
- package/dist/src/commands/codewatch/review.js +80 -0
- package/dist/src/commands/codewatch/review.js.map +1 -0
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/server.js +2 -2
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/mcp/tools.d.ts +9 -1
- package/dist/src/mcp/tools.d.ts.map +1 -1
- package/dist/src/mcp/tools.js +48 -0
- package/dist/src/mcp/tools.js.map +1 -1
- package/package.json +1 -1
|
@@ -32,9 +32,33 @@ export interface Finding {
|
|
|
32
32
|
* `secrets` = gitleaks; `review` = the reviewer (kiro-cli / Claude Code);
|
|
33
33
|
* `security-review` = an AWS Security Agent code review job;
|
|
34
34
|
* `security-threat-model` = an AWS Security Agent threat model job;
|
|
35
|
-
* `security-pentest` = an AWS Security Agent penetration test job
|
|
35
|
+
* `security-pentest` = an AWS Security Agent penetration test job;
|
|
36
|
+
* `agent-harness` = one run of the agent harness loop (`codewatch review`, hook `agent`).
|
|
37
|
+
* Readers that do not know a kind must skip it.
|
|
36
38
|
*/
|
|
37
|
-
export type ResultKind = 'secrets' | 'review' | 'security-review' | 'security-threat-model' | 'security-pentest' | 'aws-check';
|
|
39
|
+
export type ResultKind = 'secrets' | 'review' | 'security-review' | 'security-threat-model' | 'security-pentest' | 'aws-check' | 'agent-harness';
|
|
40
|
+
/** agent-harness only: the verdict behind the result (docs/DESIGN-harness-loop.md section 11). */
|
|
41
|
+
export interface HarnessResultInfo {
|
|
42
|
+
client: string | null;
|
|
43
|
+
event: string;
|
|
44
|
+
session: string | null;
|
|
45
|
+
verdict: 'pass' | 'fix' | 'stop';
|
|
46
|
+
round: number;
|
|
47
|
+
max_rounds: number;
|
|
48
|
+
scope: string;
|
|
49
|
+
secrets: number;
|
|
50
|
+
dropped_out_of_scope: number;
|
|
51
|
+
cached: boolean;
|
|
52
|
+
human_needed: boolean;
|
|
53
|
+
human_why: string | null;
|
|
54
|
+
fail_open: boolean;
|
|
55
|
+
secrets_scanned: boolean;
|
|
56
|
+
block_on: string[];
|
|
57
|
+
blocking_findings: number;
|
|
58
|
+
nonblocking_findings: number;
|
|
59
|
+
wall_s: number;
|
|
60
|
+
cost_usd: number | null;
|
|
61
|
+
}
|
|
38
62
|
/**
|
|
39
63
|
* aws-check only: one `prism-cli aws check` run. The audit findings live in
|
|
40
64
|
* `checks` (their shape differs from a code finding); `findings` stays empty.
|
|
@@ -151,7 +175,8 @@ export interface PentestInfo {
|
|
|
151
175
|
service_duration_s?: number | null;
|
|
152
176
|
wall_s?: number | null;
|
|
153
177
|
}
|
|
154
|
-
|
|
178
|
+
/** `agent`: an AI agent's own hook or tool call (the harness loop), never a person's git hook. */
|
|
179
|
+
export type ResultHook = 'pre-commit' | 'pre-push' | 'ci' | 'manual' | 'agent';
|
|
155
180
|
/**
|
|
156
181
|
* ok ran, nothing found
|
|
157
182
|
* findings ran, found something
|
|
@@ -202,6 +227,8 @@ export interface PrismResult {
|
|
|
202
227
|
pentest?: PentestInfo;
|
|
203
228
|
/** Present on kind aws-check. */
|
|
204
229
|
aws_check?: AwsCheckInfo;
|
|
230
|
+
/** Present on kind agent-harness. */
|
|
231
|
+
harness?: HarnessResultInfo;
|
|
205
232
|
}
|
|
206
233
|
export type ResultInit = Omit<PrismResult, 'schema_version' | 'tool_version' | 'model' | 'commit' | 'tree' | 'branch' | 'upstream' | 'base' | 'summary' | 'score' | 'reason' | 'findings'> & Partial<Pick<PrismResult, 'tool_version' | 'model' | 'commit' | 'tree' | 'branch' | 'upstream' | 'base' | 'summary' | 'score' | 'reason' | 'findings'>>;
|
|
207
234
|
export declare function makeResult(init: ResultInit): PrismResult;
|
|
@@ -223,6 +250,8 @@ export declare function resultFileName(r: PrismResult): string;
|
|
|
223
250
|
* clean without touching any tracked file. Outside a git repo it does nothing.
|
|
224
251
|
*/
|
|
225
252
|
export declare function ensureResultsExcluded(repoRoot: string): boolean;
|
|
253
|
+
/** Adds `/<dir>/` to `.git/info/exclude` unless git already ignores it. */
|
|
254
|
+
export declare function ensureDirExcluded(repoRoot: string, dir: string, comment: string): boolean;
|
|
226
255
|
/**
|
|
227
256
|
* `id` (a ResultEntry id) rewrites that existing file in place instead of
|
|
228
257
|
* naming a new one: how a pending security-review record is completed.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"results.d.ts","sourceRoot":"","sources":["../../../src/codewatch/results.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,OAAO,IAAI,YAAY,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE5F,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,WAAW,mBAAmB,CAAC;AAE5C,8FAA8F;AAC9F,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAE1D,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AACjD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,UAAU,CAAC;AAErD,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,eAAe,CAAC;IAC1B,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,2HAA2H;IAC3H,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iGAAiG;IACjG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0HAA0H;IAC1H,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,4FAA4F;IAC5F,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED
|
|
1
|
+
{"version":3,"file":"results.d.ts","sourceRoot":"","sources":["../../../src/codewatch/results.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,7 +65,11 @@ export function resultFileName(r) {
|
|
|
65
65
|
* clean without touching any tracked file. Outside a git repo it does nothing.
|
|
66
66
|
*/
|
|
67
67
|
export function ensureResultsExcluded(repoRoot) {
|
|
68
|
-
|
|
68
|
+
return ensureDirExcluded(repoRoot, RESULTS_DIR, 'prism-cli codewatch results (local)');
|
|
69
|
+
}
|
|
70
|
+
/** Adds `/<dir>/` to `.git/info/exclude` unless git already ignores it. */
|
|
71
|
+
export function ensureDirExcluded(repoRoot, dir, comment) {
|
|
72
|
+
const probe = run('git', ['-C', repoRoot, 'check-ignore', '-q', `${dir}/probe.json`]);
|
|
69
73
|
if (probe.ok)
|
|
70
74
|
return false;
|
|
71
75
|
const p = run('git', ['-C', repoRoot, 'rev-parse', '--path-format=absolute', '--git-path', 'info/exclude']);
|
|
@@ -73,7 +77,7 @@ export function ensureResultsExcluded(repoRoot) {
|
|
|
73
77
|
return false;
|
|
74
78
|
mkdirSync(dirname(p.stdout), { recursive: true });
|
|
75
79
|
const prefix = fileExists(p.stdout) && !readFileSync(p.stdout, 'utf8').endsWith('\n') ? '\n' : '';
|
|
76
|
-
appendFileSync(p.stdout, `${prefix}#
|
|
80
|
+
appendFileSync(p.stdout, `${prefix}# ${comment}\n/${dir}/\n`);
|
|
77
81
|
return true;
|
|
78
82
|
}
|
|
79
83
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"results.js","sourceRoot":"","sources":["../../../src/codewatch/results.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,UAAU,IAAI,UAAU,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAGvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAE5C,8FAA8F;AAC9F,MAAM,CAAC,MAAM,uBAAuB,GAAG,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"results.js","sourceRoot":"","sources":["../../../src/codewatch/results.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../../src/codewatch/reviewers/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuD,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAMvG;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../../src/codewatch/reviewers/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuD,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAMvG;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,eAmC3B,CAAC"}
|
|
@@ -23,7 +23,7 @@ export const claudeAdapter = {
|
|
|
23
23
|
args.push('--model', req.model);
|
|
24
24
|
const input = 'You are a code reviewer. Review ONLY the changes in the diff below, for code quality and security, ' +
|
|
25
25
|
'against these rules. You may read files in the repository for context but must not modify anything.\n\n' +
|
|
26
|
-
`<rules>\n${req.rulesText}\n</rules>\n\n<diff>\n${req.diff}\n</diff>\n\n${OUTPUT_CONTRACT}`;
|
|
26
|
+
`<rules>\n${req.rulesText}\n</rules>\n\n<diff>\n${req.diff}\n</diff>\n\n${OUTPUT_CONTRACT}${req.retryNote ? ` ${req.retryNote}` : ''}`;
|
|
27
27
|
return { args, input };
|
|
28
28
|
},
|
|
29
29
|
parse(stdout) {
|
|
@@ -42,7 +42,9 @@ export const claudeAdapter = {
|
|
|
42
42
|
const models = env.modelUsage && typeof env.modelUsage === 'object' ? Object.keys(env.modelUsage) : [];
|
|
43
43
|
// modelUsage can list a small helper model too; the one with the most output tokens did the review.
|
|
44
44
|
models.sort((a, b) => (env.modelUsage[b]?.outputTokens ?? 0) - (env.modelUsage[a]?.outputTokens ?? 0));
|
|
45
|
-
|
|
45
|
+
const review = normalizeReview(extractReviewJson(env.result), models[0] ?? null);
|
|
46
|
+
const cost = env.total_cost_usd;
|
|
47
|
+
return { ...review, cost_usd: typeof cost === 'number' && Number.isFinite(cost) ? cost : null };
|
|
46
48
|
},
|
|
47
49
|
};
|
|
48
50
|
//# sourceMappingURL=claude.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../../src/codewatch/reviewers/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAwB,MAAM,YAAY,CAAC;AAEvG,mGAAmG;AACnG,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC/C,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AAEpG;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC5C,EAAE,EAAE,QAAQ;IACZ,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,aAAa;IAC1B,UAAU,CAAC,GAAG;QACZ,MAAM,IAAI,GAAG;YACX,IAAI;YACJ,iBAAiB,EAAE,MAAM;YACzB,iBAAiB,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1C,oBAAoB,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;SACjD,CAAC;QACF,IAAI,GAAG,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,KAAK,GACT,qGAAqG;YACrG,yGAAyG;YACzG,YAAY,GAAG,CAAC,SAAS,yBAAyB,GAAG,CAAC,IAAI,gBAAgB,eAAe,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../../src/codewatch/reviewers/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAwB,MAAM,YAAY,CAAC;AAEvG,mGAAmG;AACnG,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC/C,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AAEpG;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC5C,EAAE,EAAE,QAAQ;IACZ,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,aAAa;IAC1B,UAAU,CAAC,GAAG;QACZ,MAAM,IAAI,GAAG;YACX,IAAI;YACJ,iBAAiB,EAAE,MAAM;YACzB,iBAAiB,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1C,oBAAoB,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;SACjD,CAAC;QACF,IAAI,GAAG,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,KAAK,GACT,qGAAqG;YACrG,yGAAyG;YACzG,YAAY,GAAG,CAAC,SAAS,yBAAyB,GAAG,CAAC,IAAI,gBAAgB,eAAe,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACzI,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC;IACD,KAAK,CAAC,MAAM;QACV,oGAAoG;QACpG,IAAI,GAAQ,CAAC;QACb,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,GAAG,EAAE,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACrI,IAAI,OAAO,GAAG,EAAE,MAAM,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC9F,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvG,oGAAoG;QACpG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC;QACvG,MAAM,MAAM,GAAG,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QACjF,MAAM,IAAI,GAAG,GAAG,CAAC,cAAc,CAAC;QAChC,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClG,CAAC;CACF,CAAC"}
|
|
@@ -30,10 +30,12 @@ export interface ReviewRun {
|
|
|
30
30
|
review: ParsedReview | null;
|
|
31
31
|
error: string | null;
|
|
32
32
|
rawStdout: string;
|
|
33
|
+
/** The tool ran to completion but its reply held no usable review: the one case that is retried. */
|
|
34
|
+
unparseable?: boolean;
|
|
33
35
|
}
|
|
34
36
|
/**
|
|
35
37
|
* Runs one adapter and parses its output. Never throws: a missing binary, a
|
|
36
38
|
* timeout, a non-zero exit and unparseable output all come back as ok:false.
|
|
37
39
|
*/
|
|
38
|
-
export declare function runReview(adapter: ReviewerAdapter, req: ReviewRequest, timeoutMs: number, binaryPath?: string): ReviewRun;
|
|
40
|
+
export declare function runReview(adapter: ReviewerAdapter, req: ReviewRequest, timeoutMs: number, binaryPath?: string, extraEnv?: Record<string, string>): ReviewRun;
|
|
39
41
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/codewatch/reviewers/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAA8B,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEtI,cAAc,YAAY,CAAC;AAE3B,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,eAAe,CAGxD,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAEpE,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,OAAO,GAAE,MAAM,GAAG,SAA4B,GAAG,UAAU,EAAE,CAE5F;AAED,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,EAAE,EAAE,UAAU,GAAG,IAAI,CAAC;IACtB,kCAAkC;IAClC,MAAM,EAAE,YAAY,GAAG,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;IACzE,+EAA+E;IAC/E,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C,SAAS,EAAE,UAAU,EAAE,CAAC;CACzB,GAAG,cAAc,CAuBjB;AAKD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/codewatch/reviewers/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAA8B,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEtI,cAAc,YAAY,CAAC;AAE3B,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,eAAe,CAGxD,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAEpE,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,OAAO,GAAE,MAAM,GAAG,SAA4B,GAAG,UAAU,EAAE,CAE5F;AAED,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,EAAE,EAAE,UAAU,GAAG,IAAI,CAAC;IACtB,kCAAkC;IAClC,MAAM,EAAE,YAAY,GAAG,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;IACzE,+EAA+E;IAC/E,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C,SAAS,EAAE,UAAU,EAAE,CAAC;CACzB,GAAG,cAAc,CAuBjB;AAKD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,oGAAoG;IACpG,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,SAAS,CAkChK"}
|
|
@@ -58,10 +58,12 @@ const GIT_HOOK_ENV = ['GIT_DIR', 'GIT_INDEX_FILE', 'GIT_WORK_TREE', 'GIT_PREFIX'
|
|
|
58
58
|
* Runs one adapter and parses its output. Never throws: a missing binary, a
|
|
59
59
|
* timeout, a non-zero exit and unparseable output all come back as ok:false.
|
|
60
60
|
*/
|
|
61
|
-
export function runReview(adapter, req, timeoutMs, binaryPath) {
|
|
61
|
+
export function runReview(adapter, req, timeoutMs, binaryPath, extraEnv = {}) {
|
|
62
62
|
const env = { ...process.env };
|
|
63
63
|
for (const k of GIT_HOOK_ENV)
|
|
64
64
|
delete env[k];
|
|
65
|
+
// Child only: this process's own environment is never changed.
|
|
66
|
+
Object.assign(env, extraEnv);
|
|
65
67
|
let inv;
|
|
66
68
|
try {
|
|
67
69
|
inv = adapter.invocation(req);
|
|
@@ -91,7 +93,7 @@ export function runReview(adapter, req, timeoutMs, binaryPath) {
|
|
|
91
93
|
}
|
|
92
94
|
catch (e) {
|
|
93
95
|
const exit = res.status !== 0 ? ` (exit ${res.status}${res.stderr ? `: ${res.stderr.trim().slice(0, 200)}` : ''})` : '';
|
|
94
|
-
return { ok: false, review: null, error: `${e.message}${exit}`, rawStdout: stdout };
|
|
96
|
+
return { ok: false, review: null, error: `${e.message}${exit}`, rawStdout: stdout, unparseable: true };
|
|
95
97
|
}
|
|
96
98
|
}
|
|
97
99
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/codewatch/reviewers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAgF,MAAM,YAAY,CAAC;AAEtI,cAAc,YAAY,CAAC;AAE3B,MAAM,CAAC,MAAM,QAAQ,GAAwC;IAC3D,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,aAAa;CACtB,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAEpE,6DAA6D;AAC7D,MAAM,UAAU,eAAe,CAAC,UAA8B,OAAO,CAAC,GAAG,CAAC,IAAI;IAC5E,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;AACxF,CAAC;AAWD;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,IAI/B;IACC,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC7D,IAAI,MAAM,GAAsB,IAAI,CAAC;IACrC,IAAI,MAAM,GAA6B,UAAU,CAAC;IAClD,IAAI,IAAI,GAAkB,IAAI,CAAC;IAE/B,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,YAAY,CAAC,cAAc,CAAC,EAAE,CAAC;YAAC,MAAM,GAAG,cAAc,CAAC;YAAC,MAAM,GAAG,YAAY,CAAC;QAAC,CAAC;;YAChF,IAAI,GAAG,sCAAsC,cAAc,eAAe,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IAC9G,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;QAChC,IAAI,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAAC,MAAM,GAAG,gBAAgB,CAAC;YAAC,MAAM,GAAG,cAAc,CAAC;QAAC,CAAC;;YACtF,IAAI,GAAG,0BAA0B,gBAAgB,yBAAyB,CAAC;IAClF,CAAC;IAED,IAAI,MAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC9E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,iBAAiB,CAAC,CAAC,CAAC,wCAAwC,EAAE,CAAC;IAC7I,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,yBAAyB,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,UAAU,EAAE,CAAC;IACpJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACxD,CAAC;AAED,yFAAyF;AACzF,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,sBAAsB,EAAE,kCAAkC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/codewatch/reviewers/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kiro.d.ts","sourceRoot":"","sources":["../../../../src/codewatch/reviewers/kiro.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAElH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"kiro.d.ts","sourceRoot":"","sources":["../../../../src/codewatch/reviewers/kiro.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAElH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,EAAE,eAoBzB,CAAC"}
|
|
@@ -17,7 +17,8 @@ export const kiroAdapter = {
|
|
|
17
17
|
invocation(req) {
|
|
18
18
|
const prompt = `You are a code reviewer. First read the review rules in ${req.rulesPath} and follow them. ` +
|
|
19
19
|
`Then read the diff at ${req.diffPath} and review only the changes it introduces, for code quality and security. ` +
|
|
20
|
-
OUTPUT_CONTRACT
|
|
20
|
+
OUTPUT_CONTRACT +
|
|
21
|
+
(req.retryNote ? ` ${req.retryNote}` : '');
|
|
21
22
|
return {
|
|
22
23
|
args: ['chat', '--no-interactive', '--trust-tools=fs_read', '--model', req.model || 'auto', prompt],
|
|
23
24
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kiro.js","sourceRoot":"","sources":["../../../../src/codewatch/reviewers/kiro.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAwB,MAAM,YAAY,CAAC;AAElH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,WAAW,GAAoB;IAC1C,EAAE,EAAE,MAAM;IACV,MAAM,EAAE,UAAU;IAClB,WAAW,EAAE,UAAU;IACvB,UAAU,CAAC,GAAG;QACZ,MAAM,MAAM,GACV,2DAA2D,GAAG,CAAC,SAAS,oBAAoB;YAC5F,yBAAyB,GAAG,CAAC,QAAQ,6EAA6E;YAClH,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"kiro.js","sourceRoot":"","sources":["../../../../src/codewatch/reviewers/kiro.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAwB,MAAM,YAAY,CAAC;AAElH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,WAAW,GAAoB;IAC1C,EAAE,EAAE,MAAM;IACV,MAAM,EAAE,UAAU;IAClB,WAAW,EAAE,UAAU;IACvB,UAAU,CAAC,GAAG;QACZ,MAAM,MAAM,GACV,2DAA2D,GAAG,CAAC,SAAS,oBAAoB;YAC5F,yBAAyB,GAAG,CAAC,QAAQ,6EAA6E;YAClH,eAAe;YACf,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7C,OAAO;YACL,IAAI,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,SAAS,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM,EAAE,MAAM,CAAC;SACpG,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/B,sEAAsE;QACtE,mBAAmB;QACnB,OAAO,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;CACF,CAAC"}
|
|
@@ -14,6 +14,8 @@ export interface ReviewRequest {
|
|
|
14
14
|
diff: string;
|
|
15
15
|
/** Requested model, if the team pinned one. */
|
|
16
16
|
model?: string;
|
|
17
|
+
/** Added to the prompt on the single retry after an unparseable reply. */
|
|
18
|
+
retryNote?: string;
|
|
17
19
|
}
|
|
18
20
|
export interface Invocation {
|
|
19
21
|
args: string[];
|
|
@@ -26,6 +28,8 @@ export interface ParsedReview {
|
|
|
26
28
|
score: number | null;
|
|
27
29
|
/** Model the tool reported using, if its output says. */
|
|
28
30
|
model: string | null;
|
|
31
|
+
/** Cost the tool reported for this review (Claude Code's total_cost_usd); absent when it reports none. */
|
|
32
|
+
cost_usd?: number | null;
|
|
29
33
|
}
|
|
30
34
|
/**
|
|
31
35
|
* One adapter per reviewer tool. An adapter only builds argv and parses
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/codewatch/reviewers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAA6B,MAAM,eAAe,CAAC;AAExE,eAAO,MAAM,YAAY,6BAA8B,CAAC;AACxD,MAAM,MAAM,UAAU,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAErD,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,UAAU,CAExD;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/codewatch/reviewers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAA6B,MAAM,eAAe,CAAC;AAExE,eAAO,MAAM,YAAY,6BAA8B,CAAC;AACxD,MAAM,MAAM,UAAU,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAErD,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,UAAU,CAExD;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,yDAAyD;IACzD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,0GAA0G;IAC1G,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,UAAU,CAAC;IACf,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,GAAG,EAAE,aAAa,GAAG,UAAU,CAAC;IAC3C,qDAAqD;IACrD,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC;CACrC;AAED,6FAA6F;AAC7F,eAAO,MAAM,eAAe,QAGyB,CAAC;AAEtD,yDAAyD;AACzD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG3C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CA6BnD;AAmBD,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY,CAc5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/codewatch/reviewers/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAU,CAAC;AAGxD,MAAM,UAAU,YAAY,CAAC,CAAU;IACrC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAK,YAAkC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAClF,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/codewatch/reviewers/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,4 +9,17 @@ export declare const KIRO_STEERING_RULES = ".kiro/steering/code-review.md";
|
|
|
9
9
|
* install-eval-harness ships as steering. Returns what happened.
|
|
10
10
|
*/
|
|
11
11
|
export declare function ensureRulesFile(gitRoot: string, bundledRulesPath: string): 'kept' | 'from-steering' | 'from-bundle';
|
|
12
|
+
export interface LoadedRules {
|
|
13
|
+
/** Path handed to the reviewer: repo-relative for the repo's own file, absolute for the bundled one. */
|
|
14
|
+
rulesPath: string;
|
|
15
|
+
rulesText: string;
|
|
16
|
+
/** Set when no rules could be read. */
|
|
17
|
+
note: string | null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* The rules a review runs against. A repo covered only by the global hooks has
|
|
21
|
+
* no rules file of its own: fall back to the bundled default, the same rules
|
|
22
|
+
* enable codewatch installs.
|
|
23
|
+
*/
|
|
24
|
+
export declare function loadReviewRules(repoRoot: string): LoadedRules;
|
|
12
25
|
//# sourceMappingURL=rules.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../src/codewatch/rules.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../src/codewatch/rules.ts"],"names":[],"mappings":"AAKA,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,kCAAkC,CAAC;AAEnE;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,eAAe,GAAG,aAAa,CAWnH;AAED,MAAM,WAAW,WAAW;IAC1B,wGAAwG;IACxG,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAU7D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { copyFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
1
|
+
import { copyFileSync, existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
2
2
|
import { dirname, resolve } from 'node:path';
|
|
3
|
+
import { getAssetPath } from '../utils/root.js';
|
|
3
4
|
import { RULES_PATH } from './config.js';
|
|
4
5
|
/** Where install-eval-harness has always put the review rules for kiro-cli. */
|
|
5
6
|
export const KIRO_STEERING_RULES = '.kiro/steering/code-review.md';
|
|
@@ -24,4 +25,22 @@ export function ensureRulesFile(gitRoot, bundledRulesPath) {
|
|
|
24
25
|
copyFileSync(bundledRulesPath, dest);
|
|
25
26
|
return 'from-bundle';
|
|
26
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* The rules a review runs against. A repo covered only by the global hooks has
|
|
30
|
+
* no rules file of its own: fall back to the bundled default, the same rules
|
|
31
|
+
* enable codewatch installs.
|
|
32
|
+
*/
|
|
33
|
+
export function loadReviewRules(repoRoot) {
|
|
34
|
+
const own = resolve(repoRoot, RULES_PATH);
|
|
35
|
+
const text = existsSync(own) ? readFileSync(own, 'utf8') : '';
|
|
36
|
+
if (text)
|
|
37
|
+
return { rulesPath: RULES_PATH, rulesText: text, note: null };
|
|
38
|
+
try {
|
|
39
|
+
const p = getAssetPath(import.meta.url, 'bootstrapper/eval-harness/steering/code-review.md');
|
|
40
|
+
return { rulesPath: p, rulesText: readFileSync(p, 'utf8'), note: null };
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return { rulesPath: RULES_PATH, rulesText: '', note: `${RULES_PATH} not found; reviewing without the shared rules` };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
27
46
|
//# sourceMappingURL=rules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../src/codewatch/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../src/codewatch/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,+EAA+E;AAC/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,+BAA+B,CAAC;AAEnE;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,gBAAwB;IACvE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IACpC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;IACvD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC7B,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,YAAY,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IACrC,OAAO,aAAa,CAAC;AACvB,CAAC;AAUD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,IAAI,IAAI;QAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxE,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,mDAAmD,CAAC,CAAC;QAC7F,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,UAAU,gDAAgD,EAAE,CAAC;IACvH,CAAC;AACH,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { homedir } from 'node:os';
|
|
|
2
2
|
import { ownVersion } from './version.js';
|
|
3
3
|
import { runStdio } from '../../mcp/server.js';
|
|
4
4
|
export default {
|
|
5
|
-
description: 'MCP server on stdio for Kiro, Claude Code and other MCP clients: read-only codewatch findings and reports, cached spend and the setup checklist, a static dashboard snapshot file,
|
|
5
|
+
description: 'MCP server on stdio for Kiro, Claude Code and other MCP clients: read-only codewatch findings and reports, cached spend and the setup checklist, a static dashboard snapshot file, the live dashboard on 127.0.0.1 as a child process, and prism_review, which runs the harness review now and writes its result file. The MCP server itself opens no port; it exits when stdin closes, stopping that dashboard.',
|
|
6
6
|
options: [],
|
|
7
7
|
async action() {
|
|
8
8
|
await runStdio({ cwd: process.cwd(), home: homedir(), version: ownVersion() });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../../src/commands/_top/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,eAAe;IACb,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../../src/commands/_top/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,eAAe;IACb,WAAW,EAAE,kZAAkZ;IAC/Z,OAAO,EAAE,EAAE;IACX,KAAK,CAAC,MAAM;QACV,MAAM,QAAQ,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IACjF,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook adapter for AI coding clients (the harness loop). Reads the client's
|
|
3
|
+
* hook JSON on stdin, prints the client's JSON on stdout, and always exits 0.
|
|
4
|
+
*/
|
|
5
|
+
declare const _default: {
|
|
6
|
+
description: string;
|
|
7
|
+
options: {
|
|
8
|
+
flags: string;
|
|
9
|
+
description: string;
|
|
10
|
+
}[];
|
|
11
|
+
action(opts: {
|
|
12
|
+
client?: string;
|
|
13
|
+
event?: string;
|
|
14
|
+
}): void;
|
|
15
|
+
};
|
|
16
|
+
export default _default;
|
|
17
|
+
//# sourceMappingURL=hook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../../src/commands/codewatch/hook.ts"],"names":[],"mappings":"AAMA;;;GAGG;;;;;;;iBAOY;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;;AANlD,wBA2BE"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { CLAUDE_EVENTS, runClaudeHook } from '../../codewatch/harness/claude.js';
|
|
3
|
+
import { HARNESS_CHILD_ENV } from '../../codewatch/harness/engine.js';
|
|
4
|
+
const CLIENTS = ['claude'];
|
|
5
|
+
/**
|
|
6
|
+
* Hook adapter for AI coding clients (the harness loop). Reads the client's
|
|
7
|
+
* hook JSON on stdin, prints the client's JSON on stdout, and always exits 0.
|
|
8
|
+
*/
|
|
9
|
+
export default {
|
|
10
|
+
description: `Agent harness loop hook adapter: reads a coding client's hook JSON on stdin and prints its decision JSON. Client: ${CLIENTS.join(', ')}. Events: ${CLAUDE_EVENTS.join(', ')}. Always exits 0`,
|
|
11
|
+
options: [
|
|
12
|
+
{ flags: '--client <client>', description: `Coding client: ${CLIENTS.join(' | ')}` },
|
|
13
|
+
{ flags: '--event <event>', description: `Hook event: ${CLAUDE_EVENTS.join(' | ')}` },
|
|
14
|
+
],
|
|
15
|
+
action(opts) {
|
|
16
|
+
// A reviewer started by the engine runs with this set: never re-enter.
|
|
17
|
+
process.exitCode = 0;
|
|
18
|
+
if (process.env[HARNESS_CHILD_ENV] === '1')
|
|
19
|
+
return;
|
|
20
|
+
try {
|
|
21
|
+
if (opts.client !== 'claude') {
|
|
22
|
+
process.stderr.write(`prism: codewatch hook supports --client ${CLIENTS.join(', ')} in this version; doing nothing\n`);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (!CLAUDE_EVENTS.includes(opts.event ?? '')) {
|
|
26
|
+
process.stderr.write(`prism: unknown --event ${String(opts.event).slice(0, 40)}; expected ${CLAUDE_EVENTS.join(', ')}\n`);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
let stdin = '';
|
|
30
|
+
try {
|
|
31
|
+
stdin = readFileSync(0, 'utf8');
|
|
32
|
+
}
|
|
33
|
+
catch { /* no stdin */ }
|
|
34
|
+
const out = runClaudeHook(opts.event, stdin);
|
|
35
|
+
if (out)
|
|
36
|
+
process.stdout.write(out + '\n');
|
|
37
|
+
}
|
|
38
|
+
catch (e) { // any: never let a PRISM bug block the agent
|
|
39
|
+
try {
|
|
40
|
+
process.stderr.write(`prism: harness hook failed (${String(e?.message || e).split('\n')[0]}); no decision\n`);
|
|
41
|
+
}
|
|
42
|
+
catch { /* ignore */ }
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../../src/commands/codewatch/hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAoB,MAAM,mCAAmC,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAU,CAAC;AAEpC;;;GAGG;AACH,eAAe;IACb,WAAW,EAAE,qHAAqH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB;IAC3M,OAAO,EAAE;QACP,EAAE,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,kBAAkB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;QACpF,EAAE,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,eAAe,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;KACtF;IACD,MAAM,CAAC,IAAyC;QAC9C,uEAAuE;QACvE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,GAAG;YAAE,OAAO;QACnD,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;gBACvH,OAAO;YACT,CAAC;YACD,IAAI,CAAE,aAAmC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;gBACrE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1H,OAAO;YACT,CAAC;YACD,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,IAAI,CAAC;gBAAC,KAAK,GAAG,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;YACjE,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,KAAoB,EAAE,KAAK,CAAC,CAAC;YAC5D,IAAI,GAAG;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC,CAAC,6CAA6C;YAC9D,IAAI,CAAC;gBAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,MAAM,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC/I,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
interface Opts {
|
|
2
|
+
working?: boolean;
|
|
3
|
+
staged?: boolean;
|
|
4
|
+
since?: string;
|
|
5
|
+
session?: string;
|
|
6
|
+
scope?: string;
|
|
7
|
+
maxRounds?: string;
|
|
8
|
+
timeout?: string;
|
|
9
|
+
review?: boolean;
|
|
10
|
+
json?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The harness loop engine. Exit 0 pass, 3 fix, 4 stop, 1 usage or internal
|
|
14
|
+
* error. Exit 2 is never used: hooks read it as "block".
|
|
15
|
+
*/
|
|
16
|
+
declare const _default: {
|
|
17
|
+
description: string;
|
|
18
|
+
options: {
|
|
19
|
+
flags: string;
|
|
20
|
+
description: string;
|
|
21
|
+
}[];
|
|
22
|
+
action(opts: Opts): undefined;
|
|
23
|
+
};
|
|
24
|
+
export default _default;
|
|
25
|
+
//# sourceMappingURL=review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../../src/commands/codewatch/review.ts"],"names":[],"mappings":"AAIA,UAAU,IAAI;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAYD;;;GAGG;;;;;;;iBAcY,IAAI;;AAbnB,wBAkDE"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { run } from '../../utils/exec.js';
|
|
2
|
+
import { exitCodeFor, runHarnessReview, SCOPES } from '../../codewatch/harness/engine.js';
|
|
3
|
+
import { sanitizeSession } from '../../codewatch/harness/state.js';
|
|
4
|
+
function human(v) {
|
|
5
|
+
const lines = [`prism harness: ${v.verdict} (round ${v.round} of ${v.max_rounds}, scope ${v.scope}, ${v.diff.files} file(s), ${v.diff.added_lines} added line(s)${v.diff.cached ? ', cached review' : ''})`];
|
|
6
|
+
if (v.next_action)
|
|
7
|
+
lines.push(` next: ${v.next_action}`);
|
|
8
|
+
for (const s of v.secrets)
|
|
9
|
+
lines.push(` [secret] ${s.file}:${s.line ?? '?'} ${s.rule}${s.committed ? ' (committed)' : ''}`);
|
|
10
|
+
for (const f of v.findings.slice(0, 20))
|
|
11
|
+
lines.push(` [${f.severity}${f.blocking ? ', blocking' : ''}] ${f.file}${f.line ? `:${f.line}` : ''} ${f.message.replace(/\s+/g, ' ').slice(0, 160)}`);
|
|
12
|
+
for (const w of v.warnings)
|
|
13
|
+
lines.push(` warning: ${w}`);
|
|
14
|
+
if (v.result_path)
|
|
15
|
+
lines.push(` result: ${v.result_path}`);
|
|
16
|
+
return lines.join('\n');
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The harness loop engine. Exit 0 pass, 3 fix, 4 stop, 1 usage or internal
|
|
20
|
+
* error. Exit 2 is never used: hooks read it as "block".
|
|
21
|
+
*/
|
|
22
|
+
export default {
|
|
23
|
+
description: 'Agent harness loop: review the changes an AI agent made (gitleaks first, then the AI review) and answer pass, fix or stop. Exit 0 pass, 3 fix, 4 stop, 1 error',
|
|
24
|
+
options: [
|
|
25
|
+
{ flags: '--working', description: 'Review the working tree (tracked and untracked) against the session baseline (default with --session)' },
|
|
26
|
+
{ flags: '--staged', description: 'Review the index against HEAD' },
|
|
27
|
+
{ flags: '--since <ref>', description: 'Review <ref>...HEAD plus uncommitted changes (default: the upstream, else the remote default branch)' },
|
|
28
|
+
{ flags: '--session <id>', description: 'Use the baseline and round counter of this agent session' },
|
|
29
|
+
{ flags: '--scope <scope>', description: `Which findings count: ${SCOPES.join(' | ')} (default new-lines with --session, else branch)` },
|
|
30
|
+
{ flags: '--max-rounds <n>', description: 'Fix rounds before stop (default harness.max_rounds, 2; ceiling 3)' },
|
|
31
|
+
{ flags: '--timeout <s>', description: 'Per-attempt reviewer timeout in seconds (default harness.timeout_seconds, 120)' },
|
|
32
|
+
{ flags: '--no-review', description: 'gitleaks and the tamper check only, no AI review' },
|
|
33
|
+
{ flags: '--json', description: 'Print the verdict JSON (schema prism.harness.verdict) on stdout, nothing else' },
|
|
34
|
+
],
|
|
35
|
+
action(opts) {
|
|
36
|
+
const fail = (msg) => { process.stderr.write(`Error: ${msg}\n`); process.exit(1); };
|
|
37
|
+
const modes = [opts.working, opts.staged, opts.since !== undefined].filter(Boolean).length;
|
|
38
|
+
if (modes > 1)
|
|
39
|
+
fail('pass only one of --working, --staged, --since');
|
|
40
|
+
if (opts.scope !== undefined && !SCOPES.includes(opts.scope))
|
|
41
|
+
fail(`--scope must be one of: ${SCOPES.join(', ')}`);
|
|
42
|
+
const int = (v, name, max) => {
|
|
43
|
+
if (v === undefined)
|
|
44
|
+
return undefined;
|
|
45
|
+
const n = Number(v);
|
|
46
|
+
if (!Number.isInteger(n) || n < 1 || n > max)
|
|
47
|
+
fail(`${name} must be a whole number from 1 to ${max}`);
|
|
48
|
+
return n;
|
|
49
|
+
};
|
|
50
|
+
const maxRounds = int(opts.maxRounds, '--max-rounds', 3);
|
|
51
|
+
const timeout = int(opts.timeout, '--timeout', 3600);
|
|
52
|
+
if (opts.since !== undefined && (opts.since.startsWith('-') || !/^[A-Za-z0-9._/~^@{}-]{1,200}$/.test(opts.since)))
|
|
53
|
+
fail('--since must be a ref such as origin/main or HEAD~3');
|
|
54
|
+
let session = null;
|
|
55
|
+
if (opts.session !== undefined) {
|
|
56
|
+
session = sanitizeSession(opts.session);
|
|
57
|
+
if (!session)
|
|
58
|
+
fail('--session must contain letters, digits, _ or -');
|
|
59
|
+
}
|
|
60
|
+
const top = run('git', ['rev-parse', '--show-toplevel']);
|
|
61
|
+
if (!top.ok)
|
|
62
|
+
fail('not a git repository');
|
|
63
|
+
const o = {
|
|
64
|
+
repoRoot: top.stdout, session, maxRounds, timeoutSeconds: timeout, noReview: opts.review === false,
|
|
65
|
+
mode: opts.staged ? 'staged' : opts.since !== undefined ? 'since' : 'working', since: opts.since,
|
|
66
|
+
scope: opts.scope, event: 'manual',
|
|
67
|
+
};
|
|
68
|
+
let v;
|
|
69
|
+
try {
|
|
70
|
+
v = runHarnessReview(o);
|
|
71
|
+
}
|
|
72
|
+
catch (e) { // any: internal error, message only
|
|
73
|
+
return fail(`harness review failed: ${String(e?.message || e).split('\n')[0]}`);
|
|
74
|
+
}
|
|
75
|
+
process.stdout.write(opts.json ? JSON.stringify(v, null, 2) + '\n' : human(v) + '\n');
|
|
76
|
+
// exitCode, not exit(): a piped stdout may still be flushing.
|
|
77
|
+
process.exitCode = exitCodeFor(v);
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../../../src/commands/codewatch/review.ts"],"names":[],"mappings":"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"}
|