@defai.digital/analysis-domain 13.0.3
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/LICENSE +214 -0
- package/dist/analysis-service.d.ts +28 -0
- package/dist/analysis-service.d.ts.map +1 -0
- package/dist/analysis-service.js +187 -0
- package/dist/analysis-service.js.map +1 -0
- package/dist/context-builder.d.ts +23 -0
- package/dist/context-builder.d.ts.map +1 -0
- package/dist/context-builder.js +221 -0
- package/dist/context-builder.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/prompt-builder.d.ts +16 -0
- package/dist/prompt-builder.d.ts.map +1 -0
- package/dist/prompt-builder.js +232 -0
- package/dist/prompt-builder.js.map +1 -0
- package/dist/provider-router.d.ts +64 -0
- package/dist/provider-router.d.ts.map +1 -0
- package/dist/provider-router.js +112 -0
- package/dist/provider-router.js.map +1 -0
- package/dist/response-parser.d.ts +23 -0
- package/dist/response-parser.d.ts.map +1 -0
- package/dist/response-parser.js +213 -0
- package/dist/response-parser.js.map +1 -0
- package/dist/types.d.ts +76 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analysis Provider Router
|
|
3
|
+
*
|
|
4
|
+
* Bridges the analysis domain to actual LLM provider implementations.
|
|
5
|
+
* Eliminates the mock provider by connecting to real provider registry.
|
|
6
|
+
*/
|
|
7
|
+
import { TIMEOUT_PROVIDER_DEFAULT, PROVIDER_DEFAULT } from '@defai.digital/contracts';
|
|
8
|
+
/**
|
|
9
|
+
* Creates a provider router that bridges to real providers
|
|
10
|
+
*/
|
|
11
|
+
export function createAnalysisProviderRouter(config) {
|
|
12
|
+
const { registry, defaultProvider = PROVIDER_DEFAULT, defaultTimeout = TIMEOUT_PROVIDER_DEFAULT } = config;
|
|
13
|
+
return {
|
|
14
|
+
async getProvider(providerId) {
|
|
15
|
+
const provider = registry.get(providerId);
|
|
16
|
+
if (!provider) {
|
|
17
|
+
throw new Error(`Provider not found: ${providerId}. Available: ${registry.getProviderIds().join(', ')}`);
|
|
18
|
+
}
|
|
19
|
+
return wrapAsAnalysisProvider(provider, defaultTimeout);
|
|
20
|
+
},
|
|
21
|
+
async selectProvider(_task) {
|
|
22
|
+
// For now, use default provider
|
|
23
|
+
// Could be enhanced to select based on task type
|
|
24
|
+
const provider = registry.get(defaultProvider);
|
|
25
|
+
if (!provider) {
|
|
26
|
+
// Try first available provider
|
|
27
|
+
const providerIds = registry.getProviderIds();
|
|
28
|
+
if (providerIds.length === 0) {
|
|
29
|
+
throw new Error('No providers available');
|
|
30
|
+
}
|
|
31
|
+
const firstProvider = registry.get(providerIds[0]);
|
|
32
|
+
if (!firstProvider) {
|
|
33
|
+
throw new Error('Failed to get provider');
|
|
34
|
+
}
|
|
35
|
+
return wrapAsAnalysisProvider(firstProvider, defaultTimeout);
|
|
36
|
+
}
|
|
37
|
+
return wrapAsAnalysisProvider(provider, defaultTimeout);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Wraps a provider from the registry as an AnalysisProvider
|
|
43
|
+
*/
|
|
44
|
+
function wrapAsAnalysisProvider(provider, defaultTimeout) {
|
|
45
|
+
return {
|
|
46
|
+
id: provider.providerId,
|
|
47
|
+
async complete(request) {
|
|
48
|
+
// Get default model
|
|
49
|
+
const models = provider.getModels();
|
|
50
|
+
const defaultModel = models.find((m) => m.isDefault)?.modelId ?? models[0]?.modelId ?? 'default';
|
|
51
|
+
// Build completion request
|
|
52
|
+
const response = await provider.complete({
|
|
53
|
+
requestId: crypto.randomUUID(),
|
|
54
|
+
model: defaultModel,
|
|
55
|
+
messages: [{ role: 'user', content: request.prompt }],
|
|
56
|
+
maxTokens: request.maxTokens ?? 4000,
|
|
57
|
+
temperature: request.temperature ?? 0.1,
|
|
58
|
+
timeout: defaultTimeout,
|
|
59
|
+
});
|
|
60
|
+
// Handle failure response
|
|
61
|
+
if ('success' in response && !response.success) {
|
|
62
|
+
const errorResponse = response;
|
|
63
|
+
throw new Error(`Provider error: ${JSON.stringify(errorResponse.error)}`);
|
|
64
|
+
}
|
|
65
|
+
// Handle success response
|
|
66
|
+
if ('success' in response && response.success) {
|
|
67
|
+
const successResponse = response;
|
|
68
|
+
const result = {
|
|
69
|
+
content: successResponse.content,
|
|
70
|
+
};
|
|
71
|
+
if (successResponse.tokensUsed !== undefined) {
|
|
72
|
+
result.tokensUsed = successResponse.tokensUsed;
|
|
73
|
+
}
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
// Fallback for unexpected response shape
|
|
77
|
+
const fallbackResponse = response;
|
|
78
|
+
const result = {
|
|
79
|
+
content: fallbackResponse.content ?? '',
|
|
80
|
+
};
|
|
81
|
+
if (fallbackResponse.tokensUsed !== undefined) {
|
|
82
|
+
result.tokensUsed = fallbackResponse.tokensUsed;
|
|
83
|
+
}
|
|
84
|
+
return result;
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Creates a stub provider router for testing
|
|
90
|
+
* Returns empty findings (same as mock provider behavior)
|
|
91
|
+
*/
|
|
92
|
+
export function createStubProviderRouter() {
|
|
93
|
+
const stubProvider = {
|
|
94
|
+
id: 'stub',
|
|
95
|
+
async complete(_request) {
|
|
96
|
+
// Return empty findings response
|
|
97
|
+
return {
|
|
98
|
+
content: JSON.stringify({ findings: [] }),
|
|
99
|
+
tokensUsed: 0,
|
|
100
|
+
};
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
return {
|
|
104
|
+
async getProvider(_providerId) {
|
|
105
|
+
return stubProvider;
|
|
106
|
+
},
|
|
107
|
+
async selectProvider(_task) {
|
|
108
|
+
return stubProvider;
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=provider-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-router.js","sourceRoot":"","sources":["../src/provider-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analysis Response Parser
|
|
3
|
+
*
|
|
4
|
+
* Parses LLM responses into structured findings.
|
|
5
|
+
*/
|
|
6
|
+
import { type AnalysisFinding } from '@defai.digital/contracts';
|
|
7
|
+
import type { AnalysisResponseParser } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Response parser error
|
|
10
|
+
*/
|
|
11
|
+
export declare class ResponseParserError extends Error {
|
|
12
|
+
readonly code: string;
|
|
13
|
+
constructor(code: string, message: string);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Creates an analysis response parser
|
|
17
|
+
*/
|
|
18
|
+
export declare function createAnalysisResponseParser(): AnalysisResponseParser;
|
|
19
|
+
/**
|
|
20
|
+
* Merge findings that refer to the same issue
|
|
21
|
+
*/
|
|
22
|
+
export declare function deduplicateFindings(findings: AnalysisFinding[]): AnalysisFinding[];
|
|
23
|
+
//# sourceMappingURL=response-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-parser.d.ts","sourceRoot":"","sources":["../src/response-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,KAAK,eAAe,EAIrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;aAE1B,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM;CAKlB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,sBAAsB,CAyBrE;AA6KD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAkBlF"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analysis Response Parser
|
|
3
|
+
*
|
|
4
|
+
* Parses LLM responses into structured findings.
|
|
5
|
+
*/
|
|
6
|
+
import { safeValidateAnalysisFinding, } from '@defai.digital/contracts';
|
|
7
|
+
/**
|
|
8
|
+
* Response parser error
|
|
9
|
+
*/
|
|
10
|
+
export class ResponseParserError extends Error {
|
|
11
|
+
code;
|
|
12
|
+
constructor(code, message) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.code = code;
|
|
15
|
+
this.name = 'ResponseParserError';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Creates an analysis response parser
|
|
20
|
+
*/
|
|
21
|
+
export function createAnalysisResponseParser() {
|
|
22
|
+
return {
|
|
23
|
+
parseResponse(response, task) {
|
|
24
|
+
// Try to extract JSON from response
|
|
25
|
+
const jsonContent = extractJson(response);
|
|
26
|
+
if (!jsonContent) {
|
|
27
|
+
// If no JSON found, try to parse the entire response as JSON
|
|
28
|
+
try {
|
|
29
|
+
const parsed = JSON.parse(response);
|
|
30
|
+
return parseFindings(parsed, task);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// Return empty findings if parsing fails
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
const parsed = JSON.parse(jsonContent);
|
|
39
|
+
return parseFindings(parsed, task);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Extract JSON content from response
|
|
49
|
+
* Handles cases where LLM wraps JSON in markdown code blocks
|
|
50
|
+
*/
|
|
51
|
+
function extractJson(response) {
|
|
52
|
+
// Try to find JSON in code blocks
|
|
53
|
+
const codeBlockMatch = /```(?:json)?\s*([\s\S]*?)```/.exec(response);
|
|
54
|
+
if (codeBlockMatch?.[1]) {
|
|
55
|
+
return codeBlockMatch[1].trim();
|
|
56
|
+
}
|
|
57
|
+
// Try to find raw JSON object
|
|
58
|
+
const jsonMatch = /\{[\s\S]*\}/.exec(response);
|
|
59
|
+
if (jsonMatch) {
|
|
60
|
+
return jsonMatch[0];
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Parse findings from JSON object
|
|
66
|
+
*/
|
|
67
|
+
function parseFindings(data, task) {
|
|
68
|
+
if (!data || typeof data !== 'object') {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
const obj = data;
|
|
72
|
+
const rawFindings = obj.findings;
|
|
73
|
+
if (!Array.isArray(rawFindings)) {
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
const findings = [];
|
|
77
|
+
for (const raw of rawFindings) {
|
|
78
|
+
const finding = normalizeFinding(raw, task);
|
|
79
|
+
if (finding) {
|
|
80
|
+
findings.push(finding);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return findings;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Normalize a raw finding into a valid AnalysisFinding
|
|
87
|
+
*/
|
|
88
|
+
function normalizeFinding(raw, task) {
|
|
89
|
+
if (!raw || typeof raw !== 'object') {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
const obj = raw;
|
|
93
|
+
// Build normalized finding
|
|
94
|
+
const normalized = {
|
|
95
|
+
findingId: `${task}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
|
|
96
|
+
file: normalizeString(obj.file) ?? 'unknown',
|
|
97
|
+
line: normalizeNumber(obj.line),
|
|
98
|
+
lineEnd: normalizeNumber(obj.lineEnd ?? obj.line_end),
|
|
99
|
+
title: normalizeString(obj.title) ?? 'Untitled Finding',
|
|
100
|
+
description: normalizeString(obj.description) ?? '',
|
|
101
|
+
severity: normalizeSeverity(obj.severity),
|
|
102
|
+
category: normalizeString(obj.category) ?? 'other',
|
|
103
|
+
suggestion: normalizeString(obj.suggestion ?? obj.fix ?? obj.recommendation),
|
|
104
|
+
codeSnippet: normalizeString(obj.codeSnippet ?? obj.code_snippet ?? obj.code),
|
|
105
|
+
confidence: normalizeConfidence(obj.confidence),
|
|
106
|
+
};
|
|
107
|
+
// Validate against schema
|
|
108
|
+
const validation = safeValidateAnalysisFinding(normalized);
|
|
109
|
+
if (validation.success) {
|
|
110
|
+
return validation.data;
|
|
111
|
+
}
|
|
112
|
+
// Try to fix common issues and re-validate
|
|
113
|
+
const fixed = {
|
|
114
|
+
...normalized,
|
|
115
|
+
title: normalized.title.slice(0, 200),
|
|
116
|
+
description: normalized.description.slice(0, 2000),
|
|
117
|
+
category: normalized.category.slice(0, 50),
|
|
118
|
+
suggestion: normalized.suggestion?.slice(0, 5000),
|
|
119
|
+
codeSnippet: normalized.codeSnippet?.slice(0, 1000),
|
|
120
|
+
};
|
|
121
|
+
const fixedValidation = safeValidateAnalysisFinding(fixed);
|
|
122
|
+
if (fixedValidation.success) {
|
|
123
|
+
return fixedValidation.data;
|
|
124
|
+
}
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Normalize string value
|
|
129
|
+
*/
|
|
130
|
+
function normalizeString(value) {
|
|
131
|
+
if (typeof value === 'string') {
|
|
132
|
+
return value.trim() || undefined;
|
|
133
|
+
}
|
|
134
|
+
if (value !== null && value !== undefined) {
|
|
135
|
+
return String(value);
|
|
136
|
+
}
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Normalize number value
|
|
141
|
+
*/
|
|
142
|
+
function normalizeNumber(value) {
|
|
143
|
+
if (typeof value === 'number' && !isNaN(value) && value > 0) {
|
|
144
|
+
return Math.floor(value);
|
|
145
|
+
}
|
|
146
|
+
if (typeof value === 'string') {
|
|
147
|
+
const num = parseInt(value, 10);
|
|
148
|
+
if (!isNaN(num) && num > 0) {
|
|
149
|
+
return num;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Normalize severity value
|
|
156
|
+
*/
|
|
157
|
+
function normalizeSeverity(value) {
|
|
158
|
+
const severityMap = {
|
|
159
|
+
critical: 'critical',
|
|
160
|
+
high: 'high',
|
|
161
|
+
medium: 'medium',
|
|
162
|
+
low: 'low',
|
|
163
|
+
info: 'info',
|
|
164
|
+
// Common alternatives
|
|
165
|
+
error: 'high',
|
|
166
|
+
warning: 'medium',
|
|
167
|
+
warn: 'medium',
|
|
168
|
+
suggestion: 'low',
|
|
169
|
+
hint: 'info',
|
|
170
|
+
note: 'info',
|
|
171
|
+
};
|
|
172
|
+
if (typeof value === 'string') {
|
|
173
|
+
const normalized = value.toLowerCase().trim();
|
|
174
|
+
return severityMap[normalized] ?? 'medium';
|
|
175
|
+
}
|
|
176
|
+
return 'medium';
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Normalize confidence value
|
|
180
|
+
*/
|
|
181
|
+
function normalizeConfidence(value) {
|
|
182
|
+
if (typeof value === 'number') {
|
|
183
|
+
return Math.max(0, Math.min(1, value));
|
|
184
|
+
}
|
|
185
|
+
if (typeof value === 'string') {
|
|
186
|
+
const num = parseFloat(value);
|
|
187
|
+
if (!isNaN(num)) {
|
|
188
|
+
return Math.max(0, Math.min(1, num));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return 0.8; // Default confidence
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Merge findings that refer to the same issue
|
|
195
|
+
*/
|
|
196
|
+
export function deduplicateFindings(findings) {
|
|
197
|
+
const seen = new Map();
|
|
198
|
+
for (const finding of findings) {
|
|
199
|
+
const key = `${finding.file}:${finding.line ?? 0}:${finding.category}`;
|
|
200
|
+
if (!seen.has(key)) {
|
|
201
|
+
seen.set(key, finding);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
// Keep the one with higher confidence
|
|
205
|
+
const existing = seen.get(key);
|
|
206
|
+
if (finding.confidence > existing.confidence) {
|
|
207
|
+
seen.set(key, finding);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return Array.from(seen.values());
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=response-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-parser.js","sourceRoot":"","sources":["../src/response-parser.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analysis Domain Types
|
|
3
|
+
*/
|
|
4
|
+
import type { AnalysisTask, AnalysisRequest, AnalysisResult, AnalysisFinding, CodeContext, AnalysisFile, FindingSeverity, AnalysisSeverityFilter } from '@defai.digital/contracts';
|
|
5
|
+
/**
|
|
6
|
+
* Options for gathering code context
|
|
7
|
+
*/
|
|
8
|
+
export interface GatherOptions {
|
|
9
|
+
maxFiles: number;
|
|
10
|
+
maxLinesPerFile: number;
|
|
11
|
+
excludePatterns?: string[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Code context builder interface
|
|
15
|
+
*/
|
|
16
|
+
export interface CodeContextBuilder {
|
|
17
|
+
/** Gather code from paths */
|
|
18
|
+
gatherCode(paths: string[], options?: Partial<GatherOptions>): Promise<CodeContext>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Analysis prompt builder interface
|
|
22
|
+
*/
|
|
23
|
+
export interface AnalysisPromptBuilder {
|
|
24
|
+
/** Build prompt for analysis task */
|
|
25
|
+
buildPrompt(task: AnalysisTask, context: CodeContext, userContext?: string): string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Analysis response parser interface
|
|
29
|
+
*/
|
|
30
|
+
export interface AnalysisResponseParser {
|
|
31
|
+
/** Parse LLM response into structured findings */
|
|
32
|
+
parseResponse(response: string, task: AnalysisTask): AnalysisFinding[];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Provider interface for analysis
|
|
36
|
+
*/
|
|
37
|
+
export interface AnalysisProvider {
|
|
38
|
+
id: string;
|
|
39
|
+
complete(request: ProviderRequest): Promise<ProviderResponse>;
|
|
40
|
+
}
|
|
41
|
+
export interface ProviderRequest {
|
|
42
|
+
prompt: string;
|
|
43
|
+
maxTokens?: number;
|
|
44
|
+
temperature?: number;
|
|
45
|
+
}
|
|
46
|
+
export interface ProviderResponse {
|
|
47
|
+
content: string;
|
|
48
|
+
tokensUsed?: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Provider router interface
|
|
52
|
+
*/
|
|
53
|
+
export interface ProviderRouter {
|
|
54
|
+
/** Get provider by ID */
|
|
55
|
+
getProvider(providerId: string): Promise<AnalysisProvider>;
|
|
56
|
+
/** Select best provider for task */
|
|
57
|
+
selectProvider(task: string): Promise<AnalysisProvider>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Analysis service interface
|
|
61
|
+
*/
|
|
62
|
+
export interface AnalysisService {
|
|
63
|
+
/** Perform analysis */
|
|
64
|
+
analyze(request: AnalysisRequest): Promise<AnalysisResult>;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Dependencies for creating analysis service
|
|
68
|
+
*/
|
|
69
|
+
export interface AnalysisServiceDeps {
|
|
70
|
+
contextBuilder: CodeContextBuilder;
|
|
71
|
+
promptBuilder: AnalysisPromptBuilder;
|
|
72
|
+
responseParser: AnalysisResponseParser;
|
|
73
|
+
providerRouter?: ProviderRouter;
|
|
74
|
+
}
|
|
75
|
+
export type { AnalysisTask, AnalysisRequest, AnalysisResult, AnalysisFinding, CodeContext, AnalysisFile, FindingSeverity, AnalysisSeverityFilter, };
|
|
76
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,cAAc,EACd,eAAe,EACf,WAAW,EACX,YAAY,EACZ,eAAe,EACf,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,6BAA6B;IAC7B,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACrF;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,qCAAqC;IACrC,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACrF;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,kDAAkD;IAClD,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,eAAe,EAAE,CAAC;CACxE;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,yBAAyB;IACzB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3D,oCAAoC;IACpC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACzD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uBAAuB;IACvB,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,kBAAkB,CAAC;IACnC,aAAa,EAAE,qBAAqB,CAAC;IACrC,cAAc,EAAE,sBAAsB,CAAC;IACvC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAGD,YAAY,EACV,YAAY,EACZ,eAAe,EACf,cAAc,EACd,eAAe,EACf,WAAW,EACX,YAAY,EACZ,eAAe,EACf,sBAAsB,GACvB,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@defai.digital/analysis-domain",
|
|
3
|
+
"version": "13.0.3",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Analysis domain for AutomatosX - LLM-delegated code analysis",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"author": "DEFAI Private Limited",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/defai-digital/automatosx.git",
|
|
11
|
+
"directory": "packages/core/analysis-domain"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://github.com/defai-digital/automatosx#readme",
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/defai-digital/automatosx/issues"
|
|
16
|
+
},
|
|
17
|
+
"main": "./dist/index.js",
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"import": "./dist/index.js"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"dist"
|
|
27
|
+
],
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=20.0.0"
|
|
30
|
+
},
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@defai.digital/contracts": "13.0.3"
|
|
36
|
+
},
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "tsc --build",
|
|
39
|
+
"clean": "rm -rf dist *.tsbuildinfo"
|
|
40
|
+
}
|
|
41
|
+
}
|