refactor: Reorganize repository structure for optimal learning path
Reorder folders based on learning dependencies, complexity, and frequency of use: - 01-slash-commands (unchanged) - Quick wins for beginners - 02-memory (was 03) - Essential foundation - 03-skills (was 05) - Auto-invoked capabilities - 04-subagents (was 02) - Task delegation - 05-mcp (was 04) - External integration - 06-hooks (was 07) - Event automation - 07-plugins (was 06) - Bundled solutions - 08-checkpoints (unchanged) - Safe experimentation - 09-advanced-features (unchanged) - Power user tools Documentation improvements: - Add LEARNING-ROADMAP.md with detailed milestones and exercises - Simplify README.md for better scannability - Consolidate Quick Start and Getting Started sections - Combine Feature Comparison and Use Case Matrix tables - Reorder README sections: Learning Path → Quick Reference → Getting Started - Update all cross-references across module READMEs 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
82
03-skills/doc-generator/SKILL.md
Normal file
82
03-skills/doc-generator/SKILL.md
Normal file
@@ -0,0 +1,82 @@
|
||||
---
|
||||
name: API Documentation Generator
|
||||
description: Generate comprehensive, accurate API documentation from source code
|
||||
version: "1.0.0"
|
||||
tags:
|
||||
- documentation
|
||||
- api
|
||||
- automation
|
||||
when_to_use: When creating or updating API documentation
|
||||
---
|
||||
|
||||
# API Documentation Generator Skill
|
||||
|
||||
## Generates
|
||||
|
||||
- OpenAPI/Swagger specifications
|
||||
- API endpoint documentation
|
||||
- SDK usage examples
|
||||
- Integration guides
|
||||
- Error code references
|
||||
- Authentication guides
|
||||
|
||||
## Documentation Structure
|
||||
|
||||
### For Each Endpoint
|
||||
|
||||
```markdown
|
||||
## GET /api/v1/users/:id
|
||||
|
||||
### Description
|
||||
Brief explanation of what this endpoint does
|
||||
|
||||
### Parameters
|
||||
|
||||
| Name | Type | Required | Description |
|
||||
|------|------|----------|-------------|
|
||||
| id | string | Yes | User ID |
|
||||
|
||||
### Response
|
||||
|
||||
**200 Success**
|
||||
```json
|
||||
{
|
||||
"id": "usr_123",
|
||||
"name": "John Doe",
|
||||
"email": "john@example.com",
|
||||
"created_at": "2025-01-15T10:30:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
**404 Not Found**
|
||||
```json
|
||||
{
|
||||
"error": "USER_NOT_FOUND",
|
||||
"message": "User does not exist"
|
||||
}
|
||||
```
|
||||
|
||||
### Examples
|
||||
|
||||
**cURL**
|
||||
```bash
|
||||
curl -X GET "https://api.example.com/api/v1/users/usr_123" \
|
||||
-H "Authorization: Bearer YOUR_TOKEN"
|
||||
```
|
||||
|
||||
**JavaScript**
|
||||
```javascript
|
||||
const user = await fetch('/api/v1/users/usr_123', {
|
||||
headers: { 'Authorization': 'Bearer token' }
|
||||
}).then(r => r.json());
|
||||
```
|
||||
|
||||
**Python**
|
||||
```python
|
||||
response = requests.get(
|
||||
'https://api.example.com/api/v1/users/usr_123',
|
||||
headers={'Authorization': 'Bearer token'}
|
||||
)
|
||||
user = response.json()
|
||||
```
|
||||
```
|
||||
53
03-skills/doc-generator/generate-docs.py
Normal file
53
03-skills/doc-generator/generate-docs.py
Normal file
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env python3
|
||||
import ast
|
||||
import json
|
||||
from typing import Dict, List
|
||||
|
||||
class APIDocExtractor(ast.NodeVisitor):
|
||||
"""Extract API documentation from Python source code."""
|
||||
|
||||
def __init__(self):
|
||||
self.endpoints = []
|
||||
|
||||
def visit_FunctionDef(self, node):
|
||||
"""Extract function documentation."""
|
||||
if node.name.startswith('get_') or node.name.startswith('post_'):
|
||||
doc = ast.get_docstring(node)
|
||||
endpoint = {
|
||||
'name': node.name,
|
||||
'docstring': doc,
|
||||
'params': [arg.arg for arg in node.args.args],
|
||||
'returns': self._extract_return_type(node)
|
||||
}
|
||||
self.endpoints.append(endpoint)
|
||||
self.generic_visit(node)
|
||||
|
||||
def _extract_return_type(self, node):
|
||||
"""Extract return type from function annotation."""
|
||||
if node.returns:
|
||||
return ast.unparse(node.returns)
|
||||
return "Any"
|
||||
|
||||
def generate_markdown_docs(endpoints: List[Dict]) -> str:
|
||||
"""Generate markdown documentation from endpoints."""
|
||||
docs = "# API Documentation\n\n"
|
||||
|
||||
for endpoint in endpoints:
|
||||
docs += f"## {endpoint['name']}\n\n"
|
||||
docs += f"{endpoint['docstring']}\n\n"
|
||||
docs += f"**Parameters**: {', '.join(endpoint['params'])}\n\n"
|
||||
docs += f"**Returns**: {endpoint['returns']}\n\n"
|
||||
docs += "---\n\n"
|
||||
|
||||
return docs
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
with open(sys.argv[1], 'r') as f:
|
||||
tree = ast.parse(f.read())
|
||||
|
||||
extractor = APIDocExtractor()
|
||||
extractor.visit(tree)
|
||||
|
||||
markdown = generate_markdown_docs(extractor.endpoints)
|
||||
print(markdown)
|
||||
Reference in New Issue
Block a user