feat(github-copilot-sdk): add workspace skills support (v0.9.0) (#51)
* feat(github-copilot-sdk): add workspace skills support - Introduce ENABLE_WORKSPACE_SKILLS valve to enable/disable workspace custom tools discovery - Modify _build_session_config() to auto-load tools from .copilot-skills/ directory - Add workspace_skills_example.py template with 3 working example tools - Update README.md and README_CN.md with Workspace Skills guide and usage examples - Create v0.9.0.md and v0.9.0_CN.md release notes - Sync version to all docs files (index.md, index.zh.md, and main docs) - Bump version from 0.8.0 to 0.9.0 across all 7+ locations * docs: establish temp files handling policy (project-based, not /tmp) - Add TEMP_FILES_POLICY.md guideline for all skills and workflows - Update pr-submitter skill to use .temp/ directory instead of /tmp - Update release-prep skill documentation with temp file convention - Add .temp/ and .build/ entries to .gitignore - Create internal policy memo in /memories/repo/ This policy ensures: - All temporary files stay within project workspace (not system /tmp) - Alignment with OpenWebUI workspace isolation principles - Multi-user safety and cleanup traceability - Consistent handling across all skills and development workflows * fix(terminology): rename 'workspace skills' to 'workspace custom tools' for accuracy The term 'Skills' in Anthropic context refers to instruction-based frameworks (SKILL.md files with YAML frontmatter + markdown), not custom tool functions. Our implementation uses @define_tool decorator to define custom tools that the SDK auto-discovers from .copilot-skills/ directory. These are Tools, not Skills. Changes: - Rename ENABLE_WORKSPACE_SKILLS valve -> ENABLE_WORKSPACE_TOOLS - Update all documentation (README, README_CN, docs, release notes) - Fix section headings and descriptions throughout - Ensure consistent terminology across all files This is a terminology-only change; functionality remains identical. * feat(pipes): release v0.9.0 of GitHub Copilot SDK Pipe - Integrated OpenWebUI Skills Bridge and manage_skills tool - Reinforced status bar stability with session_finalized logic - Added persistent SDK config directory support * docs(pipes): add comprehensive guides and v0.9.0 notes for Copilot SDK - Added skill manager and best practices guides - Added publishing tool documentation - Included v0.9.0 release notes and deployment script - Updated usage guides
This commit is contained in:
121
.github/TEMP_FILES_POLICY.md
vendored
Normal file
121
.github/TEMP_FILES_POLICY.md
vendored
Normal file
@@ -0,0 +1,121 @@
|
||||
# Temporary Files Handling Policy
|
||||
|
||||
**Last Updated**: 2026-02-26
|
||||
**Status**: Active Guideline
|
||||
|
||||
## Overview
|
||||
|
||||
All temporary files created during skill execution or development workflows must follow this centralized policy to maintain project cleanliness and workspace isolation alignment.
|
||||
|
||||
## Core Rule
|
||||
|
||||
**Temporary files MUST be stored in the project's `.temp/` directory, NOT in system directories like `/tmp`.**
|
||||
|
||||
## Rationale
|
||||
|
||||
1. **Workspace Isolation**: Aligns with OpenWebUI's workspace-per-user model
|
||||
2. **Project Cohesion**: All project artifacts (temporary or permanent) stay within project boundaries
|
||||
3. **Multi-User Safety**: Avoids conflicts between multiple developers using the same system
|
||||
4. **Cleanup Traceability**: Easy to verify all temp files are cleaned up via single `.temp/` directory
|
||||
5. **Debugging**: Inspectable before deletion if issues occur
|
||||
|
||||
## Usage Pattern
|
||||
|
||||
### Creating Temp File
|
||||
|
||||
```bash
|
||||
# Step 1: Ensure temp directory exists
|
||||
mkdir -p .temp
|
||||
|
||||
# Step 2: Write temp file
|
||||
cat > .temp/my_temp_file.md << 'EOF'
|
||||
...content...
|
||||
EOF
|
||||
|
||||
# Step 3: Use the file in your workflow
|
||||
# (e.g., pass to gh CLI, process with script, etc.)
|
||||
```
|
||||
|
||||
### Cleanup After Use
|
||||
|
||||
```bash
|
||||
# Remove individual temp files
|
||||
rm -f .temp/my_temp_file.md
|
||||
|
||||
# Or full cleanup of entire temp directory
|
||||
rm -rf .temp/
|
||||
```
|
||||
|
||||
## Skills Affected
|
||||
|
||||
| Skill | Implementation | Status |
|
||||
|-------|----------------|--------|
|
||||
| `pr-submitter` | PR body file (`.temp/pr_body.md`) | ✅ Updated |
|
||||
| `release-prep` | Draft notes (if any) | ✅ Policy Added |
|
||||
| `version-bumper` | Backup files (if any) | ℹ️ Check needed |
|
||||
| Future skills | TBD | 📋 Must follow policy |
|
||||
|
||||
## .gitignore Configuration
|
||||
|
||||
The following entry in `.gitignore` ensures temp files are never committed:
|
||||
|
||||
```
|
||||
# Temporary files
|
||||
.temp/
|
||||
.build/
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
### Example 1: PR Submitter Skill
|
||||
```bash
|
||||
# Create PR body in temp directory
|
||||
mkdir -p .temp
|
||||
cat > .temp/pr_body.md << 'EOF'
|
||||
## Summary
|
||||
New feature implementation
|
||||
EOF
|
||||
|
||||
# Use with gh CLI
|
||||
gh pr create --body-file .temp/pr_body.md --title "feat: new feature"
|
||||
|
||||
# Cleanup
|
||||
rm -f .temp/pr_body.md
|
||||
```
|
||||
|
||||
### Example 2: Release Prepare Workflow
|
||||
```bash
|
||||
# Create draft changelog
|
||||
mkdir -p .temp
|
||||
cat > .temp/changelog_draft.md << 'EOF'
|
||||
# v1.0.0 Release Notes
|
||||
EOF
|
||||
|
||||
# Edit, validate, then integrate into real files
|
||||
# ...
|
||||
|
||||
# Cleanup
|
||||
rm -f .temp/changelog_draft.md
|
||||
```
|
||||
|
||||
## Anti-Patterns (❌ Don't Do This)
|
||||
|
||||
- ❌ Writing temp files to `/tmp` — will be lost/orphaned
|
||||
- ❌ Writing to root directory or `plugins/` — pollutes repo
|
||||
- ❌ Not cleaning up temp files — accumulates clutter
|
||||
- ❌ Committing `.temp/` files to git — defeats the purpose
|
||||
- ❌ Using absolute paths — breaks workflow portability
|
||||
|
||||
## Enforcement
|
||||
|
||||
1. **Code Review**: PRs should verify no `/tmp` references in scripts
|
||||
2. **CI/CD**: Setup can validate `.temp/` cleanup via git status before commit
|
||||
3. **Documentation**: All skill docs must reference this policy (link to this file)
|
||||
4. **Automated**: Consider adding pre-commit hook to ensure `.temp/` is not staged
|
||||
|
||||
## Questions / Clarifications
|
||||
|
||||
For questions about this policy, refer to:
|
||||
- `.github/skills/pr-submitter/SKILL.md` — Practical example
|
||||
- `.github/skills/release-prep/SKILL.md` — Policy integration
|
||||
- `/memories/repo/temp-file-handling-convention.md` — Internal notes
|
||||
31
.github/skills/pr-submitter/SKILL.md
vendored
31
.github/skills/pr-submitter/SKILL.md
vendored
@@ -19,6 +19,17 @@ This skill handles the final step of pushing a feature branch and creating a val
|
||||
|
||||
## Workflow
|
||||
|
||||
### Step 0 — Initialize Temp Directory (Project-Based)
|
||||
|
||||
For all temporary files, use the project's `.temp/` directory instead of system `/tmp`:
|
||||
|
||||
```bash
|
||||
# Create temp directory if it doesn't exist
|
||||
mkdir -p .temp
|
||||
```
|
||||
|
||||
**Why**: All temporary files stay within the project workspace, avoiding system `/tmp` pollution and better aligning with OpenWebUI workspace isolation principles.
|
||||
|
||||
### Step 1 — Pre-Flight Checks
|
||||
|
||||
Run these checks before any push:
|
||||
@@ -46,10 +57,10 @@ Gather:
|
||||
|
||||
### Step 3 — Build PR Body File (Shell-Escape-Safe)
|
||||
|
||||
**Always write the body to a temp file.** Never embed multi-line markdown with special characters directly in a shell command.
|
||||
**Always write the body to a temp file in `.temp/` directory.** Never embed multi-line markdown with special characters directly in a shell command.
|
||||
|
||||
```bash
|
||||
cat > /tmp/pr_body.md << 'HEREDOC'
|
||||
cat > .temp/pr_body.md << 'HEREDOC'
|
||||
## Summary
|
||||
|
||||
Brief one-sentence description of what this PR accomplishes.
|
||||
@@ -101,12 +112,12 @@ Before submitting, verify the body file contains expected sections:
|
||||
|
||||
```bash
|
||||
# Check key sections exist
|
||||
grep -q "## Summary" /tmp/pr_body.md && echo "✅ Summary" || echo "❌ Summary missing"
|
||||
grep -q "## Changes" /tmp/pr_body.md && echo "✅ Changes" || echo "❌ Changes missing"
|
||||
grep -q "## 变更摘要" /tmp/pr_body.md && echo "✅ CN Section" || echo "❌ CN Section missing"
|
||||
grep -q "## Summary" .temp/pr_body.md && echo "✅ Summary" || echo "❌ Summary missing"
|
||||
grep -q "## Changes" .temp/pr_body.md && echo "✅ Changes" || echo "❌ Changes missing"
|
||||
grep -q "## 变更摘要" .temp/pr_body.md && echo "✅ CN Section" || echo "❌ CN Section missing"
|
||||
|
||||
# Preview the body
|
||||
cat /tmp/pr_body.md
|
||||
cat .temp/pr_body.md
|
||||
```
|
||||
|
||||
Ask the user to confirm the body content before proceeding.
|
||||
@@ -126,7 +137,7 @@ gh pr create \
|
||||
--base main \
|
||||
--head $(git branch --show-current) \
|
||||
--title "<PR title from Step 2>" \
|
||||
--body-file /tmp/pr_body.md
|
||||
--body-file .temp/pr_body.md
|
||||
```
|
||||
|
||||
Always use `--body-file`, never `--body` with inline markdown.
|
||||
@@ -151,9 +162,11 @@ gh pr edit <PR-NUMBER> --body-file /tmp/pr_body.md
|
||||
### Step 8 — Cleanup
|
||||
|
||||
```bash
|
||||
rm -f /tmp/pr_body.md
|
||||
rm -f .temp/pr_body.md
|
||||
```
|
||||
|
||||
**Note**: The `.temp/` directory itself is preserved for reuse; only the individual PR body file is deleted. To fully clean up: `rm -rf .temp/`
|
||||
|
||||
Report final PR URL to the user.
|
||||
|
||||
---
|
||||
@@ -167,6 +180,8 @@ Report final PR URL to the user.
|
||||
| Newlines in `--body` | File-based only |
|
||||
| `$variable` expansion | Use `<< 'HEREDOC'` (quoted) |
|
||||
| Double quotes in body | Safe in heredoc file |
|
||||
| Temp file storage | Use `.temp/` dir, not `/tmp` |
|
||||
| Cleanup after use | Always delete temp file (keep dir) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
7
.github/skills/release-prep/SKILL.md
vendored
7
.github/skills/release-prep/SKILL.md
vendored
@@ -20,6 +20,13 @@ This skill covers:
|
||||
|
||||
It **stops before** `git push` or `gh pr create`. Use the `pr-submitter` skill for those steps.
|
||||
|
||||
### Temporary File Convention
|
||||
|
||||
Any temporary files created during release prep (e.g., draft changelogs) must:
|
||||
- Be written to the project's `.temp/` directory, **NOT** system `/tmp`
|
||||
- Be cleaned up before commit using `rm -f .temp/file_name`
|
||||
- Never be committed to git (add `.temp/` to `.gitignore`)
|
||||
|
||||
---
|
||||
|
||||
## Workflow
|
||||
|
||||
Reference in New Issue
Block a user