@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.
Files changed (45) hide show
  1. package/dist/cli.d.ts +3 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +106 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/onboard/agents-md-builder.d.ts +14 -0
  6. package/dist/onboard/agents-md-builder.d.ts.map +1 -0
  7. package/dist/onboard/agents-md-builder.js +378 -0
  8. package/dist/onboard/agents-md-builder.js.map +1 -0
  9. package/dist/onboard/context7-fetcher.d.ts +27 -0
  10. package/dist/onboard/context7-fetcher.d.ts.map +1 -0
  11. package/dist/onboard/context7-fetcher.js +116 -0
  12. package/dist/onboard/context7-fetcher.js.map +1 -0
  13. package/dist/onboard/docs-generator.d.ts +8 -0
  14. package/dist/onboard/docs-generator.d.ts.map +1 -0
  15. package/dist/onboard/docs-generator.js +250 -0
  16. package/dist/onboard/docs-generator.js.map +1 -0
  17. package/dist/onboard/index.d.ts +11 -0
  18. package/dist/onboard/index.d.ts.map +1 -0
  19. package/dist/onboard/index.js +128 -0
  20. package/dist/onboard/index.js.map +1 -0
  21. package/dist/onboard/stack-detector.d.ts +4 -0
  22. package/dist/onboard/stack-detector.d.ts.map +1 -0
  23. package/dist/onboard/stack-detector.js +324 -0
  24. package/dist/onboard/stack-detector.js.map +1 -0
  25. package/dist/onboard/types.d.ts +80 -0
  26. package/dist/onboard/types.d.ts.map +1 -0
  27. package/dist/onboard/types.js +5 -0
  28. package/dist/onboard/types.js.map +1 -0
  29. package/dist/onboard/web-research.d.ts +11 -0
  30. package/dist/onboard/web-research.d.ts.map +1 -0
  31. package/dist/onboard/web-research.js +209 -0
  32. package/dist/onboard/web-research.js.map +1 -0
  33. package/dist/setup.d.ts +3 -0
  34. package/dist/setup.d.ts.map +1 -0
  35. package/dist/setup.js +190 -0
  36. package/dist/setup.js.map +1 -0
  37. package/dist/templates/agents-md.d.ts +10 -0
  38. package/dist/templates/agents-md.d.ts.map +1 -0
  39. package/dist/templates/agents-md.js +125 -0
  40. package/dist/templates/agents-md.js.map +1 -0
  41. package/dist/templates/claude-md.d.ts +12 -0
  42. package/dist/templates/claude-md.d.ts.map +1 -0
  43. package/dist/templates/claude-md.js +62 -0
  44. package/dist/templates/claude-md.js.map +1 -0
  45. package/package.json +54 -0
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -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
@@ -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"}