@claude-flow/codex 3.0.0-alpha.1

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 (46) hide show
  1. package/README.md +301 -0
  2. package/dist/cli.d.ts +9 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +649 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/generators/agents-md.d.ts +12 -0
  7. package/dist/generators/agents-md.d.ts.map +1 -0
  8. package/dist/generators/agents-md.js +641 -0
  9. package/dist/generators/agents-md.js.map +1 -0
  10. package/dist/generators/config-toml.d.ts +74 -0
  11. package/dist/generators/config-toml.d.ts.map +1 -0
  12. package/dist/generators/config-toml.js +910 -0
  13. package/dist/generators/config-toml.js.map +1 -0
  14. package/dist/generators/index.d.ts +9 -0
  15. package/dist/generators/index.d.ts.map +1 -0
  16. package/dist/generators/index.js +9 -0
  17. package/dist/generators/index.js.map +1 -0
  18. package/dist/generators/skill-md.d.ts +20 -0
  19. package/dist/generators/skill-md.d.ts.map +1 -0
  20. package/dist/generators/skill-md.js +946 -0
  21. package/dist/generators/skill-md.js.map +1 -0
  22. package/dist/index.d.ts +45 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +46 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/initializer.d.ts +87 -0
  27. package/dist/initializer.d.ts.map +1 -0
  28. package/dist/initializer.js +666 -0
  29. package/dist/initializer.js.map +1 -0
  30. package/dist/migrations/index.d.ts +114 -0
  31. package/dist/migrations/index.d.ts.map +1 -0
  32. package/dist/migrations/index.js +856 -0
  33. package/dist/migrations/index.js.map +1 -0
  34. package/dist/templates/index.d.ts +92 -0
  35. package/dist/templates/index.d.ts.map +1 -0
  36. package/dist/templates/index.js +284 -0
  37. package/dist/templates/index.js.map +1 -0
  38. package/dist/types.d.ts +218 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +8 -0
  41. package/dist/types.js.map +1 -0
  42. package/dist/validators/index.d.ts +42 -0
  43. package/dist/validators/index.d.ts.map +1 -0
  44. package/dist/validators/index.js +929 -0
  45. package/dist/validators/index.js.map +1 -0
  46. package/package.json +88 -0
@@ -0,0 +1,666 @@
1
+ /**
2
+ * @claude-flow/codex - CodexInitializer
3
+ *
4
+ * Main initialization class for setting up Codex projects
5
+ */
6
+ import fs from 'fs-extra';
7
+ import path from 'path';
8
+ import { generateAgentsMd } from './generators/agents-md.js';
9
+ import { generateSkillMd, generateBuiltInSkill } from './generators/skill-md.js';
10
+ import { generateConfigToml } from './generators/config-toml.js';
11
+ import { DEFAULT_SKILLS_BY_TEMPLATE, AGENTS_OVERRIDE_TEMPLATE, GITIGNORE_ENTRIES } from './templates/index.js';
12
+ /**
13
+ * Bundled skills source directory (relative to package)
14
+ */
15
+ const BUNDLED_SKILLS_DIR = '../../../../.agents/skills';
16
+ /**
17
+ * Main initializer for Codex projects
18
+ */
19
+ export class CodexInitializer {
20
+ projectPath = '';
21
+ template = 'default';
22
+ skills = [];
23
+ force = false;
24
+ dual = false;
25
+ bundledSkillsPath = '';
26
+ /**
27
+ * Initialize a new Codex project
28
+ */
29
+ async initialize(options) {
30
+ this.projectPath = path.resolve(options.projectPath);
31
+ this.template = options.template ?? 'default';
32
+ this.skills = options.skills ?? DEFAULT_SKILLS_BY_TEMPLATE[this.template];
33
+ this.force = options.force ?? false;
34
+ this.dual = options.dual ?? false;
35
+ // Resolve bundled skills path (relative to this file's location)
36
+ this.bundledSkillsPath = path.resolve(path.dirname(new URL(import.meta.url).pathname), BUNDLED_SKILLS_DIR);
37
+ const filesCreated = [];
38
+ const skillsGenerated = [];
39
+ const warnings = [];
40
+ const errors = [];
41
+ try {
42
+ // Validate project path
43
+ await this.validateProjectPath();
44
+ // Check if already initialized
45
+ const alreadyInitialized = await this.isAlreadyInitialized();
46
+ if (alreadyInitialized && !this.force) {
47
+ return {
48
+ success: false,
49
+ filesCreated,
50
+ skillsGenerated,
51
+ warnings: ['Project already initialized. Use --force to overwrite.'],
52
+ errors: ['Project already initialized'],
53
+ };
54
+ }
55
+ if (alreadyInitialized && this.force) {
56
+ warnings.push('Overwriting existing configuration files');
57
+ }
58
+ // Create directory structure
59
+ await this.createDirectoryStructure();
60
+ // Generate AGENTS.md
61
+ const agentsMd = await this.generateAgentsMd();
62
+ const agentsMdPath = path.join(this.projectPath, 'AGENTS.md');
63
+ if (await this.shouldWriteFile(agentsMdPath)) {
64
+ await fs.writeFile(agentsMdPath, agentsMd, 'utf-8');
65
+ filesCreated.push('AGENTS.md');
66
+ }
67
+ else {
68
+ warnings.push('AGENTS.md already exists - skipped');
69
+ }
70
+ // Generate config.toml
71
+ const configToml = await this.generateConfigToml();
72
+ const configTomlPath = path.join(this.projectPath, '.agents', 'config.toml');
73
+ if (await this.shouldWriteFile(configTomlPath)) {
74
+ await fs.writeFile(configTomlPath, configToml, 'utf-8');
75
+ filesCreated.push('.agents/config.toml');
76
+ }
77
+ else {
78
+ warnings.push('.agents/config.toml already exists - skipped');
79
+ }
80
+ // Copy bundled skills first (for full/enterprise templates or specific skills)
81
+ const bundledResult = await this.copyBundledSkills();
82
+ skillsGenerated.push(...bundledResult.copied);
83
+ warnings.push(...bundledResult.warnings);
84
+ // For skills not bundled, generate from templates
85
+ for (const skillName of this.skills) {
86
+ // Skip if already copied as bundled skill
87
+ if (bundledResult.copied.includes(skillName)) {
88
+ filesCreated.push(`.agents/skills/${skillName}/SKILL.md`);
89
+ continue;
90
+ }
91
+ try {
92
+ const skillResult = await this.generateSkill(skillName);
93
+ if (skillResult.created) {
94
+ skillsGenerated.push(skillName);
95
+ filesCreated.push(skillResult.path);
96
+ }
97
+ else if (skillResult.skipped) {
98
+ // Only warn if not already in bundled warnings
99
+ if (!bundledResult.warnings.some(w => w.includes(skillName))) {
100
+ warnings.push(`Skill ${skillName} already exists - skipped`);
101
+ }
102
+ }
103
+ }
104
+ catch (err) {
105
+ const errorMessage = err instanceof Error ? err.message : String(err);
106
+ warnings.push(`Failed to generate skill ${skillName}: ${errorMessage}`);
107
+ }
108
+ }
109
+ // Generate local overrides template
110
+ const overridePath = path.join(this.projectPath, '.codex', 'AGENTS.override.md');
111
+ if (await this.shouldWriteFile(overridePath)) {
112
+ await fs.writeFile(overridePath, AGENTS_OVERRIDE_TEMPLATE, 'utf-8');
113
+ filesCreated.push('.codex/AGENTS.override.md');
114
+ }
115
+ // Generate local config.toml
116
+ const localConfigPath = path.join(this.projectPath, '.codex', 'config.toml');
117
+ if (await this.shouldWriteFile(localConfigPath)) {
118
+ await fs.writeFile(localConfigPath, await this.generateLocalConfigToml(), 'utf-8');
119
+ filesCreated.push('.codex/config.toml');
120
+ }
121
+ // Update .gitignore
122
+ const gitignoreUpdated = await this.updateGitignore();
123
+ if (gitignoreUpdated) {
124
+ filesCreated.push('.gitignore (updated)');
125
+ }
126
+ // Register MCP server with Codex
127
+ const mcpResult = await this.registerMCPServer();
128
+ if (mcpResult.registered) {
129
+ filesCreated.push('MCP server (claude-flow) registered');
130
+ }
131
+ if (mcpResult.warning) {
132
+ warnings.push(mcpResult.warning);
133
+ }
134
+ // If dual mode, also generate Claude Code files
135
+ if (this.dual) {
136
+ const dualResult = await this.generateDualPlatformFiles();
137
+ filesCreated.push(...dualResult.files);
138
+ if (dualResult.warnings) {
139
+ warnings.push(...dualResult.warnings);
140
+ }
141
+ }
142
+ // Create a README for the .agents directory
143
+ const agentsReadmePath = path.join(this.projectPath, '.agents', 'README.md');
144
+ if (await this.shouldWriteFile(agentsReadmePath)) {
145
+ await fs.writeFile(agentsReadmePath, this.generateAgentsReadme(), 'utf-8');
146
+ filesCreated.push('.agents/README.md');
147
+ }
148
+ const result = {
149
+ success: true,
150
+ filesCreated,
151
+ skillsGenerated,
152
+ };
153
+ if (warnings.length > 0) {
154
+ result.warnings = warnings;
155
+ }
156
+ return result;
157
+ }
158
+ catch (error) {
159
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
160
+ errors.push(errorMessage);
161
+ const result = {
162
+ success: false,
163
+ filesCreated,
164
+ skillsGenerated,
165
+ errors,
166
+ };
167
+ if (warnings.length > 0) {
168
+ result.warnings = warnings;
169
+ }
170
+ return result;
171
+ }
172
+ }
173
+ /**
174
+ * Validate that the project path is valid and writable
175
+ */
176
+ async validateProjectPath() {
177
+ try {
178
+ await fs.ensureDir(this.projectPath);
179
+ // Check write permissions by attempting to create a temp file
180
+ const tempFile = path.join(this.projectPath, '.codex-init-test');
181
+ await fs.writeFile(tempFile, 'test', 'utf-8');
182
+ await fs.remove(tempFile);
183
+ }
184
+ catch (error) {
185
+ throw new Error(`Cannot write to project path: ${this.projectPath}`);
186
+ }
187
+ }
188
+ /**
189
+ * Check if project is already initialized
190
+ */
191
+ async isAlreadyInitialized() {
192
+ const agentsMdExists = await fs.pathExists(path.join(this.projectPath, 'AGENTS.md'));
193
+ const agentsConfigExists = await fs.pathExists(path.join(this.projectPath, '.agents', 'config.toml'));
194
+ return agentsMdExists || agentsConfigExists;
195
+ }
196
+ /**
197
+ * Check if we should write a file (force mode or doesn't exist)
198
+ */
199
+ async shouldWriteFile(filePath) {
200
+ if (this.force) {
201
+ return true;
202
+ }
203
+ return !(await fs.pathExists(filePath));
204
+ }
205
+ /**
206
+ * Create the directory structure
207
+ */
208
+ async createDirectoryStructure() {
209
+ const dirs = [
210
+ '.agents',
211
+ '.agents/skills',
212
+ '.codex',
213
+ '.claude-flow',
214
+ '.claude-flow/data',
215
+ '.claude-flow/logs',
216
+ ];
217
+ for (const dir of dirs) {
218
+ const fullPath = path.join(this.projectPath, dir);
219
+ await fs.ensureDir(fullPath);
220
+ }
221
+ }
222
+ /**
223
+ * Copy bundled skills from the package or source directory
224
+ * Returns the list of skills copied
225
+ */
226
+ async copyBundledSkills() {
227
+ const copied = [];
228
+ const warnings = [];
229
+ // Check if bundled skills directory exists
230
+ if (!await fs.pathExists(this.bundledSkillsPath)) {
231
+ warnings.push(`Bundled skills directory not found: ${this.bundledSkillsPath}`);
232
+ return { copied, warnings };
233
+ }
234
+ const destSkillsDir = path.join(this.projectPath, '.agents', 'skills');
235
+ // Get all skill directories
236
+ const skillDirs = await fs.readdir(this.bundledSkillsPath, { withFileTypes: true });
237
+ for (const dirent of skillDirs) {
238
+ if (!dirent.isDirectory())
239
+ continue;
240
+ const skillName = dirent.name;
241
+ const srcPath = path.join(this.bundledSkillsPath, skillName);
242
+ const destPath = path.join(destSkillsDir, skillName);
243
+ // Skip if skill should be filtered (based on template)
244
+ // For 'full' and 'enterprise' templates, include all skills
245
+ const includeAll = this.template === 'full' || this.template === 'enterprise';
246
+ if (!includeAll && !this.skills.includes(skillName)) {
247
+ continue;
248
+ }
249
+ try {
250
+ // Check if skill already exists and we're not forcing
251
+ if (!this.force && await fs.pathExists(destPath)) {
252
+ warnings.push(`Skill ${skillName} already exists - skipped`);
253
+ continue;
254
+ }
255
+ // Copy the entire skill directory
256
+ await fs.copy(srcPath, destPath, { overwrite: this.force });
257
+ copied.push(skillName);
258
+ }
259
+ catch (err) {
260
+ const errorMessage = err instanceof Error ? err.message : String(err);
261
+ warnings.push(`Failed to copy skill ${skillName}: ${errorMessage}`);
262
+ }
263
+ }
264
+ return { copied, warnings };
265
+ }
266
+ /**
267
+ * Check if a skill is bundled (exists in source directory)
268
+ */
269
+ async isBundledSkill(skillName) {
270
+ const skillPath = path.join(this.bundledSkillsPath, skillName);
271
+ return fs.pathExists(skillPath);
272
+ }
273
+ /**
274
+ * Register claude-flow as MCP server with Codex
275
+ */
276
+ async registerMCPServer() {
277
+ try {
278
+ const { execSync } = await import('child_process');
279
+ // Check if codex CLI is available
280
+ try {
281
+ execSync('which codex', { stdio: 'pipe' });
282
+ }
283
+ catch {
284
+ return {
285
+ registered: false,
286
+ warning: 'Codex CLI not found. Run: codex mcp add claude-flow -- npx claude-flow mcp start',
287
+ };
288
+ }
289
+ // Check if already registered
290
+ try {
291
+ const list = execSync('codex mcp list 2>&1', { encoding: 'utf-8' });
292
+ if (list.includes('claude-flow')) {
293
+ return { registered: true }; // Already registered
294
+ }
295
+ }
296
+ catch {
297
+ // Ignore list errors
298
+ }
299
+ // Register the MCP server
300
+ try {
301
+ execSync('codex mcp add claude-flow -- npx claude-flow mcp start', {
302
+ stdio: 'pipe',
303
+ timeout: 10000,
304
+ });
305
+ return { registered: true };
306
+ }
307
+ catch (err) {
308
+ const errorMessage = err instanceof Error ? err.message : String(err);
309
+ return {
310
+ registered: false,
311
+ warning: `Failed to register MCP server: ${errorMessage}. Run manually: codex mcp add claude-flow -- npx claude-flow mcp start`,
312
+ };
313
+ }
314
+ }
315
+ catch {
316
+ return {
317
+ registered: false,
318
+ warning: 'Could not register MCP server. Run manually: codex mcp add claude-flow -- npx claude-flow mcp start',
319
+ };
320
+ }
321
+ }
322
+ /**
323
+ * Generate AGENTS.md content
324
+ */
325
+ async generateAgentsMd() {
326
+ const projectName = path.basename(this.projectPath);
327
+ return generateAgentsMd({
328
+ projectName,
329
+ template: this.template,
330
+ skills: this.skills,
331
+ });
332
+ }
333
+ /**
334
+ * Generate config.toml content
335
+ */
336
+ async generateConfigToml() {
337
+ return generateConfigToml({
338
+ skills: this.skills.map(skill => ({
339
+ path: `.agents/skills/${skill}`,
340
+ enabled: true,
341
+ })),
342
+ });
343
+ }
344
+ /**
345
+ * Generate local config.toml for .codex directory
346
+ */
347
+ async generateLocalConfigToml() {
348
+ return `# Local Codex Configuration
349
+ # This file overrides .agents/config.toml for local development
350
+ # DO NOT commit this file to version control
351
+
352
+ # Development profile - more permissive
353
+ approval_policy = "never"
354
+ sandbox_mode = "danger-full-access"
355
+ web_search = "live"
356
+
357
+ # Debug settings
358
+ # Uncomment to enable debug logging
359
+ # CODEX_LOG_LEVEL = "debug"
360
+
361
+ # Local MCP server overrides
362
+ # [mcp_servers.local]
363
+ # command = "node"
364
+ # args = ["./local-mcp-server.js"]
365
+ # enabled = true
366
+
367
+ # Environment-specific settings
368
+ # [env]
369
+ # ANTHROPIC_API_KEY = "your-local-key"
370
+ `;
371
+ }
372
+ /**
373
+ * Generate a skill
374
+ */
375
+ async generateSkill(skillName) {
376
+ const skillDir = path.join(this.projectPath, '.agents', 'skills', skillName);
377
+ const skillPath = path.join(skillDir, 'SKILL.md');
378
+ // Check if skill already exists
379
+ if (!this.force && await fs.pathExists(skillPath)) {
380
+ return { created: false, skipped: true, path: `.agents/skills/${skillName}/SKILL.md` };
381
+ }
382
+ await fs.ensureDir(skillDir);
383
+ // Check if it's a built-in skill
384
+ const builtInSkills = [
385
+ 'swarm-orchestration',
386
+ 'memory-management',
387
+ 'sparc-methodology',
388
+ 'security-audit',
389
+ 'performance-analysis',
390
+ 'github-automation',
391
+ ];
392
+ let skillMd;
393
+ if (builtInSkills.includes(skillName)) {
394
+ const result = await generateBuiltInSkill(skillName);
395
+ skillMd = result.skillMd;
396
+ // Also write any associated scripts or references
397
+ if (Object.keys(result.scripts).length > 0) {
398
+ const scriptsDir = path.join(skillDir, 'scripts');
399
+ await fs.ensureDir(scriptsDir);
400
+ for (const [scriptName, scriptContent] of Object.entries(result.scripts)) {
401
+ await fs.writeFile(path.join(scriptsDir, scriptName), scriptContent, 'utf-8');
402
+ }
403
+ }
404
+ if (Object.keys(result.references).length > 0) {
405
+ const refsDir = path.join(skillDir, 'docs');
406
+ await fs.ensureDir(refsDir);
407
+ for (const [refName, refContent] of Object.entries(result.references)) {
408
+ await fs.writeFile(path.join(refsDir, refName), refContent, 'utf-8');
409
+ }
410
+ }
411
+ }
412
+ else {
413
+ // Generate a custom skill template
414
+ skillMd = await generateSkillMd({
415
+ name: skillName,
416
+ description: `Custom skill: ${skillName}`,
417
+ triggers: ['Define when to trigger this skill'],
418
+ skipWhen: ['Define when to skip this skill'],
419
+ });
420
+ }
421
+ await fs.writeFile(skillPath, skillMd, 'utf-8');
422
+ return { created: true, skipped: false, path: `.agents/skills/${skillName}/SKILL.md` };
423
+ }
424
+ /**
425
+ * Update .gitignore with Codex entries
426
+ */
427
+ async updateGitignore() {
428
+ const gitignorePath = path.join(this.projectPath, '.gitignore');
429
+ let content = '';
430
+ if (await fs.pathExists(gitignorePath)) {
431
+ content = await fs.readFile(gitignorePath, 'utf-8');
432
+ }
433
+ // Check if Codex entries already exist
434
+ if (content.includes('.codex/')) {
435
+ return false; // Already has entries
436
+ }
437
+ // Add entries with proper spacing
438
+ const separator = content.length > 0 && !content.endsWith('\n') ? '\n\n' : '\n';
439
+ const newContent = content + separator + GITIGNORE_ENTRIES.join('\n') + '\n';
440
+ await fs.writeFile(gitignorePath, newContent, 'utf-8');
441
+ return true;
442
+ }
443
+ /**
444
+ * Generate README for .agents directory
445
+ */
446
+ generateAgentsReadme() {
447
+ return `# .agents Directory
448
+
449
+ This directory contains agent configuration and skills for OpenAI Codex CLI.
450
+
451
+ ## Structure
452
+
453
+ \`\`\`
454
+ .agents/
455
+ config.toml # Main configuration file
456
+ skills/ # Skill definitions
457
+ skill-name/
458
+ SKILL.md # Skill instructions
459
+ scripts/ # Optional scripts
460
+ docs/ # Optional documentation
461
+ README.md # This file
462
+ \`\`\`
463
+
464
+ ## Configuration
465
+
466
+ The \`config.toml\` file controls:
467
+ - Model selection
468
+ - Approval policies
469
+ - Sandbox modes
470
+ - MCP server connections
471
+ - Skills configuration
472
+
473
+ ## Skills
474
+
475
+ Skills are invoked using \`$skill-name\` syntax. Each skill has:
476
+ - YAML frontmatter with metadata
477
+ - Trigger and skip conditions
478
+ - Commands and examples
479
+
480
+ ## Documentation
481
+
482
+ - Main instructions: \`AGENTS.md\` (project root)
483
+ - Local overrides: \`.codex/AGENTS.override.md\` (gitignored)
484
+ - Claude Flow: https://github.com/ruvnet/claude-flow
485
+ `;
486
+ }
487
+ /**
488
+ * Generate dual-platform files (Claude Code + Codex)
489
+ */
490
+ async generateDualPlatformFiles() {
491
+ const files = [];
492
+ const warnings = [];
493
+ // Check if CLAUDE.md already exists
494
+ const claudeMdPath = path.join(this.projectPath, 'CLAUDE.md');
495
+ const claudeMdExists = await fs.pathExists(claudeMdPath);
496
+ if (claudeMdExists && !this.force) {
497
+ warnings.push('CLAUDE.md already exists - not overwriting. Use --force to replace.');
498
+ return { files, warnings };
499
+ }
500
+ const projectName = path.basename(this.projectPath);
501
+ // Generate a CLAUDE.md that references AGENTS.md
502
+ const claudeMd = `# ${projectName}
503
+
504
+ > This project supports both Claude Code and OpenAI Codex.
505
+
506
+ ## Platform Compatibility
507
+
508
+ | Platform | Config File | Skill Syntax |
509
+ |----------|-------------|--------------|
510
+ | Claude Code | CLAUDE.md | /skill-name |
511
+ | OpenAI Codex | AGENTS.md | $skill-name |
512
+
513
+ ## Instructions
514
+
515
+ **Primary instructions are in \`AGENTS.md\`** (Agentic AI Foundation standard).
516
+
517
+ This file provides compatibility for Claude Code users.
518
+
519
+ ## Quick Start
520
+
521
+ \`\`\`bash
522
+ # Install dependencies
523
+ npm install
524
+
525
+ # Build the project
526
+ npm run build
527
+
528
+ # Run tests
529
+ npm test
530
+ \`\`\`
531
+
532
+ ## Available Skills
533
+
534
+ Both platforms share the same skills in \`.agents/skills/\`:
535
+
536
+ ${this.skills.map(s => `- \`$${s}\` (Codex) / \`/${s}\` (Claude Code)`).join('\n')}
537
+
538
+ ## Configuration
539
+
540
+ ### Codex Configuration
541
+ - Main: \`.agents/config.toml\`
542
+ - Local: \`.codex/config.toml\` (gitignored)
543
+
544
+ ### Claude Code Configuration
545
+ - This file: \`CLAUDE.md\`
546
+ - Local: \`CLAUDE.local.md\` (gitignored)
547
+
548
+ ## MCP Integration
549
+
550
+ \`\`\`bash
551
+ # Start MCP server
552
+ npx @claude-flow/cli mcp start
553
+ \`\`\`
554
+
555
+ ## Swarm Orchestration
556
+
557
+ This project uses hierarchical swarm coordination:
558
+
559
+ | Setting | Value |
560
+ |---------|-------|
561
+ | Topology | hierarchical |
562
+ | Max Agents | 8 |
563
+ | Strategy | specialized |
564
+
565
+ ## Code Standards
566
+
567
+ - Files under 500 lines
568
+ - No hardcoded secrets
569
+ - Input validation at boundaries
570
+ - Typed interfaces for APIs
571
+
572
+ ## Security
573
+
574
+ - NEVER commit .env files or secrets
575
+ - Always validate user input
576
+ - Use parameterized queries for SQL
577
+
578
+ ## Full Documentation
579
+
580
+ For complete instructions, see \`AGENTS.md\`.
581
+
582
+ ---
583
+
584
+ *Generated by @claude-flow/codex - Dual platform mode*
585
+ `;
586
+ await fs.writeFile(claudeMdPath, claudeMd, 'utf-8');
587
+ files.push('CLAUDE.md');
588
+ // Generate CLAUDE.local.md template
589
+ const claudeLocalPath = path.join(this.projectPath, 'CLAUDE.local.md');
590
+ if (await this.shouldWriteFile(claudeLocalPath)) {
591
+ const claudeLocal = `# Local Development Configuration
592
+
593
+ ## Environment
594
+
595
+ \`\`\`bash
596
+ # Development settings
597
+ CLAUDE_FLOW_LOG_LEVEL=debug
598
+ \`\`\`
599
+
600
+ ## Personal Preferences
601
+
602
+ [Add your preferences here]
603
+
604
+ ## Debug Settings
605
+
606
+ Enable verbose logging for development.
607
+
608
+ ---
609
+
610
+ *This file is gitignored and contains local-only settings.*
611
+ `;
612
+ await fs.writeFile(claudeLocalPath, claudeLocal, 'utf-8');
613
+ files.push('CLAUDE.local.md');
614
+ }
615
+ // Update .gitignore for CLAUDE.local.md
616
+ const gitignorePath = path.join(this.projectPath, '.gitignore');
617
+ if (await fs.pathExists(gitignorePath)) {
618
+ let content = await fs.readFile(gitignorePath, 'utf-8');
619
+ if (!content.includes('CLAUDE.local.md')) {
620
+ content += '\n# Claude Code local config\nCLAUDE.local.md\n';
621
+ await fs.writeFile(gitignorePath, content, 'utf-8');
622
+ }
623
+ }
624
+ warnings.push('Generated dual-platform setup. AGENTS.md is the canonical source.');
625
+ return { files, warnings };
626
+ }
627
+ /**
628
+ * Get the list of files that would be created (dry-run)
629
+ */
630
+ async dryRun(options) {
631
+ const files = [
632
+ 'AGENTS.md',
633
+ '.agents/config.toml',
634
+ '.agents/README.md',
635
+ '.codex/AGENTS.override.md',
636
+ '.codex/config.toml',
637
+ '.gitignore (updated)',
638
+ ];
639
+ const skills = options.skills ?? DEFAULT_SKILLS_BY_TEMPLATE[options.template ?? 'default'];
640
+ for (const skill of skills) {
641
+ files.push(`.agents/skills/${skill}/SKILL.md`);
642
+ }
643
+ if (options.dual) {
644
+ files.push('CLAUDE.md');
645
+ files.push('CLAUDE.local.md');
646
+ }
647
+ return files;
648
+ }
649
+ }
650
+ /**
651
+ * Quick initialization function for programmatic use
652
+ */
653
+ export async function initializeCodexProject(projectPath, options) {
654
+ const initializer = new CodexInitializer();
655
+ const initOptions = {
656
+ projectPath,
657
+ template: options?.template ?? 'default',
658
+ force: options?.force ?? false,
659
+ dual: options?.dual ?? false,
660
+ };
661
+ if (options?.skills) {
662
+ initOptions.skills = options.skills;
663
+ }
664
+ return initializer.initialize(initOptions);
665
+ }
666
+ //# sourceMappingURL=initializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initializer.js","sourceRoot":"","sources":["../src/initializer.ts"],"names":[],"mappings":"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"}