@agentskit/code-review 0.1.0 → 0.4.2
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/.doc-bridge/capabilities.json +34 -0
- package/.doc-bridge/index.json +94 -0
- package/.pre-commit-hooks.yaml +9 -0
- package/AGENTS.md +20 -0
- package/CHANGELOG.md +91 -0
- package/CONTRIBUTING.md +45 -0
- package/README.md +238 -33
- package/ROADMAP.md +20 -0
- package/SECURITY.md +16 -0
- package/action.yml +120 -0
- package/dist/agents/code-review/agent.js +454 -76
- package/dist/agents/code-review/agent.js.map +1 -1
- package/dist/agents/code-review/lenses.js +17 -1
- package/dist/agents/code-review/lenses.js.map +1 -1
- package/dist/agents/code-review/reporters.js +83 -7
- package/dist/agents/code-review/reporters.js.map +1 -1
- package/dist/agents/code-review/sources.js +324 -73
- package/dist/agents/code-review/sources.js.map +1 -1
- package/dist/src/acp-cli-adapter.js +127 -0
- package/dist/src/acp-cli-adapter.js.map +1 -0
- package/dist/src/batch-coverage.js +111 -0
- package/dist/src/batch-coverage.js.map +1 -0
- package/dist/src/claude-code-adapter.js +44 -60
- package/dist/src/claude-code-adapter.js.map +1 -1
- package/dist/src/cli.js +347 -50
- package/dist/src/cli.js.map +1 -1
- package/dist/src/codex-adapter.js +114 -69
- package/dist/src/codex-adapter.js.map +1 -1
- package/dist/src/github-review-state.js +134 -0
- package/dist/src/github-review-state.js.map +1 -0
- package/dist/src/grok-cli-adapter.js +27 -0
- package/dist/src/grok-cli-adapter.js.map +1 -0
- package/dist/src/headless-cli-adapter.js +78 -0
- package/dist/src/headless-cli-adapter.js.map +1 -0
- package/dist/src/local-cli-process.js +328 -0
- package/dist/src/local-cli-process.js.map +1 -0
- package/dist/src/local-cli-timeout.js +14 -0
- package/dist/src/local-cli-timeout.js.map +1 -0
- package/dist/src/ollama-adapter.js +155 -0
- package/dist/src/ollama-adapter.js.map +1 -0
- package/dist/src/opencode-cli-adapter.js +57 -0
- package/dist/src/opencode-cli-adapter.js.map +1 -0
- package/dist/src/provider-circuit-breaker.js +52 -0
- package/dist/src/provider-circuit-breaker.js.map +1 -0
- package/dist/src/provider-registry.js +168 -0
- package/dist/src/provider-registry.js.map +1 -0
- package/dist/src/review-config.js +145 -0
- package/dist/src/review-config.js.map +1 -0
- package/doc-bridge.config.json +116 -0
- package/docs/OPERATIONS.md +358 -0
- package/docs/assets/agentskit-mark.svg +10 -0
- package/docs/assets/code-review-terminal.png +0 -0
- package/docs/continuous-improvement.md +35 -0
- package/docs/for-agents/code-review-cli.md +70 -0
- package/docs/for-agents/index.md +5 -0
- package/docs/plans/ecosystem-doc-quality-code-review.md +61 -0
- package/docs/provider-compatibility.json +35 -0
- package/ecosystem-claims.json +187 -0
- package/ecosystem.json +277 -0
- package/examples/pull-request.yml +29 -0
- package/llms-full.txt +1055 -0
- package/llms.txt +24 -0
- package/package.json +53 -7
- package/scripts/generate-llms-full.mjs +68 -0
- package/scripts/run-cycle-benchmark.mjs +64 -0
- package/test/cli-smoke.test.mjs +522 -0
- package/test/continuous-improvement.test.mjs +20 -0
- package/test/documentation.test.mjs +238 -0
- package/test/release-workflow.test.mjs +31 -0
- package/dist/agents/code-review/agent.d.ts +0 -115
- package/dist/agents/code-review/lenses.d.ts +0 -10
- package/dist/agents/code-review/reporters.d.ts +0 -31
- package/dist/agents/code-review/sources.d.ts +0 -27
- package/dist/src/claude-code-adapter.d.ts +0 -4
- package/dist/src/cli.d.ts +0 -2
- package/dist/src/codex-adapter.d.ts +0 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-circuit-breaker.js","sourceRoot":"","sources":["../../src/provider-circuit-breaker.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD;QACE,KAAK,CAAC,2DAA2D,CAAC,CAAA;QAClE,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAA;IACxC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IAKJ;IAAgC;IAJrD,QAAQ,GAAG,CAAC,CAAA;IACZ,QAAQ,GAAG,CAAC,CAAA;IACZ,OAAO,GAAG,KAAK,CAAA;IAEvB,YAA6B,YAAY,CAAC,EAAmB,aAAa,MAAM;QAAnD,cAAS,GAAT,SAAS,CAAI;QAAmB,eAAU,GAAV,UAAU,CAAS;IAAG,CAAC;IAEpF,IAAI,KAAK;QACP,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,QAAQ,CAAA;QACnC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU;YAAE,OAAO,MAAM,CAAA;QAC/D,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,UAAU;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,KAAK,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,wBAAwB,EAAE,CAAA;QACrG,IAAI,KAAK,KAAK,WAAW;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IAChD,CAAC;IAED,aAAa;QACX,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;QACjB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;QACjB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;IACtB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;QACjB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;QACjB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;IACtB,CAAC;IAED,aAAa,CAAC,SAAS,GAAG,KAAK;QAC7B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACpB,IAAI,CAAC,QAAQ,EAAE,CAAA;QACf,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC9E,CAAC;CACF"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import * as adapters from '@agentskit/adapters';
|
|
2
|
+
import { mkdtempSync, readFileSync, rmSync } from 'node:fs';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { runLocalCli } from './local-cli-process.js';
|
|
6
|
+
export const PROVIDER_REGISTRY_VERSION = 1;
|
|
7
|
+
const API_METADATA = {
|
|
8
|
+
anthropic: api('Anthropic', ['ANTHROPIC_API_KEY']),
|
|
9
|
+
openai: api('OpenAI', ['OPENAI_API_KEY']),
|
|
10
|
+
gemini: api('Google Gemini', ['GEMINI_API_KEY']),
|
|
11
|
+
grok: api('xAI Grok API', ['GROK_API_KEY']),
|
|
12
|
+
deepseek: api('DeepSeek', ['DEEPSEEK_API_KEY']),
|
|
13
|
+
mistral: api('Mistral', ['MISTRAL_API_KEY']),
|
|
14
|
+
groq: api('Groq', ['GROQ_API_KEY']),
|
|
15
|
+
openrouter: api('OpenRouter', ['OPENROUTER_API_KEY']),
|
|
16
|
+
together: api('Together AI', ['TOGETHER_API_KEY']),
|
|
17
|
+
};
|
|
18
|
+
const LOCAL_PROVIDERS = [
|
|
19
|
+
cli('codex-cli', 'OpenAI Codex CLI', 'codex', 'stable'),
|
|
20
|
+
cli('claude-cli', 'Claude Code CLI', 'claude', 'stable'),
|
|
21
|
+
{
|
|
22
|
+
...cli('grok-cli', 'Grok Build CLI', 'grok', 'stable'),
|
|
23
|
+
transports: ['acp', 'headless', 'auto'],
|
|
24
|
+
defaultTransport: 'acp',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
...cli('opencode-cli', 'OpenCode CLI', 'opencode', 'stable'),
|
|
28
|
+
transports: ['acp', 'headless', 'auto'],
|
|
29
|
+
defaultTransport: 'acp',
|
|
30
|
+
},
|
|
31
|
+
localServer('ollama', 'Ollama local model server', 'stable'),
|
|
32
|
+
];
|
|
33
|
+
const FACTORY_EXCLUSIONS = /(?:Adapter|Embedder)$|^(?:bail|chunkText|create|fetch|inMemorySink|mock|recording|replay|simulate|langchain|langgraph)/i;
|
|
34
|
+
const KNOWN_API_SUPPORT = new Set(Object.keys(API_METADATA));
|
|
35
|
+
function api(description, credentialEnv) {
|
|
36
|
+
return {
|
|
37
|
+
kind: 'api', support: 'stable', description, transports: ['api'], defaultTransport: 'api', model: 'required',
|
|
38
|
+
dataBoundary: 'remote', credentialEnv, credentialMode: 'api-key',
|
|
39
|
+
capabilities: { streaming: true, tools: true, structuredOutput: true },
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function cli(id, description, executable, support) {
|
|
43
|
+
return {
|
|
44
|
+
id, aliases: [], kind: 'cli', support, description, executable, versionArgs: ['--version'], minimumVersion: '0.1.0',
|
|
45
|
+
transports: ['headless'], defaultTransport: 'headless', model: 'optional', dataBoundary: 'local',
|
|
46
|
+
credentialEnv: [], credentialMode: 'login', capabilities: { streaming: false, tools: true, structuredOutput: true },
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function localServer(id, description, support) {
|
|
50
|
+
return {
|
|
51
|
+
id, aliases: [], kind: 'local-server', support, description,
|
|
52
|
+
transports: ['http'], defaultTransport: 'http', model: 'required', dataBoundary: 'local',
|
|
53
|
+
credentialEnv: [], credentialMode: 'none', capabilities: { streaming: true, tools: true, structuredOutput: true },
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export function discoverApiFactories(source = adapters) {
|
|
57
|
+
return Object.keys(source).filter((name) => typeof source[name] === 'function' && !FACTORY_EXCLUSIONS.test(name)).sort();
|
|
58
|
+
}
|
|
59
|
+
export function providerRegistry(source = adapters) {
|
|
60
|
+
const entries = new Map();
|
|
61
|
+
for (const entry of LOCAL_PROVIDERS)
|
|
62
|
+
entries.set(entry.id, entry);
|
|
63
|
+
for (const id of discoverApiFactories(source)) {
|
|
64
|
+
if (entries.has(id))
|
|
65
|
+
continue;
|
|
66
|
+
const metadata = API_METADATA[id] ?? {
|
|
67
|
+
...api(`${id} API adapter`, [`${id.toUpperCase()}_API_KEY`]),
|
|
68
|
+
support: KNOWN_API_SUPPORT.has(id) ? 'stable' : 'experimental',
|
|
69
|
+
};
|
|
70
|
+
entries.set(id, { id, aliases: id === 'anthropic' ? ['api'] : [], factoryName: id, ...metadata });
|
|
71
|
+
}
|
|
72
|
+
for (const [id, metadata] of Object.entries(API_METADATA)) {
|
|
73
|
+
if (!entries.has(id) && typeof source[id] === 'function')
|
|
74
|
+
entries.set(id, { id, aliases: id === 'anthropic' ? ['api'] : [], factoryName: id, ...metadata });
|
|
75
|
+
}
|
|
76
|
+
return [...entries.values()].sort((a, b) => a.id.localeCompare(b.id));
|
|
77
|
+
}
|
|
78
|
+
export function resolveProviderId(id, entries = providerRegistry()) {
|
|
79
|
+
const normalized = id.trim().toLowerCase();
|
|
80
|
+
return entries.find((entry) => entry.id.toLowerCase() === normalized || entry.aliases.some((alias) => alias.toLowerCase() === normalized))?.id;
|
|
81
|
+
}
|
|
82
|
+
export function providerEntry(id, entries = providerRegistry()) {
|
|
83
|
+
const resolved = resolveProviderId(id, entries);
|
|
84
|
+
return entries.find((entry) => entry.id === resolved);
|
|
85
|
+
}
|
|
86
|
+
const versionPattern = /(?:^|[^\d])v?(\d+)\.(\d+)\.(\d+)(?:[-+][0-9A-Za-z.-]+)?/m;
|
|
87
|
+
const VERSION_CHECK_TIMEOUT_MS = 5_000;
|
|
88
|
+
export function parseVersion(output) {
|
|
89
|
+
const match = output.match(versionPattern);
|
|
90
|
+
return match ? `${match[1]}.${match[2]}.${match[3]}` : undefined;
|
|
91
|
+
}
|
|
92
|
+
function compareVersions(left, right) {
|
|
93
|
+
const a = left.split('.').map(Number);
|
|
94
|
+
const b = right.split('.').map(Number);
|
|
95
|
+
return a[0] - b[0] || a[1] - b[1] || a[2] - b[2];
|
|
96
|
+
}
|
|
97
|
+
function checkVersion(entry, output, ci) {
|
|
98
|
+
const version = parseVersion(output);
|
|
99
|
+
if (!version)
|
|
100
|
+
return { name: 'version', status: ci ? 'fail' : 'warn', detail: ci ? 'unknown version (CI requires a recognized version)' : 'unknown version (local run allowed)' };
|
|
101
|
+
if (entry.minimumVersion && compareVersions(version, entry.minimumVersion) < 0)
|
|
102
|
+
return { name: 'version', status: 'fail', detail: `unsupported version ${version}` };
|
|
103
|
+
return { name: 'version', status: 'pass', detail: version };
|
|
104
|
+
}
|
|
105
|
+
export async function diagnoseProvider(options) {
|
|
106
|
+
const entries = options.entries ?? providerRegistry();
|
|
107
|
+
const entry = providerEntry(options.provider, entries);
|
|
108
|
+
if (!entry)
|
|
109
|
+
return { registryVersion: PROVIDER_REGISTRY_VERSION, schemaVersion: 1, provider: options.provider, support: 'unsupported', live: Boolean(options.live), ok: false, checks: [{ name: 'provider', status: 'fail', detail: 'unsupported provider' }] };
|
|
110
|
+
const env = options.env ?? process.env;
|
|
111
|
+
const ci = Boolean(options.ci || env.CI === 'true' || env.CI === '1');
|
|
112
|
+
const checks = [
|
|
113
|
+
{ name: 'support', status: entry.support === 'experimental' ? 'warn' : entry.support === 'unsupported' ? 'fail' : 'pass', detail: entry.support },
|
|
114
|
+
{ name: 'transport', status: options.transport && !entry.transports.includes(options.transport) ? 'fail' : 'pass', detail: options.transport ?? entry.defaultTransport },
|
|
115
|
+
{ name: 'model', status: entry.model === 'required' && !options.model ? 'fail' : 'pass', detail: entry.model === 'required' ? (options.model ? 'configured' : 'required') : entry.model },
|
|
116
|
+
];
|
|
117
|
+
const mode = options.mode ?? env.AGENTSKIT_REVIEW_MODE ?? 'isolated';
|
|
118
|
+
checks.push({ name: 'configuration', status: mode === 'trusted-local' && (ci || entry.kind === 'api') ? 'fail' : ['isolated', 'trusted-local'].includes(mode) ? 'pass' : 'fail', detail: mode });
|
|
119
|
+
const credentialPresent = Boolean(options.apiKey || env.LLM_API_KEY || entry.credentialEnv.some((name) => Boolean(env[name])));
|
|
120
|
+
checks.push({
|
|
121
|
+
name: 'credentials',
|
|
122
|
+
status: entry.credentialMode === 'api-key' ? (credentialPresent ? 'pass' : 'fail') : 'pass',
|
|
123
|
+
detail: entry.credentialMode === 'api-key' ? (credentialPresent ? 'configured' : 'missing') : entry.credentialMode === 'login' ? 'login-managed (not inspected offline)' : 'not required',
|
|
124
|
+
});
|
|
125
|
+
if (entry.executable) {
|
|
126
|
+
try {
|
|
127
|
+
const result = await runLocalCli(entry.executable, [...(entry.versionArgs ?? ['--version'])], { timeoutMs: VERSION_CHECK_TIMEOUT_MS });
|
|
128
|
+
checks.push({ name: 'executable', status: 'pass', detail: entry.executable });
|
|
129
|
+
checks.push(checkVersion(entry, `${result.stdout}\n${result.stderr}`, ci));
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
const e = error;
|
|
133
|
+
checks.push({ name: 'executable', status: 'fail', detail: e.code === 'ENOENT' ? 'not found' : e.code === 'ETIMEDOUT' ? 'timed out' : 'unavailable' });
|
|
134
|
+
if (e.code === 'ETIMEDOUT')
|
|
135
|
+
checks.push({ name: 'version', status: 'fail', detail: e.message?.startsWith(entry.executable) ? e.message : 'version check timed out' });
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
checks.push({ name: 'executable', status: 'skip', detail: 'API provider' });
|
|
140
|
+
checks.push({ name: 'version', status: 'skip', detail: 'API provider' });
|
|
141
|
+
}
|
|
142
|
+
if (options.live && entry.id === 'codex-cli') {
|
|
143
|
+
const liveTimeoutMs = Math.min(options.liveTimeoutMs ?? 15_000, 15_000);
|
|
144
|
+
const probeDir = mkdtempSync(join(tmpdir(), 'agentskit-review-health-'));
|
|
145
|
+
try {
|
|
146
|
+
const result = await runLocalCli('codex', ['exec', '--skip-git-repo-check', '-s', 'read-only', '-o', join(probeDir, 'out.txt'), 'Reply with exactly OK.'], {
|
|
147
|
+
mode: mode, timeoutMs: liveTimeoutMs, maxOutputBytes: 4096,
|
|
148
|
+
});
|
|
149
|
+
const output = readFileSync(join(probeDir, 'out.txt'), 'utf8');
|
|
150
|
+
checks.push({ name: 'live', status: /ok/i.test(`${output}\n${result.stdout}\n${result.stderr}`) ? 'pass' : 'fail', detail: /ok/i.test(output) ? 'provider smoke test completed' : 'provider returned no OK response' });
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
const e = error;
|
|
154
|
+
checks.push({ name: 'live', status: 'fail', detail: e.code === 'ETIMEDOUT' ? `smoke test timed out after ${liveTimeoutMs}ms` : 'provider smoke test failed' });
|
|
155
|
+
}
|
|
156
|
+
finally {
|
|
157
|
+
rmSync(probeDir, { recursive: true, force: true });
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else if (options.live)
|
|
161
|
+
checks.push({ name: 'live', status: 'skip', detail: 'provider smoke test is provider-specific' });
|
|
162
|
+
return { registryVersion: PROVIDER_REGISTRY_VERSION, schemaVersion: 1, provider: entry.id, support: entry.support, live: Boolean(options.live), ok: !checks.some((check) => check.status === 'fail'), checks };
|
|
163
|
+
}
|
|
164
|
+
export function factoryFor(entry) {
|
|
165
|
+
const factory = entry.factoryName ? adapters[entry.factoryName] : undefined;
|
|
166
|
+
return typeof factory === 'function' ? factory : undefined;
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=provider-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-registry.js","sourceRoot":"","sources":["../../src/provider-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { ABSOLUTE_LOCAL_CLI_OUTPUT_BYTES, ABSOLUTE_LOCAL_CLI_TIMEOUT_MS, DEFAULT_LOCAL_CLI_OUTPUT_BYTES } from './local-cli-process.js';
|
|
5
|
+
import { DEFAULT_CODEX_CLI_TIMEOUT_MS, localCliTimeoutMs } from './local-cli-timeout.js';
|
|
6
|
+
export const BUILTIN_LENS_KEYS = [
|
|
7
|
+
'correctness', 'security', 'performance', 'maintainability', 'design', 'tests', 'conventions',
|
|
8
|
+
];
|
|
9
|
+
const lensPolicy = z.object({ enabled: z.boolean(), required: z.boolean() }).strict();
|
|
10
|
+
const lensOverrides = z.object({
|
|
11
|
+
correctness: lensPolicy.optional(), security: lensPolicy.optional(), performance: lensPolicy.optional(),
|
|
12
|
+
maintainability: lensPolicy.optional(), design: lensPolicy.optional(), tests: lensPolicy.optional(),
|
|
13
|
+
conventions: lensPolicy.optional(),
|
|
14
|
+
}).strict();
|
|
15
|
+
const positiveInt = z.number().int().min(1);
|
|
16
|
+
const nonNegativeInt = z.number().int().min(0);
|
|
17
|
+
const relativePattern = z.string().min(1).refine((pattern) => !pattern.startsWith('/') && !pattern.startsWith('\\') && !/^[A-Za-z]:[\\/]/.test(pattern) && !pattern.split('/').includes('..'), 'must be a repository-relative pattern without .. traversal');
|
|
18
|
+
const ReviewConfigSchema = z.object({
|
|
19
|
+
configVersion: z.literal(1),
|
|
20
|
+
profile: z.enum(['full', 'fast']).optional(),
|
|
21
|
+
lenses: lensOverrides.optional(),
|
|
22
|
+
incompleteProfile: z.boolean().optional(),
|
|
23
|
+
votes: positiveInt.max(25).optional(),
|
|
24
|
+
retries: nonNegativeInt.max(1).optional(),
|
|
25
|
+
thresholds: z.object({
|
|
26
|
+
minSeverity: z.enum(['blocker', 'high', 'med', 'nit']).optional(),
|
|
27
|
+
minConfidence: z.number().min(0).max(1).optional(),
|
|
28
|
+
maxPerFile: positiveInt.optional(),
|
|
29
|
+
suppressNits: z.boolean().optional(),
|
|
30
|
+
}).strict().optional(),
|
|
31
|
+
budget: z.object({
|
|
32
|
+
maxFiles: positiveInt.max(500).optional(), maxBytes: positiveInt.max(25 * 1024 * 1024).optional(),
|
|
33
|
+
maxCalls: positiveInt.max(1000).optional(), concurrency: positiveInt.max(32).optional(), deadlineMs: positiveInt.max(30 * 60 * 1000).optional(),
|
|
34
|
+
}).strict().optional(),
|
|
35
|
+
worker: z.object({
|
|
36
|
+
timeoutMs: positiveInt.max(ABSOLUTE_LOCAL_CLI_TIMEOUT_MS).optional(),
|
|
37
|
+
maxOutputBytes: positiveInt.max(ABSOLUTE_LOCAL_CLI_OUTPUT_BYTES).optional(),
|
|
38
|
+
}).strict().optional(),
|
|
39
|
+
conventions: relativePattern.optional(),
|
|
40
|
+
context: z.object({ mode: z.enum(['prompt', 'isolated-snapshot']), patterns: z.array(relativePattern).max(100).optional() }).strict().optional(),
|
|
41
|
+
provider: z.string().min(1).max(100).optional(), model: z.string().min(1).max(200).optional(),
|
|
42
|
+
transport: z.enum(['api', 'acp', 'headless', 'auto', 'http']).optional(),
|
|
43
|
+
healthCheck: z.enum(['auto', 'off']).optional(),
|
|
44
|
+
trustMode: z.enum(['isolated', 'trusted-local']).optional(),
|
|
45
|
+
redaction: z.enum(['required', 'high-confidence']).optional(),
|
|
46
|
+
permissions: z.object({ tools: z.boolean().optional(), write: z.boolean().optional(), shell: z.boolean().optional(), mcp: z.boolean().optional() }).strict().optional(),
|
|
47
|
+
}).strict();
|
|
48
|
+
export class ReviewConfigError extends Error {
|
|
49
|
+
constructor(message) { super(message); this.name = 'ReviewConfigError'; }
|
|
50
|
+
}
|
|
51
|
+
const DEFAULT_LENSES = {
|
|
52
|
+
correctness: { enabled: true, required: true }, security: { enabled: true, required: true },
|
|
53
|
+
performance: { enabled: true, required: false }, maintainability: { enabled: true, required: false },
|
|
54
|
+
design: { enabled: true, required: false }, tests: { enabled: true, required: true }, conventions: { enabled: true, required: false },
|
|
55
|
+
};
|
|
56
|
+
const TRUSTED_ONLY_KEYS = ['provider', 'model', 'transport', 'context', 'trustMode', 'redaction', 'permissions'];
|
|
57
|
+
function diagnostic(error) {
|
|
58
|
+
return error.issues.map((issue) => {
|
|
59
|
+
const path = issue.path.join('.') || 'config';
|
|
60
|
+
const label = path === 'budget.maxFiles' ? '--max-files' : path;
|
|
61
|
+
const message = label === '--max-files' && issue.message.includes('greater than or equal to 1') ? 'must be a positive integer' : issue.message;
|
|
62
|
+
return label === '--max-files' ? `${label} ${message}` : `${label}: ${message}`;
|
|
63
|
+
}).join('; ');
|
|
64
|
+
}
|
|
65
|
+
function parseFile(raw) {
|
|
66
|
+
const result = ReviewConfigSchema.safeParse(raw);
|
|
67
|
+
if (!result.success)
|
|
68
|
+
throw new ReviewConfigError(`invalid .agentskit-review.json: ${diagnostic(result.error)}`);
|
|
69
|
+
return result.data;
|
|
70
|
+
}
|
|
71
|
+
export function resolveReviewConfig(fileConfig, options = {}) {
|
|
72
|
+
const file = fileConfig === undefined ? undefined : parseFile(fileConfig);
|
|
73
|
+
const overrides = options.overrides ?? {};
|
|
74
|
+
if (file) {
|
|
75
|
+
const restricted = TRUSTED_ONLY_KEYS.filter((key) => key !== 'context' || file.context?.mode !== 'isolated-snapshot').filter((key) => file[key] !== undefined);
|
|
76
|
+
if (options.ci && restricted.length)
|
|
77
|
+
throw new ReviewConfigError(`project config cannot set trusted execution inputs in CI: ${restricted.join(', ')}`);
|
|
78
|
+
if (file.trustMode === 'trusted-local')
|
|
79
|
+
throw new ReviewConfigError('project config cannot enable trusted-local mode; use an explicit trusted CLI invocation');
|
|
80
|
+
if (file.context?.mode === 'isolated-snapshot' && !file.context.patterns?.length)
|
|
81
|
+
throw new ReviewConfigError('isolated-snapshot requires at least one context pattern');
|
|
82
|
+
}
|
|
83
|
+
const profile = overrides.profile ?? file?.profile ?? 'full';
|
|
84
|
+
const configuredLenses = Object.fromEntries(BUILTIN_LENS_KEYS.map((key) => [key, { ...DEFAULT_LENSES[key], ...(file?.lenses?.[key] ?? {}) }]));
|
|
85
|
+
const lenses = profile === 'fast'
|
|
86
|
+
? Object.fromEntries(BUILTIN_LENS_KEYS.map((key) => [key, { ...configuredLenses[key], enabled: configuredLenses[key].required }]))
|
|
87
|
+
: configuredLenses;
|
|
88
|
+
const impossibleRequired = BUILTIN_LENS_KEYS.filter((key) => lenses[key].required && !lenses[key].enabled);
|
|
89
|
+
if (impossibleRequired.length && !file?.incompleteProfile)
|
|
90
|
+
throw new ReviewConfigError(`required lens cannot be disabled without incompleteProfile: ${impossibleRequired.join(', ')}`);
|
|
91
|
+
const incompleteProfile = Boolean(file?.incompleteProfile || impossibleRequired.length);
|
|
92
|
+
if (options.ci && (incompleteProfile || options.allowIncomplete))
|
|
93
|
+
throw new ReviewConfigError('--allow-incomplete and incomplete profiles are local-only; CI cannot approve an incomplete review');
|
|
94
|
+
if (options.ci && options.allowUnredacted)
|
|
95
|
+
throw new ReviewConfigError('--allow-unredacted is local-only and cannot disable CI redaction');
|
|
96
|
+
if (incompleteProfile && !options.allowIncomplete)
|
|
97
|
+
throw new ReviewConfigError('incomplete profile requires explicit --allow-incomplete for a local run');
|
|
98
|
+
const thresholds = { ...file?.thresholds, ...(profile === 'fast' && file?.thresholds?.maxPerFile === undefined && overrides.maxPerFile === undefined ? { maxPerFile: 1 } : {}), ...(overrides.minSeverity === undefined ? {} : { minSeverity: overrides.minSeverity }), ...(overrides.minConfidence === undefined ? {} : { minConfidence: overrides.minConfidence }), ...(overrides.maxPerFile === undefined ? {} : { maxPerFile: overrides.maxPerFile }) };
|
|
99
|
+
const budget = {
|
|
100
|
+
...file?.budget,
|
|
101
|
+
...(overrides.maxFiles === undefined ? {} : { maxFiles: overrides.maxFiles }),
|
|
102
|
+
...(overrides.maxCalls === undefined ? {} : { maxCalls: overrides.maxCalls }),
|
|
103
|
+
...(overrides.concurrency === undefined ? {} : { concurrency: overrides.concurrency }),
|
|
104
|
+
...(overrides.deadlineMs === undefined ? {} : { deadlineMs: overrides.deadlineMs }),
|
|
105
|
+
};
|
|
106
|
+
const provider = overrides.provider ?? file?.provider;
|
|
107
|
+
const defaultConcurrency = profile === 'fast' ? (provider?.endsWith('-cli') ? 1 : 2) : provider?.endsWith('-cli') ? 1 : 4;
|
|
108
|
+
const defaultDeadlineMs = profile === 'fast' ? 120_000 : 10 * 60 * 1000;
|
|
109
|
+
const effective = {
|
|
110
|
+
configVersion: 1, profile, batchLenses: profile === 'fast', lenses, incompleteProfile,
|
|
111
|
+
votes: overrides.votes ?? file?.votes ?? (profile === 'fast' ? 1 : 3), retries: overrides.retries ?? file?.retries ?? (profile === 'fast' ? 0 : 1),
|
|
112
|
+
thresholds, budget: { ...budget, concurrency: budget.concurrency ?? defaultConcurrency, maxCalls: budget.maxCalls ?? 1000, deadlineMs: budget.deadlineMs ?? defaultDeadlineMs },
|
|
113
|
+
worker: { timeoutMs: file?.worker?.timeoutMs ?? localCliTimeoutMs(provider === 'codex-cli' ? DEFAULT_CODEX_CLI_TIMEOUT_MS : undefined), maxOutputBytes: file?.worker?.maxOutputBytes ?? DEFAULT_LOCAL_CLI_OUTPUT_BYTES },
|
|
114
|
+
conventions: overrides.conventions ?? file?.conventions,
|
|
115
|
+
context: { mode: file?.context?.mode ?? 'prompt', patterns: file?.context?.patterns ?? [] },
|
|
116
|
+
allowUnredacted: Boolean(options.allowUnredacted),
|
|
117
|
+
provider: overrides.provider ?? file?.provider, model: overrides.model ?? file?.model,
|
|
118
|
+
transport: (overrides.transport ?? file?.transport),
|
|
119
|
+
healthCheck: overrides.healthCheck ?? file?.healthCheck ?? 'auto',
|
|
120
|
+
trustMode: 'isolated', redaction: file?.redaction ?? 'required', permissions: file?.permissions ?? {},
|
|
121
|
+
};
|
|
122
|
+
const validation = z.object({
|
|
123
|
+
profile: z.enum(['full', 'fast']), healthCheck: z.enum(['auto', 'off']),
|
|
124
|
+
votes: positiveInt.max(25), retries: nonNegativeInt.max(1),
|
|
125
|
+
thresholds: z.object({ minSeverity: z.enum(['blocker', 'high', 'med', 'nit']).optional(), minConfidence: z.number().min(0).max(1).optional(), maxPerFile: positiveInt.optional() }),
|
|
126
|
+
budget: z.object({ maxFiles: positiveInt.max(500).optional(), maxBytes: positiveInt.max(25 * 1024 * 1024).optional(), maxCalls: positiveInt.max(1000), concurrency: positiveInt.max(32), deadlineMs: positiveInt.max(30 * 60 * 1000) }),
|
|
127
|
+
}).safeParse(effective);
|
|
128
|
+
if (!validation.success)
|
|
129
|
+
throw new ReviewConfigError(`invalid effective review config: ${diagnostic(validation.error)}`);
|
|
130
|
+
return effective;
|
|
131
|
+
}
|
|
132
|
+
export function loadReviewConfig(cwd, options = {}) {
|
|
133
|
+
const file = join(cwd, '.agentskit-review.json');
|
|
134
|
+
if (!existsSync(file))
|
|
135
|
+
return resolveReviewConfig(undefined, options);
|
|
136
|
+
let raw;
|
|
137
|
+
try {
|
|
138
|
+
raw = JSON.parse(readFileSync(file, 'utf8'));
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
throw new ReviewConfigError(`invalid ${file}: expected valid JSON`);
|
|
142
|
+
}
|
|
143
|
+
return resolveReviewConfig(raw, options);
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=review-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-config.js","sourceRoot":"","sources":["../../src/review-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"project": {
|
|
4
|
+
"name": "AgentsKit Code Review"
|
|
5
|
+
},
|
|
6
|
+
"corpus": {
|
|
7
|
+
"agent": {
|
|
8
|
+
"root": "docs/for-agents",
|
|
9
|
+
"index": "docs/for-agents/index.md",
|
|
10
|
+
"include": ["**/*.md"]
|
|
11
|
+
},
|
|
12
|
+
"human": {
|
|
13
|
+
"plugin": "plain-markdown",
|
|
14
|
+
"options": {
|
|
15
|
+
"root": "docs",
|
|
16
|
+
"urlPrefix": null
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"routing": {
|
|
21
|
+
"options": {
|
|
22
|
+
"ownership": {
|
|
23
|
+
"code-review-cli": {
|
|
24
|
+
"path": ".",
|
|
25
|
+
"purpose": "Provider-neutral local and GitHub code review CLI, Action, reporters, and repository documentation.",
|
|
26
|
+
"checks": ["npm run check", "npm pack --dry-run"],
|
|
27
|
+
"agentDoc": "docs/for-agents/code-review-cli.md",
|
|
28
|
+
"humanDoc": "OPERATIONS"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"intents": [
|
|
32
|
+
{
|
|
33
|
+
"id": "understand-or-run-code-review",
|
|
34
|
+
"title": "Understand or run Code Review",
|
|
35
|
+
"paths": ["README.md", "docs/OPERATIONS.md"]
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"changes": [
|
|
39
|
+
{
|
|
40
|
+
"id": "change-cli-provider-or-action",
|
|
41
|
+
"title": "Change a CLI provider, flag, reporter, or Action input",
|
|
42
|
+
"startHere": "docs/for-agents/code-review-cli.md"
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"index": {
|
|
48
|
+
"outFile": ".doc-bridge/index.json",
|
|
49
|
+
"llmsTxt": {
|
|
50
|
+
"enabled": true,
|
|
51
|
+
"outFile": "llms.txt",
|
|
52
|
+
"preamble": "AgentsKit Code Review is a pre-v1 provider-neutral CLI and GitHub Action for low-noise review using seven lenses and adversarial verification. It intentionally has no Fumadocs site or embedded chat.\n\n## Documentation surfaces\n\n- Full corpus: llms-full.txt\n- Public README: https://github.com/AgentsKit-io/code-review#readme\n- Operations: docs/OPERATIONS.md\n- For agents: docs/for-agents/index.md\n- Raw sources: https://raw.githubusercontent.com/AgentsKit-io/code-review/main/\n\n## AgentsKit ecosystem\n\n- AgentsKit: https://www.agentskit.io/docs\n- Registry: https://registry.agentskit.io/docs\n- AgentsKit Chat: https://chat.agentskit.io/docs\n- Playbook: https://playbook.agentskit.io/docs\n- Doc Bridge: https://agentskit-io.github.io/doc-bridge/\n- Code Review: https://github.com/AgentsKit-io/code-review#readme\n- AKOS: https://akos.agentskit.io/docs"
|
|
53
|
+
},
|
|
54
|
+
"capabilities": {
|
|
55
|
+
"enabled": true,
|
|
56
|
+
"outFile": ".doc-bridge/capabilities.json"
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"conformance": {
|
|
60
|
+
"documentationStandardV1": {
|
|
61
|
+
"rawSources": [
|
|
62
|
+
"README.md",
|
|
63
|
+
"docs/OPERATIONS.md",
|
|
64
|
+
"docs/for-agents/code-review-cli.md"
|
|
65
|
+
],
|
|
66
|
+
"contributionPaths": ["CONTRIBUTING.md"],
|
|
67
|
+
"metadata": [
|
|
68
|
+
{
|
|
69
|
+
"path": "README.md",
|
|
70
|
+
"contains": ["# AgentsKit Code Review", "Deep, low-noise AI code review"]
|
|
71
|
+
}
|
|
72
|
+
],
|
|
73
|
+
"links": [
|
|
74
|
+
{ "url": "https://www.agentskit.io", "paths": ["README.md"] },
|
|
75
|
+
{ "url": "https://registry.agentskit.io/docs", "paths": ["README.md"] },
|
|
76
|
+
{ "url": "https://chat.agentskit.io/docs", "paths": ["README.md"] },
|
|
77
|
+
{ "url": "https://playbook.agentskit.io/docs", "paths": ["README.md"] },
|
|
78
|
+
{ "url": "https://agentskit-io.github.io/doc-bridge/", "paths": ["README.md"] },
|
|
79
|
+
{ "url": "https://akos.agentskit.io/docs", "paths": ["README.md"] }
|
|
80
|
+
],
|
|
81
|
+
"ecosystemContract": {
|
|
82
|
+
"manifest": "ecosystem.json",
|
|
83
|
+
"claims": "ecosystem-claims.json",
|
|
84
|
+
"productId": "code-review"
|
|
85
|
+
},
|
|
86
|
+
"quickstarts": [
|
|
87
|
+
{
|
|
88
|
+
"id": "first-review",
|
|
89
|
+
"doc": "README.md",
|
|
90
|
+
"test": "test/cli-smoke.test.mjs",
|
|
91
|
+
"command": "npm run build && node --test test/cli-smoke.test.mjs",
|
|
92
|
+
"testContains": ["a clean local Codex CLI fixture completes an offline stdin review"]
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
"visuals": ["docs/assets/agentskit-mark.svg"],
|
|
96
|
+
"diagrams": [
|
|
97
|
+
{ "path": "README.md", "contains": ["```mermaid"] }
|
|
98
|
+
],
|
|
99
|
+
"exceptions": []
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"gates": {
|
|
103
|
+
"preset": "standard",
|
|
104
|
+
"include": ["documentation-standard-v1"]
|
|
105
|
+
},
|
|
106
|
+
"surfaces": {
|
|
107
|
+
"cli": {
|
|
108
|
+
"bin": "ak-docs",
|
|
109
|
+
"defaultFormat": "text"
|
|
110
|
+
},
|
|
111
|
+
"mcp": {
|
|
112
|
+
"enabled": true,
|
|
113
|
+
"transport": "stdio"
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|