tryassay 0.29.0 → 0.31.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/dist/cli.js +21 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/catalog-push.d.ts +7 -0
- package/dist/commands/catalog-push.js +47 -0
- package/dist/commands/catalog-push.js.map +1 -0
- package/dist/commands/generate.js +1 -0
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/harvest.d.ts +9 -0
- package/dist/commands/harvest.js +76 -0
- package/dist/commands/harvest.js.map +1 -0
- package/dist/lib/__tests__/learned-rules.test.d.ts +1 -0
- package/dist/lib/__tests__/learned-rules.test.js +260 -0
- package/dist/lib/__tests__/learned-rules.test.js.map +1 -0
- package/dist/lib/__tests__/pr-harvester-types.test.d.ts +1 -0
- package/dist/lib/__tests__/pr-harvester-types.test.js +43 -0
- package/dist/lib/__tests__/pr-harvester-types.test.js.map +1 -0
- package/dist/lib/__tests__/pr-harvester.test.d.ts +1 -0
- package/dist/lib/__tests__/pr-harvester.test.js +341 -0
- package/dist/lib/__tests__/pr-harvester.test.js.map +1 -0
- package/dist/lib/__tests__/rule-harvester.test.d.ts +1 -0
- package/dist/lib/__tests__/rule-harvester.test.js +526 -0
- package/dist/lib/__tests__/rule-harvester.test.js.map +1 -0
- package/dist/lib/learned-rules/category-map.d.ts +28 -0
- package/dist/lib/learned-rules/category-map.js +110 -0
- package/dist/lib/learned-rules/category-map.js.map +1 -0
- package/dist/lib/learned-rules/index.d.ts +107 -0
- package/dist/lib/learned-rules/index.js +198 -0
- package/dist/lib/learned-rules/index.js.map +1 -0
- package/dist/lib/learned-rules/learned-catalog.d.ts +62 -0
- package/dist/lib/learned-rules/learned-catalog.js +161 -0
- package/dist/lib/learned-rules/learned-catalog.js.map +1 -0
- package/dist/lib/learned-rules/pattern-extractor.d.ts +25 -0
- package/dist/lib/learned-rules/pattern-extractor.js +351 -0
- package/dist/lib/learned-rules/pattern-extractor.js.map +1 -0
- package/dist/lib/learned-rules/rule-codifier.d.ts +41 -0
- package/dist/lib/learned-rules/rule-codifier.js +138 -0
- package/dist/lib/learned-rules/rule-codifier.js.map +1 -0
- package/dist/lib/learned-rules/starter-catalog.d.ts +16 -0
- package/dist/lib/learned-rules/starter-catalog.js +402 -0
- package/dist/lib/learned-rules/starter-catalog.js.map +1 -0
- package/dist/lib/learned-rules/types.d.ts +196 -0
- package/dist/lib/learned-rules/types.js +9 -0
- package/dist/lib/learned-rules/types.js.map +1 -0
- package/dist/lib/learned-rules/validation-harness.d.ts +26 -0
- package/dist/lib/learned-rules/validation-harness.js +260 -0
- package/dist/lib/learned-rules/validation-harness.js.map +1 -0
- package/dist/lib/rule-harvester/diff-parser.d.ts +9 -0
- package/dist/lib/rule-harvester/diff-parser.js +77 -0
- package/dist/lib/rule-harvester/diff-parser.js.map +1 -0
- package/dist/lib/rule-harvester/file-selector.d.ts +10 -0
- package/dist/lib/rule-harvester/file-selector.js +59 -0
- package/dist/lib/rule-harvester/file-selector.js.map +1 -0
- package/dist/lib/rule-harvester/ground-truth.d.ts +19 -0
- package/dist/lib/rule-harvester/ground-truth.js +156 -0
- package/dist/lib/rule-harvester/ground-truth.js.map +1 -0
- package/dist/lib/rule-harvester/harvest.d.ts +26 -0
- package/dist/lib/rule-harvester/harvest.js +307 -0
- package/dist/lib/rule-harvester/harvest.js.map +1 -0
- package/dist/lib/rule-harvester/pr-discovery.d.ts +49 -0
- package/dist/lib/rule-harvester/pr-discovery.js +168 -0
- package/dist/lib/rule-harvester/pr-discovery.js.map +1 -0
- package/dist/lib/rule-harvester/pr-harvest.d.ts +53 -0
- package/dist/lib/rule-harvester/pr-harvest.js +326 -0
- package/dist/lib/rule-harvester/pr-harvest.js.map +1 -0
- package/dist/lib/rule-harvester/progress.d.ts +13 -0
- package/dist/lib/rule-harvester/progress.js +50 -0
- package/dist/lib/rule-harvester/progress.js.map +1 -0
- package/dist/lib/rule-harvester/reporter.d.ts +35 -0
- package/dist/lib/rule-harvester/reporter.js +46 -0
- package/dist/lib/rule-harvester/reporter.js.map +1 -0
- package/dist/lib/rule-harvester/rule-generalizer.d.ts +25 -0
- package/dist/lib/rule-harvester/rule-generalizer.js +135 -0
- package/dist/lib/rule-harvester/rule-generalizer.js.map +1 -0
- package/dist/lib/rule-harvester/scanner.d.ts +20 -0
- package/dist/lib/rule-harvester/scanner.js +37 -0
- package/dist/lib/rule-harvester/scanner.js.map +1 -0
- package/dist/sdk/api-client.d.ts +65 -0
- package/dist/sdk/api-client.js +41 -0
- package/dist/sdk/api-client.js.map +1 -0
- package/dist/sdk/forward-verify.d.ts +3 -1
- package/dist/sdk/forward-verify.js +138 -5
- package/dist/sdk/forward-verify.js.map +1 -1
- package/dist/sdk/index.d.ts +1 -1
- package/dist/sdk/types.d.ts +21 -0
- package/package.json +1 -1
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rule Generalizer — Uses LLM to generalize PR diff hunks into reusable
|
|
3
|
+
* code quality rules for the Assay catalog.
|
|
4
|
+
*
|
|
5
|
+
* Given a before/after diff hunk (and optional reviewer comment), the LLM
|
|
6
|
+
* produces a GeneralizedRule with detection regex, fix description, severity,
|
|
7
|
+
* and provenance. The rule is then mapped to an ExtractedPattern for catalog
|
|
8
|
+
* ingestion.
|
|
9
|
+
*/
|
|
10
|
+
import { getProvider } from '../llm-provider.js';
|
|
11
|
+
import { normalizeCategory } from '../learned-rules/category-map.js';
|
|
12
|
+
const SYSTEM_PROMPT = `You are a code quality pattern extractor. Given a before/after code diff from a merged PR, generalize the fix into a reusable detection rule.
|
|
13
|
+
|
|
14
|
+
Respond with a JSON object (no markdown, no explanation) with these fields:
|
|
15
|
+
- category: string — bug category (e.g., "null-safety", "error-handling", "type-safety", "security", "performance")
|
|
16
|
+
- severity: "low" | "medium" | "high" | "critical"
|
|
17
|
+
- description: string — human-readable description of the pattern
|
|
18
|
+
- detection: { pattern: string (regex), language: string }
|
|
19
|
+
- fix: { description: string, pattern: string (regex replacement) }
|
|
20
|
+
- fileGlob: string — glob for files to scan (e.g., "**/*.ts")
|
|
21
|
+
- matchBehavior: "presence_is_bad" | "absence_is_bad"
|
|
22
|
+
- evidenceTemplate: string — template using {match}, {file}, {line}
|
|
23
|
+
|
|
24
|
+
If the change is too context-specific to generalize (e.g., a variable rename, config tweak, or purely cosmetic), respond with: {"skip": true}
|
|
25
|
+
|
|
26
|
+
Respond with JSON only.`;
|
|
27
|
+
/**
|
|
28
|
+
* Build the user prompt for the LLM generalization call.
|
|
29
|
+
*/
|
|
30
|
+
export function buildGeneralizationPrompt(hunk, repo, prNumber, prTitle, reviewComment) {
|
|
31
|
+
const before = hunk.removedLines.join('\n');
|
|
32
|
+
const after = hunk.addedLines.join('\n');
|
|
33
|
+
const ctx = hunk.context.length > 0
|
|
34
|
+
? `\nSurrounding context:\n${hunk.context.join('\n')}`
|
|
35
|
+
: '';
|
|
36
|
+
let prompt = `Repository: ${repo}
|
|
37
|
+
PR #${prNumber}: ${prTitle}
|
|
38
|
+
File: ${hunk.file} (line ${hunk.startLine})
|
|
39
|
+
|
|
40
|
+
Before:
|
|
41
|
+
${before}
|
|
42
|
+
|
|
43
|
+
After:
|
|
44
|
+
${after}${ctx}`;
|
|
45
|
+
if (reviewComment) {
|
|
46
|
+
prompt += `\n\nReviewer comment:\n${reviewComment}`;
|
|
47
|
+
}
|
|
48
|
+
return prompt;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Call the LLM to generalize a diff hunk into a reusable rule.
|
|
52
|
+
* Returns null if the hunk is too context-specific, parse fails,
|
|
53
|
+
* or all retries are exhausted.
|
|
54
|
+
*/
|
|
55
|
+
export async function generalizeHunk(hunk, repo, prNumber, prTitle, reviewComment) {
|
|
56
|
+
const provider = getProvider();
|
|
57
|
+
const model = process.env.ASSAY_OLLAMA_MODEL ?? 'qwen3.5:122b';
|
|
58
|
+
const userPrompt = buildGeneralizationPrompt(hunk, repo, prNumber, prTitle, reviewComment);
|
|
59
|
+
const MAX_RETRIES = 3;
|
|
60
|
+
const BASE_DELAY_MS = 2000;
|
|
61
|
+
for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
|
|
62
|
+
try {
|
|
63
|
+
const result = await Promise.race([
|
|
64
|
+
provider.complete({
|
|
65
|
+
model,
|
|
66
|
+
systemPrompt: SYSTEM_PROMPT,
|
|
67
|
+
userPrompt,
|
|
68
|
+
maxTokens: 2000,
|
|
69
|
+
}),
|
|
70
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('LLM timeout')), 60_000)),
|
|
71
|
+
]);
|
|
72
|
+
const parsed = JSON.parse(result.content);
|
|
73
|
+
// Skip response — hunk is too context-specific
|
|
74
|
+
if (parsed.skip)
|
|
75
|
+
return null;
|
|
76
|
+
// Validate required fields
|
|
77
|
+
if (!parsed.category ||
|
|
78
|
+
!parsed.description ||
|
|
79
|
+
!parsed.detection?.pattern ||
|
|
80
|
+
!parsed.detection?.language) {
|
|
81
|
+
throw new Error('Missing required fields in LLM response');
|
|
82
|
+
}
|
|
83
|
+
const rule = {
|
|
84
|
+
category: parsed.category,
|
|
85
|
+
severity: parsed.severity ?? 'medium',
|
|
86
|
+
description: parsed.description,
|
|
87
|
+
detection: {
|
|
88
|
+
pattern: parsed.detection.pattern,
|
|
89
|
+
language: parsed.detection.language,
|
|
90
|
+
},
|
|
91
|
+
fix: {
|
|
92
|
+
description: parsed.fix?.description ?? '',
|
|
93
|
+
pattern: parsed.fix?.pattern ?? '',
|
|
94
|
+
},
|
|
95
|
+
fileGlob: parsed.fileGlob ?? '',
|
|
96
|
+
matchBehavior: parsed.matchBehavior ?? 'presence_is_bad',
|
|
97
|
+
evidenceTemplate: parsed.evidenceTemplate ?? '{match} in {file}',
|
|
98
|
+
provenance: {
|
|
99
|
+
repo,
|
|
100
|
+
pr: prNumber,
|
|
101
|
+
file: hunk.file,
|
|
102
|
+
...(reviewComment ? { reviewComment } : {}),
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
return rule;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// Exponential backoff before retry
|
|
109
|
+
if (attempt < MAX_RETRIES - 1) {
|
|
110
|
+
await new Promise((resolve) => setTimeout(resolve, BASE_DELAY_MS * Math.pow(2, attempt)));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Map a GeneralizedRule to an ExtractedPattern for catalog ingestion.
|
|
118
|
+
*/
|
|
119
|
+
export function mapToExtractedPattern(rule, patternId) {
|
|
120
|
+
// Coerce 'low' to 'medium' — ExtractedPattern doesn't support 'low'
|
|
121
|
+
const severity = rule.severity === 'low' ? 'medium' : rule.severity;
|
|
122
|
+
return {
|
|
123
|
+
id: patternId,
|
|
124
|
+
description: rule.description,
|
|
125
|
+
kind: 'regex',
|
|
126
|
+
languages: [rule.detection.language],
|
|
127
|
+
regexPattern: rule.detection.pattern,
|
|
128
|
+
fileGlob: rule.fileGlob || '**/*.{ts,tsx,js,jsx}',
|
|
129
|
+
matchBehavior: rule.matchBehavior,
|
|
130
|
+
claimCategory: normalizeCategory(rule.category),
|
|
131
|
+
severity,
|
|
132
|
+
evidenceTemplate: rule.evidenceTemplate,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=rule-generalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-generalizer.js","sourceRoot":"","sources":["../../../src/lib/rule-harvester/rule-generalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { CodeClaim, ClaimVerification } from '../../sdk/types.js';
|
|
2
|
+
export interface ScanFailure {
|
|
3
|
+
claimId: string;
|
|
4
|
+
category: string;
|
|
5
|
+
severity: string;
|
|
6
|
+
description: string;
|
|
7
|
+
assertion: string;
|
|
8
|
+
reasoning: string;
|
|
9
|
+
method: 'formal' | 'llm';
|
|
10
|
+
}
|
|
11
|
+
export interface ScanResult {
|
|
12
|
+
totalClaims: number;
|
|
13
|
+
failures: ScanFailure[];
|
|
14
|
+
}
|
|
15
|
+
export declare function buildScanResult(claims: CodeClaim[], verifications: ClaimVerification[]): ScanResult;
|
|
16
|
+
export declare function scanFile(code: string, language: string): Promise<{
|
|
17
|
+
result: ScanResult;
|
|
18
|
+
claims: CodeClaim[];
|
|
19
|
+
verifications: ClaimVerification[];
|
|
20
|
+
}>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { extractCodeClaims, verifyCodeClaims, applyFormalVerification, } from '../../sdk/forward-verify.js';
|
|
2
|
+
export function buildScanResult(claims, verifications) {
|
|
3
|
+
const claimById = new Map(claims.map((c) => [c.id, c]));
|
|
4
|
+
const failures = verifications
|
|
5
|
+
.filter((v) => v.verdict === 'FAIL' || v.verdict === 'PARTIAL')
|
|
6
|
+
.map((v) => {
|
|
7
|
+
const claim = claimById.get(v.claimId);
|
|
8
|
+
return {
|
|
9
|
+
claimId: v.claimId,
|
|
10
|
+
category: claim?.category ?? 'unknown',
|
|
11
|
+
severity: claim?.severity ?? 'unknown',
|
|
12
|
+
description: claim?.description ?? '',
|
|
13
|
+
assertion: claim?.assertion ?? '',
|
|
14
|
+
reasoning: v.reasoning,
|
|
15
|
+
method: v.method,
|
|
16
|
+
};
|
|
17
|
+
});
|
|
18
|
+
return { totalClaims: claims.length, failures };
|
|
19
|
+
}
|
|
20
|
+
export async function scanFile(code, language) {
|
|
21
|
+
const { claims } = await extractCodeClaims(code, language);
|
|
22
|
+
if (claims.length === 0) {
|
|
23
|
+
return {
|
|
24
|
+
result: { totalClaims: 0, failures: [] },
|
|
25
|
+
claims: [],
|
|
26
|
+
verifications: [],
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
const { verifications: llmVerifications } = await verifyCodeClaims(code, language, claims);
|
|
30
|
+
const { verifications } = applyFormalVerification(code, language, claims, llmVerifications);
|
|
31
|
+
return {
|
|
32
|
+
result: buildScanResult(claims, verifications),
|
|
33
|
+
claims,
|
|
34
|
+
verifications,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/lib/rule-harvester/scanner.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AAiBrC,MAAM,UAAU,eAAe,CAC7B,MAAmB,EACnB,aAAkC;IAElC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAoB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3E,MAAM,QAAQ,GAAkB,aAAa;SAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC;SAC9D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO;YACL,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,QAAQ,EAAE,KAAK,EAAE,QAAQ,IAAI,SAAS;YACtC,QAAQ,EAAE,KAAK,EAAE,QAAQ,IAAI,SAAS;YACtC,WAAW,EAAE,KAAK,EAAE,WAAW,IAAI,EAAE;YACrC,SAAS,EAAE,KAAK,EAAE,SAAS,IAAI,EAAE;YACjC,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,MAAM,EAAE,CAAC,CAAC,MAAM;SACjB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEL,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAY,EACZ,QAAgB;IAMhB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAE3D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO;YACL,MAAM,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACxC,MAAM,EAAE,EAAE;YACV,aAAa,EAAE,EAAE;SAClB,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE3F,MAAM,EAAE,aAAa,EAAE,GAAG,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAE5F,OAAO;QACL,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC;QAC9C,MAAM;QACN,aAAa;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Assay API Client — calls POST /api/v1/forward on the Assay server.
|
|
3
|
+
*
|
|
4
|
+
* Used when ASSAY_API_KEY is set. Falls back to null on any error
|
|
5
|
+
* so the caller can switch to the local pipeline.
|
|
6
|
+
*/
|
|
7
|
+
export interface AssayApiResponse {
|
|
8
|
+
request_id: string;
|
|
9
|
+
claims: {
|
|
10
|
+
count: number;
|
|
11
|
+
items: Array<{
|
|
12
|
+
id: string;
|
|
13
|
+
category: string;
|
|
14
|
+
severity: string;
|
|
15
|
+
description: string;
|
|
16
|
+
assertion: string;
|
|
17
|
+
}>;
|
|
18
|
+
};
|
|
19
|
+
verification: {
|
|
20
|
+
passed: number;
|
|
21
|
+
failed: number;
|
|
22
|
+
partial: number;
|
|
23
|
+
total: number;
|
|
24
|
+
items: Array<{
|
|
25
|
+
claimId: string;
|
|
26
|
+
verdict: string;
|
|
27
|
+
reasoning: string;
|
|
28
|
+
evidence?: string;
|
|
29
|
+
verification_method?: string;
|
|
30
|
+
formal_override?: {
|
|
31
|
+
original_llm_verdict: string;
|
|
32
|
+
formal_verdict: string;
|
|
33
|
+
reason: string;
|
|
34
|
+
};
|
|
35
|
+
}>;
|
|
36
|
+
formal?: {
|
|
37
|
+
formally_verified: number;
|
|
38
|
+
llm_verified: number;
|
|
39
|
+
disagreements: number;
|
|
40
|
+
formal_overrides: number;
|
|
41
|
+
};
|
|
42
|
+
learnedRuleFindings?: Array<{
|
|
43
|
+
ruleId: string;
|
|
44
|
+
description: string;
|
|
45
|
+
severity: 'critical' | 'high' | 'medium';
|
|
46
|
+
category: string;
|
|
47
|
+
evidence: string;
|
|
48
|
+
matches: string[];
|
|
49
|
+
confidence: number;
|
|
50
|
+
}>;
|
|
51
|
+
learnedRuleCount?: number;
|
|
52
|
+
};
|
|
53
|
+
usage: {
|
|
54
|
+
input_tokens: number;
|
|
55
|
+
output_tokens: number;
|
|
56
|
+
duration_ms: number;
|
|
57
|
+
pipeline_calls: number;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Call the Assay API for full verification (LLM + formal + learned rules).
|
|
62
|
+
*
|
|
63
|
+
* Returns null on any error — caller should fall back to local pipeline.
|
|
64
|
+
*/
|
|
65
|
+
export declare function callAssayApi(code: string, language: string, context?: string): Promise<AssayApiResponse | null>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Assay API Client — calls POST /api/v1/forward on the Assay server.
|
|
3
|
+
*
|
|
4
|
+
* Used when ASSAY_API_KEY is set. Falls back to null on any error
|
|
5
|
+
* so the caller can switch to the local pipeline.
|
|
6
|
+
*/
|
|
7
|
+
const ASSAY_API_BASE = process.env.ASSAY_API_URL ?? 'https://api.trylucid.dev';
|
|
8
|
+
/**
|
|
9
|
+
* Call the Assay API for full verification (LLM + formal + learned rules).
|
|
10
|
+
*
|
|
11
|
+
* Returns null on any error — caller should fall back to local pipeline.
|
|
12
|
+
*/
|
|
13
|
+
export async function callAssayApi(code, language, context) {
|
|
14
|
+
const apiKey = process.env.ASSAY_API_KEY;
|
|
15
|
+
if (!apiKey)
|
|
16
|
+
return null;
|
|
17
|
+
try {
|
|
18
|
+
const body = { code, language };
|
|
19
|
+
if (context)
|
|
20
|
+
body.context = context;
|
|
21
|
+
const resp = await fetch(`${ASSAY_API_BASE}/api/v1/forward`, {
|
|
22
|
+
method: 'POST',
|
|
23
|
+
headers: {
|
|
24
|
+
'Content-Type': 'application/json',
|
|
25
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
26
|
+
},
|
|
27
|
+
body: JSON.stringify(body),
|
|
28
|
+
signal: AbortSignal.timeout(120_000),
|
|
29
|
+
});
|
|
30
|
+
if (!resp.ok) {
|
|
31
|
+
console.error(`[api-client] Assay API returned ${resp.status}`);
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
return await resp.json();
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
console.error(`[api-client] Assay API error: ${err instanceof Error ? err.message : String(err)}`);
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/sdk/api-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,0BAA0B,CAAC;AAqD/E;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,QAAgB,EAChB,OAAgB;IAEhB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IACzC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,IAAI,CAAC;QACH,MAAM,IAAI,GAA2B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACxD,IAAI,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEpC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,cAAc,iBAAiB,EAAE;YAC3D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,MAAM,EAAE;aACpC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;SACrC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,mCAAmC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,IAAI,EAAsB,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnG,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ScanSession } from '../lib/learned-rules/index.js';
|
|
1
2
|
import type { CodeClaim, ClaimVerification, FormalStats, VerificationResult } from './types.js';
|
|
2
3
|
export declare function extractCodeClaims(code: string, language: string, context?: string): Promise<{
|
|
3
4
|
claims: CodeClaim[];
|
|
@@ -13,7 +14,8 @@ export declare function applyFormalVerification(code: string, language: string,
|
|
|
13
14
|
verifications: ClaimVerification[];
|
|
14
15
|
formalStats: FormalStats;
|
|
15
16
|
};
|
|
16
|
-
export
|
|
17
|
+
export { ScanSession, type ScanSessionStats } from '../lib/learned-rules/index.js';
|
|
18
|
+
export declare function forwardVerify(code: string, language: string, context?: string, session?: ScanSession): Promise<{
|
|
17
19
|
result: VerificationResult;
|
|
18
20
|
inputTokens: number;
|
|
19
21
|
outputTokens: number;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { MODEL } from '../lib/anthropic.js';
|
|
2
2
|
import { getProvider } from '../lib/llm-provider.js';
|
|
3
3
|
import { runFormalVerification, } from '../lib/formal-verifier.js';
|
|
4
|
+
import { runLearnedRules, learnFromFinding, } from '../lib/learned-rules/index.js';
|
|
5
|
+
import { callAssayApi } from './api-client.js';
|
|
4
6
|
// ── System Prompts (ported from api/v1/forward.ts) ───────────
|
|
5
7
|
const EXTRACTION_SYSTEM = `You are a code quality auditor. Given source code, extract every testable claim the code makes about its behavior.
|
|
6
8
|
|
|
@@ -190,8 +192,79 @@ export function applyFormalVerification(code, language, claims, llmVerifications
|
|
|
190
192
|
};
|
|
191
193
|
return { verifications, formalStats };
|
|
192
194
|
}
|
|
195
|
+
// ── API Response → SDK Result Bridge ────────────────────────
|
|
196
|
+
function apiResponseToResult(resp) {
|
|
197
|
+
const claims = resp.claims.items.map((c, i) => ({
|
|
198
|
+
id: c.id || `CLAIM-${String(i + 1).padStart(3, '0')}`,
|
|
199
|
+
category: c.category || 'correctness',
|
|
200
|
+
severity: c.severity || 'medium',
|
|
201
|
+
description: c.description,
|
|
202
|
+
assertion: c.assertion,
|
|
203
|
+
}));
|
|
204
|
+
const verifications = resp.verification.items.map(v => ({
|
|
205
|
+
claimId: v.claimId,
|
|
206
|
+
verdict: v.verdict || 'N/A',
|
|
207
|
+
reasoning: v.reasoning,
|
|
208
|
+
method: v.verification_method || 'llm',
|
|
209
|
+
formalOverride: v.formal_override
|
|
210
|
+
? {
|
|
211
|
+
originalLlmVerdict: v.formal_override.original_llm_verdict,
|
|
212
|
+
formalVerdict: v.formal_override.formal_verdict,
|
|
213
|
+
reason: v.formal_override.reason,
|
|
214
|
+
}
|
|
215
|
+
: undefined,
|
|
216
|
+
}));
|
|
217
|
+
const formalStats = {
|
|
218
|
+
formallyVerified: resp.verification.formal?.formally_verified ?? 0,
|
|
219
|
+
llmVerified: resp.verification.formal?.llm_verified ?? 0,
|
|
220
|
+
disagreements: resp.verification.formal?.disagreements ?? 0,
|
|
221
|
+
formalOverrides: resp.verification.formal?.formal_overrides ?? 0,
|
|
222
|
+
learnedRuleFindings: resp.verification.learnedRuleFindings?.length ?? 0,
|
|
223
|
+
};
|
|
224
|
+
const learnedCount = resp.verification.learnedRuleFindings?.length ?? 0;
|
|
225
|
+
const formalFromVerifier = verifications.filter(v => v.method === 'formal').length;
|
|
226
|
+
const formalClaimsVerified = formalFromVerifier + learnedCount;
|
|
227
|
+
const totalClaimsProcessed = verifications.length + learnedCount;
|
|
228
|
+
const llmClaimsVerified = totalClaimsProcessed - formalClaimsVerified;
|
|
229
|
+
const formalCoverage = {
|
|
230
|
+
formalClaimsVerified,
|
|
231
|
+
llmClaimsVerified,
|
|
232
|
+
totalClaims: totalClaimsProcessed,
|
|
233
|
+
formalPercent: totalClaimsProcessed > 0
|
|
234
|
+
? Math.round((formalClaimsVerified / totalClaimsProcessed) * 1000) / 10
|
|
235
|
+
: 0,
|
|
236
|
+
};
|
|
237
|
+
return {
|
|
238
|
+
claims,
|
|
239
|
+
verifications,
|
|
240
|
+
formalStats,
|
|
241
|
+
formalCoverage,
|
|
242
|
+
passed: resp.verification.passed,
|
|
243
|
+
failed: resp.verification.failed,
|
|
244
|
+
partial: resp.verification.partial,
|
|
245
|
+
total: resp.verification.total,
|
|
246
|
+
allPassed: resp.verification.failed === 0 && resp.verification.partial === 0,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
193
249
|
// ── Orchestrator ─────────────────────────────────────────────
|
|
194
|
-
export
|
|
250
|
+
// Re-export ScanSession so SDK callers can create one across multiple verify calls
|
|
251
|
+
export { ScanSession } from '../lib/learned-rules/index.js';
|
|
252
|
+
export async function forwardVerify(code, language, context, session) {
|
|
253
|
+
// API-first path: if ASSAY_API_KEY is set, use the Assay API
|
|
254
|
+
// which runs the full rule catalog server-side.
|
|
255
|
+
if (process.env.ASSAY_API_KEY) {
|
|
256
|
+
const apiResponse = await callAssayApi(code, language, context);
|
|
257
|
+
if (apiResponse) {
|
|
258
|
+
const result = apiResponseToResult(apiResponse);
|
|
259
|
+
return {
|
|
260
|
+
result,
|
|
261
|
+
inputTokens: apiResponse.usage.input_tokens,
|
|
262
|
+
outputTokens: apiResponse.usage.output_tokens,
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
// API failed — fall through to local pipeline
|
|
266
|
+
console.warn('[forward-verify] Assay API unavailable, falling back to local pipeline');
|
|
267
|
+
}
|
|
195
268
|
let totalIn = 0;
|
|
196
269
|
let totalOut = 0;
|
|
197
270
|
// Phase 1: Extract claims
|
|
@@ -204,18 +277,78 @@ export async function forwardVerify(code, language, context) {
|
|
|
204
277
|
totalOut += verifyOut;
|
|
205
278
|
// Phase 2.5: Formal verification with override
|
|
206
279
|
const { verifications, formalStats } = applyFormalVerification(code, language, claims, llmVerifications);
|
|
280
|
+
// Phase 2.75: Run learned rules (self-expanding formal verification)
|
|
281
|
+
// If a ScanSession is provided, record this file and pass it through
|
|
282
|
+
// so noisy rules (>30% fire rate after 5+ files) get suppressed.
|
|
283
|
+
if (session)
|
|
284
|
+
session.recordFile();
|
|
285
|
+
let learnedRuleFindings = [];
|
|
286
|
+
try {
|
|
287
|
+
learnedRuleFindings = await runLearnedRules(process.cwd(), code, language, session);
|
|
288
|
+
}
|
|
289
|
+
catch {
|
|
290
|
+
// Learned rules are additive — failures don't block the pipeline
|
|
291
|
+
}
|
|
292
|
+
// Phase 2.8: Feed confirmed failures back to the learning system
|
|
293
|
+
// (async, non-blocking — doesn't slow down the current scan)
|
|
294
|
+
const confirmedFailures = verifications.filter(v => v.verdict === 'FAIL' && v.method === 'formal');
|
|
295
|
+
if (confirmedFailures.length > 0) {
|
|
296
|
+
for (const failure of confirmedFailures) {
|
|
297
|
+
const matchingClaim = claims.find(c => c.id === failure.claimId);
|
|
298
|
+
if (!matchingClaim)
|
|
299
|
+
continue;
|
|
300
|
+
learnFromFinding(process.cwd(), {
|
|
301
|
+
claim: {
|
|
302
|
+
id: matchingClaim.id,
|
|
303
|
+
category: matchingClaim.category,
|
|
304
|
+
severity: matchingClaim.severity,
|
|
305
|
+
description: matchingClaim.description,
|
|
306
|
+
assertion: matchingClaim.assertion,
|
|
307
|
+
},
|
|
308
|
+
verification: {
|
|
309
|
+
verdict: 'FAIL',
|
|
310
|
+
reasoning: failure.reasoning,
|
|
311
|
+
},
|
|
312
|
+
code,
|
|
313
|
+
language,
|
|
314
|
+
filePath: 'unknown', // File path not available at this level
|
|
315
|
+
}).catch(() => { });
|
|
316
|
+
}
|
|
317
|
+
}
|
|
207
318
|
const passed = verifications.filter(v => v.verdict === 'PASS').length;
|
|
208
319
|
const failed = verifications.filter(v => v.verdict === 'FAIL').length;
|
|
209
320
|
const partial = verifications.filter(v => v.verdict === 'PARTIAL').length;
|
|
321
|
+
// Include learned rule findings in the total count
|
|
322
|
+
const learnedFailed = learnedRuleFindings.length;
|
|
323
|
+
// Compute formal coverage ratio — the key 10x roadmap metric.
|
|
324
|
+
// "Formal" = deterministic formal verifier (method: 'formal') + learned rules.
|
|
325
|
+
// "LLM" = everything else (method: 'llm' without formal override).
|
|
326
|
+
const formalFromVerifier = verifications.filter(v => v.method === 'formal').length;
|
|
327
|
+
const formalClaimsVerified = formalFromVerifier + learnedFailed;
|
|
328
|
+
const totalClaimsProcessed = verifications.length + learnedFailed;
|
|
329
|
+
const llmClaimsVerified = totalClaimsProcessed - formalClaimsVerified;
|
|
330
|
+
const formalCoverage = {
|
|
331
|
+
formalClaimsVerified,
|
|
332
|
+
llmClaimsVerified,
|
|
333
|
+
totalClaims: totalClaimsProcessed,
|
|
334
|
+
formalPercent: totalClaimsProcessed > 0
|
|
335
|
+
? Math.round((formalClaimsVerified / totalClaimsProcessed) * 1000) / 10
|
|
336
|
+
: 0,
|
|
337
|
+
};
|
|
210
338
|
const result = {
|
|
211
339
|
claims,
|
|
212
340
|
verifications,
|
|
213
|
-
formalStats
|
|
341
|
+
formalStats: {
|
|
342
|
+
...formalStats,
|
|
343
|
+
learnedRuleFindings: learnedFailed,
|
|
344
|
+
...(session ? { noiseFilter: session.stats() } : {}),
|
|
345
|
+
},
|
|
346
|
+
formalCoverage,
|
|
214
347
|
passed,
|
|
215
|
-
failed,
|
|
348
|
+
failed: failed + learnedFailed,
|
|
216
349
|
partial,
|
|
217
|
-
total: verifications.length,
|
|
218
|
-
allPassed: failed === 0 && partial === 0,
|
|
350
|
+
total: verifications.length + learnedFailed,
|
|
351
|
+
allPassed: failed === 0 && partial === 0 && learnedFailed === 0,
|
|
219
352
|
};
|
|
220
353
|
return { result, inputTokens: totalIn, outputTokens: totalOut };
|
|
221
354
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forward-verify.js","sourceRoot":"","sources":["../../src/sdk/forward-verify.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"forward-verify.js","sourceRoot":"","sources":["../../src/sdk/forward-verify.ts"],"names":[],"mappings":"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"}
|
package/dist/sdk/index.d.ts
CHANGED
|
@@ -5,4 +5,4 @@ export declare class AssaySDK {
|
|
|
5
5
|
generate(options: GenerateOptions): Promise<VerifiedCode>;
|
|
6
6
|
verify(options: VerifyOptions): Promise<VerificationResult>;
|
|
7
7
|
}
|
|
8
|
-
export type { AssaySDKConfig, GenerateOptions, VerifyOptions, VerifiedCode, VerificationResult, CodeClaim, ClaimVerdict, ClaimVerification, FormalStats, ProgressEvent, } from './types.js';
|
|
8
|
+
export type { AssaySDKConfig, GenerateOptions, VerifyOptions, VerifiedCode, VerificationResult, CodeClaim, ClaimVerdict, ClaimVerification, FormalStats, FormalCoverage, ProgressEvent, } from './types.js';
|
package/dist/sdk/types.d.ts
CHANGED
|
@@ -45,11 +45,32 @@ export interface FormalStats {
|
|
|
45
45
|
llmVerified: number;
|
|
46
46
|
disagreements: number;
|
|
47
47
|
formalOverrides: number;
|
|
48
|
+
/** Findings from auto-generated learned rules (Phase 1 self-expanding). */
|
|
49
|
+
learnedRuleFindings?: number;
|
|
50
|
+
/** Noise filter stats from the ScanSession, if one was provided. */
|
|
51
|
+
noiseFilter?: {
|
|
52
|
+
filesScanned: number;
|
|
53
|
+
suppressedRules: string[];
|
|
54
|
+
fireCounts: Record<string, number>;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/** Tracks the LLM/formal verification ratio — the key metric for the 10x roadmap. */
|
|
58
|
+
export interface FormalCoverage {
|
|
59
|
+
/** Claims verified by formal verifier or learned rules (deterministic). */
|
|
60
|
+
formalClaimsVerified: number;
|
|
61
|
+
/** Claims verified only by LLM (non-deterministic). */
|
|
62
|
+
llmClaimsVerified: number;
|
|
63
|
+
/** Total claims processed. */
|
|
64
|
+
totalClaims: number;
|
|
65
|
+
/** Percentage of claims verified formally: (formalClaimsVerified / totalClaims) * 100. */
|
|
66
|
+
formalPercent: number;
|
|
48
67
|
}
|
|
49
68
|
export interface VerificationResult {
|
|
50
69
|
claims: CodeClaim[];
|
|
51
70
|
verifications: ClaimVerification[];
|
|
52
71
|
formalStats: FormalStats;
|
|
72
|
+
/** LLM/formal ratio tracking — measures progress toward 15/85 target. */
|
|
73
|
+
formalCoverage: FormalCoverage;
|
|
53
74
|
passed: number;
|
|
54
75
|
failed: number;
|
|
55
76
|
partial: number;
|