@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,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage utilities and adapters
|
|
3
|
+
* @module @dcyfr/ai/utils/storage
|
|
4
|
+
*/
|
|
5
|
+
import type { StorageAdapter, StorageType } from '../types';
|
|
6
|
+
/**
|
|
7
|
+
* In-memory storage adapter (default, no persistence)
|
|
8
|
+
*/
|
|
9
|
+
export declare class MemoryStorageAdapter implements StorageAdapter {
|
|
10
|
+
type: StorageType;
|
|
11
|
+
private store;
|
|
12
|
+
get<T>(key: string): Promise<T | null>;
|
|
13
|
+
set<T>(key: string, value: T): Promise<void>;
|
|
14
|
+
delete(key: string): Promise<void>;
|
|
15
|
+
list(prefix?: string): Promise<string[]>;
|
|
16
|
+
clear(): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* File-based storage adapter (Node.js only)
|
|
20
|
+
*/
|
|
21
|
+
export declare class FileStorageAdapter implements StorageAdapter {
|
|
22
|
+
type: StorageType;
|
|
23
|
+
private basePath;
|
|
24
|
+
constructor(basePath: string);
|
|
25
|
+
get<T>(key: string): Promise<T | null>;
|
|
26
|
+
set<T>(key: string, value: T): Promise<void>;
|
|
27
|
+
delete(key: string): Promise<void>;
|
|
28
|
+
list(prefix?: string): Promise<string[]>;
|
|
29
|
+
clear(): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Storage adapter factory
|
|
33
|
+
*/
|
|
34
|
+
export declare function createStorageAdapter(type: StorageType, options?: {
|
|
35
|
+
basePath?: string;
|
|
36
|
+
}): StorageAdapter;
|
|
37
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../packages/ai/utils/storage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5D;;GAEG;AACH,qBAAa,oBAAqB,YAAW,cAAc;IACzD,IAAI,EAAE,WAAW,CAAY;IAC7B,OAAO,CAAC,KAAK,CAAmC;IAE1C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAKtC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAMxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED;;GAEG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IACvD,IAAI,EAAE,WAAW,CAAU;IAC3B,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAItB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAetC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAclC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAoBxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB7B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAevG"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage utilities and adapters
|
|
3
|
+
* @module @dcyfr/ai/utils/storage
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* In-memory storage adapter (default, no persistence)
|
|
7
|
+
*/
|
|
8
|
+
export class MemoryStorageAdapter {
|
|
9
|
+
type = 'memory';
|
|
10
|
+
store = new Map();
|
|
11
|
+
async get(key) {
|
|
12
|
+
const value = this.store.get(key);
|
|
13
|
+
return value !== undefined ? value : null;
|
|
14
|
+
}
|
|
15
|
+
async set(key, value) {
|
|
16
|
+
this.store.set(key, value);
|
|
17
|
+
}
|
|
18
|
+
async delete(key) {
|
|
19
|
+
this.store.delete(key);
|
|
20
|
+
}
|
|
21
|
+
async list(prefix) {
|
|
22
|
+
const keys = Array.from(this.store.keys());
|
|
23
|
+
if (!prefix)
|
|
24
|
+
return keys;
|
|
25
|
+
return keys.filter(key => key.startsWith(prefix));
|
|
26
|
+
}
|
|
27
|
+
async clear() {
|
|
28
|
+
this.store.clear();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* File-based storage adapter (Node.js only)
|
|
33
|
+
*/
|
|
34
|
+
export class FileStorageAdapter {
|
|
35
|
+
type = 'file';
|
|
36
|
+
basePath;
|
|
37
|
+
constructor(basePath) {
|
|
38
|
+
this.basePath = basePath;
|
|
39
|
+
}
|
|
40
|
+
async get(key) {
|
|
41
|
+
try {
|
|
42
|
+
const fs = await import('fs/promises');
|
|
43
|
+
const path = await import('path');
|
|
44
|
+
const filePath = path.join(this.basePath, `${key}.json`);
|
|
45
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
46
|
+
return JSON.parse(content);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
if (error.code === 'ENOENT') {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async set(key, value) {
|
|
56
|
+
const fs = await import('fs/promises');
|
|
57
|
+
const path = await import('path');
|
|
58
|
+
const filePath = path.join(this.basePath, `${key}.json`);
|
|
59
|
+
// Ensure directory exists
|
|
60
|
+
await fs.mkdir(this.basePath, { recursive: true });
|
|
61
|
+
await fs.writeFile(filePath, JSON.stringify(value, null, 2), 'utf-8');
|
|
62
|
+
}
|
|
63
|
+
async delete(key) {
|
|
64
|
+
const fs = await import('fs/promises');
|
|
65
|
+
const path = await import('path');
|
|
66
|
+
const filePath = path.join(this.basePath, `${key}.json`);
|
|
67
|
+
try {
|
|
68
|
+
await fs.unlink(filePath);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
if (error.code !== 'ENOENT') {
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async list(prefix) {
|
|
77
|
+
const fs = await import('fs/promises');
|
|
78
|
+
const path = await import('path');
|
|
79
|
+
try {
|
|
80
|
+
const files = await fs.readdir(this.basePath);
|
|
81
|
+
const jsonFiles = files
|
|
82
|
+
.filter(f => f.endsWith('.json'))
|
|
83
|
+
.map(f => f.replace(/\.json$/, ''));
|
|
84
|
+
if (!prefix)
|
|
85
|
+
return jsonFiles;
|
|
86
|
+
return jsonFiles.filter(key => key.startsWith(prefix));
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
if (error.code === 'ENOENT') {
|
|
90
|
+
return [];
|
|
91
|
+
}
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async clear() {
|
|
96
|
+
const fs = await import('fs/promises');
|
|
97
|
+
const path = await import('path');
|
|
98
|
+
try {
|
|
99
|
+
const files = await this.list();
|
|
100
|
+
await Promise.all(files.map(key => {
|
|
101
|
+
const filePath = path.join(this.basePath, `${key}.json`);
|
|
102
|
+
return fs.unlink(filePath);
|
|
103
|
+
}));
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
// Ignore errors during clear
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Storage adapter factory
|
|
112
|
+
*/
|
|
113
|
+
export function createStorageAdapter(type, options) {
|
|
114
|
+
switch (type) {
|
|
115
|
+
case 'memory':
|
|
116
|
+
return new MemoryStorageAdapter();
|
|
117
|
+
case 'file':
|
|
118
|
+
if (!options?.basePath) {
|
|
119
|
+
throw new Error('FileStorageAdapter requires basePath option');
|
|
120
|
+
}
|
|
121
|
+
return new FileStorageAdapter(options.basePath);
|
|
122
|
+
case 'redis':
|
|
123
|
+
case 'database':
|
|
124
|
+
throw new Error(`Storage type '${type}' not yet implemented. Use 'memory' or 'file'.`);
|
|
125
|
+
default:
|
|
126
|
+
throw new Error(`Unknown storage type: ${type}`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../packages/ai/utils/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation Framework - Orchestrates quality gates and validation plugins
|
|
3
|
+
*
|
|
4
|
+
* Provides a high-level API for running validation checks across a project
|
|
5
|
+
* using loaded plugins.
|
|
6
|
+
*
|
|
7
|
+
* @module @dcyfr/ai/validation/validation-framework
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { ValidationFramework } from '@dcyfr/ai/validation/validation-framework';
|
|
11
|
+
*
|
|
12
|
+
* const framework = new ValidationFramework();
|
|
13
|
+
* await framework.loadPlugins(['@dcyfr/agents/design-token-validator']);
|
|
14
|
+
*
|
|
15
|
+
* const result = await framework.validate({
|
|
16
|
+
* projectRoot: process.cwd(),
|
|
17
|
+
* files: ['src/**\/*.ts'],
|
|
18
|
+
* config: { strict: true },
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* if (!result.valid) {
|
|
22
|
+
* console.error('Validation failed:', result.violations);
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import { PluginLoader } from '../plugins/plugin-loader';
|
|
27
|
+
import type { ValidationContext, ValidationViolation } from '../types';
|
|
28
|
+
/**
|
|
29
|
+
* Validation gate configuration
|
|
30
|
+
*/
|
|
31
|
+
export interface ValidationGate {
|
|
32
|
+
name: string;
|
|
33
|
+
plugins: string[];
|
|
34
|
+
required: boolean;
|
|
35
|
+
failureMode: 'error' | 'warn' | 'skip';
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Validation framework configuration
|
|
39
|
+
*/
|
|
40
|
+
export interface ValidationFrameworkConfig {
|
|
41
|
+
gates?: ValidationGate[];
|
|
42
|
+
failureMode?: 'error' | 'warn' | 'block';
|
|
43
|
+
parallel?: boolean;
|
|
44
|
+
timeout?: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Validation report
|
|
48
|
+
*/
|
|
49
|
+
export interface ValidationReport {
|
|
50
|
+
valid: boolean;
|
|
51
|
+
gates: {
|
|
52
|
+
name: string;
|
|
53
|
+
passed: boolean;
|
|
54
|
+
violations: ValidationViolation[];
|
|
55
|
+
warnings: ValidationViolation[];
|
|
56
|
+
executionTime: number;
|
|
57
|
+
}[];
|
|
58
|
+
summary: {
|
|
59
|
+
totalGates: number;
|
|
60
|
+
passedGates: number;
|
|
61
|
+
failedGates: number;
|
|
62
|
+
totalViolations: number;
|
|
63
|
+
totalWarnings: number;
|
|
64
|
+
executionTime: number;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Validation Framework - high-level validation orchestrator
|
|
69
|
+
*/
|
|
70
|
+
export declare class ValidationFramework {
|
|
71
|
+
private loader;
|
|
72
|
+
private config;
|
|
73
|
+
private gates;
|
|
74
|
+
constructor(config?: ValidationFrameworkConfig);
|
|
75
|
+
/**
|
|
76
|
+
* Load validation plugins
|
|
77
|
+
*/
|
|
78
|
+
loadPlugins(plugins: string[]): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Validate project using all configured gates
|
|
81
|
+
*/
|
|
82
|
+
validate(context: ValidationContext): Promise<ValidationReport>;
|
|
83
|
+
/**
|
|
84
|
+
* Validate with specific gates
|
|
85
|
+
*/
|
|
86
|
+
validateGates(gateNames: string[], context: ValidationContext): Promise<ValidationReport>;
|
|
87
|
+
/**
|
|
88
|
+
* Add a custom gate
|
|
89
|
+
*/
|
|
90
|
+
addGate(gate: ValidationGate): void;
|
|
91
|
+
/**
|
|
92
|
+
* Remove a gate
|
|
93
|
+
*/
|
|
94
|
+
removeGate(gateName: string): void;
|
|
95
|
+
/**
|
|
96
|
+
* Get all gates
|
|
97
|
+
*/
|
|
98
|
+
getGates(): ValidationGate[];
|
|
99
|
+
/**
|
|
100
|
+
* Get plugin loader
|
|
101
|
+
*/
|
|
102
|
+
getLoader(): PluginLoader;
|
|
103
|
+
/**
|
|
104
|
+
* Run a single gate
|
|
105
|
+
*/
|
|
106
|
+
private runGate;
|
|
107
|
+
/**
|
|
108
|
+
* Get default validation gates
|
|
109
|
+
*/
|
|
110
|
+
private getDefaultGates;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=validation-framework.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-framework.d.ts","sourceRoot":"","sources":["../../../packages/ai/validation/validation-framework.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAoB,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEzF;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,CAAC;QAChB,UAAU,EAAE,mBAAmB,EAAE,CAAC;QAClC,QAAQ,EAAE,mBAAmB,EAAE,CAAC;QAChC,aAAa,EAAE,MAAM,CAAC;KACvB,EAAE,CAAC;IACJ,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,KAAK,CAAmB;gBAEpB,MAAM,GAAE,yBAA8B;IAgBlD;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAyCrE;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAkB/F;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAQnC;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQlC;;OAEG;IACH,QAAQ,IAAI,cAAc,EAAE;IAI5B;;OAEG;IACH,SAAS,IAAI,YAAY;IAIzB;;OAEG;YACW,OAAO;IAuDrB;;OAEG;IACH,OAAO,CAAC,eAAe;CA4BxB"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation Framework - Orchestrates quality gates and validation plugins
|
|
3
|
+
*
|
|
4
|
+
* Provides a high-level API for running validation checks across a project
|
|
5
|
+
* using loaded plugins.
|
|
6
|
+
*
|
|
7
|
+
* @module @dcyfr/ai/validation/validation-framework
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { ValidationFramework } from '@dcyfr/ai/validation/validation-framework';
|
|
11
|
+
*
|
|
12
|
+
* const framework = new ValidationFramework();
|
|
13
|
+
* await framework.loadPlugins(['@dcyfr/agents/design-token-validator']);
|
|
14
|
+
*
|
|
15
|
+
* const result = await framework.validate({
|
|
16
|
+
* projectRoot: process.cwd(),
|
|
17
|
+
* files: ['src/**\/*.ts'],
|
|
18
|
+
* config: { strict: true },
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* if (!result.valid) {
|
|
22
|
+
* console.error('Validation failed:', result.violations);
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import { PluginLoader } from '../plugins/plugin-loader';
|
|
27
|
+
/**
|
|
28
|
+
* Validation Framework - high-level validation orchestrator
|
|
29
|
+
*/
|
|
30
|
+
export class ValidationFramework {
|
|
31
|
+
loader;
|
|
32
|
+
config;
|
|
33
|
+
gates;
|
|
34
|
+
constructor(config = {}) {
|
|
35
|
+
this.config = {
|
|
36
|
+
failureMode: 'error',
|
|
37
|
+
parallel: true,
|
|
38
|
+
timeout: 30000,
|
|
39
|
+
...config,
|
|
40
|
+
};
|
|
41
|
+
this.loader = new PluginLoader({
|
|
42
|
+
failureMode: 'throw',
|
|
43
|
+
timeout: this.config.timeout,
|
|
44
|
+
});
|
|
45
|
+
this.gates = config.gates || this.getDefaultGates();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Load validation plugins
|
|
49
|
+
*/
|
|
50
|
+
async loadPlugins(plugins) {
|
|
51
|
+
await this.loader.loadPlugins(plugins);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Validate project using all configured gates
|
|
55
|
+
*/
|
|
56
|
+
async validate(context) {
|
|
57
|
+
const startTime = Date.now();
|
|
58
|
+
const gateResults = [];
|
|
59
|
+
// Run gates in parallel or serial based on config
|
|
60
|
+
if (this.config.parallel) {
|
|
61
|
+
const results = await Promise.all(this.gates.map(gate => this.runGate(gate, context)));
|
|
62
|
+
gateResults.push(...results);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
for (const gate of this.gates) {
|
|
66
|
+
const result = await this.runGate(gate, context);
|
|
67
|
+
gateResults.push(result);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const totalExecutionTime = Date.now() - startTime;
|
|
71
|
+
// Calculate summary
|
|
72
|
+
const passedGates = gateResults.filter(g => g.passed).length;
|
|
73
|
+
const failedGates = gateResults.length - passedGates;
|
|
74
|
+
const totalViolations = gateResults.reduce((sum, g) => sum + g.violations.length, 0);
|
|
75
|
+
const totalWarnings = gateResults.reduce((sum, g) => sum + g.warnings.length, 0);
|
|
76
|
+
const valid = failedGates === 0 && totalViolations === 0;
|
|
77
|
+
return {
|
|
78
|
+
valid,
|
|
79
|
+
gates: gateResults,
|
|
80
|
+
summary: {
|
|
81
|
+
totalGates: gateResults.length,
|
|
82
|
+
passedGates,
|
|
83
|
+
failedGates,
|
|
84
|
+
totalViolations,
|
|
85
|
+
totalWarnings,
|
|
86
|
+
executionTime: totalExecutionTime,
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Validate with specific gates
|
|
92
|
+
*/
|
|
93
|
+
async validateGates(gateNames, context) {
|
|
94
|
+
const selectedGates = this.gates.filter(g => gateNames.includes(g.name));
|
|
95
|
+
if (selectedGates.length === 0) {
|
|
96
|
+
throw new Error(`No gates found matching: ${gateNames.join(', ')}`);
|
|
97
|
+
}
|
|
98
|
+
// Temporarily swap gates
|
|
99
|
+
const originalGates = this.gates;
|
|
100
|
+
this.gates = selectedGates;
|
|
101
|
+
try {
|
|
102
|
+
return await this.validate(context);
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
this.gates = originalGates;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Add a custom gate
|
|
110
|
+
*/
|
|
111
|
+
addGate(gate) {
|
|
112
|
+
// Check for duplicate names
|
|
113
|
+
if (this.gates.some(g => g.name === gate.name)) {
|
|
114
|
+
throw new Error(`Gate '${gate.name}' already exists`);
|
|
115
|
+
}
|
|
116
|
+
this.gates.push(gate);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Remove a gate
|
|
120
|
+
*/
|
|
121
|
+
removeGate(gateName) {
|
|
122
|
+
const index = this.gates.findIndex(g => g.name === gateName);
|
|
123
|
+
if (index === -1) {
|
|
124
|
+
throw new Error(`Gate '${gateName}' not found`);
|
|
125
|
+
}
|
|
126
|
+
this.gates.splice(index, 1);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get all gates
|
|
130
|
+
*/
|
|
131
|
+
getGates() {
|
|
132
|
+
return [...this.gates];
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get plugin loader
|
|
136
|
+
*/
|
|
137
|
+
getLoader() {
|
|
138
|
+
return this.loader;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Run a single gate
|
|
142
|
+
*/
|
|
143
|
+
async runGate(gate, context) {
|
|
144
|
+
const startTime = Date.now();
|
|
145
|
+
try {
|
|
146
|
+
const result = await this.loader.validateWith(gate.plugins, context);
|
|
147
|
+
const executionTime = Date.now() - startTime;
|
|
148
|
+
const passed = result.valid && result.violations.length === 0;
|
|
149
|
+
return {
|
|
150
|
+
name: gate.name,
|
|
151
|
+
passed,
|
|
152
|
+
violations: result.violations,
|
|
153
|
+
warnings: result.warnings,
|
|
154
|
+
executionTime,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
const executionTime = Date.now() - startTime;
|
|
159
|
+
if (gate.failureMode === 'skip') {
|
|
160
|
+
console.warn(`⚠️ Gate '${gate.name}' skipped due to error:`, error);
|
|
161
|
+
return {
|
|
162
|
+
name: gate.name,
|
|
163
|
+
passed: true,
|
|
164
|
+
violations: [],
|
|
165
|
+
warnings: [
|
|
166
|
+
{
|
|
167
|
+
type: 'gate-error',
|
|
168
|
+
severity: 'warning',
|
|
169
|
+
message: `Gate skipped: ${error instanceof Error ? error.message : String(error)}`,
|
|
170
|
+
},
|
|
171
|
+
],
|
|
172
|
+
executionTime,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
const errorViolation = {
|
|
176
|
+
type: 'gate-error',
|
|
177
|
+
severity: 'error',
|
|
178
|
+
message: `Gate execution failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
179
|
+
};
|
|
180
|
+
return {
|
|
181
|
+
name: gate.name,
|
|
182
|
+
passed: false,
|
|
183
|
+
violations: [errorViolation],
|
|
184
|
+
warnings: [],
|
|
185
|
+
executionTime,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Get default validation gates
|
|
191
|
+
*/
|
|
192
|
+
getDefaultGates() {
|
|
193
|
+
return [
|
|
194
|
+
{
|
|
195
|
+
name: 'typescript',
|
|
196
|
+
plugins: ['typescript-validator'],
|
|
197
|
+
required: true,
|
|
198
|
+
failureMode: 'error',
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
name: 'eslint',
|
|
202
|
+
plugins: ['eslint-validator'],
|
|
203
|
+
required: true,
|
|
204
|
+
failureMode: 'error',
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
name: 'tests',
|
|
208
|
+
plugins: ['test-coverage-validator'],
|
|
209
|
+
required: true,
|
|
210
|
+
failureMode: 'error',
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
name: 'security',
|
|
214
|
+
plugins: ['security-validator'],
|
|
215
|
+
required: false,
|
|
216
|
+
failureMode: 'warn',
|
|
217
|
+
},
|
|
218
|
+
];
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=validation-framework.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-framework.js","sourceRoot":"","sources":["../../../packages/ai/validation/validation-framework.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dcyfr/ai",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Portable AI agent framework with plugin architecture",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"bin": {
|
|
9
|
+
"dcyfr-ai": "./bin/dcyfr-ai.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"test": "vitest run",
|
|
14
|
+
"test:watch": "vitest",
|
|
15
|
+
"typecheck": "tsc --noEmit",
|
|
16
|
+
"lint": "eslint packages/",
|
|
17
|
+
"prepare": "npm run build",
|
|
18
|
+
"cli": "node bin/cli.js"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"ai",
|
|
22
|
+
"agent",
|
|
23
|
+
"framework",
|
|
24
|
+
"plugin",
|
|
25
|
+
"llm",
|
|
26
|
+
"claude",
|
|
27
|
+
"copilot",
|
|
28
|
+
"automation"
|
|
29
|
+
],
|
|
30
|
+
"author": "DCYFR Labs",
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "https://github.com/dcyfr/dcyfr-ai.git"
|
|
35
|
+
},
|
|
36
|
+
"bugs": {
|
|
37
|
+
"url": "https://github.com/dcyfr/dcyfr-ai/issues"
|
|
38
|
+
},
|
|
39
|
+
"homepage": "https://github.com/dcyfr/dcyfr-ai#readme",
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"zod": "^3.22.4",
|
|
42
|
+
"yaml": "^2.3.4"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@types/node": "^20.0.0",
|
|
46
|
+
"typescript": "^5.3.0",
|
|
47
|
+
"vitest": "^1.0.0",
|
|
48
|
+
"eslint": "^8.55.0"
|
|
49
|
+
},
|
|
50
|
+
"peerDependencies": {
|
|
51
|
+
"typescript": "^5.0.0"
|
|
52
|
+
},
|
|
53
|
+
"engines": {
|
|
54
|
+
"node": ">=18.0.0"
|
|
55
|
+
},
|
|
56
|
+
"files": [
|
|
57
|
+
"dist",
|
|
58
|
+
"bin",
|
|
59
|
+
"config",
|
|
60
|
+
"README.md",
|
|
61
|
+
"LICENSE",
|
|
62
|
+
"CHANGELOG.md"
|
|
63
|
+
],
|
|
64
|
+
"publishConfig": {
|
|
65
|
+
"access": "public"
|
|
66
|
+
}
|
|
67
|
+
}
|