@iservu-inc/adf-cli 0.13.0 → 0.14.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 (70) hide show
  1. package/.context/memory/architecture.md +40 -0
  2. package/.context/memory/glossary.md +19 -0
  3. package/.project/docs/VERSIONING-GUIDE.md +127 -0
  4. package/AGENTS.md +53 -0
  5. package/CHANGELOG.md +47 -0
  6. package/bin/adf.js +10 -0
  7. package/conductor/archive/context_synthesis_20260112/metadata.json +8 -0
  8. package/conductor/archive/context_synthesis_20260112/plan.md +40 -0
  9. package/conductor/archive/context_synthesis_20260112/spec.md +43 -0
  10. package/conductor/archive/verify_opencode_20260111/metadata.json +8 -0
  11. package/conductor/archive/verify_opencode_20260111/plan.md +34 -0
  12. package/conductor/archive/verify_opencode_20260111/spec.md +25 -0
  13. package/conductor/code_styleguides/javascript.md +51 -0
  14. package/conductor/product-guidelines.md +26 -0
  15. package/conductor/product.md +25 -0
  16. package/conductor/setup_state.json +1 -0
  17. package/conductor/tech-stack.md +28 -0
  18. package/conductor/tracks/bootstrap_agents_20260111/metadata.json +8 -0
  19. package/conductor/tracks/bootstrap_agents_20260111/plan.md +17 -0
  20. package/conductor/tracks/bootstrap_agents_20260111/spec.md +27 -0
  21. package/conductor/tracks.md +9 -0
  22. package/conductor/workflow.md +333 -0
  23. package/lib/analysis/ai-gap-analyzer.js +66 -0
  24. package/lib/analysis/dynamic-question-generator.js +55 -0
  25. package/lib/analysis/heuristic-gap-analyzer.js +45 -0
  26. package/lib/analysis/synthesis-engine.js +142 -0
  27. package/lib/commands/deploy.js +28 -2
  28. package/lib/commands/tools.js +38 -0
  29. package/lib/generators/codex-cli-generator.js +41 -0
  30. package/lib/generators/index.js +33 -0
  31. package/lib/generators/kiro-generator.js +49 -0
  32. package/lib/generators/opencode-generator.js +332 -313
  33. package/lib/generators/trae-generator.js +34 -0
  34. package/lib/templates/scripts/analyze-framework-updates.js +361 -0
  35. package/lib/templates/scripts/build.js +608 -0
  36. package/lib/templates/scripts/check-framework-updates.js +118 -0
  37. package/lib/templates/scripts/config-helpers.js +1 -1
  38. package/lib/templates/scripts/deploy.js +13 -28
  39. package/lib/templates/scripts/init.js +110 -220
  40. package/lib/templates/scripts/postinstall.js +13 -0
  41. package/lib/templates/scripts/update-frameworks.js +28 -0
  42. package/lib/templates/scripts/validate-env.js +428 -0
  43. package/lib/templates/scripts/validate-mcp.js +471 -0
  44. package/lib/templates/scripts/validate.js +482 -0
  45. package/lib/templates/shared/agents/analyst.md +1 -1
  46. package/lib/templates/shared/agents/architect.md +13 -17
  47. package/lib/templates/shared/agents/dev.md +2 -2
  48. package/lib/templates/shared/agents/pm.md +1 -1
  49. package/lib/templates/shared/agents/qa.md +1 -1
  50. package/lib/templates/shared/agents/sm.md +2 -2
  51. package/lib/templates/shared/templates/README.md +2 -2
  52. package/lib/templates/shared/templates/openspec-proposal.md +2 -2
  53. package/lib/templates/shared/templates/prd-template.md +1 -1
  54. package/lib/templates/shared/templates/story-template.md +1 -1
  55. package/lib/utils/context-extractor.js +157 -0
  56. package/lib/utils/framework-detector.js +54 -0
  57. package/lib/utils/tool-feature-registry.js +102 -0
  58. package/package.json +1 -1
  59. package/tests/ai-gap-analyzer.test.js +38 -0
  60. package/tests/codex-cli-generator.test.js +29 -0
  61. package/tests/context-extractor.test.js +70 -0
  62. package/tests/deploy-integration.test.js +36 -0
  63. package/tests/deploy.test.js +57 -0
  64. package/tests/dynamic-question-generator.test.js +29 -0
  65. package/tests/framework-detector.test.js +55 -0
  66. package/tests/heuristic-gap-analyzer.test.js +46 -0
  67. package/tests/kiro-trae-generators.test.js +43 -0
  68. package/tests/opencode-generator.test.js +113 -0
  69. package/tests/synthesis-engine.test.js +52 -0
  70. package/tests/tool-feature-registry.test.js +23 -0
@@ -0,0 +1,118 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Framework Update Checker
5
+ * Monitors the 4 upstream framework repositories for updates
6
+ */
7
+
8
+ const { execSync } = require('child_process');
9
+ const fs = require('fs');
10
+ const path = require('path');
11
+ const chalk = require('chalk');
12
+
13
+ const SUBMODULES = [
14
+ { name: 'BMAD-METHOD', path: 'references/bmad-method', branch: 'main' },
15
+ { name: 'Spec-Kit', path: 'references/spec-kit', branch: 'main' },
16
+ { name: 'Context Engineering', path: 'references/context-engineering', branch: 'main' },
17
+ { name: 'PRPs Agentic', path: 'references/prps-agentic', branch: 'main' }
18
+ ];
19
+
20
+ console.log(chalk.cyan.bold('\nšŸ” Checking for framework updates...\n'));
21
+
22
+ let hasUpdates = false;
23
+ const updates = [];
24
+
25
+ SUBMODULES.forEach(submodule => {
26
+ try {
27
+ // Check if submodule exists
28
+ if (!fs.existsSync(submodule.path)) {
29
+ console.log(chalk.yellow(`āš ļø ${submodule.name}: Submodule not initialized`));
30
+ console.log(chalk.gray(` Run: git submodule update --init --recursive\n`));
31
+ return;
32
+ }
33
+
34
+ // Get current commit
35
+ const currentCommit = execSync(
36
+ `git -C ${submodule.path} rev-parse HEAD`,
37
+ { encoding: 'utf-8' }
38
+ ).trim();
39
+
40
+ // Fetch latest
41
+ console.log(chalk.gray(` Fetching ${submodule.name}...`));
42
+ execSync(`git -C ${submodule.path} fetch origin`, { stdio: 'ignore' });
43
+
44
+ // Get latest commit
45
+ let latestCommit;
46
+ try {
47
+ latestCommit = execSync(
48
+ `git -C ${submodule.path} rev-parse origin/${submodule.branch}`,
49
+ { encoding: 'utf-8' }
50
+ ).trim();
51
+ } catch (e) {
52
+ // Try master if main doesn't exist
53
+ latestCommit = execSync(
54
+ `git -C ${submodule.path} rev-parse origin/master`,
55
+ { encoding: 'utf-8' }
56
+ ).trim();
57
+ }
58
+
59
+ if (currentCommit !== latestCommit) {
60
+ hasUpdates = true;
61
+
62
+ // Get commit log
63
+ const commits = execSync(
64
+ `git -C ${submodule.path} log ${currentCommit}..${latestCommit} --oneline`,
65
+ { encoding: 'utf-8' }
66
+ ).trim();
67
+
68
+ const commitCount = commits.split('\n').length;
69
+
70
+ updates.push({
71
+ name: submodule.name,
72
+ path: submodule.path,
73
+ currentCommit: currentCommit.substring(0, 7),
74
+ latestCommit: latestCommit.substring(0, 7),
75
+ commitCount,
76
+ commits: commits.split('\n')
77
+ });
78
+
79
+ console.log(chalk.yellow(`šŸ“¦ ${submodule.name}: ${commitCount} new commit(s) available`));
80
+ console.log(chalk.gray(` Current: ${currentCommit.substring(0, 7)}`));
81
+ console.log(chalk.gray(` Latest: ${latestCommit.substring(0, 7)}`));
82
+ console.log(chalk.cyan(` Recent commits:`));
83
+ commits.split('\n').slice(0, 3).forEach(c => {
84
+ console.log(chalk.gray(` • ${c}`));
85
+ });
86
+ if (commitCount > 3) {
87
+ console.log(chalk.gray(` ... and ${commitCount - 3} more`));
88
+ }
89
+ console.log('');
90
+ } else {
91
+ console.log(chalk.green(`āœ… ${submodule.name}: Up to date`));
92
+ }
93
+ } catch (error) {
94
+ console.error(chalk.red(`āŒ ${submodule.name}: Error checking - ${error.message}`));
95
+ }
96
+ });
97
+
98
+ if (hasUpdates) {
99
+ console.log(chalk.yellow.bold('\nšŸŽÆ Updates detected! Next steps:\n'));
100
+ console.log(chalk.cyan('1.') + ' Review the changes above');
101
+ console.log(chalk.cyan('2.') + ' Run: ' + chalk.white.bold('npm run update-frameworks'));
102
+ console.log(chalk.cyan('3.') + ' Run: ' + chalk.white.bold('npm run analyze-updates'));
103
+ console.log(chalk.cyan('4.') + ' Review AI recommendations');
104
+ console.log(chalk.cyan('5.') + ' Update adf-cli if needed\n');
105
+
106
+ // Write update report
107
+ const reportPath = path.join(process.cwd(), 'framework-updates-report.json');
108
+ fs.writeFileSync(
109
+ reportPath,
110
+ JSON.stringify(updates, null, 2)
111
+ );
112
+ console.log(chalk.gray(`šŸ“„ Report saved: ${reportPath}\n`));
113
+
114
+ process.exit(1); // Exit with code 1 to indicate updates available
115
+ } else {
116
+ console.log(chalk.green.bold('\n✨ All frameworks are up to date!\n'));
117
+ process.exit(0);
118
+ }
@@ -101,7 +101,7 @@ function generateAgentSlashCommand(agent, context) {
101
101
 
102
102
  ## Agent Persona
103
103
 
104
- You are now acting as the **${agent} Agent** from the AgentDevFramework-Claude framework.
104
+ You are now acting as the **${agent} Agent** from the AgentDevFramework framework.
105
105
 
106
106
  ${agent === 'Dev' ? `
107
107
  ## Dev Agent Commands
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * AgentDevFramework-Claude Deployment Script
4
+ * AgentDevFramework Deployment Script
5
5
  * Deploys framework configuration to target development tool
6
6
  */
7
7
 
@@ -79,6 +79,14 @@ const TOOLS = {
79
79
  configPath: () => path.join(require('os').homedir(), '.codex', 'config.toml'),
80
80
  mcpPath: () => path.join(require('os').homedir(), '.codex', 'mcp.json'),
81
81
  features: ['home-config', 'toml-format', 'agents-md']
82
+ },
83
+ antigravity: {
84
+ name: 'Google Antigravity',
85
+ configFile: 'README.md',
86
+ targetPath: (projectRoot) => path.join(projectRoot, '.agent', 'README.md'),
87
+ commandsPath: (projectRoot) => path.join(projectRoot, '.agent', 'workflows'),
88
+ mcpPath: (projectRoot) => path.join(projectRoot, '.agent', 'mcp.json'),
89
+ features: ['flat-workflows', 'description-frontmatter']
82
90
  }
83
91
  };
84
92
 
@@ -86,7 +94,7 @@ const program = new Command();
86
94
 
87
95
  program
88
96
  .name('deploy')
89
- .description('Deploy AgentDevFramework-Claude to your development tool')
97
+ .description('Deploy AgentDevFramework to your development tool')
90
98
  .requiredOption('-t, --tool <name>', 'Target tool (windsurf, cursor, vscode, etc.)')
91
99
  .option('-p, --project-root <path>', 'Project root directory', process.cwd())
92
100
  .option('-f, --force', 'Force overwrite existing files', false)
@@ -379,28 +387,6 @@ async function createProjectDirectories() {
379
387
  console.log(chalk.green(` āœ… Created examples/ directory`));
380
388
  }
381
389
 
382
- // Create PRPs directory
383
- const prpsDir = path.join(options.projectRoot, 'PRPs');
384
- if (!await fs.pathExists(prpsDir)) {
385
- await fs.ensureDir(prpsDir);
386
- await fs.writeFile(
387
- path.join(prpsDir, 'README.md'),
388
- '# Product Requirements Prompts\n\nPRPs (Product Requirements Prompts) are compact, context-engineered specifications.\n\nUse:\n- `/generate-prp INITIAL.md` to create PRP\n- `/execute-prp PRPs/feature.md` to implement\n'
389
- );
390
- console.log(chalk.green(` āœ… Created PRPs/ directory`));
391
- }
392
-
393
- // Create specs directory
394
- const specsDir = path.join(options.projectRoot, 'specs');
395
- if (!await fs.pathExists(specsDir)) {
396
- await fs.ensureDir(specsDir);
397
- await fs.writeFile(
398
- path.join(specsDir, 'README.md'),
399
- '# Feature Specifications\n\nDetailed specifications using Spec-Kit methodology.\n\nUse:\n- `/specify` to create specification\n- `/clarify` to resolve ambiguities\n- `/plan` to create implementation plan\n'
400
- );
401
- console.log(chalk.green(` āœ… Created specs/ directory`));
402
- }
403
-
404
390
  // Create docs directory
405
391
  const docsDir = path.join(options.projectRoot, 'docs');
406
392
  if (!await fs.pathExists(docsDir)) {
@@ -434,9 +420,8 @@ function printNextSteps() {
434
420
  console.log(chalk.gray(' @deepwiki facebook/react # Understand repository'));
435
421
 
436
422
  console.log('\n' + chalk.bold('Available workflows:'));
437
- console.log(chalk.gray(' Greenfield: /analyst → /pm → /architect → /sm → /dev → /qa'));
438
- console.log(chalk.gray(' Feature Add: /specify → /clarify → /plan → /tasks → /implement'));
439
- console.log(chalk.gray(' Rapid (PRP): /generate-prp → /execute-prp'));
423
+ console.log(chalk.gray(' Comprehensive (BMad): /analyst → /pm → /architect → /sm → /dev → /qa'));
424
+ console.log(chalk.gray(' OpenSpec: openspec init → proposal → implement → archive'));
440
425
 
441
426
  console.log('\n' + chalk.bold('Tool-specific features:'));
442
427
  if (tool.features && tool.features.length > 0) {
@@ -454,7 +439,7 @@ function printNextSteps() {
454
439
 
455
440
  async function main() {
456
441
  try {
457
- console.log(chalk.bold.cyan('\nšŸš€ AgentDevFramework-Claude Deployment\n'));
442
+ console.log(chalk.bold.cyan('\nšŸš€ AgentDevFramework Deployment\n'));
458
443
  console.log(chalk.gray(`Tool: ${tool.name}`));
459
444
  console.log(chalk.gray(`Project Root: ${options.projectRoot}`));
460
445
  console.log(chalk.gray(`Force: ${options.force}`));