@diff-review-system/drs 1.1.2 → 2.1.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 -139
- package/.opencode/agent/review/quality.md +36 -113
- package/.opencode/agent/review/security.md +32 -97
- package/.opencode/agent/review/style.md +4 -0
- package/.opencode/agent/review/unified-reviewer.md +74 -0
- package/.opencode/opencode.jsonc +4 -29
- package/.opencode/tool/write_json_output.ts +24 -0
- package/README.md +48 -21
- package/dist/ci/runner.d.ts.map +1 -1
- package/dist/ci/runner.js +2 -0
- 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 +222 -16
- 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 +273 -145
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/post-comments.d.ts +16 -0
- package/dist/cli/post-comments.d.ts.map +1 -0
- package/dist/cli/post-comments.js +222 -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 +44 -18
- package/dist/cli/review-local.js.map +1 -1
- package/dist/cli/review-mr.d.ts +6 -0
- package/dist/cli/review-mr.d.ts.map +1 -1
- package/dist/cli/review-mr.js +63 -7
- 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 +8 -1
- 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/platform-adapter.d.ts.map +1 -1
- package/dist/github/platform-adapter.js +4 -2
- package/dist/github/platform-adapter.js.map +1 -1
- package/dist/gitlab/client.d.ts.map +1 -1
- package/dist/gitlab/client.js +1 -1
- package/dist/gitlab/client.js.map +1 -1
- package/dist/gitlab/platform-adapter.d.ts.map +1 -1
- package/dist/gitlab/platform-adapter.js +6 -5
- package/dist/gitlab/platform-adapter.js.map +1 -1
- 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/comment-formatter.d.ts +3 -2
- package/dist/lib/comment-formatter.d.ts.map +1 -1
- package/dist/lib/comment-formatter.js +16 -2
- package/dist/lib/comment-formatter.js.map +1 -1
- 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.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.js +71 -41
- package/dist/lib/config-model-overrides.test.js.map +1 -1
- package/dist/lib/config.d.ts +65 -7
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +122 -22
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/config.test.js +31 -2
- package/dist/lib/config.test.js.map +1 -1
- 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.map +1 -1
- package/dist/lib/context-loader.js +8 -1
- package/dist/lib/context-loader.js.map +1 -1
- 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/lib/diff-parser.d.ts +11 -0
- package/dist/lib/diff-parser.d.ts.map +1 -1
- package/dist/lib/diff-parser.js +37 -0
- package/dist/lib/diff-parser.js.map +1 -1
- package/dist/lib/issue-parser.d.ts +1 -1
- package/dist/lib/issue-parser.d.ts.map +1 -1
- package/dist/lib/issue-parser.js +16 -14
- package/dist/lib/issue-parser.js.map +1 -1
- 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 +1 -1
- package/dist/lib/platform-client.d.ts.map +1 -1
- package/dist/lib/repository-validator.d.ts +57 -0
- package/dist/lib/repository-validator.d.ts.map +1 -0
- package/dist/lib/repository-validator.js +225 -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 +27 -10
- package/dist/lib/review-orchestrator.d.ts.map +1 -1
- package/dist/lib/review-orchestrator.js +51 -110
- package/dist/lib/review-orchestrator.js.map +1 -1
- 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 +21 -4
- package/dist/lib/unified-review-executor.d.ts.map +1 -1
- package/dist/lib/unified-review-executor.js +84 -151
- package/dist/lib/unified-review-executor.js.map +1 -1
- 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 +350 -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 +48 -34
- 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 +11 -3
- package/dist/opencode/client.d.ts.map +1 -1
- package/dist/opencode/client.js +237 -71
- 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 +7 -7
- package/.opencode/agent/github-reviewer.md +0 -77
- package/.opencode/agent/gitlab-reviewer.md +0 -77
- package/.opencode/agent/local-reviewer.md +0 -63
package/dist/lib/config.d.ts
CHANGED
|
@@ -4,14 +4,30 @@
|
|
|
4
4
|
export interface AgentConfig {
|
|
5
5
|
name: string;
|
|
6
6
|
model?: string;
|
|
7
|
+
skills?: string[];
|
|
7
8
|
}
|
|
8
9
|
/**
|
|
9
10
|
* Model override mapping from agent name to model identifier
|
|
10
11
|
*/
|
|
11
12
|
export type ModelOverrides = Record<string, string>;
|
|
13
|
+
/**
|
|
14
|
+
* Custom OpenAI-compatible provider configuration
|
|
15
|
+
*/
|
|
16
|
+
export interface CustomProvider {
|
|
17
|
+
npm: string;
|
|
18
|
+
name: string;
|
|
19
|
+
options: {
|
|
20
|
+
baseURL: string;
|
|
21
|
+
apiKey: string;
|
|
22
|
+
};
|
|
23
|
+
models: Record<string, {
|
|
24
|
+
name: string;
|
|
25
|
+
}>;
|
|
26
|
+
}
|
|
12
27
|
export interface DRSConfig {
|
|
13
28
|
opencode: {
|
|
14
|
-
serverUrl
|
|
29
|
+
serverUrl?: string;
|
|
30
|
+
provider?: Record<string, CustomProvider>;
|
|
15
31
|
};
|
|
16
32
|
gitlab: {
|
|
17
33
|
url: string;
|
|
@@ -22,18 +38,39 @@ export interface DRSConfig {
|
|
|
22
38
|
};
|
|
23
39
|
review: {
|
|
24
40
|
agents: (string | AgentConfig)[];
|
|
41
|
+
default?: {
|
|
42
|
+
model?: string;
|
|
43
|
+
skills?: string[];
|
|
44
|
+
};
|
|
25
45
|
defaultModel?: string;
|
|
26
|
-
autoReview: boolean;
|
|
27
|
-
reviewOnMention: boolean;
|
|
28
|
-
reviewOnLabel: string[];
|
|
29
46
|
ignorePatterns: string[];
|
|
30
47
|
includePatterns?: string[];
|
|
48
|
+
mode?: ReviewMode;
|
|
49
|
+
unified?: {
|
|
50
|
+
model?: string;
|
|
51
|
+
severityThreshold?: ReviewSeverity;
|
|
52
|
+
};
|
|
53
|
+
describe?: {
|
|
54
|
+
enabled?: boolean;
|
|
55
|
+
postDescription?: boolean;
|
|
56
|
+
};
|
|
57
|
+
skipRepoCheck?: boolean;
|
|
58
|
+
skipBranchCheck?: boolean;
|
|
59
|
+
};
|
|
60
|
+
describe?: {
|
|
61
|
+
model?: string;
|
|
62
|
+
includeProjectContext?: boolean;
|
|
31
63
|
};
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
64
|
+
contextCompression?: {
|
|
65
|
+
enabled?: boolean;
|
|
66
|
+
maxTokens?: number;
|
|
67
|
+
softBufferTokens?: number;
|
|
68
|
+
hardBufferTokens?: number;
|
|
69
|
+
tokenEstimateDivisor?: number;
|
|
35
70
|
};
|
|
36
71
|
}
|
|
72
|
+
export type ReviewMode = 'multi-agent' | 'unified' | 'hybrid';
|
|
73
|
+
export type ReviewSeverity = 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
|
|
37
74
|
/**
|
|
38
75
|
* Load configuration from various sources with precedence:
|
|
39
76
|
* 1. CLI arguments (passed as overrides)
|
|
@@ -55,6 +92,8 @@ export declare function shouldIgnoreFile(filePath: string, config: DRSConfig): b
|
|
|
55
92
|
* Normalize agent configuration from mixed format to AgentConfig array
|
|
56
93
|
*/
|
|
57
94
|
export declare function normalizeAgentConfig(agents: (string | AgentConfig)[]): AgentConfig[];
|
|
95
|
+
export declare function getDefaultModel(config: DRSConfig): string | undefined;
|
|
96
|
+
export declare function getDefaultSkills(config: DRSConfig): string[];
|
|
58
97
|
/**
|
|
59
98
|
* Extract agent names from configuration
|
|
60
99
|
*/
|
|
@@ -66,6 +105,25 @@ export declare function getAgentNames(config: DRSConfig): string[];
|
|
|
66
105
|
* 2. Environment variable REVIEW_AGENT_<NAME>_MODEL (e.g., REVIEW_AGENT_SECURITY_MODEL)
|
|
67
106
|
* 3. defaultModel in config
|
|
68
107
|
* 4. Environment variable REVIEW_DEFAULT_MODEL
|
|
108
|
+
*
|
|
69
109
|
*/
|
|
70
110
|
export declare function getModelOverrides(config: DRSConfig): ModelOverrides;
|
|
111
|
+
/**
|
|
112
|
+
* Get model override for the unified reviewer agent
|
|
113
|
+
* Precedence:
|
|
114
|
+
* 1. review.unified.model in config
|
|
115
|
+
* 2. Environment variable REVIEW_UNIFIED_MODEL
|
|
116
|
+
* 3. review.defaultModel in config (fallback)
|
|
117
|
+
* 4. Environment variable REVIEW_DEFAULT_MODEL (fallback)
|
|
118
|
+
*/
|
|
119
|
+
export declare function getUnifiedModelOverride(config: DRSConfig): ModelOverrides;
|
|
120
|
+
/**
|
|
121
|
+
* Get model override for the describer agent
|
|
122
|
+
* Precedence:
|
|
123
|
+
* 1. describe.model in config
|
|
124
|
+
* 2. Environment variable DESCRIBE_MODEL
|
|
125
|
+
* 3. review.defaultModel in config (fallback)
|
|
126
|
+
* 4. Environment variable REVIEW_DEFAULT_MODEL (fallback)
|
|
127
|
+
*/
|
|
128
|
+
export declare function getDescriberModelOverride(config: DRSConfig): ModelOverrides;
|
|
71
129
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.js
CHANGED
|
@@ -3,7 +3,7 @@ import { resolve } from 'path';
|
|
|
3
3
|
import * as yaml from 'yaml';
|
|
4
4
|
const DEFAULT_CONFIG = {
|
|
5
5
|
opencode: {
|
|
6
|
-
serverUrl: process.env.OPENCODE_SERVER ||
|
|
6
|
+
serverUrl: process.env.OPENCODE_SERVER || undefined,
|
|
7
7
|
},
|
|
8
8
|
gitlab: {
|
|
9
9
|
url: process.env.GITLAB_URL || 'https://gitlab.com',
|
|
@@ -13,24 +13,38 @@ const DEFAULT_CONFIG = {
|
|
|
13
13
|
token: process.env.GITHUB_TOKEN || '',
|
|
14
14
|
},
|
|
15
15
|
review: {
|
|
16
|
-
agents: ['security', 'quality', 'style', 'performance'],
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
agents: ['security', 'quality', 'style', 'performance', 'documentation'],
|
|
17
|
+
default: {
|
|
18
|
+
model: process.env.REVIEW_DEFAULT_MODEL || 'anthropic/claude-sonnet-4-5-20250929',
|
|
19
|
+
skills: [],
|
|
20
|
+
},
|
|
20
21
|
ignorePatterns: [
|
|
21
22
|
'*.test.ts',
|
|
22
23
|
'*.spec.ts',
|
|
23
24
|
'**/__tests__/**',
|
|
24
25
|
'**/__mocks__/**',
|
|
25
|
-
'*.md',
|
|
26
26
|
'package-lock.json',
|
|
27
27
|
'yarn.lock',
|
|
28
28
|
'pnpm-lock.yaml',
|
|
29
29
|
],
|
|
30
|
+
mode: 'multi-agent',
|
|
31
|
+
unified: {
|
|
32
|
+
severityThreshold: 'HIGH',
|
|
33
|
+
},
|
|
34
|
+
describe: {
|
|
35
|
+
enabled: false,
|
|
36
|
+
postDescription: false,
|
|
37
|
+
},
|
|
30
38
|
},
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
39
|
+
contextCompression: {
|
|
40
|
+
enabled: true,
|
|
41
|
+
maxTokens: 32000,
|
|
42
|
+
softBufferTokens: 1500,
|
|
43
|
+
hardBufferTokens: 1000,
|
|
44
|
+
tokenEstimateDivisor: 4,
|
|
45
|
+
},
|
|
46
|
+
describe: {
|
|
47
|
+
includeProjectContext: true,
|
|
34
48
|
},
|
|
35
49
|
};
|
|
36
50
|
/**
|
|
@@ -75,11 +89,47 @@ export function loadConfig(projectPath, overrides) {
|
|
|
75
89
|
}
|
|
76
90
|
if (process.env.REVIEW_DEFAULT_MODEL) {
|
|
77
91
|
config.review.defaultModel = process.env.REVIEW_DEFAULT_MODEL;
|
|
92
|
+
config.review.default = mergeSection(config.review.default, {
|
|
93
|
+
model: process.env.REVIEW_DEFAULT_MODEL,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
if (process.env.REVIEW_MODE) {
|
|
97
|
+
config.review.mode = process.env.REVIEW_MODE;
|
|
98
|
+
}
|
|
99
|
+
if (process.env.REVIEW_UNIFIED_MODEL) {
|
|
100
|
+
config.review.unified = {
|
|
101
|
+
...config.review.unified,
|
|
102
|
+
model: process.env.REVIEW_UNIFIED_MODEL,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
if (process.env.REVIEW_UNIFIED_THRESHOLD) {
|
|
106
|
+
config.review.unified = {
|
|
107
|
+
...config.review.unified,
|
|
108
|
+
severityThreshold: process.env.REVIEW_UNIFIED_THRESHOLD,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
if (process.env.REVIEW_SKIP_REPO_CHECK === 'true') {
|
|
112
|
+
config.review.skipRepoCheck = true;
|
|
113
|
+
}
|
|
114
|
+
if (process.env.REVIEW_SKIP_BRANCH_CHECK === 'true') {
|
|
115
|
+
config.review.skipBranchCheck = true;
|
|
116
|
+
}
|
|
117
|
+
// Validate required fields
|
|
118
|
+
if (!getDefaultModel(config)) {
|
|
119
|
+
throw new Error('Default model is required. Set review.default.model or defaultModel in .drs/drs.config.yaml or REVIEW_DEFAULT_MODEL environment variable.\n' +
|
|
120
|
+
'Run "drs init" to configure your project.');
|
|
78
121
|
}
|
|
79
122
|
// Apply CLI overrides
|
|
80
123
|
if (overrides) {
|
|
81
124
|
config = mergeConfig(config, overrides);
|
|
82
125
|
}
|
|
126
|
+
if (!config.review.mode) {
|
|
127
|
+
config.review.mode = 'multi-agent';
|
|
128
|
+
}
|
|
129
|
+
const validModes = ['multi-agent', 'unified', 'hybrid'];
|
|
130
|
+
if (!validModes.includes(config.review.mode)) {
|
|
131
|
+
throw new Error(`Invalid review mode "${config.review.mode}". Valid options: ${validModes.join(', ')}`);
|
|
132
|
+
}
|
|
83
133
|
return config;
|
|
84
134
|
}
|
|
85
135
|
/**
|
|
@@ -91,19 +141,23 @@ function mergeConfig(base, override) {
|
|
|
91
141
|
gitlab: mergeSection(base.gitlab, override.gitlab),
|
|
92
142
|
github: mergeSection(base.github, override.github),
|
|
93
143
|
review: mergeSection(base.review, override.review),
|
|
94
|
-
|
|
144
|
+
describe: mergeSection(base.describe, override.describe),
|
|
145
|
+
contextCompression: mergeSection(base.contextCompression, override.contextCompression),
|
|
95
146
|
};
|
|
96
147
|
}
|
|
97
148
|
/**
|
|
98
149
|
* Merge a config section, skipping undefined values
|
|
99
150
|
*/
|
|
100
151
|
function mergeSection(base, override) {
|
|
152
|
+
const safeBase = (base ?? {});
|
|
101
153
|
if (!override)
|
|
102
|
-
return
|
|
103
|
-
const result = { ...
|
|
154
|
+
return safeBase;
|
|
155
|
+
const result = { ...safeBase };
|
|
104
156
|
for (const key in override) {
|
|
105
|
-
|
|
106
|
-
|
|
157
|
+
const value = override[key];
|
|
158
|
+
if (value !== undefined) {
|
|
159
|
+
// TypeScript knows that value is T[Extract<keyof T, string>] which is assignable to T[keyof T]
|
|
160
|
+
result[key] = value;
|
|
107
161
|
}
|
|
108
162
|
}
|
|
109
163
|
return result;
|
|
@@ -119,12 +173,13 @@ export function validateConfig(config, platform) {
|
|
|
119
173
|
if (platform === 'github' && !config.github.token) {
|
|
120
174
|
throw new Error('GitHub token is required. Set GITHUB_TOKEN environment variable or configure in config file');
|
|
121
175
|
}
|
|
122
|
-
// OPENCODE_SERVER is now optional - we'll start in-process if not provided
|
|
123
|
-
if (!config.opencode.serverUrl) {
|
|
124
|
-
console.log('ℹ️ OPENCODE_SERVER not set. Will start OpenCode server in-process.');
|
|
125
|
-
}
|
|
126
176
|
if (config.review.agents.length === 0) {
|
|
127
|
-
|
|
177
|
+
if (config.review.mode !== 'unified') {
|
|
178
|
+
throw new Error('At least one review agent must be configured');
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
if (!getDefaultModel(config)) {
|
|
182
|
+
throw new Error('Default model is required. Run "drs init" to configure or set REVIEW_DEFAULT_MODEL environment variable.');
|
|
128
183
|
}
|
|
129
184
|
}
|
|
130
185
|
/**
|
|
@@ -167,6 +222,18 @@ export function normalizeAgentConfig(agents) {
|
|
|
167
222
|
return agent;
|
|
168
223
|
});
|
|
169
224
|
}
|
|
225
|
+
export function getDefaultModel(config) {
|
|
226
|
+
return (config.review.default?.model ??
|
|
227
|
+
config.review.defaultModel ??
|
|
228
|
+
process.env.REVIEW_DEFAULT_MODEL ??
|
|
229
|
+
undefined);
|
|
230
|
+
}
|
|
231
|
+
export function getDefaultSkills(config) {
|
|
232
|
+
if (!Array.isArray(config.review.default?.skills)) {
|
|
233
|
+
return [];
|
|
234
|
+
}
|
|
235
|
+
return config.review.default.skills.map(String).filter((skill) => skill.length > 0);
|
|
236
|
+
}
|
|
170
237
|
/**
|
|
171
238
|
* Extract agent names from configuration
|
|
172
239
|
*/
|
|
@@ -180,12 +247,13 @@ export function getAgentNames(config) {
|
|
|
180
247
|
* 2. Environment variable REVIEW_AGENT_<NAME>_MODEL (e.g., REVIEW_AGENT_SECURITY_MODEL)
|
|
181
248
|
* 3. defaultModel in config
|
|
182
249
|
* 4. Environment variable REVIEW_DEFAULT_MODEL
|
|
250
|
+
*
|
|
183
251
|
*/
|
|
184
252
|
export function getModelOverrides(config) {
|
|
185
253
|
const overrides = {};
|
|
186
254
|
const normalizedAgents = normalizeAgentConfig(config.review.agents);
|
|
187
255
|
// Get default model from config or environment
|
|
188
|
-
const defaultModel = config
|
|
256
|
+
const defaultModel = getDefaultModel(config);
|
|
189
257
|
for (const agent of normalizedAgents) {
|
|
190
258
|
// Check per-agent environment variable (e.g., REVIEW_AGENT_SECURITY_MODEL)
|
|
191
259
|
const envVarName = `REVIEW_AGENT_${agent.name.toUpperCase().replace(/[^A-Z0-9]/g, '_')}_MODEL`;
|
|
@@ -193,11 +261,43 @@ export function getModelOverrides(config) {
|
|
|
193
261
|
// Precedence: agent.model > env var > defaultModel
|
|
194
262
|
const model = agent.model || envModel || defaultModel;
|
|
195
263
|
if (model) {
|
|
196
|
-
//
|
|
197
|
-
overrides[agent.name] = model;
|
|
264
|
+
// Use review/<agent> format which matches how agents are invoked
|
|
198
265
|
overrides[`review/${agent.name}`] = model;
|
|
199
266
|
}
|
|
200
267
|
}
|
|
201
268
|
return overrides;
|
|
202
269
|
}
|
|
270
|
+
/**
|
|
271
|
+
* Get model override for the unified reviewer agent
|
|
272
|
+
* Precedence:
|
|
273
|
+
* 1. review.unified.model in config
|
|
274
|
+
* 2. Environment variable REVIEW_UNIFIED_MODEL
|
|
275
|
+
* 3. review.defaultModel in config (fallback)
|
|
276
|
+
* 4. Environment variable REVIEW_DEFAULT_MODEL (fallback)
|
|
277
|
+
*/
|
|
278
|
+
export function getUnifiedModelOverride(config) {
|
|
279
|
+
const overrides = {};
|
|
280
|
+
const unifiedModel = config.review.unified?.model ?? process.env.REVIEW_UNIFIED_MODEL ?? getDefaultModel(config);
|
|
281
|
+
if (unifiedModel) {
|
|
282
|
+
overrides['review/unified-reviewer'] = unifiedModel;
|
|
283
|
+
}
|
|
284
|
+
return overrides;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Get model override for the describer agent
|
|
288
|
+
* Precedence:
|
|
289
|
+
* 1. describe.model in config
|
|
290
|
+
* 2. Environment variable DESCRIBE_MODEL
|
|
291
|
+
* 3. review.defaultModel in config (fallback)
|
|
292
|
+
* 4. Environment variable REVIEW_DEFAULT_MODEL (fallback)
|
|
293
|
+
*/
|
|
294
|
+
export function getDescriberModelOverride(config) {
|
|
295
|
+
const overrides = {};
|
|
296
|
+
// Check for describer-specific model
|
|
297
|
+
const describerModel = config.describe?.model ?? process.env.DESCRIBE_MODEL ?? getDefaultModel(config);
|
|
298
|
+
if (describerModel) {
|
|
299
|
+
overrides['describe/pr-describer'] = describerModel;
|
|
300
|
+
}
|
|
301
|
+
return overrides;
|
|
302
|
+
}
|
|
203
303
|
//# sourceMappingURL=config.js.map
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.test.js
CHANGED
|
@@ -20,9 +20,38 @@ describe('Config', () => {
|
|
|
20
20
|
});
|
|
21
21
|
expect(config.review.agents).toEqual(['security']);
|
|
22
22
|
});
|
|
23
|
-
it('should
|
|
23
|
+
it('should load agents from config file when no override provided', () => {
|
|
24
24
|
const config = loadConfig(process.cwd());
|
|
25
|
-
|
|
25
|
+
// Should load whatever is configured in the project's .drs/drs.config.yaml
|
|
26
|
+
expect(config.review.agents).toBeDefined();
|
|
27
|
+
expect(Array.isArray(config.review.agents)).toBe(true);
|
|
28
|
+
expect(config.review.agents.length).toBeGreaterThan(0);
|
|
29
|
+
// Verify each agent is a string (simple format) or object (detailed format)
|
|
30
|
+
config.review.agents.forEach((agent) => {
|
|
31
|
+
const isValid = typeof agent === 'string' || (typeof agent === 'object' && 'name' in agent);
|
|
32
|
+
expect(isValid).toBe(true);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
it('should respect skipRepoCheck config option', () => {
|
|
36
|
+
const config = loadConfig(process.cwd(), {
|
|
37
|
+
review: {
|
|
38
|
+
skipRepoCheck: true,
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
expect(config.review.skipRepoCheck).toBe(true);
|
|
42
|
+
});
|
|
43
|
+
it('should respect skipBranchCheck config option', () => {
|
|
44
|
+
const config = loadConfig(process.cwd(), {
|
|
45
|
+
review: {
|
|
46
|
+
skipBranchCheck: true,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
expect(config.review.skipBranchCheck).toBe(true);
|
|
50
|
+
});
|
|
51
|
+
it('should default skipRepoCheck and skipBranchCheck to undefined', () => {
|
|
52
|
+
const config = loadConfig(process.cwd());
|
|
53
|
+
expect(config.review.skipRepoCheck).toBeUndefined();
|
|
54
|
+
expect(config.review.skipBranchCheck).toBeUndefined();
|
|
26
55
|
});
|
|
27
56
|
});
|
|
28
57
|
//# sourceMappingURL=config.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/lib/config.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE;YACvC,MAAM,EAAE;gBACN,MAAM,EAAE,SAAS;aAClB;SACK,CAAC,CAAC;QAEV,2DAA2D;QAC3D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE;YACvC,MAAM,EAAE;gBACN,MAAM,EAAE,CAAC,UAAU,CAAC;aACd;SACT,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/lib/config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { FileWithDiff } from './review-core.js';
|
|
2
|
+
export interface ContextCompressionOptions {
|
|
3
|
+
enabled?: boolean;
|
|
4
|
+
maxTokens?: number;
|
|
5
|
+
softBufferTokens?: number;
|
|
6
|
+
hardBufferTokens?: number;
|
|
7
|
+
tokenEstimateDivisor?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface ContextCompressionResult {
|
|
10
|
+
files: FileWithDiff[];
|
|
11
|
+
omitted: {
|
|
12
|
+
deletionsOnly: string[];
|
|
13
|
+
dueToBudget: string[];
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export declare function stripDeletionOnlyHunks(patch: string): string;
|
|
17
|
+
export declare function compressFilesWithDiffs(files: FileWithDiff[], options?: ContextCompressionOptions): ContextCompressionResult;
|
|
18
|
+
export declare function formatCompressionSummary(result: ContextCompressionResult): string;
|
|
19
|
+
//# sourceMappingURL=context-compression.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-compression.d.ts","sourceRoot":"","sources":["../../src/lib/context-compression.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,OAAO,EAAE;QACP,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;CACH;AA6BD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgD5D;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,YAAY,EAAE,EACrB,OAAO,CAAC,EAAE,yBAAyB,GAClC,wBAAwB,CAsG1B;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,wBAAwB,GAAG,MAAM,CAwBjF"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
const DEFAULT_COMPRESSION_OPTIONS = {
|
|
2
|
+
enabled: true,
|
|
3
|
+
maxTokens: 8000,
|
|
4
|
+
softBufferTokens: 1500,
|
|
5
|
+
hardBufferTokens: 1000,
|
|
6
|
+
tokenEstimateDivisor: 4,
|
|
7
|
+
};
|
|
8
|
+
function normalizeOptions(options) {
|
|
9
|
+
return {
|
|
10
|
+
...DEFAULT_COMPRESSION_OPTIONS,
|
|
11
|
+
...options,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function estimateTokens(text, divisor) {
|
|
15
|
+
const normalizedDivisor = divisor > 0 ? divisor : DEFAULT_COMPRESSION_OPTIONS.tokenEstimateDivisor;
|
|
16
|
+
return Math.ceil(text.length / normalizedDivisor);
|
|
17
|
+
}
|
|
18
|
+
function buildDiffEntry(file) {
|
|
19
|
+
return `### ${file.filename}\n\n\`\`\`diff\n${file.patch}\n\`\`\``;
|
|
20
|
+
}
|
|
21
|
+
export function stripDeletionOnlyHunks(patch) {
|
|
22
|
+
const lines = patch.split('\n');
|
|
23
|
+
const preserved = [];
|
|
24
|
+
const prefix = [];
|
|
25
|
+
let currentHunk = [];
|
|
26
|
+
let sawHunk = false;
|
|
27
|
+
let hunkHasAddition = false;
|
|
28
|
+
const flushHunk = () => {
|
|
29
|
+
if (currentHunk.length > 0) {
|
|
30
|
+
if (hunkHasAddition) {
|
|
31
|
+
preserved.push(...currentHunk);
|
|
32
|
+
}
|
|
33
|
+
currentHunk = [];
|
|
34
|
+
hunkHasAddition = false;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
for (const line of lines) {
|
|
38
|
+
if (line.startsWith('@@')) {
|
|
39
|
+
sawHunk = true;
|
|
40
|
+
flushHunk();
|
|
41
|
+
currentHunk.push(line);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if (!sawHunk) {
|
|
45
|
+
prefix.push(line);
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
currentHunk.push(line);
|
|
49
|
+
if (line.startsWith('+') && !line.startsWith('+++')) {
|
|
50
|
+
hunkHasAddition = true;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
flushHunk();
|
|
54
|
+
if (!sawHunk) {
|
|
55
|
+
return patch.trim();
|
|
56
|
+
}
|
|
57
|
+
if (preserved.length === 0) {
|
|
58
|
+
return '';
|
|
59
|
+
}
|
|
60
|
+
return [...prefix, ...preserved].join('\n').trim();
|
|
61
|
+
}
|
|
62
|
+
export function compressFilesWithDiffs(files, options) {
|
|
63
|
+
const resolvedOptions = normalizeOptions(options);
|
|
64
|
+
if (!resolvedOptions.enabled) {
|
|
65
|
+
return {
|
|
66
|
+
files,
|
|
67
|
+
omitted: {
|
|
68
|
+
deletionsOnly: [],
|
|
69
|
+
dueToBudget: [],
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const deletionsOnly = [];
|
|
74
|
+
const budgetOmitted = [];
|
|
75
|
+
const filesWithDiffs = [];
|
|
76
|
+
for (const file of files) {
|
|
77
|
+
if (!file.patch)
|
|
78
|
+
continue;
|
|
79
|
+
const trimmedPatch = stripDeletionOnlyHunks(file.patch ?? '');
|
|
80
|
+
if (!trimmedPatch.trim()) {
|
|
81
|
+
deletionsOnly.push(file.filename);
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
filesWithDiffs.push({
|
|
85
|
+
filename: file.filename,
|
|
86
|
+
patch: trimmedPatch,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
if (filesWithDiffs.length === 0) {
|
|
90
|
+
return {
|
|
91
|
+
files,
|
|
92
|
+
omitted: {
|
|
93
|
+
deletionsOnly,
|
|
94
|
+
dueToBudget: [],
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
const entries = filesWithDiffs.map((file) => {
|
|
99
|
+
const entryText = buildDiffEntry(file);
|
|
100
|
+
return {
|
|
101
|
+
file,
|
|
102
|
+
entryText,
|
|
103
|
+
tokens: estimateTokens(entryText, resolvedOptions.tokenEstimateDivisor),
|
|
104
|
+
};
|
|
105
|
+
});
|
|
106
|
+
const totalTokens = entries.reduce((sum, entry) => sum + entry.tokens, 0);
|
|
107
|
+
const softLimit = resolvedOptions.maxTokens - resolvedOptions.softBufferTokens;
|
|
108
|
+
const hardLimit = resolvedOptions.maxTokens - resolvedOptions.hardBufferTokens;
|
|
109
|
+
if (totalTokens <= softLimit) {
|
|
110
|
+
const patchLookup = new Map(filesWithDiffs.map((file) => [file.filename, file.patch]));
|
|
111
|
+
return {
|
|
112
|
+
files: files.map((file) => file.patch ? { filename: file.filename, patch: patchLookup.get(file.filename) } : file),
|
|
113
|
+
omitted: {
|
|
114
|
+
deletionsOnly,
|
|
115
|
+
dueToBudget: [],
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
const sorted = [...entries].sort((a, b) => {
|
|
120
|
+
if (b.tokens !== a.tokens)
|
|
121
|
+
return b.tokens - a.tokens;
|
|
122
|
+
return a.file.filename.localeCompare(b.file.filename);
|
|
123
|
+
});
|
|
124
|
+
const kept = [];
|
|
125
|
+
let currentTokens = 0;
|
|
126
|
+
for (const entry of sorted) {
|
|
127
|
+
if (currentTokens > hardLimit) {
|
|
128
|
+
budgetOmitted.push(entry.file.filename);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
if (currentTokens + entry.tokens > softLimit) {
|
|
132
|
+
budgetOmitted.push(entry.file.filename);
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
kept.push(entry.file);
|
|
136
|
+
currentTokens += entry.tokens;
|
|
137
|
+
}
|
|
138
|
+
const keptLookup = new Map(kept.map((entry) => [entry.filename, entry.patch]));
|
|
139
|
+
const keptFiles = files.map((file) => {
|
|
140
|
+
if (!file.patch)
|
|
141
|
+
return file;
|
|
142
|
+
const keptPatch = keptLookup.get(file.filename);
|
|
143
|
+
return keptPatch ? { filename: file.filename, patch: keptPatch } : { filename: file.filename };
|
|
144
|
+
});
|
|
145
|
+
return {
|
|
146
|
+
files: keptFiles,
|
|
147
|
+
omitted: {
|
|
148
|
+
deletionsOnly,
|
|
149
|
+
dueToBudget: budgetOmitted,
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
export function formatCompressionSummary(result) {
|
|
154
|
+
const sections = [];
|
|
155
|
+
if (result.omitted.deletionsOnly.length > 0) {
|
|
156
|
+
sections.push(`- Deletions-only changes (omitted from diff content):\n${result.omitted.deletionsOnly
|
|
157
|
+
.map((name) => ` - ${name}`)
|
|
158
|
+
.join('\n')}`);
|
|
159
|
+
}
|
|
160
|
+
if (result.omitted.dueToBudget.length > 0) {
|
|
161
|
+
sections.push(`- Omitted due to token budget:\n${result.omitted.dueToBudget
|
|
162
|
+
.map((name) => ` - ${name}`)
|
|
163
|
+
.join('\n')}`);
|
|
164
|
+
}
|
|
165
|
+
if (sections.length === 0) {
|
|
166
|
+
return '';
|
|
167
|
+
}
|
|
168
|
+
return `## Omitted Files\n\n${sections.join('\n\n')}`;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=context-compression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-compression.js","sourceRoot":"","sources":["../../src/lib/context-compression.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-compression.test.d.ts","sourceRoot":"","sources":["../../src/lib/context-compression.test.ts"],"names":[],"mappings":""}
|