@galileodev/verify 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 (77) hide show
  1. package/dist/guide/composer.d.ts +10 -0
  2. package/dist/guide/composer.d.ts.map +1 -0
  3. package/dist/guide/composer.js +48 -0
  4. package/dist/guide/composer.js.map +1 -0
  5. package/dist/guide/constraints.d.ts +3 -0
  6. package/dist/guide/constraints.d.ts.map +1 -0
  7. package/dist/guide/constraints.js +12 -0
  8. package/dist/guide/constraints.js.map +1 -0
  9. package/dist/guide/file-tree.d.ts +2 -0
  10. package/dist/guide/file-tree.d.ts.map +1 -0
  11. package/dist/guide/file-tree.js +24 -0
  12. package/dist/guide/file-tree.js.map +1 -0
  13. package/dist/index.d.ts +22 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +25 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/karpathy/loop.d.ts +6 -0
  18. package/dist/karpathy/loop.d.ts.map +1 -0
  19. package/dist/karpathy/loop.js +169 -0
  20. package/dist/karpathy/loop.js.map +1 -0
  21. package/dist/orchestrator/acdc.d.ts +14 -0
  22. package/dist/orchestrator/acdc.d.ts.map +1 -0
  23. package/dist/orchestrator/acdc.js +91 -0
  24. package/dist/orchestrator/acdc.js.map +1 -0
  25. package/dist/solve/agent.d.ts +8 -0
  26. package/dist/solve/agent.d.ts.map +1 -0
  27. package/dist/solve/agent.js +151 -0
  28. package/dist/solve/agent.js.map +1 -0
  29. package/dist/solve/hint-matcher.d.ts +8 -0
  30. package/dist/solve/hint-matcher.d.ts.map +1 -0
  31. package/dist/solve/hint-matcher.js +36 -0
  32. package/dist/solve/hint-matcher.js.map +1 -0
  33. package/dist/solve/staged-pipeline.d.ts +12 -0
  34. package/dist/solve/staged-pipeline.d.ts.map +1 -0
  35. package/dist/solve/staged-pipeline.js +51 -0
  36. package/dist/solve/staged-pipeline.js.map +1 -0
  37. package/dist/trust/trust-evaluator.d.ts +9 -0
  38. package/dist/trust/trust-evaluator.d.ts.map +1 -0
  39. package/dist/trust/trust-evaluator.js +30 -0
  40. package/dist/trust/trust-evaluator.js.map +1 -0
  41. package/dist/trust/trust-store.d.ts +16 -0
  42. package/dist/trust/trust-store.d.ts.map +1 -0
  43. package/dist/trust/trust-store.js +86 -0
  44. package/dist/trust/trust-store.js.map +1 -0
  45. package/dist/trust/types.d.ts +15 -0
  46. package/dist/trust/types.d.ts.map +1 -0
  47. package/dist/trust/types.js +2 -0
  48. package/dist/trust/types.js.map +1 -0
  49. package/dist/types.d.ts +132 -0
  50. package/dist/types.d.ts.map +1 -0
  51. package/dist/types.js +2 -0
  52. package/dist/types.js.map +1 -0
  53. package/dist/utils/secret-strip.d.ts +6 -0
  54. package/dist/utils/secret-strip.d.ts.map +1 -0
  55. package/dist/utils/secret-strip.js +34 -0
  56. package/dist/utils/secret-strip.js.map +1 -0
  57. package/dist/verifier/plugins/eslint.d.ts +9 -0
  58. package/dist/verifier/plugins/eslint.d.ts.map +1 -0
  59. package/dist/verifier/plugins/eslint.js +59 -0
  60. package/dist/verifier/plugins/eslint.js.map +1 -0
  61. package/dist/verifier/plugins/semgrep.d.ts +9 -0
  62. package/dist/verifier/plugins/semgrep.d.ts.map +1 -0
  63. package/dist/verifier/plugins/semgrep.js +46 -0
  64. package/dist/verifier/plugins/semgrep.js.map +1 -0
  65. package/dist/verifier/plugins/test-runner.d.ts +11 -0
  66. package/dist/verifier/plugins/test-runner.d.ts.map +1 -0
  67. package/dist/verifier/plugins/test-runner.js +46 -0
  68. package/dist/verifier/plugins/test-runner.js.map +1 -0
  69. package/dist/verifier/plugins/tsc.d.ts +9 -0
  70. package/dist/verifier/plugins/tsc.d.ts.map +1 -0
  71. package/dist/verifier/plugins/tsc.js +41 -0
  72. package/dist/verifier/plugins/tsc.js.map +1 -0
  73. package/dist/verifier/runner.d.ts +14 -0
  74. package/dist/verifier/runner.d.ts.map +1 -0
  75. package/dist/verifier/runner.js +45 -0
  76. package/dist/verifier/runner.js.map +1 -0
  77. package/package.json +28 -0
@@ -0,0 +1,151 @@
1
+ import { readFile, writeFile } from 'node:fs/promises';
2
+ import { resolve, relative, isAbsolute, sep } from 'node:path';
3
+ import { execFileSync } from 'node:child_process';
4
+ import { StagedPipeline } from './staged-pipeline.js';
5
+ export class SolveAgent {
6
+ async remediate(report, context) {
7
+ const resolved = [];
8
+ const unresolved = [];
9
+ const attempts = [];
10
+ let tokensUsed = 0;
11
+ if (!Number.isFinite(context.maxRetriesPerFinding) || context.maxRetriesPerFinding < 1) {
12
+ throw new Error('maxRetriesPerFinding must be a finite number >= 1.');
13
+ }
14
+ // Group findings by file
15
+ const groups = this.groupByFile(report.findings.filter((f) => f.severity === 'error'));
16
+ for (const [rawFile, findings] of groups) {
17
+ if (context.budget.exhausted()) {
18
+ unresolved.push(...findings);
19
+ continue;
20
+ }
21
+ // Sanitize path: ensure it's within workingDir
22
+ const file = this.safePath(context.workingDir, rawFile);
23
+ if (!file) {
24
+ unresolved.push(...findings);
25
+ continue;
26
+ }
27
+ const findingId = `${findings[0].ruleId}:${file}:${findings[0].line}`;
28
+ const history = [];
29
+ let retries = 0;
30
+ let fixed = false;
31
+ while (retries < context.maxRetriesPerFinding && !context.budget.exhausted()) {
32
+ retries++;
33
+ // Read current file content
34
+ let fileContent;
35
+ try {
36
+ fileContent = await readFile(resolve(context.workingDir, file), 'utf-8');
37
+ }
38
+ catch {
39
+ fileContent = '';
40
+ }
41
+ // Build prompt
42
+ const prompt = this.buildPrompt(findings, fileContent, context);
43
+ // Get LLM response
44
+ let response;
45
+ try {
46
+ response = await context.llm.complete(prompt, undefined, history.length > 0 ? history : undefined);
47
+ }
48
+ catch {
49
+ break;
50
+ }
51
+ const responseTokens = response.length; // approximate
52
+ try {
53
+ context.budget.consume(responseTokens);
54
+ }
55
+ catch {
56
+ unresolved.push(...findings);
57
+ break;
58
+ }
59
+ tokensUsed += responseTokens;
60
+ // Parse response
61
+ let hypothesis;
62
+ let patch;
63
+ try {
64
+ const parsed = JSON.parse(response);
65
+ hypothesis = parsed.hypothesis ?? 'No hypothesis provided';
66
+ patch = parsed.patch ?? '';
67
+ }
68
+ catch {
69
+ hypothesis = 'Failed to parse LLM response';
70
+ patch = '';
71
+ }
72
+ // Apply patch
73
+ if (patch) {
74
+ try {
75
+ await writeFile(resolve(context.workingDir, file), patch, 'utf-8');
76
+ }
77
+ catch {
78
+ // Can't write file
79
+ }
80
+ }
81
+ // Re-verify with relevant verifier
82
+ const reFindings = await context.verifier.runSingle(findings[0].verifierId, {
83
+ workingDir: context.workingDir,
84
+ files: [file],
85
+ sandbox: context.sandbox,
86
+ });
87
+ const stillFailing = reFindings.some((f) => f.severity === 'error' && f.file === file);
88
+ attempts.push({
89
+ findingId,
90
+ attempt: retries,
91
+ hypothesis,
92
+ patch,
93
+ verificationPassed: !stillFailing,
94
+ tokensUsed: responseTokens,
95
+ });
96
+ if (!stillFailing) {
97
+ fixed = true;
98
+ resolved.push(...findings);
99
+ break;
100
+ }
101
+ // Add to history for multi-turn
102
+ history.push({ role: 'user', content: prompt }, { role: 'assistant', content: response }, { role: 'user', content: `Fix attempt ${retries} failed. Remaining errors: ${reFindings.map((f) => f.message).join('; ')}` });
103
+ }
104
+ if (!fixed && !unresolved.includes(findings[0])) {
105
+ unresolved.push(...findings);
106
+ // Revert this file to original
107
+ try {
108
+ execFileSync('git', ['checkout', '--', file], { cwd: context.workingDir });
109
+ }
110
+ catch {
111
+ // Best effort revert
112
+ }
113
+ }
114
+ }
115
+ return {
116
+ resolved,
117
+ unresolved,
118
+ attempts,
119
+ reverted: unresolved.length > 0 && resolved.length === 0,
120
+ tokensUsed,
121
+ };
122
+ }
123
+ safePath(workingDir, file) {
124
+ // Convert absolute paths to relative, then verify containment
125
+ const relFile = isAbsolute(file) ? relative(workingDir, file) : file;
126
+ const resolved = resolve(workingDir, relFile);
127
+ const resolvedDir = resolve(workingDir);
128
+ if (!resolved.startsWith(resolvedDir + sep) && resolved !== resolvedDir) {
129
+ return null; // Path escapes workingDir
130
+ }
131
+ return relFile;
132
+ }
133
+ groupByFile(findings) {
134
+ const groups = new Map();
135
+ for (const finding of findings) {
136
+ const group = groups.get(finding.file) ?? [];
137
+ group.push(finding);
138
+ groups.set(finding.file, group);
139
+ }
140
+ return groups;
141
+ }
142
+ buildPrompt(findings, fileContent, context) {
143
+ const pipeline = new StagedPipeline({
144
+ staged: context.staged ?? true,
145
+ autoFixTrivial: context.autoFixTrivial ?? false,
146
+ certificates: context.certificates ?? true,
147
+ });
148
+ return pipeline.buildEnrichedPrompt(findings, fileContent);
149
+ }
150
+ }
151
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/solve/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { VerificationFinding } from '../types.js';
2
+ export interface FixHint {
3
+ type: 'ADD_IMPORT' | 'TYPE_MISMATCH' | 'REMOVE_UNUSED' | 'ARITY_MISMATCH';
4
+ finding: VerificationFinding;
5
+ details: Record<string, string | number>;
6
+ }
7
+ export declare function matchHints(findings: VerificationFinding[]): FixHint[];
8
+ //# sourceMappingURL=hint-matcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hint-matcher.d.ts","sourceRoot":"","sources":["../../src/solve/hint-matcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,YAAY,GAAG,eAAe,GAAG,eAAe,GAAG,gBAAgB,CAAC;IAC1E,OAAO,EAAE,mBAAmB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CAC1C;AA+BD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,OAAO,EAAE,CAYrE"}
@@ -0,0 +1,36 @@
1
+ const PATTERNS = [
2
+ {
3
+ regex: /Cannot find module '([^']+)'/,
4
+ type: 'ADD_IMPORT',
5
+ extract: (m) => ({ module: m[1] }),
6
+ },
7
+ {
8
+ regex: /Property '([^']+)' does not exist on type '([^']+)'/,
9
+ type: 'TYPE_MISMATCH',
10
+ extract: (m) => ({ property: m[1], expectedType: m[2] }),
11
+ },
12
+ {
13
+ regex: /'([^']+)' is declared but (?:its value is )?never (?:read|used)/,
14
+ type: 'REMOVE_UNUSED',
15
+ extract: (m) => ({ identifier: m[1] }),
16
+ },
17
+ {
18
+ regex: /Expected (\d+) arguments?, but got (\d+)/,
19
+ type: 'ARITY_MISMATCH',
20
+ extract: (m) => ({ expected: parseInt(m[1], 10), got: parseInt(m[2], 10) }),
21
+ },
22
+ ];
23
+ export function matchHints(findings) {
24
+ const hints = [];
25
+ for (const finding of findings) {
26
+ for (const pattern of PATTERNS) {
27
+ const match = finding.message.match(pattern.regex);
28
+ if (match) {
29
+ hints.push({ type: pattern.type, finding, details: pattern.extract(match) });
30
+ break;
31
+ }
32
+ }
33
+ }
34
+ return hints;
35
+ }
36
+ //# sourceMappingURL=hint-matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hint-matcher.js","sourceRoot":"","sources":["../../src/solve/hint-matcher.ts"],"names":[],"mappings":"AAcA,MAAM,QAAQ,GAAkB;IAC9B;QACE,KAAK,EAAE,8BAA8B;QACrC,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACnC;IACD;QACE,KAAK,EAAE,qDAAqD;QAC5D,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACzD;IACD;QACE,KAAK,EAAE,iEAAiE;QACxE,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACvC;IACD;QACE,KAAK,EAAE,0CAA0C;QACjD,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;KAC5E;CACF,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,QAA+B;IACxD,MAAM,KAAK,GAAc,EAAE,CAAC;IAC5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACnD,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC7E,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { VerificationFinding } from '../types.js';
2
+ export interface StagedPipelineConfig {
3
+ staged: boolean;
4
+ autoFixTrivial: boolean;
5
+ certificates: boolean;
6
+ }
7
+ export declare class StagedPipeline {
8
+ private readonly config;
9
+ constructor(config: StagedPipelineConfig);
10
+ buildEnrichedPrompt(findings: VerificationFinding[], fileContent: string): string;
11
+ }
12
+ //# sourceMappingURL=staged-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staged-pipeline.d.ts","sourceRoot":"","sources":["../../src/solve/staged-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGvD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,oBAAoB;IAEzD,mBAAmB,CACjB,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,WAAW,EAAE,MAAM,GAClB,MAAM;CA8CV"}
@@ -0,0 +1,51 @@
1
+ import { matchHints } from './hint-matcher.js';
2
+ export class StagedPipeline {
3
+ config;
4
+ constructor(config) {
5
+ this.config = config;
6
+ }
7
+ buildEnrichedPrompt(findings, fileContent) {
8
+ const parts = [
9
+ 'You are a code repair agent. Fix the following verification errors.',
10
+ '',
11
+ '## File Content',
12
+ '```',
13
+ fileContent,
14
+ '```',
15
+ '',
16
+ ];
17
+ if (this.config.staged) {
18
+ const hints = matchHints(findings);
19
+ const hintMap = new Map();
20
+ for (const hint of hints) {
21
+ hintMap.set(hint.finding, hint);
22
+ }
23
+ parts.push('## Errors to Fix');
24
+ for (const finding of findings) {
25
+ const hint = hintMap.get(finding);
26
+ if (hint) {
27
+ parts.push(`- [${finding.ruleId}] Line ${finding.line}: ${finding.message}`);
28
+ parts.push(` HINT: ${hint.type} — ${JSON.stringify(hint.details)}`);
29
+ }
30
+ else {
31
+ parts.push(`- [${finding.ruleId}] Line ${finding.line}: ${finding.message}`);
32
+ }
33
+ }
34
+ }
35
+ else {
36
+ parts.push('## Errors to Fix');
37
+ for (const finding of findings) {
38
+ parts.push(`- [${finding.ruleId}] Line ${finding.line}: ${finding.message}`);
39
+ }
40
+ }
41
+ parts.push('', '## Instructions');
42
+ parts.push('Respond with a JSON object: { "hypothesis": "what you think is wrong", "patch": "the complete fixed file content" }');
43
+ parts.push('The patch must be the ENTIRE file content, not a diff.');
44
+ if (this.config.certificates) {
45
+ parts.push('');
46
+ parts.push('IMPORTANT: For each change you make, include a `// CERT: <reason>` comment explaining WHY this change fixes the specific error. Changes without certificates will be flagged for human review.');
47
+ }
48
+ return parts.join('\n');
49
+ }
50
+ }
51
+ //# sourceMappingURL=staged-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staged-pipeline.js","sourceRoot":"","sources":["../../src/solve/staged-pipeline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQ/C,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,MAA4B;QAA5B,WAAM,GAAN,MAAM,CAAsB;IAAG,CAAC;IAE7D,mBAAmB,CACjB,QAA+B,EAC/B,WAAmB;QAEnB,MAAM,KAAK,GAAa;YACtB,qEAAqE;YACrE,EAAE;YACF,iBAAiB;YACjB,KAAK;YACL,WAAW;YACX,KAAK;YACL,EAAE;SACH,CAAC;QAEF,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwC,CAAC;YAChE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAClC,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC/B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAClC,IAAI,IAAI,EAAE,CAAC;oBACT,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM,UAAU,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC7E,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACvE,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM,UAAU,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC/E,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC/B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM,UAAU,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,qHAAqH,CAAC,CAAC;QAClI,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QAErE,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,gMAAgM,CAAC,CAAC;QAC/M,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import type { TrustEntry } from './types.js';
2
+ import type { VerificationFinding } from '../types.js';
3
+ export declare class TrustEvaluator {
4
+ findingSeverity(finding: VerificationFinding): number;
5
+ remediationPriority(finding: VerificationFinding, trust: TrustEntry): number;
6
+ shouldSkipVerification(trust: TrustEntry, fileChanged: boolean): boolean;
7
+ prioritize(findings: VerificationFinding[], trustMap: Map<string, TrustEntry>): VerificationFinding[];
8
+ }
9
+ //# sourceMappingURL=trust-evaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-evaluator.d.ts","sourceRoot":"","sources":["../../src/trust/trust-evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAQvD,qBAAa,cAAc;IACzB,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM;IAIrD,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM;IAI5E,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO;IAKxE,UAAU,CACR,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAChC,mBAAmB,EAAE;CAYzB"}
@@ -0,0 +1,30 @@
1
+ const SEVERITY_MAP = {
2
+ error: 1.0,
3
+ warning: 0.5,
4
+ info: 0.1,
5
+ };
6
+ export class TrustEvaluator {
7
+ findingSeverity(finding) {
8
+ return SEVERITY_MAP[finding.severity] ?? 0.0;
9
+ }
10
+ remediationPriority(finding, trust) {
11
+ return this.findingSeverity(finding) * (1 - trust.trustScore);
12
+ }
13
+ shouldSkipVerification(trust, fileChanged) {
14
+ if (fileChanged)
15
+ return false;
16
+ return trust.tier === 'senior' || trust.tier === 'principal';
17
+ }
18
+ prioritize(findings, trustMap) {
19
+ const defaultTrust = {
20
+ passCount: 0, failCount: 0, trustScore: 0,
21
+ tier: 'intern', consecutivePasses: 0, lastVerified: 0,
22
+ };
23
+ return [...findings].sort((a, b) => {
24
+ const trustA = trustMap.get(a.file) ?? defaultTrust;
25
+ const trustB = trustMap.get(b.file) ?? defaultTrust;
26
+ return this.remediationPriority(b, trustB) - this.remediationPriority(a, trustA);
27
+ });
28
+ }
29
+ }
30
+ //# sourceMappingURL=trust-evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-evaluator.js","sourceRoot":"","sources":["../../src/trust/trust-evaluator.ts"],"names":[],"mappings":"AAGA,MAAM,YAAY,GAA2B;IAC3C,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,GAAG;IACZ,IAAI,EAAE,GAAG;CACV,CAAC;AAEF,MAAM,OAAO,cAAc;IACzB,eAAe,CAAC,OAA4B;QAC1C,OAAO,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;IAC/C,CAAC;IAED,mBAAmB,CAAC,OAA4B,EAAE,KAAiB;QACjE,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IAChE,CAAC;IAED,sBAAsB,CAAC,KAAiB,EAAE,WAAoB;QAC5D,IAAI,WAAW;YAAE,OAAO,KAAK,CAAC;QAC9B,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC;IAC/D,CAAC;IAED,UAAU,CACR,QAA+B,EAC/B,QAAiC;QAEjC,MAAM,YAAY,GAAe;YAC/B,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;YACzC,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;SACtD,CAAC;QAEF,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC;YACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC;YACpD,OAAO,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import type { TrustEntry, TrustStoreConfig } from './types.js';
2
+ export declare class TrustStore {
3
+ private entries;
4
+ private readonly filePath;
5
+ private readonly promotionThreshold;
6
+ private readonly promotionBonus;
7
+ private readonly demotionPenalty;
8
+ constructor(dir: string, config?: TrustStoreConfig);
9
+ get(file: string): TrustEntry;
10
+ recordPass(file: string): void;
11
+ recordFail(file: string): void;
12
+ getAll(): Map<string, TrustEntry>;
13
+ save(): Promise<void>;
14
+ load(): Promise<void>;
15
+ }
16
+ //# sourceMappingURL=trust-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-store.d.ts","sourceRoot":"","sources":["../../src/trust/trust-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAa,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAS1E,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB;IAOlD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAW7B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAc9B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAW9B,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAI3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAYrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAW5B"}
@@ -0,0 +1,86 @@
1
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ function tierFromScore(score) {
5
+ if (score >= 0.75)
6
+ return 'principal';
7
+ if (score >= 0.50)
8
+ return 'senior';
9
+ if (score >= 0.25)
10
+ return 'junior';
11
+ return 'intern';
12
+ }
13
+ export class TrustStore {
14
+ entries = new Map();
15
+ filePath;
16
+ promotionThreshold;
17
+ promotionBonus;
18
+ demotionPenalty;
19
+ constructor(dir, config) {
20
+ this.filePath = join(dir, 'trust.json');
21
+ this.promotionThreshold = config?.promotionThreshold ?? 5;
22
+ this.promotionBonus = config?.promotionBonus ?? 0.1;
23
+ this.demotionPenalty = config?.demotionPenalty ?? 0.2;
24
+ }
25
+ get(file) {
26
+ const entry = this.entries.get(file);
27
+ if (entry) {
28
+ return { ...entry };
29
+ }
30
+ return {
31
+ passCount: 0, failCount: 0, trustScore: 0,
32
+ tier: 'intern', consecutivePasses: 0, lastVerified: 0,
33
+ };
34
+ }
35
+ recordPass(file) {
36
+ const entry = this.get(file);
37
+ entry.passCount++;
38
+ entry.consecutivePasses++;
39
+ entry.lastVerified = Date.now();
40
+ entry.trustScore = entry.passCount / (entry.passCount + entry.failCount + 1);
41
+ if (entry.consecutivePasses >= this.promotionThreshold) {
42
+ entry.trustScore = Math.min(1.0, entry.trustScore + this.promotionBonus);
43
+ entry.consecutivePasses = 0;
44
+ }
45
+ entry.tier = tierFromScore(entry.trustScore);
46
+ this.entries.set(file, entry);
47
+ }
48
+ recordFail(file) {
49
+ const entry = this.get(file);
50
+ entry.failCount++;
51
+ entry.consecutivePasses = 0;
52
+ entry.lastVerified = Date.now();
53
+ entry.trustScore = entry.passCount / (entry.passCount + entry.failCount + 1);
54
+ entry.trustScore = Math.max(0.0, entry.trustScore - this.demotionPenalty);
55
+ entry.tier = tierFromScore(entry.trustScore);
56
+ this.entries.set(file, entry);
57
+ }
58
+ getAll() {
59
+ return new Map(this.entries);
60
+ }
61
+ async save() {
62
+ const dir = join(this.filePath, '..');
63
+ if (!existsSync(dir)) {
64
+ await mkdir(dir, { recursive: true });
65
+ }
66
+ const obj = {};
67
+ for (const [key, val] of this.entries) {
68
+ obj[key] = val;
69
+ }
70
+ await writeFile(this.filePath, JSON.stringify(obj, null, 2), 'utf-8');
71
+ }
72
+ async load() {
73
+ if (!existsSync(this.filePath))
74
+ return;
75
+ try {
76
+ const raw = await readFile(this.filePath, 'utf-8');
77
+ const obj = JSON.parse(raw);
78
+ this.entries = new Map(Object.entries(obj));
79
+ }
80
+ catch {
81
+ // Corrupted/partially-written trust file — start fresh rather than crash
82
+ this.entries = new Map();
83
+ }
84
+ }
85
+ }
86
+ //# sourceMappingURL=trust-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-store.js","sourceRoot":"","sources":["../../src/trust/trust-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export type TrustTier = 'intern' | 'junior' | 'senior' | 'principal';
2
+ export interface TrustEntry {
3
+ passCount: number;
4
+ failCount: number;
5
+ trustScore: number;
6
+ tier: TrustTier;
7
+ consecutivePasses: number;
8
+ lastVerified: number;
9
+ }
10
+ export interface TrustStoreConfig {
11
+ promotionThreshold?: number;
12
+ promotionBonus?: number;
13
+ demotionPenalty?: number;
14
+ }
15
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/trust/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAErE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/trust/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,132 @@
1
+ import type { PlaybookSnapshot } from '@galileodev/core';
2
+ export type RenderedTemplate = string;
3
+ export interface GuideContext {
4
+ playbook: PlaybookSnapshot;
5
+ template: RenderedTemplate;
6
+ verificationHistory: VerificationFinding[];
7
+ projectConstraints: ProjectConstraint[];
8
+ fileTree?: string[];
9
+ }
10
+ export interface ProjectConstraint {
11
+ id: string;
12
+ rule: string;
13
+ severity: 'error' | 'warning';
14
+ scope?: string;
15
+ }
16
+ export interface GuideOptions {
17
+ maxPlaybookEntries?: number;
18
+ includeFileTree?: boolean;
19
+ fileTreeDepth?: number;
20
+ }
21
+ export interface VerificationFinding {
22
+ verifierId: string;
23
+ severity: 'error' | 'warning' | 'info';
24
+ ruleId: string;
25
+ message: string;
26
+ file: string;
27
+ line: number;
28
+ column?: number;
29
+ suggestedFix?: string;
30
+ risk?: number;
31
+ }
32
+ export interface VerificationReport {
33
+ passed: boolean;
34
+ findings: VerificationFinding[];
35
+ summary: {
36
+ errors: number;
37
+ warnings: number;
38
+ info: number;
39
+ };
40
+ duration: number;
41
+ overallRisk?: number;
42
+ trustSnapshot?: Record<string, import('./trust/types.js').TrustEntry>;
43
+ }
44
+ export interface VerifyTarget {
45
+ workingDir: string;
46
+ files?: string[];
47
+ sandbox: import('@galileodev/core').ExecutionSandbox;
48
+ }
49
+ export interface VerifierPlugin {
50
+ id: string;
51
+ name: string;
52
+ available(): Promise<boolean>;
53
+ run(target: VerifyTarget): Promise<VerificationFinding[]>;
54
+ }
55
+ export interface SolveContext {
56
+ workingDir: string;
57
+ guideContext: GuideContext;
58
+ llm: import('@galileodev/core').LLMProvider;
59
+ sandbox: import('@galileodev/core').ExecutionSandbox;
60
+ verifier: import('./verifier/runner.js').VerifierRunner;
61
+ budget: import('@galileodev/core').TokenBudget;
62
+ maxRetriesPerFinding: number;
63
+ staged?: boolean;
64
+ autoFixTrivial?: boolean;
65
+ certificates?: boolean;
66
+ }
67
+ export interface SolveResult {
68
+ resolved: VerificationFinding[];
69
+ unresolved: VerificationFinding[];
70
+ attempts: RemediationAttempt[];
71
+ reverted: boolean;
72
+ tokensUsed: number;
73
+ }
74
+ export interface RemediationAttempt {
75
+ findingId: string;
76
+ attempt: number;
77
+ hypothesis: string;
78
+ patch: string;
79
+ verificationPassed: boolean;
80
+ tokensUsed: number;
81
+ }
82
+ export interface KarpathyMetric {
83
+ name: string;
84
+ command: string;
85
+ parseOutput(stdout: string): number;
86
+ direction: 'minimize' | 'maximize';
87
+ }
88
+ export interface KarpathyConfig {
89
+ workingDir: string;
90
+ targetFiles: string[];
91
+ metric: KarpathyMetric;
92
+ llm: import('@galileodev/core').LLMProvider;
93
+ sandbox: import('@galileodev/core').ExecutionSandbox;
94
+ verifier: import('./verifier/runner.js').VerifierRunner;
95
+ budget: import('@galileodev/core').TokenBudget;
96
+ maxExperiments: number;
97
+ timeBudgetMs?: number;
98
+ }
99
+ export interface KarpathyResult {
100
+ experiments: KarpathyExperiment[];
101
+ bestScore: number;
102
+ baselineScore: number;
103
+ improved: boolean;
104
+ tokensUsed: number;
105
+ }
106
+ export interface KarpathyExperiment {
107
+ id: number;
108
+ hypothesis: string;
109
+ patch: string;
110
+ score: number;
111
+ verificationPassed: boolean;
112
+ kept: boolean;
113
+ tokensUsed: number;
114
+ }
115
+ export interface ACDCInput {
116
+ taskId: string;
117
+ instruction: string;
118
+ projectDir: string;
119
+ llm: import('@galileodev/core').LLMProvider;
120
+ maxCycles: number;
121
+ budget: import('@galileodev/core').TokenBudget;
122
+ }
123
+ export interface ACDCResult {
124
+ taskId: string;
125
+ generation: import('@galileodev/core').GenerationResult;
126
+ verification: VerificationReport;
127
+ remediation?: SolveResult;
128
+ cycles: number;
129
+ passed: boolean;
130
+ tokensUsed: number;
131
+ }
132
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export interface StripResult {
2
+ stripped: string;
3
+ restorationMap?: Record<string, string>;
4
+ }
5
+ export declare function stripSecrets(content: string, mode?: 'context' | 'remediation'): StripResult;
6
+ //# sourceMappingURL=secret-strip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-strip.d.ts","sourceRoot":"","sources":["../../src/utils/secret-strip.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,SAAS,GAAG,aAA6B,GAC9C,WAAW,CA8Bb"}