@diff-review-system/drs 1.1.2 → 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.
Files changed (229) hide show
  1. package/.opencode/agent/describe/pr-describer.md +221 -0
  2. package/.opencode/agent/review/documentation.md +56 -0
  3. package/.opencode/agent/review/performance.md +32 -139
  4. package/.opencode/agent/review/quality.md +36 -113
  5. package/.opencode/agent/review/security.md +32 -97
  6. package/.opencode/agent/review/style.md +4 -0
  7. package/.opencode/agent/review/unified-reviewer.md +74 -0
  8. package/.opencode/opencode.jsonc +4 -29
  9. package/.opencode/tool/write_json_output.ts +24 -0
  10. package/README.md +48 -21
  11. package/dist/ci/runner.d.ts.map +1 -1
  12. package/dist/ci/runner.js +2 -0
  13. package/dist/ci/runner.js.map +1 -1
  14. package/dist/cli/describe-mr.d.ts +11 -0
  15. package/dist/cli/describe-mr.d.ts.map +1 -0
  16. package/dist/cli/describe-mr.js +104 -0
  17. package/dist/cli/describe-mr.js.map +1 -0
  18. package/dist/cli/describe-pr.d.ts +12 -0
  19. package/dist/cli/describe-pr.d.ts.map +1 -0
  20. package/dist/cli/describe-pr.js +105 -0
  21. package/dist/cli/describe-pr.js.map +1 -0
  22. package/dist/cli/index.js +220 -16
  23. package/dist/cli/index.js.map +1 -1
  24. package/dist/cli/init.d.ts +1 -1
  25. package/dist/cli/init.d.ts.map +1 -1
  26. package/dist/cli/init.js +273 -145
  27. package/dist/cli/init.js.map +1 -1
  28. package/dist/cli/post-comments.d.ts +15 -0
  29. package/dist/cli/post-comments.d.ts.map +1 -0
  30. package/dist/cli/post-comments.js +216 -0
  31. package/dist/cli/post-comments.js.map +1 -0
  32. package/dist/cli/review-local.d.ts +3 -0
  33. package/dist/cli/review-local.d.ts.map +1 -1
  34. package/dist/cli/review-local.js +44 -18
  35. package/dist/cli/review-local.js.map +1 -1
  36. package/dist/cli/review-mr.d.ts +6 -0
  37. package/dist/cli/review-mr.d.ts.map +1 -1
  38. package/dist/cli/review-mr.js +63 -7
  39. package/dist/cli/review-mr.js.map +1 -1
  40. package/dist/cli/review-pr.d.ts +6 -0
  41. package/dist/cli/review-pr.d.ts.map +1 -1
  42. package/dist/cli/review-pr.js +8 -1
  43. package/dist/cli/review-pr.js.map +1 -1
  44. package/dist/cli/show-changes.d.ts +15 -0
  45. package/dist/cli/show-changes.d.ts.map +1 -0
  46. package/dist/cli/show-changes.js +184 -0
  47. package/dist/cli/show-changes.js.map +1 -0
  48. package/dist/github/platform-adapter.d.ts.map +1 -1
  49. package/dist/github/platform-adapter.js +4 -2
  50. package/dist/github/platform-adapter.js.map +1 -1
  51. package/dist/gitlab/client.d.ts.map +1 -1
  52. package/dist/gitlab/client.js +1 -1
  53. package/dist/gitlab/client.js.map +1 -1
  54. package/dist/gitlab/platform-adapter.d.ts.map +1 -1
  55. package/dist/gitlab/platform-adapter.js +6 -5
  56. package/dist/gitlab/platform-adapter.js.map +1 -1
  57. package/dist/lib/change-summary.d.ts +8 -0
  58. package/dist/lib/change-summary.d.ts.map +1 -0
  59. package/dist/lib/change-summary.js +2 -0
  60. package/dist/lib/change-summary.js.map +1 -0
  61. package/dist/lib/comment-formatter.d.ts +3 -2
  62. package/dist/lib/comment-formatter.d.ts.map +1 -1
  63. package/dist/lib/comment-formatter.js +16 -2
  64. package/dist/lib/comment-formatter.js.map +1 -1
  65. package/dist/lib/comment-formatter.test.d.ts +2 -0
  66. package/dist/lib/comment-formatter.test.d.ts.map +1 -0
  67. package/dist/lib/comment-formatter.test.js +607 -0
  68. package/dist/lib/comment-formatter.test.js.map +1 -0
  69. package/dist/lib/comment-manager.test.d.ts +2 -0
  70. package/dist/lib/comment-manager.test.d.ts.map +1 -0
  71. package/dist/lib/comment-manager.test.js +618 -0
  72. package/dist/lib/comment-manager.test.js.map +1 -0
  73. package/dist/lib/comment-poster.d.ts +21 -0
  74. package/dist/lib/comment-poster.d.ts.map +1 -0
  75. package/dist/lib/comment-poster.js +96 -0
  76. package/dist/lib/comment-poster.js.map +1 -0
  77. package/dist/lib/comment-poster.test.d.ts +5 -0
  78. package/dist/lib/comment-poster.test.d.ts.map +1 -0
  79. package/dist/lib/comment-poster.test.js +215 -0
  80. package/dist/lib/comment-poster.test.js.map +1 -0
  81. package/dist/lib/config-model-overrides.test.js +71 -41
  82. package/dist/lib/config-model-overrides.test.js.map +1 -1
  83. package/dist/lib/config.d.ts +63 -7
  84. package/dist/lib/config.d.ts.map +1 -1
  85. package/dist/lib/config.js +116 -22
  86. package/dist/lib/config.js.map +1 -1
  87. package/dist/lib/config.test.js +10 -2
  88. package/dist/lib/config.test.js.map +1 -1
  89. package/dist/lib/context-compression.d.ts +19 -0
  90. package/dist/lib/context-compression.d.ts.map +1 -0
  91. package/dist/lib/context-compression.js +170 -0
  92. package/dist/lib/context-compression.js.map +1 -0
  93. package/dist/lib/context-compression.test.d.ts +2 -0
  94. package/dist/lib/context-compression.test.d.ts.map +1 -0
  95. package/dist/lib/context-compression.test.js +33 -0
  96. package/dist/lib/context-compression.test.js.map +1 -0
  97. package/dist/lib/context-loader.d.ts.map +1 -1
  98. package/dist/lib/context-loader.js +8 -1
  99. package/dist/lib/context-loader.js.map +1 -1
  100. package/dist/lib/context-loader.test.d.ts +2 -0
  101. package/dist/lib/context-loader.test.d.ts.map +1 -0
  102. package/dist/lib/context-loader.test.js +207 -0
  103. package/dist/lib/context-loader.test.js.map +1 -0
  104. package/dist/lib/describe-core.d.ts +9 -0
  105. package/dist/lib/describe-core.d.ts.map +1 -0
  106. package/dist/lib/describe-core.js +71 -0
  107. package/dist/lib/describe-core.js.map +1 -0
  108. package/dist/lib/describe-core.test.d.ts +2 -0
  109. package/dist/lib/describe-core.test.d.ts.map +1 -0
  110. package/dist/lib/describe-core.test.js +208 -0
  111. package/dist/lib/describe-core.test.js.map +1 -0
  112. package/dist/lib/describe-output-path.test.d.ts +2 -0
  113. package/dist/lib/describe-output-path.test.d.ts.map +1 -0
  114. package/dist/lib/describe-output-path.test.js +51 -0
  115. package/dist/lib/describe-output-path.test.js.map +1 -0
  116. package/dist/lib/describe-parser.d.ts +3 -0
  117. package/dist/lib/describe-parser.d.ts.map +1 -0
  118. package/dist/lib/describe-parser.js +163 -0
  119. package/dist/lib/describe-parser.js.map +1 -0
  120. package/dist/lib/describe-parser.test.d.ts +2 -0
  121. package/dist/lib/describe-parser.test.d.ts.map +1 -0
  122. package/dist/lib/describe-parser.test.js +282 -0
  123. package/dist/lib/describe-parser.test.js.map +1 -0
  124. package/dist/lib/description-executor.d.ts +22 -0
  125. package/dist/lib/description-executor.d.ts.map +1 -0
  126. package/dist/lib/description-executor.js +72 -0
  127. package/dist/lib/description-executor.js.map +1 -0
  128. package/dist/lib/description-formatter.d.ts +37 -0
  129. package/dist/lib/description-formatter.d.ts.map +1 -0
  130. package/dist/lib/description-formatter.js +219 -0
  131. package/dist/lib/description-formatter.js.map +1 -0
  132. package/dist/lib/diff-parser.d.ts +11 -0
  133. package/dist/lib/diff-parser.d.ts.map +1 -1
  134. package/dist/lib/diff-parser.js +37 -0
  135. package/dist/lib/diff-parser.js.map +1 -1
  136. package/dist/lib/issue-parser.d.ts +1 -1
  137. package/dist/lib/issue-parser.d.ts.map +1 -1
  138. package/dist/lib/issue-parser.js +16 -14
  139. package/dist/lib/issue-parser.js.map +1 -1
  140. package/dist/lib/json-output-schema.d.ts +207 -0
  141. package/dist/lib/json-output-schema.d.ts.map +1 -0
  142. package/dist/lib/json-output-schema.js +124 -0
  143. package/dist/lib/json-output-schema.js.map +1 -0
  144. package/dist/lib/json-output-schema.test.d.ts +2 -0
  145. package/dist/lib/json-output-schema.test.d.ts.map +1 -0
  146. package/dist/lib/json-output-schema.test.js +92 -0
  147. package/dist/lib/json-output-schema.test.js.map +1 -0
  148. package/dist/lib/json-output.d.ts +43 -0
  149. package/dist/lib/json-output.d.ts.map +1 -0
  150. package/dist/lib/json-output.js +34 -0
  151. package/dist/lib/json-output.js.map +1 -0
  152. package/dist/lib/output-paths.d.ts +6 -0
  153. package/dist/lib/output-paths.d.ts.map +1 -0
  154. package/dist/lib/output-paths.js +5 -0
  155. package/dist/lib/output-paths.js.map +1 -0
  156. package/dist/lib/platform-client.d.ts +1 -1
  157. package/dist/lib/platform-client.d.ts.map +1 -1
  158. package/dist/lib/repository-validator.d.ts +52 -0
  159. package/dist/lib/repository-validator.d.ts.map +1 -0
  160. package/dist/lib/repository-validator.js +219 -0
  161. package/dist/lib/repository-validator.js.map +1 -0
  162. package/dist/lib/repository-validator.test.d.ts +5 -0
  163. package/dist/lib/repository-validator.test.d.ts.map +1 -0
  164. package/dist/lib/repository-validator.test.js +341 -0
  165. package/dist/lib/repository-validator.test.js.map +1 -0
  166. package/dist/lib/review-core.d.ts +66 -0
  167. package/dist/lib/review-core.d.ts.map +1 -0
  168. package/dist/lib/review-core.js +449 -0
  169. package/dist/lib/review-core.js.map +1 -0
  170. package/dist/lib/review-core.test.d.ts +2 -0
  171. package/dist/lib/review-core.test.d.ts.map +1 -0
  172. package/dist/lib/review-core.test.js +552 -0
  173. package/dist/lib/review-core.test.js.map +1 -0
  174. package/dist/lib/review-orchestrator.d.ts +27 -10
  175. package/dist/lib/review-orchestrator.d.ts.map +1 -1
  176. package/dist/lib/review-orchestrator.js +51 -110
  177. package/dist/lib/review-orchestrator.js.map +1 -1
  178. package/dist/lib/review-orchestrator.test.d.ts +2 -0
  179. package/dist/lib/review-orchestrator.test.d.ts.map +1 -0
  180. package/dist/lib/review-orchestrator.test.js +413 -0
  181. package/dist/lib/review-orchestrator.test.js.map +1 -0
  182. package/dist/lib/review-output-path.test.d.ts +2 -0
  183. package/dist/lib/review-output-path.test.d.ts.map +1 -0
  184. package/dist/lib/review-output-path.test.js +83 -0
  185. package/dist/lib/review-output-path.test.js.map +1 -0
  186. package/dist/lib/review-parser.d.ts +2 -0
  187. package/dist/lib/review-parser.d.ts.map +1 -0
  188. package/dist/lib/review-parser.js +100 -0
  189. package/dist/lib/review-parser.js.map +1 -0
  190. package/dist/lib/unified-review-executor.d.ts +21 -4
  191. package/dist/lib/unified-review-executor.d.ts.map +1 -1
  192. package/dist/lib/unified-review-executor.js +81 -151
  193. package/dist/lib/unified-review-executor.js.map +1 -1
  194. package/dist/lib/unified-review-executor.test.d.ts +5 -0
  195. package/dist/lib/unified-review-executor.test.d.ts.map +1 -0
  196. package/dist/lib/unified-review-executor.test.js +344 -0
  197. package/dist/lib/unified-review-executor.test.js.map +1 -0
  198. package/dist/lib/write-json-output.d.ts +13 -0
  199. package/dist/lib/write-json-output.d.ts.map +1 -0
  200. package/dist/lib/write-json-output.js +37 -0
  201. package/dist/lib/write-json-output.js.map +1 -0
  202. package/dist/opencode/agent-loader.d.ts +3 -4
  203. package/dist/opencode/agent-loader.d.ts.map +1 -1
  204. package/dist/opencode/agent-loader.js +48 -34
  205. package/dist/opencode/agent-loader.js.map +1 -1
  206. package/dist/opencode/agent-skill-overlay.d.ts +11 -0
  207. package/dist/opencode/agent-skill-overlay.d.ts.map +1 -0
  208. package/dist/opencode/agent-skill-overlay.js +164 -0
  209. package/dist/opencode/agent-skill-overlay.js.map +1 -0
  210. package/dist/opencode/client.d.ts +11 -3
  211. package/dist/opencode/client.d.ts.map +1 -1
  212. package/dist/opencode/client.js +237 -71
  213. package/dist/opencode/client.js.map +1 -1
  214. package/dist/opencode/client.test.d.ts +2 -0
  215. package/dist/opencode/client.test.d.ts.map +1 -0
  216. package/dist/opencode/client.test.js +317 -0
  217. package/dist/opencode/client.test.js.map +1 -0
  218. package/dist/opencode/opencode-paths.d.ts +2 -0
  219. package/dist/opencode/opencode-paths.d.ts.map +1 -0
  220. package/dist/opencode/opencode-paths.js +7 -0
  221. package/dist/opencode/opencode-paths.js.map +1 -0
  222. package/dist/opencode/skill-loader.d.ts +6 -0
  223. package/dist/opencode/skill-loader.d.ts.map +1 -0
  224. package/dist/opencode/skill-loader.js +36 -0
  225. package/dist/opencode/skill-loader.js.map +1 -0
  226. package/package.json +7 -7
  227. package/.opencode/agent/github-reviewer.md +0 -77
  228. package/.opencode/agent/gitlab-reviewer.md +0 -77
  229. package/.opencode/agent/local-reviewer.md +0 -63
package/dist/cli/init.js CHANGED
@@ -1,28 +1,97 @@
1
1
  import { existsSync, mkdirSync, writeFileSync } from 'fs';
2
2
  import { join } from 'path';
3
+ import * as readline from 'readline';
3
4
  import chalk from 'chalk';
4
- const DEFAULT_DRS_CONFIG = `# DRS Configuration
5
- # Documentation: https://github.com/your-org/drs
5
+ /**
6
+ * Interactive prompt helper using readline
7
+ */
8
+ function createPrompt() {
9
+ const rl = readline.createInterface({
10
+ input: process.stdin,
11
+ output: process.stdout,
12
+ });
13
+ return {
14
+ ask: (question, defaultValue) => {
15
+ const defaultHint = defaultValue ? ` (${defaultValue})` : '';
16
+ return new Promise((resolve) => {
17
+ rl.question(`${question}${defaultHint}: `, (answer) => {
18
+ resolve(answer.trim() || defaultValue || '');
19
+ });
20
+ });
21
+ },
22
+ confirm: (question, defaultValue = false) => {
23
+ const hint = defaultValue ? '(Y/n)' : '(y/N)';
24
+ return new Promise((resolve) => {
25
+ rl.question(`${question} ${hint}: `, (answer) => {
26
+ const normalized = answer.trim().toLowerCase();
27
+ if (normalized === '') {
28
+ resolve(defaultValue);
29
+ }
30
+ else {
31
+ resolve(normalized === 'y' || normalized === 'yes');
32
+ }
33
+ });
34
+ });
35
+ },
36
+ close: () => rl.close(),
37
+ };
38
+ }
39
+ /**
40
+ * Generate drs.config.yaml content from init config
41
+ */
42
+ function generateConfigYaml(config) {
43
+ let yaml = `# DRS Configuration
44
+ # Generated by: drs init
45
+ # Documentation: https://github.com/manojlds/drs
6
46
 
7
- review:
8
- # Review agents to use (mix of built-in and custom)
9
- agents:
10
- - security
11
- - quality
12
- - style
13
- - performance
47
+ `;
48
+ // Add custom provider if configured
49
+ if (config.useCustomProvider && config.provider) {
50
+ yaml += `# Custom AI Provider
51
+ opencode:
52
+ provider:
53
+ ${config.provider.name}:
54
+ npm: "${config.provider.npm}"
55
+ name: "${config.provider.name}"
56
+ options:
57
+ baseURL: "${config.provider.baseURL}"
58
+ apiKey: "{env:${config.provider.apiKeyEnvVar}}"
59
+ models:
60
+ ${config.provider.modelId}:
61
+ name: "${config.provider.modelDisplayName}"
14
62
 
15
- # Automatically review new PRs/MRs
16
- autoReview: true
63
+ `;
64
+ }
65
+ yaml += `review:
66
+ # Default model for all agents
67
+ default:
68
+ model: ${config.defaultModel}
17
69
 
18
- # Review when bot is mentioned
19
- reviewOnMention: true
70
+ # Review mode: multi-agent | unified | hybrid
71
+ # mode: multi-agent
20
72
 
21
- # Review when these labels are added
22
- reviewOnLabel:
23
- - needs-review
24
- - security-review
73
+ # Unified review settings (used for unified/hybrid modes)
74
+ # unified:
75
+ # model: ${config.defaultModel}
76
+ # severityThreshold: HIGH
25
77
 
78
+ # Review agents
79
+ agents:
80
+ `;
81
+ // Add agents with optional model overrides
82
+ for (const agent of config.agents) {
83
+ const agentModel = config.agentModels[agent];
84
+ if (agentModel && agentModel !== config.defaultModel) {
85
+ yaml += ` - name: ${agent}
86
+ model: ${agentModel}
87
+ `;
88
+ }
89
+ else {
90
+ yaml += ` - ${agent}
91
+ `;
92
+ }
93
+ }
94
+ yaml += `
26
95
  # Files to ignore during review
27
96
  ignorePatterns:
28
97
  - "*.test.ts"
@@ -33,11 +102,9 @@ review:
33
102
  - "package-lock.json"
34
103
  - "yarn.lock"
35
104
  - "pnpm-lock.yaml"
36
-
37
- output:
38
- format: terminal
39
- verbosity: normal
40
105
  `;
106
+ return yaml;
107
+ }
41
108
  const DEFAULT_GLOBAL_CONTEXT = `# Project Context
42
109
 
43
110
  ## Architecture
@@ -52,118 +119,23 @@ const DEFAULT_GLOBAL_CONTEXT = `# Project Context
52
119
  ## Review Guidelines
53
120
  <!-- Any project-specific guidelines for reviewers -->
54
121
  `;
55
- const EXAMPLE_AGENT_CONTEXT = `# Security Agent Context
122
+ const AGENT_CONTEXT_TEMPLATE = `# {AGENT} Agent Context
56
123
 
57
- ## Project-Specific Security Rules
124
+ ## Project-Specific Rules
58
125
 
59
126
  ### What NOT to Flag
60
127
  <!-- List patterns that are valid for your project -->
61
128
 
62
129
  ### What TO Flag
63
- <!-- List security concerns specific to your project -->
130
+ <!-- List concerns specific to your project -->
64
131
 
65
132
  ## Severity Calibration
66
- - **CRITICAL**: Actively exploitable vulnerabilities with high impact
67
- - **HIGH**: Real security issues requiring immediate attention
133
+ - **CRITICAL**: Actively exploitable issues with high impact
134
+ - **HIGH**: Real issues requiring immediate attention
68
135
  - **MEDIUM**: Potential edge cases or hardening opportunities
69
136
  - **LOW**: Best practice improvements
70
137
  `;
71
- const EXAMPLE_GITLAB_CI = `# Example GitLab CI configuration for DRS
72
- # Add this to your .gitlab-ci.yml file
73
-
74
- stages:
75
- - review
76
- - test
77
- - deploy
78
-
79
- # AI Code Review
80
- ai_review:
81
- stage: review
82
- image: node:20
83
- only:
84
- - merge_requests
85
- script:
86
- - npm install -g @diff-review-system/drs
87
- - drs review-mr --mr $CI_MERGE_REQUEST_IID --project $CI_PROJECT_ID --post-comments
88
- variables:
89
- OPENCODE_SERVER: "http://opencode.internal:3000"
90
- GITLAB_TOKEN: $CI_JOB_TOKEN
91
- allow_failure: true
92
- `;
93
- const EXAMPLE_ENV = `# DRS Environment Variables
94
-
95
- # OpenCode Server URL
96
- OPENCODE_SERVER=http://localhost:3000
97
-
98
- # GitLab Configuration
99
- GITLAB_URL=https://gitlab.com
100
- GITLAB_TOKEN=your-gitlab-token-here
101
-
102
- # Review Configuration (optional, overrides .drs/drs.config.yaml)
103
- REVIEW_AGENTS=security,quality,style,performance
104
- `;
105
- /**
106
- * Initialize DRS configuration in a project
107
- */
108
- export async function initProject(projectPath) {
109
- console.log(chalk.bold.cyan('\n📋 DRS | Configuration Setup\n'));
110
- // Create .drs directory
111
- const drsDir = join(projectPath, '.drs');
112
- if (!existsSync(drsDir)) {
113
- mkdirSync(drsDir, { recursive: true });
114
- console.log(chalk.green('✓'), 'Created', chalk.cyan('.drs/'), 'directory');
115
- }
116
- else {
117
- console.log(chalk.yellow('⚠'), chalk.cyan('.drs/'), 'directory already exists');
118
- }
119
- // Create global context file
120
- const contextPath = join(drsDir, 'context.md');
121
- if (!existsSync(contextPath)) {
122
- writeFileSync(contextPath, DEFAULT_GLOBAL_CONTEXT, 'utf-8');
123
- console.log(chalk.green('✓'), 'Created', chalk.cyan('.drs/context.md'));
124
- }
125
- else {
126
- console.log(chalk.yellow('⚠'), chalk.cyan('.drs/context.md'), 'already exists');
127
- }
128
- // Create .drs/agents directory
129
- const agentsDir = join(drsDir, 'agents');
130
- if (!existsSync(agentsDir)) {
131
- mkdirSync(agentsDir, { recursive: true });
132
- console.log(chalk.green('✓'), 'Created', chalk.cyan('.drs/agents/'), 'directory');
133
- }
134
- // Create example agent folders
135
- const exampleAgents = ['security', 'quality', 'style', 'performance'];
136
- for (const agentName of exampleAgents) {
137
- const agentDir = join(agentsDir, agentName);
138
- if (!existsSync(agentDir)) {
139
- mkdirSync(agentDir, { recursive: true });
140
- // Create context.md template
141
- const agentContextPath = join(agentDir, 'context.md');
142
- writeFileSync(agentContextPath, EXAMPLE_AGENT_CONTEXT.replace('Security', agentName.charAt(0).toUpperCase() + agentName.slice(1)), 'utf-8');
143
- }
144
- }
145
- console.log(chalk.green('✓'), 'Created agent context templates in', chalk.cyan('.drs/agents/'));
146
- // Create drs.config.yaml
147
- const configPath = join(drsDir, 'drs.config.yaml');
148
- if (!existsSync(configPath)) {
149
- writeFileSync(configPath, DEFAULT_DRS_CONFIG, 'utf-8');
150
- console.log(chalk.green('✓'), 'Created', chalk.cyan('.drs/drs.config.yaml'));
151
- }
152
- else {
153
- console.log(chalk.yellow('⚠'), chalk.cyan('.drs/drs.config.yaml'), 'already exists');
154
- }
155
- // Create examples directory
156
- const examplesDir = join(drsDir, 'examples');
157
- if (!existsSync(examplesDir)) {
158
- mkdirSync(examplesDir, { recursive: true });
159
- // Write example GitLab CI config
160
- writeFileSync(join(examplesDir, 'gitlab-ci.example.yml'), EXAMPLE_GITLAB_CI, 'utf-8');
161
- // Write example .env file
162
- writeFileSync(join(examplesDir, '.env.example'), EXAMPLE_ENV, 'utf-8');
163
- console.log(chalk.green('✓'), 'Created example configurations in', chalk.cyan('.drs/examples/'));
164
- }
165
- // Create custom agents info
166
- const customAgentReadme = `# DRS Agent Customization
138
+ const AGENTS_README = `# DRS Agent Customization
167
139
 
168
140
  DRS supports three levels of agent customization:
169
141
 
@@ -200,7 +172,6 @@ Example: \`.drs/agents/security/agent.md\`
200
172
  \`\`\`markdown
201
173
  ---
202
174
  description: Custom security reviewer
203
- model: claude-sonnet-4-5
204
175
  tools:
205
176
  Read: true
206
177
  Grep: true
@@ -225,31 +196,188 @@ review:
225
196
  - rails-reviewer # Your custom agent
226
197
  \`\`\`
227
198
 
228
- ## Future: Skills (Coming Soon)
229
-
230
- \`.drs/agents/security/skills/python.md\`
231
- \`.drs/agents/security/skills/nodejs.md\`
232
-
233
- Skills will be auto-loaded based on detected languages.
234
-
235
199
  ## Learn More
236
200
 
237
- - [DRS Documentation](https://github.com/your-org/drs)
238
- - [OpenCode Agent Guide](https://opencode.ai/docs/agents)
201
+ - [DRS Documentation](https://github.com/manojlds/drs)
239
202
  `;
240
- const agentsReadmePath = join(agentsDir, 'README.md');
241
- if (!existsSync(agentsReadmePath)) {
242
- writeFileSync(agentsReadmePath, customAgentReadme, 'utf-8');
243
- console.log(chalk.green('✓'), 'Created', chalk.cyan('.drs/agents/README.md'));
203
+ /**
204
+ * Initialize DRS configuration in a project with interactive prompts
205
+ */
206
+ export async function initProject(projectPath) {
207
+ console.log(chalk.bold.cyan('\n📋 DRS | Diff Review System Setup\n'));
208
+ const prompt = createPrompt();
209
+ try {
210
+ // Check if already initialized
211
+ const drsDir = join(projectPath, '.drs');
212
+ const configPath = join(drsDir, 'drs.config.yaml');
213
+ if (existsSync(configPath)) {
214
+ const overwrite = await prompt.confirm(chalk.yellow('⚠ .drs/drs.config.yaml already exists. Overwrite?'), false);
215
+ if (!overwrite) {
216
+ console.log(chalk.gray('\nInit cancelled. Existing config preserved.\n'));
217
+ prompt.close();
218
+ return;
219
+ }
220
+ }
221
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
222
+ // STEP 1: Custom Provider
223
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
224
+ console.log(chalk.bold('\n━━━ AI Provider ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'));
225
+ const initConfig = {
226
+ useCustomProvider: false,
227
+ defaultModel: '',
228
+ agents: [],
229
+ agentModels: {},
230
+ };
231
+ initConfig.useCustomProvider = await prompt.confirm('Do you need a custom OpenAI-compatible provider?', false);
232
+ if (initConfig.useCustomProvider) {
233
+ console.log(chalk.gray('\nConfiguring custom provider...\n'));
234
+ const providerName = await prompt.ask('Provider name', 'custom');
235
+ const npm = await prompt.ask('NPM package', '@ai-sdk/openai-compatible');
236
+ const baseURL = await prompt.ask('Base URL');
237
+ const apiKeyEnvVar = await prompt.ask('API key environment variable name', 'OPENAI_API_KEY');
238
+ const modelId = await prompt.ask('Model identifier');
239
+ const modelDisplayName = await prompt.ask('Model display name', modelId);
240
+ initConfig.provider = {
241
+ name: providerName,
242
+ npm,
243
+ baseURL,
244
+ apiKeyEnvVar,
245
+ modelId,
246
+ modelDisplayName,
247
+ };
248
+ initConfig.defaultModel = `${providerName}/${modelId}`;
249
+ console.log(chalk.green(`\n✓ Custom provider "${providerName}" configured`));
250
+ }
251
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
252
+ // STEP 2: Model Configuration
253
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
254
+ console.log(chalk.bold('\n━━━ Model Configuration ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'));
255
+ if (!initConfig.useCustomProvider) {
256
+ console.log(chalk.gray('Common models:'));
257
+ console.log(chalk.gray(' • anthropic/claude-sonnet-4-5-20250929 (balanced)'));
258
+ console.log(chalk.gray(' • anthropic/claude-opus-4-5-20251101 (premium)'));
259
+ console.log(chalk.gray(' • openai/gpt-4o (OpenAI)'));
260
+ console.log(chalk.gray(' • zhipuai/glm-4.7 (budget)\n'));
261
+ initConfig.defaultModel = await prompt.ask('Default model for all agents', 'anthropic/claude-sonnet-4-5-20250929');
262
+ }
263
+ else {
264
+ console.log(chalk.gray(`Using custom provider model: ${initConfig.defaultModel}\n`));
265
+ }
266
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
267
+ // STEP 3: Agent Selection
268
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
269
+ console.log(chalk.bold('\n━━━ Review Agents ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'));
270
+ const availableAgents = ['security', 'quality', 'style', 'performance'];
271
+ console.log(chalk.gray('Available agents:'));
272
+ console.log(chalk.gray(' • security - Security vulnerabilities & best practices'));
273
+ console.log(chalk.gray(' • quality - Code quality & maintainability'));
274
+ console.log(chalk.gray(' • style - Code style & consistency'));
275
+ console.log(chalk.gray(' • performance - Performance issues & optimizations\n'));
276
+ const agentsInput = await prompt.ask('Agents to enable (comma-separated)', 'security,quality,style,performance');
277
+ initConfig.agents = agentsInput
278
+ .split(',')
279
+ .map((a) => a.trim().toLowerCase())
280
+ .filter((a) => a.length > 0);
281
+ // Validate agents
282
+ const invalidAgents = initConfig.agents.filter((a) => !availableAgents.includes(a));
283
+ if (invalidAgents.length > 0) {
284
+ console.log(chalk.yellow(`\n⚠ Custom agents detected: ${invalidAgents.join(', ')}`));
285
+ console.log(chalk.gray(" You'll need to create agent definitions in .drs/agents/{name}/agent.md"));
286
+ }
287
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
288
+ // STEP 4: Per-Agent Model Overrides
289
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
290
+ console.log(chalk.bold('\n━━━ Per-Agent Model Overrides ━━━━━━━━━━━━━━━━━━━━━\n'));
291
+ const configureOverrides = await prompt.confirm('Configure different models for specific agents?', false);
292
+ if (configureOverrides) {
293
+ console.log(chalk.gray(`\nPress Enter to use default (${initConfig.defaultModel})\n`));
294
+ for (const agent of initConfig.agents) {
295
+ const model = await prompt.ask(`Model for ${agent}`);
296
+ if (model && model !== initConfig.defaultModel) {
297
+ initConfig.agentModels[agent] = model;
298
+ }
299
+ }
300
+ }
301
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
302
+ // Create files
303
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
304
+ console.log(chalk.bold('\n━━━ Creating Files ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'));
305
+ // Create .drs directory
306
+ if (!existsSync(drsDir)) {
307
+ mkdirSync(drsDir, { recursive: true });
308
+ }
309
+ // Create drs.config.yaml
310
+ writeFileSync(configPath, generateConfigYaml(initConfig), 'utf-8');
311
+ console.log(chalk.green('✓'), 'Created', chalk.cyan('.drs/drs.config.yaml'));
312
+ // Create global context file
313
+ const contextPath = join(drsDir, 'context.md');
314
+ if (!existsSync(contextPath)) {
315
+ writeFileSync(contextPath, DEFAULT_GLOBAL_CONTEXT, 'utf-8');
316
+ console.log(chalk.green('✓'), 'Created', chalk.cyan('.drs/context.md'));
317
+ }
318
+ else {
319
+ console.log(chalk.yellow('⚠'), chalk.cyan('.drs/context.md'), 'already exists');
320
+ }
321
+ // Create agents directory
322
+ const agentsDir = join(drsDir, 'agents');
323
+ if (!existsSync(agentsDir)) {
324
+ mkdirSync(agentsDir, { recursive: true });
325
+ }
326
+ // Create agent context templates for selected agents
327
+ for (const agentName of initConfig.agents) {
328
+ const agentDir = join(agentsDir, agentName);
329
+ if (!existsSync(agentDir)) {
330
+ mkdirSync(agentDir, { recursive: true });
331
+ const agentContextPath = join(agentDir, 'context.md');
332
+ const contextContent = AGENT_CONTEXT_TEMPLATE.replace('{AGENT}', agentName.charAt(0).toUpperCase() + agentName.slice(1));
333
+ writeFileSync(agentContextPath, contextContent, 'utf-8');
334
+ }
335
+ }
336
+ console.log(chalk.green('✓'), 'Created agent context templates in', chalk.cyan('.drs/agents/'));
337
+ // Create agents README
338
+ const agentsReadmePath = join(agentsDir, 'README.md');
339
+ if (!existsSync(agentsReadmePath)) {
340
+ writeFileSync(agentsReadmePath, AGENTS_README, 'utf-8');
341
+ console.log(chalk.green('✓'), 'Created', chalk.cyan('.drs/agents/README.md'));
342
+ }
343
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
344
+ // Summary
345
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
346
+ console.log(chalk.bold.green('\n✓ DRS initialization complete!\n'));
347
+ console.log(chalk.bold('Configuration Summary:'));
348
+ console.log(` Provider: ${initConfig.useCustomProvider ? initConfig.provider?.name : 'Built-in (Anthropic/OpenAI/etc)'}`);
349
+ console.log(` Default Model: ${initConfig.defaultModel}`);
350
+ console.log(` Agents: ${initConfig.agents.join(', ')}`);
351
+ if (Object.keys(initConfig.agentModels).length > 0) {
352
+ console.log(' Model Overrides:');
353
+ for (const [agent, model] of Object.entries(initConfig.agentModels)) {
354
+ console.log(` • ${agent}: ${model}`);
355
+ }
356
+ }
357
+ console.log(chalk.bold('\nNext steps:\n'));
358
+ // Determine which API key is needed
359
+ let apiKeyHint;
360
+ if (initConfig.useCustomProvider && initConfig.provider) {
361
+ apiKeyHint = `export ${initConfig.provider.apiKeyEnvVar}=your-key`;
362
+ }
363
+ else if (initConfig.defaultModel.startsWith('anthropic/')) {
364
+ apiKeyHint = 'export ANTHROPIC_API_KEY=your-key';
365
+ }
366
+ else if (initConfig.defaultModel.startsWith('openai/')) {
367
+ apiKeyHint = 'export OPENAI_API_KEY=your-key';
368
+ }
369
+ else {
370
+ apiKeyHint = 'export <PROVIDER>_API_KEY=your-key';
371
+ }
372
+ console.log(` 1. Set API key: ${chalk.cyan(apiKeyHint)}`);
373
+ console.log(` 2. Edit project context: ${chalk.cyan('.drs/context.md')}`);
374
+ console.log(` 3. Run a review: ${chalk.cyan('drs review-pr --pr <number> --owner <owner> --repo <repo>')}`);
375
+ console.log('');
376
+ prompt.close();
377
+ }
378
+ catch (error) {
379
+ prompt.close();
380
+ throw error;
244
381
  }
245
- // Summary
246
- console.log(chalk.bold.green('\n✓ DRS initialization complete!\n'));
247
- console.log(chalk.bold('Next steps:\n'));
248
- console.log(' 1. Edit', chalk.cyan('.drs/context.md'), 'with your project context');
249
- console.log(' 2. Customize agent behavior in', chalk.cyan('.drs/agents/{name}/context.md'));
250
- console.log(' 3. Configure review settings in', chalk.cyan('.drs/drs.config.yaml'));
251
- console.log(' 4. Set environment variables (see', chalk.cyan('.drs/examples/.env.example') + ')');
252
- console.log(' 5. Run', chalk.cyan('drs review-pr'), 'to test on a PR\n');
253
- console.log(chalk.gray('See', chalk.cyan('.drs/agents/README.md'), 'for customization guide\n'));
254
382
  }
255
383
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoC1B,CAAC;AAEF,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;CAa9B,CAAC;AAEF,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;CAe7B,CAAC;AAEF,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBzB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;CAWnB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAmB;IACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAEjE,wBAAwB;IACxB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;IAC7E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,0BAA0B,CAAC,CAAC;IAClF,CAAC;IAED,6BAA6B;IAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,aAAa,CAAC,WAAW,EAAE,sBAAsB,EAAE,OAAO,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC1E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAClF,CAAC;IAED,+BAA+B;IAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,CAAC;IACpF,CAAC;IAED,+BAA+B;IAC/B,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IACtE,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEzC,6BAA6B;YAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACtD,aAAa,CACX,gBAAgB,EAChB,qBAAqB,CAAC,OAAO,CAC3B,UAAU,EACV,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CACvD,EACD,OAAO,CACR,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,oCAAoC,EAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAEhG,yBAAyB;IACzB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACnD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,aAAa,CAAC,UAAU,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAC/E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACvF,CAAC;IAED,4BAA4B;IAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5C,iCAAiC;QACjC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,uBAAuB,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAEtF,0BAA0B;QAC1B,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAEvE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAChB,mCAAmC,EACnC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAC7B,CAAC;IACJ,CAAC;IAED,4BAA4B;IAC5B,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyE3B,CAAC;IAEA,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClC,aAAa,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,UAAU;IACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAEpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,2BAA2B,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CACT,qCAAqC,EACrC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,GAAG,GAAG,CAC/C,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,2BAA2B,CAAC,CAAC,CAAC;AACnG,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface PostCommentsOptions {
2
+ inputPath: string;
3
+ owner?: string;
4
+ repo?: string;
5
+ prNumber?: number;
6
+ projectId?: string;
7
+ mrIid?: number;
8
+ workingDir?: string;
9
+ skipRepoCheck?: boolean;
10
+ }
11
+ /**
12
+ * Post comments from a saved review JSON to GitHub or GitLab.
13
+ */
14
+ export declare function postCommentsFromJson(options: PostCommentsOptions): Promise<void>;
15
+ //# sourceMappingURL=post-comments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-comments.d.ts","sourceRoot":"","sources":["../../src/cli/post-comments.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AA0FD;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkItF"}