@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.
@@ -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":"AAAA;;;;GAIG;AAEH,OAAO,EAIL,2BAA2B,GAC5B,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAE1B;IADlB,YACkB,IAAY,EAC5B,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAQ;QAI5B,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B;IAC1C,OAAO;QACL,aAAa,CAAC,QAAgB,EAAE,IAAkB;YAChD,oCAAoC;YACpC,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAE1C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,6DAA6D;gBAC7D,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACpC,OAAO,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACrC,CAAC;gBAAC,MAAM,CAAC;oBACP,yCAAyC;oBACzC,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBACvC,OAAO,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACrC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,QAAgB;IACnC,kCAAkC;IAClC,MAAM,cAAc,GAAG,8BAA8B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrE,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,8BAA8B;IAC9B,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,IAAa,EAAE,IAAkB;IACtD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC;IAEjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAAsB,EAAE,CAAC;IAEvC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,GAAY,EACZ,IAAkB;IAElB,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,GAA8B,CAAC;IAE3C,2BAA2B;IAC3B,MAAM,UAAU,GAAG;QACjB,SAAS,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QAC5E,IAAI,EAAE,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,SAAS;QAC5C,IAAI,EAAE,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAC/B,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC;QACrD,KAAK,EAAE,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,kBAAkB;QACvD,WAAW,EAAE,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE;QACnD,QAAQ,EAAE,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzC,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,OAAO;QAClD,UAAU,EAAE,eAAe,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC;QAC5E,WAAW,EAAE,eAAe,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,IAAI,CAAC;QAC7E,UAAU,EAAE,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC;KAChD,CAAC;IAEF,0BAA0B;IAC1B,MAAM,UAAU,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAC;IAC3D,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,2CAA2C;IAC3C,MAAM,KAAK,GAAG;QACZ,GAAG,UAAU;QACb,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;QACrC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;QAClD,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAC1C,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;QACjD,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;KACpD,CAAC;IAEF,MAAM,eAAe,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IAC3D,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;QAC5B,OAAO,eAAe,CAAC,IAAI,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;IACnC,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAc;IACvC,MAAM,WAAW,GAAoC;QACnD,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,QAAQ;QAChB,GAAG,EAAE,KAAK;QACV,IAAI,EAAE,MAAM;QACZ,sBAAsB;QACtB,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,KAAK;QACjB,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,MAAM;KACb,CAAC;IAEF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC9C,OAAO,WAAW,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC;IAC7C,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,CAAC,qBAAqB;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAA2B;IAC7D,MAAM,IAAI,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEhD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QAEvE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,sCAAsC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;YAChC,IAAI,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAC7C,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACnC,CAAC"}
@@ -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,5 @@
1
+ /**
2
+ * Analysis Domain Types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -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
+ }