@runhalo/engine 0.4.0 → 0.5.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/ast-engine.d.ts +60 -0
- package/dist/ast-engine.js +653 -0
- package/dist/ast-engine.js.map +1 -0
- package/dist/context-analyzer.d.ts +209 -0
- package/dist/context-analyzer.js +401 -0
- package/dist/context-analyzer.js.map +1 -0
- package/dist/data-flow-tracer.d.ts +106 -0
- package/dist/data-flow-tracer.js +506 -0
- package/dist/data-flow-tracer.js.map +1 -0
- package/dist/frameworks/django.d.ts +11 -0
- package/dist/frameworks/django.js +57 -0
- package/dist/frameworks/django.js.map +1 -0
- package/dist/frameworks/index.d.ts +59 -0
- package/dist/frameworks/index.js +93 -0
- package/dist/frameworks/index.js.map +1 -0
- package/dist/frameworks/nextjs.d.ts +11 -0
- package/dist/frameworks/nextjs.js +59 -0
- package/dist/frameworks/nextjs.js.map +1 -0
- package/dist/frameworks/rails.d.ts +11 -0
- package/dist/frameworks/rails.js +58 -0
- package/dist/frameworks/rails.js.map +1 -0
- package/dist/frameworks/types.d.ts +29 -0
- package/dist/frameworks/types.js +11 -0
- package/dist/frameworks/types.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +105 -7
- package/dist/index.js.map +1 -1
- package/dist/scope-analyzer.d.ts +91 -0
- package/dist/scope-analyzer.js +300 -0
- package/dist/scope-analyzer.js.map +1 -0
- package/package.json +6 -2
- package/rules/rules.json +1699 -72
- package/rules/validation-report.json +58 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast-engine.js","sourceRoot":"","sources":["../src/ast-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Halo ContextAnalyzer v1 — Composite Confidence Scoring
|
|
3
|
+
*
|
|
4
|
+
* Sprint 8: Combines 5 signals into a per-violation confidence score (0.0-1.0)
|
|
5
|
+
* that indicates how likely a regex match is a true positive.
|
|
6
|
+
*
|
|
7
|
+
* Signal weights (from unified sprint plan):
|
|
8
|
+
* AST verdict: 35%
|
|
9
|
+
* File path context: 15%
|
|
10
|
+
* Framework handling: 15%
|
|
11
|
+
* Historical FP rate: 20%
|
|
12
|
+
* User suppression rate: 15%
|
|
13
|
+
*
|
|
14
|
+
* Thresholds:
|
|
15
|
+
* >= 0.7 → "high" — likely true positive
|
|
16
|
+
* 0.4-0.69 → "medium" — review recommended
|
|
17
|
+
* < 0.4 → "low" — likely false positive
|
|
18
|
+
*/
|
|
19
|
+
import type { ASTVerdict } from './ast-engine';
|
|
20
|
+
import type { FrameworkAction } from './frameworks/types';
|
|
21
|
+
export interface ContextAnalyzerConfig {
|
|
22
|
+
/**
|
|
23
|
+
* Historical false positive rates per rule (0.0-1.0).
|
|
24
|
+
* Fetched from Supabase halo_compliance_scores or computed from suppression logs.
|
|
25
|
+
* Falls back to built-in defaults when not provided.
|
|
26
|
+
*/
|
|
27
|
+
historicalFPRates?: Record<string, number>;
|
|
28
|
+
/**
|
|
29
|
+
* User suppression rates per rule (0.0-1.0).
|
|
30
|
+
* Percentage of times users suppress this rule via halo-ignore.
|
|
31
|
+
* Falls back to built-in defaults when not provided.
|
|
32
|
+
*/
|
|
33
|
+
suppressionRates?: Record<string, number>;
|
|
34
|
+
/**
|
|
35
|
+
* Active framework (e.g., 'nextjs', 'django', 'rails').
|
|
36
|
+
* Used for framework handling signal.
|
|
37
|
+
*/
|
|
38
|
+
framework?: string;
|
|
39
|
+
}
|
|
40
|
+
/** Confidence interpretation label */
|
|
41
|
+
export type ConfidenceInterpretation = 'high' | 'medium' | 'low';
|
|
42
|
+
/**
|
|
43
|
+
* Raw semantic signals fed into the confidence calculation.
|
|
44
|
+
* Each field maps to one of the five weighted signals.
|
|
45
|
+
*/
|
|
46
|
+
export interface ConfidenceSignals {
|
|
47
|
+
astVerdict?: ASTVerdict;
|
|
48
|
+
scopeContext?: {
|
|
49
|
+
isTestFile: boolean;
|
|
50
|
+
isAdminRoute: boolean;
|
|
51
|
+
isUserFacing: boolean;
|
|
52
|
+
isTypeDefinition: boolean;
|
|
53
|
+
isConfigFile: boolean;
|
|
54
|
+
};
|
|
55
|
+
frameworkAction?: FrameworkAction | null;
|
|
56
|
+
historicalFpRate?: number;
|
|
57
|
+
userSuppressionRate?: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Per-signal weighted breakdown of the composite confidence score.
|
|
61
|
+
*/
|
|
62
|
+
export interface ConfidenceBreakdown {
|
|
63
|
+
ast: number;
|
|
64
|
+
filePath: number;
|
|
65
|
+
framework: number;
|
|
66
|
+
historicalFp: number;
|
|
67
|
+
userSuppression: number;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Full confidence result with composite score, label, breakdown, and recommendation.
|
|
71
|
+
*
|
|
72
|
+
* Also includes aliases (`confidence`, `interpretation`, `reason`) consumed
|
|
73
|
+
* by HaloEngine when writing back onto Violation objects.
|
|
74
|
+
*/
|
|
75
|
+
export interface ConfidenceResult {
|
|
76
|
+
/** Composite confidence score (0.0-1.0) */
|
|
77
|
+
score: number;
|
|
78
|
+
/** Interpretation label */
|
|
79
|
+
label: ConfidenceInterpretation;
|
|
80
|
+
/** Per-signal weighted contributions */
|
|
81
|
+
breakdown: ConfidenceBreakdown;
|
|
82
|
+
/** Human-readable recommendation */
|
|
83
|
+
recommendation: string;
|
|
84
|
+
/** Alias for score — written to Violation.confidence */
|
|
85
|
+
confidence: number;
|
|
86
|
+
/** Alias for label — written to Violation.confidenceInterpretation */
|
|
87
|
+
interpretation: ConfidenceInterpretation;
|
|
88
|
+
/** Alias for recommendation — written to Violation.confidenceReason */
|
|
89
|
+
reason: string;
|
|
90
|
+
}
|
|
91
|
+
export interface ViolationInput {
|
|
92
|
+
ruleId: string;
|
|
93
|
+
severity?: string;
|
|
94
|
+
line?: number;
|
|
95
|
+
column?: number;
|
|
96
|
+
codeSnippet?: string;
|
|
97
|
+
astVerdict?: ASTVerdict;
|
|
98
|
+
astConfidence?: number;
|
|
99
|
+
astReason?: string;
|
|
100
|
+
frameworkSuppressed?: boolean;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* AST verdict signal (weight: 35%).
|
|
104
|
+
* confirmed → 1.0
|
|
105
|
+
* regex_only → 0.5
|
|
106
|
+
* suppressed → 0.0
|
|
107
|
+
* absent → 0.5 (neutral)
|
|
108
|
+
*
|
|
109
|
+
* When astConfidence is provided alongside a verdict, the raw score is scaled
|
|
110
|
+
* to give more nuance (e.g., confirmed with 0.6 confidence → 0.7 + 0.6*0.3 = 0.88).
|
|
111
|
+
*/
|
|
112
|
+
declare function scoreAST(verdict?: ASTVerdict, astConfidence?: number): number;
|
|
113
|
+
/**
|
|
114
|
+
* File path context signal (weight: 15%).
|
|
115
|
+
* user-facing → 1.0
|
|
116
|
+
* admin route → 0.3
|
|
117
|
+
* config file → 0.2
|
|
118
|
+
* test file → 0.1
|
|
119
|
+
* type definition → 0.1
|
|
120
|
+
* absent/unknown → 0.5 (neutral)
|
|
121
|
+
*
|
|
122
|
+
* Priority: user-facing > admin > config > test = typedef.
|
|
123
|
+
*/
|
|
124
|
+
declare function scoreFilePath(scope?: ConfidenceSignals['scopeContext']): number;
|
|
125
|
+
/**
|
|
126
|
+
* Framework handling signal (weight: 15%).
|
|
127
|
+
* suppress → 0.0 (framework fully handles it)
|
|
128
|
+
* downgrade → 0.3
|
|
129
|
+
* null → 1.0 (not handled — full weight)
|
|
130
|
+
* undefined → 0.5 (neutral — no framework info)
|
|
131
|
+
*/
|
|
132
|
+
declare function scoreFramework(action?: FrameworkAction | null): number;
|
|
133
|
+
/**
|
|
134
|
+
* Historical FP rate signal (weight: 20%).
|
|
135
|
+
* 0% FP → 1.0
|
|
136
|
+
* 5% FP → 0.9
|
|
137
|
+
* 20% FP → 0.6
|
|
138
|
+
* 50% FP → 0.2
|
|
139
|
+
* 100% FP → 0.0
|
|
140
|
+
*
|
|
141
|
+
* Interpolated linearly between anchor points.
|
|
142
|
+
* Absent → 0.5 (neutral).
|
|
143
|
+
*/
|
|
144
|
+
declare function scoreHistoricalFP(fpRate?: number): number;
|
|
145
|
+
/**
|
|
146
|
+
* User suppression rate signal (weight: 15%).
|
|
147
|
+
* 0% → 1.0
|
|
148
|
+
* 50% → 0.5
|
|
149
|
+
* 100% → 0.0
|
|
150
|
+
*
|
|
151
|
+
* Direct inverse (1 - rate). Absent → 0.5 (neutral).
|
|
152
|
+
*/
|
|
153
|
+
declare function scoreUserSuppression(suppressionRate?: number): number;
|
|
154
|
+
/**
|
|
155
|
+
* Determine label + recommendation from composite score.
|
|
156
|
+
*/
|
|
157
|
+
declare function interpret(score: number): {
|
|
158
|
+
label: ConfidenceInterpretation;
|
|
159
|
+
recommendation: string;
|
|
160
|
+
};
|
|
161
|
+
export declare class ContextAnalyzer {
|
|
162
|
+
private config;
|
|
163
|
+
private scopeAnalyzer;
|
|
164
|
+
constructor(config?: ContextAnalyzerConfig);
|
|
165
|
+
/**
|
|
166
|
+
* Compute a composite confidence score from individual semantic signals.
|
|
167
|
+
* Each signal is scored independently, then combined via weighted sum.
|
|
168
|
+
*/
|
|
169
|
+
computeConfidence(signals: ConfidenceSignals): ConfidenceResult;
|
|
170
|
+
/**
|
|
171
|
+
* Analyze a single violation by deriving signals from its fields, file path,
|
|
172
|
+
* and optional FP/suppression rate maps.
|
|
173
|
+
*/
|
|
174
|
+
analyzeViolation(violation: {
|
|
175
|
+
ruleId: string;
|
|
176
|
+
filePath: string;
|
|
177
|
+
astVerdict?: ASTVerdict | string;
|
|
178
|
+
frameworkAction?: FrameworkAction | string | null;
|
|
179
|
+
}, fpRates?: Map<string, number>, suppressionRates?: Map<string, number>): ConfidenceResult;
|
|
180
|
+
/**
|
|
181
|
+
* Analyze a list of violations for a given file.
|
|
182
|
+
* More efficient than individual calls — pre-computes file-level scope once.
|
|
183
|
+
* Returns a Map from violation index to ConfidenceResult.
|
|
184
|
+
*/
|
|
185
|
+
analyzeFile(violations: ViolationInput[], filePath: string, content: string): Map<number, ConfidenceResult>;
|
|
186
|
+
/**
|
|
187
|
+
* Determine framework action for a rule, using the framework safe rules map
|
|
188
|
+
* when no explicit action is provided.
|
|
189
|
+
*/
|
|
190
|
+
private resolveFrameworkAction;
|
|
191
|
+
}
|
|
192
|
+
export declare const _internal: {
|
|
193
|
+
scoreAST: typeof scoreAST;
|
|
194
|
+
scoreFilePath: typeof scoreFilePath;
|
|
195
|
+
scoreFramework: typeof scoreFramework;
|
|
196
|
+
scoreHistoricalFP: typeof scoreHistoricalFP;
|
|
197
|
+
scoreUserSuppression: typeof scoreUserSuppression;
|
|
198
|
+
interpret: typeof interpret;
|
|
199
|
+
WEIGHTS: {
|
|
200
|
+
readonly ast: 0.35;
|
|
201
|
+
readonly filePath: 0.15;
|
|
202
|
+
readonly framework: 0.15;
|
|
203
|
+
readonly historicalFp: 0.2;
|
|
204
|
+
readonly userSuppression: 0.15;
|
|
205
|
+
};
|
|
206
|
+
DEFAULT_FP_RATES: Record<string, number>;
|
|
207
|
+
DEFAULT_SUPPRESSION_RATES: Record<string, number>;
|
|
208
|
+
};
|
|
209
|
+
export {};
|
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Halo ContextAnalyzer v1 — Composite Confidence Scoring
|
|
4
|
+
*
|
|
5
|
+
* Sprint 8: Combines 5 signals into a per-violation confidence score (0.0-1.0)
|
|
6
|
+
* that indicates how likely a regex match is a true positive.
|
|
7
|
+
*
|
|
8
|
+
* Signal weights (from unified sprint plan):
|
|
9
|
+
* AST verdict: 35%
|
|
10
|
+
* File path context: 15%
|
|
11
|
+
* Framework handling: 15%
|
|
12
|
+
* Historical FP rate: 20%
|
|
13
|
+
* User suppression rate: 15%
|
|
14
|
+
*
|
|
15
|
+
* Thresholds:
|
|
16
|
+
* >= 0.7 → "high" — likely true positive
|
|
17
|
+
* 0.4-0.69 → "medium" — review recommended
|
|
18
|
+
* < 0.4 → "low" — likely false positive
|
|
19
|
+
*/
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports._internal = exports.ContextAnalyzer = void 0;
|
|
22
|
+
const scope_analyzer_1 = require("./scope-analyzer");
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Signal weights
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
const WEIGHTS = {
|
|
27
|
+
ast: 0.35,
|
|
28
|
+
filePath: 0.15,
|
|
29
|
+
framework: 0.15,
|
|
30
|
+
historicalFp: 0.20,
|
|
31
|
+
userSuppression: 0.15,
|
|
32
|
+
};
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
// Built-in defaults (cold start fallback)
|
|
35
|
+
// Based on Sprint 4 validation data + Sprint 7 Richard audit findings.
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
const DEFAULT_FP_RATES = {
|
|
38
|
+
'coppa-tracking-003': 0.22,
|
|
39
|
+
'coppa-retention-005': 0.18,
|
|
40
|
+
'coppa-ext-017': 0.25,
|
|
41
|
+
'coppa-sec-015': 0.20,
|
|
42
|
+
'coppa-auth-001': 0.15,
|
|
43
|
+
'coppa-ui-008': 0.12,
|
|
44
|
+
'coppa-ugc-014': 0.14,
|
|
45
|
+
'coppa-flow-009': 0.10,
|
|
46
|
+
'coppa-cookies-016': 0.20,
|
|
47
|
+
'coppa-sec-010': 0.30,
|
|
48
|
+
'ETHICAL-001': 0.15,
|
|
49
|
+
'ETHICAL-002': 0.08,
|
|
50
|
+
'ETHICAL-003': 0.10,
|
|
51
|
+
'ETHICAL-004': 0.12,
|
|
52
|
+
'ETHICAL-005': 0.10,
|
|
53
|
+
};
|
|
54
|
+
const DEFAULT_SUPPRESSION_RATES = {
|
|
55
|
+
'coppa-tracking-003': 0.18,
|
|
56
|
+
'coppa-retention-005': 0.12,
|
|
57
|
+
'coppa-ext-017': 0.22,
|
|
58
|
+
'coppa-sec-015': 0.15,
|
|
59
|
+
'coppa-auth-001': 0.10,
|
|
60
|
+
'coppa-ui-008': 0.08,
|
|
61
|
+
'coppa-ugc-014': 0.06,
|
|
62
|
+
'coppa-flow-009': 0.05,
|
|
63
|
+
'coppa-cookies-016': 0.14,
|
|
64
|
+
'coppa-sec-010': 0.25,
|
|
65
|
+
'ETHICAL-001': 0.12,
|
|
66
|
+
'ETHICAL-002': 0.04,
|
|
67
|
+
'ETHICAL-003': 0.05,
|
|
68
|
+
'ETHICAL-004': 0.08,
|
|
69
|
+
'ETHICAL-005': 0.06,
|
|
70
|
+
};
|
|
71
|
+
// Framework-specific safe rules (suppress/downgrade mappings)
|
|
72
|
+
const FRAMEWORK_SAFE_RULES = {
|
|
73
|
+
nextjs: new Set([
|
|
74
|
+
'coppa-cookies-016',
|
|
75
|
+
'coppa-sec-015',
|
|
76
|
+
'coppa-ext-017',
|
|
77
|
+
]),
|
|
78
|
+
django: new Set([
|
|
79
|
+
'coppa-sec-015',
|
|
80
|
+
'coppa-sec-010',
|
|
81
|
+
'coppa-auth-001',
|
|
82
|
+
]),
|
|
83
|
+
rails: new Set([
|
|
84
|
+
'coppa-sec-015',
|
|
85
|
+
'coppa-cookies-016',
|
|
86
|
+
'coppa-auth-001',
|
|
87
|
+
]),
|
|
88
|
+
};
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
// Signal scoring functions
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
/**
|
|
93
|
+
* AST verdict signal (weight: 35%).
|
|
94
|
+
* confirmed → 1.0
|
|
95
|
+
* regex_only → 0.5
|
|
96
|
+
* suppressed → 0.0
|
|
97
|
+
* absent → 0.5 (neutral)
|
|
98
|
+
*
|
|
99
|
+
* When astConfidence is provided alongside a verdict, the raw score is scaled
|
|
100
|
+
* to give more nuance (e.g., confirmed with 0.6 confidence → 0.7 + 0.6*0.3 = 0.88).
|
|
101
|
+
*/
|
|
102
|
+
function scoreAST(verdict, astConfidence) {
|
|
103
|
+
if (!verdict)
|
|
104
|
+
return 0.5;
|
|
105
|
+
switch (verdict) {
|
|
106
|
+
case 'confirmed':
|
|
107
|
+
return astConfidence !== undefined
|
|
108
|
+
? 0.7 + (astConfidence * 0.3) // range: 0.7-1.0
|
|
109
|
+
: 1.0;
|
|
110
|
+
case 'regex_only':
|
|
111
|
+
return 0.5;
|
|
112
|
+
case 'suppressed':
|
|
113
|
+
return astConfidence !== undefined
|
|
114
|
+
? 0.3 - (astConfidence * 0.25) // range: 0.05-0.3
|
|
115
|
+
: 0.0;
|
|
116
|
+
default:
|
|
117
|
+
return 0.5;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* File path context signal (weight: 15%).
|
|
122
|
+
* user-facing → 1.0
|
|
123
|
+
* admin route → 0.3
|
|
124
|
+
* config file → 0.2
|
|
125
|
+
* test file → 0.1
|
|
126
|
+
* type definition → 0.1
|
|
127
|
+
* absent/unknown → 0.5 (neutral)
|
|
128
|
+
*
|
|
129
|
+
* Priority: user-facing > admin > config > test = typedef.
|
|
130
|
+
*/
|
|
131
|
+
function scoreFilePath(scope) {
|
|
132
|
+
if (!scope)
|
|
133
|
+
return 0.5;
|
|
134
|
+
if (scope.isUserFacing)
|
|
135
|
+
return 1.0;
|
|
136
|
+
if (scope.isAdminRoute)
|
|
137
|
+
return 0.3;
|
|
138
|
+
if (scope.isConfigFile)
|
|
139
|
+
return 0.2;
|
|
140
|
+
if (scope.isTestFile)
|
|
141
|
+
return 0.1;
|
|
142
|
+
if (scope.isTypeDefinition)
|
|
143
|
+
return 0.1;
|
|
144
|
+
// No flags matched — neutral
|
|
145
|
+
return 0.5;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Framework handling signal (weight: 15%).
|
|
149
|
+
* suppress → 0.0 (framework fully handles it)
|
|
150
|
+
* downgrade → 0.3
|
|
151
|
+
* null → 1.0 (not handled — full weight)
|
|
152
|
+
* undefined → 0.5 (neutral — no framework info)
|
|
153
|
+
*/
|
|
154
|
+
function scoreFramework(action) {
|
|
155
|
+
if (action === undefined)
|
|
156
|
+
return 0.5;
|
|
157
|
+
if (action === null)
|
|
158
|
+
return 1.0;
|
|
159
|
+
switch (action) {
|
|
160
|
+
case 'suppress': return 0.0;
|
|
161
|
+
case 'downgrade': return 0.3;
|
|
162
|
+
default: return 0.5;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Historical FP rate signal (weight: 20%).
|
|
167
|
+
* 0% FP → 1.0
|
|
168
|
+
* 5% FP → 0.9
|
|
169
|
+
* 20% FP → 0.6
|
|
170
|
+
* 50% FP → 0.2
|
|
171
|
+
* 100% FP → 0.0
|
|
172
|
+
*
|
|
173
|
+
* Interpolated linearly between anchor points.
|
|
174
|
+
* Absent → 0.5 (neutral).
|
|
175
|
+
*/
|
|
176
|
+
function scoreHistoricalFP(fpRate) {
|
|
177
|
+
if (fpRate === undefined || fpRate === null)
|
|
178
|
+
return 0.5;
|
|
179
|
+
const rate = clamp(fpRate, 0, 1);
|
|
180
|
+
const anchors = [
|
|
181
|
+
[0.00, 1.0],
|
|
182
|
+
[0.05, 0.9],
|
|
183
|
+
[0.20, 0.6],
|
|
184
|
+
[0.50, 0.2],
|
|
185
|
+
[1.00, 0.0],
|
|
186
|
+
];
|
|
187
|
+
for (let i = 0; i < anchors.length - 1; i++) {
|
|
188
|
+
const [r0, s0] = anchors[i];
|
|
189
|
+
const [r1, s1] = anchors[i + 1];
|
|
190
|
+
if (rate >= r0 && rate <= r1) {
|
|
191
|
+
const t = (rate - r0) / (r1 - r0);
|
|
192
|
+
return s0 + t * (s1 - s0);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return 0.0;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* User suppression rate signal (weight: 15%).
|
|
199
|
+
* 0% → 1.0
|
|
200
|
+
* 50% → 0.5
|
|
201
|
+
* 100% → 0.0
|
|
202
|
+
*
|
|
203
|
+
* Direct inverse (1 - rate). Absent → 0.5 (neutral).
|
|
204
|
+
*/
|
|
205
|
+
function scoreUserSuppression(suppressionRate) {
|
|
206
|
+
if (suppressionRate === undefined || suppressionRate === null)
|
|
207
|
+
return 0.5;
|
|
208
|
+
return 1.0 - clamp(suppressionRate, 0, 1);
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Determine label + recommendation from composite score.
|
|
212
|
+
*/
|
|
213
|
+
function interpret(score) {
|
|
214
|
+
if (score >= 0.7) {
|
|
215
|
+
return { label: 'high', recommendation: 'High confidence \u2014 likely true positive' };
|
|
216
|
+
}
|
|
217
|
+
if (score >= 0.4) {
|
|
218
|
+
return { label: 'medium', recommendation: 'Medium confidence \u2014 review recommended' };
|
|
219
|
+
}
|
|
220
|
+
return { label: 'low', recommendation: 'Low confidence \u2014 likely false positive' };
|
|
221
|
+
}
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
// ContextAnalyzer
|
|
224
|
+
// ---------------------------------------------------------------------------
|
|
225
|
+
class ContextAnalyzer {
|
|
226
|
+
constructor(config = {}) {
|
|
227
|
+
this.config = config;
|
|
228
|
+
this.scopeAnalyzer = new scope_analyzer_1.ScopeAnalyzer();
|
|
229
|
+
}
|
|
230
|
+
// -----------------------------------------------------------------------
|
|
231
|
+
// Core: compute confidence from raw semantic signals
|
|
232
|
+
// -----------------------------------------------------------------------
|
|
233
|
+
/**
|
|
234
|
+
* Compute a composite confidence score from individual semantic signals.
|
|
235
|
+
* Each signal is scored independently, then combined via weighted sum.
|
|
236
|
+
*/
|
|
237
|
+
computeConfidence(signals) {
|
|
238
|
+
const astRaw = scoreAST(signals.astVerdict);
|
|
239
|
+
const filePathRaw = scoreFilePath(signals.scopeContext);
|
|
240
|
+
const frameworkRaw = scoreFramework(signals.frameworkAction);
|
|
241
|
+
const fpRaw = scoreHistoricalFP(signals.historicalFpRate);
|
|
242
|
+
const suppressRaw = scoreUserSuppression(signals.userSuppressionRate);
|
|
243
|
+
const breakdown = {
|
|
244
|
+
ast: round4(astRaw * WEIGHTS.ast),
|
|
245
|
+
filePath: round4(filePathRaw * WEIGHTS.filePath),
|
|
246
|
+
framework: round4(frameworkRaw * WEIGHTS.framework),
|
|
247
|
+
historicalFp: round4(fpRaw * WEIGHTS.historicalFp),
|
|
248
|
+
userSuppression: round4(suppressRaw * WEIGHTS.userSuppression),
|
|
249
|
+
};
|
|
250
|
+
const composite = round2(clamp(breakdown.ast +
|
|
251
|
+
breakdown.filePath +
|
|
252
|
+
breakdown.framework +
|
|
253
|
+
breakdown.historicalFp +
|
|
254
|
+
breakdown.userSuppression, 0, 1));
|
|
255
|
+
const { label, recommendation } = interpret(composite);
|
|
256
|
+
return {
|
|
257
|
+
score: composite,
|
|
258
|
+
label,
|
|
259
|
+
breakdown,
|
|
260
|
+
recommendation,
|
|
261
|
+
// Aliases for HaloEngine consumption
|
|
262
|
+
confidence: composite,
|
|
263
|
+
interpretation: label,
|
|
264
|
+
reason: recommendation,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
// -----------------------------------------------------------------------
|
|
268
|
+
// Convenience: compute from violation + optional rate maps
|
|
269
|
+
// -----------------------------------------------------------------------
|
|
270
|
+
/**
|
|
271
|
+
* Analyze a single violation by deriving signals from its fields, file path,
|
|
272
|
+
* and optional FP/suppression rate maps.
|
|
273
|
+
*/
|
|
274
|
+
analyzeViolation(violation, fpRates, suppressionRates) {
|
|
275
|
+
// Derive scope context from file path via ScopeAnalyzer
|
|
276
|
+
const scope = this.scopeAnalyzer.analyzeFile(violation.filePath, '');
|
|
277
|
+
const signals = {
|
|
278
|
+
astVerdict: normalizeASTVerdict(violation.astVerdict),
|
|
279
|
+
scopeContext: scope,
|
|
280
|
+
frameworkAction: this.resolveFrameworkAction(violation.ruleId, normalizeFrameworkAction(violation.frameworkAction)),
|
|
281
|
+
historicalFpRate: fpRates?.get(violation.ruleId)
|
|
282
|
+
?? this.config.historicalFPRates?.[violation.ruleId]
|
|
283
|
+
?? DEFAULT_FP_RATES[violation.ruleId],
|
|
284
|
+
userSuppressionRate: suppressionRates?.get(violation.ruleId)
|
|
285
|
+
?? this.config.suppressionRates?.[violation.ruleId]
|
|
286
|
+
?? DEFAULT_SUPPRESSION_RATES[violation.ruleId],
|
|
287
|
+
};
|
|
288
|
+
return this.computeConfidence(signals);
|
|
289
|
+
}
|
|
290
|
+
// -----------------------------------------------------------------------
|
|
291
|
+
// Batch: analyze all violations for a file (used by HaloEngine)
|
|
292
|
+
// -----------------------------------------------------------------------
|
|
293
|
+
/**
|
|
294
|
+
* Analyze a list of violations for a given file.
|
|
295
|
+
* More efficient than individual calls — pre-computes file-level scope once.
|
|
296
|
+
* Returns a Map from violation index to ConfidenceResult.
|
|
297
|
+
*/
|
|
298
|
+
analyzeFile(violations, filePath, content) {
|
|
299
|
+
const results = new Map();
|
|
300
|
+
// Pre-compute file-level scope once (shared across all violations in file)
|
|
301
|
+
let scope;
|
|
302
|
+
try {
|
|
303
|
+
scope = this.scopeAnalyzer.analyzeFile(filePath, content);
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
scope = {
|
|
307
|
+
isTestFile: false,
|
|
308
|
+
isAdminRoute: false,
|
|
309
|
+
isUserFacing: false,
|
|
310
|
+
isTypeDefinition: false,
|
|
311
|
+
isConfigFile: false,
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
for (let i = 0; i < violations.length; i++) {
|
|
315
|
+
const v = violations[i];
|
|
316
|
+
const signals = {
|
|
317
|
+
astVerdict: v.astVerdict,
|
|
318
|
+
scopeContext: scope,
|
|
319
|
+
frameworkAction: v.frameworkSuppressed
|
|
320
|
+
? 'suppress'
|
|
321
|
+
: this.resolveFrameworkAction(v.ruleId, undefined),
|
|
322
|
+
historicalFpRate: this.config.historicalFPRates?.[v.ruleId]
|
|
323
|
+
?? DEFAULT_FP_RATES[v.ruleId],
|
|
324
|
+
userSuppressionRate: this.config.suppressionRates?.[v.ruleId]
|
|
325
|
+
?? DEFAULT_SUPPRESSION_RATES[v.ruleId],
|
|
326
|
+
};
|
|
327
|
+
results.set(i, this.computeConfidence(signals));
|
|
328
|
+
}
|
|
329
|
+
return results;
|
|
330
|
+
}
|
|
331
|
+
// -----------------------------------------------------------------------
|
|
332
|
+
// Private helpers
|
|
333
|
+
// -----------------------------------------------------------------------
|
|
334
|
+
/**
|
|
335
|
+
* Determine framework action for a rule, using the framework safe rules map
|
|
336
|
+
* when no explicit action is provided.
|
|
337
|
+
*/
|
|
338
|
+
resolveFrameworkAction(ruleId, explicitAction) {
|
|
339
|
+
// Explicit action takes priority
|
|
340
|
+
if (explicitAction !== undefined)
|
|
341
|
+
return explicitAction;
|
|
342
|
+
const framework = this.config.framework;
|
|
343
|
+
if (!framework)
|
|
344
|
+
return undefined;
|
|
345
|
+
const safeRules = FRAMEWORK_SAFE_RULES[framework];
|
|
346
|
+
if (safeRules && safeRules.has(ruleId)) {
|
|
347
|
+
return 'suppress';
|
|
348
|
+
}
|
|
349
|
+
// Framework declared but doesn't handle this rule
|
|
350
|
+
return null;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
exports.ContextAnalyzer = ContextAnalyzer;
|
|
354
|
+
// ---------------------------------------------------------------------------
|
|
355
|
+
// Utilities
|
|
356
|
+
// ---------------------------------------------------------------------------
|
|
357
|
+
/** Round to 2 decimal places. */
|
|
358
|
+
function round2(n) {
|
|
359
|
+
return Math.round(n * 100) / 100;
|
|
360
|
+
}
|
|
361
|
+
/** Round to 4 decimal places (for breakdown components to avoid FP noise). */
|
|
362
|
+
function round4(n) {
|
|
363
|
+
return Math.round(n * 10000) / 10000;
|
|
364
|
+
}
|
|
365
|
+
/** Clamp a value to [min, max]. */
|
|
366
|
+
function clamp(n, min, max) {
|
|
367
|
+
return Math.max(min, Math.min(max, n));
|
|
368
|
+
}
|
|
369
|
+
/** Normalize a loose string to a typed ASTVerdict (or undefined). */
|
|
370
|
+
function normalizeASTVerdict(v) {
|
|
371
|
+
if (!v)
|
|
372
|
+
return undefined;
|
|
373
|
+
if (v === 'confirmed' || v === 'suppressed' || v === 'regex_only')
|
|
374
|
+
return v;
|
|
375
|
+
return undefined;
|
|
376
|
+
}
|
|
377
|
+
/** Normalize a loose string to a typed FrameworkAction | null (or undefined). */
|
|
378
|
+
function normalizeFrameworkAction(a) {
|
|
379
|
+
if (a === undefined)
|
|
380
|
+
return undefined;
|
|
381
|
+
if (a === null)
|
|
382
|
+
return null;
|
|
383
|
+
if (a === 'suppress' || a === 'downgrade')
|
|
384
|
+
return a;
|
|
385
|
+
return undefined;
|
|
386
|
+
}
|
|
387
|
+
// ---------------------------------------------------------------------------
|
|
388
|
+
// Exports for testing (internal scoring functions)
|
|
389
|
+
// ---------------------------------------------------------------------------
|
|
390
|
+
exports._internal = {
|
|
391
|
+
scoreAST,
|
|
392
|
+
scoreFilePath,
|
|
393
|
+
scoreFramework,
|
|
394
|
+
scoreHistoricalFP,
|
|
395
|
+
scoreUserSuppression,
|
|
396
|
+
interpret,
|
|
397
|
+
WEIGHTS,
|
|
398
|
+
DEFAULT_FP_RATES,
|
|
399
|
+
DEFAULT_SUPPRESSION_RATES,
|
|
400
|
+
};
|
|
401
|
+
//# sourceMappingURL=context-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-analyzer.js","sourceRoot":"","sources":["../src/context-analyzer.ts"],"names":[],"mappings":"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"}
|