tryassay 0.11.1 → 0.12.1

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.
@@ -0,0 +1,481 @@
1
+ /**
2
+ * Formal Verifier — Deterministic claim verification that can't hallucinate.
3
+ *
4
+ * This is a local copy of api/lib/formal-verifier.ts for use within the SDK.
5
+ * The canonical version lives at api/lib/formal-verifier.ts.
6
+ */
7
+ // ── Preprocessing ────────────────────────────────────────────
8
+ function preprocessCode(code) {
9
+ let result = code;
10
+ result = result.replace(/\/\/.*$/gm, '');
11
+ result = result.replace(/#.*$/gm, match => {
12
+ if (match.startsWith('#!') || match.startsWith('#type:'))
13
+ return match;
14
+ return '';
15
+ });
16
+ result = result.replace(/\/\*[\s\S]*?\*\//g, match => match.replace(/[^\n]/g, ' '));
17
+ result = result.replace(/"""[\s\S]*?"""/g, '"__STR__"');
18
+ result = result.replace(/'''[\s\S]*?'''/g, "'__STR__'");
19
+ result = result.replace(/"(?:[^"\\]|\\.)*"/g, '"__STR__"');
20
+ result = result.replace(/'(?:[^'\\]|\\.)*'/g, "'__STR__'");
21
+ result = result.replace(/`(?:[^`\\]|\\.)*`/g, '`__STR__`');
22
+ return result;
23
+ }
24
+ // ── Claim Classification ─────────────────────────────────────
25
+ function classifyClaim(claim) {
26
+ const text = `${claim.description} ${claim.assertion}`.toLowerCase();
27
+ const originalText = `${claim.description} ${claim.assertion}`;
28
+ const funcExistsMatch = originalText.match(/(?:function|method|class|constructor)\s+['"`]?(\w+)['"`]?\s+(?:exists?|is\s+defined|is\s+declared|should\s+exist)/i);
29
+ if (funcExistsMatch) {
30
+ return { claim, formallyVerifiable: true, checkType: 'function_exists', extractedTarget: funcExistsMatch[1] };
31
+ }
32
+ const funcDefMatch = originalText.match(/(?:defines?|has|contains?|implements?|provides?|declares?)\s+(?:a\s+)?(?:function|method|class)\s+(?:named\s+|called\s+)?['"`]?(\w+)['"`]?/i);
33
+ if (funcDefMatch) {
34
+ return { claim, formallyVerifiable: true, checkType: 'function_exists', extractedTarget: funcDefMatch[1] };
35
+ }
36
+ const funcNameMatch = originalText.match(/(?:Function|Method|Class)\s+['"`]?(\w+)['"`]?\s+(?:exists?|is\s+(?:defined|declared|callable))/i);
37
+ if (funcNameMatch) {
38
+ return { claim, formallyVerifiable: true, checkType: 'function_exists', extractedTarget: funcNameMatch[1] };
39
+ }
40
+ const paramMatch = text.match(/(?:accepts?|takes?|receives?|has)\s+(\d+|two|three|four|five|six|seven|eight|nine|ten)\s+(?:parameters?|arguments?|inputs?)/);
41
+ if (paramMatch) {
42
+ const funcForParams = originalText.match(/(\w+)\s+(?:accepts?|takes?|receives?|has)\s+/i)
43
+ || originalText.match(/(?:function|method)\s+['"`]?(\w+)['"`]?/i);
44
+ const funcName = funcForParams?.[1] || '';
45
+ const isCommonWord = /^(function|method|it|the|this|that|each|every|class)$/i.test(funcName);
46
+ return {
47
+ claim,
48
+ formallyVerifiable: true,
49
+ checkType: 'parameter_check',
50
+ extractedTarget: `${isCommonWord ? '' : funcName}:${paramMatch[1]}`,
51
+ };
52
+ }
53
+ if (/(?:parameter|argument)\s+['"`]?(\w+)['"`]?\s+(?:is|of\s+type)/i.test(text)) {
54
+ return { claim, formallyVerifiable: true, checkType: 'parameter_check' };
55
+ }
56
+ if (claim.category === 'error-handling' &&
57
+ /(?:handles?\s+(?:errors?|exceptions?|failures?)|try[\s-]catch|error\s+handling|catches?\s+(?:errors?|exceptions?)|wraps?\s+in\s+try)/i.test(text)) {
58
+ return { claim, formallyVerifiable: true, checkType: 'error_handling' };
59
+ }
60
+ if (/(?:null|undefined|nil|none)\s+(?:check|guard|validation|handling|safety)/i.test(text) ||
61
+ /(?:checks?\s+(?:for\s+)?(?:null|undefined|nil|none))|(?:handles?\s+(?:null|undefined|nil|none))/i.test(text) ||
62
+ /(?:validates?\s+(?:that\s+)?(?:input|parameter|argument)\s+(?:is\s+not\s+)?(?:null|undefined|nil|none))/i.test(text)) {
63
+ return { claim, formallyVerifiable: true, checkType: 'null_check' };
64
+ }
65
+ if (claim.category === 'type-safety' &&
66
+ /(?:type\s+annot|typed\s+(?:as|return)|return\s+type|type-safe|strongly\s+typed)/i.test(text)) {
67
+ return { claim, formallyVerifiable: true, checkType: 'type_annotation' };
68
+ }
69
+ if (claim.category === 'security' &&
70
+ /(?:sql\s+injection|parameterized\s+quer|prepared\s+statement|sql\s+sanitiz|query\s+parameteriz)/i.test(text)) {
71
+ return { claim, formallyVerifiable: true, checkType: 'sql_parameterized' };
72
+ }
73
+ if (/(?:validates?\s+(?:user\s+)?input|input\s+validation|sanitizes?\s+input|validates?\s+(?:before|prior))/i.test(text)) {
74
+ return { claim, formallyVerifiable: true, checkType: 'input_validation' };
75
+ }
76
+ return { claim, formallyVerifiable: false };
77
+ }
78
+ // ── Structural Verifiers ─────────────────────────────────────
79
+ function checkFunctionExists(code, name, language) {
80
+ const clean = preprocessCode(code);
81
+ const patterns = [];
82
+ if (['typescript', 'javascript', 'ts', 'js', 'tsx', 'jsx'].includes(language)) {
83
+ patterns.push(new RegExp(`function\\s+${name}\\s*[(<]`), new RegExp(`(?:const|let|var)\\s+${name}\\s*=\\s*(?:async\\s+)?(?:\\([^)]*\\)|\\w+)\\s*=>`), new RegExp(`(?:const|let|var)\\s+${name}\\s*=\\s*function`), new RegExp(`(?:class)\\s+${name}\\s*[{<]`), new RegExp(`(?:async\\s+)?${name}\\s*\\([^)]*\\)\\s*[:{]`));
84
+ }
85
+ else if (['python', 'py'].includes(language)) {
86
+ patterns.push(new RegExp(`def\\s+${name}\\s*\\(`), new RegExp(`class\\s+${name}\\s*[:(]`), new RegExp(`async\\s+def\\s+${name}\\s*\\(`));
87
+ }
88
+ else if (['go', 'golang'].includes(language)) {
89
+ patterns.push(new RegExp(`func\\s+${name}\\s*\\(`), new RegExp(`func\\s+\\([^)]+\\)\\s+${name}\\s*\\(`));
90
+ }
91
+ else if (['java', 'kotlin', 'scala'].includes(language)) {
92
+ patterns.push(new RegExp(`(?:public|private|protected|static|abstract|final|\\s)+\\s+\\w+\\s+${name}\\s*\\(`), new RegExp(`class\\s+${name}\\s*[{<(]`), new RegExp(`fun\\s+${name}\\s*\\(`), new RegExp(`def\\s+${name}\\s*[:(\\[]`));
93
+ }
94
+ else if (['rust', 'rs'].includes(language)) {
95
+ patterns.push(new RegExp(`fn\\s+${name}\\s*[(<]`), new RegExp(`struct\\s+${name}\\s*[{<]`), new RegExp(`impl\\s+${name}\\s*[{<]`));
96
+ }
97
+ else if (['c', 'cpp', 'c++', 'cxx'].includes(language)) {
98
+ patterns.push(new RegExp(`\\w+\\s+${name}\\s*\\(`), new RegExp(`class\\s+${name}\\s*[{:]`));
99
+ }
100
+ else {
101
+ patterns.push(new RegExp(`(?:function|def|func|fn)\\s+${name}\\s*[(<]`), new RegExp(`(?:class|struct|impl)\\s+${name}\\s*[{<(:]`), new RegExp(`(?:const|let|var)\\s+${name}\\s*=`));
102
+ }
103
+ const found = patterns.some(p => p.test(clean));
104
+ return {
105
+ claimId: '',
106
+ checkType: 'function_exists',
107
+ verdict: found ? 'PASS' : 'FAIL',
108
+ evidence: found
109
+ ? `Declaration of '${name}' found in source code`
110
+ : `No declaration of '${name}' found in source code`,
111
+ confidence: 1,
112
+ };
113
+ }
114
+ function checkErrorHandling(code, language) {
115
+ const clean = preprocessCode(code);
116
+ let hasErrorHandling = false;
117
+ let evidence = '';
118
+ if (['typescript', 'javascript', 'ts', 'js', 'tsx', 'jsx'].includes(language)) {
119
+ const tryCatch = /try\s*\{/.test(clean);
120
+ const catchBlock = /\}\s*catch\s*\(/.test(clean);
121
+ const dotCatch = /\.catch\s*\(/.test(clean);
122
+ const onError = /\.on\s*\(\s*['"`]error['"`]/.test(clean);
123
+ hasErrorHandling = (tryCatch && catchBlock) || dotCatch || onError;
124
+ if (hasErrorHandling) {
125
+ const mechanisms = [];
126
+ if (tryCatch && catchBlock)
127
+ mechanisms.push('try/catch block');
128
+ if (dotCatch)
129
+ mechanisms.push('.catch() handler');
130
+ if (onError)
131
+ mechanisms.push('error event listener');
132
+ evidence = `Error handling found: ${mechanisms.join(', ')}`;
133
+ }
134
+ }
135
+ else if (['python', 'py'].includes(language)) {
136
+ hasErrorHandling = /try\s*:/.test(clean) && /except\s/.test(clean);
137
+ if (hasErrorHandling)
138
+ evidence = 'Error handling found: try/except block';
139
+ }
140
+ else if (['go', 'golang'].includes(language)) {
141
+ hasErrorHandling = /if\s+err\s*!=\s*nil/.test(clean);
142
+ if (hasErrorHandling)
143
+ evidence = 'Error handling found: if err != nil check';
144
+ }
145
+ else if (['java', 'kotlin', 'scala'].includes(language)) {
146
+ hasErrorHandling = /try\s*\{/.test(clean) && /catch\s*\(/.test(clean);
147
+ if (hasErrorHandling)
148
+ evidence = 'Error handling found: try/catch block';
149
+ }
150
+ else if (['rust', 'rs'].includes(language)) {
151
+ hasErrorHandling = /\?\s*;/.test(clean) || /\.unwrap_or/.test(clean) || /match\s+.*\{[^}]*Err/.test(clean);
152
+ if (hasErrorHandling)
153
+ evidence = 'Error handling found: Result/? operator or match on Err';
154
+ }
155
+ else {
156
+ hasErrorHandling = /try\s*[{:]/.test(clean) && /catch|except|rescue/.test(clean);
157
+ if (hasErrorHandling)
158
+ evidence = 'Error handling found: try/catch pattern';
159
+ }
160
+ return {
161
+ claimId: '',
162
+ checkType: 'error_handling',
163
+ verdict: hasErrorHandling ? 'PASS' : 'FAIL',
164
+ evidence: hasErrorHandling ? evidence : 'No error handling patterns found in source code',
165
+ confidence: 1,
166
+ };
167
+ }
168
+ function checkNullHandling(code, language) {
169
+ const clean = preprocessCode(code);
170
+ let hasNullCheck = false;
171
+ let evidence = '';
172
+ if (['typescript', 'javascript', 'ts', 'js', 'tsx', 'jsx'].includes(language)) {
173
+ const patterns = [
174
+ /!==?\s*(?:null|undefined)/.test(clean),
175
+ /===?\s*(?:null|undefined)/.test(clean),
176
+ /typeof\s+\w+\s*[!=]==?\s*['"`]undefined['"`]/.test(clean),
177
+ /\w+\s*\?\.\s*\w+/.test(clean),
178
+ /\?\?\s/.test(clean),
179
+ /if\s*\(\s*!?\s*\w+\s*\)/.test(clean),
180
+ ];
181
+ hasNullCheck = patterns.some(Boolean);
182
+ if (hasNullCheck) {
183
+ const mechanisms = [];
184
+ if (patterns[0] || patterns[1])
185
+ mechanisms.push('null/undefined comparison');
186
+ if (patterns[2])
187
+ mechanisms.push('typeof check');
188
+ if (patterns[3])
189
+ mechanisms.push('optional chaining (?.)');
190
+ if (patterns[4])
191
+ mechanisms.push('nullish coalescing (??)');
192
+ if (patterns[5])
193
+ mechanisms.push('truthy guard');
194
+ evidence = `Null handling found: ${mechanisms.join(', ')}`;
195
+ }
196
+ }
197
+ else if (['python', 'py'].includes(language)) {
198
+ hasNullCheck = /is\s+(?:not\s+)?None/.test(clean) || /if\s+(?:not\s+)?\w+\s*:/.test(clean);
199
+ if (hasNullCheck)
200
+ evidence = 'Null handling found: None check or truthy guard';
201
+ }
202
+ else if (['go', 'golang'].includes(language)) {
203
+ hasNullCheck = /!=\s*nil/.test(clean) || /==\s*nil/.test(clean);
204
+ if (hasNullCheck)
205
+ evidence = 'Null handling found: nil check';
206
+ }
207
+ else {
208
+ hasNullCheck = /(?:null|nil|None|undefined|NULL)\s*[!=]/.test(clean) || /[!=]\s*(?:null|nil|None|undefined|NULL)/.test(clean);
209
+ if (hasNullCheck)
210
+ evidence = 'Null handling found: null comparison pattern';
211
+ }
212
+ return {
213
+ claimId: '',
214
+ checkType: 'null_check',
215
+ verdict: hasNullCheck ? 'PASS' : 'FAIL',
216
+ evidence: hasNullCheck ? evidence : 'No null/undefined handling patterns found in source code',
217
+ confidence: 1,
218
+ };
219
+ }
220
+ function checkTypeAnnotations(code, language) {
221
+ const clean = preprocessCode(code);
222
+ let hasTypes = false;
223
+ let evidence = '';
224
+ if (['typescript', 'ts', 'tsx'].includes(language)) {
225
+ const paramTypes = (clean.match(/:\s*\w+[\w<>\[\]|&\s,]*/g) || []).length;
226
+ const interfaceOrType = /(?:interface|type)\s+\w+/.test(clean);
227
+ const genericTypes = /<\w+>/.test(clean);
228
+ hasTypes = paramTypes > 0 || interfaceOrType;
229
+ if (hasTypes) {
230
+ const details = [];
231
+ if (paramTypes > 0)
232
+ details.push(`${paramTypes} type annotation(s)`);
233
+ if (interfaceOrType)
234
+ details.push('interface/type definitions');
235
+ if (genericTypes)
236
+ details.push('generic types');
237
+ evidence = `Type safety found: ${details.join(', ')}`;
238
+ }
239
+ }
240
+ else if (['python', 'py'].includes(language)) {
241
+ const typeHints = (clean.match(/:\s*(?:int|str|float|bool|list|dict|tuple|set|Optional|Union|List|Dict|Tuple|Set|Any)/gi) || []).length;
242
+ const returnType = /\)\s*->\s*\w+/.test(clean);
243
+ hasTypes = typeHints > 0 || returnType;
244
+ if (hasTypes) {
245
+ const details = [];
246
+ if (typeHints > 0)
247
+ details.push(`${typeHints} type hint(s)`);
248
+ if (returnType)
249
+ details.push('return type annotation');
250
+ evidence = `Type safety found: ${details.join(', ')}`;
251
+ }
252
+ }
253
+ else {
254
+ hasTypes = /:\s*\w+/.test(clean) || /\w+\s+\w+\s*[=(]/.test(clean);
255
+ evidence = hasTypes ? 'Type annotations detected' : 'No type annotations found';
256
+ }
257
+ return {
258
+ claimId: '',
259
+ checkType: 'type_annotation',
260
+ verdict: hasTypes ? 'PASS' : 'FAIL',
261
+ evidence: hasTypes ? evidence : 'No type annotations found in source code',
262
+ confidence: 1,
263
+ };
264
+ }
265
+ function checkParameterCount(code, target, language) {
266
+ const [funcName, countStr] = target.split(':');
267
+ const wordToNum = {
268
+ one: 1, two: 2, three: 3, four: 4, five: 5,
269
+ six: 6, seven: 7, eight: 8, nine: 9, ten: 10,
270
+ };
271
+ const expectedCount = wordToNum[countStr] ?? parseInt(countStr, 10);
272
+ if (isNaN(expectedCount)) {
273
+ return {
274
+ claimId: '',
275
+ checkType: 'parameter_check',
276
+ verdict: 'PASS',
277
+ evidence: `Could not parse expected parameter count from '${countStr}'`,
278
+ confidence: 1,
279
+ };
280
+ }
281
+ const clean = preprocessCode(code);
282
+ let paramRegex;
283
+ if (funcName) {
284
+ if (['python', 'py'].includes(language)) {
285
+ paramRegex = new RegExp(`def\\s+${funcName}\\s*\\(([^)]*)\\)`);
286
+ }
287
+ else if (['go', 'golang'].includes(language)) {
288
+ paramRegex = new RegExp(`func\\s+(?:\\([^)]*\\)\\s+)?${funcName}\\s*\\(([^)]*)\\)`);
289
+ }
290
+ else {
291
+ paramRegex = new RegExp(`(?:function\\s+${funcName}|(?:const|let|var)\\s+${funcName}\\s*=\\s*(?:async\\s+)?(?:function)?\\s*)\\s*\\(([^)]*)\\)`);
292
+ if (!paramRegex.test(clean)) {
293
+ paramRegex = new RegExp(`(?:async\\s+)?${funcName}\\s*\\(([^)]*)\\)`);
294
+ }
295
+ }
296
+ }
297
+ else {
298
+ paramRegex = /(?:function|def|func|fn)\s+\w+\s*\(([^)]*)\)/;
299
+ }
300
+ const match = clean.match(paramRegex);
301
+ if (!match) {
302
+ return {
303
+ claimId: '',
304
+ checkType: 'parameter_check',
305
+ verdict: 'FAIL',
306
+ evidence: funcName
307
+ ? `Function '${funcName}' not found — cannot verify parameter count`
308
+ : 'No function declaration found',
309
+ confidence: 1,
310
+ };
311
+ }
312
+ const paramStr = match[1].trim();
313
+ const actualCount = paramStr === '' ? 0 : paramStr.split(',').length;
314
+ return {
315
+ claimId: '',
316
+ checkType: 'parameter_check',
317
+ verdict: actualCount === expectedCount ? 'PASS' : 'FAIL',
318
+ evidence: actualCount === expectedCount
319
+ ? `Function${funcName ? ` '${funcName}'` : ''} has ${actualCount} parameter(s) as claimed`
320
+ : `Function${funcName ? ` '${funcName}'` : ''} has ${actualCount} parameter(s), but claim says ${expectedCount}`,
321
+ confidence: 1,
322
+ };
323
+ }
324
+ function checkSQLParameterized(code, language) {
325
+ const codeForSQL = code;
326
+ const clean = preprocessCode(code);
327
+ const hasSQLCode = /(?:SELECT|INSERT|UPDATE|DELETE|CREATE|DROP|ALTER)\s/i.test(codeForSQL) ||
328
+ /\.(?:query|execute|exec|prepare|raw)\s*\(/.test(clean) ||
329
+ /(?:sql|knex|prisma|sequelize|typeorm|drizzle)/i.test(clean);
330
+ if (!hasSQLCode) {
331
+ return {
332
+ claimId: '',
333
+ checkType: 'sql_parameterized',
334
+ verdict: 'PASS',
335
+ evidence: 'No SQL operations found in source code — not applicable',
336
+ confidence: 1,
337
+ };
338
+ }
339
+ const stringConcat = /(?:SELECT|INSERT|UPDATE|DELETE)[^'"]*\+\s*\w+/i.test(codeForSQL) ||
340
+ /`[^`]*(?:SELECT|INSERT|UPDATE|DELETE)[^`]*\$\{(?![\d])/i.test(codeForSQL) ||
341
+ /(?:SELECT|INSERT|UPDATE|DELETE)[^'"]*%s/i.test(codeForSQL) ||
342
+ /(?:SELECT|INSERT|UPDATE|DELETE)[^'"]*\.format\s*\(/i.test(codeForSQL) ||
343
+ /f['"][^'"]*(?:SELECT|INSERT|UPDATE|DELETE)/i.test(codeForSQL);
344
+ const parameterized = /\?\s*[,\)']/.test(codeForSQL) ||
345
+ /\$\d+/.test(codeForSQL) ||
346
+ /%\(\w+\)s/.test(codeForSQL) ||
347
+ /:\w+/.test(codeForSQL) ||
348
+ /\.prepare\s*\(/.test(clean) ||
349
+ /(?:prisma|drizzle|typeorm|sequelize)\./i.test(clean) ||
350
+ /\.query\s*\([^,]+,\s*\[/.test(clean);
351
+ const safe = parameterized && !stringConcat;
352
+ return {
353
+ claimId: '',
354
+ checkType: 'sql_parameterized',
355
+ verdict: safe ? 'PASS' : 'FAIL',
356
+ evidence: safe
357
+ ? 'SQL queries use parameterized queries or ORM (no string concatenation detected)'
358
+ : stringConcat
359
+ ? 'SQL string concatenation detected — potential SQL injection risk'
360
+ : 'SQL operations found but no parameterization pattern detected',
361
+ confidence: 1,
362
+ };
363
+ }
364
+ function checkInputValidation(code, language) {
365
+ const clean = preprocessCode(code);
366
+ const patterns = [
367
+ /(?:zod|joi|yup|ajv|superstruct|valibot)\./i.test(clean),
368
+ /\.parse\s*\(/.test(clean),
369
+ /\.validate\s*\(/.test(clean),
370
+ /(?:isValid|isEmail|isURL|isNumeric|isAlpha)\s*\(/.test(clean),
371
+ /if\s*\(\s*!?\s*(?:typeof|instanceof)\s/.test(clean),
372
+ /if\s*\(\s*!?\s*\w+\s*\|\|\s*typeof/.test(clean),
373
+ /throw\s+new\s+(?:Error|TypeError|ValidationError|BadRequest)/i.test(clean),
374
+ /(?:required|minLength|maxLength|min|max|pattern|regex)\s*[:(=]/i.test(clean),
375
+ ];
376
+ const hasValidation = patterns.some(Boolean);
377
+ const mechanisms = [];
378
+ if (patterns[0])
379
+ mechanisms.push('validation library (zod/joi/yup)');
380
+ if (patterns[1])
381
+ mechanisms.push('.parse() call');
382
+ if (patterns[2])
383
+ mechanisms.push('.validate() call');
384
+ if (patterns[3])
385
+ mechanisms.push('validator function');
386
+ if (patterns[4])
387
+ mechanisms.push('type guard');
388
+ if (patterns[6])
389
+ mechanisms.push('validation error throwing');
390
+ if (patterns[7])
391
+ mechanisms.push('constraint definitions');
392
+ return {
393
+ claimId: '',
394
+ checkType: 'input_validation',
395
+ verdict: hasValidation ? 'PASS' : 'FAIL',
396
+ evidence: hasValidation
397
+ ? `Input validation found: ${mechanisms.join(', ')}`
398
+ : 'No input validation patterns found in source code',
399
+ confidence: 1,
400
+ };
401
+ }
402
+ // ── Main Entry Point ─────────────────────────────────────────
403
+ export function runFormalVerification(code, language, claims, llmVerifications) {
404
+ const classified = claims.map(c => classifyClaim(c));
405
+ const formalResults = new Map();
406
+ let disagreements = 0;
407
+ let formalOverrides = 0;
408
+ for (const c of classified) {
409
+ if (!c.formallyVerifiable || !c.checkType)
410
+ continue;
411
+ let result;
412
+ switch (c.checkType) {
413
+ case 'function_exists':
414
+ result = checkFunctionExists(code, c.extractedTarget || '', language);
415
+ break;
416
+ case 'parameter_check':
417
+ result = checkParameterCount(code, c.extractedTarget || '', language);
418
+ break;
419
+ case 'error_handling':
420
+ result = checkErrorHandling(code, language);
421
+ break;
422
+ case 'null_check':
423
+ result = checkNullHandling(code, language);
424
+ break;
425
+ case 'type_annotation':
426
+ result = checkTypeAnnotations(code, language);
427
+ break;
428
+ case 'sql_parameterized':
429
+ result = checkSQLParameterized(code, language);
430
+ break;
431
+ case 'input_validation':
432
+ result = checkInputValidation(code, language);
433
+ break;
434
+ default:
435
+ continue;
436
+ }
437
+ result.claimId = c.claim.id;
438
+ formalResults.set(c.claim.id, result);
439
+ }
440
+ const merged = llmVerifications.map(llmV => {
441
+ const formal = formalResults.get(llmV.claimId);
442
+ if (!formal) {
443
+ return { ...llmV, verification_method: 'llm' };
444
+ }
445
+ const llmPassed = llmV.verdict === 'PASS';
446
+ const formalPassed = formal.verdict === 'PASS';
447
+ if (llmPassed === formalPassed) {
448
+ return {
449
+ ...llmV,
450
+ verification_method: 'formal',
451
+ reasoning: `[FORMALLY VERIFIED] ${formal.evidence}. LLM agrees: ${llmV.reasoning}`,
452
+ };
453
+ }
454
+ disagreements++;
455
+ formalOverrides++;
456
+ return {
457
+ ...llmV,
458
+ verdict: formal.verdict,
459
+ verification_method: 'formal',
460
+ reasoning: `[FORMAL OVERRIDE] ${formal.evidence}. LLM verdict was ${llmV.verdict}: ${llmV.reasoning}`,
461
+ evidence: formal.evidence,
462
+ formal_override: {
463
+ original_llm_verdict: llmV.verdict,
464
+ formal_verdict: formal.verdict,
465
+ reason: formal.evidence,
466
+ },
467
+ };
468
+ });
469
+ const formallyVerified = merged.filter(v => v.verification_method === 'formal').length;
470
+ const llmVerified = merged.filter(v => v.verification_method === 'llm').length;
471
+ return {
472
+ verifications: merged,
473
+ stats: {
474
+ formally_verified: formallyVerified,
475
+ llm_verified: llmVerified,
476
+ disagreements,
477
+ formal_overrides: formalOverrides,
478
+ },
479
+ };
480
+ }
481
+ //# sourceMappingURL=formal-verifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formal-verifier.js","sourceRoot":"","sources":["../../src/lib/formal-verifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { CodeClaim, ClaimVerification, FormalStats, VerificationResult } from './types.js';
2
+ export declare function extractCodeClaims(code: string, language: string, context?: string): Promise<{
3
+ claims: CodeClaim[];
4
+ inputTokens: number;
5
+ outputTokens: number;
6
+ }>;
7
+ export declare function verifyCodeClaims(code: string, language: string, claims: CodeClaim[]): Promise<{
8
+ verifications: ClaimVerification[];
9
+ inputTokens: number;
10
+ outputTokens: number;
11
+ }>;
12
+ export declare function applyFormalVerification(code: string, language: string, claims: CodeClaim[], llmVerifications: ClaimVerification[]): {
13
+ verifications: ClaimVerification[];
14
+ formalStats: FormalStats;
15
+ };
16
+ export declare function forwardVerify(code: string, language: string, context?: string): Promise<{
17
+ result: VerificationResult;
18
+ inputTokens: number;
19
+ outputTokens: number;
20
+ }>;