@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,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Loader - Three-layer config merge system
|
|
3
|
+
*
|
|
4
|
+
* Loads and merges configuration from multiple sources:
|
|
5
|
+
* 1. Framework defaults (from schema.ts)
|
|
6
|
+
* 2. Project config (.dcyfr.yaml, .dcyfr.json, package.json)
|
|
7
|
+
* 3. User overrides (environment variables, CLI flags)
|
|
8
|
+
*/
|
|
9
|
+
import { type FrameworkConfig } from './schema.js';
|
|
10
|
+
/**
|
|
11
|
+
* Configuration loader options
|
|
12
|
+
*/
|
|
13
|
+
export interface LoaderOptions {
|
|
14
|
+
/**
|
|
15
|
+
* Project root directory (default: process.cwd())
|
|
16
|
+
*/
|
|
17
|
+
projectRoot?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Override configuration file path
|
|
20
|
+
*/
|
|
21
|
+
configFile?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Enable environment variable overrides
|
|
24
|
+
*/
|
|
25
|
+
enableEnvOverrides?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Enable package.json config section
|
|
28
|
+
*/
|
|
29
|
+
enablePackageJson?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Validation mode
|
|
32
|
+
*/
|
|
33
|
+
validate?: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Configuration loader with three-layer merge
|
|
37
|
+
*/
|
|
38
|
+
export declare class ConfigLoader {
|
|
39
|
+
private projectRoot;
|
|
40
|
+
private options;
|
|
41
|
+
constructor(options?: LoaderOptions);
|
|
42
|
+
/**
|
|
43
|
+
* Load complete configuration with three-layer merge
|
|
44
|
+
*/
|
|
45
|
+
load(): Promise<FrameworkConfig>;
|
|
46
|
+
/**
|
|
47
|
+
* Load project configuration from files
|
|
48
|
+
*/
|
|
49
|
+
private loadProjectConfig;
|
|
50
|
+
/**
|
|
51
|
+
* Load configuration from a specific file
|
|
52
|
+
*/
|
|
53
|
+
private loadConfigFile;
|
|
54
|
+
/**
|
|
55
|
+
* Load configuration from package.json
|
|
56
|
+
*/
|
|
57
|
+
private loadPackageJsonConfig;
|
|
58
|
+
/**
|
|
59
|
+
* Load user overrides from environment variables
|
|
60
|
+
*/
|
|
61
|
+
private loadUserOverrides;
|
|
62
|
+
/**
|
|
63
|
+
* Parse environment variable value to appropriate type
|
|
64
|
+
*/
|
|
65
|
+
private parseEnvValue;
|
|
66
|
+
/**
|
|
67
|
+
* Set nested object value using dot notation
|
|
68
|
+
*/
|
|
69
|
+
private setNestedValue;
|
|
70
|
+
/**
|
|
71
|
+
* Deep merge multiple objects
|
|
72
|
+
*/
|
|
73
|
+
private deepMerge;
|
|
74
|
+
/**
|
|
75
|
+
* Check if value is a plain object
|
|
76
|
+
*/
|
|
77
|
+
private isPlainObject;
|
|
78
|
+
/**
|
|
79
|
+
* Validate configuration against schema
|
|
80
|
+
*/
|
|
81
|
+
validate(config: unknown): FrameworkConfig;
|
|
82
|
+
/**
|
|
83
|
+
* Get configuration file path (if exists)
|
|
84
|
+
*/
|
|
85
|
+
getConfigFilePath(): Promise<string | null>;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Convenience function to load configuration
|
|
89
|
+
*/
|
|
90
|
+
export declare function loadConfig(options?: LoaderOptions): Promise<FrameworkConfig>;
|
|
91
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../packages/ai/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAAyC,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAmB1F;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAgB;gBAEnB,OAAO,GAAE,aAAkB;IAUvC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;IAqBtC;;OAEG;YACW,iBAAiB;IAgC/B;;OAEG;YACW,cAAc;IAkB5B;;OAEG;YACW,qBAAqB;IAuBnC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAwBrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB;;OAEG;IACH,OAAO,CAAC,SAAS;IAqBjB;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,eAAe;IAU1C;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAelD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAGlF"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Loader - Three-layer config merge system
|
|
3
|
+
*
|
|
4
|
+
* Loads and merges configuration from multiple sources:
|
|
5
|
+
* 1. Framework defaults (from schema.ts)
|
|
6
|
+
* 2. Project config (.dcyfr.yaml, .dcyfr.json, package.json)
|
|
7
|
+
* 3. User overrides (environment variables, CLI flags)
|
|
8
|
+
*/
|
|
9
|
+
import { readFile } from 'fs/promises';
|
|
10
|
+
import { existsSync } from 'fs';
|
|
11
|
+
import { parse as parseYaml } from 'yaml';
|
|
12
|
+
import { join } from 'path';
|
|
13
|
+
import { FrameworkConfigSchema, DEFAULT_CONFIG } from './schema.js';
|
|
14
|
+
/**
|
|
15
|
+
* Configuration file names to search for (in priority order)
|
|
16
|
+
*/
|
|
17
|
+
const CONFIG_FILES = [
|
|
18
|
+
'.dcyfr.yaml',
|
|
19
|
+
'.dcyfr.yml',
|
|
20
|
+
'.dcyfr.json',
|
|
21
|
+
'dcyfr.config.json',
|
|
22
|
+
'dcyfr.config.yaml',
|
|
23
|
+
'dcyfr.config.yml',
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Environment variable prefix
|
|
27
|
+
*/
|
|
28
|
+
const ENV_PREFIX = 'DCYFR_';
|
|
29
|
+
/**
|
|
30
|
+
* Configuration loader with three-layer merge
|
|
31
|
+
*/
|
|
32
|
+
export class ConfigLoader {
|
|
33
|
+
projectRoot;
|
|
34
|
+
options;
|
|
35
|
+
constructor(options = {}) {
|
|
36
|
+
this.projectRoot = options.projectRoot || process.cwd();
|
|
37
|
+
this.options = {
|
|
38
|
+
enableEnvOverrides: true,
|
|
39
|
+
enablePackageJson: true,
|
|
40
|
+
validate: true,
|
|
41
|
+
...options,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Load complete configuration with three-layer merge
|
|
46
|
+
*/
|
|
47
|
+
async load() {
|
|
48
|
+
// Layer 1: Framework defaults
|
|
49
|
+
const defaults = { ...DEFAULT_CONFIG };
|
|
50
|
+
// Layer 2: Project configuration
|
|
51
|
+
const projectConfig = await this.loadProjectConfig();
|
|
52
|
+
// Layer 3: User overrides
|
|
53
|
+
const userOverrides = this.loadUserOverrides();
|
|
54
|
+
// Merge all layers (deep merge)
|
|
55
|
+
const merged = this.deepMerge(defaults, projectConfig, userOverrides);
|
|
56
|
+
// Validate final configuration
|
|
57
|
+
if (this.options.validate) {
|
|
58
|
+
return this.validate(merged);
|
|
59
|
+
}
|
|
60
|
+
return merged;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Load project configuration from files
|
|
64
|
+
*/
|
|
65
|
+
async loadProjectConfig() {
|
|
66
|
+
// Try custom config file first
|
|
67
|
+
if (this.options.configFile) {
|
|
68
|
+
const customPath = join(this.projectRoot, this.options.configFile);
|
|
69
|
+
if (existsSync(customPath)) {
|
|
70
|
+
return await this.loadConfigFile(customPath);
|
|
71
|
+
}
|
|
72
|
+
throw new Error(`Config file not found: ${this.options.configFile}`);
|
|
73
|
+
}
|
|
74
|
+
// Search for config files in priority order
|
|
75
|
+
for (const filename of CONFIG_FILES) {
|
|
76
|
+
const filepath = join(this.projectRoot, filename);
|
|
77
|
+
if (existsSync(filepath)) {
|
|
78
|
+
console.log(`📝 Loading config from ${filename}`);
|
|
79
|
+
return await this.loadConfigFile(filepath);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Try package.json
|
|
83
|
+
if (this.options.enablePackageJson) {
|
|
84
|
+
const pkgConfig = await this.loadPackageJsonConfig();
|
|
85
|
+
if (pkgConfig) {
|
|
86
|
+
return pkgConfig;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// No project config found, use defaults
|
|
90
|
+
console.log('ℹ️ No config file found, using defaults');
|
|
91
|
+
return {};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Load configuration from a specific file
|
|
95
|
+
*/
|
|
96
|
+
async loadConfigFile(filepath) {
|
|
97
|
+
try {
|
|
98
|
+
const content = await readFile(filepath, 'utf-8');
|
|
99
|
+
if (filepath.endsWith('.json')) {
|
|
100
|
+
return JSON.parse(content);
|
|
101
|
+
}
|
|
102
|
+
if (filepath.endsWith('.yaml') || filepath.endsWith('.yml')) {
|
|
103
|
+
return parseYaml(content);
|
|
104
|
+
}
|
|
105
|
+
throw new Error(`Unsupported config file format: ${filepath}`);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
throw new Error(`Failed to load config file ${filepath}: ${error}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Load configuration from package.json
|
|
113
|
+
*/
|
|
114
|
+
async loadPackageJsonConfig() {
|
|
115
|
+
const pkgPath = join(this.projectRoot, 'package.json');
|
|
116
|
+
if (!existsSync(pkgPath)) {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
120
|
+
const content = await readFile(pkgPath, 'utf-8');
|
|
121
|
+
const pkg = JSON.parse(content);
|
|
122
|
+
if (pkg.dcyfr) {
|
|
123
|
+
console.log('📦 Loading config from package.json');
|
|
124
|
+
return pkg.dcyfr;
|
|
125
|
+
}
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
console.warn(`⚠️ Failed to load package.json: ${error}`);
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Load user overrides from environment variables
|
|
135
|
+
*/
|
|
136
|
+
loadUserOverrides() {
|
|
137
|
+
if (!this.options.enableEnvOverrides) {
|
|
138
|
+
return {};
|
|
139
|
+
}
|
|
140
|
+
const overrides = {};
|
|
141
|
+
// Parse environment variables with DCYFR_ prefix
|
|
142
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
143
|
+
if (key.startsWith(ENV_PREFIX)) {
|
|
144
|
+
const configKey = key
|
|
145
|
+
.substring(ENV_PREFIX.length)
|
|
146
|
+
.toLowerCase()
|
|
147
|
+
.replace(/_/g, '.');
|
|
148
|
+
this.setNestedValue(overrides, configKey, this.parseEnvValue(value));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return overrides;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Parse environment variable value to appropriate type
|
|
155
|
+
*/
|
|
156
|
+
parseEnvValue(value) {
|
|
157
|
+
if (!value)
|
|
158
|
+
return undefined;
|
|
159
|
+
// Boolean
|
|
160
|
+
if (value === 'true')
|
|
161
|
+
return true;
|
|
162
|
+
if (value === 'false')
|
|
163
|
+
return false;
|
|
164
|
+
// Number
|
|
165
|
+
if (/^\d+(\.\d+)?$/.test(value)) {
|
|
166
|
+
return parseFloat(value);
|
|
167
|
+
}
|
|
168
|
+
// JSON
|
|
169
|
+
if (value.startsWith('{') || value.startsWith('[')) {
|
|
170
|
+
try {
|
|
171
|
+
return JSON.parse(value);
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return value;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return value;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Set nested object value using dot notation
|
|
181
|
+
*/
|
|
182
|
+
setNestedValue(obj, path, value) {
|
|
183
|
+
const keys = path.split('.');
|
|
184
|
+
let current = obj;
|
|
185
|
+
for (let i = 0; i < keys.length - 1; i++) {
|
|
186
|
+
const key = keys[i];
|
|
187
|
+
if (!(key in current)) {
|
|
188
|
+
current[key] = {};
|
|
189
|
+
}
|
|
190
|
+
current = current[key];
|
|
191
|
+
}
|
|
192
|
+
current[keys[keys.length - 1]] = value;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Deep merge multiple objects
|
|
196
|
+
*/
|
|
197
|
+
deepMerge(...objects) {
|
|
198
|
+
const result = {};
|
|
199
|
+
for (const obj of objects) {
|
|
200
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
201
|
+
if (value === undefined)
|
|
202
|
+
continue;
|
|
203
|
+
if (this.isPlainObject(value) && this.isPlainObject(result[key])) {
|
|
204
|
+
result[key] = this.deepMerge(result[key], value);
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
result[key] = value;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return result;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Check if value is a plain object
|
|
215
|
+
*/
|
|
216
|
+
isPlainObject(value) {
|
|
217
|
+
return (typeof value === 'object' &&
|
|
218
|
+
value !== null &&
|
|
219
|
+
!Array.isArray(value) &&
|
|
220
|
+
Object.getPrototypeOf(value) === Object.prototype);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Validate configuration against schema
|
|
224
|
+
*/
|
|
225
|
+
validate(config) {
|
|
226
|
+
try {
|
|
227
|
+
return FrameworkConfigSchema.parse(config);
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
console.error('❌ Configuration validation failed:');
|
|
231
|
+
console.error(error);
|
|
232
|
+
throw new Error('Invalid configuration');
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Get configuration file path (if exists)
|
|
237
|
+
*/
|
|
238
|
+
async getConfigFilePath() {
|
|
239
|
+
if (this.options.configFile) {
|
|
240
|
+
const customPath = join(this.projectRoot, this.options.configFile);
|
|
241
|
+
return existsSync(customPath) ? customPath : null;
|
|
242
|
+
}
|
|
243
|
+
for (const filename of CONFIG_FILES) {
|
|
244
|
+
const filepath = join(this.projectRoot, filename);
|
|
245
|
+
if (existsSync(filepath)) {
|
|
246
|
+
return filepath;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Convenience function to load configuration
|
|
254
|
+
*/
|
|
255
|
+
export async function loadConfig(options) {
|
|
256
|
+
const loader = new ConfigLoader(options);
|
|
257
|
+
return await loader.load();
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../packages/ai/config/loader.ts"],"names":[],"mappings":"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"}
|