@iservu-inc/adf-cli 0.17.0 → 0.17.5
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 +1 -1
- package/.context/memory/glossary.md +1 -1
- package/CLAUDE.md +5 -5
- package/README.md +1 -1
- package/lib/analysis/heuristic-gap-analyzer.js +4 -4
- package/lib/analysis/synthesis-engine.js +5 -5
- package/lib/commands/init.js +545 -467
- package/lib/frameworks/output-generators.js +54 -147
- package/lib/frameworks/progress-tracker.js +16 -0
- package/lib/frameworks/questions.js +156 -464
- package/lib/frameworks/session-manager.js +56 -0
- package/lib/learning/analytics-view.js +5 -5
- package/lib/learning/analytics.js +22 -6
- package/lib/templates/scripts/analyze-docs.js +23 -12
- package/lib/templates/scripts/build.js +1 -1
- package/lib/templates/scripts/check-framework-updates.js +1 -1
- package/lib/templates/scripts/init.js +1 -1
- package/lib/templates/shared/memory/constitution.md +2 -2
- package/lib/templates/shared/templates/README.md +2 -2
- package/lib/utils/context-extractor.js +51 -3
- package/lib/utils/framework-detector.js +11 -2
- package/package.json +1 -1
- package/tests/analytics-view.test.js +12 -10
- package/tests/context-extractor.test.js +47 -2
- package/tests/decay-manager.test.js +22 -19
- package/tests/deploy.test.js +7 -3
- package/tests/dynamic-question-generator.test.js +2 -2
- package/tests/framework-detector.test.js +31 -3
- package/tests/heuristic-gap-analyzer.test.js +5 -5
- package/tests/pattern-decay.test.js +34 -52
- package/tests/session-manager.test.js +125 -0
|
@@ -24,7 +24,7 @@ ADF CLI is a Node.js-based command-line tool designed to orchestrate AI-assisted
|
|
|
24
24
|
- **Decay Manager:** Applies time-based decay to pattern confidence to ensure freshness.
|
|
25
25
|
|
|
26
26
|
### 5. Generators (`lib/generators/`)
|
|
27
|
-
- **Artifact Generators:** Create PRP, BMAD, and
|
|
27
|
+
- **Artifact Generators:** Create PRP, BMAD, and OpenSpec documents.
|
|
28
28
|
- **Tool Config Generators:** Produce tool-specific configurations (e.g., `.windsurfrules`, `opencode.json`, `AGENTS.md`).
|
|
29
29
|
|
|
30
30
|
## Data Storage
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
- **Track:** A unit of work or feature development path (e.g., a feature, bug fix, or chore).
|
|
8
8
|
- **PRP (Product Requirements Prompt):** A framework for "Rapid" requirements gathering.
|
|
9
9
|
- **BMAD (Business, Marketing, Architecture, Design):** A comprehensive framework for large-scale project planning.
|
|
10
|
-
- **
|
|
10
|
+
- **OpenSpec:** A balanced framework generating specifications and plans.
|
|
11
11
|
- **Agent-Native:** A repository structure optimized for reading by AI agents (e.g., `AGENTS.md`, `.context/`).
|
|
12
12
|
- **Learning System:** The ADF subsystem that tracks user behavior (skips, answers) to adapt future interviews.
|
|
13
13
|
- **Pattern Decay:** The algorithm that reduces confidence in learned patterns over time to prevent stale assumptions.
|
package/CLAUDE.md
CHANGED
|
@@ -8,7 +8,7 @@ ADF CLI (`@iservu-inc/adf-cli`) is a Node.js CLI tool for AgentDevFramework - an
|
|
|
8
8
|
|
|
9
9
|
**Key Features:**
|
|
10
10
|
- Multi-provider AI integration for intelligent requirements gathering
|
|
11
|
-
- Three workflow levels: Rapid (PRP), Balanced (
|
|
11
|
+
- Three workflow levels: Rapid (PRP), Balanced (OpenSpec), Comprehensive (BMAD)
|
|
12
12
|
- Learning system that adapts to user preferences over time with pattern decay
|
|
13
13
|
- Dynamic question pipeline that extracts knowledge and reorders questions
|
|
14
14
|
- Smart question filtering based on project context
|
|
@@ -72,7 +72,7 @@ npm publish --dry-run
|
|
|
72
72
|
- Routes to command handlers in `lib/commands/`
|
|
73
73
|
|
|
74
74
|
2. **Commands** (`lib/commands/`)
|
|
75
|
-
- `init.js` - Initialize framework, detect project, start interview session
|
|
75
|
+
- `init.js` - Initialize framework, detect project (brownfield detection: agent-native, openspec, specification-driven, gemini-conductor), start interview session
|
|
76
76
|
- `config.js` - Configure AI provider, analysis settings, learning system
|
|
77
77
|
- `deploy.js` - Deploy to development tools (Windsurf, Cursor, VS Code, etc.)
|
|
78
78
|
- `update.js` - Check for and install CLI updates
|
|
@@ -143,7 +143,7 @@ project-root/
|
|
|
143
143
|
│ │ └── stats.json # Statistics
|
|
144
144
|
│ └── shared/ # Framework templates & agents
|
|
145
145
|
│ ├── agents/ # Agent definitions (PM, Dev, QA, etc.)
|
|
146
|
-
│ ├── templates/ # PRP, BMAD,
|
|
146
|
+
│ ├── templates/ # PRP, BMAD, OpenSpec templates
|
|
147
147
|
│ └── memory/ # Framework memory
|
|
148
148
|
└── .framework/ # Deployed to development tool
|
|
149
149
|
└── agents/ # Tool-specific agent files
|
|
@@ -226,7 +226,7 @@ Three workflow tiers with different agents and templates:
|
|
|
226
226
|
- Questions: 20 core questions
|
|
227
227
|
- Output: `prp.md` (single document)
|
|
228
228
|
|
|
229
|
-
**Level 2: Balanced (
|
|
229
|
+
**Level 2: Balanced (OpenSpec)**
|
|
230
230
|
- Agents: analyst, pm, dev, qa
|
|
231
231
|
- Templates: Full PRP suite, spec templates
|
|
232
232
|
- Questions: 30+ questions
|
|
@@ -250,7 +250,7 @@ Each tool has a generator that transforms session outputs into tool-specific con
|
|
|
250
250
|
|
|
251
251
|
**Deployment Flow:**
|
|
252
252
|
1. Find latest completed session
|
|
253
|
-
2. Load session outputs (PRP/BMAD/
|
|
253
|
+
2. Load session outputs (PRP/BMAD/OpenSpec)
|
|
254
254
|
3. Generate tool-specific config
|
|
255
255
|
4. Write to project root (`.windsurfrules`, `.cursorrules`, etc.)
|
|
256
256
|
5. Copy agent files to `.framework/agents/` if needed
|
package/README.md
CHANGED
|
@@ -9,10 +9,10 @@ class HeuristicGapAnalyzer {
|
|
|
9
9
|
static get FIELD_MAPPING() {
|
|
10
10
|
return {
|
|
11
11
|
name: { id: 'prp-1', required: ['rapid', 'balanced', 'comprehensive'] },
|
|
12
|
-
overview: { id: 'prp-
|
|
13
|
-
techStack: { id: 'prp-
|
|
14
|
-
proposedChanges: { id: 'bal-
|
|
15
|
-
architecture: { id: 'bal-
|
|
12
|
+
overview: { id: 'prp-2', required: ['rapid', 'balanced', 'comprehensive'] },
|
|
13
|
+
techStack: { id: 'prp-5', required: ['rapid', 'balanced', 'comprehensive'] },
|
|
14
|
+
proposedChanges: { id: 'bal-15', required: ['balanced', 'comprehensive'] },
|
|
15
|
+
architecture: { id: 'bal-19', required: ['balanced', 'comprehensive'] }
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -86,17 +86,17 @@ class SynthesisEngine {
|
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
if (synthesizedContext.overview) {
|
|
89
|
-
answers['prp-
|
|
89
|
+
answers['prp-2'] = {
|
|
90
90
|
text: synthesizedContext.overview,
|
|
91
91
|
quality: { qualityScore: 80, isComprehensive: true },
|
|
92
92
|
timestamp: now.toISOString()
|
|
93
93
|
};
|
|
94
94
|
// Backward compatibility for old tests
|
|
95
|
-
answers['project-overview'] = answers['prp-
|
|
95
|
+
answers['project-overview'] = answers['prp-2'];
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
if (synthesizedContext.techStack) {
|
|
99
|
-
answers['prp-
|
|
99
|
+
answers['prp-5'] = {
|
|
100
100
|
text: synthesizedContext.techStack,
|
|
101
101
|
quality: { qualityScore: 80, isComprehensive: true },
|
|
102
102
|
timestamp: now.toISOString()
|
|
@@ -104,7 +104,7 @@ class SynthesisEngine {
|
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
if (synthesizedContext.architecture) {
|
|
107
|
-
answers['bal-
|
|
107
|
+
answers['bal-19'] = {
|
|
108
108
|
text: synthesizedContext.architecture,
|
|
109
109
|
quality: { qualityScore: 80, isComprehensive: true },
|
|
110
110
|
timestamp: now.toISOString()
|
|
@@ -112,7 +112,7 @@ class SynthesisEngine {
|
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
if (synthesizedContext.proposedChanges) {
|
|
115
|
-
answers['bal-
|
|
115
|
+
answers['bal-15'] = {
|
|
116
116
|
text: synthesizedContext.proposedChanges,
|
|
117
117
|
quality: { qualityScore: 80, isComprehensive: true },
|
|
118
118
|
timestamp: now.toISOString()
|