@dcyfr/ai 1.0.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/CHANGELOG.md +91 -0
- package/LICENSE +21 -0
- package/README.md +210 -0
- package/bin/cli.js +249 -0
- package/bin/dcyfr-ai.js +376 -0
- package/config/default.json +123 -0
- package/config/default.yaml +161 -0
- package/config/minimal.yaml +16 -0
- package/dist/ai/config/loader.d.ts +91 -0
- package/dist/ai/config/loader.d.ts.map +1 -0
- package/dist/ai/config/loader.js +259 -0
- package/dist/ai/config/loader.js.map +1 -0
- package/dist/ai/config/schema.d.ts +854 -0
- package/dist/ai/config/schema.d.ts.map +1 -0
- package/dist/ai/config/schema.js +260 -0
- package/dist/ai/config/schema.js.map +1 -0
- package/dist/ai/core/provider-registry.d.ts +115 -0
- package/dist/ai/core/provider-registry.d.ts.map +1 -0
- package/dist/ai/core/provider-registry.js +360 -0
- package/dist/ai/core/provider-registry.js.map +1 -0
- package/dist/ai/core/telemetry-engine.d.ts +114 -0
- package/dist/ai/core/telemetry-engine.d.ts.map +1 -0
- package/dist/ai/core/telemetry-engine.js +390 -0
- package/dist/ai/core/telemetry-engine.js.map +1 -0
- package/dist/ai/index.d.ts +17 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +21 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/plugins/plugin-loader.d.ts +132 -0
- package/dist/ai/plugins/plugin-loader.d.ts.map +1 -0
- package/dist/ai/plugins/plugin-loader.js +316 -0
- package/dist/ai/plugins/plugin-loader.js.map +1 -0
- package/dist/ai/types/index.d.ts +179 -0
- package/dist/ai/types/index.d.ts.map +1 -0
- package/dist/ai/types/index.js +11 -0
- package/dist/ai/types/index.js.map +1 -0
- package/dist/ai/types/telemetry.d.ts +117 -0
- package/dist/ai/types/telemetry.d.ts.map +1 -0
- package/dist/ai/types/telemetry.js +6 -0
- package/dist/ai/types/telemetry.js.map +1 -0
- package/dist/ai/utils/storage.d.ts +37 -0
- package/dist/ai/utils/storage.d.ts.map +1 -0
- package/dist/ai/utils/storage.js +129 -0
- package/dist/ai/utils/storage.js.map +1 -0
- package/dist/ai/validation/validation-framework.d.ts +112 -0
- package/dist/ai/validation/validation-framework.d.ts.map +1 -0
- package/dist/ai/validation/validation-framework.js +221 -0
- package/dist/ai/validation/validation-framework.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telemetry Engine
|
|
3
|
+
*
|
|
4
|
+
* Tracks agent usage, quality metrics, costs, and performance across all AI providers.
|
|
5
|
+
* Provides data-driven insights for optimizing agent allocation and cost management.
|
|
6
|
+
*
|
|
7
|
+
* @module @dcyfr/ai/core/telemetry-engine
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { TelemetryEngine } from '@dcyfr/ai/core/telemetry-engine';
|
|
11
|
+
*
|
|
12
|
+
* const telemetry = new TelemetryEngine({ storage: 'memory' });
|
|
13
|
+
*
|
|
14
|
+
* // Start tracking a task
|
|
15
|
+
* const session = telemetry.startSession('claude', {
|
|
16
|
+
* taskType: 'feature',
|
|
17
|
+
* description: 'Implement dark mode',
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* // Record metrics
|
|
21
|
+
* session.recordMetric('tokenCompliance', 0.98);
|
|
22
|
+
* session.recordValidation('typescript', 'pass');
|
|
23
|
+
*
|
|
24
|
+
* // End session
|
|
25
|
+
* const result = session.end('success');
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
import { createStorageAdapter } from '../utils/storage';
|
|
29
|
+
/**
|
|
30
|
+
* Telemetry Session Manager - handles individual sessions
|
|
31
|
+
*/
|
|
32
|
+
export class TelemetrySessionManager {
|
|
33
|
+
session;
|
|
34
|
+
startTime;
|
|
35
|
+
storage;
|
|
36
|
+
constructor(sessionId, agent, taskType, taskDescription, storage) {
|
|
37
|
+
this.storage = storage;
|
|
38
|
+
this.startTime = Date.now();
|
|
39
|
+
this.session = {
|
|
40
|
+
sessionId,
|
|
41
|
+
agent,
|
|
42
|
+
taskType,
|
|
43
|
+
taskDescription,
|
|
44
|
+
startTime: new Date(),
|
|
45
|
+
metrics: {
|
|
46
|
+
tokenCompliance: 0,
|
|
47
|
+
testPassRate: 0,
|
|
48
|
+
lintViolations: 0,
|
|
49
|
+
typeErrors: 0,
|
|
50
|
+
executionTime: 0,
|
|
51
|
+
tokensUsed: 0,
|
|
52
|
+
filesModified: 0,
|
|
53
|
+
linesChanged: 0,
|
|
54
|
+
validations: {
|
|
55
|
+
typescript: 'pending',
|
|
56
|
+
eslint: 'pending',
|
|
57
|
+
tests: 'pending',
|
|
58
|
+
designTokens: 'pending',
|
|
59
|
+
security: 'pending',
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
violations: [],
|
|
63
|
+
handoffs: [],
|
|
64
|
+
cost: {
|
|
65
|
+
provider: agent,
|
|
66
|
+
inputTokens: 0,
|
|
67
|
+
outputTokens: 0,
|
|
68
|
+
estimatedCost: 0,
|
|
69
|
+
currency: 'USD',
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Record a metric value
|
|
75
|
+
*/
|
|
76
|
+
recordMetric(metric, value) {
|
|
77
|
+
this.session.metrics[metric] = value;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Record validation status
|
|
81
|
+
*/
|
|
82
|
+
recordValidation(validation, status) {
|
|
83
|
+
this.session.metrics.validations[validation] = status;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Record a violation
|
|
87
|
+
*/
|
|
88
|
+
recordViolation(violation) {
|
|
89
|
+
this.session.violations.push({
|
|
90
|
+
timestamp: new Date(),
|
|
91
|
+
...violation,
|
|
92
|
+
});
|
|
93
|
+
// Update violation counts
|
|
94
|
+
if (violation.type === 'eslint') {
|
|
95
|
+
this.session.metrics.lintViolations++;
|
|
96
|
+
}
|
|
97
|
+
else if (violation.type === 'typescript') {
|
|
98
|
+
this.session.metrics.typeErrors++;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Record a handoff to another agent
|
|
103
|
+
*/
|
|
104
|
+
recordHandoff(handoff) {
|
|
105
|
+
this.session.handoffs.push({
|
|
106
|
+
timestamp: new Date(),
|
|
107
|
+
fromAgent: this.session.agent,
|
|
108
|
+
...handoff,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Update cost estimate
|
|
113
|
+
*/
|
|
114
|
+
updateCost(inputTokens, outputTokens) {
|
|
115
|
+
this.session.cost.inputTokens += inputTokens;
|
|
116
|
+
this.session.cost.outputTokens += outputTokens;
|
|
117
|
+
// Calculate cost based on provider
|
|
118
|
+
const costPerMillionTokens = this.getCostPerMillionTokens(this.session.agent);
|
|
119
|
+
const totalTokens = inputTokens + outputTokens;
|
|
120
|
+
this.session.cost.estimatedCost += (totalTokens / 1_000_000) * costPerMillionTokens;
|
|
121
|
+
// Update tokens used metric
|
|
122
|
+
this.session.metrics.tokensUsed = totalTokens;
|
|
123
|
+
}
|
|
124
|
+
getCostPerMillionTokens(agent) {
|
|
125
|
+
const costs = {
|
|
126
|
+
claude: 15, // $15 per 1M tokens (Sonnet 3.5)
|
|
127
|
+
copilot: 0.1, // Included in subscription
|
|
128
|
+
groq: 0, // Free tier
|
|
129
|
+
ollama: 0, // Local
|
|
130
|
+
};
|
|
131
|
+
return costs[agent];
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* End the session and return final metrics
|
|
135
|
+
*/
|
|
136
|
+
async end(outcome) {
|
|
137
|
+
this.session.endTime = new Date();
|
|
138
|
+
this.session.outcome = outcome;
|
|
139
|
+
this.session.metrics.executionTime = Date.now() - this.startTime;
|
|
140
|
+
// Save to storage
|
|
141
|
+
await this.saveToStorage();
|
|
142
|
+
return this.session;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Get current session data
|
|
146
|
+
*/
|
|
147
|
+
getSession() {
|
|
148
|
+
return { ...this.session };
|
|
149
|
+
}
|
|
150
|
+
async saveToStorage() {
|
|
151
|
+
try {
|
|
152
|
+
// Get existing sessions
|
|
153
|
+
const sessions = await this.storage.get('telemetry-sessions') || [];
|
|
154
|
+
// Add current session
|
|
155
|
+
sessions.push(this.session);
|
|
156
|
+
// Save back
|
|
157
|
+
await this.storage.set('telemetry-sessions', sessions);
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
console.error('Failed to save telemetry session:', error);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Main Telemetry Engine
|
|
166
|
+
*/
|
|
167
|
+
export class TelemetryEngine {
|
|
168
|
+
activeSessions;
|
|
169
|
+
storage;
|
|
170
|
+
constructor(options) {
|
|
171
|
+
this.activeSessions = new Map();
|
|
172
|
+
// Initialize storage
|
|
173
|
+
if (options?.storage) {
|
|
174
|
+
if (typeof options.storage === 'string') {
|
|
175
|
+
this.storage = createStorageAdapter(options.storage, { basePath: options.basePath });
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
this.storage = options.storage;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
this.storage = createStorageAdapter('memory');
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Start a new telemetry session
|
|
187
|
+
*/
|
|
188
|
+
startSession(agent, options) {
|
|
189
|
+
const sessionId = this.generateSessionId();
|
|
190
|
+
const session = new TelemetrySessionManager(sessionId, agent, options.taskType, options.description, this.storage);
|
|
191
|
+
this.activeSessions.set(sessionId, session);
|
|
192
|
+
return session;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Get an active session
|
|
196
|
+
*/
|
|
197
|
+
getSession(sessionId) {
|
|
198
|
+
return this.activeSessions.get(sessionId);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* End a session
|
|
202
|
+
*/
|
|
203
|
+
async endSession(sessionId, outcome) {
|
|
204
|
+
const session = this.activeSessions.get(sessionId);
|
|
205
|
+
if (!session)
|
|
206
|
+
return null;
|
|
207
|
+
const result = await session.end(outcome);
|
|
208
|
+
this.activeSessions.delete(sessionId);
|
|
209
|
+
return result;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Get statistics for a specific agent
|
|
213
|
+
*/
|
|
214
|
+
async getAgentStats(agent, period = '30d') {
|
|
215
|
+
const sessions = await this.getSessionsForPeriod(agent, period);
|
|
216
|
+
const totalSessions = sessions.length;
|
|
217
|
+
if (totalSessions === 0) {
|
|
218
|
+
return this.getEmptyStats(agent, period);
|
|
219
|
+
}
|
|
220
|
+
const totalTime = sessions.reduce((sum, s) => sum + s.metrics.executionTime, 0);
|
|
221
|
+
const averageSessionTime = totalTime / totalSessions;
|
|
222
|
+
const outcomes = {
|
|
223
|
+
success: sessions.filter(s => s.outcome === 'success').length,
|
|
224
|
+
escalated: sessions.filter(s => s.outcome === 'escalated').length,
|
|
225
|
+
failed: sessions.filter(s => s.outcome === 'failed').length,
|
|
226
|
+
partial: sessions.filter(s => s.outcome === 'partial').length,
|
|
227
|
+
};
|
|
228
|
+
const quality = {
|
|
229
|
+
averageTokenCompliance: sessions.reduce((sum, s) => sum + s.metrics.tokenCompliance, 0) / totalSessions,
|
|
230
|
+
averageTestPassRate: sessions.reduce((sum, s) => sum + s.metrics.testPassRate, 0) / totalSessions,
|
|
231
|
+
totalViolations: sessions.reduce((sum, s) => sum + s.violations.length, 0),
|
|
232
|
+
violationsFixed: sessions.reduce((sum, s) => sum + s.violations.filter(v => v.fixed).length, 0),
|
|
233
|
+
};
|
|
234
|
+
const performance = {
|
|
235
|
+
averageExecutionTime: averageSessionTime,
|
|
236
|
+
totalTokensUsed: sessions.reduce((sum, s) => sum + s.metrics.tokensUsed, 0),
|
|
237
|
+
averageFilesModified: sessions.reduce((sum, s) => sum + s.metrics.filesModified, 0) / totalSessions,
|
|
238
|
+
};
|
|
239
|
+
const cost = {
|
|
240
|
+
totalCost: sessions.reduce((sum, s) => sum + s.cost.estimatedCost, 0),
|
|
241
|
+
averageCostPerSession: sessions.reduce((sum, s) => sum + s.cost.estimatedCost, 0) / totalSessions,
|
|
242
|
+
costByTaskType: this.calculateCostByTaskType(sessions),
|
|
243
|
+
};
|
|
244
|
+
const taskTypes = sessions.reduce((acc, s) => {
|
|
245
|
+
acc[s.taskType] = (acc[s.taskType] || 0) + 1;
|
|
246
|
+
return acc;
|
|
247
|
+
}, {});
|
|
248
|
+
return {
|
|
249
|
+
agent,
|
|
250
|
+
period,
|
|
251
|
+
totalSessions,
|
|
252
|
+
totalTime,
|
|
253
|
+
averageSessionTime,
|
|
254
|
+
outcomes,
|
|
255
|
+
quality,
|
|
256
|
+
performance,
|
|
257
|
+
cost,
|
|
258
|
+
taskTypes,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Compare stats across all agents
|
|
263
|
+
*/
|
|
264
|
+
async compareAgents(period = '30d') {
|
|
265
|
+
const agents = ['claude', 'copilot', 'groq', 'ollama'];
|
|
266
|
+
const stats = {};
|
|
267
|
+
for (const agent of agents) {
|
|
268
|
+
stats[agent] = await this.getAgentStats(agent, period);
|
|
269
|
+
}
|
|
270
|
+
const recommendations = this.generateRecommendations(stats);
|
|
271
|
+
return {
|
|
272
|
+
period,
|
|
273
|
+
agents: stats,
|
|
274
|
+
recommendations,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Get handoff patterns
|
|
279
|
+
*/
|
|
280
|
+
async getHandoffPatterns(period = '30d') {
|
|
281
|
+
const sessions = await this.getAllSessionsForPeriod(period);
|
|
282
|
+
const allHandoffs = sessions.flatMap(s => s.handoffs);
|
|
283
|
+
const totalHandoffs = allHandoffs.length;
|
|
284
|
+
const byReason = allHandoffs.reduce((acc, h) => {
|
|
285
|
+
acc[h.reason] = (acc[h.reason] || 0) + 1;
|
|
286
|
+
return acc;
|
|
287
|
+
}, {});
|
|
288
|
+
const paths = {};
|
|
289
|
+
allHandoffs.forEach(h => {
|
|
290
|
+
const path = `${h.fromAgent} → ${h.toAgent}`;
|
|
291
|
+
paths[path] = (paths[path] || 0) + 1;
|
|
292
|
+
});
|
|
293
|
+
const mostCommonPath = Object.entries(paths).sort((a, b) => b[1] - a[1])[0]?.[0] || 'None';
|
|
294
|
+
const automaticVsManual = {
|
|
295
|
+
automatic: allHandoffs.filter(h => h.automatic).length,
|
|
296
|
+
manual: allHandoffs.filter(h => !h.automatic).length,
|
|
297
|
+
};
|
|
298
|
+
return {
|
|
299
|
+
totalHandoffs,
|
|
300
|
+
byReason,
|
|
301
|
+
mostCommonPath,
|
|
302
|
+
automaticVsManual,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
generateSessionId() {
|
|
306
|
+
// Session IDs are for internal tracking only, not security-critical
|
|
307
|
+
return `session-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
308
|
+
}
|
|
309
|
+
async getSessionsForPeriod(agent, period) {
|
|
310
|
+
const allSessions = await this.storage.get('telemetry-sessions') || [];
|
|
311
|
+
const cutoffDate = this.getPeriodCutoffDate(period);
|
|
312
|
+
return allSessions.filter(s => s.agent === agent && new Date(s.startTime) >= cutoffDate);
|
|
313
|
+
}
|
|
314
|
+
async getAllSessionsForPeriod(period) {
|
|
315
|
+
const allSessions = await this.storage.get('telemetry-sessions') || [];
|
|
316
|
+
const cutoffDate = this.getPeriodCutoffDate(period);
|
|
317
|
+
return allSessions.filter(s => new Date(s.startTime) >= cutoffDate);
|
|
318
|
+
}
|
|
319
|
+
getPeriodCutoffDate(period) {
|
|
320
|
+
const now = new Date();
|
|
321
|
+
const match = period.match(/(\d+)([dhm])/);
|
|
322
|
+
if (!match)
|
|
323
|
+
return new Date(0); // All time
|
|
324
|
+
const value = parseInt(match[1], 10);
|
|
325
|
+
const unit = match[2];
|
|
326
|
+
switch (unit) {
|
|
327
|
+
case 'd':
|
|
328
|
+
return new Date(now.getTime() - value * 24 * 60 * 60 * 1000);
|
|
329
|
+
case 'h':
|
|
330
|
+
return new Date(now.getTime() - value * 60 * 60 * 1000);
|
|
331
|
+
case 'm':
|
|
332
|
+
return new Date(now.getTime() - value * 60 * 1000);
|
|
333
|
+
default:
|
|
334
|
+
return new Date(0);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
calculateCostByTaskType(sessions) {
|
|
338
|
+
return sessions.reduce((acc, s) => {
|
|
339
|
+
acc[s.taskType] = (acc[s.taskType] || 0) + s.cost.estimatedCost;
|
|
340
|
+
return acc;
|
|
341
|
+
}, {});
|
|
342
|
+
}
|
|
343
|
+
generateRecommendations(stats) {
|
|
344
|
+
const recommendations = [];
|
|
345
|
+
// Find agents with actual data
|
|
346
|
+
const activeAgents = Object.entries(stats).filter(([, s]) => s.totalSessions > 0);
|
|
347
|
+
if (activeAgents.length === 0) {
|
|
348
|
+
return ['No sessions recorded yet. Start using the framework to get recommendations.'];
|
|
349
|
+
}
|
|
350
|
+
// Analyze quality metrics
|
|
351
|
+
const bestQuality = activeAgents.sort((a, b) => b[1].quality.averageTokenCompliance - a[1].quality.averageTokenCompliance)[0];
|
|
352
|
+
if (bestQuality) {
|
|
353
|
+
recommendations.push(`Use ${bestQuality[0]} for highest quality work (${(bestQuality[1].quality.averageTokenCompliance * 100).toFixed(1)}% token compliance)`);
|
|
354
|
+
}
|
|
355
|
+
// Analyze cost efficiency
|
|
356
|
+
const freeAgents = activeAgents.filter(([, s]) => s.cost.totalCost === 0);
|
|
357
|
+
if (freeAgents.length > 0) {
|
|
358
|
+
recommendations.push(`Use ${freeAgents.map(([agent]) => agent).join(' or ')} for cost optimization (free tier)`);
|
|
359
|
+
}
|
|
360
|
+
return recommendations;
|
|
361
|
+
}
|
|
362
|
+
getEmptyStats(agent, period) {
|
|
363
|
+
return {
|
|
364
|
+
agent,
|
|
365
|
+
period,
|
|
366
|
+
totalSessions: 0,
|
|
367
|
+
totalTime: 0,
|
|
368
|
+
averageSessionTime: 0,
|
|
369
|
+
outcomes: { success: 0, escalated: 0, failed: 0, partial: 0 },
|
|
370
|
+
quality: {
|
|
371
|
+
averageTokenCompliance: 0,
|
|
372
|
+
averageTestPassRate: 0,
|
|
373
|
+
totalViolations: 0,
|
|
374
|
+
violationsFixed: 0,
|
|
375
|
+
},
|
|
376
|
+
performance: {
|
|
377
|
+
averageExecutionTime: 0,
|
|
378
|
+
totalTokensUsed: 0,
|
|
379
|
+
averageFilesModified: 0,
|
|
380
|
+
},
|
|
381
|
+
cost: {
|
|
382
|
+
totalCost: 0,
|
|
383
|
+
averageCostPerSession: 0,
|
|
384
|
+
costByTaskType: {},
|
|
385
|
+
},
|
|
386
|
+
taskTypes: {},
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
//# sourceMappingURL=telemetry-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-engine.js","sourceRoot":"","sources":["../../../packages/ai/core/telemetry-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DCYFR AI Framework - Main Entry Point
|
|
3
|
+
*
|
|
4
|
+
* Portable AI agent framework with plugin architecture
|
|
5
|
+
* @module @dcyfr/ai
|
|
6
|
+
*/
|
|
7
|
+
export { TelemetryEngine, TelemetrySessionManager } from './core/telemetry-engine';
|
|
8
|
+
export { ProviderRegistry, RateLimitError, ProviderUnavailableError, type ProviderRegistryConfig, } from './core/provider-registry';
|
|
9
|
+
export type { ProviderType, AgentType, TaskType, TaskOutcome, ValidationStatus, ValidationSeverity, StorageType, Plugin, PluginManifest, PluginHooks, ValidationContext, ValidationResult, ValidationViolation, StorageAdapter, FrameworkConfig, ProviderConfig, ProviderHealth, TaskContext, ExecutionResult, CostEstimate, } from './types';
|
|
10
|
+
export type { TelemetrySession, TelemetryMetrics, ViolationRecord, HandoffRecord, AgentStats, ComparisonStats, HandoffPatterns, } from './types/telemetry';
|
|
11
|
+
export { PluginLoader, PluginLoadError, PluginValidationError, getGlobalPluginLoader, resetGlobalPluginLoader, type PluginLoaderConfig, } from './plugins/plugin-loader';
|
|
12
|
+
export { ValidationFramework, type ValidationFrameworkConfig, type ValidationGate, type ValidationReport, } from './validation/validation-framework';
|
|
13
|
+
export { ConfigLoader, loadConfig, type LoaderOptions, } from './config/loader';
|
|
14
|
+
export { FrameworkConfigSchema, DesignTokenConfigSchema, BarrelExportConfigSchema, PageLayoutConfigSchema, TestDataConfigSchema, PluginConfigSchema, ValidationGateConfigSchema, TelemetryConfigSchema, ProviderConfigSchema, DEFAULT_CONFIG, type DesignTokenConfig, type BarrelExportConfig, type PageLayoutConfig, type TestDataConfig, type Severity, type FailureMode, } from './config/schema';
|
|
15
|
+
export { createStorageAdapter, MemoryStorageAdapter, FileStorageAdapter } from './utils/storage';
|
|
16
|
+
export declare const VERSION = "1.0.0";
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/ai/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,wBAAwB,EACxB,KAAK,sBAAsB,GAC5B,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EACV,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,MAAM,EACN,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,cAAc,EACd,cAAc,EACd,WAAW,EACX,eAAe,EACf,YAAY,GACb,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,UAAU,EACV,eAAe,EACf,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,kBAAkB,GACxB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,mBAAmB,EACnB,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACtB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EACL,YAAY,EACZ,UAAU,EACV,KAAK,aAAa,GACnB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,WAAW,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGjG,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
package/dist/ai/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DCYFR AI Framework - Main Entry Point
|
|
3
|
+
*
|
|
4
|
+
* Portable AI agent framework with plugin architecture
|
|
5
|
+
* @module @dcyfr/ai
|
|
6
|
+
*/
|
|
7
|
+
// Core exports
|
|
8
|
+
export { TelemetryEngine, TelemetrySessionManager } from './core/telemetry-engine';
|
|
9
|
+
export { ProviderRegistry, RateLimitError, ProviderUnavailableError, } from './core/provider-registry';
|
|
10
|
+
// Plugin system exports
|
|
11
|
+
export { PluginLoader, PluginLoadError, PluginValidationError, getGlobalPluginLoader, resetGlobalPluginLoader, } from './plugins/plugin-loader';
|
|
12
|
+
// Validation framework exports
|
|
13
|
+
export { ValidationFramework, } from './validation/validation-framework';
|
|
14
|
+
// Configuration system exports
|
|
15
|
+
export { ConfigLoader, loadConfig, } from './config/loader';
|
|
16
|
+
export { FrameworkConfigSchema, DesignTokenConfigSchema, BarrelExportConfigSchema, PageLayoutConfigSchema, TestDataConfigSchema, PluginConfigSchema, ValidationGateConfigSchema, TelemetryConfigSchema, ProviderConfigSchema, DEFAULT_CONFIG, } from './config/schema';
|
|
17
|
+
// Utility exports
|
|
18
|
+
export { createStorageAdapter, MemoryStorageAdapter, FileStorageAdapter } from './utils/storage';
|
|
19
|
+
// Version
|
|
20
|
+
export const VERSION = '1.0.0';
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../packages/ai/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAe;AACf,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,wBAAwB,GAEzB,MAAM,0BAA0B,CAAC;AAqClC,wBAAwB;AACxB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,GAExB,MAAM,yBAAyB,CAAC;AAEjC,+BAA+B;AAC/B,OAAO,EACL,mBAAmB,GAIpB,MAAM,mCAAmC,CAAC;AAE3C,+BAA+B;AAC/B,OAAO,EACL,YAAY,EACZ,UAAU,GAEX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,GAOf,MAAM,iBAAiB,CAAC;AAEzB,kBAAkB;AAClB,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEjG,UAAU;AACV,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Loader - Dynamic plugin loading and lifecycle management
|
|
3
|
+
*
|
|
4
|
+
* Handles loading, validation, and execution of plugins with manifest validation
|
|
5
|
+
* and error isolation.
|
|
6
|
+
*
|
|
7
|
+
* @module @dcyfr/ai/plugins/plugin-loader
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { PluginLoader } from '@dcyfr/ai/plugins/plugin-loader';
|
|
11
|
+
*
|
|
12
|
+
* const loader = new PluginLoader();
|
|
13
|
+
*
|
|
14
|
+
* // Load a plugin
|
|
15
|
+
* await loader.loadPlugin('@dcyfr/agents/design-token-validator');
|
|
16
|
+
*
|
|
17
|
+
* // Execute plugin validation
|
|
18
|
+
* const result = await loader.validateAll({
|
|
19
|
+
* projectRoot: '/path/to/project',
|
|
20
|
+
* files: ['src/app.ts'],
|
|
21
|
+
* config: {},
|
|
22
|
+
* });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
import type { Plugin, PluginManifest, ValidationContext, ValidationResult } from '../types';
|
|
26
|
+
/**
|
|
27
|
+
* Plugin load error
|
|
28
|
+
*/
|
|
29
|
+
export declare class PluginLoadError extends Error {
|
|
30
|
+
pluginName: string;
|
|
31
|
+
cause?: Error | undefined;
|
|
32
|
+
constructor(message: string, pluginName: string, cause?: Error | undefined);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Plugin validation error
|
|
36
|
+
*/
|
|
37
|
+
export declare class PluginValidationError extends Error {
|
|
38
|
+
pluginName: string;
|
|
39
|
+
constructor(message: string, pluginName: string);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Plugin loader configuration
|
|
43
|
+
*/
|
|
44
|
+
export interface PluginLoaderConfig {
|
|
45
|
+
autoLoad?: boolean;
|
|
46
|
+
failureMode?: 'throw' | 'warn' | 'silent';
|
|
47
|
+
timeout?: number;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Loaded plugin wrapper
|
|
51
|
+
*/
|
|
52
|
+
interface LoadedPlugin {
|
|
53
|
+
name: string;
|
|
54
|
+
manifest: PluginManifest;
|
|
55
|
+
plugin: Plugin;
|
|
56
|
+
loaded: Date;
|
|
57
|
+
enabled: boolean;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Plugin Loader - manages plugin lifecycle
|
|
61
|
+
*/
|
|
62
|
+
export declare class PluginLoader {
|
|
63
|
+
private plugins;
|
|
64
|
+
private config;
|
|
65
|
+
constructor(config?: PluginLoaderConfig);
|
|
66
|
+
/**
|
|
67
|
+
* Load a plugin by module path or object
|
|
68
|
+
*/
|
|
69
|
+
loadPlugin(pluginPath: string | Plugin): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Load multiple plugins
|
|
72
|
+
*/
|
|
73
|
+
loadPlugins(plugins: (string | Plugin)[]): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Unload a plugin
|
|
76
|
+
*/
|
|
77
|
+
unloadPlugin(pluginName: string): Promise<void>;
|
|
78
|
+
/**
|
|
79
|
+
* Enable a plugin
|
|
80
|
+
*/
|
|
81
|
+
enablePlugin(pluginName: string): void;
|
|
82
|
+
/**
|
|
83
|
+
* Disable a plugin
|
|
84
|
+
*/
|
|
85
|
+
disablePlugin(pluginName: string): void;
|
|
86
|
+
/**
|
|
87
|
+
* Validate all enabled plugins
|
|
88
|
+
*/
|
|
89
|
+
validateAll(context: ValidationContext): Promise<ValidationResult>;
|
|
90
|
+
/**
|
|
91
|
+
* Validate with specific plugins
|
|
92
|
+
*/
|
|
93
|
+
validateWith(pluginNames: string[], context: ValidationContext): Promise<ValidationResult>;
|
|
94
|
+
/**
|
|
95
|
+
* Get loaded plugin info
|
|
96
|
+
*/
|
|
97
|
+
getPlugin(name: string): LoadedPlugin | undefined;
|
|
98
|
+
/**
|
|
99
|
+
* Get all loaded plugins
|
|
100
|
+
*/
|
|
101
|
+
getPlugins(): LoadedPlugin[];
|
|
102
|
+
/**
|
|
103
|
+
* Get plugin count
|
|
104
|
+
*/
|
|
105
|
+
getPluginCount(): number;
|
|
106
|
+
/**
|
|
107
|
+
* Clear all plugins
|
|
108
|
+
*/
|
|
109
|
+
clearAll(): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* Validate plugin manifest
|
|
112
|
+
*/
|
|
113
|
+
private validateManifest;
|
|
114
|
+
/**
|
|
115
|
+
* Execute function with timeout
|
|
116
|
+
*/
|
|
117
|
+
private executeWithTimeout;
|
|
118
|
+
/**
|
|
119
|
+
* Merge multiple validation results
|
|
120
|
+
*/
|
|
121
|
+
private mergeResults;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get or create global plugin loader
|
|
125
|
+
*/
|
|
126
|
+
export declare function getGlobalPluginLoader(config?: PluginLoaderConfig): PluginLoader;
|
|
127
|
+
/**
|
|
128
|
+
* Reset global plugin loader
|
|
129
|
+
*/
|
|
130
|
+
export declare function resetGlobalPluginLoader(): void;
|
|
131
|
+
export {};
|
|
132
|
+
//# sourceMappingURL=plugin-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-loader.d.ts","sourceRoot":"","sources":["../../../packages/ai/plugins/plugin-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5F;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACJ,UAAU,EAAE,MAAM;IAAS,KAAK,CAAC,EAAE,KAAK;gBAAhE,OAAO,EAAE,MAAM,EAAS,UAAU,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,KAAK,YAAA;CAI7E;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IACV,UAAU,EAAE,MAAM;gBAA1C,OAAO,EAAE,MAAM,EAAS,UAAU,EAAE,MAAM;CAIvD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,GAAE,kBAAuB;IAS3C;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0D5D;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBrD;;OAEG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAQtC;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAQvC;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmCxE;;OAEG;IACG,YAAY,CAChB,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC;IA2C5B;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIjD;;OAEG;IACH,UAAU,IAAI,YAAY,EAAE;IAI5B;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyBxB;;OAEG;YACW,kBAAkB;IAahC;;OAEG;IACH,OAAO,CAAC,YAAY;CAwBrB;AAOD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,YAAY,CAK/E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C"}
|