mirror of
https://github.com/HKUDS/OpenSpace.git
synced 2026-10-04 02:34:24 +00:00
254 lines
No EOL
7 KiB
Markdown
254 lines
No EOL
7 KiB
Markdown
---
|
|
name: create-skill-from-source-code
|
|
description: Analyze existing source code to identify key patterns and generate comprehensive educational skill documentation with proper YAML frontmatter, architectural analysis, code templates, and usage examples.
|
|
---
|
|
|
|
# Create Skill from Source Code
|
|
|
|
This skill guides you through the process of analyzing an existing source code implementation and transforming it into comprehensive educational documentation in the form of a skill file.
|
|
|
|
## Overview
|
|
|
|
When you have a reference implementation and need to create teaching materials or reusable documentation from it, follow this systematic workflow to extract patterns, analyze architecture, and generate well-structured educational content.
|
|
|
|
## Prerequisites
|
|
|
|
- Access to the source code file(s) you want to document
|
|
- Understanding of the target audience for the skill
|
|
- Knowledge of the programming language/framework used
|
|
|
|
## Workflow Steps
|
|
|
|
### 1. Read and Parse the Source Code
|
|
|
|
First, read the complete source file to understand its full scope:
|
|
|
|
```bash
|
|
# Read the source file
|
|
cat /path/to/source/file.ext
|
|
```
|
|
|
|
Or use file reading tools to access the content programmatically.
|
|
|
|
### 2. Identify Key Architectural Patterns
|
|
|
|
Analyze the code to identify:
|
|
|
|
- **Core architectural patterns**: What design patterns are used? (e.g., Observer, Factory, MVC)
|
|
- **Key implementation techniques**: How are specific challenges solved?
|
|
- **Important data structures**: What structures enable the functionality?
|
|
- **Critical algorithms**: What are the main algorithmic approaches?
|
|
- **Integration points**: How does the code interact with external systems?
|
|
|
|
Take notes on 3-5 major patterns that define the implementation.
|
|
|
|
### 3. Create the Skill Directory Structure
|
|
|
|
```bash
|
|
# Create skill directory
|
|
mkdir -p skills/skill-name
|
|
|
|
# If you need auxiliary files (examples, scripts, etc.)
|
|
mkdir -p skills/skill-name/examples
|
|
mkdir -p skills/skill-name/templates
|
|
```
|
|
|
|
### 4. Generate Comprehensive SKILL.md
|
|
|
|
Create a SKILL.md file with the following structure:
|
|
|
|
#### Required YAML Frontmatter
|
|
|
|
```yaml
|
|
---
|
|
name: descriptive-skill-name
|
|
description: Brief one-sentence description of what the skill teaches
|
|
---
|
|
```
|
|
|
|
**Frontmatter rules:**
|
|
- Must be enclosed in `---` fences
|
|
- `name`: lowercase, use hyphens for spaces
|
|
- `description`: concise but informative (1-2 sentences max)
|
|
|
|
#### Document Body Structure
|
|
|
|
Organize the content into clear sections:
|
|
|
|
```markdown
|
|
# [Skill Title]
|
|
|
|
## Overview
|
|
Brief introduction to what pattern/technique is being taught.
|
|
|
|
## Key Patterns Identified
|
|
|
|
### Pattern 1: [Name]
|
|
**Purpose**: What problem does it solve?
|
|
**Implementation**: How is it implemented in the reference code?
|
|
**Key Code Elements**:
|
|
- Relevant classes/functions
|
|
- Important variables/structures
|
|
|
|
### Pattern 2: [Name]
|
|
[Same structure as Pattern 1]
|
|
|
|
[Continue for 3-5 main patterns]
|
|
|
|
## Complete Code Template
|
|
|
|
Provide a minimal but complete implementation:
|
|
|
|
\`\`\`[language]
|
|
// Simplified, well-commented version of the key code
|
|
// Include only essential elements
|
|
// Add explanatory comments
|
|
\`\`\`
|
|
|
|
## Usage Examples
|
|
|
|
### Example 1: Basic Usage
|
|
\`\`\`[language]
|
|
// Practical example showing how to use the pattern
|
|
\`\`\`
|
|
|
|
### Example 2: Advanced Usage
|
|
\`\`\`[language]
|
|
// More complex scenario
|
|
\`\`\`
|
|
|
|
## Best Practices
|
|
|
|
- List key recommendations
|
|
- Common pitfalls to avoid
|
|
- Performance considerations
|
|
- Testing strategies
|
|
|
|
## When to Use This Pattern
|
|
|
|
Explain scenarios where this pattern is appropriate and where it might not be the best choice.
|
|
|
|
## Related Patterns
|
|
|
|
Reference related techniques or alternative approaches.
|
|
|
|
## References
|
|
|
|
- Link to original source (if applicable)
|
|
- Related documentation
|
|
- Further reading
|
|
```
|
|
|
|
### 5. Verify File Creation and Frontmatter
|
|
|
|
After creating the skill file, verify:
|
|
|
|
```bash
|
|
# Check file exists
|
|
ls -la skills/skill-name/SKILL.md
|
|
|
|
# Verify frontmatter format
|
|
head -n 5 skills/skill-name/SKILL.md
|
|
|
|
# Should show:
|
|
# ---
|
|
# name: skill-name
|
|
# description: Description here
|
|
# ---
|
|
```
|
|
|
|
Ensure:
|
|
- File starts with `---` on line 1
|
|
- YAML contains at least `name` and `description` fields
|
|
- Frontmatter closes with `---`
|
|
- Content follows immediately after
|
|
|
|
### 6. Add Auxiliary Files (Optional)
|
|
|
|
If the pattern benefits from additional resources:
|
|
|
|
**Example script** (`examples/demo.sh`):
|
|
```bash
|
|
#!/bin/bash
|
|
# Demonstration script showing the pattern in action
|
|
```
|
|
|
|
**Template file** (`templates/starter.template`):
|
|
```
|
|
# Ready-to-use template that users can copy
|
|
```
|
|
|
|
**Configuration example** (`examples/config.example`):
|
|
```
|
|
# Sample configuration demonstrating best practices
|
|
```
|
|
|
|
## Tips for Creating Effective Skills
|
|
|
|
### Make It Generalizable
|
|
|
|
- **Abstract away** specific variable names, file paths, or domain-specific details
|
|
- **Focus on the pattern**, not the specific implementation
|
|
- **Use placeholders** like `[your-project]`, `[input-file]` for context-specific values
|
|
|
|
### Keep It Actionable
|
|
|
|
- Use imperative language: "Create...", "Implement...", "Configure..."
|
|
- Provide concrete code examples
|
|
- Include expected outputs or results
|
|
- Add verification steps
|
|
|
|
### Structure for Clarity
|
|
|
|
- Use hierarchical headings (##, ###, ####)
|
|
- Break complex steps into numbered sub-steps
|
|
- Use code blocks with appropriate syntax highlighting
|
|
- Add tables or lists for comparing options
|
|
|
|
### Balance Detail and Brevity
|
|
|
|
- Be comprehensive but concise
|
|
- Focus on the "what" and "why", not just the "how"
|
|
- Link to external resources for deep dives
|
|
- Include only code essential to understanding the pattern
|
|
|
|
## Example: Transforming a Virtual List Component
|
|
|
|
Given a `VirtualList.ts` source file implementing virtual scrolling:
|
|
|
|
1. **Read**: Load the complete TypeScript source
|
|
2. **Identify patterns**:
|
|
- Chunk-based rendering for performance
|
|
- Scroll event listeners for viewport tracking
|
|
- DOM manipulation for dynamic updates
|
|
- State management for visible items
|
|
3. **Create structure**: `skills/virtual-scrolling-pattern/`
|
|
4. **Generate SKILL.md**:
|
|
- Frontmatter with name: `virtual-scrolling-pattern`
|
|
- Sections explaining each of the 4 patterns
|
|
- Simplified code template showing core logic
|
|
- Examples of basic and advanced usage
|
|
5. **Verify**: Check file format and frontmatter validity
|
|
|
|
## Common Pitfalls to Avoid
|
|
|
|
- **Too specific**: Don't tie the skill to one particular codebase
|
|
- **Missing frontmatter**: Always include valid YAML frontmatter
|
|
- **No examples**: Abstract patterns need concrete examples
|
|
- **Incomplete templates**: Code templates should be runnable or near-runnable
|
|
- **Poor organization**: Use clear sections with descriptive headings
|
|
|
|
## Validation Checklist
|
|
|
|
Before finalizing the skill:
|
|
|
|
- [ ] YAML frontmatter is present and valid
|
|
- [ ] Name is lowercase with hyphens
|
|
- [ ] Description is concise (1-2 sentences)
|
|
- [ ] Key patterns are clearly identified (3-5 patterns)
|
|
- [ ] Code examples are provided and well-commented
|
|
- [ ] Usage examples demonstrate practical application
|
|
- [ ] Content is generalized beyond the specific source
|
|
- [ ] File structure follows conventions
|
|
- [ ] No task-specific details remain
|
|
- [ ] Instructions are actionable and clear |