@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.
- package/.context/memory/architecture.md +40 -0
- package/.context/memory/glossary.md +19 -0
- package/.project/docs/VERSIONING-GUIDE.md +127 -0
- package/AGENTS.md +53 -0
- package/CHANGELOG.md +47 -0
- package/bin/adf.js +10 -0
- package/conductor/archive/context_synthesis_20260112/metadata.json +8 -0
- package/conductor/archive/context_synthesis_20260112/plan.md +40 -0
- package/conductor/archive/context_synthesis_20260112/spec.md +43 -0
- package/conductor/archive/verify_opencode_20260111/metadata.json +8 -0
- package/conductor/archive/verify_opencode_20260111/plan.md +34 -0
- package/conductor/archive/verify_opencode_20260111/spec.md +25 -0
- package/conductor/code_styleguides/javascript.md +51 -0
- package/conductor/product-guidelines.md +26 -0
- package/conductor/product.md +25 -0
- package/conductor/setup_state.json +1 -0
- package/conductor/tech-stack.md +28 -0
- package/conductor/tracks/bootstrap_agents_20260111/metadata.json +8 -0
- package/conductor/tracks/bootstrap_agents_20260111/plan.md +17 -0
- package/conductor/tracks/bootstrap_agents_20260111/spec.md +27 -0
- package/conductor/tracks.md +9 -0
- package/conductor/workflow.md +333 -0
- package/lib/analysis/ai-gap-analyzer.js +66 -0
- package/lib/analysis/dynamic-question-generator.js +55 -0
- package/lib/analysis/heuristic-gap-analyzer.js +45 -0
- package/lib/analysis/synthesis-engine.js +142 -0
- package/lib/commands/deploy.js +28 -2
- package/lib/commands/tools.js +38 -0
- package/lib/generators/codex-cli-generator.js +41 -0
- package/lib/generators/index.js +33 -0
- package/lib/generators/kiro-generator.js +49 -0
- package/lib/generators/opencode-generator.js +332 -313
- package/lib/generators/trae-generator.js +34 -0
- package/lib/templates/scripts/analyze-framework-updates.js +361 -0
- package/lib/templates/scripts/build.js +608 -0
- package/lib/templates/scripts/check-framework-updates.js +118 -0
- package/lib/templates/scripts/config-helpers.js +1 -1
- package/lib/templates/scripts/deploy.js +13 -28
- package/lib/templates/scripts/init.js +110 -220
- package/lib/templates/scripts/postinstall.js +13 -0
- package/lib/templates/scripts/update-frameworks.js +28 -0
- package/lib/templates/scripts/validate-env.js +428 -0
- package/lib/templates/scripts/validate-mcp.js +471 -0
- package/lib/templates/scripts/validate.js +482 -0
- package/lib/templates/shared/agents/analyst.md +1 -1
- package/lib/templates/shared/agents/architect.md +13 -17
- package/lib/templates/shared/agents/dev.md +2 -2
- package/lib/templates/shared/agents/pm.md +1 -1
- package/lib/templates/shared/agents/qa.md +1 -1
- package/lib/templates/shared/agents/sm.md +2 -2
- package/lib/templates/shared/templates/README.md +2 -2
- package/lib/templates/shared/templates/openspec-proposal.md +2 -2
- package/lib/templates/shared/templates/prd-template.md +1 -1
- package/lib/templates/shared/templates/story-template.md +1 -1
- package/lib/utils/context-extractor.js +157 -0
- package/lib/utils/framework-detector.js +54 -0
- package/lib/utils/tool-feature-registry.js +102 -0
- package/package.json +1 -1
- package/tests/ai-gap-analyzer.test.js +38 -0
- package/tests/codex-cli-generator.test.js +29 -0
- package/tests/context-extractor.test.js +70 -0
- package/tests/deploy-integration.test.js +36 -0
- package/tests/deploy.test.js +57 -0
- package/tests/dynamic-question-generator.test.js +29 -0
- package/tests/framework-detector.test.js +55 -0
- package/tests/heuristic-gap-analyzer.test.js +46 -0
- package/tests/kiro-trae-generators.test.js +43 -0
- package/tests/opencode-generator.test.js +113 -0
- package/tests/synthesis-engine.test.js +52 -0
- 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
|
|
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
|
|
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
|
|
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('
|
|
438
|
-
console.log(chalk.gray('
|
|
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
|
|
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}`));
|