@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.
Files changed (49) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/LICENSE +21 -0
  3. package/README.md +210 -0
  4. package/bin/cli.js +249 -0
  5. package/bin/dcyfr-ai.js +376 -0
  6. package/config/default.json +123 -0
  7. package/config/default.yaml +161 -0
  8. package/config/minimal.yaml +16 -0
  9. package/dist/ai/config/loader.d.ts +91 -0
  10. package/dist/ai/config/loader.d.ts.map +1 -0
  11. package/dist/ai/config/loader.js +259 -0
  12. package/dist/ai/config/loader.js.map +1 -0
  13. package/dist/ai/config/schema.d.ts +854 -0
  14. package/dist/ai/config/schema.d.ts.map +1 -0
  15. package/dist/ai/config/schema.js +260 -0
  16. package/dist/ai/config/schema.js.map +1 -0
  17. package/dist/ai/core/provider-registry.d.ts +115 -0
  18. package/dist/ai/core/provider-registry.d.ts.map +1 -0
  19. package/dist/ai/core/provider-registry.js +360 -0
  20. package/dist/ai/core/provider-registry.js.map +1 -0
  21. package/dist/ai/core/telemetry-engine.d.ts +114 -0
  22. package/dist/ai/core/telemetry-engine.d.ts.map +1 -0
  23. package/dist/ai/core/telemetry-engine.js +390 -0
  24. package/dist/ai/core/telemetry-engine.js.map +1 -0
  25. package/dist/ai/index.d.ts +17 -0
  26. package/dist/ai/index.d.ts.map +1 -0
  27. package/dist/ai/index.js +21 -0
  28. package/dist/ai/index.js.map +1 -0
  29. package/dist/ai/plugins/plugin-loader.d.ts +132 -0
  30. package/dist/ai/plugins/plugin-loader.d.ts.map +1 -0
  31. package/dist/ai/plugins/plugin-loader.js +316 -0
  32. package/dist/ai/plugins/plugin-loader.js.map +1 -0
  33. package/dist/ai/types/index.d.ts +179 -0
  34. package/dist/ai/types/index.d.ts.map +1 -0
  35. package/dist/ai/types/index.js +11 -0
  36. package/dist/ai/types/index.js.map +1 -0
  37. package/dist/ai/types/telemetry.d.ts +117 -0
  38. package/dist/ai/types/telemetry.d.ts.map +1 -0
  39. package/dist/ai/types/telemetry.js +6 -0
  40. package/dist/ai/types/telemetry.js.map +1 -0
  41. package/dist/ai/utils/storage.d.ts +37 -0
  42. package/dist/ai/utils/storage.d.ts.map +1 -0
  43. package/dist/ai/utils/storage.js +129 -0
  44. package/dist/ai/utils/storage.js.map +1 -0
  45. package/dist/ai/validation/validation-framework.d.ts +112 -0
  46. package/dist/ai/validation/validation-framework.d.ts.map +1 -0
  47. package/dist/ai/validation/validation-framework.js +221 -0
  48. package/dist/ai/validation/validation-framework.js.map +1 -0
  49. package/package.json +67 -0
@@ -0,0 +1,376 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * DCYFR AI Framework CLI
5
+ * Extended tool for initialization, validation, and management
6
+ */
7
+
8
+ import { ConfigLoader } from '../dist/ai/config/loader.js';
9
+ import { FrameworkConfigSchema, DEFAULT_CONFIG } from '../dist/ai/config/schema.js';
10
+ import { existsSync, writeFileSync, mkdirSync } from 'fs';
11
+ import { join, dirname } from 'path';
12
+ import { fileURLToPath } from 'url';
13
+
14
+ const __filename = fileURLToPath(import.meta.url);
15
+ const __dirname = dirname(__filename);
16
+
17
+ /**
18
+ * Parse command line arguments
19
+ */
20
+ function parseArgs() {
21
+ const args = process.argv.slice(2);
22
+ const command = args[0] || 'help';
23
+ const flags = {};
24
+ const positional = [];
25
+
26
+ for (let i = 1; i < args.length; i++) {
27
+ const arg = args[i];
28
+
29
+ if (arg.startsWith('--')) {
30
+ const [key, value] = arg.substring(2).split('=');
31
+ flags[key] = value !== undefined ? value : args[i + 1];
32
+ if (value === undefined && args[i + 1] && !args[i + 1].startsWith('-')) {
33
+ i++; // Skip next arg if it was used as value
34
+ }
35
+ } else if (arg.startsWith('-')) {
36
+ flags[arg.substring(1)] = true;
37
+ } else {
38
+ positional.push(arg);
39
+ }
40
+ }
41
+
42
+ return { command, args: positional, flags };
43
+ }
44
+
45
+ /**
46
+ * Initialize new project
47
+ */
48
+ async function initProject(options) {
49
+ const name = options.flags.name || 'my-app';
50
+ const type = options.flags.type || 'vanilla';
51
+
52
+ console.log(`🚀 Initializing ${type} project: ${name}\n`);
53
+
54
+ // Create package.json
55
+ const packageJson = {
56
+ name,
57
+ version: '1.0.0',
58
+ description: `${name} - powered by @dcyfr/ai`,
59
+ type: 'module',
60
+ scripts: {
61
+ validate: 'dcyfr-ai validate',
62
+ report: 'dcyfr-ai report',
63
+ },
64
+ dependencies: {
65
+ '@dcyfr/ai': '^1.0.0',
66
+ },
67
+ dcyfr: {
68
+ version: '1.0.0',
69
+ projectName: name,
70
+ telemetry: {
71
+ enabled: true,
72
+ storage: 'file',
73
+ },
74
+ },
75
+ };
76
+
77
+ if (!existsSync('package.json')) {
78
+ writeFileSync('package.json', JSON.stringify(packageJson, null, 2));
79
+ console.log('✅ Created package.json');
80
+ } else {
81
+ console.log('ℹ️ package.json already exists, skipping');
82
+ }
83
+
84
+ // Create config file
85
+ await initConfig(options);
86
+
87
+ console.log('\n✨ Project initialized!');
88
+ console.log('\nNext steps:');
89
+ console.log(' 1. npm install');
90
+ console.log(' 2. dcyfr-ai config:validate');
91
+ console.log(' 3. dcyfr-ai validate\n');
92
+ }
93
+
94
+ /**
95
+ * Initialize configuration file
96
+ */
97
+ async function initConfig(options) {
98
+ const format = options.flags.format || 'yaml';
99
+ const minimal = options.flags.minimal;
100
+ const outputPath = options.flags.output || (format === 'json' ? '.dcyfr.json' : '.dcyfr.yaml');
101
+
102
+ console.log(`📝 Creating ${outputPath}...\n`);
103
+
104
+ if (existsSync(outputPath)) {
105
+ console.log(`❌ File ${outputPath} already exists`);
106
+ console.log(' Use --output to specify different file');
107
+ process.exit(1);
108
+ }
109
+
110
+ // Load templates
111
+ const templateDir = join(__dirname, '..', 'config');
112
+ const templateFile = minimal
113
+ ? `minimal.${format}`
114
+ : `default.${format}`;
115
+ const templatePath = join(templateDir, templateFile);
116
+
117
+ try {
118
+ const { readFileSync } = await import('fs');
119
+ const template = readFileSync(templatePath, 'utf-8');
120
+ writeFileSync(outputPath, template);
121
+ console.log(`✅ Created ${outputPath}`);
122
+ } catch (error) {
123
+ console.error(`❌ Failed to create config: ${error.message}`);
124
+ process.exit(1);
125
+ }
126
+ }
127
+
128
+ /**
129
+ * Validate configuration
130
+ */
131
+ async function validateConfig(options) {
132
+ console.log('🔍 Validating DCYFR configuration...\n');
133
+
134
+ const projectRoot = options.flags.root || process.cwd();
135
+ const configFile = options.flags.config;
136
+
137
+ try {
138
+ const loader = new ConfigLoader({
139
+ projectRoot,
140
+ configFile,
141
+ enableEnvOverrides: true,
142
+ });
143
+
144
+ const config = await loader.load();
145
+ const validated = FrameworkConfigSchema.parse(config);
146
+
147
+ console.log('✅ Configuration is valid!\n');
148
+ console.log(`📋 Project: ${validated.projectName}`);
149
+ console.log(`📁 Version: ${validated.version}`);
150
+ console.log(`📊 Telemetry: ${validated.telemetry.enabled ? 'enabled' : 'disabled'}`);
151
+ console.log(`🔌 Providers: ${validated.providers.enabled ? 'enabled' : 'disabled'}`);
152
+ console.log(`✓ Validation: ${validated.validation.enabled ? 'enabled' : 'disabled'}`);
153
+
154
+ if (options.flags.verbose || options.flags.v) {
155
+ console.log('\n📄 Full Configuration:');
156
+ console.log(JSON.stringify(validated, null, 2));
157
+ }
158
+
159
+ } catch (error) {
160
+ console.error('❌ Configuration validation failed:\n');
161
+ console.error(error.message);
162
+
163
+ if (error.errors) {
164
+ console.error('\nValidation errors:');
165
+ error.errors.forEach(err => {
166
+ console.error(` - ${err.path.join('.')}: ${err.message}`);
167
+ });
168
+ }
169
+
170
+ process.exit(1);
171
+ }
172
+ }
173
+
174
+ /**
175
+ * Show configuration schema
176
+ */
177
+ function showSchema() {
178
+ console.log('📋 DCYFR Configuration Schema\n');
179
+ console.log(JSON.stringify(DEFAULT_CONFIG, null, 2));
180
+ }
181
+
182
+ /**
183
+ * Create plugin template
184
+ */
185
+ async function createPlugin(options) {
186
+ const name = options.flags.name;
187
+
188
+ if (!name) {
189
+ console.error('❌ Plugin name is required');
190
+ console.log('Usage: dcyfr-ai plugin:create --name <name>');
191
+ process.exit(1);
192
+ }
193
+
194
+ const outputDir = options.flags.output || 'plugins';
195
+ const pluginFile = `${name}.ts`;
196
+ const outputPath = join(outputDir, pluginFile);
197
+
198
+ // Create directory
199
+ if (!existsSync(outputDir)) {
200
+ mkdirSync(outputDir, { recursive: true });
201
+ }
202
+
203
+ const pluginTemplate = `/**
204
+ * ${name} Plugin
205
+ *
206
+ * Custom validation plugin for @dcyfr/ai framework
207
+ */
208
+
209
+ import type { Plugin, ValidationContext, ValidationResult } from '@dcyfr/ai';
210
+
211
+ export const ${toCamelCase(name)}: Plugin = {
212
+ manifest: {
213
+ name: '${name}',
214
+ version: '1.0.0',
215
+ description: 'Custom validation plugin',
216
+ author: 'Your Name',
217
+ },
218
+
219
+ async onLoad() {
220
+ console.log('${name} plugin loaded');
221
+ },
222
+
223
+ async onValidate(context: ValidationContext): Promise<ValidationResult> {
224
+ const violations = [];
225
+ const warnings = [];
226
+
227
+ console.log(\`Validating \${context.files.length} files...\`);
228
+
229
+ // TODO: Implement your validation logic here
230
+ for (const file of context.files) {
231
+ // Check something about the file
232
+ }
233
+
234
+ return {
235
+ valid: violations.length === 0,
236
+ violations,
237
+ warnings,
238
+ metadata: {
239
+ filesChecked: context.files.length,
240
+ },
241
+ };
242
+ },
243
+
244
+ async onComplete() {
245
+ console.log('${name} plugin validation complete');
246
+ },
247
+ };
248
+ `;
249
+
250
+ writeFileSync(outputPath, pluginTemplate);
251
+
252
+ console.log(`✅ Plugin created: ${outputPath}`);
253
+ console.log('\nNext steps:');
254
+ console.log(` 1. Edit ${outputPath} to implement validation logic`);
255
+ console.log(' 2. Import and load the plugin in your validation script\n');
256
+ }
257
+
258
+ /**
259
+ * Show help
260
+ */
261
+ function showHelp() {
262
+ console.log(`
263
+ @dcyfr/ai CLI - AI Agent Framework
264
+
265
+ USAGE:
266
+ dcyfr-ai <command> [options]
267
+
268
+ COMMANDS:
269
+ init Initialize new project with @dcyfr/ai
270
+ config:init Create a new configuration file
271
+ config:validate Validate current configuration
272
+ config:schema Show configuration schema
273
+ plugin:create Create a new plugin template
274
+ validate Run validation checks
275
+ test Alias for validate
276
+ report Generate telemetry report
277
+ help Show this help message
278
+
279
+ INIT OPTIONS:
280
+ --name <name> Project name
281
+ --type <type> Project type (nextjs, express, vanilla) [default: vanilla]
282
+
283
+ CONFIG:INIT OPTIONS:
284
+ --format <type> Configuration format (yaml, json) [default: yaml]
285
+ --minimal Generate minimal configuration
286
+ --output <path> Output file path [default: .dcyfr.yaml]
287
+
288
+ CONFIG:VALIDATE OPTIONS:
289
+ --verbose, -v Show full configuration
290
+ --config <path> Path to config file
291
+ --root <path> Project root directory
292
+
293
+ PLUGIN:CREATE OPTIONS:
294
+ --name <name> Plugin name (required)
295
+ --output <path> Output directory [default: plugins]
296
+
297
+ VALIDATE OPTIONS:
298
+ --config <path> Path to config file
299
+ --files <glob> File pattern to validate [default: src/**/*.ts]
300
+
301
+ REPORT OPTIONS:
302
+ --period <time> Time period (7d, 30d, 90d) [default: 30d]
303
+ --agent <name> Filter by agent
304
+
305
+ EXAMPLES:
306
+ dcyfr-ai init --name my-app --type nextjs
307
+ dcyfr-ai config:init
308
+ dcyfr-ai config:validate --verbose
309
+ dcyfr-ai plugin:create --name my-validator
310
+ dcyfr-ai validate --files "src/**/*.{ts,tsx}"
311
+ dcyfr-ai report --period 7d --agent claude
312
+
313
+ For more information, visit: https://github.com/dcyfr/dcyfr-ai
314
+ `);
315
+ }
316
+
317
+ /**
318
+ * Utility: Convert to camelCase
319
+ */
320
+ function toCamelCase(str) {
321
+ return str.replace(/-([a-z])/g, (g) => g[1].toUpperCase());
322
+ }
323
+
324
+ /**
325
+ * Main CLI handler
326
+ */
327
+ async function main() {
328
+ const options = parseArgs();
329
+ const { command } = options;
330
+
331
+ try {
332
+ switch (command) {
333
+ case 'init':
334
+ await initProject(options);
335
+ break;
336
+ case 'config:init':
337
+ await initConfig(options);
338
+ break;
339
+ case 'config:validate':
340
+ await validateConfig(options);
341
+ break;
342
+ case 'config:schema':
343
+ showSchema();
344
+ break;
345
+ case 'plugin:create':
346
+ await createPlugin(options);
347
+ break;
348
+ case 'validate':
349
+ case 'test':
350
+ console.log('🔍 Validation runner');
351
+ console.log('ℹ️ Use PluginLoader and ValidationFramework in your code');
352
+ console.log('See: https://github.com/dcyfr/dcyfr-ai/blob/main/docs/GETTING-STARTED.md\n');
353
+ break;
354
+ case 'report':
355
+ console.log('📊 Telemetry report generator');
356
+ console.log('ℹ️ Use TelemetryEngine API to generate reports');
357
+ console.log('See: https://github.com/dcyfr/dcyfr-ai/blob/main/examples/standalone-nextjs/scripts/telemetry-report.js\n');
358
+ break;
359
+ case 'help':
360
+ case '--help':
361
+ case '-h':
362
+ showHelp();
363
+ break;
364
+ default:
365
+ console.error(`❌ Unknown command: ${command}`);
366
+ console.log('Run "dcyfr-ai help" for usage information.');
367
+ process.exit(1);
368
+ }
369
+ } catch (error) {
370
+ console.error(`❌ Error: ${error.message}`);
371
+ process.exit(1);
372
+ }
373
+ }
374
+
375
+ // Run CLI
376
+ main();
@@ -0,0 +1,123 @@
1
+ {
2
+ "$schema": "https://dcyfr.ai/schema/config.json",
3
+ "version": "1.0.0",
4
+ "projectName": "my-app",
5
+ "telemetry": {
6
+ "enabled": true,
7
+ "storage": "file",
8
+ "storagePath": ".dcyfr/telemetry",
9
+ "retentionDays": 30,
10
+ "sampling": 1.0
11
+ },
12
+ "providers": {
13
+ "enabled": true,
14
+ "primary": "claude",
15
+ "fallback": ["groq", "ollama", "copilot"],
16
+ "timeout": 30000,
17
+ "retries": 3,
18
+ "providers": {
19
+ "claude": {
20
+ "enabled": true,
21
+ "model": "claude-3-5-sonnet-20241022",
22
+ "maxTokens": 8192
23
+ },
24
+ "groq": {
25
+ "enabled": true,
26
+ "model": "llama-3.3-70b-versatile"
27
+ },
28
+ "ollama": {
29
+ "enabled": true,
30
+ "baseUrl": "http://localhost:11434",
31
+ "model": "llama3.2"
32
+ },
33
+ "copilot": {
34
+ "enabled": true
35
+ }
36
+ }
37
+ },
38
+ "validation": {
39
+ "enabled": true,
40
+ "parallel": true,
41
+ "failFast": false,
42
+ "gates": [
43
+ {
44
+ "name": "typescript",
45
+ "plugins": ["typescript-compiler"],
46
+ "required": true,
47
+ "failureMode": "error"
48
+ },
49
+ {
50
+ "name": "linting",
51
+ "plugins": ["eslint"],
52
+ "required": true,
53
+ "failureMode": "error"
54
+ },
55
+ {
56
+ "name": "testing",
57
+ "plugins": ["vitest"],
58
+ "required": false,
59
+ "failureMode": "warn"
60
+ }
61
+ ]
62
+ },
63
+ "plugins": [
64
+ {
65
+ "name": "typescript-compiler",
66
+ "enabled": true,
67
+ "timeout": 30000,
68
+ "failureMode": "error"
69
+ },
70
+ {
71
+ "name": "eslint",
72
+ "enabled": true,
73
+ "timeout": 15000,
74
+ "failureMode": "warn"
75
+ }
76
+ ],
77
+ "agents": {
78
+ "designTokens": {
79
+ "enabled": true,
80
+ "tokenFile": "src/lib/design-tokens.ts",
81
+ "compliance": 0.90,
82
+ "autofix": false,
83
+ "strictMode": true,
84
+ "patterns": {
85
+ "spacing": ["SPACING.XS", "SPACING.SM", "SPACING.MD", "SPACING.LG", "SPACING.XL"],
86
+ "typography": ["TYPOGRAPHY.H1", "TYPOGRAPHY.H2", "TYPOGRAPHY.BODY"],
87
+ "colors": ["SEMANTIC_COLORS.primary", "SEMANTIC_COLORS.success"]
88
+ }
89
+ },
90
+ "barrelExports": {
91
+ "enabled": true,
92
+ "barrelPaths": ["@/components", "@/lib", "@/utils"],
93
+ "allowRelativeWithin": false,
94
+ "strictMode": true,
95
+ "exceptions": ["src/app/**/layout.tsx", "src/app/**/page.tsx"]
96
+ },
97
+ "pageLayout": {
98
+ "enabled": true,
99
+ "targetUsage": 0.90,
100
+ "pagePattern": "src/app/**/page.tsx",
101
+ "exceptions": ["ArticleLayout", "ArchiveLayout", "ErrorLayout"],
102
+ "strictMode": true
103
+ },
104
+ "testData": {
105
+ "enabled": true,
106
+ "testPattern": "**/*.{test,spec}.{ts,tsx,js,jsx}",
107
+ "sensitivePatterns": {
108
+ "apiKeys": true,
109
+ "passwords": true,
110
+ "secrets": true,
111
+ "tokens": true,
112
+ "emails": true,
113
+ "urls": true
114
+ },
115
+ "allowedPrefixes": ["MOCK_", "TEST_", "FAKE_", "FIXTURE_"]
116
+ }
117
+ },
118
+ "project": {
119
+ "root": ".",
120
+ "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.js", "src/**/*.jsx"],
121
+ "exclude": ["node_modules/**", "dist/**", "build/**", ".next/**", "coverage/**"]
122
+ }
123
+ }
@@ -0,0 +1,161 @@
1
+ # DCYFR AI Framework Configuration
2
+ # Version: 1.0.0
3
+ # Documentation: https://github.com/dcyfr/dcyfr-ai
4
+
5
+ # Framework version
6
+ version: '1.0.0'
7
+
8
+ # Project metadata
9
+ projectName: my-app
10
+
11
+ # Telemetry configuration
12
+ telemetry:
13
+ enabled: true
14
+ storage: file
15
+ storagePath: .dcyfr/telemetry
16
+ retentionDays: 30
17
+ sampling: 1.0
18
+
19
+ # AI Provider configuration
20
+ providers:
21
+ enabled: true
22
+ primary: claude
23
+ fallback:
24
+ - groq
25
+ - ollama
26
+ - copilot
27
+ timeout: 30000
28
+ retries: 3
29
+ providers:
30
+ claude:
31
+ enabled: true
32
+ # apiKey: ${ANTHROPIC_API_KEY}
33
+ model: claude-3-5-sonnet-20241022
34
+ maxTokens: 8192
35
+ groq:
36
+ enabled: true
37
+ # apiKey: ${GROQ_API_KEY}
38
+ model: llama-3.3-70b-versatile
39
+ ollama:
40
+ enabled: true
41
+ baseUrl: http://localhost:11434
42
+ model: llama3.2
43
+ copilot:
44
+ enabled: true
45
+ # Uses GitHub Copilot authentication
46
+
47
+ # Validation configuration
48
+ validation:
49
+ enabled: true
50
+ parallel: true
51
+ failFast: false
52
+ gates:
53
+ - name: typescript
54
+ plugins:
55
+ - typescript-compiler
56
+ required: true
57
+ failureMode: error
58
+
59
+ - name: linting
60
+ plugins:
61
+ - eslint
62
+ required: true
63
+ failureMode: error
64
+
65
+ - name: testing
66
+ plugins:
67
+ - vitest
68
+ required: false
69
+ failureMode: warn
70
+
71
+ # Plugin configuration
72
+ plugins:
73
+ - name: typescript-compiler
74
+ enabled: true
75
+ timeout: 30000
76
+ failureMode: error
77
+
78
+ - name: eslint
79
+ enabled: true
80
+ timeout: 15000
81
+ failureMode: warn
82
+
83
+ # DCYFR Agents configuration
84
+ agents:
85
+ # Design token validator
86
+ designTokens:
87
+ enabled: true
88
+ tokenFile: src/lib/design-tokens.ts
89
+ compliance: 0.90
90
+ autofix: false
91
+ strictMode: true
92
+ patterns:
93
+ spacing:
94
+ - SPACING.XS
95
+ - SPACING.SM
96
+ - SPACING.MD
97
+ - SPACING.LG
98
+ - SPACING.XL
99
+ typography:
100
+ - TYPOGRAPHY.H1
101
+ - TYPOGRAPHY.H2
102
+ - TYPOGRAPHY.BODY
103
+ colors:
104
+ - SEMANTIC_COLORS.primary
105
+ - SEMANTIC_COLORS.success
106
+
107
+ # Barrel export checker
108
+ barrelExports:
109
+ enabled: true
110
+ barrelPaths:
111
+ - '@/components'
112
+ - '@/lib'
113
+ - '@/utils'
114
+ allowRelativeWithin: false
115
+ strictMode: true
116
+ exceptions:
117
+ - src/app/**/layout.tsx
118
+ - src/app/**/page.tsx
119
+
120
+ # PageLayout enforcer
121
+ pageLayout:
122
+ enabled: true
123
+ targetUsage: 0.90
124
+ pagePattern: src/app/**/page.tsx
125
+ exceptions:
126
+ - ArticleLayout
127
+ - ArchiveLayout
128
+ - ErrorLayout
129
+ strictMode: true
130
+
131
+ # Test data guardian
132
+ testData:
133
+ enabled: true
134
+ testPattern: '**/*.{test,spec}.{ts,tsx,js,jsx}'
135
+ sensitivePatterns:
136
+ apiKeys: true
137
+ passwords: true
138
+ secrets: true
139
+ tokens: true
140
+ emails: true
141
+ urls: true
142
+ allowedPrefixes:
143
+ - MOCK_
144
+ - TEST_
145
+ - FAKE_
146
+ - FIXTURE_
147
+
148
+ # Project settings
149
+ project:
150
+ root: .
151
+ include:
152
+ - src/**/*.ts
153
+ - src/**/*.tsx
154
+ - src/**/*.js
155
+ - src/**/*.jsx
156
+ exclude:
157
+ - node_modules/**
158
+ - dist/**
159
+ - build/**
160
+ - .next/**
161
+ - coverage/**
@@ -0,0 +1,16 @@
1
+ # DCYFR AI Framework - Minimal Configuration
2
+ # Only specify what differs from defaults
3
+
4
+ version: '1.0.0'
5
+ projectName: my-minimal-app
6
+
7
+ # Enable only what you need
8
+ agents:
9
+ designTokens:
10
+ enabled: true
11
+ barrelExports:
12
+ enabled: true
13
+ pageLayout:
14
+ enabled: false
15
+ testData:
16
+ enabled: true