@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
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Context7 Documentation Fetcher
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// Fetches official documentation via Context7 MCP integration
|
|
5
|
+
import { execSync } from 'child_process';
|
|
6
|
+
// Cache for library IDs to avoid repeated lookups
|
|
7
|
+
const libraryIdCache = new Map();
|
|
8
|
+
/**
|
|
9
|
+
* Check if mcp-cli is available
|
|
10
|
+
*/
|
|
11
|
+
export function isMcpCliAvailable() {
|
|
12
|
+
try {
|
|
13
|
+
execSync('which mcp-cli', { encoding: 'utf-8', stdio: 'pipe' });
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Resolve a library name to its Context7 library ID
|
|
22
|
+
*/
|
|
23
|
+
export async function resolveLibraryId(libraryName) {
|
|
24
|
+
// Check cache first
|
|
25
|
+
if (libraryIdCache.has(libraryName)) {
|
|
26
|
+
return libraryIdCache.get(libraryName);
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
const result = execSync(`mcp-cli call context7/resolve-library-id '${JSON.stringify({
|
|
30
|
+
libraryName,
|
|
31
|
+
})}'`, { encoding: 'utf-8', timeout: 30000, stdio: 'pipe' });
|
|
32
|
+
const parsed = JSON.parse(result);
|
|
33
|
+
const libraryId = parsed?.libraryId || parsed?.library_id;
|
|
34
|
+
if (libraryId) {
|
|
35
|
+
libraryIdCache.set(libraryName, libraryId);
|
|
36
|
+
return libraryId;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Silent fail - library might not be in Context7
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Query documentation for a library
|
|
46
|
+
*/
|
|
47
|
+
export async function queryDocs(libraryId, query) {
|
|
48
|
+
try {
|
|
49
|
+
const result = execSync(`mcp-cli call context7/query-docs '${JSON.stringify({
|
|
50
|
+
context7CompatibleLibraryID: libraryId,
|
|
51
|
+
topic: query,
|
|
52
|
+
})}'`, { encoding: 'utf-8', timeout: 60000, stdio: 'pipe' });
|
|
53
|
+
// The result should contain the documentation
|
|
54
|
+
if (result && result.trim().length > 0) {
|
|
55
|
+
return result.trim();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// Silent fail
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Fetch comprehensive documentation for a library
|
|
65
|
+
* Makes up to 3 queries to get a complete overview
|
|
66
|
+
*/
|
|
67
|
+
export async function fetchLibraryDocs(libraryName, context7Id) {
|
|
68
|
+
const result = {
|
|
69
|
+
overview: null,
|
|
70
|
+
bestPractices: null,
|
|
71
|
+
examples: null,
|
|
72
|
+
};
|
|
73
|
+
// Resolve library ID
|
|
74
|
+
const libraryId = context7Id || (await resolveLibraryId(libraryName));
|
|
75
|
+
if (!libraryId) {
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
// Query 1: Overview and getting started
|
|
79
|
+
result.overview = await queryDocs(libraryId, `Overview, installation, and getting started guide for ${libraryName}`);
|
|
80
|
+
// Query 2: Best practices and patterns
|
|
81
|
+
result.bestPractices = await queryDocs(libraryId, `Best practices, recommended patterns, and common conventions for ${libraryName}`);
|
|
82
|
+
// Query 3: Examples
|
|
83
|
+
result.examples = await queryDocs(libraryId, `Code examples and common use cases for ${libraryName}`);
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Search for available libraries in Context7
|
|
88
|
+
*/
|
|
89
|
+
export async function searchLibraries(query) {
|
|
90
|
+
try {
|
|
91
|
+
const result = execSync(`mcp-cli call context7/resolve-library-id '${JSON.stringify({
|
|
92
|
+
libraryName: query,
|
|
93
|
+
})}'`, { encoding: 'utf-8', timeout: 30000, stdio: 'pipe' });
|
|
94
|
+
const parsed = JSON.parse(result);
|
|
95
|
+
// Return as array if multiple results, or single item array
|
|
96
|
+
if (Array.isArray(parsed)) {
|
|
97
|
+
return parsed.map((item) => ({
|
|
98
|
+
libraryId: item.libraryId || item.library_id || '',
|
|
99
|
+
name: item.name || query,
|
|
100
|
+
description: item.description,
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
if (parsed?.libraryId || parsed?.library_id) {
|
|
104
|
+
return [{
|
|
105
|
+
libraryId: parsed.libraryId || parsed.library_id,
|
|
106
|
+
name: parsed.name || query,
|
|
107
|
+
description: parsed.description,
|
|
108
|
+
}];
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
// Silent fail
|
|
113
|
+
}
|
|
114
|
+
return [];
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=context7-fetcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context7-fetcher.js","sourceRoot":"","sources":["../../src/onboard/context7-fetcher.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,iCAAiC;AACjC,gFAAgF;AAChF,8DAA8D;AAE9D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,kDAAkD;AAClD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEjD;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC;QACH,QAAQ,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB;IACxD,oBAAoB;IACpB,IAAI,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,OAAO,cAAc,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CACrB,6CAA6C,IAAI,CAAC,SAAS,CAAC;YAC1D,WAAW;SACZ,CAAC,GAAG,EACL,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CACrD,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,MAAM,EAAE,UAAU,CAAC;QAE1D,IAAI,SAAS,EAAE,CAAC;YACd,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC3C,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iDAAiD;IACnD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,SAAiB,EACjB,KAAa;IAEb,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CACrB,qCAAqC,IAAI,CAAC,SAAS,CAAC;YAClD,2BAA2B,EAAE,SAAS;YACtC,KAAK,EAAE,KAAK;SACb,CAAC,GAAG,EACL,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CACrD,CAAC;QAEF,8CAA8C;QAC9C,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,WAAmB,EACnB,UAAmB;IAMnB,MAAM,MAAM,GAAG;QACb,QAAQ,EAAE,IAAqB;QAC/B,aAAa,EAAE,IAAqB;QACpC,QAAQ,EAAE,IAAqB;KAChC,CAAC;IAEF,qBAAqB;IACrB,MAAM,SAAS,GAAG,UAAU,IAAI,CAAC,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,wCAAwC;IACxC,MAAM,CAAC,QAAQ,GAAG,MAAM,SAAS,CAC/B,SAAS,EACT,yDAAyD,WAAW,EAAE,CACvE,CAAC;IAEF,uCAAuC;IACvC,MAAM,CAAC,aAAa,GAAG,MAAM,SAAS,CACpC,SAAS,EACT,oEAAoE,WAAW,EAAE,CAClF,CAAC;IAEF,oBAAoB;IACpB,MAAM,CAAC,QAAQ,GAAG,MAAM,SAAS,CAC/B,SAAS,EACT,0CAA0C,WAAW,EAAE,CACxD,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAa;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CACrB,6CAA6C,IAAI,CAAC,SAAS,CAAC;YAC1D,WAAW,EAAE,KAAK;SACnB,CAAC,GAAG,EACL,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CACrD,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAElC,4DAA4D;QAC5D,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAsF,EAAE,EAAE,CAAC,CAAC;gBAC7G,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE;gBAClD,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK;gBACxB,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CAAC,CAAC,CAAC;QACN,CAAC;QAED,IAAI,MAAM,EAAE,SAAS,IAAI,MAAM,EAAE,UAAU,EAAE,CAAC;YAC5C,OAAO,CAAC;oBACN,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU;oBAChD,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,KAAK;oBAC1B,WAAW,EAAE,MAAM,CAAC,WAAW;iBAChC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { StackInfo, DocumentationFile } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generate documentation directory structure
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateDocs(projectPath: string, stack: StackInfo, options?: {
|
|
6
|
+
verbose?: boolean;
|
|
7
|
+
}): Promise<DocumentationFile[]>;
|
|
8
|
+
//# sourceMappingURL=docs-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-generator.d.ts","sourceRoot":"","sources":["../../src/onboard/docs-generator.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAgB,MAAM,YAAY,CAAC;AAI7E;;GAEG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,SAAS,EAChB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAqN9B"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Documentation Generator
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// Generates the /docs/ directory structure with fetched documentation
|
|
5
|
+
import { existsSync, mkdirSync, writeFileSync, readFileSync, appendFileSync } from 'fs';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
import { fetchLibraryDocs, isMcpCliAvailable } from './context7-fetcher.js';
|
|
8
|
+
import { researchLibrary } from './web-research.js';
|
|
9
|
+
/**
|
|
10
|
+
* Generate documentation directory structure
|
|
11
|
+
*/
|
|
12
|
+
export async function generateDocs(projectPath, stack, options = {}) {
|
|
13
|
+
const docsPath = join(projectPath, 'docs');
|
|
14
|
+
const files = [];
|
|
15
|
+
// Create docs directory structure
|
|
16
|
+
const dirs = [
|
|
17
|
+
docsPath,
|
|
18
|
+
join(docsPath, 'frameworks'),
|
|
19
|
+
join(docsPath, 'libraries'),
|
|
20
|
+
join(docsPath, 'tooling'),
|
|
21
|
+
join(docsPath, 'patterns'),
|
|
22
|
+
];
|
|
23
|
+
for (const dir of dirs) {
|
|
24
|
+
if (!existsSync(dir)) {
|
|
25
|
+
mkdirSync(dir, { recursive: true });
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const hasContext7 = isMcpCliAvailable();
|
|
29
|
+
// Generate framework documentation
|
|
30
|
+
for (const framework of stack.frameworks) {
|
|
31
|
+
if (options.verbose) {
|
|
32
|
+
console.log(` Fetching docs for ${framework.name}...`);
|
|
33
|
+
}
|
|
34
|
+
let content = '';
|
|
35
|
+
let source = 'generated';
|
|
36
|
+
if (hasContext7 && framework.context7Id) {
|
|
37
|
+
const docs = await fetchLibraryDocs(framework.name, framework.context7Id);
|
|
38
|
+
if (docs.overview) {
|
|
39
|
+
content = `# ${framework.name}\n\n`;
|
|
40
|
+
content += `## Overview\n\n${docs.overview}\n\n`;
|
|
41
|
+
if (docs.bestPractices) {
|
|
42
|
+
content += `## Best Practices\n\n${docs.bestPractices}\n\n`;
|
|
43
|
+
}
|
|
44
|
+
if (docs.examples) {
|
|
45
|
+
content += `## Examples\n\n${docs.examples}\n\n`;
|
|
46
|
+
}
|
|
47
|
+
source = 'context7';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Supplement with web research
|
|
51
|
+
const research = await researchLibrary(framework.name);
|
|
52
|
+
if (research.bestPractices.length > 0 || !content) {
|
|
53
|
+
if (!content) {
|
|
54
|
+
content = `# ${framework.name}\n\n`;
|
|
55
|
+
content += `**Version:** ${framework.version}\n`;
|
|
56
|
+
content += `**Category:** ${framework.category}\n\n`;
|
|
57
|
+
}
|
|
58
|
+
if (research.bestPractices.length > 0) {
|
|
59
|
+
content += `## Best Practices\n\n`;
|
|
60
|
+
content += research.bestPractices.map(bp => `- ${bp}`).join('\n');
|
|
61
|
+
content += '\n\n';
|
|
62
|
+
source = source === 'context7' ? 'context7' : 'web-research';
|
|
63
|
+
}
|
|
64
|
+
if (research.commonPatterns.length > 0) {
|
|
65
|
+
content += `## Common Patterns\n\n`;
|
|
66
|
+
content += research.commonPatterns.map(p => `- ${p}`).join('\n');
|
|
67
|
+
content += '\n\n';
|
|
68
|
+
}
|
|
69
|
+
if (research.gotchas.length > 0) {
|
|
70
|
+
content += `## Gotchas\n\n`;
|
|
71
|
+
content += research.gotchas.map(g => `- ${g}`).join('\n');
|
|
72
|
+
content += '\n\n';
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (content) {
|
|
76
|
+
const fileName = `${framework.name.toLowerCase().replace(/[^a-z0-9]/g, '-')}.md`;
|
|
77
|
+
const filePath = join(docsPath, 'frameworks', fileName);
|
|
78
|
+
writeFileSync(filePath, content);
|
|
79
|
+
files.push({
|
|
80
|
+
path: `docs/frameworks/${fileName}`,
|
|
81
|
+
title: framework.name,
|
|
82
|
+
category: 'frameworks',
|
|
83
|
+
content,
|
|
84
|
+
source,
|
|
85
|
+
lastUpdated: new Date().toISOString(),
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Generate library documentation
|
|
90
|
+
const significantLibraries = stack.libraries.filter(lib => ['database', 'state-management', 'data-fetching', 'validation', 'authentication'].includes(lib.category));
|
|
91
|
+
for (const library of significantLibraries) {
|
|
92
|
+
if (options.verbose) {
|
|
93
|
+
console.log(` Fetching docs for ${library.name}...`);
|
|
94
|
+
}
|
|
95
|
+
let content = '';
|
|
96
|
+
let source = 'generated';
|
|
97
|
+
if (hasContext7 && library.context7Id) {
|
|
98
|
+
const docs = await fetchLibraryDocs(library.name, library.context7Id);
|
|
99
|
+
if (docs.overview) {
|
|
100
|
+
content = `# ${library.name}\n\n`;
|
|
101
|
+
content += `## Overview\n\n${docs.overview}\n\n`;
|
|
102
|
+
if (docs.bestPractices) {
|
|
103
|
+
content += `## Best Practices\n\n${docs.bestPractices}\n\n`;
|
|
104
|
+
}
|
|
105
|
+
source = 'context7';
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Supplement with web research
|
|
109
|
+
const research = await researchLibrary(library.name);
|
|
110
|
+
if (research.bestPractices.length > 0 || !content) {
|
|
111
|
+
if (!content) {
|
|
112
|
+
content = `# ${library.name}\n\n`;
|
|
113
|
+
content += `**Version:** ${library.version}\n`;
|
|
114
|
+
content += `**Category:** ${library.category}\n\n`;
|
|
115
|
+
}
|
|
116
|
+
if (research.bestPractices.length > 0) {
|
|
117
|
+
content += `## Best Practices\n\n`;
|
|
118
|
+
content += research.bestPractices.map(bp => `- ${bp}`).join('\n');
|
|
119
|
+
content += '\n\n';
|
|
120
|
+
source = source === 'context7' ? 'context7' : 'web-research';
|
|
121
|
+
}
|
|
122
|
+
if (research.gotchas.length > 0) {
|
|
123
|
+
content += `## Gotchas\n\n`;
|
|
124
|
+
content += research.gotchas.map(g => `- ${g}`).join('\n');
|
|
125
|
+
content += '\n\n';
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (content) {
|
|
129
|
+
const fileName = `${library.name.toLowerCase().replace(/[^a-z0-9]/g, '-')}.md`;
|
|
130
|
+
const filePath = join(docsPath, 'libraries', fileName);
|
|
131
|
+
writeFileSync(filePath, content);
|
|
132
|
+
files.push({
|
|
133
|
+
path: `docs/libraries/${fileName}`,
|
|
134
|
+
title: library.name,
|
|
135
|
+
category: 'libraries',
|
|
136
|
+
content,
|
|
137
|
+
source,
|
|
138
|
+
lastUpdated: new Date().toISOString(),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Generate dev tools documentation
|
|
143
|
+
for (const tool of stack.devTools) {
|
|
144
|
+
if (options.verbose) {
|
|
145
|
+
console.log(` Fetching docs for ${tool.name}...`);
|
|
146
|
+
}
|
|
147
|
+
const research = await researchLibrary(tool.name);
|
|
148
|
+
let content = `# ${tool.name}\n\n`;
|
|
149
|
+
content += `**Version:** ${tool.version}\n`;
|
|
150
|
+
content += `**Category:** ${tool.category}\n\n`;
|
|
151
|
+
if (research.bestPractices.length > 0) {
|
|
152
|
+
content += `## Best Practices\n\n`;
|
|
153
|
+
content += research.bestPractices.map(bp => `- ${bp}`).join('\n');
|
|
154
|
+
content += '\n\n';
|
|
155
|
+
}
|
|
156
|
+
if (research.gotchas.length > 0) {
|
|
157
|
+
content += `## Gotchas\n\n`;
|
|
158
|
+
content += research.gotchas.map(g => `- ${g}`).join('\n');
|
|
159
|
+
content += '\n\n';
|
|
160
|
+
}
|
|
161
|
+
const fileName = `${tool.name.toLowerCase().replace(/[^a-z0-9]/g, '-')}.md`;
|
|
162
|
+
const filePath = join(docsPath, 'tooling', fileName);
|
|
163
|
+
writeFileSync(filePath, content);
|
|
164
|
+
files.push({
|
|
165
|
+
path: `docs/tooling/${fileName}`,
|
|
166
|
+
title: tool.name,
|
|
167
|
+
category: 'tooling',
|
|
168
|
+
content,
|
|
169
|
+
source: research.bestPractices.length > 0 ? 'web-research' : 'generated',
|
|
170
|
+
lastUpdated: new Date().toISOString(),
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
// Generate index.md
|
|
174
|
+
const indexContent = generateDocsIndex(stack, files);
|
|
175
|
+
writeFileSync(join(docsPath, 'index.md'), indexContent);
|
|
176
|
+
files.push({
|
|
177
|
+
path: 'docs/index.md',
|
|
178
|
+
title: 'Documentation Index',
|
|
179
|
+
category: 'frameworks',
|
|
180
|
+
content: indexContent,
|
|
181
|
+
source: 'generated',
|
|
182
|
+
lastUpdated: new Date().toISOString(),
|
|
183
|
+
});
|
|
184
|
+
// Generate metadata file
|
|
185
|
+
const metadata = {
|
|
186
|
+
generatedAt: new Date().toISOString(),
|
|
187
|
+
projectPath,
|
|
188
|
+
stack,
|
|
189
|
+
files: files.map(f => ({ path: f.path, title: f.title, source: f.source })),
|
|
190
|
+
};
|
|
191
|
+
writeFileSync(join(docsPath, '.metadata.json'), JSON.stringify(metadata, null, 2));
|
|
192
|
+
// Add docs/ to .gitignore
|
|
193
|
+
addToGitignore(projectPath, 'docs/');
|
|
194
|
+
return files;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Generate documentation index file
|
|
198
|
+
*/
|
|
199
|
+
function generateDocsIndex(stack, files) {
|
|
200
|
+
let content = `# Project Documentation\n\n`;
|
|
201
|
+
content += `> Auto-generated documentation. Refresh with \`claudetools onboard --refresh\`\n\n`;
|
|
202
|
+
const frameworkFiles = files.filter(f => f.category === 'frameworks');
|
|
203
|
+
const libraryFiles = files.filter(f => f.category === 'libraries');
|
|
204
|
+
const toolingFiles = files.filter(f => f.category === 'tooling');
|
|
205
|
+
if (frameworkFiles.length > 0) {
|
|
206
|
+
content += `## Frameworks\n\n`;
|
|
207
|
+
for (const file of frameworkFiles) {
|
|
208
|
+
content += `- [${file.title}](${file.path.replace('docs/', '')})\n`;
|
|
209
|
+
}
|
|
210
|
+
content += '\n';
|
|
211
|
+
}
|
|
212
|
+
if (libraryFiles.length > 0) {
|
|
213
|
+
content += `## Libraries\n\n`;
|
|
214
|
+
for (const file of libraryFiles) {
|
|
215
|
+
content += `- [${file.title}](${file.path.replace('docs/', '')})\n`;
|
|
216
|
+
}
|
|
217
|
+
content += '\n';
|
|
218
|
+
}
|
|
219
|
+
if (toolingFiles.length > 0) {
|
|
220
|
+
content += `## Tooling\n\n`;
|
|
221
|
+
for (const file of toolingFiles) {
|
|
222
|
+
content += `- [${file.title}](${file.path.replace('docs/', '')})\n`;
|
|
223
|
+
}
|
|
224
|
+
content += '\n';
|
|
225
|
+
}
|
|
226
|
+
content += `---\n\n`;
|
|
227
|
+
content += `*Generated: ${new Date().toISOString()}*\n`;
|
|
228
|
+
return content;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Add entry to .gitignore if not present
|
|
232
|
+
*/
|
|
233
|
+
function addToGitignore(projectPath, entry) {
|
|
234
|
+
const gitignorePath = join(projectPath, '.gitignore');
|
|
235
|
+
try {
|
|
236
|
+
if (existsSync(gitignorePath)) {
|
|
237
|
+
const content = readFileSync(gitignorePath, 'utf-8');
|
|
238
|
+
if (!content.includes(entry)) {
|
|
239
|
+
appendFileSync(gitignorePath, `\n# ClaudeTools generated docs (regenerate with claudetools onboard)\n${entry}\n`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
writeFileSync(gitignorePath, `# ClaudeTools generated docs (regenerate with claudetools onboard)\n${entry}\n`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
// Non-fatal, just skip gitignore update
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=docs-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-generator.js","sourceRoot":"","sources":["../../src/onboard/docs-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface OnboardOptions {
|
|
2
|
+
refresh?: boolean;
|
|
3
|
+
verbose?: boolean;
|
|
4
|
+
skipDocs?: boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Run the complete onboarding workflow
|
|
8
|
+
*/
|
|
9
|
+
export declare function runOnboard(projectPath: string, options?: OnboardOptions): Promise<void>;
|
|
10
|
+
export type { StackInfo } from './types.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/onboard/index.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA4Df;AAyED,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Onboard Module - Main Orchestrator
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// Coordinates the documentation-driven onboarding workflow
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
import { existsSync, writeFileSync, mkdirSync, readFileSync } from 'fs';
|
|
8
|
+
import { join, basename } from 'path';
|
|
9
|
+
import { detectStack, getStackSummary } from './stack-detector.js';
|
|
10
|
+
import { generateDocs } from './docs-generator.js';
|
|
11
|
+
import { buildAgentsMd, writeAgentsMd } from './agents-md-builder.js';
|
|
12
|
+
import { isMcpCliAvailable } from './context7-fetcher.js';
|
|
13
|
+
/**
|
|
14
|
+
* Run the complete onboarding workflow
|
|
15
|
+
*/
|
|
16
|
+
export async function runOnboard(projectPath, options = {}) {
|
|
17
|
+
const projectName = basename(projectPath);
|
|
18
|
+
console.log('\n' + chalk.bold.cyan(' ClaudeTools Onboarding') + '\n');
|
|
19
|
+
console.log(' ' + chalk.dim(`Project: ${projectName}`) + '\n');
|
|
20
|
+
// Phase 1: Stack Detection
|
|
21
|
+
const stackSpinner = ora('Detecting project stack...').start();
|
|
22
|
+
const stack = detectStack(projectPath);
|
|
23
|
+
stackSpinner.succeed(`Detected: ${getStackSummary(stack)}`);
|
|
24
|
+
if (options.verbose) {
|
|
25
|
+
printStackDetails(stack);
|
|
26
|
+
}
|
|
27
|
+
// Phase 2: Documentation Generation
|
|
28
|
+
if (!options.skipDocs) {
|
|
29
|
+
const hasContext7 = isMcpCliAvailable();
|
|
30
|
+
if (hasContext7) {
|
|
31
|
+
console.log(chalk.dim(' Context7 MCP available - fetching official docs'));
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.log(chalk.dim(' Context7 not available - using built-in knowledge'));
|
|
35
|
+
}
|
|
36
|
+
const docsSpinner = ora('Generating documentation...').start();
|
|
37
|
+
try {
|
|
38
|
+
const docFiles = await generateDocs(projectPath, stack, { verbose: options.verbose });
|
|
39
|
+
docsSpinner.succeed(`Generated ${docFiles.length} documentation files`);
|
|
40
|
+
// Phase 3: Build AGENTS.md
|
|
41
|
+
const agentsSpinner = ora('Building AGENTS.md...').start();
|
|
42
|
+
const agentsContent = buildAgentsMd(projectPath, stack, docFiles);
|
|
43
|
+
writeAgentsMd(projectPath, agentsContent);
|
|
44
|
+
agentsSpinner.succeed('Created AGENTS.md');
|
|
45
|
+
// Phase 4: Create minimal CLAUDE.md pointer
|
|
46
|
+
createClaudeMdPointer(projectPath, projectName);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
docsSpinner.fail('Documentation generation failed');
|
|
50
|
+
console.error(chalk.red(` ${err instanceof Error ? err.message : String(err)}`));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
// Skip docs, just create AGENTS.md from stack
|
|
55
|
+
const agentsSpinner = ora('Building AGENTS.md...').start();
|
|
56
|
+
const agentsContent = buildAgentsMd(projectPath, stack, []);
|
|
57
|
+
writeAgentsMd(projectPath, agentsContent);
|
|
58
|
+
agentsSpinner.succeed('Created AGENTS.md');
|
|
59
|
+
createClaudeMdPointer(projectPath, projectName);
|
|
60
|
+
}
|
|
61
|
+
// Done
|
|
62
|
+
console.log('\n' + chalk.green(' Onboarding complete!'));
|
|
63
|
+
console.log(chalk.dim('\n Generated files:'));
|
|
64
|
+
console.log(chalk.dim(' - AGENTS.md (comprehensive agent context)'));
|
|
65
|
+
console.log(chalk.dim(' - docs/ (stack documentation, gitignored)'));
|
|
66
|
+
console.log(chalk.dim(' - .claude/CLAUDE.md (minimal pointer)'));
|
|
67
|
+
console.log('\n');
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Create minimal CLAUDE.md that points to AGENTS.md
|
|
71
|
+
*/
|
|
72
|
+
function createClaudeMdPointer(projectPath, projectName) {
|
|
73
|
+
const claudeDir = join(projectPath, '.claude');
|
|
74
|
+
const claudeMdPath = join(claudeDir, 'CLAUDE.md');
|
|
75
|
+
// Create .claude directory if needed
|
|
76
|
+
if (!existsSync(claudeDir)) {
|
|
77
|
+
mkdirSync(claudeDir, { recursive: true });
|
|
78
|
+
}
|
|
79
|
+
// Check if CLAUDE.md already exists with custom content
|
|
80
|
+
if (existsSync(claudeMdPath)) {
|
|
81
|
+
const existing = readFileSync(claudeMdPath, 'utf-8');
|
|
82
|
+
// If it has substantial custom content, don't overwrite
|
|
83
|
+
if (existing.length > 500 && !existing.includes('See [AGENTS.md]')) {
|
|
84
|
+
console.log(chalk.dim(' Existing CLAUDE.md preserved (has custom content)'));
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const content = `# ${projectName}
|
|
89
|
+
|
|
90
|
+
See [AGENTS.md](../AGENTS.md) for comprehensive project context.
|
|
91
|
+
|
|
92
|
+
## Quick Links
|
|
93
|
+
|
|
94
|
+
- Project docs: \`docs/\`
|
|
95
|
+
- Agent context: \`AGENTS.md\`
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
*Generated by ClaudeTools. Refresh: \`claudetools onboard --refresh\`*
|
|
100
|
+
`;
|
|
101
|
+
writeFileSync(claudeMdPath, content);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Print detailed stack information
|
|
105
|
+
*/
|
|
106
|
+
function printStackDetails(stack) {
|
|
107
|
+
console.log(chalk.dim('\n Stack Details:'));
|
|
108
|
+
if (stack.frameworks.length > 0) {
|
|
109
|
+
console.log(chalk.dim(' Frameworks:'));
|
|
110
|
+
for (const fw of stack.frameworks) {
|
|
111
|
+
console.log(chalk.dim(` - ${fw.name} ${fw.version} (${fw.category})`));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (stack.libraries.length > 0) {
|
|
115
|
+
console.log(chalk.dim(' Libraries:'));
|
|
116
|
+
for (const lib of stack.libraries) {
|
|
117
|
+
console.log(chalk.dim(` - ${lib.name} ${lib.version} (${lib.category})`));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (stack.devTools.length > 0) {
|
|
121
|
+
console.log(chalk.dim(' Dev Tools:'));
|
|
122
|
+
for (const tool of stack.devTools) {
|
|
123
|
+
console.log(chalk.dim(` - ${tool.name} (${tool.category})`));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
console.log('');
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/onboard/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-detector.d.ts","sourceRoot":"","sources":["../../src/onboard/stack-detector.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAA2C,MAAM,YAAY,CAAC;AAoHrF,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAgD1D;AA2KD,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAYxD"}
|