@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
package/README.md
CHANGED
|
@@ -1,32 +1,45 @@
|
|
|
1
|
-
# DRS -
|
|
1
|
+
# DRS - Diff Review System
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Intelligent Code Review Platform for GitLab and GitHub**
|
|
4
|
+
|
|
5
|
+
Enterprise-grade automated code review for Merge Requests and Pull Requests, powered by OpenCode SDK and Claude.
|
|
4
6
|
|
|
5
7
|
## Features
|
|
6
8
|
|
|
7
|
-
- **
|
|
8
|
-
- **Specialized
|
|
9
|
-
- **Multi-Platform Support**:
|
|
10
|
-
- **
|
|
11
|
-
- **
|
|
12
|
-
- **
|
|
9
|
+
- **Comprehensive Analysis**: Advanced code review using Claude's latest models
|
|
10
|
+
- **Specialized Review Domains**: Security, quality, style, performance, and documentation analysis
|
|
11
|
+
- **Multi-Platform Support**: Native integration with GitLab and GitHub
|
|
12
|
+
- **Flexible Deployment**: CI/CD pipelines or local CLI
|
|
13
|
+
- **Review Modes**: Multi-agent deep review, single-pass unified review, and hybrid escalation
|
|
14
|
+
- **Unified Reviewer**: One-pass JSON output with severity-tagged findings across domains
|
|
15
|
+
- **PR/MR Descriptions**: Optional auto-generated descriptions and labels for pull requests
|
|
16
|
+
- **Highly Customizable**: Configure review agents with project-specific rules
|
|
17
|
+
- **Deep Integration**: Full API support for both GitLab and GitHub platforms
|
|
13
18
|
|
|
14
19
|
## Quick Start
|
|
15
20
|
|
|
16
|
-
### 1.
|
|
21
|
+
### 1. Prerequisites
|
|
22
|
+
|
|
23
|
+
Install OpenCode CLI (required for in-process server mode):
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install -g opencode-ai
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 2. Install DRS
|
|
17
30
|
|
|
18
31
|
```bash
|
|
19
32
|
npm install -g @diff-review-system/drs
|
|
20
33
|
```
|
|
21
34
|
|
|
22
|
-
###
|
|
35
|
+
### 3. Initialize Project
|
|
23
36
|
|
|
24
37
|
```bash
|
|
25
38
|
cd your-project
|
|
26
39
|
drs init
|
|
27
40
|
```
|
|
28
41
|
|
|
29
|
-
###
|
|
42
|
+
### 4. Configure Environment
|
|
30
43
|
|
|
31
44
|
```bash
|
|
32
45
|
# Copy example env file
|
|
@@ -36,12 +49,16 @@ cp .env.example .env
|
|
|
36
49
|
# - GITLAB_TOKEN: Your GitLab access token (for GitLab MRs)
|
|
37
50
|
# - GITHUB_TOKEN: Your GitHub access token (for GitHub PRs)
|
|
38
51
|
# - OPENCODE_SERVER: URL of your OpenCode instance (optional - will start in-process if not set)
|
|
39
|
-
# -
|
|
52
|
+
# - Provider API Key: Set the API key for your chosen model provider
|
|
53
|
+
# - ANTHROPIC_API_KEY for Claude models (e.g., anthropic/claude-opus-4-5-20251101)
|
|
54
|
+
# - ZHIPU_API_KEY for GLM models (e.g., zhipuai/glm-4.7)
|
|
55
|
+
# - OPENAI_API_KEY for OpenAI models (e.g., openai/gpt-4)
|
|
56
|
+
# - See .env.example for all supported providers
|
|
40
57
|
```
|
|
41
58
|
|
|
42
59
|
**Note**: `OPENCODE_SERVER` is optional. If not provided, DRS will automatically start an OpenCode server in-process. For production deployments or when sharing across multiple tools, you can run a dedicated OpenCode server and set the URL.
|
|
43
60
|
|
|
44
|
-
###
|
|
61
|
+
### 5. Review Local Changes
|
|
45
62
|
|
|
46
63
|
```bash
|
|
47
64
|
# Review unstaged changes
|
|
@@ -67,8 +84,41 @@ drs review-local
|
|
|
67
84
|
# Review specific GitLab MR
|
|
68
85
|
drs review-mr --project my-org/my-repo --mr 123 --post-comments
|
|
69
86
|
|
|
87
|
+
# Review GitLab MR and auto-generate a description (optionally post it)
|
|
88
|
+
drs review-mr --project my-org/my-repo --mr 123 --describe
|
|
89
|
+
drs review-mr --project my-org/my-repo --mr 123 --describe --post-description
|
|
90
|
+
|
|
91
|
+
# Review GitLab MR and generate code quality report
|
|
92
|
+
drs review-mr --project my-org/my-repo --mr 123 --code-quality-report gl-code-quality-report.json
|
|
93
|
+
|
|
70
94
|
# Review specific GitHub PR
|
|
71
95
|
drs review-pr --owner octocat --repo hello-world --pr 456 --post-comments
|
|
96
|
+
|
|
97
|
+
# Review GitHub PR and auto-generate a description (optionally post it)
|
|
98
|
+
drs review-pr --owner octocat --repo hello-world --pr 456 --describe
|
|
99
|
+
drs review-pr --owner octocat --repo hello-world --pr 456 --describe --post-description
|
|
100
|
+
|
|
101
|
+
# Override base branch used for diff hints
|
|
102
|
+
drs review-pr --owner octocat --repo hello-world --pr 456 --base-branch release/2026-01
|
|
103
|
+
|
|
104
|
+
# Generate review JSON first, then post comments after manual review
|
|
105
|
+
drs review-pr --owner octocat --repo hello-world --pr 456 -o review.json
|
|
106
|
+
drs post-comments --input review.json --owner octocat --repo hello-world --pr 456
|
|
107
|
+
|
|
108
|
+
# Show the diff context passed to agents
|
|
109
|
+
drs show-changes --owner octocat --repo hello-world --pr 456
|
|
110
|
+
|
|
111
|
+
# Show diff context for a single file
|
|
112
|
+
drs show-changes --owner octocat --repo hello-world --pr 456 --file src/app.ts
|
|
113
|
+
|
|
114
|
+
# Show diff context using a specific base branch
|
|
115
|
+
drs show-changes --owner octocat --repo hello-world --pr 456 --base-branch release/2026-01
|
|
116
|
+
|
|
117
|
+
# Generate PR/MR descriptions on demand
|
|
118
|
+
drs describe-pr --owner octocat --repo hello-world --pr 456
|
|
119
|
+
drs describe-pr --owner octocat --repo hello-world --pr 456 --post-description
|
|
120
|
+
drs describe-mr --project my-org/my-repo --mr 123
|
|
121
|
+
drs describe-mr --project my-org/my-repo --mr 123 --post-description
|
|
72
122
|
```
|
|
73
123
|
|
|
74
124
|
### Mode 2: GitLab CI/CD
|
|
@@ -77,98 +127,161 @@ Add to your `.gitlab-ci.yml`:
|
|
|
77
127
|
|
|
78
128
|
```yaml
|
|
79
129
|
include:
|
|
80
|
-
- remote: 'https://raw.githubusercontent.com/
|
|
130
|
+
- remote: 'https://raw.githubusercontent.com/manojlds/drs/main/src/ci/gitlab-ci.template.yml'
|
|
81
131
|
|
|
82
132
|
ai_review:
|
|
83
133
|
extends: .drs_review
|
|
84
|
-
|
|
85
|
-
OPENCODE_SERVER: "http://opencode.internal:3000"
|
|
134
|
+
stage: review
|
|
86
135
|
```
|
|
87
136
|
|
|
137
|
+
**See [GitLab CI Integration Guide](docs/GITLAB_CI_INTEGRATION.md)** for:
|
|
138
|
+
- Using the official OpenCode container (`ghcr.io/anomalyco/opencode`)
|
|
139
|
+
- Parallel pipeline strategies (child pipelines, DAG with needs)
|
|
140
|
+
- Complete examples that don't block your main pipeline
|
|
141
|
+
|
|
88
142
|
### Mode 3: GitHub Actions
|
|
89
143
|
|
|
90
|
-
**
|
|
91
|
-
- Set up a remote OpenCode server and configure `OPENCODE_SERVER` secret
|
|
92
|
-
- Or install OpenCode CLI in the workflow (see below)
|
|
144
|
+
DRS includes a **secure, pre-configured workflow** at `.github/workflows/pr-review.yml` with built-in protection against external PR abuse.
|
|
93
145
|
|
|
94
|
-
|
|
146
|
+
**Security Features**:
|
|
147
|
+
- ā
**Auto-review for trusted contributors** (repository members/collaborators)
|
|
148
|
+
- āøļø **Manual approval required** for external contributors
|
|
149
|
+
- š **Cost protection** prevents spam PRs from draining API credits
|
|
150
|
+
- š·ļø **Label-based approval** with `safe-to-review` label
|
|
95
151
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
pull-requests: write
|
|
109
|
-
|
|
110
|
-
steps:
|
|
111
|
-
- uses: actions/checkout@v4
|
|
112
|
-
- uses: actions/setup-node@v4
|
|
113
|
-
with:
|
|
114
|
-
node-version: '20'
|
|
115
|
-
|
|
116
|
-
- name: Build from source
|
|
117
|
-
run: |
|
|
118
|
-
npm ci
|
|
119
|
-
npm run build
|
|
120
|
-
|
|
121
|
-
- name: Review Pull Request
|
|
122
|
-
env:
|
|
123
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
124
|
-
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
125
|
-
OPENCODE_SERVER: ${{ secrets.OPENCODE_SERVER }} # Required: Set this in repository secrets
|
|
126
|
-
run: |
|
|
127
|
-
node dist/cli/index.js review-pr \
|
|
128
|
-
--owner ${{ github.event.repository.owner.login }} \
|
|
129
|
-
--repo ${{ github.event.repository.name }} \
|
|
130
|
-
--pr ${{ github.event.pull_request.number }} \
|
|
131
|
-
--post-comments
|
|
132
|
-
```
|
|
152
|
+
**Quick Setup**:
|
|
153
|
+
|
|
154
|
+
1. **Configure API Keys** in repository Settings ā Secrets:
|
|
155
|
+
- `ANTHROPIC_API_KEY` (for Claude models), or
|
|
156
|
+
- `OPENCODE_ZEN_API_KEY` (for OpenCode Zen), or
|
|
157
|
+
- `ZHIPU_API_KEY` (for ZhipuAI GLM models), or
|
|
158
|
+
- `OPENAI_API_KEY` (for OpenAI models)
|
|
159
|
+
|
|
160
|
+
2. **Set up External PR Protection** (Important!):
|
|
161
|
+
- Create GitHub Environment: `external-pr-review`
|
|
162
|
+
- Add required reviewers (maintainers)
|
|
163
|
+
- Create `safe-to-review` label
|
|
133
164
|
|
|
134
|
-
**
|
|
135
|
-
-
|
|
136
|
-
-
|
|
165
|
+
**See [GitHub Actions Integration Guide](docs/GITHUB_ACTIONS_INTEGRATION.md)** for:
|
|
166
|
+
- Complete setup instructions
|
|
167
|
+
- External PR security configuration
|
|
168
|
+
- Model configuration options
|
|
169
|
+
- Troubleshooting tips
|
|
137
170
|
|
|
138
|
-
|
|
171
|
+
**See [External PR Security Guide](docs/EXTERNAL_PR_SECURITY.md)** for:
|
|
172
|
+
- Detailed security setup
|
|
173
|
+
- Cost protection mechanisms
|
|
174
|
+
- Maintainer workflow
|
|
175
|
+
- Attack prevention strategies
|
|
139
176
|
|
|
140
|
-
|
|
177
|
+
## GitLab Code Quality Reports
|
|
178
|
+
|
|
179
|
+
DRS can generate GitLab-compatible code quality reports that integrate seamlessly with GitLab CI/CD. This provides an alternative (or complement) to inline MR comments.
|
|
180
|
+
|
|
181
|
+
### Why Use Code Quality Reports?
|
|
182
|
+
|
|
183
|
+
**Benefits:**
|
|
184
|
+
- **Native GitLab Integration**: Issues appear in the MR widget and Changes tab
|
|
185
|
+
- **Better UX**: Issues marked with symbols in the code gutter
|
|
186
|
+
- **All Severities**: Include MEDIUM/LOW issues without cluttering MR discussions
|
|
187
|
+
- **Historical Tracking**: GitLab tracks quality trends over time
|
|
188
|
+
- **Non-intrusive**: Doesn't create discussion threads
|
|
189
|
+
|
|
190
|
+
**When to Use:**
|
|
191
|
+
- Use **inline comments** (`--post-comments`) for critical issues requiring discussion
|
|
192
|
+
- Use **code quality reports** (`--code-quality-report`) for comprehensive static analysis
|
|
193
|
+
- Use **both together** for maximum visibility
|
|
194
|
+
|
|
195
|
+
### CLI Usage
|
|
141
196
|
|
|
142
197
|
```bash
|
|
143
|
-
#
|
|
144
|
-
|
|
145
|
-
|
|
198
|
+
# Generate code quality report only
|
|
199
|
+
drs review-mr --project my-org/my-repo --mr 123 \
|
|
200
|
+
--code-quality-report gl-code-quality-report.json
|
|
201
|
+
|
|
202
|
+
# Use both comments and code quality report
|
|
203
|
+
drs review-mr --project my-org/my-repo --mr 123 \
|
|
204
|
+
--post-comments \
|
|
205
|
+
--code-quality-report gl-code-quality-report.json
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### GitLab CI Integration
|
|
209
|
+
|
|
210
|
+
Add to your `.gitlab-ci.yml`:
|
|
211
|
+
|
|
212
|
+
```yaml
|
|
213
|
+
code_review:
|
|
214
|
+
stage: review
|
|
215
|
+
image: node:20-alpine
|
|
216
|
+
before_script:
|
|
217
|
+
- npm install -g @diff-review-system/drs opencode-ai
|
|
218
|
+
script:
|
|
219
|
+
- drs review-mr --project $CI_PROJECT_PATH --mr $CI_MERGE_REQUEST_IID
|
|
220
|
+
--code-quality-report gl-code-quality-report.json
|
|
221
|
+
artifacts:
|
|
222
|
+
reports:
|
|
223
|
+
codequality: gl-code-quality-report.json
|
|
224
|
+
expire_in: 1 week
|
|
225
|
+
only:
|
|
226
|
+
- merge_requests
|
|
227
|
+
```
|
|
146
228
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
229
|
+
The code quality report will appear in:
|
|
230
|
+
1. **MR Overview**: Widget showing new/resolved issues
|
|
231
|
+
2. **Changes Tab**: Gutter symbols on problematic lines
|
|
232
|
+
3. **Pipeline Tab**: Quality trend graphs
|
|
233
|
+
|
|
234
|
+
### Report Format
|
|
235
|
+
|
|
236
|
+
DRS generates reports in GitLab's CodeClimate-compatible format:
|
|
237
|
+
|
|
238
|
+
```json
|
|
239
|
+
[
|
|
240
|
+
{
|
|
241
|
+
"description": "Query uses string concatenation. Use parameterized queries instead.",
|
|
242
|
+
"check_name": "drs-security",
|
|
243
|
+
"fingerprint": "7815696ecbf1c96e6894b779456d330e",
|
|
244
|
+
"severity": "blocker",
|
|
245
|
+
"location": {
|
|
246
|
+
"path": "src/api/users.ts",
|
|
247
|
+
"lines": { "begin": 42 }
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
]
|
|
150
251
|
```
|
|
151
252
|
|
|
253
|
+
**Severity Mapping:**
|
|
254
|
+
- CRITICAL ā blocker
|
|
255
|
+
- HIGH ā critical
|
|
256
|
+
- MEDIUM ā major
|
|
257
|
+
- LOW ā minor
|
|
258
|
+
|
|
259
|
+
For more details, see [GitLab Code Quality Documentation](https://docs.gitlab.com/ci/testing/code_quality/).
|
|
260
|
+
|
|
152
261
|
## OpenCode Server Configuration
|
|
153
262
|
|
|
154
263
|
DRS supports two modes of OpenCode server operation:
|
|
155
264
|
|
|
156
265
|
### In-Process Server (Default)
|
|
157
266
|
|
|
158
|
-
If `OPENCODE_SERVER` is not set, DRS will automatically start an OpenCode server within the same process
|
|
267
|
+
If `OPENCODE_SERVER` is not set, DRS will automatically start an OpenCode server within the same process. **Note**: This still requires the OpenCode CLI to be installed globally.
|
|
159
268
|
|
|
160
269
|
```bash
|
|
161
|
-
#
|
|
270
|
+
# Install OpenCode CLI first (required)
|
|
271
|
+
npm install -g opencode-ai
|
|
272
|
+
|
|
273
|
+
# Then run DRS (server starts automatically)
|
|
162
274
|
drs review-local
|
|
163
275
|
```
|
|
164
276
|
|
|
165
277
|
**Pros:**
|
|
166
|
-
-
|
|
278
|
+
- Minimal configuration required (just install CLI)
|
|
167
279
|
- Automatic startup/shutdown
|
|
168
280
|
- Simpler deployment
|
|
169
281
|
- Lower latency
|
|
170
282
|
|
|
171
283
|
**Cons:**
|
|
284
|
+
- Requires OpenCode CLI installation
|
|
172
285
|
- Server lifetime tied to CLI process
|
|
173
286
|
- Cannot share across multiple tools
|
|
174
287
|
- Uses process resources
|
|
@@ -200,9 +313,6 @@ DRS uses OpenCode SDK with markdown-based agent definitions:
|
|
|
200
313
|
```
|
|
201
314
|
.opencode/
|
|
202
315
|
āāā agent/
|
|
203
|
-
ā āāā gitlab-reviewer.md # GitLab MR orchestrator
|
|
204
|
-
ā āāā github-reviewer.md # GitHub PR orchestrator
|
|
205
|
-
ā āāā local-reviewer.md # Local diff reviewer
|
|
206
316
|
ā āāā review/
|
|
207
317
|
ā āāā security.md # Security specialist
|
|
208
318
|
ā āāā quality.md # Code quality expert
|
|
@@ -219,8 +329,8 @@ Create custom agents in your project:
|
|
|
219
329
|
|
|
220
330
|
```bash
|
|
221
331
|
# Create custom security agent
|
|
222
|
-
mkdir -p .drs/agents
|
|
223
|
-
cat > .drs/agents/security.md << 'EOF'
|
|
332
|
+
mkdir -p .drs/agents/security
|
|
333
|
+
cat > .drs/agents/security/agent.md << 'EOF'
|
|
224
334
|
---
|
|
225
335
|
description: Custom security reviewer
|
|
226
336
|
model: opencode/claude-sonnet-4-5
|
|
@@ -245,11 +355,22 @@ review:
|
|
|
245
355
|
ignorePatterns:
|
|
246
356
|
- "*.test.ts"
|
|
247
357
|
- "*.md"
|
|
358
|
+
describe:
|
|
359
|
+
enabled: true
|
|
360
|
+
postDescription: false
|
|
361
|
+
|
|
362
|
+
describe:
|
|
363
|
+
model: opencode/glm-4.7-free
|
|
248
364
|
```
|
|
249
365
|
|
|
250
|
-
|
|
366
|
+
Notes:
|
|
367
|
+
- `review.describe` controls auto-description when running `review-mr` or `review-pr`.
|
|
368
|
+
- CLI flags override config: `--describe` / `--skip-describe` and `--post-description` / `--skip-post-description`.
|
|
369
|
+
- `describe.model` is used by `describe-mr`/`describe-pr` and by review-driven descriptions.
|
|
370
|
+
|
|
371
|
+
## Review Domains
|
|
251
372
|
|
|
252
|
-
### Security
|
|
373
|
+
### Security Analysis
|
|
253
374
|
|
|
254
375
|
Focuses on:
|
|
255
376
|
- OWASP Top 10 vulnerabilities
|
|
@@ -258,7 +379,7 @@ Focuses on:
|
|
|
258
379
|
- Sensitive data exposure
|
|
259
380
|
- Security misconfigurations
|
|
260
381
|
|
|
261
|
-
### Quality
|
|
382
|
+
### Quality Analysis
|
|
262
383
|
|
|
263
384
|
Reviews:
|
|
264
385
|
- Design patterns and anti-patterns
|
|
@@ -267,7 +388,7 @@ Reviews:
|
|
|
267
388
|
- Error handling
|
|
268
389
|
- Code smells
|
|
269
390
|
|
|
270
|
-
### Style
|
|
391
|
+
### Style Analysis
|
|
271
392
|
|
|
272
393
|
Checks:
|
|
273
394
|
- Naming conventions
|
|
@@ -276,7 +397,7 @@ Checks:
|
|
|
276
397
|
- Type safety (TypeScript)
|
|
277
398
|
- Unused code
|
|
278
399
|
|
|
279
|
-
### Performance
|
|
400
|
+
### Performance Analysis
|
|
280
401
|
|
|
281
402
|
Analyzes:
|
|
282
403
|
- Algorithmic complexity
|
|
@@ -293,7 +414,11 @@ Analyzes:
|
|
|
293
414
|
# Required (depending on platform)
|
|
294
415
|
GITLAB_TOKEN=glpat-xxx # For GitLab MR reviews
|
|
295
416
|
GITHUB_TOKEN=ghp-xxx # For GitHub PR reviews
|
|
296
|
-
|
|
417
|
+
|
|
418
|
+
# Provider API Keys (set the one for your chosen model provider)
|
|
419
|
+
ANTHROPIC_API_KEY=sk-ant-xxx # For Anthropic Claude models
|
|
420
|
+
ZHIPU_API_KEY=xxx # For ZhipuAI GLM models
|
|
421
|
+
OPENAI_API_KEY=sk-xxx # For OpenAI models
|
|
297
422
|
|
|
298
423
|
# Optional
|
|
299
424
|
OPENCODE_SERVER=http://localhost:3000 # Leave empty to start in-process server
|
|
@@ -317,6 +442,10 @@ See the `examples/` directory for:
|
|
|
317
442
|
|
|
318
443
|
## Development
|
|
319
444
|
|
|
445
|
+
For comprehensive local development and testing instructions, see [DEVELOPMENT.md](DEVELOPMENT.md).
|
|
446
|
+
|
|
447
|
+
Quick start:
|
|
448
|
+
|
|
320
449
|
```bash
|
|
321
450
|
# Install dependencies
|
|
322
451
|
npm install
|
|
@@ -334,6 +463,7 @@ npm run dev
|
|
|
334
463
|
## Requirements
|
|
335
464
|
|
|
336
465
|
- Node.js 20+
|
|
466
|
+
- OpenCode CLI (`npm install -g opencode-ai`) - Required even for in-process mode
|
|
337
467
|
- Anthropic API key (for Claude AI)
|
|
338
468
|
- GitLab access token (for GitLab MR reviews)
|
|
339
469
|
- GitHub access token (for GitHub PR reviews)
|
|
@@ -346,8 +476,11 @@ Apache-2.0
|
|
|
346
476
|
|
|
347
477
|
## Documentation
|
|
348
478
|
|
|
479
|
+
- [GitLab CI Integration Guide](docs/GITLAB_CI_INTEGRATION.md) - Complete guide for GitLab CI/CD setup
|
|
480
|
+
- [Development Guide](DEVELOPMENT.md) - Local development and testing guide
|
|
349
481
|
- [Design Document](DESIGN.md) - Original design using Claude Agent SDK
|
|
350
482
|
- [Architecture Document](ARCHITECTURE.md) - OpenCode SDK architecture
|
|
483
|
+
- [Publishing Guide](PUBLISHING_SETUP.md) - How to publish to npm
|
|
351
484
|
- [OpenCode Documentation](https://opencode.ai/docs)
|
|
352
485
|
- [GitLab API](https://docs.gitlab.com/ee/api/)
|
|
353
486
|
|
package/dist/ci/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/ci/runner.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAgBnD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/ci/runner.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAgBnD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA4DjD;AAED;;GAEG;AACH,wBAAgB,IAAI,IAAI,OAAO,CAE9B"}
|
package/dist/ci/runner.js
CHANGED
|
@@ -24,7 +24,7 @@ export function detectCIEnvironment() {
|
|
|
24
24
|
* Run review in CI/CD environment
|
|
25
25
|
*/
|
|
26
26
|
export async function runCIReview() {
|
|
27
|
-
console.log(chalk.bold.cyan('\n
|
|
27
|
+
console.log(chalk.bold.cyan('\nš DRS | CI/CD Analysis Runner\n'));
|
|
28
28
|
// Detect environment
|
|
29
29
|
const env = detectCIEnvironment();
|
|
30
30
|
if (env.platform === 'unknown') {
|
|
@@ -62,6 +62,8 @@ export async function runCIReview() {
|
|
|
62
62
|
projectId: env.projectId,
|
|
63
63
|
mrIid: env.mrIid,
|
|
64
64
|
postComments: true, // Always post comments in CI
|
|
65
|
+
describe: config.review.describe?.enabled ?? false,
|
|
66
|
+
postDescription: config.review.describe?.postDescription ?? false,
|
|
65
67
|
});
|
|
66
68
|
console.log(chalk.green.bold('\nā Review complete\n'));
|
|
67
69
|
}
|
|
@@ -75,8 +77,6 @@ export async function runCIReview() {
|
|
|
75
77
|
* Check if running in CI environment
|
|
76
78
|
*/
|
|
77
79
|
export function isCI() {
|
|
78
|
-
return !!(process.env.CI ||
|
|
79
|
-
process.env.GITLAB_CI ||
|
|
80
|
-
process.env.GITHUB_ACTIONS);
|
|
80
|
+
return !!(process.env.CI || process.env.GITLAB_CI || process.env.GITHUB_ACTIONS);
|
|
81
81
|
}
|
|
82
82
|
//# sourceMappingURL=runner.js.map
|
package/dist/ci/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/ci/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAW/C;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,sBAAsB;IACtB,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;QACrC,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;YACpC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;gBACrC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC;gBAChD,CAAC,CAAC,SAAS;YACb,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,mCAAmC;YAC7D,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,mCAAmC;YAC7D,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;SACrC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/ci/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type DRSConfig } from '../lib/config.js';
|
|
2
|
+
export interface DescribeMROptions {
|
|
3
|
+
projectId: string;
|
|
4
|
+
mrIid: number;
|
|
5
|
+
postDescription?: boolean;
|
|
6
|
+
outputPath?: string;
|
|
7
|
+
jsonOutput?: boolean;
|
|
8
|
+
debug?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function describeMR(config: DRSConfig, options: DescribeMROptions): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=describe-mr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-mr.d.ts","sourceRoot":"","sources":["../../src/cli/describe-mr.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAe7E,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,iBA4H7E"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getDescriberModelOverride } from '../lib/config.js';
|
|
3
|
+
import { createGitLabClient } from '../gitlab/client.js';
|
|
4
|
+
import { GitLabPlatformAdapter } from '../gitlab/platform-adapter.js';
|
|
5
|
+
import { createOpencodeClientInstance } from '../opencode/client.js';
|
|
6
|
+
import { buildDescribeInstructions } from '../lib/describe-core.js';
|
|
7
|
+
import { loadGlobalContext } from '../lib/context-loader.js';
|
|
8
|
+
import { displayDescription, normalizeDescription, postDescription, } from '../lib/description-formatter.js';
|
|
9
|
+
import { compressFilesWithDiffs, formatCompressionSummary } from '../lib/context-compression.js';
|
|
10
|
+
import { parseDescribeOutput } from '../lib/describe-parser.js';
|
|
11
|
+
export async function describeMR(config, options) {
|
|
12
|
+
console.log(chalk.bold.blue('\nš Generating MR Description\n'));
|
|
13
|
+
// Initialize GitLab client
|
|
14
|
+
const gitlabClient = createGitLabClient();
|
|
15
|
+
const platformAdapter = new GitLabPlatformAdapter(gitlabClient);
|
|
16
|
+
// Fetch MR files
|
|
17
|
+
console.log(chalk.dim(`Fetching MR !${options.mrIid} from project ${options.projectId}...`));
|
|
18
|
+
const files = await platformAdapter.getChangedFiles(options.projectId, options.mrIid);
|
|
19
|
+
console.log(chalk.dim(`Found ${files.length} changed files\n`));
|
|
20
|
+
// Build context for the describer agent
|
|
21
|
+
const label = `MR !${options.mrIid}`;
|
|
22
|
+
const filesWithDiffs = files.map((file) => ({
|
|
23
|
+
filename: file.filename,
|
|
24
|
+
patch: file.patch,
|
|
25
|
+
}));
|
|
26
|
+
const compression = compressFilesWithDiffs(filesWithDiffs, config.contextCompression);
|
|
27
|
+
const compressionSummary = formatCompressionSummary(compression);
|
|
28
|
+
if (compressionSummary) {
|
|
29
|
+
console.log(chalk.yellow('ā Diff content trimmed to fit token budget.\n'));
|
|
30
|
+
}
|
|
31
|
+
const includeProjectContext = config.describe?.includeProjectContext ?? true;
|
|
32
|
+
const projectContext = includeProjectContext ? loadGlobalContext() : null;
|
|
33
|
+
const instructions = buildDescribeInstructions(label, compression.files, compressionSummary, projectContext ?? undefined);
|
|
34
|
+
if (options.debug) {
|
|
35
|
+
console.log(chalk.yellow('\n=== Agent Instructions ==='));
|
|
36
|
+
console.log(instructions);
|
|
37
|
+
console.log(chalk.yellow('=== End Instructions ===\n'));
|
|
38
|
+
}
|
|
39
|
+
// Initialize OpenCode client with model overrides
|
|
40
|
+
const modelOverrides = getDescriberModelOverride(config);
|
|
41
|
+
const opencode = await createOpencodeClientInstance({
|
|
42
|
+
baseUrl: config.opencode.serverUrl ?? undefined,
|
|
43
|
+
directory: process.cwd(),
|
|
44
|
+
modelOverrides,
|
|
45
|
+
provider: config.opencode.provider,
|
|
46
|
+
debug: options.debug,
|
|
47
|
+
});
|
|
48
|
+
try {
|
|
49
|
+
console.log(chalk.dim('Running MR describer agent...\n'));
|
|
50
|
+
// Run the describer agent
|
|
51
|
+
const session = await opencode.createSession({
|
|
52
|
+
agent: 'describe/pr-describer',
|
|
53
|
+
message: instructions,
|
|
54
|
+
});
|
|
55
|
+
// Collect all assistant messages from the session
|
|
56
|
+
let fullResponse = '';
|
|
57
|
+
for await (const message of opencode.streamMessages(session.id)) {
|
|
58
|
+
if (message.role === 'assistant') {
|
|
59
|
+
fullResponse += message.content;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Parse the JSON output from the agent
|
|
63
|
+
let description;
|
|
64
|
+
try {
|
|
65
|
+
description = await parseDescribeOutput(process.cwd(), options.debug, fullResponse);
|
|
66
|
+
}
|
|
67
|
+
catch (parseError) {
|
|
68
|
+
console.error(chalk.red('Failed to parse agent output as JSON'));
|
|
69
|
+
console.log(chalk.dim('Agent output:'), fullResponse);
|
|
70
|
+
const reason = parseError instanceof Error ? `: ${parseError.message}` : '';
|
|
71
|
+
throw new Error(`Agent did not return valid JSON output${reason}`);
|
|
72
|
+
}
|
|
73
|
+
let normalizedDescription;
|
|
74
|
+
try {
|
|
75
|
+
normalizedDescription = normalizeDescription(description);
|
|
76
|
+
}
|
|
77
|
+
catch (validationError) {
|
|
78
|
+
console.error(chalk.red('Agent output did not match expected description schema'));
|
|
79
|
+
console.log(chalk.dim('Agent output:'), fullResponse);
|
|
80
|
+
throw validationError;
|
|
81
|
+
}
|
|
82
|
+
// Display the description
|
|
83
|
+
displayDescription(normalizedDescription, 'MR');
|
|
84
|
+
// Save to JSON file if requested
|
|
85
|
+
if (options.outputPath) {
|
|
86
|
+
const fs = await import('fs/promises');
|
|
87
|
+
await fs.writeFile(options.outputPath, JSON.stringify(normalizedDescription, null, 2), 'utf-8');
|
|
88
|
+
console.log(chalk.green(`\nā Description saved to ${options.outputPath}`));
|
|
89
|
+
}
|
|
90
|
+
// Output JSON if requested
|
|
91
|
+
if (options.jsonOutput) {
|
|
92
|
+
console.log('\n' + JSON.stringify(normalizedDescription, null, 2));
|
|
93
|
+
}
|
|
94
|
+
// Post description to MR if requested
|
|
95
|
+
if (options.postDescription) {
|
|
96
|
+
await postDescription(platformAdapter, options.projectId, options.mrIid, normalizedDescription, 'MR');
|
|
97
|
+
}
|
|
98
|
+
console.log(chalk.green('\nā MR description generated successfully\n'));
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
await opencode.shutdown();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=describe-mr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-mr.js","sourceRoot":"","sources":["../../src/cli/describe-mr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type DRSConfig } from '../lib/config.js';
|
|
2
|
+
export interface DescribePROptions {
|
|
3
|
+
owner: string;
|
|
4
|
+
repo: string;
|
|
5
|
+
prNumber: number;
|
|
6
|
+
postDescription?: boolean;
|
|
7
|
+
outputPath?: string;
|
|
8
|
+
jsonOutput?: boolean;
|
|
9
|
+
debug?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function describePR(config: DRSConfig, options: DescribePROptions): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=describe-pr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-pr.d.ts","sourceRoot":"","sources":["../../src/cli/describe-pr.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAe7E,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,iBA+H7E"}
|