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.
Files changed (103) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +164 -0
  3. package/dist/agents/base-agent.d.ts +14 -0
  4. package/dist/agents/base-agent.d.ts.map +1 -0
  5. package/dist/agents/base-agent.js +114 -0
  6. package/dist/agents/base-agent.js.map +1 -0
  7. package/dist/agents/bug-agent.d.ts +6 -0
  8. package/dist/agents/bug-agent.d.ts.map +1 -0
  9. package/dist/agents/bug-agent.js +6 -0
  10. package/dist/agents/bug-agent.js.map +1 -0
  11. package/dist/agents/security-agent.d.ts +6 -0
  12. package/dist/agents/security-agent.d.ts.map +1 -0
  13. package/dist/agents/security-agent.js +6 -0
  14. package/dist/agents/security-agent.js.map +1 -0
  15. package/dist/agents/style-agent.d.ts +6 -0
  16. package/dist/agents/style-agent.d.ts.map +1 -0
  17. package/dist/agents/style-agent.js +6 -0
  18. package/dist/agents/style-agent.js.map +1 -0
  19. package/dist/cache/database.d.ts +26 -0
  20. package/dist/cache/database.d.ts.map +1 -0
  21. package/dist/cache/database.js +199 -0
  22. package/dist/cache/database.js.map +1 -0
  23. package/dist/cache/manager.d.ts +27 -0
  24. package/dist/cache/manager.d.ts.map +1 -0
  25. package/dist/cache/manager.js +105 -0
  26. package/dist/cache/manager.js.map +1 -0
  27. package/dist/cli/commands/check.d.ts +14 -0
  28. package/dist/cli/commands/check.d.ts.map +1 -0
  29. package/dist/cli/commands/check.js +73 -0
  30. package/dist/cli/commands/check.js.map +1 -0
  31. package/dist/cli/index.d.ts +3 -0
  32. package/dist/cli/index.d.ts.map +1 -0
  33. package/dist/cli/index.js +23 -0
  34. package/dist/cli/index.js.map +1 -0
  35. package/dist/config/defaults.d.ts +3 -0
  36. package/dist/config/defaults.d.ts.map +1 -0
  37. package/dist/config/defaults.js +18 -0
  38. package/dist/config/defaults.js.map +1 -0
  39. package/dist/config/loader.d.ts +11 -0
  40. package/dist/config/loader.d.ts.map +1 -0
  41. package/dist/config/loader.js +78 -0
  42. package/dist/config/loader.js.map +1 -0
  43. package/dist/config/schema.d.ts +67 -0
  44. package/dist/config/schema.d.ts.map +1 -0
  45. package/dist/config/schema.js +34 -0
  46. package/dist/config/schema.js.map +1 -0
  47. package/dist/git/diff-parser.d.ts +22 -0
  48. package/dist/git/diff-parser.d.ts.map +1 -0
  49. package/dist/git/diff-parser.js +151 -0
  50. package/dist/git/diff-parser.js.map +1 -0
  51. package/dist/git/repository.d.ts +28 -0
  52. package/dist/git/repository.d.ts.map +1 -0
  53. package/dist/git/repository.js +155 -0
  54. package/dist/git/repository.js.map +1 -0
  55. package/dist/llm/client.d.ts +27 -0
  56. package/dist/llm/client.d.ts.map +1 -0
  57. package/dist/llm/client.js +90 -0
  58. package/dist/llm/client.js.map +1 -0
  59. package/dist/llm/prompts.d.ts +14 -0
  60. package/dist/llm/prompts.d.ts.map +1 -0
  61. package/dist/llm/prompts.js +110 -0
  62. package/dist/llm/prompts.js.map +1 -0
  63. package/dist/llm/providers/ollama.d.ts +17 -0
  64. package/dist/llm/providers/ollama.d.ts.map +1 -0
  65. package/dist/llm/providers/ollama.js +165 -0
  66. package/dist/llm/providers/ollama.js.map +1 -0
  67. package/dist/orchestrator/orchestrator.d.ts +20 -0
  68. package/dist/orchestrator/orchestrator.d.ts.map +1 -0
  69. package/dist/orchestrator/orchestrator.js +164 -0
  70. package/dist/orchestrator/orchestrator.js.map +1 -0
  71. package/dist/reporters/json-reporter.d.ts +3 -0
  72. package/dist/reporters/json-reporter.d.ts.map +1 -0
  73. package/dist/reporters/json-reporter.js +4 -0
  74. package/dist/reporters/json-reporter.js.map +1 -0
  75. package/dist/reporters/text-reporter.d.ts +6 -0
  76. package/dist/reporters/text-reporter.d.ts.map +1 -0
  77. package/dist/reporters/text-reporter.js +129 -0
  78. package/dist/reporters/text-reporter.js.map +1 -0
  79. package/dist/static/secrets.d.ts +3 -0
  80. package/dist/static/secrets.d.ts.map +1 -0
  81. package/dist/static/secrets.js +106 -0
  82. package/dist/static/secrets.js.map +1 -0
  83. package/dist/types/index.d.ts +155 -0
  84. package/dist/types/index.d.ts.map +1 -0
  85. package/dist/types/index.js +36 -0
  86. package/dist/types/index.js.map +1 -0
  87. package/dist/utils/errors.d.ts +13 -0
  88. package/dist/utils/errors.d.ts.map +1 -0
  89. package/dist/utils/errors.js +61 -0
  90. package/dist/utils/errors.js.map +1 -0
  91. package/dist/utils/hash.d.ts +5 -0
  92. package/dist/utils/hash.d.ts.map +1 -0
  93. package/dist/utils/hash.js +18 -0
  94. package/dist/utils/hash.js.map +1 -0
  95. package/dist/utils/index.d.ts +11 -0
  96. package/dist/utils/index.d.ts.map +1 -0
  97. package/dist/utils/index.js +64 -0
  98. package/dist/utils/index.js.map +1 -0
  99. package/dist/utils/logger.d.ts +21 -0
  100. package/dist/utils/logger.d.ts.map +1 -0
  101. package/dist/utils/logger.js +53 -0
  102. package/dist/utils/logger.js.map +1 -0
  103. 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":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;AAiBzC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAqB;IACtD,MAAM,OAAO,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;IAE/C,IAAI,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;YAC9B,UAAU,EAAE,OAAO,CAAC,MAAM;YAC1B,SAAS,EAAE;gBACT,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC7F,MAAM,EAAE,OAAO,CAAC,MAA6C;gBAC7D,WAAW,EAAE,OAAO,CAAC,KAAK;gBAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,GAAG,4BAA4B,CAAC;QAG5C,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAEnD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAGD,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAE5C,OAAO,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAGjC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC;YAC7B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,oBAAoB,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAC;QAGzD,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAExC,MAAM,YAAY,GAAG,IAAI,kBAAkB,CAAC;YAC1C,MAAM;YACN,SAAS;YACT,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE/C,YAAY,CAAC,KAAK,EAAE,CAAC;QAErB,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAGnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,gBAAgB,CAAC,MAAM,EAAE;gBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,aAAa,EAAE,MAAM,CAAC,aAAa;aACpC,CAAC,CACH,CAAC;QACJ,CAAC;QAGD,MAAM,eAAe,GACnB,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC;YACtC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;QAErC,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ import type { ReviewConfig } from './schema.js';
2
+ export declare const DEFAULT_CONFIG: Partial<ReviewConfig>;
3
+ //# sourceMappingURL=defaults.d.ts.map
@@ -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"}