@diff-review-system/drs 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.opencode/agent/describe/pr-describer.md +221 -0
- package/.opencode/agent/review/documentation.md +56 -0
- package/.opencode/agent/review/performance.md +32 -130
- package/.opencode/agent/review/quality.md +36 -104
- package/.opencode/agent/review/security.md +32 -94
- package/.opencode/agent/review/style.md +26 -10
- package/.opencode/agent/review/unified-reviewer.md +74 -0
- package/.opencode/opencode.jsonc +4 -41
- package/.opencode/tool/write_json_output.ts +24 -0
- package/README.md +215 -82
- package/dist/ci/runner.d.ts.map +1 -1
- package/dist/ci/runner.js +4 -4
- package/dist/ci/runner.js.map +1 -1
- package/dist/cli/describe-mr.d.ts +11 -0
- package/dist/cli/describe-mr.d.ts.map +1 -0
- package/dist/cli/describe-mr.js +104 -0
- package/dist/cli/describe-mr.js.map +1 -0
- package/dist/cli/describe-pr.d.ts +12 -0
- package/dist/cli/describe-pr.d.ts.map +1 -0
- package/dist/cli/describe-pr.js +105 -0
- package/dist/cli/describe-pr.js.map +1 -0
- package/dist/cli/index.js +234 -20
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +337 -120
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/post-comments.d.ts +15 -0
- package/dist/cli/post-comments.d.ts.map +1 -0
- package/dist/cli/post-comments.js +216 -0
- package/dist/cli/post-comments.js.map +1 -0
- package/dist/cli/review-local.d.ts +3 -0
- package/dist/cli/review-local.d.ts.map +1 -1
- package/dist/cli/review-local.js +46 -63
- package/dist/cli/review-local.js.map +1 -1
- package/dist/cli/review-mr.d.ts +7 -0
- package/dist/cli/review-mr.d.ts.map +1 -1
- package/dist/cli/review-mr.js +88 -117
- package/dist/cli/review-mr.js.map +1 -1
- package/dist/cli/review-pr.d.ts +6 -0
- package/dist/cli/review-pr.d.ts.map +1 -1
- package/dist/cli/review-pr.js +81 -114
- package/dist/cli/review-pr.js.map +1 -1
- package/dist/cli/show-changes.d.ts +15 -0
- package/dist/cli/show-changes.d.ts.map +1 -0
- package/dist/cli/show-changes.js +184 -0
- package/dist/cli/show-changes.js.map +1 -0
- package/dist/github/client.d.ts +199 -4
- package/dist/github/client.d.ts.map +1 -1
- package/dist/github/client.js +37 -2
- package/dist/github/client.js.map +1 -1
- package/dist/github/client.test.d.ts +2 -0
- package/dist/github/client.test.d.ts.map +1 -0
- package/dist/github/client.test.js +206 -0
- package/dist/github/client.test.js.map +1 -0
- package/dist/github/platform-adapter.d.ts +31 -0
- package/dist/github/platform-adapter.d.ts.map +1 -0
- package/dist/github/platform-adapter.js +129 -0
- package/dist/github/platform-adapter.js.map +1 -0
- package/dist/github/platform-adapter.test.d.ts +2 -0
- package/dist/github/platform-adapter.test.d.ts.map +1 -0
- package/dist/github/platform-adapter.test.js +40 -0
- package/dist/github/platform-adapter.test.js.map +1 -0
- package/dist/gitlab/client.d.ts +12 -0
- package/dist/gitlab/client.d.ts.map +1 -1
- package/dist/gitlab/client.js +19 -1
- package/dist/gitlab/client.js.map +1 -1
- package/dist/gitlab/diff-parser.test.d.ts +2 -0
- package/dist/gitlab/diff-parser.test.d.ts.map +1 -0
- package/dist/gitlab/diff-parser.test.js +315 -0
- package/dist/gitlab/diff-parser.test.js.map +1 -0
- package/dist/gitlab/platform-adapter.d.ts +27 -0
- package/dist/gitlab/platform-adapter.d.ts.map +1 -0
- package/dist/gitlab/platform-adapter.js +121 -0
- package/dist/gitlab/platform-adapter.js.map +1 -0
- package/dist/gitlab/platform-adapter.test.d.ts +2 -0
- package/dist/gitlab/platform-adapter.test.d.ts.map +1 -0
- package/dist/gitlab/platform-adapter.test.js +21 -0
- package/dist/gitlab/platform-adapter.test.js.map +1 -0
- package/dist/index.test.d.ts +2 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +7 -0
- package/dist/index.test.js.map +1 -0
- package/dist/lib/change-summary.d.ts +8 -0
- package/dist/lib/change-summary.d.ts.map +1 -0
- package/dist/lib/change-summary.js +2 -0
- package/dist/lib/change-summary.js.map +1 -0
- package/dist/lib/code-quality-report.d.ts +44 -0
- package/dist/lib/code-quality-report.d.ts.map +1 -0
- package/dist/lib/code-quality-report.js +62 -0
- package/dist/lib/code-quality-report.js.map +1 -0
- package/dist/lib/code-quality-report.test.d.ts +2 -0
- package/dist/lib/code-quality-report.test.d.ts.map +1 -0
- package/dist/lib/code-quality-report.test.js +327 -0
- package/dist/lib/code-quality-report.test.js.map +1 -0
- package/dist/{gitlab → lib}/comment-formatter.d.ts +6 -3
- package/dist/lib/comment-formatter.d.ts.map +1 -0
- package/dist/{gitlab → lib}/comment-formatter.js +63 -16
- package/dist/lib/comment-formatter.js.map +1 -0
- package/dist/lib/comment-formatter.test.d.ts +2 -0
- package/dist/lib/comment-formatter.test.d.ts.map +1 -0
- package/dist/lib/comment-formatter.test.js +607 -0
- package/dist/lib/comment-formatter.test.js.map +1 -0
- package/dist/lib/comment-manager.d.ts +61 -0
- package/dist/lib/comment-manager.d.ts.map +1 -0
- package/dist/lib/comment-manager.js +91 -0
- package/dist/lib/comment-manager.js.map +1 -0
- package/dist/lib/comment-manager.test.d.ts +2 -0
- package/dist/lib/comment-manager.test.d.ts.map +1 -0
- package/dist/lib/comment-manager.test.js +618 -0
- package/dist/lib/comment-manager.test.js.map +1 -0
- package/dist/lib/comment-poster.d.ts +21 -0
- package/dist/lib/comment-poster.d.ts.map +1 -0
- package/dist/lib/comment-poster.js +96 -0
- package/dist/lib/comment-poster.js.map +1 -0
- package/dist/lib/comment-poster.test.d.ts +5 -0
- package/dist/lib/comment-poster.test.d.ts.map +1 -0
- package/dist/lib/comment-poster.test.js +215 -0
- package/dist/lib/comment-poster.test.js.map +1 -0
- package/dist/lib/config-model-overrides.test.d.ts +12 -0
- package/dist/lib/config-model-overrides.test.d.ts.map +1 -0
- package/dist/lib/config-model-overrides.test.js +254 -0
- package/dist/lib/config-model-overrides.test.js.map +1 -0
- package/dist/lib/config.d.ts +93 -8
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +178 -25
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/config.test.d.ts +2 -0
- package/dist/lib/config.test.d.ts.map +1 -0
- package/dist/lib/config.test.js +36 -0
- package/dist/lib/config.test.js.map +1 -0
- package/dist/lib/context-compression.d.ts +19 -0
- package/dist/lib/context-compression.d.ts.map +1 -0
- package/dist/lib/context-compression.js +170 -0
- package/dist/lib/context-compression.js.map +1 -0
- package/dist/lib/context-compression.test.d.ts +2 -0
- package/dist/lib/context-compression.test.d.ts.map +1 -0
- package/dist/lib/context-compression.test.js +33 -0
- package/dist/lib/context-compression.test.js.map +1 -0
- package/dist/lib/context-loader.d.ts +29 -0
- package/dist/lib/context-loader.d.ts.map +1 -0
- package/dist/lib/context-loader.js +75 -0
- package/dist/lib/context-loader.js.map +1 -0
- package/dist/lib/context-loader.test.d.ts +2 -0
- package/dist/lib/context-loader.test.d.ts.map +1 -0
- package/dist/lib/context-loader.test.js +207 -0
- package/dist/lib/context-loader.test.js.map +1 -0
- package/dist/lib/describe-core.d.ts +9 -0
- package/dist/lib/describe-core.d.ts.map +1 -0
- package/dist/lib/describe-core.js +71 -0
- package/dist/lib/describe-core.js.map +1 -0
- package/dist/lib/describe-core.test.d.ts +2 -0
- package/dist/lib/describe-core.test.d.ts.map +1 -0
- package/dist/lib/describe-core.test.js +208 -0
- package/dist/lib/describe-core.test.js.map +1 -0
- package/dist/lib/describe-output-path.test.d.ts +2 -0
- package/dist/lib/describe-output-path.test.d.ts.map +1 -0
- package/dist/lib/describe-output-path.test.js +51 -0
- package/dist/lib/describe-output-path.test.js.map +1 -0
- package/dist/lib/describe-parser.d.ts +3 -0
- package/dist/lib/describe-parser.d.ts.map +1 -0
- package/dist/lib/describe-parser.js +163 -0
- package/dist/lib/describe-parser.js.map +1 -0
- package/dist/lib/describe-parser.test.d.ts +2 -0
- package/dist/lib/describe-parser.test.d.ts.map +1 -0
- package/dist/lib/describe-parser.test.js +282 -0
- package/dist/lib/describe-parser.test.js.map +1 -0
- package/dist/lib/description-executor.d.ts +22 -0
- package/dist/lib/description-executor.d.ts.map +1 -0
- package/dist/lib/description-executor.js +72 -0
- package/dist/lib/description-executor.js.map +1 -0
- package/dist/lib/description-formatter.d.ts +37 -0
- package/dist/lib/description-formatter.d.ts.map +1 -0
- package/dist/lib/description-formatter.js +219 -0
- package/dist/lib/description-formatter.js.map +1 -0
- package/dist/{gitlab → lib}/diff-parser.d.ts +11 -0
- package/dist/lib/diff-parser.d.ts.map +1 -0
- package/dist/{gitlab → lib}/diff-parser.js +40 -3
- package/dist/lib/diff-parser.js.map +1 -0
- package/dist/lib/issue-parser.d.ts +29 -0
- package/dist/lib/issue-parser.d.ts.map +1 -0
- package/dist/lib/issue-parser.js +153 -0
- package/dist/lib/issue-parser.js.map +1 -0
- package/dist/lib/issue-parser.test.d.ts +2 -0
- package/dist/lib/issue-parser.test.d.ts.map +1 -0
- package/dist/lib/issue-parser.test.js +281 -0
- package/dist/lib/issue-parser.test.js.map +1 -0
- package/dist/lib/json-output-schema.d.ts +207 -0
- package/dist/lib/json-output-schema.d.ts.map +1 -0
- package/dist/lib/json-output-schema.js +124 -0
- package/dist/lib/json-output-schema.js.map +1 -0
- package/dist/lib/json-output-schema.test.d.ts +2 -0
- package/dist/lib/json-output-schema.test.d.ts.map +1 -0
- package/dist/lib/json-output-schema.test.js +92 -0
- package/dist/lib/json-output-schema.test.js.map +1 -0
- package/dist/lib/json-output.d.ts +43 -0
- package/dist/lib/json-output.d.ts.map +1 -0
- package/dist/lib/json-output.js +34 -0
- package/dist/lib/json-output.js.map +1 -0
- package/dist/lib/output-paths.d.ts +6 -0
- package/dist/lib/output-paths.d.ts.map +1 -0
- package/dist/lib/output-paths.js +5 -0
- package/dist/lib/output-paths.js.map +1 -0
- package/dist/lib/platform-client.d.ts +130 -0
- package/dist/lib/platform-client.d.ts.map +1 -0
- package/dist/lib/platform-client.js +8 -0
- package/dist/lib/platform-client.js.map +1 -0
- package/dist/lib/position-validator.d.ts +36 -0
- package/dist/lib/position-validator.d.ts.map +1 -0
- package/dist/lib/position-validator.js +43 -0
- package/dist/lib/position-validator.js.map +1 -0
- package/dist/lib/repository-validator.d.ts +52 -0
- package/dist/lib/repository-validator.d.ts.map +1 -0
- package/dist/lib/repository-validator.js +219 -0
- package/dist/lib/repository-validator.js.map +1 -0
- package/dist/lib/repository-validator.test.d.ts +5 -0
- package/dist/lib/repository-validator.test.d.ts.map +1 -0
- package/dist/lib/repository-validator.test.js +341 -0
- package/dist/lib/repository-validator.test.js.map +1 -0
- package/dist/lib/review-core.d.ts +66 -0
- package/dist/lib/review-core.d.ts.map +1 -0
- package/dist/lib/review-core.js +449 -0
- package/dist/lib/review-core.js.map +1 -0
- package/dist/lib/review-core.test.d.ts +2 -0
- package/dist/lib/review-core.test.d.ts.map +1 -0
- package/dist/lib/review-core.test.js +552 -0
- package/dist/lib/review-core.test.js.map +1 -0
- package/dist/lib/review-orchestrator.d.ts +77 -0
- package/dist/lib/review-orchestrator.d.ts.map +1 -0
- package/dist/lib/review-orchestrator.js +124 -0
- package/dist/lib/review-orchestrator.js.map +1 -0
- package/dist/lib/review-orchestrator.test.d.ts +2 -0
- package/dist/lib/review-orchestrator.test.d.ts.map +1 -0
- package/dist/lib/review-orchestrator.test.js +413 -0
- package/dist/lib/review-orchestrator.test.js.map +1 -0
- package/dist/lib/review-output-path.test.d.ts +2 -0
- package/dist/lib/review-output-path.test.d.ts.map +1 -0
- package/dist/lib/review-output-path.test.js +83 -0
- package/dist/lib/review-output-path.test.js.map +1 -0
- package/dist/lib/review-parser.d.ts +2 -0
- package/dist/lib/review-parser.d.ts.map +1 -0
- package/dist/lib/review-parser.js +100 -0
- package/dist/lib/review-parser.js.map +1 -0
- package/dist/lib/unified-review-executor.d.ts +49 -0
- package/dist/lib/unified-review-executor.d.ts.map +1 -0
- package/dist/lib/unified-review-executor.js +158 -0
- package/dist/lib/unified-review-executor.js.map +1 -0
- package/dist/lib/unified-review-executor.test.d.ts +5 -0
- package/dist/lib/unified-review-executor.test.d.ts.map +1 -0
- package/dist/lib/unified-review-executor.test.js +344 -0
- package/dist/lib/unified-review-executor.test.js.map +1 -0
- package/dist/lib/write-json-output.d.ts +13 -0
- package/dist/lib/write-json-output.d.ts.map +1 -0
- package/dist/lib/write-json-output.js +37 -0
- package/dist/lib/write-json-output.js.map +1 -0
- package/dist/opencode/agent-loader.d.ts +3 -4
- package/dist/opencode/agent-loader.d.ts.map +1 -1
- package/dist/opencode/agent-loader.js +51 -42
- package/dist/opencode/agent-loader.js.map +1 -1
- package/dist/opencode/agent-skill-overlay.d.ts +11 -0
- package/dist/opencode/agent-skill-overlay.d.ts.map +1 -0
- package/dist/opencode/agent-skill-overlay.js +164 -0
- package/dist/opencode/agent-skill-overlay.js.map +1 -0
- package/dist/opencode/client.d.ts +14 -5
- package/dist/opencode/client.d.ts.map +1 -1
- package/dist/opencode/client.js +311 -32
- package/dist/opencode/client.js.map +1 -1
- package/dist/opencode/client.test.d.ts +2 -0
- package/dist/opencode/client.test.d.ts.map +1 -0
- package/dist/opencode/client.test.js +317 -0
- package/dist/opencode/client.test.js.map +1 -0
- package/dist/opencode/opencode-paths.d.ts +2 -0
- package/dist/opencode/opencode-paths.d.ts.map +1 -0
- package/dist/opencode/opencode-paths.js +7 -0
- package/dist/opencode/opencode-paths.js.map +1 -0
- package/dist/opencode/skill-loader.d.ts +6 -0
- package/dist/opencode/skill-loader.d.ts.map +1 -0
- package/dist/opencode/skill-loader.js +36 -0
- package/dist/opencode/skill-loader.js.map +1 -0
- package/package.json +29 -20
- package/.opencode/agent/github-reviewer.md +0 -62
- package/.opencode/agent/gitlab-reviewer.md +0 -62
- package/.opencode/agent/local-reviewer.md +0 -71
- package/dist/gitlab/comment-formatter.d.ts.map +0 -1
- package/dist/gitlab/comment-formatter.js.map +0 -1
- package/dist/gitlab/diff-parser.d.ts.map +0 -1
- package/dist/gitlab/diff-parser.js.map +0 -1
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import Ajv from 'ajv';
|
|
3
|
+
import { describeOutputSchema, reviewOutputSchema } from './json-output-schema.js';
|
|
4
|
+
const ajv = new Ajv({ allErrors: true });
|
|
5
|
+
const validateDescribe = ajv.compile(describeOutputSchema);
|
|
6
|
+
const validateReview = ajv.compile(reviewOutputSchema);
|
|
7
|
+
describe('json-output schemas', () => {
|
|
8
|
+
it('validates describe output schema', () => {
|
|
9
|
+
const payload = {
|
|
10
|
+
type: 'feature',
|
|
11
|
+
title: 'Add describe output validation tooling',
|
|
12
|
+
summary: ['Adds schema validation for describe output'],
|
|
13
|
+
walkthrough: [
|
|
14
|
+
{
|
|
15
|
+
file: 'src/lib/describe-core.ts',
|
|
16
|
+
changeType: 'modified',
|
|
17
|
+
semanticLabel: 'feature',
|
|
18
|
+
title: 'Require tool-based output',
|
|
19
|
+
changes: ['Adds write_json_output requirement'],
|
|
20
|
+
significance: 'major',
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
labels: ['feature', 'describe'],
|
|
24
|
+
recommendations: ['Add unit tests for schema validation'],
|
|
25
|
+
};
|
|
26
|
+
const isValid = validateDescribe(payload);
|
|
27
|
+
expect(isValid).toBe(true);
|
|
28
|
+
expect(validateDescribe.errors).toBeNull();
|
|
29
|
+
});
|
|
30
|
+
it('rejects describe output with invalid type', () => {
|
|
31
|
+
const payload = {
|
|
32
|
+
type: 'invalid',
|
|
33
|
+
title: 'Bad type',
|
|
34
|
+
summary: ['Invalid type'],
|
|
35
|
+
};
|
|
36
|
+
const isValid = validateDescribe(payload);
|
|
37
|
+
expect(isValid).toBe(false);
|
|
38
|
+
});
|
|
39
|
+
it('validates review output schema', () => {
|
|
40
|
+
const payload = {
|
|
41
|
+
timestamp: new Date().toISOString(),
|
|
42
|
+
summary: {
|
|
43
|
+
filesReviewed: 3,
|
|
44
|
+
issuesFound: 2,
|
|
45
|
+
bySeverity: {
|
|
46
|
+
CRITICAL: 0,
|
|
47
|
+
HIGH: 1,
|
|
48
|
+
MEDIUM: 1,
|
|
49
|
+
LOW: 0,
|
|
50
|
+
},
|
|
51
|
+
byCategory: {
|
|
52
|
+
SECURITY: 1,
|
|
53
|
+
QUALITY: 1,
|
|
54
|
+
STYLE: 0,
|
|
55
|
+
PERFORMANCE: 0,
|
|
56
|
+
DOCUMENTATION: 0,
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
issues: [
|
|
60
|
+
{
|
|
61
|
+
category: 'SECURITY',
|
|
62
|
+
severity: 'HIGH',
|
|
63
|
+
title: 'Avoid plaintext secrets',
|
|
64
|
+
file: 'src/config.ts',
|
|
65
|
+
problem: 'Secret is stored in code.',
|
|
66
|
+
solution: 'Use environment variables.',
|
|
67
|
+
agent: 'review/security',
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
metadata: {
|
|
71
|
+
source: 'PR #123',
|
|
72
|
+
project: 'org/repo',
|
|
73
|
+
branch: {
|
|
74
|
+
source: 'feature',
|
|
75
|
+
target: 'main',
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
const isValid = validateReview(payload);
|
|
80
|
+
expect(isValid).toBe(true);
|
|
81
|
+
expect(validateReview.errors).toBeNull();
|
|
82
|
+
});
|
|
83
|
+
it('rejects review output with missing summary', () => {
|
|
84
|
+
const payload = {
|
|
85
|
+
timestamp: new Date().toISOString(),
|
|
86
|
+
issues: [],
|
|
87
|
+
};
|
|
88
|
+
const isValid = validateReview(payload);
|
|
89
|
+
expect(isValid).toBe(false);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=json-output-schema.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-output-schema.test.js","sourceRoot":"","sources":["../../src/lib/json-output-schema.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON output formatting for review results
|
|
3
|
+
*
|
|
4
|
+
* Provides structured JSON output for review results when
|
|
5
|
+
* not posting comments or generating code quality reports.
|
|
6
|
+
*/
|
|
7
|
+
import type { ReviewIssue, ReviewSummary } from './comment-formatter.js';
|
|
8
|
+
/**
|
|
9
|
+
* JSON output structure for review results
|
|
10
|
+
*/
|
|
11
|
+
export interface ReviewJsonOutput {
|
|
12
|
+
/** Timestamp of the review */
|
|
13
|
+
timestamp: string;
|
|
14
|
+
/** Review summary statistics */
|
|
15
|
+
summary: ReviewSummary;
|
|
16
|
+
/** All issues found */
|
|
17
|
+
issues: ReviewIssue[];
|
|
18
|
+
/** Metadata about the review */
|
|
19
|
+
metadata?: {
|
|
20
|
+
/** Source of the review (PR number, MR iid, or local) */
|
|
21
|
+
source?: string;
|
|
22
|
+
/** Project identifier */
|
|
23
|
+
project?: string;
|
|
24
|
+
/** Branch information */
|
|
25
|
+
branch?: {
|
|
26
|
+
source?: string;
|
|
27
|
+
target?: string;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Format review results as JSON output
|
|
33
|
+
*/
|
|
34
|
+
export declare function formatReviewJson(summary: ReviewSummary, issues: ReviewIssue[], metadata?: ReviewJsonOutput['metadata']): ReviewJsonOutput;
|
|
35
|
+
/**
|
|
36
|
+
* Write review results to a JSON file
|
|
37
|
+
*/
|
|
38
|
+
export declare function writeReviewJson(output: ReviewJsonOutput, outputPath: string, workingDir?: string): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Print review results as JSON to console
|
|
41
|
+
*/
|
|
42
|
+
export declare function printReviewJson(output: ReviewJsonOutput): void;
|
|
43
|
+
//# sourceMappingURL=json-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-output.d.ts","sourceRoot":"","sources":["../../src/lib/json-output.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,OAAO,EAAE,aAAa,CAAC;IACvB,uBAAuB;IACvB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,gCAAgC;IAChC,QAAQ,CAAC,EAAE;QACT,yDAAyD;QACzD,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,yBAAyB;QACzB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,yBAAyB;QACzB,MAAM,CAAC,EAAE;YACP,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;KACH,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,WAAW,EAAE,EACrB,QAAQ,CAAC,EAAE,gBAAgB,CAAC,UAAU,CAAC,GACtC,gBAAgB,CAOlB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,MAAM,EAClB,UAAU,GAAE,MAAsB,GACjC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAE9D"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON output formatting for review results
|
|
3
|
+
*
|
|
4
|
+
* Provides structured JSON output for review results when
|
|
5
|
+
* not posting comments or generating code quality reports.
|
|
6
|
+
*/
|
|
7
|
+
import { writeFile } from 'fs/promises';
|
|
8
|
+
import { resolve } from 'path';
|
|
9
|
+
/**
|
|
10
|
+
* Format review results as JSON output
|
|
11
|
+
*/
|
|
12
|
+
export function formatReviewJson(summary, issues, metadata) {
|
|
13
|
+
return {
|
|
14
|
+
timestamp: new Date().toISOString(),
|
|
15
|
+
summary,
|
|
16
|
+
issues,
|
|
17
|
+
metadata,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Write review results to a JSON file
|
|
22
|
+
*/
|
|
23
|
+
export async function writeReviewJson(output, outputPath, workingDir = process.cwd()) {
|
|
24
|
+
const fullPath = resolve(workingDir, outputPath);
|
|
25
|
+
const jsonContent = JSON.stringify(output, null, 2);
|
|
26
|
+
await writeFile(fullPath, jsonContent, 'utf-8');
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Print review results as JSON to console
|
|
30
|
+
*/
|
|
31
|
+
export function printReviewJson(output) {
|
|
32
|
+
console.log(JSON.stringify(output, null, 2));
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=json-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-output.js","sourceRoot":"","sources":["../../src/lib/json-output.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AA2B/B;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAsB,EACtB,MAAqB,EACrB,QAAuC;IAEvC,OAAO;QACL,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,OAAO;QACP,MAAM;QACN,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAwB,EACxB,UAAkB,EAClB,aAAqB,OAAO,CAAC,GAAG,EAAE;IAElC,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACpD,MAAM,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAwB;IACtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-paths.d.ts","sourceRoot":"","sources":["../../src/lib/output-paths.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-paths.js","sourceRoot":"","sources":["../../src/lib/output-paths.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,eAAe,EAAE,2BAA2B;IAC5C,aAAa,EAAE,yBAAyB;CAChC,CAAC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform abstraction layer for GitHub and GitLab
|
|
3
|
+
*
|
|
4
|
+
* This module provides common interfaces for interacting with different
|
|
5
|
+
* code review platforms (GitHub, GitLab) in a unified way.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Represents a file change in a pull/merge request
|
|
9
|
+
*/
|
|
10
|
+
export interface FileChange {
|
|
11
|
+
/** Path to the file */
|
|
12
|
+
filename: string;
|
|
13
|
+
/** Type of change */
|
|
14
|
+
status: 'added' | 'removed' | 'modified' | 'renamed' | 'copied' | 'changed' | 'unchanged';
|
|
15
|
+
/** Number of lines added */
|
|
16
|
+
additions: number;
|
|
17
|
+
/** Number of lines deleted */
|
|
18
|
+
deletions: number;
|
|
19
|
+
/** Unified diff patch */
|
|
20
|
+
patch?: string;
|
|
21
|
+
/** Previous filename (for renamed files) */
|
|
22
|
+
previousFilename?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Represents a pull/merge request
|
|
26
|
+
*/
|
|
27
|
+
export interface PullRequest {
|
|
28
|
+
/** PR/MR number or ID */
|
|
29
|
+
number: number;
|
|
30
|
+
/** Title */
|
|
31
|
+
title: string;
|
|
32
|
+
/** Description/body */
|
|
33
|
+
description?: string;
|
|
34
|
+
/** Author username or name */
|
|
35
|
+
author: string;
|
|
36
|
+
/** Source branch */
|
|
37
|
+
sourceBranch: string;
|
|
38
|
+
/** Target branch */
|
|
39
|
+
targetBranch: string;
|
|
40
|
+
/** Head commit SHA */
|
|
41
|
+
headSha: string;
|
|
42
|
+
/** Additional platform-specific data */
|
|
43
|
+
platformData?: unknown;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Represents a comment on a PR/MR
|
|
47
|
+
*/
|
|
48
|
+
export interface Comment {
|
|
49
|
+
/** Comment ID */
|
|
50
|
+
id: number | string;
|
|
51
|
+
/** Comment body/content */
|
|
52
|
+
body: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Position data for inline comments
|
|
56
|
+
*/
|
|
57
|
+
export interface InlineCommentPosition {
|
|
58
|
+
/** File path */
|
|
59
|
+
path: string;
|
|
60
|
+
/** Line number in the new version */
|
|
61
|
+
line: number;
|
|
62
|
+
/** Commit SHA (GitHub) or diff refs (GitLab) */
|
|
63
|
+
commitSha?: string;
|
|
64
|
+
baseSha?: string;
|
|
65
|
+
headSha?: string;
|
|
66
|
+
startSha?: string;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Common interface for platform clients (GitHub, GitLab, etc.)
|
|
70
|
+
*/
|
|
71
|
+
export interface PlatformClient {
|
|
72
|
+
/**
|
|
73
|
+
* Get pull/merge request details
|
|
74
|
+
*/
|
|
75
|
+
getPullRequest(projectId: string, prNumber: number): Promise<PullRequest>;
|
|
76
|
+
/**
|
|
77
|
+
* Get list of changed files in a PR/MR
|
|
78
|
+
*/
|
|
79
|
+
getChangedFiles(projectId: string, prNumber: number): Promise<FileChange[]>;
|
|
80
|
+
/**
|
|
81
|
+
* Get existing comments on the PR/MR
|
|
82
|
+
*/
|
|
83
|
+
getComments(projectId: string, prNumber: number): Promise<Comment[]>;
|
|
84
|
+
/**
|
|
85
|
+
* Get existing inline/review comments
|
|
86
|
+
*/
|
|
87
|
+
getInlineComments(projectId: string, prNumber: number): Promise<Comment[]>;
|
|
88
|
+
/**
|
|
89
|
+
* Create a general comment on the PR/MR
|
|
90
|
+
*/
|
|
91
|
+
createComment(projectId: string, prNumber: number, body: string): Promise<void>;
|
|
92
|
+
/**
|
|
93
|
+
* Update an existing comment
|
|
94
|
+
*/
|
|
95
|
+
updateComment(projectId: string, prNumber: number, commentId: number | string, body: string): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Create an inline comment at a specific line
|
|
98
|
+
*/
|
|
99
|
+
createInlineComment(projectId: string, prNumber: number, body: string, position: InlineCommentPosition): Promise<void>;
|
|
100
|
+
/**
|
|
101
|
+
* Create multiple inline comments in bulk (if supported)
|
|
102
|
+
* Falls back to individual comments if not supported
|
|
103
|
+
*/
|
|
104
|
+
createBulkInlineComments(projectId: string, prNumber: number, comments: Array<{
|
|
105
|
+
body: string;
|
|
106
|
+
position: InlineCommentPosition;
|
|
107
|
+
}>): Promise<void>;
|
|
108
|
+
/**
|
|
109
|
+
* Add labels to the PR/MR
|
|
110
|
+
*/
|
|
111
|
+
addLabels(projectId: string, prNumber: number, labels: string[]): Promise<void>;
|
|
112
|
+
/**
|
|
113
|
+
* Check if PR/MR has a specific label
|
|
114
|
+
*/
|
|
115
|
+
hasLabel(projectId: string, prNumber: number, label: string): Promise<boolean>;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Validator for checking if a line can be commented on
|
|
119
|
+
*/
|
|
120
|
+
export interface LineValidator {
|
|
121
|
+
/**
|
|
122
|
+
* Check if a line number is valid for commenting
|
|
123
|
+
*/
|
|
124
|
+
isValidLine(file: string, line: number): boolean;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Factory function type for creating platform clients
|
|
128
|
+
*/
|
|
129
|
+
export type PlatformClientFactory = () => PlatformClient;
|
|
130
|
+
//# sourceMappingURL=platform-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-client.d.ts","sourceRoot":"","sources":["../../src/lib/platform-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IAC1F,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,iBAAiB;IACjB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE1E;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAE5E;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAErE;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAE3E;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhF;;OAEG;IACH,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;OAEG;IACH,mBAAmB,CACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;OAGG;IACH,wBAAwB,CACtB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,qBAAqB,CAAA;KAAE,CAAC,GACjE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhF;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAChF;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-client.js","sourceRoot":"","sources":["../../src/lib/platform-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Position validation utilities for platform-specific inline comment requirements
|
|
3
|
+
*/
|
|
4
|
+
import type { InlineCommentPosition } from './platform-client.js';
|
|
5
|
+
/**
|
|
6
|
+
* Result of position validation
|
|
7
|
+
*/
|
|
8
|
+
export interface PositionValidationResult {
|
|
9
|
+
isValid: boolean;
|
|
10
|
+
error?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Base interface for position validators
|
|
14
|
+
*/
|
|
15
|
+
export interface PositionValidator {
|
|
16
|
+
validate(position: InlineCommentPosition): PositionValidationResult;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* GitHub position validator
|
|
20
|
+
* Requires: commitSha
|
|
21
|
+
*/
|
|
22
|
+
export declare class GitHubPositionValidator implements PositionValidator {
|
|
23
|
+
validate(position: InlineCommentPosition): PositionValidationResult;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* GitLab position validator
|
|
27
|
+
* Requires: baseSha, headSha, startSha
|
|
28
|
+
*/
|
|
29
|
+
export declare class GitLabPositionValidator implements PositionValidator {
|
|
30
|
+
validate(position: InlineCommentPosition): PositionValidationResult;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Helper to validate and throw if invalid
|
|
34
|
+
*/
|
|
35
|
+
export declare function validatePositionOrThrow(position: InlineCommentPosition, validator: PositionValidator): void;
|
|
36
|
+
//# sourceMappingURL=position-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"position-validator.d.ts","sourceRoot":"","sources":["../../src/lib/position-validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,GAAG,wBAAwB,CAAC;CACrE;AAED;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAC/D,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,GAAG,wBAAwB;CASpE;AAED;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAC/D,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,GAAG,wBAAwB;CASpE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,qBAAqB,EAC/B,SAAS,EAAE,iBAAiB,GAC3B,IAAI,CAKN"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Position validation utilities for platform-specific inline comment requirements
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* GitHub position validator
|
|
6
|
+
* Requires: commitSha
|
|
7
|
+
*/
|
|
8
|
+
export class GitHubPositionValidator {
|
|
9
|
+
validate(position) {
|
|
10
|
+
if (!position.commitSha) {
|
|
11
|
+
return {
|
|
12
|
+
isValid: false,
|
|
13
|
+
error: 'GitHub requires commitSha for inline comments',
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
return { isValid: true };
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* GitLab position validator
|
|
21
|
+
* Requires: baseSha, headSha, startSha
|
|
22
|
+
*/
|
|
23
|
+
export class GitLabPositionValidator {
|
|
24
|
+
validate(position) {
|
|
25
|
+
if (!position.baseSha || !position.headSha || !position.startSha) {
|
|
26
|
+
return {
|
|
27
|
+
isValid: false,
|
|
28
|
+
error: 'GitLab requires baseSha, headSha, and startSha for inline comments',
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return { isValid: true };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Helper to validate and throw if invalid
|
|
36
|
+
*/
|
|
37
|
+
export function validatePositionOrThrow(position, validator) {
|
|
38
|
+
const result = validator.validate(position);
|
|
39
|
+
if (!result.isValid) {
|
|
40
|
+
throw new Error(result.error);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=position-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"position-validator.js","sourceRoot":"","sources":["../../src/lib/position-validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmBH;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IAClC,QAAQ,CAAC,QAA+B;QACtC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,+CAA+C;aACvD,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IAClC,QAAQ,CAAC,QAA+B;QACtC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACjE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,oEAAoE;aAC5E,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAA+B,EAC/B,SAA4B;IAE5B,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repository validation utilities for PR/MR reviews
|
|
3
|
+
*
|
|
4
|
+
* This module handles repository and branch validation to ensure
|
|
5
|
+
* that reviews are run from the correct repository and branch.
|
|
6
|
+
*/
|
|
7
|
+
import type { PullRequest } from './platform-client.js';
|
|
8
|
+
export interface RepoInfo {
|
|
9
|
+
host?: string;
|
|
10
|
+
repoPath?: string;
|
|
11
|
+
remoteUrl?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface BaseBranchResolution {
|
|
14
|
+
baseBranch?: string;
|
|
15
|
+
resolvedBaseBranch?: string;
|
|
16
|
+
source?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Normalize a repository path by removing leading slashes and .git suffix
|
|
20
|
+
*/
|
|
21
|
+
export declare function normalizeRepoPath(path: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Parse a git remote URL to extract host and repository path
|
|
24
|
+
*/
|
|
25
|
+
export declare function parseRemoteUrl(remoteUrl: string): RepoInfo | null;
|
|
26
|
+
/**
|
|
27
|
+
* Extract expected repository info from PR/MR platform data
|
|
28
|
+
*/
|
|
29
|
+
export declare function getExpectedRepoInfo(pr: {
|
|
30
|
+
platformData?: unknown;
|
|
31
|
+
}, projectId: string): RepoInfo | null;
|
|
32
|
+
/**
|
|
33
|
+
* Normalize a base branch name by adding origin/ prefix if needed
|
|
34
|
+
*/
|
|
35
|
+
export declare function normalizeBaseBranch(baseBranch?: string): string | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Resolve the base branch from CLI, environment variables, or PR/MR data
|
|
38
|
+
*/
|
|
39
|
+
export declare function resolveBaseBranch(cliBaseBranch?: string, targetBranch?: string): BaseBranchResolution;
|
|
40
|
+
/**
|
|
41
|
+
* Generate a canonical git diff command for documentation purposes
|
|
42
|
+
*/
|
|
43
|
+
export declare function getCanonicalDiffCommand(pr: PullRequest, baseBranchResolution: BaseBranchResolution): string;
|
|
44
|
+
/**
|
|
45
|
+
* Enforce that the current working directory matches the PR/MR repository and branch
|
|
46
|
+
*
|
|
47
|
+
* This prevents accidentally reviewing the wrong repository or branch.
|
|
48
|
+
*
|
|
49
|
+
* @throws Error if repository or branch doesn't match
|
|
50
|
+
*/
|
|
51
|
+
export declare function enforceRepoBranchMatch(workingDir: string, projectId: string, pr: PullRequest): Promise<void>;
|
|
52
|
+
//# sourceMappingURL=repository-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-validator.d.ts","sourceRoot":"","sources":["../../src/lib/repository-validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CA8BjE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,EAC9B,SAAS,EAAE,MAAM,GAChB,QAAQ,GAAG,IAAI,CAyCjB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,aAAa,CAAC,EAAE,MAAM,EACtB,YAAY,CAAC,EAAE,MAAM,GACpB,oBAAoB,CAoDtB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,WAAW,EACf,oBAAoB,EAAE,oBAAoB,GACzC,MAAM,CA0BR;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,WAAW,GACd,OAAO,CAAC,IAAI,CAAC,CAiEf"}
|