@diff-review-system/drs 2.2.1 → 3.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/README.md +228 -92
- package/dist/ci/runner.d.ts.map +1 -1
- package/dist/ci/runner.js +19 -22
- package/dist/ci/runner.js.map +1 -1
- package/dist/cli/describe-mr.d.ts.map +1 -1
- package/dist/cli/describe-mr.js +39 -20
- package/dist/cli/describe-mr.js.map +1 -1
- package/dist/cli/describe-pr.d.ts.map +1 -1
- package/dist/cli/describe-pr.js +39 -20
- package/dist/cli/describe-pr.js.map +1 -1
- package/dist/cli/index.js +11 -7
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +30 -2
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/post-comments.d.ts.map +1 -1
- package/dist/cli/post-comments.js +5 -5
- package/dist/cli/post-comments.js.map +1 -1
- package/dist/cli/review-local.d.ts.map +1 -1
- package/dist/cli/review-local.integration.test.d.ts +2 -0
- package/dist/cli/review-local.integration.test.d.ts.map +1 -0
- package/dist/cli/review-local.integration.test.js +343 -0
- package/dist/cli/review-local.integration.test.js.map +1 -0
- package/dist/cli/review-local.js +5 -4
- package/dist/cli/review-local.js.map +1 -1
- package/dist/cli/review-local.live.e2e.test.d.ts +2 -0
- package/dist/cli/review-local.live.e2e.test.d.ts.map +1 -0
- package/dist/cli/review-local.live.e2e.test.js +154 -0
- package/dist/cli/review-local.live.e2e.test.js.map +1 -0
- package/dist/cli/review-local.test.d.ts +2 -0
- package/dist/cli/review-local.test.d.ts.map +1 -0
- package/dist/cli/review-local.test.js +164 -0
- package/dist/cli/review-local.test.js.map +1 -0
- package/dist/cli/review-mr.d.ts +1 -1
- package/dist/cli/review-mr.d.ts.map +1 -1
- package/dist/cli/review-mr.js +92 -17
- package/dist/cli/review-mr.js.map +1 -1
- package/dist/cli/review-mr.test.d.ts +2 -0
- package/dist/cli/review-mr.test.d.ts.map +1 -0
- package/dist/cli/review-mr.test.js +142 -0
- package/dist/cli/review-mr.test.js.map +1 -0
- package/dist/cli/review-pr.d.ts +1 -1
- package/dist/cli/review-pr.d.ts.map +1 -1
- package/dist/cli/review-pr.js +96 -13
- package/dist/cli/review-pr.js.map +1 -1
- package/dist/cli/review-pr.test.d.ts +2 -0
- package/dist/cli/review-pr.test.d.ts.map +1 -0
- package/dist/cli/review-pr.test.js +137 -0
- package/dist/cli/review-pr.test.js.map +1 -0
- package/dist/cli/show-changes.js +4 -4
- package/dist/github/platform-adapter.js +2 -2
- package/dist/gitlab/client.js +1 -1
- package/dist/lib/code-quality-report.js +1 -1
- package/dist/lib/comment-formatter.d.ts +2 -1
- package/dist/lib/comment-formatter.d.ts.map +1 -1
- package/dist/lib/comment-formatter.js +33 -1
- package/dist/lib/comment-formatter.js.map +1 -1
- package/dist/lib/comment-formatter.test.js +43 -0
- package/dist/lib/comment-formatter.test.js.map +1 -1
- package/dist/lib/comment-manager.d.ts.map +1 -1
- package/dist/lib/comment-manager.js +4 -3
- package/dist/lib/comment-manager.js.map +1 -1
- package/dist/lib/comment-poster.d.ts +2 -1
- package/dist/lib/comment-poster.d.ts.map +1 -1
- package/dist/lib/comment-poster.js +2 -2
- package/dist/lib/comment-poster.js.map +1 -1
- package/dist/lib/comment-poster.test.js +27 -11
- package/dist/lib/comment-poster.test.js.map +1 -1
- package/dist/lib/config-model-overrides.test.d.ts +1 -1
- package/dist/lib/config-model-overrides.test.js +2 -2
- package/dist/lib/config-model-overrides.test.js.map +1 -1
- package/dist/lib/config.d.ts +34 -7
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +35 -13
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/config.test.js +16 -0
- package/dist/lib/config.test.js.map +1 -1
- package/dist/lib/context-compression.d.ts +27 -1
- package/dist/lib/context-compression.d.ts.map +1 -1
- package/dist/lib/context-compression.js +106 -4
- package/dist/lib/context-compression.js.map +1 -1
- package/dist/lib/context-compression.test.js +305 -1
- package/dist/lib/context-compression.test.js.map +1 -1
- package/dist/lib/context-loader.d.ts +3 -2
- package/dist/lib/context-loader.d.ts.map +1 -1
- package/dist/lib/context-loader.js +11 -11
- package/dist/lib/context-loader.js.map +1 -1
- package/dist/lib/description-executor.d.ts +19 -2
- package/dist/lib/description-executor.d.ts.map +1 -1
- package/dist/lib/description-executor.js +52 -21
- package/dist/lib/description-executor.js.map +1 -1
- package/dist/lib/description-executor.test.d.ts +2 -0
- package/dist/lib/description-executor.test.d.ts.map +1 -0
- package/dist/lib/description-executor.test.js +120 -0
- package/dist/lib/description-executor.test.js.map +1 -0
- package/dist/lib/description-formatter.d.ts +8 -3
- package/dist/lib/description-formatter.d.ts.map +1 -1
- package/dist/lib/description-formatter.js +88 -13
- package/dist/lib/description-formatter.js.map +1 -1
- package/dist/lib/description-formatter.test.d.ts +2 -0
- package/dist/lib/description-formatter.test.d.ts.map +1 -0
- package/dist/lib/description-formatter.test.js +57 -0
- package/dist/lib/description-formatter.test.js.map +1 -0
- package/dist/lib/diff-parser.test.d.ts +2 -0
- package/dist/lib/diff-parser.test.d.ts.map +1 -0
- package/dist/lib/diff-parser.test.js +335 -0
- package/dist/lib/diff-parser.test.js.map +1 -0
- package/dist/lib/exit.d.ts +35 -0
- package/dist/lib/exit.d.ts.map +1 -0
- package/dist/lib/exit.js +53 -0
- package/dist/lib/exit.js.map +1 -0
- package/dist/lib/exit.test.d.ts +2 -0
- package/dist/lib/exit.test.d.ts.map +1 -0
- package/dist/lib/exit.test.js +120 -0
- package/dist/lib/exit.test.js.map +1 -0
- package/dist/lib/format-utils.d.ts +3 -0
- package/dist/lib/format-utils.d.ts.map +1 -0
- package/dist/lib/format-utils.js +7 -0
- package/dist/lib/format-utils.js.map +1 -0
- package/dist/lib/json-output.d.ts +4 -1
- package/dist/lib/json-output.d.ts.map +1 -1
- package/dist/lib/json-output.js +2 -1
- package/dist/lib/json-output.js.map +1 -1
- package/dist/lib/json-output.test.d.ts +2 -0
- package/dist/lib/json-output.test.d.ts.map +1 -0
- package/dist/lib/json-output.test.js +135 -0
- package/dist/lib/json-output.test.js.map +1 -0
- package/dist/lib/logger.d.ts +10 -2
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +22 -4
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/logger.test.d.ts +2 -0
- package/dist/lib/logger.test.d.ts.map +1 -0
- package/dist/lib/logger.test.js +324 -0
- package/dist/lib/logger.test.js.map +1 -0
- package/dist/lib/position-validator.test.d.ts +2 -0
- package/dist/lib/position-validator.test.d.ts.map +1 -0
- package/dist/lib/position-validator.test.js +128 -0
- package/dist/lib/position-validator.test.js.map +1 -0
- package/dist/lib/repository-validator.js +1 -1
- package/dist/lib/review-core.d.ts +9 -4
- package/dist/lib/review-core.d.ts.map +1 -1
- package/dist/lib/review-core.js +207 -112
- package/dist/lib/review-core.js.map +1 -1
- package/dist/lib/review-core.test.js +76 -30
- package/dist/lib/review-core.test.js.map +1 -1
- package/dist/lib/review-orchestrator.d.ts +12 -7
- package/dist/lib/review-orchestrator.d.ts.map +1 -1
- package/dist/lib/review-orchestrator.js +78 -22
- package/dist/lib/review-orchestrator.js.map +1 -1
- package/dist/lib/review-orchestrator.test.js +160 -42
- package/dist/lib/review-orchestrator.test.js.map +1 -1
- package/dist/lib/review-parser.test.d.ts +2 -0
- package/dist/lib/review-parser.test.d.ts.map +1 -0
- package/dist/lib/review-parser.test.js +130 -0
- package/dist/lib/review-parser.test.js.map +1 -0
- package/dist/lib/review-usage.d.ts +32 -0
- package/dist/lib/review-usage.d.ts.map +1 -0
- package/dist/lib/review-usage.js +72 -0
- package/dist/lib/review-usage.js.map +1 -0
- package/dist/lib/review-usage.test.d.ts +2 -0
- package/dist/lib/review-usage.test.d.ts.map +1 -0
- package/dist/lib/review-usage.test.js +83 -0
- package/dist/lib/review-usage.test.js.map +1 -0
- package/dist/lib/unified-review-executor.d.ts +6 -2
- package/dist/lib/unified-review-executor.d.ts.map +1 -1
- package/dist/lib/unified-review-executor.js +54 -28
- package/dist/lib/unified-review-executor.js.map +1 -1
- package/dist/lib/unified-review-executor.test.js +138 -16
- package/dist/lib/unified-review-executor.test.js.map +1 -1
- package/dist/lib/write-json-output.test.d.ts +2 -0
- package/dist/lib/write-json-output.test.d.ts.map +1 -0
- package/dist/lib/write-json-output.test.js +259 -0
- package/dist/lib/write-json-output.test.js.map +1 -0
- package/dist/pi/sdk.d.ts +94 -0
- package/dist/pi/sdk.d.ts.map +1 -0
- package/dist/pi/sdk.js +486 -0
- package/dist/pi/sdk.js.map +1 -0
- package/dist/pi/sdk.test.d.ts +2 -0
- package/dist/pi/sdk.test.d.ts.map +1 -0
- package/dist/pi/sdk.test.js +331 -0
- package/dist/pi/sdk.test.js.map +1 -0
- package/dist/{opencode → runtime}/agent-loader.d.ts +7 -5
- package/dist/runtime/agent-loader.d.ts.map +1 -0
- package/dist/{opencode → runtime}/agent-loader.js +24 -19
- package/dist/runtime/agent-loader.js.map +1 -0
- package/dist/runtime/agent-loader.test.d.ts +2 -0
- package/dist/runtime/agent-loader.test.d.ts.map +1 -0
- package/dist/runtime/agent-loader.test.js +280 -0
- package/dist/runtime/agent-loader.test.js.map +1 -0
- package/dist/runtime/built-in-paths.d.ts +2 -0
- package/dist/runtime/built-in-paths.d.ts.map +1 -0
- package/dist/runtime/built-in-paths.js +14 -0
- package/dist/runtime/built-in-paths.js.map +1 -0
- package/dist/{opencode → runtime}/client.d.ts +35 -18
- package/dist/runtime/client.d.ts.map +1 -0
- package/dist/runtime/client.js +486 -0
- package/dist/runtime/client.js.map +1 -0
- package/dist/{opencode → runtime}/client.test.d.ts.map +1 -1
- package/dist/runtime/client.test.js +392 -0
- package/dist/runtime/client.test.js.map +1 -0
- package/dist/runtime/path-config.d.ts +8 -0
- package/dist/runtime/path-config.d.ts.map +1 -0
- package/dist/runtime/path-config.js +68 -0
- package/dist/runtime/path-config.js.map +1 -0
- package/dist/runtime/path-config.test.d.ts +2 -0
- package/dist/runtime/path-config.test.d.ts.map +1 -0
- package/dist/runtime/path-config.test.js +103 -0
- package/dist/runtime/path-config.test.js.map +1 -0
- package/package.json +5 -5
- package/.opencode/opencode.jsonc +0 -15
- package/.opencode/tool/write_json_output.ts +0 -24
- package/.opencode/tools/drs_skill.ts +0 -67
- package/dist/lib/skills-prompt.d.ts +0 -3
- package/dist/lib/skills-prompt.d.ts.map +0 -1
- package/dist/lib/skills-prompt.js +0 -70
- package/dist/lib/skills-prompt.js.map +0 -1
- package/dist/opencode/agent-loader.d.ts.map +0 -1
- package/dist/opencode/agent-loader.js.map +0 -1
- package/dist/opencode/client.d.ts.map +0 -1
- package/dist/opencode/client.js +0 -456
- package/dist/opencode/client.js.map +0 -1
- package/dist/opencode/client.test.js +0 -317
- package/dist/opencode/client.test.js.map +0 -1
- package/dist/opencode/opencode-paths.d.ts +0 -2
- package/dist/opencode/opencode-paths.d.ts.map +0 -1
- package/dist/opencode/opencode-paths.js +0 -7
- package/dist/opencode/opencode-paths.js.map +0 -1
- package/dist/opencode/skill-loader.d.ts +0 -15
- package/dist/opencode/skill-loader.d.ts.map +0 -1
- package/dist/opencode/skill-loader.js +0 -88
- package/dist/opencode/skill-loader.js.map +0 -1
- /package/{.opencode/agent → .pi/agents}/describe/pr-describer.md +0 -0
- /package/{.opencode/agent → .pi/agents}/review/documentation.md +0 -0
- /package/{.opencode/agent → .pi/agents}/review/performance.md +0 -0
- /package/{.opencode/agent → .pi/agents}/review/quality.md +0 -0
- /package/{.opencode/agent → .pi/agents}/review/security.md +0 -0
- /package/{.opencode/agent → .pi/agents}/review/style.md +0 -0
- /package/{.opencode/agent → .pi/agents}/review/unified-reviewer.md +0 -0
- /package/dist/{opencode → runtime}/client.test.d.ts +0 -0
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from 'fs';
|
|
2
|
+
import { tmpdir } from 'os';
|
|
3
|
+
import { join, resolve } from 'path';
|
|
4
|
+
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
5
|
+
import { getAgent, getReviewAgents, listAgents, loadReviewAgents } from './agent-loader.js';
|
|
6
|
+
function createConfig(agentsPath) {
|
|
7
|
+
return {
|
|
8
|
+
review: {
|
|
9
|
+
paths: {
|
|
10
|
+
agents: agentsPath,
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
describe('agent-loader path resolution', () => {
|
|
16
|
+
const tempDirs = [];
|
|
17
|
+
function createTempDir(prefix) {
|
|
18
|
+
const dir = mkdtempSync(join(tmpdir(), prefix));
|
|
19
|
+
tempDirs.push(dir);
|
|
20
|
+
return dir;
|
|
21
|
+
}
|
|
22
|
+
afterEach(() => {
|
|
23
|
+
for (const dir of tempDirs.splice(0, tempDirs.length)) {
|
|
24
|
+
rmSync(dir, { recursive: true, force: true });
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
it('loads override agents from configured repo-relative path', () => {
|
|
28
|
+
const projectRoot = createTempDir('drs-agent-loader-');
|
|
29
|
+
const customAgentsRoot = join(projectRoot, 'config', 'agents');
|
|
30
|
+
const customAgentPath = join(customAgentsRoot, 'security', 'agent.md');
|
|
31
|
+
mkdirSync(join(customAgentsRoot, 'security'), { recursive: true });
|
|
32
|
+
writeFileSync(customAgentPath, `---\ndescription: Custom security override\nmodel: anthropic/custom-security\n---\n\nCustom security instructions\n`);
|
|
33
|
+
const agents = loadReviewAgents(projectRoot, createConfig('config/agents'));
|
|
34
|
+
const securityAgent = agents.find((agent) => agent.name === 'review/security');
|
|
35
|
+
expect(securityAgent).toBeDefined();
|
|
36
|
+
expect(securityAgent?.description).toBe('Custom security override');
|
|
37
|
+
expect(securityAgent?.path).toBe(resolve(customAgentPath));
|
|
38
|
+
expect(agents.some((agent) => agent.name === 'review/quality')).toBe(true);
|
|
39
|
+
});
|
|
40
|
+
it('custom agent override replaces built-in prompt and model', () => {
|
|
41
|
+
const projectRoot = createTempDir('drs-agent-override-');
|
|
42
|
+
const agentsDir = join(projectRoot, '.drs', 'agents');
|
|
43
|
+
mkdirSync(join(agentsDir, 'security'), { recursive: true });
|
|
44
|
+
writeFileSync(join(agentsDir, 'security', 'agent.md'), [
|
|
45
|
+
'---',
|
|
46
|
+
'description: Project-specific security reviewer',
|
|
47
|
+
'model: openai/gpt-4o',
|
|
48
|
+
'---',
|
|
49
|
+
'',
|
|
50
|
+
'You are a security reviewer for our Rails application.',
|
|
51
|
+
'Focus on mass assignment and CSRF vulnerabilities.',
|
|
52
|
+
'',
|
|
53
|
+
].join('\n'));
|
|
54
|
+
const agents = loadReviewAgents(projectRoot);
|
|
55
|
+
const securityAgent = agents.find((a) => a.name === 'review/security');
|
|
56
|
+
expect(securityAgent).toBeDefined();
|
|
57
|
+
expect(securityAgent?.description).toBe('Project-specific security reviewer');
|
|
58
|
+
expect(securityAgent?.model).toBe('openai/gpt-4o');
|
|
59
|
+
expect(securityAgent?.prompt).toContain('Rails application');
|
|
60
|
+
expect(securityAgent?.prompt).toContain('CSRF vulnerabilities');
|
|
61
|
+
// Must NOT contain the built-in prompt
|
|
62
|
+
expect(securityAgent?.prompt).not.toContain('Security Vulnerability Assessment');
|
|
63
|
+
// Other built-in agents still loaded
|
|
64
|
+
const qualityAgent = agents.find((a) => a.name === 'review/quality');
|
|
65
|
+
expect(qualityAgent).toBeDefined();
|
|
66
|
+
expect(qualityAgent?.path).toMatch(/\.pi[\\/]agents[\\/]review[\\/]quality\.md$/);
|
|
67
|
+
});
|
|
68
|
+
it('multiple custom agents override their respective built-ins', () => {
|
|
69
|
+
const projectRoot = createTempDir('drs-agent-multi-override-');
|
|
70
|
+
const agentsDir = join(projectRoot, '.drs', 'agents');
|
|
71
|
+
mkdirSync(join(agentsDir, 'security'), { recursive: true });
|
|
72
|
+
mkdirSync(join(agentsDir, 'style'), { recursive: true });
|
|
73
|
+
writeFileSync(join(agentsDir, 'security', 'agent.md'), '---\ndescription: Custom security\n---\n\nCustom security prompt\n');
|
|
74
|
+
writeFileSync(join(agentsDir, 'style', 'agent.md'), '---\ndescription: Custom style\n---\n\nCustom style prompt\n');
|
|
75
|
+
const agents = loadReviewAgents(projectRoot);
|
|
76
|
+
const security = agents.find((a) => a.name === 'review/security');
|
|
77
|
+
const style = agents.find((a) => a.name === 'review/style');
|
|
78
|
+
const quality = agents.find((a) => a.name === 'review/quality');
|
|
79
|
+
expect(security?.prompt).toBe('Custom security prompt');
|
|
80
|
+
expect(style?.prompt).toBe('Custom style prompt');
|
|
81
|
+
// quality remains built-in
|
|
82
|
+
expect(quality?.path).toMatch(/\.pi[\\/]agents[\\/]review[\\/]quality\.md$/);
|
|
83
|
+
});
|
|
84
|
+
it('loads built-in Pi-native review agents and keeps all core categories', () => {
|
|
85
|
+
const agents = loadReviewAgents(process.cwd());
|
|
86
|
+
const reviewAgentNames = new Set(agents.filter((agent) => agent.name.startsWith('review/')).map((agent) => agent.name));
|
|
87
|
+
expect(reviewAgentNames.has('review/security')).toBe(true);
|
|
88
|
+
expect(reviewAgentNames.has('review/quality')).toBe(true);
|
|
89
|
+
expect(reviewAgentNames.has('review/style')).toBe(true);
|
|
90
|
+
expect(reviewAgentNames.has('review/performance')).toBe(true);
|
|
91
|
+
expect(reviewAgentNames.has('review/documentation')).toBe(true);
|
|
92
|
+
const securityAgent = agents.find((agent) => agent.name === 'review/security');
|
|
93
|
+
expect(securityAgent?.prompt).toContain('Security Vulnerability Assessment');
|
|
94
|
+
expect(securityAgent?.path).toMatch(/\.pi[\\/]agents[\\/]review[\\/]security\.md$/);
|
|
95
|
+
});
|
|
96
|
+
it('throws actionable error when configured agent path is invalid', () => {
|
|
97
|
+
const projectRoot = createTempDir('drs-agent-loader-invalid-');
|
|
98
|
+
expect(() => loadReviewAgents(projectRoot, createConfig('missing/agents'))).toThrow('review.paths.agents');
|
|
99
|
+
});
|
|
100
|
+
it('override preserves frontmatter fields: color, tools, hidden', () => {
|
|
101
|
+
const projectRoot = createTempDir('drs-agent-frontmatter-');
|
|
102
|
+
const agentsDir = join(projectRoot, '.drs', 'agents');
|
|
103
|
+
mkdirSync(join(agentsDir, 'security'), { recursive: true });
|
|
104
|
+
writeFileSync(join(agentsDir, 'security', 'agent.md'), [
|
|
105
|
+
'---',
|
|
106
|
+
'description: Themed agent',
|
|
107
|
+
'color: "#FF5733"',
|
|
108
|
+
'hidden: true',
|
|
109
|
+
'tools:',
|
|
110
|
+
' Read: true',
|
|
111
|
+
' Grep: false',
|
|
112
|
+
'---',
|
|
113
|
+
'',
|
|
114
|
+
'Custom prompt with all frontmatter fields.',
|
|
115
|
+
'',
|
|
116
|
+
].join('\n'));
|
|
117
|
+
const agents = loadReviewAgents(projectRoot);
|
|
118
|
+
const security = agents.find((a) => a.name === 'review/security');
|
|
119
|
+
expect(security?.color).toBe('#FF5733');
|
|
120
|
+
expect(security?.hidden).toBe(true);
|
|
121
|
+
expect(security?.tools).toEqual({ Read: true, Grep: false });
|
|
122
|
+
expect(security?.prompt).toBe('Custom prompt with all frontmatter fields.');
|
|
123
|
+
});
|
|
124
|
+
it('agent.md without frontmatter is skipped with warning', () => {
|
|
125
|
+
const projectRoot = createTempDir('drs-agent-no-frontmatter-');
|
|
126
|
+
const agentsDir = join(projectRoot, '.drs', 'agents');
|
|
127
|
+
mkdirSync(join(agentsDir, 'security'), { recursive: true });
|
|
128
|
+
writeFileSync(join(agentsDir, 'security', 'agent.md'), 'Just plain text, no frontmatter at all.\n');
|
|
129
|
+
const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
|
|
130
|
+
const agents = loadReviewAgents(projectRoot);
|
|
131
|
+
// Override skipped — built-in security still loaded
|
|
132
|
+
const security = agents.find((a) => a.name === 'review/security');
|
|
133
|
+
expect(security?.path).toMatch(/\.pi[\\/]agents[\\/]review[\\/]security\.md$/);
|
|
134
|
+
expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining('No frontmatter'));
|
|
135
|
+
warnSpy.mockRestore();
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
describe('getAgent / getReviewAgents / listAgents', () => {
|
|
139
|
+
const tempDirs = [];
|
|
140
|
+
function createTempDir(prefix) {
|
|
141
|
+
const dir = mkdtempSync(join(tmpdir(), prefix));
|
|
142
|
+
tempDirs.push(dir);
|
|
143
|
+
return dir;
|
|
144
|
+
}
|
|
145
|
+
afterEach(() => {
|
|
146
|
+
for (const dir of tempDirs.splice(0, tempDirs.length)) {
|
|
147
|
+
rmSync(dir, { recursive: true, force: true });
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
it('getAgent returns a specific agent by full name', () => {
|
|
151
|
+
const agent = getAgent(process.cwd(), 'review/security');
|
|
152
|
+
expect(agent).not.toBeNull();
|
|
153
|
+
expect(agent?.name).toBe('review/security');
|
|
154
|
+
expect(agent?.prompt).toContain('Security Vulnerability Assessment');
|
|
155
|
+
});
|
|
156
|
+
it('getAgent returns null for non-existent agent', () => {
|
|
157
|
+
const agent = getAgent(process.cwd(), 'review/nonexistent');
|
|
158
|
+
expect(agent).toBeNull();
|
|
159
|
+
});
|
|
160
|
+
it('getAgent returns override when present', () => {
|
|
161
|
+
const projectRoot = createTempDir('drs-get-agent-');
|
|
162
|
+
const agentsDir = join(projectRoot, '.drs', 'agents');
|
|
163
|
+
mkdirSync(join(agentsDir, 'security'), { recursive: true });
|
|
164
|
+
writeFileSync(join(agentsDir, 'security', 'agent.md'), '---\ndescription: Override via getAgent\n---\n\nOverride prompt\n');
|
|
165
|
+
const agent = getAgent(projectRoot, 'review/security');
|
|
166
|
+
expect(agent?.description).toBe('Override via getAgent');
|
|
167
|
+
expect(agent?.prompt).toBe('Override prompt');
|
|
168
|
+
});
|
|
169
|
+
it('getReviewAgents returns only review/ prefixed agents', () => {
|
|
170
|
+
const agents = getReviewAgents(process.cwd());
|
|
171
|
+
expect(agents.length).toBeGreaterThanOrEqual(5);
|
|
172
|
+
expect(agents.every((a) => a.name.startsWith('review/'))).toBe(true);
|
|
173
|
+
});
|
|
174
|
+
it('getReviewAgents includes overrides', () => {
|
|
175
|
+
const projectRoot = createTempDir('drs-get-review-agents-');
|
|
176
|
+
const agentsDir = join(projectRoot, '.drs', 'agents');
|
|
177
|
+
mkdirSync(join(agentsDir, 'quality'), { recursive: true });
|
|
178
|
+
writeFileSync(join(agentsDir, 'quality', 'agent.md'), '---\ndescription: Custom quality\n---\n\nCustom quality prompt\n');
|
|
179
|
+
const agents = getReviewAgents(projectRoot);
|
|
180
|
+
const quality = agents.find((a) => a.name === 'review/quality');
|
|
181
|
+
expect(quality?.description).toBe('Custom quality');
|
|
182
|
+
});
|
|
183
|
+
it('listAgents returns all agent names as strings', () => {
|
|
184
|
+
const names = listAgents(process.cwd());
|
|
185
|
+
expect(names).toContain('review/security');
|
|
186
|
+
expect(names).toContain('review/quality');
|
|
187
|
+
expect(names).toContain('review/style');
|
|
188
|
+
expect(names).toContain('review/performance');
|
|
189
|
+
expect(names).toContain('review/documentation');
|
|
190
|
+
});
|
|
191
|
+
it('listAgents reflects overrides without duplication', () => {
|
|
192
|
+
const projectRoot = createTempDir('drs-list-agents-');
|
|
193
|
+
const agentsDir = join(projectRoot, '.drs', 'agents');
|
|
194
|
+
mkdirSync(join(agentsDir, 'security'), { recursive: true });
|
|
195
|
+
writeFileSync(join(agentsDir, 'security', 'agent.md'), '---\ndescription: Override\n---\n\nOverride prompt\n');
|
|
196
|
+
const names = listAgents(projectRoot);
|
|
197
|
+
const securityCount = names.filter((n) => n === 'review/security').length;
|
|
198
|
+
expect(securityCount).toBe(1);
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
describe('new custom agent (not overriding built-in)', () => {
|
|
202
|
+
const tempDirs = [];
|
|
203
|
+
function createTempDir(prefix) {
|
|
204
|
+
const dir = mkdtempSync(join(tmpdir(), prefix));
|
|
205
|
+
tempDirs.push(dir);
|
|
206
|
+
return dir;
|
|
207
|
+
}
|
|
208
|
+
afterEach(() => {
|
|
209
|
+
for (const dir of tempDirs.splice(0, tempDirs.length)) {
|
|
210
|
+
rmSync(dir, { recursive: true, force: true });
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
it('discovers a brand new agent alongside built-ins', () => {
|
|
214
|
+
const projectRoot = createTempDir('drs-new-agent-');
|
|
215
|
+
const agentsDir = join(projectRoot, '.drs', 'agents');
|
|
216
|
+
mkdirSync(join(agentsDir, 'rails-reviewer'), { recursive: true });
|
|
217
|
+
writeFileSync(join(agentsDir, 'rails-reviewer', 'agent.md'), [
|
|
218
|
+
'---',
|
|
219
|
+
'description: Rails-specific code reviewer',
|
|
220
|
+
'model: anthropic/claude-sonnet-4-5-20250929',
|
|
221
|
+
'color: "#CC0000"',
|
|
222
|
+
'---',
|
|
223
|
+
'',
|
|
224
|
+
'You are a Rails security and conventions reviewer.',
|
|
225
|
+
'Focus on mass assignment, strong params, and N+1 queries.',
|
|
226
|
+
'',
|
|
227
|
+
].join('\n'));
|
|
228
|
+
const agents = loadReviewAgents(projectRoot);
|
|
229
|
+
// New agent discovered
|
|
230
|
+
const rails = agents.find((a) => a.name === 'review/rails-reviewer');
|
|
231
|
+
expect(rails).toBeDefined();
|
|
232
|
+
expect(rails?.description).toBe('Rails-specific code reviewer');
|
|
233
|
+
expect(rails?.model).toBe('anthropic/claude-sonnet-4-5-20250929');
|
|
234
|
+
expect(rails?.color).toBe('#CC0000');
|
|
235
|
+
expect(rails?.prompt).toContain('mass assignment');
|
|
236
|
+
expect(rails?.prompt).toContain('N+1 queries');
|
|
237
|
+
// Built-ins still present
|
|
238
|
+
expect(agents.some((a) => a.name === 'review/security')).toBe(true);
|
|
239
|
+
expect(agents.some((a) => a.name === 'review/quality')).toBe(true);
|
|
240
|
+
});
|
|
241
|
+
it('new agent is accessible via getAgent', () => {
|
|
242
|
+
const projectRoot = createTempDir('drs-new-get-agent-');
|
|
243
|
+
const agentsDir = join(projectRoot, '.drs', 'agents');
|
|
244
|
+
mkdirSync(join(agentsDir, 'api-reviewer'), { recursive: true });
|
|
245
|
+
writeFileSync(join(agentsDir, 'api-reviewer', 'agent.md'), '---\ndescription: API contract reviewer\n---\n\nReview REST API contracts.\n');
|
|
246
|
+
const agent = getAgent(projectRoot, 'review/api-reviewer');
|
|
247
|
+
expect(agent).not.toBeNull();
|
|
248
|
+
expect(agent?.description).toBe('API contract reviewer');
|
|
249
|
+
expect(agent?.prompt).toBe('Review REST API contracts.');
|
|
250
|
+
});
|
|
251
|
+
it('new agent appears in getReviewAgents and listAgents', () => {
|
|
252
|
+
const projectRoot = createTempDir('drs-new-list-');
|
|
253
|
+
const agentsDir = join(projectRoot, '.drs', 'agents');
|
|
254
|
+
mkdirSync(join(agentsDir, 'accessibility'), { recursive: true });
|
|
255
|
+
writeFileSync(join(agentsDir, 'accessibility', 'agent.md'), '---\ndescription: Accessibility reviewer\n---\n\nCheck WCAG compliance.\n');
|
|
256
|
+
const reviewAgents = getReviewAgents(projectRoot);
|
|
257
|
+
expect(reviewAgents.some((a) => a.name === 'review/accessibility')).toBe(true);
|
|
258
|
+
const names = listAgents(projectRoot);
|
|
259
|
+
expect(names).toContain('review/accessibility');
|
|
260
|
+
});
|
|
261
|
+
it('new agent coexists with overrides of built-ins', () => {
|
|
262
|
+
const projectRoot = createTempDir('drs-new-plus-override-');
|
|
263
|
+
const agentsDir = join(projectRoot, '.drs', 'agents');
|
|
264
|
+
mkdirSync(join(agentsDir, 'security'), { recursive: true });
|
|
265
|
+
mkdirSync(join(agentsDir, 'rails-reviewer'), { recursive: true });
|
|
266
|
+
writeFileSync(join(agentsDir, 'security', 'agent.md'), '---\ndescription: Custom security\n---\n\nCustom security prompt\n');
|
|
267
|
+
writeFileSync(join(agentsDir, 'rails-reviewer', 'agent.md'), '---\ndescription: Rails reviewer\n---\n\nRails review prompt\n');
|
|
268
|
+
const agents = loadReviewAgents(projectRoot);
|
|
269
|
+
// Override replaces built-in
|
|
270
|
+
const security = agents.find((a) => a.name === 'review/security');
|
|
271
|
+
expect(security?.prompt).toBe('Custom security prompt');
|
|
272
|
+
// New agent added
|
|
273
|
+
const rails = agents.find((a) => a.name === 'review/rails-reviewer');
|
|
274
|
+
expect(rails?.prompt).toBe('Rails review prompt');
|
|
275
|
+
// Other built-ins still present
|
|
276
|
+
expect(agents.some((a) => a.name === 'review/quality')).toBe(true);
|
|
277
|
+
expect(agents.some((a) => a.name === 'review/style')).toBe(true);
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
//# sourceMappingURL=agent-loader.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-loader.test.js","sourceRoot":"","sources":["../../src/runtime/agent-loader.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"built-in-paths.d.ts","sourceRoot":"","sources":["../../src/runtime/built-in-paths.ts"],"names":[],"mappings":"AAUA,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAM/C"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { existsSync } from 'fs';
|
|
2
|
+
import { dirname, join } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
5
|
+
const __dirname = dirname(__filename);
|
|
6
|
+
const packageRoot = join(__dirname, '..', '..');
|
|
7
|
+
const piBuiltInAgentPath = join(packageRoot, '.pi', 'agents');
|
|
8
|
+
export function getBuiltInAgentPaths() {
|
|
9
|
+
if (existsSync(piBuiltInAgentPath)) {
|
|
10
|
+
return [piBuiltInAgentPath];
|
|
11
|
+
}
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=built-in-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"built-in-paths.js","sourceRoot":"","sources":["../../src/runtime/built-in-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEhD,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAE9D,MAAM,UAAU,oBAAoB;IAClC,IAAI,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Agent runtime client wrapper for DRS with in-process server support.
|
|
3
3
|
*
|
|
4
|
-
* This client
|
|
5
|
-
*
|
|
6
|
-
* 2. Start an OpenCode server in-process (when baseUrl is not provided)
|
|
4
|
+
* This client maintains the existing internal interface used by review orchestration
|
|
5
|
+
* while delegating SDK calls through the Pi integration adapter in src/pi/sdk.ts.
|
|
7
6
|
*/
|
|
8
7
|
import type { CustomProvider, DRSConfig } from '../lib/config.js';
|
|
9
|
-
export interface
|
|
10
|
-
baseUrl?: string;
|
|
8
|
+
export interface RuntimeClientConfig {
|
|
11
9
|
directory?: string;
|
|
12
10
|
modelOverrides?: Record<string, string>;
|
|
13
11
|
provider?: Record<string, CustomProvider>;
|
|
@@ -19,11 +17,24 @@ export interface SessionCreateOptions {
|
|
|
19
17
|
message: string;
|
|
20
18
|
context?: Record<string, unknown>;
|
|
21
19
|
}
|
|
20
|
+
export interface SessionUsage {
|
|
21
|
+
input: number;
|
|
22
|
+
output: number;
|
|
23
|
+
cacheRead: number;
|
|
24
|
+
cacheWrite: number;
|
|
25
|
+
totalTokens: number;
|
|
26
|
+
cost: number;
|
|
27
|
+
}
|
|
22
28
|
export interface SessionMessage {
|
|
23
29
|
id: string;
|
|
24
30
|
role: 'user' | 'assistant' | 'system' | 'tool';
|
|
25
31
|
content: string;
|
|
26
32
|
timestamp: Date;
|
|
33
|
+
toolName?: string;
|
|
34
|
+
toolCallId?: string;
|
|
35
|
+
provider?: string;
|
|
36
|
+
model?: string;
|
|
37
|
+
usage?: SessionUsage;
|
|
27
38
|
}
|
|
28
39
|
export interface Session {
|
|
29
40
|
id: string;
|
|
@@ -31,18 +42,21 @@ export interface Session {
|
|
|
31
42
|
createdAt: Date;
|
|
32
43
|
}
|
|
33
44
|
/**
|
|
34
|
-
*
|
|
45
|
+
* Runtime client wrapper for DRS backed by in-process Pi sessions.
|
|
35
46
|
*/
|
|
36
|
-
export declare class
|
|
37
|
-
private
|
|
47
|
+
export declare class RuntimeClient {
|
|
48
|
+
private serverUrl?;
|
|
38
49
|
private directory?;
|
|
39
50
|
private inProcessServer?;
|
|
40
51
|
private client?;
|
|
41
52
|
private config;
|
|
42
|
-
|
|
43
|
-
|
|
53
|
+
constructor(config: RuntimeClientConfig);
|
|
54
|
+
getModelContextWindow(modelId: string): number | undefined;
|
|
55
|
+
getMinContextWindow(modelIds: string[]): number | undefined;
|
|
56
|
+
private getConfiguredModelPricing;
|
|
57
|
+
private estimateConfiguredCost;
|
|
44
58
|
/**
|
|
45
|
-
* Initialize -
|
|
59
|
+
* Initialize in-process Pi runtime.
|
|
46
60
|
*/
|
|
47
61
|
initialize(): Promise<void>;
|
|
48
62
|
/**
|
|
@@ -50,7 +64,11 @@ export declare class OpencodeClient {
|
|
|
50
64
|
*/
|
|
51
65
|
createSession(options: SessionCreateOptions): Promise<Session>;
|
|
52
66
|
/**
|
|
53
|
-
* Stream messages from a session
|
|
67
|
+
* Stream messages from a session.
|
|
68
|
+
*
|
|
69
|
+
* With the in-process Pi runtime, prompt() is synchronous so all messages
|
|
70
|
+
* are available immediately and the loop completes on the first iteration.
|
|
71
|
+
* The polling structure is retained for future remote-runtime compatibility.
|
|
54
72
|
*/
|
|
55
73
|
streamMessages(sessionId: string): AsyncGenerator<SessionMessage>;
|
|
56
74
|
/**
|
|
@@ -79,12 +97,11 @@ export declare class OpencodeClient {
|
|
|
79
97
|
private resolveEnvReferences;
|
|
80
98
|
}
|
|
81
99
|
/**
|
|
82
|
-
* Create
|
|
83
|
-
* @deprecated Use createOpencodeClientInstance instead, which properly initializes the client
|
|
100
|
+
* Create a runtime client with the given configuration.
|
|
84
101
|
*/
|
|
85
|
-
export declare function
|
|
102
|
+
export declare function createRuntimeClient(config: RuntimeClientConfig): RuntimeClient;
|
|
86
103
|
/**
|
|
87
|
-
* Create and initialize
|
|
104
|
+
* Create and initialize a runtime client with the given configuration.
|
|
88
105
|
*/
|
|
89
|
-
export declare function
|
|
106
|
+
export declare function createRuntimeClientInstance(config: RuntimeClientConfig): Promise<RuntimeClient>;
|
|
90
107
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/runtime/client.ts"],"names":[],"mappings":"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"}
|