@iservu-inc/adf-cli 0.11.0 → 0.12.9

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 (34) hide show
  1. package/.adf/feature-audit.md +208 -0
  2. package/.adf/final-summary.md +347 -0
  3. package/.adf/implementation-plan.md +244 -0
  4. package/.adf/implementation-progress.md +203 -0
  5. package/.adf/learning/answer-history.json +995 -0
  6. package/.adf/learning/config.json +25 -0
  7. package/.adf/learning/learned-rules.json +59 -0
  8. package/.adf/learning/patterns.json +277 -0
  9. package/.adf/learning/skip-history.json +1451 -0
  10. package/.adf/learning/stats.json +9 -0
  11. package/.claude/settings.local.json +12 -5
  12. package/CHANGELOG.md +110 -0
  13. package/CLAUDE.md +479 -0
  14. package/bin/adf.js +339 -1
  15. package/lib/ai/ai-client.js +161 -44
  16. package/lib/ai/ai-config.js +249 -105
  17. package/lib/commands/deploy.js +73 -6
  18. package/lib/generators/agents-md-generator.js +431 -161
  19. package/lib/generators/antigravity-generator.js +140 -0
  20. package/lib/generators/deepagent-generator.js +144 -0
  21. package/lib/generators/gemini-cli-generator.js +241 -0
  22. package/lib/generators/index.js +55 -0
  23. package/lib/generators/opencode-generator.js +153 -0
  24. package/lib/generators/zed-generator.js +252 -0
  25. package/lib/templates/shared/agents/architect.md +24 -24
  26. package/lib/templates/shared/agents/dev.md +25 -20
  27. package/lib/templates/shared/agents/pm.md +14 -4
  28. package/lib/templates/shared/agents/sm.md +18 -14
  29. package/lib/templates/shared/templates/openspec-delta.md +16 -0
  30. package/lib/templates/shared/templates/openspec-proposal.md +18 -0
  31. package/lib/templates/shared/templates/openspec-tasks.md +21 -0
  32. package/lib/utils/context-manager.js +484 -0
  33. package/package.json +6 -1
  34. package/tests/agents-md-generator.test.js +47 -10
@@ -0,0 +1,140 @@
1
+ const fs = require('fs-extra');
2
+ const path = require('path');
3
+ const ToolConfigGenerator = require('./tool-config-generator');
4
+
5
+ /**
6
+ * Generator for Google Antigravity configurations
7
+ * Creates .antigravity/agents.yaml that mounts AGENTS.md
8
+ * Provides file system access to .context/ directory
9
+ */
10
+ class AntigravityGenerator extends ToolConfigGenerator {
11
+ /**
12
+ * Generate Antigravity configurations
13
+ * @returns {Object} Generated file paths
14
+ */
15
+ async generate() {
16
+ await this.initialize();
17
+
18
+ const antigravityDir = path.join(this.projectPath, '.antigravity');
19
+ await fs.ensureDir(antigravityDir);
20
+
21
+ const generated = {
22
+ agents: null
23
+ };
24
+
25
+ // Generate agents.yaml
26
+ generated.agents = await this.generateAgentsYaml(antigravityDir);
27
+
28
+ return generated;
29
+ }
30
+
31
+ /**
32
+ * Generate .antigravity/agents.yaml
33
+ */
34
+ async generateAgentsYaml(antigravityDir) {
35
+ const agentsPath = path.join(antigravityDir, 'agents.yaml');
36
+
37
+ const agentName = this.getAgentName();
38
+ const model = this.getModelForFramework();
39
+
40
+ // Generate YAML content
41
+ const yamlContent = `# Antigravity Agent Configuration
42
+ # Generated by ADF CLI v${this.getADFVersion()}
43
+ # Framework: ${this.getFrameworkName()}
44
+
45
+ agents:
46
+ - name: "${agentName}"
47
+ model: "${model}"
48
+ capabilities:
49
+ - file_system:
50
+ read_only:
51
+ - "AGENTS.md"
52
+ - ".context"
53
+ - ".adf/sessions"
54
+ exclude:
55
+ - ".adf/.env"
56
+ - "node_modules"
57
+ - ".git"
58
+ system_prompt: |
59
+ You are ${agentName}, an expert AI coding assistant.
60
+
61
+ CRITICAL INSTRUCTIONS:
62
+ 1. Read "AGENTS.md" IMMEDIATELY upon startup to understand project rules and structure
63
+ 2. Consult ".context/memory/architecture.md" for system design decisions
64
+ 3. Follow all operational rules defined in AGENTS.md (they are NON-NEGOTIABLE)
65
+ 4. Never output secrets from .env files or expose API keys
66
+ 5. All code changes must pass the test suite defined in AGENTS.md
67
+
68
+ WORKFLOW:
69
+ - Before any code change, read AGENTS.md and .context/memory/architecture.md
70
+ - Follow the build & test commands specified in AGENTS.md
71
+ - Adhere to the project structure and workflow directives
72
+ - Ask clarifying questions if requirements are unclear
73
+
74
+ PROJECT CONTEXT:
75
+ - Framework: ${this.getFrameworkName()}
76
+ - Session: ${this.getSessionId()}
77
+ - Complete requirements: .adf/sessions/${this.getSessionId()}/outputs/
78
+
79
+ Remember: AGENTS.md is your single source of truth. Read it first, follow it always.
80
+ `;
81
+
82
+ await fs.writeFile(agentsPath, yamlContent, 'utf-8');
83
+ return agentsPath;
84
+ }
85
+
86
+ /**
87
+ * Get agent name based on framework
88
+ */
89
+ getAgentName() {
90
+ const projectName = this.getProjectName();
91
+
92
+ const roleMap = {
93
+ 'rapid': 'Developer',
94
+ 'balanced': 'Project Architect',
95
+ 'comprehensive': 'Solutions Architect'
96
+ };
97
+
98
+ const role = roleMap[this.framework] || 'Developer';
99
+ return `${projectName} ${role}`;
100
+ }
101
+
102
+ /**
103
+ * Get appropriate model for framework complexity
104
+ */
105
+ getModelForFramework() {
106
+ const modelMap = {
107
+ 'rapid': 'gemini-2.0-flash-exp',
108
+ 'balanced': 'gemini-2.0-flash-thinking-exp',
109
+ 'comprehensive': 'gemini-exp-1206'
110
+ };
111
+
112
+ return modelMap[this.framework] || 'gemini-2.0-flash-exp';
113
+ }
114
+
115
+ /**
116
+ * Get framework display name
117
+ */
118
+ getFrameworkName() {
119
+ const names = {
120
+ 'rapid': 'Rapid Development (PRP)',
121
+ 'balanced': 'Balanced (Specification-Driven)',
122
+ 'comprehensive': 'BMAD Comprehensive (Enterprise)'
123
+ };
124
+ return names[this.framework] || this.framework;
125
+ }
126
+
127
+ /**
128
+ * Get ADF CLI version
129
+ */
130
+ getADFVersion() {
131
+ try {
132
+ const packageJson = require('../../package.json');
133
+ return packageJson.version;
134
+ } catch (error) {
135
+ return '0.11.0';
136
+ }
137
+ }
138
+ }
139
+
140
+ module.exports = AntigravityGenerator;
@@ -0,0 +1,144 @@
1
+ const fs = require('fs-extra');
2
+ const path = require('path');
3
+ const ToolConfigGenerator = require('./tool-config-generator');
4
+
5
+ /**
6
+ * Generator for Abacus.ai DeepAgent configurations
7
+ * Creates agent markdown files in .deepagent/agents/ directory
8
+ * Similar to Claude Code but for DeepAgent CLI
9
+ */
10
+ class DeepAgentGenerator extends ToolConfigGenerator {
11
+ /**
12
+ * Generate DeepAgent configuration
13
+ * @returns {Object} Generated file paths
14
+ */
15
+ async generate() {
16
+ await this.initialize();
17
+
18
+ const deepagentDir = path.join(this.projectPath, '.deepagent');
19
+ const agentsDir = path.join(deepagentDir, 'agents');
20
+
21
+ await fs.ensureDir(agentsDir);
22
+
23
+ // Copy agent files from session
24
+ const agentFiles = await this.deployAgentFiles(agentsDir);
25
+
26
+ // Create README with project context
27
+ const readmePath = await this.generateReadme(deepagentDir);
28
+
29
+ return {
30
+ agents: agentFiles,
31
+ readme: readmePath
32
+ };
33
+ }
34
+
35
+ /**
36
+ * Generate README.md with project context
37
+ */
38
+ async generateReadme(deepagentDir) {
39
+ const readmePath = path.join(deepagentDir, 'README.md');
40
+ const projectContext = await this.getProjectContext();
41
+
42
+ const content = `# DeepAgent Configuration
43
+
44
+ > Generated by ADF CLI v${this.getADFVersion()}
45
+ > Framework: ${this.getFrameworkName()}
46
+
47
+ ## Project Overview
48
+
49
+ **${projectContext.name || 'Project'}**
50
+
51
+ ${projectContext.overview || 'AI-assisted development project'}
52
+
53
+ ## Agent Files
54
+
55
+ This directory contains agent definitions for DeepAgent CLI:
56
+
57
+ ${this.getAgentList()}
58
+
59
+ ## Workflow Level
60
+
61
+ **${this.framework.toUpperCase()}**: ${this.getWorkflowDescription()}
62
+
63
+ ## Quick Commands
64
+
65
+ \`\`\`bash
66
+ # Build
67
+ ${projectContext.buildCommand || 'npm run build'}
68
+
69
+ # Test
70
+ ${projectContext.testCommand || 'npm test'}
71
+
72
+ # Lint
73
+ ${projectContext.lintCommand || 'npm run lint'}
74
+ \`\`\`
75
+
76
+ ## Requirements Location
77
+
78
+ Complete requirements and documentation:
79
+ - \`.adf/sessions/${this.getSessionId()}/outputs/\`
80
+
81
+ ## Usage
82
+
83
+ DeepAgent will automatically load agents from this directory.
84
+ Each agent file contains role-specific instructions and context.
85
+
86
+ ---
87
+
88
+ *Generated by AgentDevFramework (ADF CLI)*
89
+ `;
90
+
91
+ await fs.writeFile(readmePath, content, 'utf-8');
92
+ return readmePath;
93
+ }
94
+
95
+ /**
96
+ * Get list of agents based on framework
97
+ */
98
+ getAgentList() {
99
+ const agentLists = {
100
+ 'rapid': '- `dev.md` - Developer agent\n- `qa.md` - QA engineer agent',
101
+ 'balanced': '- `analyst.md` - Business analyst agent\n- `pm.md` - Product manager agent\n- `dev.md` - Developer agent\n- `qa.md` - QA engineer agent',
102
+ 'comprehensive': '- `analyst.md` - Business analyst agent\n- `pm.md` - Product manager agent\n- `architect.md` - Solutions architect agent\n- `sm.md` - Scrum master agent\n- `dev.md` - Developer agent\n- `qa.md` - QA engineer agent'
103
+ };
104
+ return agentLists[this.framework] || agentLists['balanced'];
105
+ }
106
+
107
+ /**
108
+ * Get workflow description
109
+ */
110
+ getWorkflowDescription() {
111
+ const descriptions = {
112
+ 'rapid': 'Fast iteration with core features (PRP)',
113
+ 'balanced': 'Specification-driven development (Spec-Kit)',
114
+ 'comprehensive': 'Enterprise-grade with full BMAD documentation'
115
+ };
116
+ return descriptions[this.framework] || 'Standard development workflow';
117
+ }
118
+
119
+ /**
120
+ * Get framework display name
121
+ */
122
+ getFrameworkName() {
123
+ const names = {
124
+ 'rapid': 'Rapid Development (PRP)',
125
+ 'balanced': 'Balanced (Specification-Driven)',
126
+ 'comprehensive': 'BMAD Comprehensive (Enterprise)'
127
+ };
128
+ return names[this.framework] || this.framework;
129
+ }
130
+
131
+ /**
132
+ * Get ADF CLI version
133
+ */
134
+ getADFVersion() {
135
+ try {
136
+ const packageJson = require('../../package.json');
137
+ return packageJson.version;
138
+ } catch (error) {
139
+ return '0.12.0';
140
+ }
141
+ }
142
+ }
143
+
144
+ module.exports = DeepAgentGenerator;
@@ -0,0 +1,241 @@
1
+ const fs = require('fs-extra');
2
+ const path = require('path');
3
+ const ToolConfigGenerator = require('./tool-config-generator');
4
+
5
+ /**
6
+ * Generator for Gemini CLI configurations
7
+ * Creates GEMINI.md with project-specific context
8
+ */
9
+ class GeminiCLIGenerator extends ToolConfigGenerator {
10
+ /**
11
+ * Generate Gemini CLI configuration
12
+ * @returns {Object} Generated file path
13
+ */
14
+ async generate() {
15
+ await this.initialize();
16
+
17
+ const geminiMdPath = path.join(this.projectPath, 'GEMINI.md');
18
+
19
+ // Generate GEMINI.md content
20
+ const content = await this.generateGeminiMd();
21
+
22
+ await fs.writeFile(geminiMdPath, content, 'utf-8');
23
+
24
+ return { config: geminiMdPath };
25
+ }
26
+
27
+ /**
28
+ * Generate GEMINI.md markdown content
29
+ */
30
+ async generateGeminiMd() {
31
+ const projectContext = await this.getProjectContext();
32
+ const frameworkContext = await this.getFrameworkContext();
33
+ const outputSummary = await this.getOutputSummary();
34
+
35
+ return `# GEMINI.md - Project Context for Gemini CLI
36
+
37
+ > Generated by ADF CLI v${this.getADFVersion()}
38
+ > Framework: **${this.getFrameworkName()}**
39
+ > Session: ${this.getSessionId()}
40
+
41
+ ---
42
+
43
+ ## 🎯 Project Overview
44
+
45
+ **${projectContext.name || 'Project'}**
46
+
47
+ ${projectContext.overview || 'AI-assisted development project using AgentDevFramework.'}
48
+
49
+ ## 📋 Role & Responsibilities
50
+
51
+ You are **${this.getAgentRole()}** for this project. Your responsibilities include:
52
+
53
+ - Understanding and implementing requirements from session outputs
54
+ - Following the ${this.framework} workflow methodology
55
+ - Maintaining code quality and test coverage
56
+ - Adhering to project structure and conventions
57
+
58
+ ## 🚀 Quick Reference
59
+
60
+ ### Build & Test Commands
61
+
62
+ \`\`\`bash
63
+ # Build
64
+ ${projectContext.buildCommand || 'npm run build'}
65
+
66
+ # Test
67
+ ${projectContext.testCommand || 'npm test'}
68
+
69
+ # Lint
70
+ ${projectContext.lintCommand || 'npm run lint'}
71
+ \`\`\`
72
+
73
+ ### Key Directories
74
+
75
+ - **Requirements**: \`.adf/sessions/${this.getSessionId()}/outputs/\`
76
+ - **Source**: \`${projectContext.sourceDir || 'src/'}\`
77
+ - **Tests**: \`${projectContext.testDir || 'tests/'}\`
78
+ - **Docs**: \`${projectContext.docsDir || 'docs/'}\`
79
+
80
+ ## 📚 Documentation Structure
81
+
82
+ ${this.getDocumentationStructure()}
83
+
84
+ ## 🎨 Workflow Level: ${this.framework.toUpperCase()}
85
+
86
+ ${this.getWorkflowDescription()}
87
+
88
+ ## ⚡ Key Requirements
89
+
90
+ ${frameworkContext.keyPoints || this.getDefaultRequirements()}
91
+
92
+ ## 🔧 Development Guidelines
93
+
94
+ ### Code Quality Standards
95
+
96
+ 1. **Testing**: All features must have corresponding tests
97
+ 2. **Documentation**: Public APIs must be documented
98
+ 3. **Type Safety**: Use TypeScript/JSDoc where applicable
99
+ 4. **Error Handling**: Gracefully handle edge cases
100
+ 5. **Security**: Never commit secrets or API keys
101
+
102
+ ### Commit Convention
103
+
104
+ Follow Conventional Commits:
105
+ - \`feat:\` - New features
106
+ - \`fix:\` - Bug fixes
107
+ - \`docs:\` - Documentation changes
108
+ - \`refactor:\` - Code refactoring
109
+ - \`test:\` - Test additions/changes
110
+ - \`chore:\` - Build/tooling changes
111
+
112
+ ### Code Review Checklist
113
+
114
+ - [ ] Tests pass (\`${projectContext.testCommand || 'npm test'}\`)
115
+ - [ ] Lint passes (\`${projectContext.lintCommand || 'npm run lint'}\`)
116
+ - [ ] Documentation updated
117
+ - [ ] No sensitive data in code
118
+ - [ ] Follows project structure
119
+
120
+ ## 🛡️ Security Considerations
121
+
122
+ - API keys stored in \`.adf/.env\` (gitignored)
123
+ - Never log sensitive information
124
+ - Validate all user inputs
125
+ - Follow OWASP security guidelines
126
+
127
+ ## 📖 Additional Context
128
+
129
+ For complete requirements and detailed specifications:
130
+ - Session outputs: \`.adf/sessions/${this.getSessionId()}/outputs/\`
131
+ - Framework shared resources: \`.adf/shared/\`
132
+ ${outputSummary ? `\n${outputSummary}` : ''}
133
+
134
+ ## 💡 Tips for Working with This Project
135
+
136
+ 1. **Read the requirements first** - Check session outputs before making changes
137
+ 2. **Follow the workflow level** - ${this.framework} has specific methodologies
138
+ 3. **Test thoroughly** - This project values quality over speed
139
+ 4. **Ask clarifying questions** - Better to ask than assume
140
+ 5. **Document as you go** - Future you will thank present you
141
+
142
+ ---
143
+
144
+ *This file is automatically generated and deployed by ADF CLI.*
145
+ *Manual modifications are preserved but may be overwritten on next deployment.*
146
+ `;
147
+ }
148
+
149
+ /**
150
+ * Get agent role based on framework
151
+ */
152
+ getAgentRole() {
153
+ const roles = {
154
+ 'rapid': 'Rapid Development Engineer',
155
+ 'balanced': 'Senior Software Engineer',
156
+ 'comprehensive': 'Principal Solutions Architect'
157
+ };
158
+ return roles[this.framework] || 'AI Coding Assistant';
159
+ }
160
+
161
+ /**
162
+ * Get workflow description
163
+ */
164
+ getWorkflowDescription() {
165
+ const descriptions = {
166
+ 'rapid': `**Rapid Development (PRP)** - Fast iteration with core features
167
+ - Quick prototyping and MVP development
168
+ - ~20 core questions during requirements gathering
169
+ - Focus on getting something working quickly
170
+ - Agents: Developer, QA`,
171
+
172
+ 'balanced': `**Balanced (Spec-Kit)** - Specification-driven development
173
+ - Standard project approach with detailed specs
174
+ - ~30+ questions for comprehensive requirements
175
+ - Balance between speed and thoroughness
176
+ - Agents: Analyst, PM, Developer, QA`,
177
+
178
+ 'comprehensive': `**BMAD Comprehensive** - Enterprise-grade development
179
+ - Full Business Model & Architecture Documentation
180
+ - ~40+ questions for complete understanding
181
+ - Detailed planning and architectural decisions
182
+ - Agents: Analyst, PM, Architect, SM, Developer, QA`
183
+ };
184
+ return descriptions[this.framework] || 'Standard development workflow';
185
+ }
186
+
187
+ /**
188
+ * Get documentation structure based on workflow
189
+ */
190
+ getDocumentationStructure() {
191
+ if (this.framework === 'rapid') {
192
+ return '- **PRP Document**: \`outputs/prp.md\` - Complete project requirements';
193
+ } else if (this.framework === 'balanced') {
194
+ return `- **Constitution**: \`outputs/constitution.md\` - Core principles
195
+ - **Specification**: \`outputs/specification.md\` - Technical specs
196
+ - **Plan**: \`outputs/plan.md\` - Development plan
197
+ - **Tasks**: \`outputs/tasks.md\` - Implementation tasks`;
198
+ } else {
199
+ return `- **PRD**: \`outputs/prd.md\` - Product Requirements Document
200
+ - **Architecture**: \`outputs/architecture.md\` - System design
201
+ - **Stories**: \`outputs/stories.md\` - User stories and epics`;
202
+ }
203
+ }
204
+
205
+ /**
206
+ * Get default requirements
207
+ */
208
+ getDefaultRequirements() {
209
+ return `- Follow the ${this.framework} workflow methodology
210
+ - Maintain high code quality and test coverage
211
+ - Document all public APIs and complex logic
212
+ - Follow project structure and naming conventions
213
+ - Write meaningful commit messages`;
214
+ }
215
+
216
+ /**
217
+ * Get framework display name
218
+ */
219
+ getFrameworkName() {
220
+ const names = {
221
+ 'rapid': 'Rapid Development (PRP)',
222
+ 'balanced': 'Balanced (Specification-Driven)',
223
+ 'comprehensive': 'BMAD Comprehensive (Enterprise)'
224
+ };
225
+ return names[this.framework] || this.framework;
226
+ }
227
+
228
+ /**
229
+ * Get ADF CLI version
230
+ */
231
+ getADFVersion() {
232
+ try {
233
+ const packageJson = require('../../package.json');
234
+ return packageJson.version;
235
+ } catch (error) {
236
+ return '0.12.0';
237
+ }
238
+ }
239
+ }
240
+
241
+ module.exports = GeminiCLIGenerator;
@@ -7,6 +7,11 @@ const AgentsMdGenerator = require('./agents-md-generator');
7
7
  const WindsurfGenerator = require('./windsurf-generator');
8
8
  const CursorGenerator = require('./cursor-generator');
9
9
  const VSCodeGenerator = require('./vscode-generator');
10
+ const ZedGenerator = require('./zed-generator');
11
+ const AntigravityGenerator = require('./antigravity-generator');
12
+ const OpenCodeGenerator = require('./opencode-generator');
13
+ const GeminiCLIGenerator = require('./gemini-cli-generator');
14
+ const DeepAgentGenerator = require('./deepagent-generator');
10
15
  const ToolConfigGenerator = require('./tool-config-generator');
11
16
 
12
17
  /**
@@ -84,15 +89,65 @@ async function generateVSCode(sessionPath, projectPath, framework) {
84
89
  return await generator.generate();
85
90
  }
86
91
 
92
+ /**
93
+ * Generate Zed Editor configurations
94
+ */
95
+ async function generateZed(sessionPath, projectPath, framework) {
96
+ const generator = new ZedGenerator(sessionPath, projectPath, framework);
97
+ return await generator.generate();
98
+ }
99
+
100
+ /**
101
+ * Generate Google Antigravity configurations
102
+ */
103
+ async function generateAntigravity(sessionPath, projectPath, framework) {
104
+ const generator = new AntigravityGenerator(sessionPath, projectPath, framework);
105
+ return await generator.generate();
106
+ }
107
+
108
+ /**
109
+ * Generate OpenCode CLI configurations
110
+ */
111
+ async function generateOpenCode(sessionPath, projectPath, framework) {
112
+ const generator = new OpenCodeGenerator(sessionPath, projectPath, framework);
113
+ return await generator.generate();
114
+ }
115
+
116
+ /**
117
+ * Generate Gemini CLI configurations
118
+ */
119
+ async function generateGeminiCLI(sessionPath, projectPath, framework) {
120
+ const generator = new GeminiCLIGenerator(sessionPath, projectPath, framework);
121
+ return await generator.generate();
122
+ }
123
+
124
+ /**
125
+ * Generate DeepAgent (Abacus.ai) configurations
126
+ */
127
+ async function generateDeepAgent(sessionPath, projectPath, framework) {
128
+ const generator = new DeepAgentGenerator(sessionPath, projectPath, framework);
129
+ return await generator.generate();
130
+ }
131
+
87
132
  module.exports = {
88
133
  generateAll,
89
134
  generateAgentsMd,
90
135
  generateWindsurf,
91
136
  generateCursor,
92
137
  generateVSCode,
138
+ generateZed,
139
+ generateAntigravity,
140
+ generateOpenCode,
141
+ generateGeminiCLI,
142
+ generateDeepAgent,
93
143
  AgentsMdGenerator,
94
144
  WindsurfGenerator,
95
145
  CursorGenerator,
96
146
  VSCodeGenerator,
147
+ ZedGenerator,
148
+ AntigravityGenerator,
149
+ OpenCodeGenerator,
150
+ GeminiCLIGenerator,
151
+ DeepAgentGenerator,
97
152
  ToolConfigGenerator
98
153
  };