feat: add download-attachment and pull-request commands
- Add /download-attachment command for downloading files from URLs - Add /pull-request command for creating PRs in one step - Expose transcript:extract script in package.json 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,100 @@
|
|||||||
|
# download-attachment
|
||||||
|
|
||||||
|
Download files from URLs to attachments folder and organize them with descriptive names.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
```
|
||||||
|
/download-attachment <url1> [url2] [url3...]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
```
|
||||||
|
/download-attachment https://example.com/document.pdf
|
||||||
|
/download-attachment https://site.com/image.png https://site.com/report.pdf
|
||||||
|
```
|
||||||
|
|
||||||
|
## Implementation
|
||||||
|
|
||||||
|
You are tasked with downloading files from URLs and organizing them in the Obsidian vault attachments folder.
|
||||||
|
|
||||||
|
### Step 1: Parse URLs
|
||||||
|
Extract the URL(s) from the user's input. Handle multiple URLs if provided.
|
||||||
|
|
||||||
|
### Step 2: Download Files
|
||||||
|
For each URL:
|
||||||
|
```bash
|
||||||
|
# Create temp filename based on URL
|
||||||
|
# Use wget or curl to download
|
||||||
|
wget -O "05_Attachments/[filename]" "[url]"
|
||||||
|
# or
|
||||||
|
curl -L "[url]" -o "05_Attachments/[filename]"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 3: Verify Downloads
|
||||||
|
Check that files were downloaded successfully:
|
||||||
|
```bash
|
||||||
|
ls -la "05_Attachments/"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 4: Organize Files
|
||||||
|
After downloading, run the organize-attachments command to rename files with descriptive names:
|
||||||
|
|
||||||
|
For PDFs:
|
||||||
|
- Extract text with `pdftotext`
|
||||||
|
- Analyze content for meaningful title
|
||||||
|
|
||||||
|
For Images:
|
||||||
|
- Use `mcp__gemini-vision__analyze_image` or `mcp__gemini-vision__analyze_multiple`
|
||||||
|
- Generate descriptive filename based on content
|
||||||
|
|
||||||
|
### Step 5: Move to Organized
|
||||||
|
Move renamed files to `05_Attachments/Organized/` with descriptive names
|
||||||
|
|
||||||
|
### Step 6: Update Index
|
||||||
|
Add entries to `05_Attachments/00_Index.md`
|
||||||
|
|
||||||
|
### Step 7: Commit Changes
|
||||||
|
```bash
|
||||||
|
git add -A
|
||||||
|
git commit -m "Download and organize attachments from URLs"
|
||||||
|
git push
|
||||||
|
```
|
||||||
|
|
||||||
|
## Important Notes
|
||||||
|
|
||||||
|
1. **File Naming**:
|
||||||
|
- Initial download: Use URL filename or generate from URL
|
||||||
|
- After analysis: Rename with descriptive title
|
||||||
|
|
||||||
|
2. **Supported Types**:
|
||||||
|
- Images: .png, .jpg, .jpeg, .gif, .webp
|
||||||
|
- Documents: .pdf, .doc, .docx
|
||||||
|
- Text: .txt, .md
|
||||||
|
- Data: .csv, .xlsx
|
||||||
|
|
||||||
|
3. **Error Handling**:
|
||||||
|
- Check if URL is accessible
|
||||||
|
- Verify file downloaded correctly
|
||||||
|
- Handle download failures gracefully
|
||||||
|
|
||||||
|
4. **Organization**:
|
||||||
|
- Downloaded files go to `05_Attachments/`
|
||||||
|
- After renaming, move to `05_Attachments/Organized/`
|
||||||
|
- Update links across vault if needed
|
||||||
|
|
||||||
|
## Workflow
|
||||||
|
|
||||||
|
1. Download file(s) from provided URL(s)
|
||||||
|
2. Identify file type and analyze content
|
||||||
|
3. Generate descriptive filename
|
||||||
|
4. Move to Organized folder
|
||||||
|
5. Update index and references
|
||||||
|
6. Commit and push changes
|
||||||
|
|
||||||
|
## Tips
|
||||||
|
|
||||||
|
- For multiple URLs, process them in batch for efficiency
|
||||||
|
- Use Gemini Vision for batch image analysis (up to 3 at once)
|
||||||
|
- Extract meaningful context from PDFs before renaming
|
||||||
|
- Preserve original file extensions
|
||||||
|
- Keep filenames concise but descriptive (max 60 chars)
|
||||||
@@ -0,0 +1,157 @@
|
|||||||
|
# Pull Request Command
|
||||||
|
|
||||||
|
Creates a new feature branch, commits changes, pushes to GitHub, and opens a pull request - all in one command. Perfect for contributing features or fixes.
|
||||||
|
|
||||||
|
## Task
|
||||||
|
|
||||||
|
Automate the entire pull request workflow: create branch, stage changes, commit with descriptive message, push to GitHub, and open PR with proper description.
|
||||||
|
|
||||||
|
## Process
|
||||||
|
|
||||||
|
### 1. **Check Prerequisites**
|
||||||
|
- Ensure git repository exists
|
||||||
|
- Check for uncommitted changes to include
|
||||||
|
- Verify GitHub CLI (`gh`) is available
|
||||||
|
- Get current branch as base branch
|
||||||
|
|
||||||
|
### 2. **Create Feature Branch**
|
||||||
|
```bash
|
||||||
|
# Generate branch name from PR title or use provided name
|
||||||
|
# Format: feature/short-description or fix/issue-name
|
||||||
|
git checkout -b feature/[branch-name]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. **Stage and Review Changes**
|
||||||
|
- Show `git status` to user
|
||||||
|
- Show `git diff --staged` for review
|
||||||
|
- If no staged changes, stage all changes: `git add -A`
|
||||||
|
- Confirm changes with user before proceeding
|
||||||
|
|
||||||
|
### 4. **Commit Changes**
|
||||||
|
- Analyze changes to create meaningful commit message
|
||||||
|
- Use conventional commits format (feat:, fix:, docs:, etc.)
|
||||||
|
- Include detailed commit body if changes are complex
|
||||||
|
```bash
|
||||||
|
git commit -m "feat: add new feature
|
||||||
|
|
||||||
|
- Detail 1
|
||||||
|
- Detail 2
|
||||||
|
|
||||||
|
🤖 Generated with Claude Code"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. **Push to GitHub**
|
||||||
|
```bash
|
||||||
|
# Push with upstream tracking
|
||||||
|
git push -u origin feature/[branch-name]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. **Create Pull Request**
|
||||||
|
Use `gh pr create` with:
|
||||||
|
- Descriptive title
|
||||||
|
- Detailed body with:
|
||||||
|
- Summary of changes
|
||||||
|
- Testing checklist
|
||||||
|
- Related issues (if any)
|
||||||
|
- Set base branch (usually main/master)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gh pr create \
|
||||||
|
--title "Feature: Add awesome new capability" \
|
||||||
|
--body "$(cat <<'EOF'
|
||||||
|
## Summary
|
||||||
|
Brief description of what this PR does
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
- Added feature X
|
||||||
|
- Fixed bug Y
|
||||||
|
- Improved performance of Z
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
- [ ] Tested locally
|
||||||
|
- [ ] All tests pass
|
||||||
|
- [ ] Documentation updated
|
||||||
|
|
||||||
|
## Screenshots
|
||||||
|
(if applicable)
|
||||||
|
|
||||||
|
🤖 Generated with [Claude Code](https://claude.ai/code)
|
||||||
|
EOF
|
||||||
|
)" \
|
||||||
|
--base main
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7. **Provide Next Steps**
|
||||||
|
- Show PR URL
|
||||||
|
- Remind about review process
|
||||||
|
- Suggest next actions (request review, add labels, etc.)
|
||||||
|
|
||||||
|
## Arguments
|
||||||
|
|
||||||
|
- **Optional**: Branch name (auto-generated from changes if not provided)
|
||||||
|
- **Optional**: PR title (analyzed from changes if not provided)
|
||||||
|
- **Optional**: Target branch (defaults to main/master)
|
||||||
|
|
||||||
|
## Example Usage
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Auto-generate branch and PR from changes
|
||||||
|
/pull-request
|
||||||
|
|
||||||
|
# Specify branch name
|
||||||
|
/pull-request feature/add-auth
|
||||||
|
|
||||||
|
# Full specification
|
||||||
|
/pull-request fix/bug-123 "Fix: Resolve authentication timeout issue" develop
|
||||||
|
```
|
||||||
|
|
||||||
|
## Output Example
|
||||||
|
|
||||||
|
```
|
||||||
|
📝 Analyzing changes...
|
||||||
|
🌿 Creating branch: feature/add-download-command
|
||||||
|
✅ Committed: feat: add download-attachment command
|
||||||
|
📤 Pushed to origin
|
||||||
|
🔗 Pull Request created: https://github.com/user/repo/pull/42
|
||||||
|
|
||||||
|
Next steps:
|
||||||
|
- Request review from team members
|
||||||
|
- Add relevant labels
|
||||||
|
- Link related issues
|
||||||
|
```
|
||||||
|
|
||||||
|
## Branch Naming Conventions
|
||||||
|
|
||||||
|
- **Features**: `feature/description`
|
||||||
|
- **Fixes**: `fix/issue-or-description`
|
||||||
|
- **Documentation**: `docs/what-updated`
|
||||||
|
- **Refactoring**: `refactor/what-changed`
|
||||||
|
- **Performance**: `perf/optimization`
|
||||||
|
- **Tests**: `test/what-tested`
|
||||||
|
|
||||||
|
## Commit Message Format
|
||||||
|
|
||||||
|
Follow conventional commits:
|
||||||
|
- `feat:` New feature
|
||||||
|
- `fix:` Bug fix
|
||||||
|
- `docs:` Documentation only
|
||||||
|
- `style:` Formatting, missing semicolons, etc.
|
||||||
|
- `refactor:` Code change that neither fixes a bug nor adds a feature
|
||||||
|
- `perf:` Performance improvement
|
||||||
|
- `test:` Adding missing tests
|
||||||
|
- `chore:` Changes to build process or auxiliary tools
|
||||||
|
|
||||||
|
## Safety Features
|
||||||
|
|
||||||
|
- Confirm before pushing if changes are large
|
||||||
|
- Show diff before committing
|
||||||
|
- Verify PR description before creating
|
||||||
|
- Check if PR already exists for branch
|
||||||
|
- Handle merge conflicts gracefully
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
- If no changes: "No changes to create PR"
|
||||||
|
- If already on feature branch: Ask if should create PR from current branch
|
||||||
|
- If PR exists: Show existing PR URL
|
||||||
|
- If push fails: Check permissions and remote settings
|
||||||
@@ -15,6 +15,7 @@
|
|||||||
"attachments:orphans": "for file in 05_Attachments/*; do basename \"$file\" | xargs -I {} sh -c 'grep -r \"{}\" . --include=\"*.md\" > /dev/null || echo \"{}\"'; done",
|
"attachments:orphans": "for file in 05_Attachments/*; do basename \"$file\" | xargs -I {} sh -c 'grep -r \"{}\" . --include=\"*.md\" > /dev/null || echo \"{}\"'; done",
|
||||||
"attachments:recent": "find 05_Attachments -type f -mtime -7 -exec ls -la {} \\;",
|
"attachments:recent": "find 05_Attachments -type f -mtime -7 -exec ls -la {} \\;",
|
||||||
"attachments:create-organized": "mkdir -p 05_Attachments/Organized",
|
"attachments:create-organized": "mkdir -p 05_Attachments/Organized",
|
||||||
|
"transcript:extract": ".scripts/transcript-extract.sh",
|
||||||
"vault:stats": ".scripts/vault-stats.sh",
|
"vault:stats": ".scripts/vault-stats.sh",
|
||||||
"check-updates": "REMOTE=$(curl -s https://raw.githubusercontent.com/heyitsnoah/claudesidian/main/package.json | grep version | head -1 | sed 's/.*: \"\\(.*\\)\".*/\\1/') && LOCAL=$(grep version package.json | head -1 | sed 's/.*: \"\\(.*\\)\".*/\\1/') && if [ \"$LOCAL\" != \"$REMOTE\" ]; then echo -e \"📦 Update available! Latest: $REMOTE (you have: $LOCAL)\\n\\n⬇\\n/upgrade\\n⬆\\n\\n## What will this do\\n\\n✅ Update to the latest version of Claudesidian\\n✅ Get new features and improvements\\n✅ Preserve your vault content and settings\\n\\n\"; fi"
|
"check-updates": "REMOTE=$(curl -s https://raw.githubusercontent.com/heyitsnoah/claudesidian/main/package.json | grep version | head -1 | sed 's/.*: \"\\(.*\\)\".*/\\1/') && LOCAL=$(grep version package.json | head -1 | sed 's/.*: \"\\(.*\\)\".*/\\1/') && if [ \"$LOCAL\" != \"$REMOTE\" ]; then echo -e \"📦 Update available! Latest: $REMOTE (you have: $LOCAL)\\n\\n⬇\\n/upgrade\\n⬆\\n\\n## What will this do\\n\\n✅ Update to the latest version of Claudesidian\\n✅ Get new features and improvements\\n✅ Preserve your vault content and settings\\n\\n\"; fi"
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user