Initial commit
This commit is contained in:
173
skills/rails-version-detector/SKILL.md
Normal file
173
skills/rails-version-detector/SKILL.md
Normal file
@@ -0,0 +1,173 @@
|
||||
# Rails Version Detector
|
||||
|
||||
---
|
||||
name: rails-version-detector
|
||||
description: Detects Rails version from project files (Gemfile.lock, Gemfile, or .ruby-version)
|
||||
version: 1.1.0
|
||||
author: Rails Workflow Team
|
||||
tags: [rails, version, detection, helper]
|
||||
priority: 2
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
Automatically detects the Rails version in the current project by inspecting:
|
||||
1. `Gemfile.lock` (preferred - exact version)
|
||||
2. `Gemfile` (fallback - version constraint)
|
||||
3. `.ruby-version` or `.tool-versions` (Ruby version hint)
|
||||
|
||||
Returns version information for use by other skills and agents.
|
||||
|
||||
## Usage
|
||||
|
||||
This skill is **auto-invoked** by other Rails skills when they need version information.
|
||||
|
||||
**Manual invocation** (rarely needed):
|
||||
```
|
||||
@rails-version-detector
|
||||
```
|
||||
|
||||
## Detection Strategy
|
||||
|
||||
### Priority 1: Gemfile.lock (Exact Version)
|
||||
```ruby
|
||||
# Searches for:
|
||||
rails (7.1.3)
|
||||
actioncable (= 7.1.3)
|
||||
actionmailbox (= 7.1.3)
|
||||
...
|
||||
```
|
||||
|
||||
**Extraction logic**:
|
||||
- Pattern: `rails \((\d+\.\d+\.\d+)\)`
|
||||
- Returns: Exact version (e.g., "7.1.3")
|
||||
|
||||
### Priority 2: Gemfile (Version Constraint)
|
||||
```ruby
|
||||
# Searches for:
|
||||
gem "rails", "~> 7.1.0"
|
||||
gem 'rails', '>= 7.0.0', '< 8.0'
|
||||
```
|
||||
|
||||
**Extraction logic**:
|
||||
- Pattern: `gem ['"]rails['"],\s*['"]([^'"]+)['"]`
|
||||
- Returns: Version constraint (e.g., "~> 7.1.0")
|
||||
- Interprets: "~> 7.1.0" → "7.1.x"
|
||||
|
||||
### Priority 3: Ruby Version (Heuristic)
|
||||
```ruby
|
||||
# .ruby-version or .tool-versions
|
||||
ruby 3.2.2
|
||||
```
|
||||
|
||||
**Mapping**:
|
||||
- Ruby 3.3.x → Rails 7.1+ or 8.0+
|
||||
- Ruby 3.2.x → Rails 7.0+
|
||||
- Ruby 3.1.x → Rails 7.0+
|
||||
- Ruby 3.0.x → Rails 6.1+ or 7.0
|
||||
- Ruby 2.7.x → Rails 6.0 or 6.1
|
||||
|
||||
**Returns**: Estimated range (e.g., "7.0 or 7.1")
|
||||
|
||||
## Output Format
|
||||
|
||||
### Success Response
|
||||
```json
|
||||
{
|
||||
"version": "7.1.3",
|
||||
"source": "Gemfile.lock",
|
||||
"confidence": "exact",
|
||||
"major": 7,
|
||||
"minor": 1,
|
||||
"patch": 3
|
||||
}
|
||||
```
|
||||
|
||||
### Constraint Response
|
||||
```json
|
||||
{
|
||||
"version": "~> 7.1.0",
|
||||
"source": "Gemfile",
|
||||
"confidence": "constraint",
|
||||
"interpreted_as": "7.1.x",
|
||||
"major": 7,
|
||||
"minor": 1
|
||||
}
|
||||
```
|
||||
|
||||
### Heuristic Response
|
||||
```json
|
||||
{
|
||||
"version": "7.0-7.1",
|
||||
"source": ".ruby-version",
|
||||
"confidence": "heuristic",
|
||||
"ruby_version": "3.2.2",
|
||||
"possible_rails": ["7.0", "7.1"]
|
||||
}
|
||||
```
|
||||
|
||||
### Not Found Response
|
||||
```json
|
||||
{
|
||||
"version": null,
|
||||
"source": null,
|
||||
"confidence": "none",
|
||||
"error": "No Rails version detected. Is this a Rails project?"
|
||||
}
|
||||
```
|
||||
|
||||
## Implementation
|
||||
|
||||
**Tool usage**:
|
||||
- `Read` tool to read Gemfile.lock, Gemfile, .ruby-version
|
||||
- `Grep` tool to search for version patterns
|
||||
- Fallback to `Bash` if needed: `bundle show rails | grep 'rails-'`
|
||||
|
||||
**Caching**:
|
||||
- Version detection results cached for session
|
||||
- Re-check if Gemfile.lock modified (check mtime)
|
||||
|
||||
## Error Handling
|
||||
|
||||
**Gemfile.lock missing**:
|
||||
- Fallback to Gemfile
|
||||
- Warn: "Gemfile.lock not found. Run `bundle install` for exact version."
|
||||
|
||||
**No version found**:
|
||||
- Return error response
|
||||
- Suggest: "Ensure `gem 'rails'` in Gemfile"
|
||||
|
||||
**Multiple Rails versions**:
|
||||
- Return first match (main Rails gem)
|
||||
- Ignore: railties, actionpack (these are sub-gems)
|
||||
|
||||
## Integration
|
||||
|
||||
**Auto-invoked by**:
|
||||
- @rails-docs-search (to fetch correct version docs)
|
||||
- @rails-api-lookup (to search version-specific APIs)
|
||||
- @rails-pattern-finder (to find version-appropriate patterns)
|
||||
- All 7 Rails agents (to ensure version-compatible code generation)
|
||||
|
||||
**Manual use case**:
|
||||
```
|
||||
User: "What Rails version is this project using?"
|
||||
Assistant: *invokes @rails-version-detector*
|
||||
"This project uses Rails 7.1.3 (detected from Gemfile.lock)"
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
**Test cases**:
|
||||
1. Rails 7.1.3 in Gemfile.lock → Exact version
|
||||
2. `~> 7.1.0` in Gemfile → Interpreted as 7.1.x
|
||||
3. Ruby 3.2.2 only → Heuristic: 7.0-7.1
|
||||
4. No Rails → Error response
|
||||
5. Rails 8.0.0 → Correct major version detection
|
||||
|
||||
## Notes
|
||||
|
||||
- This skill replaces the need for `mcp__rails__get_rails_info` MCP tool
|
||||
- Version detection is fast (< 1 second)
|
||||
- Results cached per session to avoid repeated file reads
|
||||
- Confidence levels help downstream skills decide if they need clarification from user
|
||||
Reference in New Issue
Block a user