sieveai 0.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/LICENSE +21 -0
- package/README.md +164 -0
- package/dist/agents/base-agent.d.ts +14 -0
- package/dist/agents/base-agent.d.ts.map +1 -0
- package/dist/agents/base-agent.js +114 -0
- package/dist/agents/base-agent.js.map +1 -0
- package/dist/agents/bug-agent.d.ts +6 -0
- package/dist/agents/bug-agent.d.ts.map +1 -0
- package/dist/agents/bug-agent.js +6 -0
- package/dist/agents/bug-agent.js.map +1 -0
- package/dist/agents/security-agent.d.ts +6 -0
- package/dist/agents/security-agent.d.ts.map +1 -0
- package/dist/agents/security-agent.js +6 -0
- package/dist/agents/security-agent.js.map +1 -0
- package/dist/agents/style-agent.d.ts +6 -0
- package/dist/agents/style-agent.d.ts.map +1 -0
- package/dist/agents/style-agent.js +6 -0
- package/dist/agents/style-agent.js.map +1 -0
- package/dist/cache/database.d.ts +26 -0
- package/dist/cache/database.d.ts.map +1 -0
- package/dist/cache/database.js +199 -0
- package/dist/cache/database.js.map +1 -0
- package/dist/cache/manager.d.ts +27 -0
- package/dist/cache/manager.d.ts.map +1 -0
- package/dist/cache/manager.js +105 -0
- package/dist/cache/manager.js.map +1 -0
- package/dist/cli/commands/check.d.ts +14 -0
- package/dist/cli/commands/check.d.ts.map +1 -0
- package/dist/cli/commands/check.js +73 -0
- package/dist/cli/commands/check.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +23 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/defaults.d.ts +3 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +18 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/loader.d.ts +11 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +78 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +67 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +34 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/git/diff-parser.d.ts +22 -0
- package/dist/git/diff-parser.d.ts.map +1 -0
- package/dist/git/diff-parser.js +151 -0
- package/dist/git/diff-parser.js.map +1 -0
- package/dist/git/repository.d.ts +28 -0
- package/dist/git/repository.d.ts.map +1 -0
- package/dist/git/repository.js +155 -0
- package/dist/git/repository.js.map +1 -0
- package/dist/llm/client.d.ts +27 -0
- package/dist/llm/client.d.ts.map +1 -0
- package/dist/llm/client.js +90 -0
- package/dist/llm/client.js.map +1 -0
- package/dist/llm/prompts.d.ts +14 -0
- package/dist/llm/prompts.d.ts.map +1 -0
- package/dist/llm/prompts.js +110 -0
- package/dist/llm/prompts.js.map +1 -0
- package/dist/llm/providers/ollama.d.ts +17 -0
- package/dist/llm/providers/ollama.d.ts.map +1 -0
- package/dist/llm/providers/ollama.js +165 -0
- package/dist/llm/providers/ollama.js.map +1 -0
- package/dist/orchestrator/orchestrator.d.ts +20 -0
- package/dist/orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator.js +164 -0
- package/dist/orchestrator/orchestrator.js.map +1 -0
- package/dist/reporters/json-reporter.d.ts +3 -0
- package/dist/reporters/json-reporter.d.ts.map +1 -0
- package/dist/reporters/json-reporter.js +4 -0
- package/dist/reporters/json-reporter.js.map +1 -0
- package/dist/reporters/text-reporter.d.ts +6 -0
- package/dist/reporters/text-reporter.d.ts.map +1 -0
- package/dist/reporters/text-reporter.js +129 -0
- package/dist/reporters/text-reporter.js.map +1 -0
- package/dist/static/secrets.d.ts +3 -0
- package/dist/static/secrets.d.ts.map +1 -0
- package/dist/static/secrets.js +106 -0
- package/dist/static/secrets.js.map +1 -0
- package/dist/types/index.d.ts +155 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +36 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/errors.d.ts +13 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +61 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/hash.d.ts +5 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +18 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +64 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +21 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +53 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/cache/manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAwB,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAQvF,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAA8B;IACxC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,mBAAmB;IAelC,GAAG,CACP,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC;IAgC5B,GAAG,CACP,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,aAAa,EAAE,GACxB,OAAO,CAAC,IAAI,CAAC;IAuBV,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAWxB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAW1B,QAAQ,IAAI,OAAO,CAAC;QACxB,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAqBF,KAAK,IAAI,IAAI;IAUP,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAahC;AAKD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAE7E"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { CacheDatabase } from './database.js';
|
|
2
|
+
import { createLogger } from '../utils/logger.js';
|
|
3
|
+
const logger = createLogger('cache:manager');
|
|
4
|
+
const AGENT_VERSION = '0.1.0';
|
|
5
|
+
export class CacheManager {
|
|
6
|
+
db = null;
|
|
7
|
+
enabled;
|
|
8
|
+
maxAgeMs;
|
|
9
|
+
constructor(options) {
|
|
10
|
+
this.enabled = options.enabled;
|
|
11
|
+
this.maxAgeMs = options.maxAgeMs ?? 30 * 24 * 60 * 60 * 1000;
|
|
12
|
+
if (this.enabled) {
|
|
13
|
+
this.db = new CacheDatabase({ path: options.dbPath });
|
|
14
|
+
logger.debug('Cache manager initialized');
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
logger.debug('Cache disabled');
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async get(commitSha, file) {
|
|
21
|
+
if (!this.enabled || !this.db) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
const key = {
|
|
25
|
+
commitSha,
|
|
26
|
+
filePath: file.path,
|
|
27
|
+
contentHash: file.hash,
|
|
28
|
+
};
|
|
29
|
+
const entry = this.db.get(key);
|
|
30
|
+
if (!entry) {
|
|
31
|
+
logger.debug('Cache miss:', file.path);
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
if (entry.agentVersion !== AGENT_VERSION) {
|
|
35
|
+
logger.debug('Cache invalidated (agent version changed):', file.path);
|
|
36
|
+
this.db.delete(key);
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
logger.debug('Cache hit:', file.path);
|
|
40
|
+
return entry.findings;
|
|
41
|
+
}
|
|
42
|
+
async set(commitSha, file, findings) {
|
|
43
|
+
if (!this.enabled || !this.db) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const entry = {
|
|
47
|
+
key: {
|
|
48
|
+
commitSha,
|
|
49
|
+
filePath: file.path,
|
|
50
|
+
contentHash: file.hash,
|
|
51
|
+
},
|
|
52
|
+
findings,
|
|
53
|
+
createdAt: Date.now(),
|
|
54
|
+
agentVersion: AGENT_VERSION,
|
|
55
|
+
};
|
|
56
|
+
this.db.set(entry);
|
|
57
|
+
logger.debug('Cache stored:', file.path);
|
|
58
|
+
}
|
|
59
|
+
async clear() {
|
|
60
|
+
if (!this.enabled || !this.db) {
|
|
61
|
+
return 0;
|
|
62
|
+
}
|
|
63
|
+
return this.db.clear();
|
|
64
|
+
}
|
|
65
|
+
async cleanup() {
|
|
66
|
+
if (!this.enabled || !this.db) {
|
|
67
|
+
return 0;
|
|
68
|
+
}
|
|
69
|
+
return this.db.deleteOlderThan(this.maxAgeMs);
|
|
70
|
+
}
|
|
71
|
+
async getStats() {
|
|
72
|
+
if (!this.enabled || !this.db) {
|
|
73
|
+
return {
|
|
74
|
+
enabled: false,
|
|
75
|
+
totalEntries: 0,
|
|
76
|
+
oldestEntry: null,
|
|
77
|
+
newestEntry: null,
|
|
78
|
+
totalSize: 0,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
const stats = this.db.getStats();
|
|
82
|
+
return {
|
|
83
|
+
enabled: true,
|
|
84
|
+
...stats,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
close() {
|
|
88
|
+
if (this.db) {
|
|
89
|
+
this.db.close();
|
|
90
|
+
this.db = null;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async optimize() {
|
|
94
|
+
if (!this.enabled || !this.db) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
await this.cleanup();
|
|
98
|
+
this.db.vacuum();
|
|
99
|
+
logger.info('Cache optimized');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
export function createCacheManager(options) {
|
|
103
|
+
return new CacheManager(options);
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/cache/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface CheckOptions {
|
|
2
|
+
model?: string;
|
|
3
|
+
minConfidence?: string;
|
|
4
|
+
format?: string;
|
|
5
|
+
cache?: boolean;
|
|
6
|
+
parallel?: boolean;
|
|
7
|
+
verbose?: boolean;
|
|
8
|
+
base?: string;
|
|
9
|
+
target?: string;
|
|
10
|
+
config?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function checkCommand(options: CheckOptions): Promise<void>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AAcA,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFvE"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { createLogger } from '../../utils/logger.js';
|
|
2
|
+
import { loadConfig } from '../../config/loader.js';
|
|
3
|
+
import { createGitRepository } from '../../git/repository.js';
|
|
4
|
+
import { ReviewOrchestrator } from '../../orchestrator/orchestrator.js';
|
|
5
|
+
import { formatTextReport } from '../../reporters/text-reporter.js';
|
|
6
|
+
import { formatJsonReport } from '../../reporters/json-reporter.js';
|
|
7
|
+
import ora from 'ora';
|
|
8
|
+
const logger = createLogger('cli:check');
|
|
9
|
+
export async function checkCommand(options) {
|
|
10
|
+
const spinner = ora('Initializing...').start();
|
|
11
|
+
try {
|
|
12
|
+
const config = await loadConfig({
|
|
13
|
+
configPath: options.config,
|
|
14
|
+
overrides: {
|
|
15
|
+
model: options.model,
|
|
16
|
+
minConfidence: options.minConfidence ? Number.parseInt(options.minConfidence, 10) : undefined,
|
|
17
|
+
format: options.format,
|
|
18
|
+
enableCache: options.cache,
|
|
19
|
+
parallel: options.parallel,
|
|
20
|
+
verbose: options.verbose,
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
spinner.text = 'Checking git repository...';
|
|
24
|
+
const git = createGitRepository(config.workingDir);
|
|
25
|
+
const isRepo = await git.isRepository();
|
|
26
|
+
if (!isRepo) {
|
|
27
|
+
spinner.fail('Not a git repository');
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
const commitSha = await git.getCurrentCommit();
|
|
31
|
+
const branch = await git.getCurrentBranch();
|
|
32
|
+
spinner.text = 'Getting diff...';
|
|
33
|
+
const diff = await git.getDiff({
|
|
34
|
+
base: options.base,
|
|
35
|
+
target: options.target,
|
|
36
|
+
});
|
|
37
|
+
if (diff.length === 0) {
|
|
38
|
+
spinner.succeed('No changes to review');
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
spinner.succeed(`Found changes in ${diff.length} files`);
|
|
42
|
+
spinner.start('Running code review...');
|
|
43
|
+
const orchestrator = new ReviewOrchestrator({
|
|
44
|
+
config,
|
|
45
|
+
commitSha,
|
|
46
|
+
branch,
|
|
47
|
+
});
|
|
48
|
+
const report = await orchestrator.review(diff);
|
|
49
|
+
orchestrator.close();
|
|
50
|
+
spinner.succeed('Review complete');
|
|
51
|
+
console.log('');
|
|
52
|
+
if (config.format === 'json') {
|
|
53
|
+
console.log(formatJsonReport(report));
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.log(formatTextReport(report, {
|
|
57
|
+
verbose: config.verbose,
|
|
58
|
+
showRationale: config.showRationale,
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
const hasHighSeverity = report.summary.bySeverity.critical > 0 ||
|
|
62
|
+
report.summary.bySeverity.high > 0;
|
|
63
|
+
if (hasHighSeverity) {
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
spinner.fail('Review failed');
|
|
69
|
+
logger.error('Error:', error);
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { checkCommand } from './commands/check.js';
|
|
4
|
+
const program = new Command();
|
|
5
|
+
program
|
|
6
|
+
.name('sieveai')
|
|
7
|
+
.description('Local-first AI code review CLI with hybrid static+AI analysis')
|
|
8
|
+
.version('0.1.0');
|
|
9
|
+
program
|
|
10
|
+
.command('check')
|
|
11
|
+
.description('Run code review on git diff')
|
|
12
|
+
.option('--model <model>', 'LLM model to use (format: provider:model)', 'ollama:glm-4.7')
|
|
13
|
+
.option('--min-confidence <number>', 'Minimum confidence threshold (0-100)', '78')
|
|
14
|
+
.option('--format <format>', 'Output format (text, json, tui)', 'text')
|
|
15
|
+
.option('--no-cache', 'Disable caching')
|
|
16
|
+
.option('--no-parallel', 'Disable parallel agent execution')
|
|
17
|
+
.option('--verbose', 'Enable verbose logging')
|
|
18
|
+
.option('--base <ref>', 'Base git ref to compare against')
|
|
19
|
+
.option('--target <ref>', 'Target git ref to compare')
|
|
20
|
+
.option('--config <path>', 'Path to config file')
|
|
21
|
+
.action(checkCommand);
|
|
22
|
+
program.parse();
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,+DAA+D,CAAC;KAC5E,OAAO,CAAC,OAAO,CAAC,CAAC;AAGpB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,iBAAiB,EAAE,2CAA2C,EAAE,gBAAgB,CAAC;KACxF,MAAM,CAAC,2BAA2B,EAAE,sCAAsC,EAAE,IAAI,CAAC;KACjF,MAAM,CAAC,mBAAmB,EAAE,iCAAiC,EAAE,MAAM,CAAC;KACtE,MAAM,CAAC,YAAY,EAAE,iBAAiB,CAAC;KACvC,MAAM,CAAC,eAAe,EAAE,kCAAkC,CAAC;KAC3D,MAAM,CAAC,WAAW,EAAE,wBAAwB,CAAC;KAC7C,MAAM,CAAC,cAAc,EAAE,iCAAiC,CAAC;KACzD,MAAM,CAAC,gBAAgB,EAAE,2BAA2B,CAAC;KACrD,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;KAChD,MAAM,CAAC,YAAY,CAAC,CAAC;AAGxB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,YAAY,CAgBhD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const DEFAULT_CONFIG = {
|
|
2
|
+
model: 'ollama:glm-4.7',
|
|
3
|
+
temperature: 0.7,
|
|
4
|
+
maxTokens: 2048,
|
|
5
|
+
minConfidence: 78,
|
|
6
|
+
enableCache: true,
|
|
7
|
+
parallel: true,
|
|
8
|
+
maxConcurrency: 3,
|
|
9
|
+
enableSecretScanning: true,
|
|
10
|
+
enableSemgrep: false,
|
|
11
|
+
format: 'text',
|
|
12
|
+
verbose: false,
|
|
13
|
+
showRationale: true,
|
|
14
|
+
enableMemory: true,
|
|
15
|
+
cachePath: '.sieveai/cache.db',
|
|
16
|
+
workingDir: process.cwd(),
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,cAAc,GAA0B;IACnD,KAAK,EAAE,gBAAgB;IACvB,WAAW,EAAE,GAAG;IAChB,SAAS,EAAE,IAAI;IACf,aAAa,EAAE,EAAE;IACjB,WAAW,EAAE,IAAI;IACjB,QAAQ,EAAE,IAAI;IACd,cAAc,EAAE,CAAC;IACjB,oBAAoB,EAAE,IAAI;IAC1B,aAAa,EAAE,KAAK;IACpB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,KAAK;IACd,aAAa,EAAE,IAAI;IACnB,YAAY,EAAE,IAAI;IAClB,SAAS,EAAE,mBAAmB;IAC9B,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE;CAC1B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type ReviewConfig } from './schema.js';
|
|
2
|
+
export interface ConfigLoaderOptions {
|
|
3
|
+
workingDir?: string;
|
|
4
|
+
configPath?: string;
|
|
5
|
+
overrides?: Partial<ReviewConfig>;
|
|
6
|
+
}
|
|
7
|
+
export declare function loadConfig(options?: ConfigLoaderOptions): Promise<ReviewConfig>;
|
|
8
|
+
export declare function getCacheDir(config: ReviewConfig): string;
|
|
9
|
+
export declare function getCachePath(config: ReviewConfig): string;
|
|
10
|
+
export declare function getMemoryPath(config: ReviewConfig): string;
|
|
11
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAQA,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAMpE,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CACnC;AAKD,wBAAsB,UAAU,CAC9B,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,YAAY,CAAC,CAiCvB;AAsDD,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAExD;AAKD,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAEzD;AAKD,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAE1D"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
import { ConfigError } from '../types/index.js';
|
|
4
|
+
import { ReviewConfigSchema } from './schema.js';
|
|
5
|
+
import { DEFAULT_CONFIG } from './defaults.js';
|
|
6
|
+
import { createLogger } from '../utils/logger.js';
|
|
7
|
+
const logger = createLogger('config');
|
|
8
|
+
export async function loadConfig(options = {}) {
|
|
9
|
+
const workingDir = options.workingDir ?? process.cwd();
|
|
10
|
+
let config = { ...DEFAULT_CONFIG };
|
|
11
|
+
const configPath = options.configPath ?? (await findConfigFile(workingDir));
|
|
12
|
+
if (configPath) {
|
|
13
|
+
try {
|
|
14
|
+
const fileConfig = await loadConfigFile(configPath);
|
|
15
|
+
config = { ...config, ...fileConfig };
|
|
16
|
+
logger.debug('Loaded config from:', configPath);
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
logger.warn('Failed to load config file:', configPath, error);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if (options.overrides) {
|
|
23
|
+
config = { ...config, ...options.overrides };
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const validated = ReviewConfigSchema.parse(config);
|
|
27
|
+
logger.debug('Config validated successfully');
|
|
28
|
+
return validated;
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
throw new ConfigError('Invalid configuration', { error });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function findConfigFile(startDir) {
|
|
35
|
+
const configNames = [
|
|
36
|
+
'.sieveai.config.json',
|
|
37
|
+
'.sieveai.json',
|
|
38
|
+
'sieveai.config.json',
|
|
39
|
+
];
|
|
40
|
+
let currentDir = resolve(startDir);
|
|
41
|
+
const root = '/';
|
|
42
|
+
while (currentDir !== root) {
|
|
43
|
+
for (const name of configNames) {
|
|
44
|
+
const configPath = join(currentDir, name);
|
|
45
|
+
try {
|
|
46
|
+
await readFile(configPath, 'utf-8');
|
|
47
|
+
return configPath;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const parentDir = resolve(currentDir, '..');
|
|
53
|
+
if (parentDir === currentDir) {
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
currentDir = parentDir;
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
async function loadConfigFile(path) {
|
|
61
|
+
try {
|
|
62
|
+
const content = await readFile(path, 'utf-8');
|
|
63
|
+
return JSON.parse(content);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
throw new ConfigError(`Failed to parse config file: ${path}`, { error });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export function getCacheDir(config) {
|
|
70
|
+
return resolve(config.workingDir, '.sieveai');
|
|
71
|
+
}
|
|
72
|
+
export function getCachePath(config) {
|
|
73
|
+
return resolve(config.workingDir, config.cachePath);
|
|
74
|
+
}
|
|
75
|
+
export function getMemoryPath(config) {
|
|
76
|
+
return config.memoryPath ?? resolve(config.workingDir, '.sieveai/memory.json');
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const SeveritySchema: z.ZodEnum<["critical", "high", "medium", "low", "info"]>;
|
|
3
|
+
export declare const CategorySchema: z.ZodEnum<["bug", "security", "performance", "style", "maintainability", "testing", "documentation"]>;
|
|
4
|
+
export declare const FormatSchema: z.ZodEnum<["text", "json", "tui"]>;
|
|
5
|
+
export declare const ReviewConfigSchema: z.ZodObject<{
|
|
6
|
+
model: z.ZodDefault<z.ZodString>;
|
|
7
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
8
|
+
maxTokens: z.ZodOptional<z.ZodNumber>;
|
|
9
|
+
minConfidence: z.ZodDefault<z.ZodNumber>;
|
|
10
|
+
severityFilter: z.ZodOptional<z.ZodArray<z.ZodEnum<["critical", "high", "medium", "low", "info"]>, "many">>;
|
|
11
|
+
categoryFilter: z.ZodOptional<z.ZodArray<z.ZodEnum<["bug", "security", "performance", "style", "maintainability", "testing", "documentation"]>, "many">>;
|
|
12
|
+
enableCache: z.ZodDefault<z.ZodBoolean>;
|
|
13
|
+
parallel: z.ZodDefault<z.ZodBoolean>;
|
|
14
|
+
maxConcurrency: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
|
|
15
|
+
enableSecretScanning: z.ZodDefault<z.ZodBoolean>;
|
|
16
|
+
enableSemgrep: z.ZodDefault<z.ZodBoolean>;
|
|
17
|
+
semgrepRules: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
18
|
+
format: z.ZodDefault<z.ZodEnum<["text", "json", "tui"]>>;
|
|
19
|
+
verbose: z.ZodDefault<z.ZodBoolean>;
|
|
20
|
+
showRationale: z.ZodDefault<z.ZodBoolean>;
|
|
21
|
+
enableMemory: z.ZodDefault<z.ZodBoolean>;
|
|
22
|
+
memoryPath: z.ZodOptional<z.ZodString>;
|
|
23
|
+
cachePath: z.ZodDefault<z.ZodString>;
|
|
24
|
+
workingDir: z.ZodDefault<z.ZodString>;
|
|
25
|
+
}, "strip", z.ZodTypeAny, {
|
|
26
|
+
model: string;
|
|
27
|
+
minConfidence: number;
|
|
28
|
+
enableCache: boolean;
|
|
29
|
+
parallel: boolean;
|
|
30
|
+
enableSecretScanning: boolean;
|
|
31
|
+
enableSemgrep: boolean;
|
|
32
|
+
format: "text" | "json" | "tui";
|
|
33
|
+
verbose: boolean;
|
|
34
|
+
showRationale: boolean;
|
|
35
|
+
enableMemory: boolean;
|
|
36
|
+
cachePath: string;
|
|
37
|
+
workingDir: string;
|
|
38
|
+
temperature?: number | undefined;
|
|
39
|
+
maxTokens?: number | undefined;
|
|
40
|
+
severityFilter?: ("critical" | "high" | "medium" | "low" | "info")[] | undefined;
|
|
41
|
+
categoryFilter?: ("bug" | "security" | "performance" | "style" | "maintainability" | "testing" | "documentation")[] | undefined;
|
|
42
|
+
maxConcurrency?: number | undefined;
|
|
43
|
+
semgrepRules?: string[] | undefined;
|
|
44
|
+
memoryPath?: string | undefined;
|
|
45
|
+
}, {
|
|
46
|
+
temperature?: number | undefined;
|
|
47
|
+
model?: string | undefined;
|
|
48
|
+
maxTokens?: number | undefined;
|
|
49
|
+
minConfidence?: number | undefined;
|
|
50
|
+
severityFilter?: ("critical" | "high" | "medium" | "low" | "info")[] | undefined;
|
|
51
|
+
categoryFilter?: ("bug" | "security" | "performance" | "style" | "maintainability" | "testing" | "documentation")[] | undefined;
|
|
52
|
+
enableCache?: boolean | undefined;
|
|
53
|
+
parallel?: boolean | undefined;
|
|
54
|
+
maxConcurrency?: number | undefined;
|
|
55
|
+
enableSecretScanning?: boolean | undefined;
|
|
56
|
+
enableSemgrep?: boolean | undefined;
|
|
57
|
+
semgrepRules?: string[] | undefined;
|
|
58
|
+
format?: "text" | "json" | "tui" | undefined;
|
|
59
|
+
verbose?: boolean | undefined;
|
|
60
|
+
showRationale?: boolean | undefined;
|
|
61
|
+
enableMemory?: boolean | undefined;
|
|
62
|
+
memoryPath?: string | undefined;
|
|
63
|
+
cachePath?: string | undefined;
|
|
64
|
+
workingDir?: string | undefined;
|
|
65
|
+
}>;
|
|
66
|
+
export type ReviewConfig = z.infer<typeof ReviewConfigSchema>;
|
|
67
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,cAAc,0DAAwD,CAAC;AACpF,eAAO,MAAM,cAAc,uGAQzB,CAAC;AACH,eAAO,MAAM,YAAY,oCAAkC,CAAC;AAE5D,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiC7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const SeveritySchema = z.enum(['critical', 'high', 'medium', 'low', 'info']);
|
|
3
|
+
export const CategorySchema = z.enum([
|
|
4
|
+
'bug',
|
|
5
|
+
'security',
|
|
6
|
+
'performance',
|
|
7
|
+
'style',
|
|
8
|
+
'maintainability',
|
|
9
|
+
'testing',
|
|
10
|
+
'documentation',
|
|
11
|
+
]);
|
|
12
|
+
export const FormatSchema = z.enum(['text', 'json', 'tui']);
|
|
13
|
+
export const ReviewConfigSchema = z.object({
|
|
14
|
+
model: z.string().default('ollama:glm-4.7'),
|
|
15
|
+
temperature: z.number().min(0).max(2).optional(),
|
|
16
|
+
maxTokens: z.number().positive().optional(),
|
|
17
|
+
minConfidence: z.number().min(0).max(100).default(78),
|
|
18
|
+
severityFilter: z.array(SeveritySchema).optional(),
|
|
19
|
+
categoryFilter: z.array(CategorySchema).optional(),
|
|
20
|
+
enableCache: z.boolean().default(true),
|
|
21
|
+
parallel: z.boolean().default(true),
|
|
22
|
+
maxConcurrency: z.number().positive().default(3).optional(),
|
|
23
|
+
enableSecretScanning: z.boolean().default(true),
|
|
24
|
+
enableSemgrep: z.boolean().default(false),
|
|
25
|
+
semgrepRules: z.array(z.string()).optional(),
|
|
26
|
+
format: FormatSchema.default('text'),
|
|
27
|
+
verbose: z.boolean().default(false),
|
|
28
|
+
showRationale: z.boolean().default(true),
|
|
29
|
+
enableMemory: z.boolean().default(true),
|
|
30
|
+
memoryPath: z.string().optional(),
|
|
31
|
+
cachePath: z.string().default('.sieveai/cache.db'),
|
|
32
|
+
workingDir: z.string().default(process.cwd()),
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AACpF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC;IACnC,KAAK;IACL,UAAU;IACV,aAAa;IACb,OAAO;IACP,iBAAiB;IACjB,SAAS;IACT,eAAe;CAChB,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAE5D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAEzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC;IAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAChD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAG3C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACrD,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;IAClD,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;IAGlD,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACtC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACnC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAG3D,oBAAoB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC/C,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACzC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAG5C,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACnC,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAGxC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACvC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAGjC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC;IAClD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;CAC9C,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { FileDiff, DiffHunk } from '../types/index.js';
|
|
2
|
+
export declare function parseDiff(diffText: string): FileDiff[];
|
|
3
|
+
export declare function getAddedLines(file: FileDiff): Array<{
|
|
4
|
+
line: number;
|
|
5
|
+
content: string;
|
|
6
|
+
}>;
|
|
7
|
+
export declare function getRemovedLines(file: FileDiff): Array<{
|
|
8
|
+
line: number;
|
|
9
|
+
content: string;
|
|
10
|
+
}>;
|
|
11
|
+
export declare function getModifiedLines(file: FileDiff): {
|
|
12
|
+
added: Array<{
|
|
13
|
+
line: number;
|
|
14
|
+
content: string;
|
|
15
|
+
}>;
|
|
16
|
+
removed: Array<{
|
|
17
|
+
line: number;
|
|
18
|
+
content: string;
|
|
19
|
+
}>;
|
|
20
|
+
};
|
|
21
|
+
export declare function getLineContext(hunk: DiffHunk, targetLine: number, contextLines?: number): string[];
|
|
22
|
+
//# sourceMappingURL=diff-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-parser.d.ts","sourceRoot":"","sources":["../../src/git/diff-parser.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAS5D,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,CAoGtD;AAKD,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,KAAK,CAAC;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAqBD;AAKD,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,KAAK,CAAC;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAqBD;AAKD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG;IAChD,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnD,CAKA;AAKD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,MAAM,EAClB,YAAY,SAAI,GACf,MAAM,EAAE,CAuBV"}
|