@claudetools/cli 0.9.2
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/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +106 -0
- package/dist/cli.js.map +1 -0
- package/dist/onboard/agents-md-builder.d.ts +14 -0
- package/dist/onboard/agents-md-builder.d.ts.map +1 -0
- package/dist/onboard/agents-md-builder.js +378 -0
- package/dist/onboard/agents-md-builder.js.map +1 -0
- package/dist/onboard/context7-fetcher.d.ts +27 -0
- package/dist/onboard/context7-fetcher.d.ts.map +1 -0
- package/dist/onboard/context7-fetcher.js +116 -0
- package/dist/onboard/context7-fetcher.js.map +1 -0
- package/dist/onboard/docs-generator.d.ts +8 -0
- package/dist/onboard/docs-generator.d.ts.map +1 -0
- package/dist/onboard/docs-generator.js +250 -0
- package/dist/onboard/docs-generator.js.map +1 -0
- package/dist/onboard/index.d.ts +11 -0
- package/dist/onboard/index.d.ts.map +1 -0
- package/dist/onboard/index.js +128 -0
- package/dist/onboard/index.js.map +1 -0
- package/dist/onboard/stack-detector.d.ts +4 -0
- package/dist/onboard/stack-detector.d.ts.map +1 -0
- package/dist/onboard/stack-detector.js +324 -0
- package/dist/onboard/stack-detector.js.map +1 -0
- package/dist/onboard/types.d.ts +80 -0
- package/dist/onboard/types.d.ts.map +1 -0
- package/dist/onboard/types.js +5 -0
- package/dist/onboard/types.js.map +1 -0
- package/dist/onboard/web-research.d.ts +11 -0
- package/dist/onboard/web-research.d.ts.map +1 -0
- package/dist/onboard/web-research.js +209 -0
- package/dist/onboard/web-research.js.map +1 -0
- package/dist/setup.d.ts +3 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +190 -0
- package/dist/setup.js.map +1 -0
- package/dist/templates/agents-md.d.ts +10 -0
- package/dist/templates/agents-md.d.ts.map +1 -0
- package/dist/templates/agents-md.js +125 -0
- package/dist/templates/agents-md.js.map +1 -0
- package/dist/templates/claude-md.d.ts +12 -0
- package/dist/templates/claude-md.d.ts.map +1 -0
- package/dist/templates/claude-md.js +62 -0
- package/dist/templates/claude-md.js.map +1 -0
- package/package.json +54 -0
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// ClaudeTools CLI Entry Point
|
|
4
|
+
// =============================================================================
|
|
5
|
+
// Simplified CLI for documentation-driven AI agent project setup
|
|
6
|
+
import { parseArgs } from 'node:util';
|
|
7
|
+
import { readFileSync } from 'node:fs';
|
|
8
|
+
import { fileURLToPath } from 'node:url';
|
|
9
|
+
import { dirname, join } from 'node:path';
|
|
10
|
+
import { runInit, runCleanup } from './setup.js';
|
|
11
|
+
import { runOnboard } from './onboard/index.js';
|
|
12
|
+
// Get version from package.json
|
|
13
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
14
|
+
const __dirname = dirname(__filename);
|
|
15
|
+
const packagePath = join(__dirname, '..', 'package.json');
|
|
16
|
+
const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
|
|
17
|
+
const version = packageJson.version;
|
|
18
|
+
// Parse command-line arguments
|
|
19
|
+
const { values, positionals } = parseArgs({
|
|
20
|
+
options: {
|
|
21
|
+
version: { type: 'boolean', short: 'v' },
|
|
22
|
+
help: { type: 'boolean', short: 'h' },
|
|
23
|
+
refresh: { type: 'boolean', short: 'r' },
|
|
24
|
+
verbose: { type: 'boolean' },
|
|
25
|
+
'skip-docs': { type: 'boolean' },
|
|
26
|
+
},
|
|
27
|
+
allowPositionals: true,
|
|
28
|
+
strict: false,
|
|
29
|
+
});
|
|
30
|
+
// Handle version flag
|
|
31
|
+
if (values.version) {
|
|
32
|
+
console.log(`claudetools v${version}`);
|
|
33
|
+
process.exit(0);
|
|
34
|
+
}
|
|
35
|
+
// Handle help flag
|
|
36
|
+
if (values.help) {
|
|
37
|
+
console.log(`
|
|
38
|
+
claudetools - AI agent project setup for Claude Code
|
|
39
|
+
|
|
40
|
+
Usage:
|
|
41
|
+
claudetools [command] [options]
|
|
42
|
+
|
|
43
|
+
Commands:
|
|
44
|
+
init Initialize current directory as a project
|
|
45
|
+
onboard Detect stack, fetch docs, generate AGENTS.md
|
|
46
|
+
cleanup Remove legacy config and broken hooks
|
|
47
|
+
|
|
48
|
+
Options:
|
|
49
|
+
-v, --version Show version
|
|
50
|
+
-h, --help Show this help
|
|
51
|
+
-r, --refresh Refresh existing documentation (with onboard)
|
|
52
|
+
--verbose Show detailed output
|
|
53
|
+
--skip-docs Skip documentation generation (with onboard)
|
|
54
|
+
|
|
55
|
+
Examples:
|
|
56
|
+
claudetools init # Set up a new project
|
|
57
|
+
claudetools onboard # Generate documentation and AGENTS.md
|
|
58
|
+
claudetools onboard --refresh # Re-fetch and regenerate documentation
|
|
59
|
+
|
|
60
|
+
Documentation: https://github.com/claudetools/claudetools
|
|
61
|
+
`);
|
|
62
|
+
process.exit(0);
|
|
63
|
+
}
|
|
64
|
+
// Handle commands
|
|
65
|
+
const command = positionals[0];
|
|
66
|
+
switch (command) {
|
|
67
|
+
case 'init':
|
|
68
|
+
runInit().catch((error) => {
|
|
69
|
+
console.error('Init failed:', error instanceof Error ? error.message : String(error));
|
|
70
|
+
process.exit(1);
|
|
71
|
+
});
|
|
72
|
+
break;
|
|
73
|
+
case 'onboard':
|
|
74
|
+
runOnboard(process.cwd(), {
|
|
75
|
+
refresh: values.refresh,
|
|
76
|
+
verbose: values.verbose,
|
|
77
|
+
skipDocs: values['skip-docs'],
|
|
78
|
+
}).catch((error) => {
|
|
79
|
+
console.error('Onboard failed:', error instanceof Error ? error.message : String(error));
|
|
80
|
+
process.exit(1);
|
|
81
|
+
});
|
|
82
|
+
break;
|
|
83
|
+
case 'cleanup':
|
|
84
|
+
runCleanup().catch((error) => {
|
|
85
|
+
console.error('Cleanup failed:', error instanceof Error ? error.message : String(error));
|
|
86
|
+
process.exit(1);
|
|
87
|
+
});
|
|
88
|
+
break;
|
|
89
|
+
default:
|
|
90
|
+
// Show help if no command
|
|
91
|
+
console.log(`
|
|
92
|
+
claudetools - AI agent project setup for Claude Code
|
|
93
|
+
|
|
94
|
+
Usage:
|
|
95
|
+
claudetools init Initialize project
|
|
96
|
+
claudetools onboard Generate documentation and AGENTS.md
|
|
97
|
+
claudetools cleanup Remove legacy config
|
|
98
|
+
|
|
99
|
+
Run 'claudetools --help' for more options.
|
|
100
|
+
`);
|
|
101
|
+
if (command) {
|
|
102
|
+
console.error(`Unknown command: ${command}`);
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { StackInfo, AgentsMdContent, DocumentationFile } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Build AGENTS.md content
|
|
4
|
+
*/
|
|
5
|
+
export declare function buildAgentsMd(projectPath: string, stack: StackInfo, docFiles: DocumentationFile[]): AgentsMdContent;
|
|
6
|
+
/**
|
|
7
|
+
* Render AGENTS.md content to string
|
|
8
|
+
*/
|
|
9
|
+
export declare function renderAgentsMd(content: AgentsMdContent): string;
|
|
10
|
+
/**
|
|
11
|
+
* Write AGENTS.md to project
|
|
12
|
+
*/
|
|
13
|
+
export declare function writeAgentsMd(projectPath: string, content: AgentsMdContent): void;
|
|
14
|
+
//# sourceMappingURL=agents-md-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents-md-builder.d.ts","sourceRoot":"","sources":["../../src/onboard/agents-md-builder.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EAIf,iBAAiB,EAClB,MAAM,YAAY,CAAC;AA+BpB;;GAEG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,iBAAiB,EAAE,GAC5B,eAAe,CAiBjB;AA2QD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAmF/D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CAIjF"}
|
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// AGENTS.md Builder
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// Builds comprehensive AGENTS.md content for AI agent context
|
|
5
|
+
import { existsSync, readdirSync, statSync, readFileSync, writeFileSync } from 'fs';
|
|
6
|
+
import { join, basename, extname } from 'path';
|
|
7
|
+
import { getStackSummary } from './stack-detector.js';
|
|
8
|
+
// Directories to exclude from tree
|
|
9
|
+
const EXCLUDED_DIRS = new Set([
|
|
10
|
+
'node_modules',
|
|
11
|
+
'.git',
|
|
12
|
+
'.next',
|
|
13
|
+
'.turbo',
|
|
14
|
+
'dist',
|
|
15
|
+
'build',
|
|
16
|
+
'.cache',
|
|
17
|
+
'coverage',
|
|
18
|
+
'__pycache__',
|
|
19
|
+
'.pytest_cache',
|
|
20
|
+
'target',
|
|
21
|
+
'vendor',
|
|
22
|
+
]);
|
|
23
|
+
// Files that are likely entry points
|
|
24
|
+
const ENTRY_POINT_PATTERNS = [
|
|
25
|
+
/^(src\/)?index\.(ts|tsx|js|jsx|py|go|rs)$/,
|
|
26
|
+
/^(src\/)?main\.(ts|tsx|js|jsx|py|go|rs)$/,
|
|
27
|
+
/^(src\/)?app\.(ts|tsx|js|jsx|py)$/,
|
|
28
|
+
/^(src\/)?server\.(ts|tsx|js|jsx|py)$/,
|
|
29
|
+
/^(src\/)?app\/layout\.(tsx|jsx)$/,
|
|
30
|
+
/^(src\/)?app\/page\.(tsx|jsx)$/,
|
|
31
|
+
/^(src\/)?routes\/.*\.(tsx|jsx)$/,
|
|
32
|
+
/^(src\/)?pages\/.*\.(tsx|jsx)$/,
|
|
33
|
+
];
|
|
34
|
+
/**
|
|
35
|
+
* Build AGENTS.md content
|
|
36
|
+
*/
|
|
37
|
+
export function buildAgentsMd(projectPath, stack, docFiles) {
|
|
38
|
+
const projectName = basename(projectPath);
|
|
39
|
+
return {
|
|
40
|
+
projectName,
|
|
41
|
+
projectPath,
|
|
42
|
+
generatedAt: new Date().toISOString(),
|
|
43
|
+
stack,
|
|
44
|
+
directoryTree: generateDirectoryTree(projectPath, 4),
|
|
45
|
+
entryPoints: detectEntryPoints(projectPath),
|
|
46
|
+
conventions: detectConventions(projectPath, stack),
|
|
47
|
+
documentationLinks: docFiles.map(f => ({
|
|
48
|
+
title: f.title,
|
|
49
|
+
path: f.path,
|
|
50
|
+
description: f.category,
|
|
51
|
+
})),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Generate directory tree string
|
|
56
|
+
*/
|
|
57
|
+
function generateDirectoryTree(dirPath, maxDepth, depth = 0, prefix = '') {
|
|
58
|
+
if (depth >= maxDepth)
|
|
59
|
+
return '';
|
|
60
|
+
let result = '';
|
|
61
|
+
const items = readdirSync(dirPath).filter(item => {
|
|
62
|
+
if (item.startsWith('.') && item !== '.env.example')
|
|
63
|
+
return false;
|
|
64
|
+
if (EXCLUDED_DIRS.has(item))
|
|
65
|
+
return false;
|
|
66
|
+
return true;
|
|
67
|
+
});
|
|
68
|
+
// Sort: directories first, then files
|
|
69
|
+
items.sort((a, b) => {
|
|
70
|
+
const aIsDir = statSync(join(dirPath, a)).isDirectory();
|
|
71
|
+
const bIsDir = statSync(join(dirPath, b)).isDirectory();
|
|
72
|
+
if (aIsDir && !bIsDir)
|
|
73
|
+
return -1;
|
|
74
|
+
if (!aIsDir && bIsDir)
|
|
75
|
+
return 1;
|
|
76
|
+
return a.localeCompare(b);
|
|
77
|
+
});
|
|
78
|
+
for (let i = 0; i < items.length; i++) {
|
|
79
|
+
const item = items[i];
|
|
80
|
+
const itemPath = join(dirPath, item);
|
|
81
|
+
const isLast = i === items.length - 1;
|
|
82
|
+
const isDir = statSync(itemPath).isDirectory();
|
|
83
|
+
const connector = isLast ? '└── ' : '├── ';
|
|
84
|
+
const childPrefix = isLast ? ' ' : '│ ';
|
|
85
|
+
result += prefix + connector + item;
|
|
86
|
+
if (isDir) {
|
|
87
|
+
result += '/\n';
|
|
88
|
+
result += generateDirectoryTree(itemPath, maxDepth, depth + 1, prefix + childPrefix);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
result += '\n';
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Detect entry points in the project
|
|
98
|
+
*/
|
|
99
|
+
function detectEntryPoints(projectPath) {
|
|
100
|
+
const entryPoints = [];
|
|
101
|
+
function scanDirectory(dirPath, relativeBase = '') {
|
|
102
|
+
const items = readdirSync(dirPath);
|
|
103
|
+
for (const item of items) {
|
|
104
|
+
const fullPath = join(dirPath, item);
|
|
105
|
+
const relativePath = join(relativeBase, item);
|
|
106
|
+
if (statSync(fullPath).isDirectory()) {
|
|
107
|
+
if (!EXCLUDED_DIRS.has(item) && !item.startsWith('.')) {
|
|
108
|
+
scanDirectory(fullPath, relativePath);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
// Check if this file matches entry point patterns
|
|
113
|
+
for (const pattern of ENTRY_POINT_PATTERNS) {
|
|
114
|
+
if (pattern.test(relativePath)) {
|
|
115
|
+
const exports = extractExports(fullPath);
|
|
116
|
+
entryPoints.push({
|
|
117
|
+
path: relativePath,
|
|
118
|
+
description: getEntryPointDescription(relativePath),
|
|
119
|
+
exports: exports.length > 0 ? exports : undefined,
|
|
120
|
+
});
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
scanDirectory(projectPath);
|
|
128
|
+
// Check package.json for main/exports
|
|
129
|
+
const packageJsonPath = join(projectPath, 'package.json');
|
|
130
|
+
if (existsSync(packageJsonPath)) {
|
|
131
|
+
try {
|
|
132
|
+
const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
133
|
+
if (pkg.main && !entryPoints.some(e => e.path === pkg.main)) {
|
|
134
|
+
entryPoints.push({
|
|
135
|
+
path: pkg.main,
|
|
136
|
+
description: 'Main entry point (from package.json)',
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// Silent fail
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return entryPoints;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Extract exports from a source file
|
|
148
|
+
*/
|
|
149
|
+
function extractExports(filePath) {
|
|
150
|
+
const exports = [];
|
|
151
|
+
const ext = extname(filePath);
|
|
152
|
+
if (!['.ts', '.tsx', '.js', '.jsx'].includes(ext)) {
|
|
153
|
+
return exports;
|
|
154
|
+
}
|
|
155
|
+
try {
|
|
156
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
157
|
+
const lines = content.split('\n');
|
|
158
|
+
for (const line of lines) {
|
|
159
|
+
// Match: export function name
|
|
160
|
+
const funcMatch = line.match(/export\s+(async\s+)?function\s+(\w+)/);
|
|
161
|
+
if (funcMatch) {
|
|
162
|
+
exports.push(funcMatch[2]);
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
// Match: export const/let name
|
|
166
|
+
const varMatch = line.match(/export\s+(const|let|var)\s+(\w+)/);
|
|
167
|
+
if (varMatch) {
|
|
168
|
+
exports.push(varMatch[2]);
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
// Match: export class name
|
|
172
|
+
const classMatch = line.match(/export\s+(abstract\s+)?class\s+(\w+)/);
|
|
173
|
+
if (classMatch) {
|
|
174
|
+
exports.push(classMatch[2]);
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
// Match: export default
|
|
178
|
+
const defaultMatch = line.match(/export\s+default\s+(function|class)?\s*(\w+)?/);
|
|
179
|
+
if (defaultMatch && defaultMatch[2]) {
|
|
180
|
+
exports.push(`default (${defaultMatch[2]})`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
// Silent fail
|
|
186
|
+
}
|
|
187
|
+
return exports.slice(0, 10); // Limit to first 10
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Get description for entry point based on path
|
|
191
|
+
*/
|
|
192
|
+
function getEntryPointDescription(path) {
|
|
193
|
+
if (path.includes('app/layout'))
|
|
194
|
+
return 'Root layout component';
|
|
195
|
+
if (path.includes('app/page'))
|
|
196
|
+
return 'Home page component';
|
|
197
|
+
if (path.includes('routes/'))
|
|
198
|
+
return 'Route handler';
|
|
199
|
+
if (path.includes('pages/'))
|
|
200
|
+
return 'Page component';
|
|
201
|
+
if (path.match(/^(src\/)?index\./))
|
|
202
|
+
return 'Main entry point';
|
|
203
|
+
if (path.match(/^(src\/)?main\./))
|
|
204
|
+
return 'Main entry point';
|
|
205
|
+
if (path.match(/^(src\/)?app\./))
|
|
206
|
+
return 'Application entry';
|
|
207
|
+
if (path.match(/^(src\/)?server\./))
|
|
208
|
+
return 'Server entry point';
|
|
209
|
+
return 'Entry point';
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Detect coding conventions from the project
|
|
213
|
+
*/
|
|
214
|
+
function detectConventions(projectPath, stack) {
|
|
215
|
+
const conventions = [];
|
|
216
|
+
// File naming convention
|
|
217
|
+
const srcPath = join(projectPath, 'src');
|
|
218
|
+
if (existsSync(srcPath)) {
|
|
219
|
+
const files = readdirSync(srcPath).filter(f => !f.startsWith('.'));
|
|
220
|
+
const hasKebab = files.some(f => f.includes('-'));
|
|
221
|
+
const hasCamel = files.some(f => /[a-z][A-Z]/.test(f));
|
|
222
|
+
const hasPascal = files.some(f => /^[A-Z]/.test(f));
|
|
223
|
+
if (hasKebab) {
|
|
224
|
+
conventions.push({
|
|
225
|
+
name: 'File Naming',
|
|
226
|
+
pattern: 'kebab-case',
|
|
227
|
+
description: 'Files use kebab-case naming (e.g., user-service.ts)',
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
else if (hasCamel) {
|
|
231
|
+
conventions.push({
|
|
232
|
+
name: 'File Naming',
|
|
233
|
+
pattern: 'camelCase',
|
|
234
|
+
description: 'Files use camelCase naming (e.g., userService.ts)',
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
else if (hasPascal) {
|
|
238
|
+
conventions.push({
|
|
239
|
+
name: 'File Naming',
|
|
240
|
+
pattern: 'PascalCase',
|
|
241
|
+
description: 'Files use PascalCase naming (e.g., UserService.ts)',
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
// Check for path aliases
|
|
246
|
+
const tsconfigPath = join(projectPath, 'tsconfig.json');
|
|
247
|
+
if (existsSync(tsconfigPath)) {
|
|
248
|
+
try {
|
|
249
|
+
const tsconfig = JSON.parse(readFileSync(tsconfigPath, 'utf-8'));
|
|
250
|
+
const paths = tsconfig.compilerOptions?.paths;
|
|
251
|
+
if (paths) {
|
|
252
|
+
const aliases = Object.keys(paths);
|
|
253
|
+
if (aliases.includes('@/*') || aliases.includes('~/*')) {
|
|
254
|
+
conventions.push({
|
|
255
|
+
name: 'Imports',
|
|
256
|
+
pattern: aliases[0],
|
|
257
|
+
description: 'Use path alias for imports instead of relative paths',
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
// Silent fail
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// Framework-specific conventions
|
|
267
|
+
if (stack.frameworks.some(f => f.name === 'next')) {
|
|
268
|
+
conventions.push({
|
|
269
|
+
name: 'Routing',
|
|
270
|
+
pattern: 'App Router',
|
|
271
|
+
description: 'Uses Next.js App Router with file-based routing in app/',
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
if (stack.frameworks.some(f => f.name === 'react')) {
|
|
275
|
+
conventions.push({
|
|
276
|
+
name: 'Components',
|
|
277
|
+
pattern: 'Functional',
|
|
278
|
+
description: 'Use functional components with hooks',
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
// Check for component directory structure
|
|
282
|
+
const componentsPath = join(projectPath, 'src', 'components');
|
|
283
|
+
if (existsSync(componentsPath)) {
|
|
284
|
+
const componentDirs = readdirSync(componentsPath).filter(f => statSync(join(componentsPath, f)).isDirectory());
|
|
285
|
+
if (componentDirs.length > 0) {
|
|
286
|
+
conventions.push({
|
|
287
|
+
name: 'Component Structure',
|
|
288
|
+
pattern: 'Directory per component',
|
|
289
|
+
description: 'Components organized in individual directories',
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return conventions;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Render AGENTS.md content to string
|
|
297
|
+
*/
|
|
298
|
+
export function renderAgentsMd(content) {
|
|
299
|
+
const stackSummary = getStackSummary(content.stack);
|
|
300
|
+
let md = `# AGENTS.md - ${content.projectName}\n\n`;
|
|
301
|
+
md += `> Comprehensive context for AI agents. Generated: ${content.generatedAt}\n\n`;
|
|
302
|
+
// Project Overview
|
|
303
|
+
md += `## Project Overview\n\n`;
|
|
304
|
+
md += `**Path:** \`${content.projectPath}\`\n`;
|
|
305
|
+
md += `**Stack:** ${stackSummary}\n\n`;
|
|
306
|
+
// Directory Structure
|
|
307
|
+
md += `## Directory Structure\n\n`;
|
|
308
|
+
md += '```\n';
|
|
309
|
+
md += content.directoryTree;
|
|
310
|
+
md += '```\n\n';
|
|
311
|
+
// Technology Stack
|
|
312
|
+
md += `## Technology Stack\n\n`;
|
|
313
|
+
if (content.stack.frameworks.length > 0) {
|
|
314
|
+
md += `### Frameworks\n\n`;
|
|
315
|
+
for (const fw of content.stack.frameworks) {
|
|
316
|
+
md += `- **${fw.name}** (${fw.version}) - ${fw.category}\n`;
|
|
317
|
+
}
|
|
318
|
+
md += '\n';
|
|
319
|
+
}
|
|
320
|
+
if (content.stack.libraries.length > 0) {
|
|
321
|
+
md += `### Libraries\n\n`;
|
|
322
|
+
const categories = [...new Set(content.stack.libraries.map(l => l.category))];
|
|
323
|
+
for (const category of categories) {
|
|
324
|
+
md += `**${category}:**\n`;
|
|
325
|
+
for (const lib of content.stack.libraries.filter(l => l.category === category)) {
|
|
326
|
+
md += `- ${lib.name} (${lib.version})\n`;
|
|
327
|
+
}
|
|
328
|
+
md += '\n';
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
if (content.stack.devTools.length > 0) {
|
|
332
|
+
md += `### Dev Tools\n\n`;
|
|
333
|
+
for (const tool of content.stack.devTools) {
|
|
334
|
+
md += `- ${tool.name} (${tool.category})\n`;
|
|
335
|
+
}
|
|
336
|
+
md += '\n';
|
|
337
|
+
}
|
|
338
|
+
// Documentation Links
|
|
339
|
+
if (content.documentationLinks.length > 0) {
|
|
340
|
+
md += `## Documentation\n\n`;
|
|
341
|
+
for (const link of content.documentationLinks) {
|
|
342
|
+
md += `- [\`${link.path}\`](${link.path}) - ${link.title}\n`;
|
|
343
|
+
}
|
|
344
|
+
md += '\n';
|
|
345
|
+
}
|
|
346
|
+
// Entry Points
|
|
347
|
+
if (content.entryPoints.length > 0) {
|
|
348
|
+
md += `## Entry Points\n\n`;
|
|
349
|
+
for (const entry of content.entryPoints) {
|
|
350
|
+
md += `- \`${entry.path}\` - ${entry.description}`;
|
|
351
|
+
if (entry.exports && entry.exports.length > 0) {
|
|
352
|
+
md += ` (exports: ${entry.exports.join(', ')})`;
|
|
353
|
+
}
|
|
354
|
+
md += '\n';
|
|
355
|
+
}
|
|
356
|
+
md += '\n';
|
|
357
|
+
}
|
|
358
|
+
// Conventions
|
|
359
|
+
if (content.conventions.length > 0) {
|
|
360
|
+
md += `## Conventions\n\n`;
|
|
361
|
+
for (const conv of content.conventions) {
|
|
362
|
+
md += `- **${conv.name}:** ${conv.pattern} - ${conv.description}\n`;
|
|
363
|
+
}
|
|
364
|
+
md += '\n';
|
|
365
|
+
}
|
|
366
|
+
md += `---\n\n`;
|
|
367
|
+
md += `*Refresh: \`claudetools onboard --refresh\`*\n`;
|
|
368
|
+
return md;
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Write AGENTS.md to project
|
|
372
|
+
*/
|
|
373
|
+
export function writeAgentsMd(projectPath, content) {
|
|
374
|
+
const mdContent = renderAgentsMd(content);
|
|
375
|
+
const agentsMdPath = join(projectPath, 'AGENTS.md');
|
|
376
|
+
writeFileSync(agentsMdPath, mdContent);
|
|
377
|
+
}
|
|
378
|
+
//# sourceMappingURL=agents-md-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents-md-builder.js","sourceRoot":"","sources":["../../src/onboard/agents-md-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Context7Library } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Check if mcp-cli is available
|
|
4
|
+
*/
|
|
5
|
+
export declare function isMcpCliAvailable(): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Resolve a library name to its Context7 library ID
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveLibraryId(libraryName: string): Promise<string | null>;
|
|
10
|
+
/**
|
|
11
|
+
* Query documentation for a library
|
|
12
|
+
*/
|
|
13
|
+
export declare function queryDocs(libraryId: string, query: string): Promise<string | null>;
|
|
14
|
+
/**
|
|
15
|
+
* Fetch comprehensive documentation for a library
|
|
16
|
+
* Makes up to 3 queries to get a complete overview
|
|
17
|
+
*/
|
|
18
|
+
export declare function fetchLibraryDocs(libraryName: string, context7Id?: string): Promise<{
|
|
19
|
+
overview: string | null;
|
|
20
|
+
bestPractices: string | null;
|
|
21
|
+
examples: string | null;
|
|
22
|
+
}>;
|
|
23
|
+
/**
|
|
24
|
+
* Search for available libraries in Context7
|
|
25
|
+
*/
|
|
26
|
+
export declare function searchLibraries(query: string): Promise<Context7Library[]>;
|
|
27
|
+
//# sourceMappingURL=context7-fetcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context7-fetcher.d.ts","sourceRoot":"","sources":["../../src/onboard/context7-fetcher.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAKlD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAO3C;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA0BlF;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBxB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC;IACT,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC,CAgCD;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAgC/E"}
|