agileflow 2.33.1 → 2.35.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/LICENSE +22 -0
- package/README.md +536 -0
- package/package.json +1 -1
- package/src/core/agents/adr-writer.md +3 -19
- package/src/core/agents/api.md +9 -43
- package/src/core/agents/ci.md +8 -40
- package/src/core/agents/configuration/archival.md +301 -0
- package/src/core/agents/configuration/attribution.md +318 -0
- package/src/core/agents/configuration/ci.md +1077 -0
- package/src/core/agents/configuration/git-config.md +511 -0
- package/src/core/agents/configuration/hooks.md +507 -0
- package/src/core/agents/configuration/verify.md +540 -0
- package/src/core/agents/devops.md +7 -35
- package/src/core/agents/documentation.md +0 -1
- package/src/core/agents/epic-planner.md +3 -22
- package/src/core/agents/mentor.md +8 -24
- package/src/core/agents/research.md +0 -7
- package/src/core/agents/security.md +0 -5
- package/src/core/agents/ui.md +8 -42
- package/src/core/commands/PATTERNS-AskUserQuestion.md +474 -0
- package/src/core/commands/adr.md +5 -0
- package/src/core/commands/agent.md +4 -0
- package/src/core/commands/assign.md +1 -0
- package/src/core/commands/auto.md +1 -1
- package/src/core/commands/babysit.md +147 -31
- package/src/core/commands/baseline.md +7 -0
- package/src/core/commands/blockers.md +2 -0
- package/src/core/commands/board.md +9 -0
- package/src/core/commands/configure.md +415 -0
- package/src/core/commands/context.md +1 -0
- package/src/core/commands/deps.md +2 -0
- package/src/core/commands/diagnose.md +0 -41
- package/src/core/commands/epic.md +8 -0
- package/src/core/commands/handoff.md +4 -0
- package/src/core/commands/impact.md +1 -1
- package/src/core/commands/metrics.md +10 -0
- package/src/core/commands/research.md +3 -0
- package/src/core/commands/retro.md +11 -1
- package/src/core/commands/sprint.md +2 -1
- package/src/core/commands/status.md +1 -0
- package/src/core/commands/story-validate.md +1 -1
- package/src/core/commands/story.md +29 -2
- package/src/core/commands/template.md +8 -0
- package/src/core/commands/update.md +1 -1
- package/src/core/commands/velocity.md +9 -0
- package/src/core/commands/verify.md +6 -0
- package/src/core/templates/validate-tokens.sh +0 -15
- package/src/core/templates/worktrees-guide.md +0 -4
- package/tools/agileflow-npx.js +21 -9
- package/tools/cli/commands/config.js +284 -0
- package/tools/cli/commands/doctor.js +221 -4
- package/tools/cli/commands/setup.js +4 -1
- package/tools/cli/commands/update.js +59 -15
- package/tools/cli/installers/core/installer.js +369 -37
- package/tools/cli/installers/ide/claude-code.js +1 -1
- package/tools/cli/installers/ide/cursor.js +1 -1
- package/tools/cli/installers/ide/windsurf.js +1 -1
- package/tools/cli/lib/docs-setup.js +52 -28
- package/tools/cli/lib/npm-utils.js +62 -0
- package/tools/cli/lib/ui.js +9 -2
- package/tools/postinstall.js +71 -13
- package/src/core/agents/context7.md +0 -164
- package/src/core/commands/setup.md +0 -708
|
@@ -27,7 +27,7 @@ class CursorSetup extends BaseIdeSetup {
|
|
|
27
27
|
* @param {Object} options - Setup options
|
|
28
28
|
*/
|
|
29
29
|
async setup(projectDir, agileflowDir, options = {}) {
|
|
30
|
-
console.log(chalk.hex('#
|
|
30
|
+
console.log(chalk.hex('#e8683a')(` Setting up ${this.displayName}...`));
|
|
31
31
|
|
|
32
32
|
// Clean up old installation first
|
|
33
33
|
await this.cleanup(projectDir);
|
|
@@ -27,7 +27,7 @@ class WindsurfSetup extends BaseIdeSetup {
|
|
|
27
27
|
* @param {Object} options - Setup options
|
|
28
28
|
*/
|
|
29
29
|
async setup(projectDir, agileflowDir, options = {}) {
|
|
30
|
-
console.log(chalk.hex('#
|
|
30
|
+
console.log(chalk.hex('#e8683a')(` Setting up ${this.displayName}...`));
|
|
31
31
|
|
|
32
32
|
// Clean up old installation first
|
|
33
33
|
await this.cleanup(projectDir);
|
|
@@ -9,6 +9,10 @@ const fs = require('fs-extra');
|
|
|
9
9
|
const path = require('node:path');
|
|
10
10
|
const chalk = require('chalk');
|
|
11
11
|
|
|
12
|
+
// Load AgileFlow version from package.json (used for docs metadata)
|
|
13
|
+
const packageJsonPath = path.join(__dirname, '..', '..', '..', 'package.json');
|
|
14
|
+
const packageJson = require(packageJsonPath);
|
|
15
|
+
|
|
12
16
|
/**
|
|
13
17
|
* Directory structure to create
|
|
14
18
|
* @param {string} docsFolder - Name of the docs folder (default: "docs")
|
|
@@ -226,9 +230,12 @@ Use \`/AgileFlow:research\` to create new research notes.
|
|
|
226
230
|
* Create docs structure with README files
|
|
227
231
|
* @param {string} targetDir - Target directory for installation
|
|
228
232
|
* @param {string} docsFolder - Name of the docs folder (default: "docs")
|
|
233
|
+
* @param {Object} options - Options
|
|
234
|
+
* @param {boolean} options.updateGitignore - Whether to create/update .gitignore (default: true)
|
|
229
235
|
* @returns {Promise<Object>} Result object with counts
|
|
230
236
|
*/
|
|
231
|
-
async function createDocsStructure(targetDir, docsFolder = 'docs') {
|
|
237
|
+
async function createDocsStructure(targetDir, docsFolder = 'docs', options = {}) {
|
|
238
|
+
const { updateGitignore = true } = options;
|
|
232
239
|
const result = {
|
|
233
240
|
success: false,
|
|
234
241
|
counts: {
|
|
@@ -240,7 +247,7 @@ async function createDocsStructure(targetDir, docsFolder = 'docs') {
|
|
|
240
247
|
};
|
|
241
248
|
|
|
242
249
|
try {
|
|
243
|
-
console.log(chalk.hex('#
|
|
250
|
+
console.log(chalk.hex('#e8683a')(`\nCreating ${docsFolder}/ structure...`));
|
|
244
251
|
|
|
245
252
|
// Create directories
|
|
246
253
|
const directories = getDirectoryStructure(docsFolder);
|
|
@@ -270,7 +277,7 @@ async function createDocsStructure(targetDir, docsFolder = 'docs') {
|
|
|
270
277
|
const metadataPath = path.join(targetDir, docsFolder, '00-meta', 'agileflow-metadata.json');
|
|
271
278
|
if (!fs.existsSync(metadataPath)) {
|
|
272
279
|
const metadata = {
|
|
273
|
-
version:
|
|
280
|
+
version: packageJson.version,
|
|
274
281
|
created: new Date().toISOString(),
|
|
275
282
|
updated: new Date().toISOString(),
|
|
276
283
|
docsFolder: docsFolder,
|
|
@@ -283,14 +290,29 @@ async function createDocsStructure(targetDir, docsFolder = 'docs') {
|
|
|
283
290
|
result.counts.filesCreated++;
|
|
284
291
|
console.log(chalk.green(` ✓ Created ${docsFolder}/00-meta/agileflow-metadata.json`));
|
|
285
292
|
} else {
|
|
286
|
-
// Update existing metadata
|
|
293
|
+
// Update existing metadata (keep docsFolder and version in sync)
|
|
287
294
|
try {
|
|
288
295
|
const existing = JSON.parse(await fs.readFile(metadataPath, 'utf8'));
|
|
296
|
+
const updates = [];
|
|
297
|
+
|
|
289
298
|
if (!existing.docsFolder) {
|
|
290
299
|
existing.docsFolder = docsFolder;
|
|
300
|
+
updates.push('docsFolder');
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
if (existing.version !== packageJson.version) {
|
|
304
|
+
existing.version = packageJson.version;
|
|
305
|
+
updates.push('version');
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
if (updates.length > 0) {
|
|
291
309
|
existing.updated = new Date().toISOString();
|
|
292
310
|
await fs.writeFile(metadataPath, JSON.stringify(existing, null, 2), 'utf8');
|
|
293
|
-
console.log(
|
|
311
|
+
console.log(
|
|
312
|
+
chalk.yellow(
|
|
313
|
+
` ↻ Updated ${docsFolder}/00-meta/agileflow-metadata.json (${updates.join(', ')})`
|
|
314
|
+
)
|
|
315
|
+
);
|
|
294
316
|
}
|
|
295
317
|
} catch (err) {
|
|
296
318
|
console.log(chalk.yellow(` ⚠ Could not update metadata: ${err.message}`));
|
|
@@ -358,30 +380,32 @@ Document your CI/CD workflows and configuration here.
|
|
|
358
380
|
}
|
|
359
381
|
}
|
|
360
382
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
383
|
+
if (updateGitignore) {
|
|
384
|
+
// Create .gitignore additions for docs folder
|
|
385
|
+
const gitignorePath = path.join(targetDir, '.gitignore');
|
|
386
|
+
const gitignoreEntries = [
|
|
387
|
+
'.env',
|
|
388
|
+
'.env.*',
|
|
389
|
+
'!.env.example',
|
|
390
|
+
'.DS_Store',
|
|
391
|
+
'node_modules/',
|
|
392
|
+
'dist/',
|
|
393
|
+
'build/',
|
|
394
|
+
'coverage/',
|
|
395
|
+
];
|
|
396
|
+
|
|
397
|
+
if (fs.existsSync(gitignorePath)) {
|
|
398
|
+
const existingGitignore = await fs.readFile(gitignorePath, 'utf8');
|
|
399
|
+
const newEntries = gitignoreEntries.filter((entry) => !existingGitignore.includes(entry));
|
|
400
|
+
if (newEntries.length > 0) {
|
|
401
|
+
await fs.appendFile(gitignorePath, '\n' + newEntries.join('\n') + '\n', 'utf8');
|
|
402
|
+
console.log(chalk.yellow(` ↻ Updated .gitignore with ${newEntries.length} entries`));
|
|
403
|
+
}
|
|
404
|
+
} else {
|
|
405
|
+
await fs.writeFile(gitignorePath, gitignoreEntries.join('\n') + '\n', 'utf8');
|
|
406
|
+
result.counts.filesCreated++;
|
|
407
|
+
console.log(chalk.green(` ✓ Created .gitignore`));
|
|
380
408
|
}
|
|
381
|
-
} else {
|
|
382
|
-
await fs.writeFile(gitignorePath, gitignoreEntries.join('\n') + '\n', 'utf8');
|
|
383
|
-
result.counts.filesCreated++;
|
|
384
|
-
console.log(chalk.green(` ✓ Created .gitignore`));
|
|
385
409
|
}
|
|
386
410
|
|
|
387
411
|
result.success = true;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgileFlow CLI - npm Registry Utilities
|
|
3
|
+
*
|
|
4
|
+
* Utilities for interacting with the npm registry.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const https = require('https');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Get the latest version of a package from npm registry
|
|
11
|
+
* @param {string} packageName - Name of the package
|
|
12
|
+
* @returns {Promise<string|null>} Latest version or null if error
|
|
13
|
+
*/
|
|
14
|
+
async function getLatestVersion(packageName) {
|
|
15
|
+
return new Promise((resolve) => {
|
|
16
|
+
const options = {
|
|
17
|
+
hostname: 'registry.npmjs.org',
|
|
18
|
+
port: 443,
|
|
19
|
+
path: `/${packageName}/latest`,
|
|
20
|
+
method: 'GET',
|
|
21
|
+
headers: {
|
|
22
|
+
'User-Agent': 'agileflow-cli',
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const req = https.request(options, (res) => {
|
|
27
|
+
let data = '';
|
|
28
|
+
|
|
29
|
+
res.on('data', (chunk) => {
|
|
30
|
+
data += chunk;
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
res.on('end', () => {
|
|
34
|
+
try {
|
|
35
|
+
if (res.statusCode === 200) {
|
|
36
|
+
const json = JSON.parse(data);
|
|
37
|
+
resolve(json.version || null);
|
|
38
|
+
} else {
|
|
39
|
+
resolve(null);
|
|
40
|
+
}
|
|
41
|
+
} catch (err) {
|
|
42
|
+
resolve(null);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
req.on('error', () => {
|
|
48
|
+
resolve(null);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
req.setTimeout(5000, () => {
|
|
52
|
+
req.destroy();
|
|
53
|
+
resolve(null);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
req.end();
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
module.exports = {
|
|
61
|
+
getLatestVersion,
|
|
62
|
+
};
|
package/tools/cli/lib/ui.js
CHANGED
|
@@ -24,7 +24,7 @@ function displayLogo() {
|
|
|
24
24
|
██╔══██║██║ ██║██║██║ ██╔══╝ ██╔══╝ ██║ ██║ ██║██║███╗██║
|
|
25
25
|
██║ ██║╚██████╔╝██║███████╗███████╗██║ ███████╗╚██████╔╝╚███╔███╔╝
|
|
26
26
|
╚═╝ ╚═╝ ╚═════╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚══════╝ ╚═════╝ ╚══╝╚══╝ `;
|
|
27
|
-
console.log(chalk.hex('#
|
|
27
|
+
console.log(chalk.hex('#e8683a')(logo));
|
|
28
28
|
console.log(chalk.dim(` AgileFlow v${packageJson.version} - AI-Driven Agile Development\n`));
|
|
29
29
|
}
|
|
30
30
|
|
|
@@ -34,7 +34,7 @@ function displayLogo() {
|
|
|
34
34
|
* @param {string} subtitle - Optional subtitle
|
|
35
35
|
*/
|
|
36
36
|
function displaySection(title, subtitle = null) {
|
|
37
|
-
console.log(chalk.bold.hex('#
|
|
37
|
+
console.log(chalk.bold.hex('#e8683a')(`\n${title}`));
|
|
38
38
|
if (subtitle) {
|
|
39
39
|
console.log(chalk.dim(subtitle));
|
|
40
40
|
}
|
|
@@ -164,6 +164,12 @@ async function promptInstall() {
|
|
|
164
164
|
return true;
|
|
165
165
|
},
|
|
166
166
|
},
|
|
167
|
+
{
|
|
168
|
+
type: 'confirm',
|
|
169
|
+
name: 'updateGitignore',
|
|
170
|
+
message: 'Create/update .gitignore with recommended entries?',
|
|
171
|
+
default: true,
|
|
172
|
+
},
|
|
167
173
|
]);
|
|
168
174
|
|
|
169
175
|
return {
|
|
@@ -172,6 +178,7 @@ async function promptInstall() {
|
|
|
172
178
|
userName: answers.userName,
|
|
173
179
|
agileflowFolder: answers.agileflowFolder,
|
|
174
180
|
docsFolder: answers.docsFolder,
|
|
181
|
+
updateGitignore: answers.updateGitignore,
|
|
175
182
|
};
|
|
176
183
|
}
|
|
177
184
|
|
package/tools/postinstall.js
CHANGED
|
@@ -31,6 +31,19 @@ function shouldSkipInstall() {
|
|
|
31
31
|
return true;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
// Skip in CI environments
|
|
35
|
+
if (process.env.CI === 'true' || process.env.CI === '1') {
|
|
36
|
+
log('ℹ️ Skipping auto-install (CI environment detected)', 'dim');
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Skip if installed globally
|
|
41
|
+
if (process.env.npm_config_global === 'true') {
|
|
42
|
+
log('ℹ️ Skipping auto-install (global installation)', 'dim');
|
|
43
|
+
log(' Run "agileflow setup" in your project directory instead', 'dim');
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
|
|
34
47
|
// Skip if running in npm cache or npx temp directory
|
|
35
48
|
if (__dirname.includes('_npx') || __dirname.includes('.npm')) {
|
|
36
49
|
log('ℹ️ Skipping auto-install (npm cache or npx temp directory)', 'dim');
|
|
@@ -90,7 +103,7 @@ function shouldSkipInstall() {
|
|
|
90
103
|
return false;
|
|
91
104
|
}
|
|
92
105
|
|
|
93
|
-
function runAutoInstall() {
|
|
106
|
+
async function runAutoInstall() {
|
|
94
107
|
try {
|
|
95
108
|
console.log(''); // Blank line for spacing
|
|
96
109
|
log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', 'blue');
|
|
@@ -98,9 +111,6 @@ function runAutoInstall() {
|
|
|
98
111
|
log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', 'blue');
|
|
99
112
|
console.log('');
|
|
100
113
|
|
|
101
|
-
log('🚀 Setting up AgileFlow in your project...', 'green');
|
|
102
|
-
console.log('');
|
|
103
|
-
|
|
104
114
|
// Path to the CLI
|
|
105
115
|
const cliPath = path.join(__dirname, 'cli', 'agileflow-cli.js');
|
|
106
116
|
|
|
@@ -109,11 +119,57 @@ function runAutoInstall() {
|
|
|
109
119
|
return;
|
|
110
120
|
}
|
|
111
121
|
|
|
112
|
-
//
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
122
|
+
// Check if running in interactive mode (TTY)
|
|
123
|
+
const isInteractive = process.stdin.isTTY && process.stdout.isTTY;
|
|
124
|
+
|
|
125
|
+
if (isInteractive) {
|
|
126
|
+
// Interactive mode: ask for confirmation
|
|
127
|
+
console.log('AgileFlow can set up automatically in your project now.');
|
|
128
|
+
console.log('');
|
|
129
|
+
console.log('Options:');
|
|
130
|
+
console.log(' 1) Run setup now (recommended)');
|
|
131
|
+
console.log(' 2) Skip setup for now (run "npx agileflow setup" later)');
|
|
132
|
+
console.log('');
|
|
133
|
+
|
|
134
|
+
// Use readline for simple input
|
|
135
|
+
const readline = require('readline').createInterface({
|
|
136
|
+
input: process.stdin,
|
|
137
|
+
output: process.stdout,
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
const answer = await new Promise((resolve) => {
|
|
141
|
+
readline.question('Choose an option (1 or 2): ', (ans) => {
|
|
142
|
+
readline.close();
|
|
143
|
+
resolve(ans.trim());
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
console.log('');
|
|
148
|
+
|
|
149
|
+
if (answer !== '1') {
|
|
150
|
+
log('ℹ️ Setup skipped. Run "npx agileflow setup" when ready.', 'dim');
|
|
151
|
+
console.log('');
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
log('🚀 Setting up AgileFlow in your project...', 'green');
|
|
156
|
+
console.log('');
|
|
157
|
+
|
|
158
|
+
// Run setup command (interactive mode, no --yes flag)
|
|
159
|
+
execSync(`node "${cliPath}" setup`, {
|
|
160
|
+
stdio: 'inherit',
|
|
161
|
+
cwd: process.cwd(),
|
|
162
|
+
});
|
|
163
|
+
} else {
|
|
164
|
+
// Non-interactive mode (e.g., npm install in scripts): run with --yes
|
|
165
|
+
log('🚀 Setting up AgileFlow in your project...', 'green');
|
|
166
|
+
console.log('');
|
|
167
|
+
|
|
168
|
+
execSync(`node "${cliPath}" setup --yes`, {
|
|
169
|
+
stdio: 'inherit',
|
|
170
|
+
cwd: process.cwd(),
|
|
171
|
+
});
|
|
172
|
+
}
|
|
117
173
|
|
|
118
174
|
console.log('');
|
|
119
175
|
log('✨ AgileFlow is ready to use!', 'green');
|
|
@@ -134,8 +190,10 @@ function runAutoInstall() {
|
|
|
134
190
|
}
|
|
135
191
|
|
|
136
192
|
// Main execution
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
193
|
+
(async () => {
|
|
194
|
+
if (shouldSkipInstall()) {
|
|
195
|
+
process.exit(0);
|
|
196
|
+
}
|
|
140
197
|
|
|
141
|
-
runAutoInstall();
|
|
198
|
+
await runAutoInstall();
|
|
199
|
+
})();
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: context7
|
|
3
|
-
description: Use this agent when you need to fetch and utilize documentation from Context7 for specific libraries or frameworks to get current, accurate documentation without consuming main context tokens.
|
|
4
|
-
tools: Read, Write, Edit, Bash
|
|
5
|
-
color: yellow
|
|
6
|
-
model: haiku
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# AgileFlow Context7 Documentation Specialist
|
|
10
|
-
|
|
11
|
-
## Purpose
|
|
12
|
-
|
|
13
|
-
This agent specializes in fetching and presenting current, accurate documentation for libraries and frameworks through Context7. It keeps your main conversation context clean by handling documentation lookups in isolation, ensuring you get the most up-to-date guidance without token bloat from MCP calls.
|
|
14
|
-
|
|
15
|
-
## When to Use This Agent
|
|
16
|
-
|
|
17
|
-
**Use context7 when you need**:
|
|
18
|
-
- Current documentation for a specific library or framework
|
|
19
|
-
- Implementation guidance based on latest docs (React, Vue, Express, MongoDB, etc.)
|
|
20
|
-
- Multi-library integration help with accurate documentation
|
|
21
|
-
- Best practices and current API reference information
|
|
22
|
-
- Code examples reflecting current versions
|
|
23
|
-
|
|
24
|
-
**Examples of When to Invoke**:
|
|
25
|
-
|
|
26
|
-
```
|
|
27
|
-
User: "I need to implement authentication with JWT in Express.js"
|
|
28
|
-
Assistant: "Use the context7 agent to fetch the latest Express.js and authentication documentation"
|
|
29
|
-
|
|
30
|
-
User: "How do I use React Server Components in Next.js?"
|
|
31
|
-
Assistant: "Use the context7 agent to get current Next.js Server Component documentation"
|
|
32
|
-
|
|
33
|
-
User: "What's the best way to set up MongoDB with Mongoose?"
|
|
34
|
-
Assistant: "Use the context7 agent to fetch the latest MongoDB and Mongoose setup guides"
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Agent Responsibilities
|
|
38
|
-
|
|
39
|
-
### 1. Identify Required Documentation
|
|
40
|
-
- Parse user requests to identify all relevant libraries/frameworks
|
|
41
|
-
- Recognize technology stack and dependencies
|
|
42
|
-
- Understand the specific problem or use case
|
|
43
|
-
|
|
44
|
-
### 2. Resolve and Fetch Documentation
|
|
45
|
-
- Convert library names to Context7-compatible identifiers
|
|
46
|
-
- Use targeted topic parameters for focused queries
|
|
47
|
-
- Fetch with appropriate token limits (default 10000, increase for complex topics)
|
|
48
|
-
|
|
49
|
-
### 3. Provide Comprehensive Guidance
|
|
50
|
-
- Deliver clear, actionable explanations based on current docs
|
|
51
|
-
- Include code examples reflecting current best practices
|
|
52
|
-
- Provide step-by-step implementation guidance
|
|
53
|
-
- Highlight relevant warnings and considerations
|
|
54
|
-
|
|
55
|
-
### 4. Handle Multiple Libraries
|
|
56
|
-
- Prioritize the primary library first
|
|
57
|
-
- Fetch each library's documentation separately
|
|
58
|
-
- Show integrated guidance for multi-library workflows
|
|
59
|
-
|
|
60
|
-
### 5. Optimize Queries
|
|
61
|
-
- Be specific about required functionality
|
|
62
|
-
- Focus on actual use cases
|
|
63
|
-
- Structure requests for accuracy
|
|
64
|
-
|
|
65
|
-
## How Subagents Work with Context7
|
|
66
|
-
|
|
67
|
-
**Before (Main Context Heavy)**:
|
|
68
|
-
```
|
|
69
|
-
User → Main Agent (fetches docs via MCP) → Main context bloated with doc tokens
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
**After (Isolated Context)**:
|
|
73
|
-
```
|
|
74
|
-
User → Main Agent → "Use context7" → Context7 Agent (isolated docs lookup)
|
|
75
|
-
↓
|
|
76
|
-
Returns focused documentation guidance without consuming main context
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
## Communication Protocol
|
|
80
|
-
|
|
81
|
-
When the Context7 agent completes its work, it will:
|
|
82
|
-
|
|
83
|
-
1. **Return Documentation Summary**:
|
|
84
|
-
- Key findings from Context7 lookup
|
|
85
|
-
- Relevant code examples
|
|
86
|
-
- Implementation steps
|
|
87
|
-
|
|
88
|
-
2. **Highlight Warnings**:
|
|
89
|
-
- Breaking changes in recent versions
|
|
90
|
-
- Deprecated patterns
|
|
91
|
-
- Best practices to follow
|
|
92
|
-
|
|
93
|
-
3. **Provide Next Steps**:
|
|
94
|
-
- Clear action items for the user
|
|
95
|
-
- References to documentation
|
|
96
|
-
- Suggestions for further learning
|
|
97
|
-
|
|
98
|
-
## Quality Checklist
|
|
99
|
-
|
|
100
|
-
Your documentation research is complete when:
|
|
101
|
-
- [ ] All relevant libraries identified and documented
|
|
102
|
-
- [ ] Code examples included and current
|
|
103
|
-
- [ ] Step-by-step implementation provided
|
|
104
|
-
- [ ] Warnings and considerations listed
|
|
105
|
-
- [ ] Links to official documentation included
|
|
106
|
-
- [ ] Use case clearly addressed
|
|
107
|
-
- [ ] Alternative approaches mentioned if applicable
|
|
108
|
-
|
|
109
|
-
## Examples
|
|
110
|
-
|
|
111
|
-
### Single Library Query
|
|
112
|
-
**User Request**: "How do I set up authentication in Express?"
|
|
113
|
-
|
|
114
|
-
**Agent Process**:
|
|
115
|
-
1. Identify Express.js as primary library
|
|
116
|
-
2. Resolve to Context7 identifier
|
|
117
|
-
3. Fetch documentation for "authentication" topic
|
|
118
|
-
4. Return setup steps and code examples from current Express docs
|
|
119
|
-
|
|
120
|
-
### Multi-Library Query
|
|
121
|
-
**User Request**: "How do I connect my React app to a Node/Express backend with authentication?"
|
|
122
|
-
|
|
123
|
-
**Agent Process**:
|
|
124
|
-
1. Identify React + Express + Authentication
|
|
125
|
-
2. Fetch React docs (state management, API calls)
|
|
126
|
-
3. Fetch Express docs (authentication middleware)
|
|
127
|
-
4. Fetch OAuth/JWT documentation
|
|
128
|
-
5. Provide integrated implementation guide
|
|
129
|
-
|
|
130
|
-
### Framework-Specific Query
|
|
131
|
-
**User Request**: "What's the best way to handle forms in Next.js 14?"
|
|
132
|
-
|
|
133
|
-
**Agent Process**:
|
|
134
|
-
1. Identify Next.js 14 as specific version requirement
|
|
135
|
-
2. Fetch Server Actions documentation
|
|
136
|
-
3. Fetch Form handling best practices
|
|
137
|
-
4. Provide Next.js-specific implementation with current APIs
|
|
138
|
-
|
|
139
|
-
## Integration with AgileFlow
|
|
140
|
-
|
|
141
|
-
This agent works with other AgileFlow agents:
|
|
142
|
-
|
|
143
|
-
- **mentor**: References Context7 agent for accurate implementation guidance
|
|
144
|
-
- **epic-planner**: Uses for estimating complexity based on documentation
|
|
145
|
-
- **research**: Complements research notes with current documentation
|
|
146
|
-
- **devops**: References for dependency management and version guidance
|
|
147
|
-
|
|
148
|
-
## Notes
|
|
149
|
-
|
|
150
|
-
- Always mention you're using Context7 to ensure documentation accuracy
|
|
151
|
-
- If documentation seems incomplete, suggest refining queries with more targeted keywords
|
|
152
|
-
- Break complex requests into smaller, focused documentation lookups
|
|
153
|
-
- Keep main conversation focused on implementation, not documentation lookup overhead
|
|
154
|
-
- Document findings in `docs/10-research/` for team reference
|
|
155
|
-
|
|
156
|
-
## Why This Matters
|
|
157
|
-
|
|
158
|
-
By isolating Context7 documentation fetches:
|
|
159
|
-
- ✅ Main conversation stays focused on implementation
|
|
160
|
-
- ✅ Token budget preserved for actual coding work
|
|
161
|
-
- ✅ Documentation lookups don't clutter decision history
|
|
162
|
-
- ✅ Multiple docs can be fetched without context explosion
|
|
163
|
-
- ✅ Users get focused, accurate guidance on each library
|
|
164
|
-
- ✅ Clear separation of concerns (docs vs. implementation)
|