Initial commit
This commit is contained in:
270
commands/pp-fetch-docs.md
Normal file
270
commands/pp-fetch-docs.md
Normal file
@@ -0,0 +1,270 @@
|
||||
# Fetch API Documentation
|
||||
|
||||
Fetch and cache API documentation in AI-readable markdown format.
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS
|
||||
|
||||
Library name, URL, or package identifier (e.g., "openai", "stripe", "https://docs.stripe.com")
|
||||
|
||||
## Purpose
|
||||
|
||||
Download and cache API documentation locally for quick reference across all projects. Docs are stored globally in the plugin directory and available in all chat sessions.
|
||||
|
||||
## Storage Location
|
||||
|
||||
**Global (available across all projects):**
|
||||
```
|
||||
~/.claude/plugins/marketplaces/unclecode-tools/plugins/unclecode-cc-toolkit/api-docs/
|
||||
```
|
||||
|
||||
## Execution Instructions
|
||||
|
||||
### Step 1: Parse Input
|
||||
|
||||
Extract from query:
|
||||
- **Library name** (e.g., "openai", "stripe", "nextjs")
|
||||
- **URL** (if provided, e.g., "https://docs.stripe.com")
|
||||
- **Version** (optional, e.g., "openai@4.0")
|
||||
|
||||
Normalize library name:
|
||||
- Remove special characters
|
||||
- Convert to lowercase
|
||||
- Remove version suffix for directory name
|
||||
|
||||
### Step 2: Check if Docs Exist
|
||||
|
||||
Check for existing documentation:
|
||||
```bash
|
||||
ls ~/.claude/plugins/marketplaces/unclecode-tools/plugins/unclecode-cc-toolkit/api-docs/{library}/
|
||||
```
|
||||
|
||||
**If directory exists:**
|
||||
- List what's there: `ls -lah api-docs/{library}/`
|
||||
- Show last modified date
|
||||
- Ask user:
|
||||
```
|
||||
## Documentation Exists
|
||||
|
||||
**Library**: {library}
|
||||
**Location**: api-docs/{library}/
|
||||
**Last Updated**: {date from stat}
|
||||
**Files**: {file count} files, {total size}
|
||||
|
||||
Documentation already cached. Would you like to:
|
||||
1. Use existing docs (skip)
|
||||
2. Update/re-fetch docs
|
||||
3. View what's cached
|
||||
```
|
||||
|
||||
Wait for user response.
|
||||
|
||||
**If doesn't exist:**
|
||||
- Proceed to Step 3
|
||||
|
||||
### Step 3: Fetch Documentation
|
||||
|
||||
Try these methods in order:
|
||||
|
||||
#### Method 1: Context7 API
|
||||
|
||||
**If library name provided (no URL):**
|
||||
|
||||
```bash
|
||||
# Search for library
|
||||
curl -X GET "https://context7.com/api/v1/search?query={library}" \
|
||||
-H "Authorization: Bearer CONTEXT7_API_KEY"
|
||||
|
||||
# Get library ID from response
|
||||
# Then fetch docs
|
||||
curl -X GET "https://context7.com/api/v1/{library_id}/docs?type=txt&tokens=5000" \
|
||||
-H "Authorization: Bearer CONTEXT7_API_KEY"
|
||||
```
|
||||
|
||||
**Note**: Free tier available (no API key needed but rate-limited)
|
||||
|
||||
Save response to: `api-docs/{library}/context7-docs.md`
|
||||
|
||||
If successful, skip to Step 4.
|
||||
|
||||
#### Method 2: llms.txt
|
||||
|
||||
**If URL provided OR Context7 doesn't have it:**
|
||||
|
||||
1. Extract domain from URL
|
||||
2. Try to fetch `{domain}/llms.txt`:
|
||||
|
||||
```bash
|
||||
curl -s https://{domain}/llms.txt
|
||||
```
|
||||
|
||||
3. If llms.txt exists:
|
||||
- Parse the file (contains list of markdown doc URLs)
|
||||
- Fetch each markdown URL listed
|
||||
- Save each to: `api-docs/{library}/{filename}.md`
|
||||
|
||||
If successful, skip to Step 4.
|
||||
|
||||
#### Method 3: Web Scraping
|
||||
|
||||
**If neither Context7 nor llms.txt available:**
|
||||
|
||||
1. Fetch the docs page HTML
|
||||
2. Convert HTML to markdown using a clean method:
|
||||
- Extract main content (remove nav, footer, ads)
|
||||
- Convert to markdown
|
||||
- Clean up formatting
|
||||
|
||||
3. Save to: `api-docs/{library}/scraped-docs.md`
|
||||
|
||||
Add note at top of file:
|
||||
```markdown
|
||||
<!-- Scraped from {URL} on {date} -->
|
||||
<!-- May need manual review for accuracy -->
|
||||
```
|
||||
|
||||
### Step 4: Create Metadata File
|
||||
|
||||
Create `api-docs/{library}/metadata.json`:
|
||||
```json
|
||||
{
|
||||
"library": "library-name",
|
||||
"source": "context7|llms.txt|web-scraped",
|
||||
"sourceUrl": "original-url",
|
||||
"fetchedAt": "2025-01-23T10:30:00Z",
|
||||
"fileCount": 3,
|
||||
"totalSize": "250KB",
|
||||
"version": "4.0.0" (if specified)
|
||||
}
|
||||
```
|
||||
|
||||
### Step 5: Create Index
|
||||
|
||||
If multiple files were fetched, create `api-docs/{library}/INDEX.md`:
|
||||
```markdown
|
||||
# {Library} API Documentation
|
||||
|
||||
**Fetched from**: {source}
|
||||
**Date**: {date}
|
||||
**Version**: {version if known}
|
||||
|
||||
## Files
|
||||
|
||||
- [context7-docs.md](./context7-docs.md) - Main documentation
|
||||
- [api-reference.md](./api-reference.md) - API reference
|
||||
- [guides.md](./guides.md) - Usage guides
|
||||
|
||||
## Quick Links
|
||||
|
||||
{Parse and list major sections/topics}
|
||||
```
|
||||
|
||||
### Step 6: Confirm Success
|
||||
|
||||
Show summary:
|
||||
```
|
||||
## Documentation Fetched Successfully
|
||||
|
||||
**Library**: {library}
|
||||
**Source**: {Context7 | llms.txt | Web}
|
||||
**Location**: ~/.claude/plugins/.../api-docs/{library}/
|
||||
**Files Saved**: {count} files ({total size})
|
||||
|
||||
### What's Available:
|
||||
|
||||
{List files with brief description}
|
||||
|
||||
### Usage:
|
||||
|
||||
These docs are now available globally across all projects.
|
||||
To reference in your code:
|
||||
- Ask Claude to "check {library} docs"
|
||||
- Use /pp-triage for debugging with library context
|
||||
- Docs automatically available in all future sessions
|
||||
|
||||
### Next Steps:
|
||||
|
||||
- View docs: cat api-docs/{library}/INDEX.md
|
||||
- Update later: /pp-fetch-docs {library} (will prompt to update)
|
||||
```
|
||||
|
||||
## Query Examples
|
||||
|
||||
```bash
|
||||
# Fetch by library name (tries Context7 first)
|
||||
/pp-fetch-docs openai
|
||||
/pp-fetch-docs stripe
|
||||
/pp-fetch-docs nextjs
|
||||
|
||||
# Fetch by URL (tries llms.txt, then scrapes)
|
||||
/pp-fetch-docs https://docs.stripe.com
|
||||
/pp-fetch-docs https://platform.openai.com/docs
|
||||
|
||||
# Fetch specific version
|
||||
/pp-fetch-docs openai@4.0
|
||||
/pp-fetch-docs react@18
|
||||
|
||||
# Update existing docs
|
||||
/pp-fetch-docs openai
|
||||
> "Documentation exists. Update? (yes/no)"
|
||||
> yes
|
||||
> (re-fetches and overwrites)
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
|
||||
**If all methods fail:**
|
||||
```
|
||||
## Unable to Fetch Documentation
|
||||
|
||||
**Library**: {library}
|
||||
**Attempted**:
|
||||
- ❌ Context7: Library not found
|
||||
- ❌ llms.txt: Not available at {domain}
|
||||
- ❌ Web scraping: {error reason}
|
||||
|
||||
### Suggestions:
|
||||
|
||||
1. Check library name spelling
|
||||
2. Provide full URL to documentation
|
||||
3. Try alternative library name (e.g., "@openai/sdk" vs "openai")
|
||||
4. Manually download docs and save to:
|
||||
~/.claude/plugins/.../api-docs/{library}/docs.md
|
||||
|
||||
Would you like me to:
|
||||
- Search for alternative library names?
|
||||
- Try a different URL?
|
||||
- Help you manually organize docs?
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Docs are **global** - stored in plugin directory, not project-specific
|
||||
- Available across ALL projects and chat sessions
|
||||
- Context7 preferred (most up-to-date, version-specific)
|
||||
- llms.txt is official standard (website-published)
|
||||
- Web scraping is last resort (may need cleanup)
|
||||
- Update anytime by re-running command
|
||||
- Large docs may be split into multiple files for better organization
|
||||
|
||||
## API Keys (Optional)
|
||||
|
||||
For Context7 higher rate limits:
|
||||
- Get free API key: https://context7.com/dashboard
|
||||
- Set environment variable: `export CONTEXT7_API_KEY="your-key"`
|
||||
- Plugin will auto-detect and use it
|
||||
|
||||
## Best Practices
|
||||
|
||||
**When to fetch:**
|
||||
- Starting a new project with specific APIs
|
||||
- Learning a new library
|
||||
- Need up-to-date reference (re-fetch to update)
|
||||
- Debugging issues (fresh docs help)
|
||||
|
||||
**Storage management:**
|
||||
- Each library typically: 100-500KB
|
||||
- Plugin directory has no size limit
|
||||
- Delete old docs: `rm -rf api-docs/{library}/`
|
||||
- View all cached: `ls api-docs/`
|
||||
Reference in New Issue
Block a user