@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,316 @@
|
|
|
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
|
+
/**
|
|
26
|
+
* Plugin load error
|
|
27
|
+
*/
|
|
28
|
+
export class PluginLoadError extends Error {
|
|
29
|
+
pluginName;
|
|
30
|
+
cause;
|
|
31
|
+
constructor(message, pluginName, cause) {
|
|
32
|
+
super(message);
|
|
33
|
+
this.pluginName = pluginName;
|
|
34
|
+
this.cause = cause;
|
|
35
|
+
this.name = 'PluginLoadError';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Plugin validation error
|
|
40
|
+
*/
|
|
41
|
+
export class PluginValidationError extends Error {
|
|
42
|
+
pluginName;
|
|
43
|
+
constructor(message, pluginName) {
|
|
44
|
+
super(message);
|
|
45
|
+
this.pluginName = pluginName;
|
|
46
|
+
this.name = 'PluginValidationError';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Plugin Loader - manages plugin lifecycle
|
|
51
|
+
*/
|
|
52
|
+
export class PluginLoader {
|
|
53
|
+
plugins = new Map();
|
|
54
|
+
config;
|
|
55
|
+
constructor(config = {}) {
|
|
56
|
+
this.config = {
|
|
57
|
+
autoLoad: false,
|
|
58
|
+
failureMode: 'throw',
|
|
59
|
+
timeout: 30000,
|
|
60
|
+
...config,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Load a plugin by module path or object
|
|
65
|
+
*/
|
|
66
|
+
async loadPlugin(pluginPath) {
|
|
67
|
+
try {
|
|
68
|
+
let plugin;
|
|
69
|
+
if (typeof pluginPath === 'string') {
|
|
70
|
+
// Dynamic import
|
|
71
|
+
const module = await import(pluginPath);
|
|
72
|
+
plugin = module.default || module;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
plugin = pluginPath;
|
|
76
|
+
}
|
|
77
|
+
// Validate manifest
|
|
78
|
+
this.validateManifest(plugin.manifest);
|
|
79
|
+
// Check for duplicates
|
|
80
|
+
if (this.plugins.has(plugin.manifest.name)) {
|
|
81
|
+
throw new PluginValidationError(`Plugin '${plugin.manifest.name}' is already loaded`, plugin.manifest.name);
|
|
82
|
+
}
|
|
83
|
+
// Call onLoad hook if present
|
|
84
|
+
if (plugin.onLoad) {
|
|
85
|
+
await this.executeWithTimeout(() => plugin.onLoad(), this.config.timeout, `onLoad hook for ${plugin.manifest.name}`);
|
|
86
|
+
}
|
|
87
|
+
// Store plugin
|
|
88
|
+
this.plugins.set(plugin.manifest.name, {
|
|
89
|
+
name: plugin.manifest.name,
|
|
90
|
+
manifest: plugin.manifest,
|
|
91
|
+
plugin,
|
|
92
|
+
loaded: new Date(),
|
|
93
|
+
enabled: true,
|
|
94
|
+
});
|
|
95
|
+
console.log(`✅ Loaded plugin: ${plugin.manifest.name} v${plugin.manifest.version}`);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
const pluginName = typeof pluginPath === 'string' ? pluginPath : 'unknown';
|
|
99
|
+
if (this.config.failureMode === 'throw') {
|
|
100
|
+
throw new PluginLoadError(`Failed to load plugin: ${error instanceof Error ? error.message : String(error)}`, pluginName, error instanceof Error ? error : undefined);
|
|
101
|
+
}
|
|
102
|
+
else if (this.config.failureMode === 'warn') {
|
|
103
|
+
console.warn(`⚠️ Failed to load plugin ${pluginName}:`, error);
|
|
104
|
+
}
|
|
105
|
+
// silent mode: do nothing
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Load multiple plugins
|
|
110
|
+
*/
|
|
111
|
+
async loadPlugins(plugins) {
|
|
112
|
+
await Promise.all(plugins.map(p => this.loadPlugin(p)));
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Unload a plugin
|
|
116
|
+
*/
|
|
117
|
+
async unloadPlugin(pluginName) {
|
|
118
|
+
const loaded = this.plugins.get(pluginName);
|
|
119
|
+
if (!loaded) {
|
|
120
|
+
throw new Error(`Plugin '${pluginName}' is not loaded`);
|
|
121
|
+
}
|
|
122
|
+
// Call onUnload hook if present
|
|
123
|
+
if (loaded.plugin.onUnload) {
|
|
124
|
+
await this.executeWithTimeout(() => loaded.plugin.onUnload(), this.config.timeout, `onUnload hook for ${pluginName}`);
|
|
125
|
+
}
|
|
126
|
+
this.plugins.delete(pluginName);
|
|
127
|
+
console.log(`🗑️ Unloaded plugin: ${pluginName}`);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Enable a plugin
|
|
131
|
+
*/
|
|
132
|
+
enablePlugin(pluginName) {
|
|
133
|
+
const loaded = this.plugins.get(pluginName);
|
|
134
|
+
if (!loaded) {
|
|
135
|
+
throw new Error(`Plugin '${pluginName}' is not loaded`);
|
|
136
|
+
}
|
|
137
|
+
loaded.enabled = true;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Disable a plugin
|
|
141
|
+
*/
|
|
142
|
+
disablePlugin(pluginName) {
|
|
143
|
+
const loaded = this.plugins.get(pluginName);
|
|
144
|
+
if (!loaded) {
|
|
145
|
+
throw new Error(`Plugin '${pluginName}' is not loaded`);
|
|
146
|
+
}
|
|
147
|
+
loaded.enabled = false;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Validate all enabled plugins
|
|
151
|
+
*/
|
|
152
|
+
async validateAll(context) {
|
|
153
|
+
const results = [];
|
|
154
|
+
for (const [name, loaded] of this.plugins.entries()) {
|
|
155
|
+
if (!loaded.enabled)
|
|
156
|
+
continue;
|
|
157
|
+
if (loaded.plugin.onValidate) {
|
|
158
|
+
try {
|
|
159
|
+
const result = await this.executeWithTimeout(() => loaded.plugin.onValidate(context), this.config.timeout, `onValidate for ${name}`);
|
|
160
|
+
results.push(result);
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
console.error(`❌ Plugin ${name} validation failed:`, error);
|
|
164
|
+
results.push({
|
|
165
|
+
valid: false,
|
|
166
|
+
violations: [
|
|
167
|
+
{
|
|
168
|
+
type: 'plugin-error',
|
|
169
|
+
severity: 'error',
|
|
170
|
+
message: `Plugin validation failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
171
|
+
},
|
|
172
|
+
],
|
|
173
|
+
warnings: [],
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Merge all results
|
|
179
|
+
return this.mergeResults(results);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Validate with specific plugins
|
|
183
|
+
*/
|
|
184
|
+
async validateWith(pluginNames, context) {
|
|
185
|
+
const results = [];
|
|
186
|
+
for (const name of pluginNames) {
|
|
187
|
+
const loaded = this.plugins.get(name);
|
|
188
|
+
if (!loaded) {
|
|
189
|
+
console.warn(`⚠️ Plugin '${name}' not found, skipping`);
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
if (!loaded.enabled) {
|
|
193
|
+
console.warn(`⚠️ Plugin '${name}' is disabled, skipping`);
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
if (loaded.plugin.onValidate) {
|
|
197
|
+
try {
|
|
198
|
+
const result = await this.executeWithTimeout(() => loaded.plugin.onValidate(context), this.config.timeout, `onValidate for ${name}`);
|
|
199
|
+
results.push(result);
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
console.error(`❌ Plugin ${name} validation failed:`, error);
|
|
203
|
+
results.push({
|
|
204
|
+
valid: false,
|
|
205
|
+
violations: [
|
|
206
|
+
{
|
|
207
|
+
type: 'plugin-error',
|
|
208
|
+
severity: 'error',
|
|
209
|
+
message: `Plugin validation failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
210
|
+
},
|
|
211
|
+
],
|
|
212
|
+
warnings: [],
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return this.mergeResults(results);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Get loaded plugin info
|
|
221
|
+
*/
|
|
222
|
+
getPlugin(name) {
|
|
223
|
+
return this.plugins.get(name);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Get all loaded plugins
|
|
227
|
+
*/
|
|
228
|
+
getPlugins() {
|
|
229
|
+
return Array.from(this.plugins.values());
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Get plugin count
|
|
233
|
+
*/
|
|
234
|
+
getPluginCount() {
|
|
235
|
+
return this.plugins.size;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Clear all plugins
|
|
239
|
+
*/
|
|
240
|
+
async clearAll() {
|
|
241
|
+
const names = Array.from(this.plugins.keys());
|
|
242
|
+
await Promise.all(names.map(name => this.unloadPlugin(name)));
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Validate plugin manifest
|
|
246
|
+
*/
|
|
247
|
+
validateManifest(manifest) {
|
|
248
|
+
if (!manifest.name) {
|
|
249
|
+
throw new PluginValidationError('Plugin manifest missing required field: name', 'unknown');
|
|
250
|
+
}
|
|
251
|
+
if (!manifest.version) {
|
|
252
|
+
throw new PluginValidationError(`Plugin manifest missing required field: version`, manifest.name);
|
|
253
|
+
}
|
|
254
|
+
// Validate version format (semver-like)
|
|
255
|
+
if (!/^\d+\.\d+\.\d+/.test(manifest.version)) {
|
|
256
|
+
throw new PluginValidationError(`Invalid version format: ${manifest.version} (expected x.y.z)`, manifest.name);
|
|
257
|
+
}
|
|
258
|
+
if (!manifest.description) {
|
|
259
|
+
console.warn(`⚠️ Plugin ${manifest.name} missing description`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Execute function with timeout
|
|
264
|
+
*/
|
|
265
|
+
async executeWithTimeout(fn, timeout, taskName) {
|
|
266
|
+
return Promise.race([
|
|
267
|
+
Promise.resolve(fn()),
|
|
268
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error(`Timeout executing ${taskName}`)), timeout)),
|
|
269
|
+
]);
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Merge multiple validation results
|
|
273
|
+
*/
|
|
274
|
+
mergeResults(results) {
|
|
275
|
+
if (results.length === 0) {
|
|
276
|
+
return {
|
|
277
|
+
valid: true,
|
|
278
|
+
violations: [],
|
|
279
|
+
warnings: [],
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
const allViolations = results.flatMap(r => r.violations);
|
|
283
|
+
const allWarnings = results.flatMap(r => r.warnings);
|
|
284
|
+
const allValid = results.every(r => r.valid);
|
|
285
|
+
return {
|
|
286
|
+
valid: allValid && allViolations.length === 0,
|
|
287
|
+
violations: allViolations,
|
|
288
|
+
warnings: allWarnings,
|
|
289
|
+
metadata: {
|
|
290
|
+
pluginCount: results.length,
|
|
291
|
+
totalViolations: allViolations.length,
|
|
292
|
+
totalWarnings: allWarnings.length,
|
|
293
|
+
},
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Global plugin loader instance
|
|
299
|
+
*/
|
|
300
|
+
let globalLoader = null;
|
|
301
|
+
/**
|
|
302
|
+
* Get or create global plugin loader
|
|
303
|
+
*/
|
|
304
|
+
export function getGlobalPluginLoader(config) {
|
|
305
|
+
if (!globalLoader) {
|
|
306
|
+
globalLoader = new PluginLoader(config);
|
|
307
|
+
}
|
|
308
|
+
return globalLoader;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Reset global plugin loader
|
|
312
|
+
*/
|
|
313
|
+
export function resetGlobalPluginLoader() {
|
|
314
|
+
globalLoader = null;
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=plugin-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-loader.js","sourceRoot":"","sources":["../../../packages/ai/plugins/plugin-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core type definitions for DCYFR AI Framework
|
|
3
|
+
*
|
|
4
|
+
* Shared types used across the framework for agents, providers, sessions, and telemetry.
|
|
5
|
+
* @module @dcyfr/ai/types
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Supported AI provider types
|
|
9
|
+
*/
|
|
10
|
+
export type ProviderType = "claude" | "groq" | "ollama" | "copilot" | "openai" | "anthropic";
|
|
11
|
+
/**
|
|
12
|
+
* Agent types - typically maps to primary providers
|
|
13
|
+
*/
|
|
14
|
+
export type AgentType = "claude" | "copilot" | "groq" | "ollama";
|
|
15
|
+
/**
|
|
16
|
+
* Task classification types
|
|
17
|
+
*/
|
|
18
|
+
export type TaskType = "feature" | "bug" | "refactor" | "quick-fix" | "research" | "documentation" | "testing";
|
|
19
|
+
/**
|
|
20
|
+
* Task execution outcomes
|
|
21
|
+
*/
|
|
22
|
+
export type TaskOutcome = "success" | "escalated" | "failed" | "partial";
|
|
23
|
+
/**
|
|
24
|
+
* Validation status for quality gates
|
|
25
|
+
*/
|
|
26
|
+
export type ValidationStatus = "pass" | "fail" | "pending" | "skipped";
|
|
27
|
+
/**
|
|
28
|
+
* Validation severity levels
|
|
29
|
+
*/
|
|
30
|
+
export type ValidationSeverity = "error" | "warning" | "info";
|
|
31
|
+
/**
|
|
32
|
+
* Storage adapter types
|
|
33
|
+
*/
|
|
34
|
+
export type StorageType = "memory" | "file" | "redis" | "database";
|
|
35
|
+
/**
|
|
36
|
+
* Plugin lifecycle hooks
|
|
37
|
+
*/
|
|
38
|
+
export interface PluginHooks {
|
|
39
|
+
onLoad?: () => void | Promise<void>;
|
|
40
|
+
onUnload?: () => void | Promise<void>;
|
|
41
|
+
onValidate?: (context: ValidationContext) => Promise<ValidationResult>;
|
|
42
|
+
onComplete?: () => void | Promise<void>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Plugin manifest structure
|
|
46
|
+
*/
|
|
47
|
+
export interface PluginManifest {
|
|
48
|
+
name: string;
|
|
49
|
+
version: string;
|
|
50
|
+
description: string;
|
|
51
|
+
author?: string;
|
|
52
|
+
license?: string;
|
|
53
|
+
dependencies?: Record<string, string>;
|
|
54
|
+
configSchema?: Record<string, unknown>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Plugin interface that all plugins must implement
|
|
58
|
+
*/
|
|
59
|
+
export interface Plugin extends PluginHooks {
|
|
60
|
+
manifest: PluginManifest;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Validation context passed to plugins
|
|
64
|
+
*/
|
|
65
|
+
export interface ValidationContext {
|
|
66
|
+
projectRoot: string;
|
|
67
|
+
files: string[];
|
|
68
|
+
config: Record<string, unknown>;
|
|
69
|
+
metadata?: Record<string, unknown>;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Validation result from plugins
|
|
73
|
+
*/
|
|
74
|
+
export interface ValidationResult {
|
|
75
|
+
valid: boolean;
|
|
76
|
+
violations: ValidationViolation[];
|
|
77
|
+
warnings: ValidationViolation[];
|
|
78
|
+
metadata?: Record<string, unknown>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Individual validation violation
|
|
82
|
+
*/
|
|
83
|
+
export interface ValidationViolation {
|
|
84
|
+
type: string;
|
|
85
|
+
severity: ValidationSeverity;
|
|
86
|
+
message: string;
|
|
87
|
+
file?: string;
|
|
88
|
+
line?: number;
|
|
89
|
+
column?: number;
|
|
90
|
+
fixed?: boolean;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Storage adapter interface
|
|
94
|
+
*/
|
|
95
|
+
export interface StorageAdapter {
|
|
96
|
+
type: StorageType;
|
|
97
|
+
get<T>(key: string): Promise<T | null>;
|
|
98
|
+
set<T>(key: string, value: T): Promise<void>;
|
|
99
|
+
delete(key: string): Promise<void>;
|
|
100
|
+
list(prefix?: string): Promise<string[]>;
|
|
101
|
+
clear(): Promise<void>;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Framework configuration
|
|
105
|
+
*/
|
|
106
|
+
export interface FrameworkConfig {
|
|
107
|
+
version: string;
|
|
108
|
+
minNodeVersion?: string;
|
|
109
|
+
storage?: StorageType;
|
|
110
|
+
telemetry?: {
|
|
111
|
+
enabled: boolean;
|
|
112
|
+
retention?: string;
|
|
113
|
+
};
|
|
114
|
+
validation?: {
|
|
115
|
+
failureMode: "warn" | "error" | "block";
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Provider configuration
|
|
120
|
+
*/
|
|
121
|
+
export interface ProviderConfig {
|
|
122
|
+
name: ProviderType;
|
|
123
|
+
apiEndpoint?: string;
|
|
124
|
+
healthCheckUrl?: string;
|
|
125
|
+
maxRetries: number;
|
|
126
|
+
retryDelay: number;
|
|
127
|
+
timeout: number;
|
|
128
|
+
enabled?: boolean;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Provider health status
|
|
132
|
+
*/
|
|
133
|
+
export interface ProviderHealth {
|
|
134
|
+
provider: ProviderType;
|
|
135
|
+
available: boolean;
|
|
136
|
+
responseTime?: number;
|
|
137
|
+
lastChecked: Date;
|
|
138
|
+
rateLimitRemaining?: number;
|
|
139
|
+
rateLimitReset?: Date;
|
|
140
|
+
error?: string;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Task context for execution
|
|
144
|
+
*/
|
|
145
|
+
export interface TaskContext {
|
|
146
|
+
description: string;
|
|
147
|
+
phase: "planning" | "implementation" | "validation" | "complete";
|
|
148
|
+
estimatedTime?: string;
|
|
149
|
+
filesInProgress: string[];
|
|
150
|
+
validationStatus?: Record<string, ValidationStatus>;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Execution result wrapper
|
|
154
|
+
*/
|
|
155
|
+
export interface ExecutionResult<T = unknown> {
|
|
156
|
+
success: boolean;
|
|
157
|
+
data?: T;
|
|
158
|
+
provider: ProviderType;
|
|
159
|
+
fallbackUsed: boolean;
|
|
160
|
+
error?: Error;
|
|
161
|
+
executionTime: number;
|
|
162
|
+
validationsPassed: string[];
|
|
163
|
+
validationsFailed: string[];
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Cost estimate for provider usage
|
|
167
|
+
*/
|
|
168
|
+
export interface CostEstimate {
|
|
169
|
+
provider: string;
|
|
170
|
+
inputTokens: number;
|
|
171
|
+
outputTokens: number;
|
|
172
|
+
estimatedCost: number;
|
|
173
|
+
currency: "USD" | "EUR" | "GBP";
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Re-export all types as a namespace
|
|
177
|
+
*/
|
|
178
|
+
export * from './telemetry';
|
|
179
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../packages/ai/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core type definitions for DCYFR AI Framework
|
|
3
|
+
*
|
|
4
|
+
* Shared types used across the framework for agents, providers, sessions, and telemetry.
|
|
5
|
+
* @module @dcyfr/ai/types
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Re-export all types as a namespace
|
|
9
|
+
*/
|
|
10
|
+
export * from './telemetry';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/ai/types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqMH;;GAEG;AACH,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telemetry-specific type definitions
|
|
3
|
+
* @module @dcyfr/ai/types/telemetry
|
|
4
|
+
*/
|
|
5
|
+
import type { AgentType, TaskType, TaskOutcome, ValidationStatus } from './index';
|
|
6
|
+
/**
|
|
7
|
+
* Telemetry metrics collected during a session
|
|
8
|
+
*/
|
|
9
|
+
export interface TelemetryMetrics {
|
|
10
|
+
tokenCompliance: number;
|
|
11
|
+
testPassRate: number;
|
|
12
|
+
lintViolations: number;
|
|
13
|
+
typeErrors: number;
|
|
14
|
+
executionTime: number;
|
|
15
|
+
tokensUsed: number;
|
|
16
|
+
filesModified: number;
|
|
17
|
+
linesChanged: number;
|
|
18
|
+
validations: Record<string, ValidationStatus>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Violation record for quality issues
|
|
22
|
+
*/
|
|
23
|
+
export interface ViolationRecord {
|
|
24
|
+
timestamp: Date;
|
|
25
|
+
type: "design-token" | "eslint" | "typescript" | "test" | "security" | "custom";
|
|
26
|
+
severity: "error" | "warning" | "info";
|
|
27
|
+
message: string;
|
|
28
|
+
file?: string;
|
|
29
|
+
line?: number;
|
|
30
|
+
fixed: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Handoff record when switching agents
|
|
34
|
+
*/
|
|
35
|
+
export interface HandoffRecord {
|
|
36
|
+
timestamp: Date;
|
|
37
|
+
fromAgent: AgentType;
|
|
38
|
+
toAgent: AgentType;
|
|
39
|
+
reason: "rate-limit" | "quality" | "manual" | "cost-optimization" | "offline" | "error";
|
|
40
|
+
automatic: boolean;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Complete telemetry session data
|
|
44
|
+
*/
|
|
45
|
+
export interface TelemetrySession {
|
|
46
|
+
sessionId: string;
|
|
47
|
+
agent: AgentType;
|
|
48
|
+
taskType: TaskType;
|
|
49
|
+
taskDescription: string;
|
|
50
|
+
startTime: Date;
|
|
51
|
+
endTime?: Date;
|
|
52
|
+
outcome?: TaskOutcome;
|
|
53
|
+
metrics: TelemetryMetrics;
|
|
54
|
+
violations: ViolationRecord[];
|
|
55
|
+
handoffs: HandoffRecord[];
|
|
56
|
+
cost: {
|
|
57
|
+
provider: string;
|
|
58
|
+
inputTokens: number;
|
|
59
|
+
outputTokens: number;
|
|
60
|
+
estimatedCost: number;
|
|
61
|
+
currency: "USD" | "EUR" | "GBP";
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Aggregated statistics for an agent
|
|
66
|
+
*/
|
|
67
|
+
export interface AgentStats {
|
|
68
|
+
agent: AgentType;
|
|
69
|
+
period: string;
|
|
70
|
+
totalSessions: number;
|
|
71
|
+
totalTime: number;
|
|
72
|
+
averageSessionTime: number;
|
|
73
|
+
outcomes: {
|
|
74
|
+
success: number;
|
|
75
|
+
escalated: number;
|
|
76
|
+
failed: number;
|
|
77
|
+
partial: number;
|
|
78
|
+
};
|
|
79
|
+
quality: {
|
|
80
|
+
averageTokenCompliance: number;
|
|
81
|
+
averageTestPassRate: number;
|
|
82
|
+
totalViolations: number;
|
|
83
|
+
violationsFixed: number;
|
|
84
|
+
};
|
|
85
|
+
performance: {
|
|
86
|
+
averageExecutionTime: number;
|
|
87
|
+
totalTokensUsed: number;
|
|
88
|
+
averageFilesModified: number;
|
|
89
|
+
};
|
|
90
|
+
cost: {
|
|
91
|
+
totalCost: number;
|
|
92
|
+
averageCostPerSession: number;
|
|
93
|
+
costByTaskType: Record<TaskType, number>;
|
|
94
|
+
};
|
|
95
|
+
taskTypes: Record<TaskType, number>;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Comparison statistics across agents
|
|
99
|
+
*/
|
|
100
|
+
export interface ComparisonStats {
|
|
101
|
+
period: string;
|
|
102
|
+
agents: Record<AgentType, AgentStats>;
|
|
103
|
+
recommendations: string[];
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Handoff pattern analytics
|
|
107
|
+
*/
|
|
108
|
+
export interface HandoffPatterns {
|
|
109
|
+
totalHandoffs: number;
|
|
110
|
+
byReason: Record<HandoffRecord["reason"], number>;
|
|
111
|
+
mostCommonPath: string;
|
|
112
|
+
automaticVsManual: {
|
|
113
|
+
automatic: number;
|
|
114
|
+
manual: number;
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../../packages/ai/types/telemetry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../../packages/ai/types/telemetry.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|