@openhands/extensions 0.0.1-alpha → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/custom-codereview-guide.md +25 -0
- package/.github/pull_request_template.md +38 -0
- package/.github/release.yml +14 -0
- package/.github/workflows/check-extensions.yml +72 -0
- package/.github/workflows/npm-publish.yml +89 -0
- package/.github/workflows/pr.yml +30 -0
- package/.github/workflows/release.yml +24 -0
- package/.github/workflows/tests.yml +25 -0
- package/.github/workflows/vulnerability-scan.yml +87 -0
- package/.release-please-manifest.json +3 -0
- package/AGENTS.md +132 -0
- package/README.md +10 -0
- package/analysis_results.md +162 -0
- package/marketplaces/large-codebase.json +66 -0
- package/marketplaces/openhands-extensions.json +682 -0
- package/package.json +4 -10
- package/plugins/README.md +30 -0
- package/plugins/city-weather/.plugin/plugin.json +13 -0
- package/plugins/city-weather/README.md +145 -0
- package/plugins/city-weather/commands/now.md +56 -0
- package/plugins/cobol-modernization/.plugin/plugin.json +19 -0
- package/plugins/cobol-modernization/README.md +201 -0
- package/plugins/cobol-modernization/references/troubleshooting.md +18 -0
- package/plugins/cobol-modernization/skills/build-setup/SKILL.md +78 -0
- package/plugins/cobol-modernization/skills/build-setup/scripts/install-gnucobol.sh +32 -0
- package/plugins/cobol-modernization/skills/cobol-modernization-overview/SKILL.md +113 -0
- package/plugins/cobol-modernization/skills/mainfraime-removal/SKILL.md +62 -0
- package/plugins/cobol-modernization/skills/mainfraime-removal/references/cics-transformation-examples.md +45 -0
- package/plugins/cobol-modernization/skills/mainframe-planning/SKILL.md +78 -0
- package/plugins/cobol-modernization/skills/to-java-migration/SKILL.md +59 -0
- package/plugins/cobol-modernization/skills/to-java-migration/references/cobol-to-java-example.md +58 -0
- package/plugins/cobol-modernization/skills/to-java-migration/references/datatype-mappings.md +19 -0
- package/plugins/issue-duplicate-checker/.plugin/plugin.json +13 -0
- package/plugins/issue-duplicate-checker/README.md +51 -0
- package/plugins/issue-duplicate-checker/action.yml +349 -0
- package/plugins/issue-duplicate-checker/scripts/auto_close_duplicate_issues.py +569 -0
- package/plugins/issue-duplicate-checker/scripts/issue_duplicate_check_openhands.py +681 -0
- package/plugins/issue-duplicate-checker/scripts/post_duplicate_notice.js +220 -0
- package/plugins/issue-duplicate-checker/scripts/remove_duplicate_candidate_label.js +27 -0
- package/plugins/magic-test/.plugin/plugin.json +13 -0
- package/plugins/magic-test/skills/magic-word/SKILL.md +33 -0
- package/plugins/migration-scoring/.plugin/plugin.json +19 -0
- package/plugins/migration-scoring/README.md +244 -0
- package/plugins/migration-scoring/skills/migration-mapping/SKILL.md +72 -0
- package/plugins/migration-scoring/skills/migration-report/SKILL.md +118 -0
- package/plugins/migration-scoring/skills/migration-scoring-overview/SKILL.md +126 -0
- package/plugins/migration-scoring/skills/score-quality/SKILL.md +54 -0
- package/plugins/migration-scoring/skills/score-quality/references/scoring-criteria.md +30 -0
- package/plugins/migration-scoring/skills/score-style/SKILL.md +106 -0
- package/plugins/onboarding/.plugin/plugin.json +20 -0
- package/plugins/onboarding/README.md +30 -0
- package/plugins/onboarding/references/criteria.md +144 -0
- package/plugins/onboarding/skills/agent-readiness-report/README.md +23 -0
- package/plugins/onboarding/skills/agent-readiness-report/SKILL.md +122 -0
- package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_agent_instructions.sh +88 -0
- package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_build_env.sh +114 -0
- package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_feedback_loops.sh +133 -0
- package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_policy.sh +113 -0
- package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_workflows.sh +127 -0
- package/plugins/onboarding/skills/improve-agent-readiness/README.md +19 -0
- package/plugins/onboarding/skills/improve-agent-readiness/SKILL.md +167 -0
- package/plugins/onboarding/skills/setup-agents-md/README.md +15 -0
- package/plugins/onboarding/skills/setup-agents-md/SKILL.md +150 -0
- package/plugins/onboarding/skills/setup-openhands/README.md +20 -0
- package/plugins/onboarding/skills/setup-openhands/SKILL.md +56 -0
- package/plugins/onboarding/skills/setup-pr-review/README.md +23 -0
- package/plugins/onboarding/skills/setup-pr-review/SKILL.md +72 -0
- package/plugins/openhands/.plugin/plugin.json +13 -0
- package/plugins/openhands/README.md +52 -0
- package/plugins/openhands/SKILL.md +61 -0
- package/plugins/openhands/commands/create.md +55 -0
- package/plugins/openhands/commands/openhands-cloud.md +8 -0
- package/plugins/openhands/scripts/run.sh +69 -0
- package/plugins/pr-review/.plugin/plugin.json +13 -0
- package/plugins/pr-review/README.md +393 -0
- package/plugins/pr-review/action.yml +298 -0
- package/plugins/pr-review/scripts/agent_script.py +1282 -0
- package/plugins/pr-review/scripts/evaluate_review.py +655 -0
- package/plugins/pr-review/scripts/prompt.py +260 -0
- package/plugins/pr-review/workflows/pr-review-by-openhands.yml +51 -0
- package/plugins/pr-review/workflows/pr-review-evaluation.yml +85 -0
- package/plugins/qa-changes/.plugin/plugin.json +11 -0
- package/plugins/qa-changes/README.md +185 -0
- package/plugins/qa-changes/action.yml +181 -0
- package/plugins/qa-changes/scripts/agent_script.py +406 -0
- package/plugins/qa-changes/scripts/evaluate_qa_changes.py +385 -0
- package/plugins/qa-changes/scripts/prompt.py +174 -0
- package/plugins/qa-changes/workflows/qa-changes-by-openhands.yml +50 -0
- package/plugins/qa-changes/workflows/qa-changes-evaluation.yml +85 -0
- package/plugins/release-notes/.plugin/plugin.json +19 -0
- package/plugins/release-notes/README.md +283 -0
- package/plugins/release-notes/SKILL.md +83 -0
- package/plugins/release-notes/action.yml +117 -0
- package/plugins/release-notes/commands/release-notes.md +8 -0
- package/plugins/release-notes/scripts/agent_script.py +292 -0
- package/plugins/release-notes/scripts/generate_release_notes.py +733 -0
- package/plugins/release-notes/scripts/prompt.py +90 -0
- package/plugins/release-notes/scripts/validate_release_notes.py +328 -0
- package/plugins/release-notes/workflows/release-notes.yml +76 -0
- package/plugins/vulnerability-remediation/.plugin/plugin.json +19 -0
- package/plugins/vulnerability-remediation/README.md +217 -0
- package/plugins/vulnerability-remediation/action.yml +187 -0
- package/plugins/vulnerability-remediation/scripts/scan_and_remediate.py +561 -0
- package/plugins/vulnerability-remediation/workflows/vulnerability-scan.yml +87 -0
- package/pyproject.toml +12 -0
- package/release-please-config.json +16 -0
- package/scripts/sync_extensions.py +494 -0
- package/scripts/sync_openhands_sdk_skill.py +264 -0
- package/skills/README.md +159 -0
- package/skills/add-javadoc/.plugin/plugin.json +18 -0
- package/skills/add-javadoc/README.md +40 -0
- package/skills/add-javadoc/SKILL.md +35 -0
- package/skills/add-javadoc/references/example.md +32 -0
- package/skills/add-skill/.plugin/plugin.json +18 -0
- package/skills/add-skill/README.md +67 -0
- package/skills/add-skill/SKILL.md +47 -0
- package/skills/add-skill/scripts/fetch_skill.py +259 -0
- package/skills/agent-creator/.plugin/plugin.json +20 -0
- package/skills/agent-creator/README.md +104 -0
- package/skills/agent-creator/SKILL.md +190 -0
- package/skills/agent-creator/commands/agent-creator.md +8 -0
- package/skills/agent-creator/references/fallback.md +117 -0
- package/skills/agent-memory/.plugin/plugin.json +18 -0
- package/skills/agent-memory/README.md +35 -0
- package/skills/agent-memory/SKILL.md +30 -0
- package/skills/agent-memory/commands/remember.md +8 -0
- package/skills/agent-sdk-builder/.plugin/plugin.json +18 -0
- package/skills/agent-sdk-builder/README.md +40 -0
- package/skills/agent-sdk-builder/SKILL.md +37 -0
- package/skills/agent-sdk-builder/commands/agent-builder.md +8 -0
- package/skills/azure-devops/.plugin/plugin.json +18 -0
- package/skills/azure-devops/README.md +55 -0
- package/skills/azure-devops/SKILL.md +50 -0
- package/skills/bitbucket/.plugin/plugin.json +17 -0
- package/skills/bitbucket/README.md +50 -0
- package/skills/bitbucket/SKILL.md +45 -0
- package/skills/code-review/.plugin/plugin.json +19 -0
- package/skills/code-review/README.md +18 -0
- package/skills/code-review/SKILL.md +208 -0
- package/skills/code-review/commands/codereview-roasted.md +8 -0
- package/skills/code-review/commands/codereview.md +8 -0
- package/skills/code-review/references/risk-evaluation.md +41 -0
- package/skills/code-review/references/supply-chain-security.md +31 -0
- package/skills/code-simplifier/.plugin/plugin.json +21 -0
- package/skills/code-simplifier/README.md +30 -0
- package/skills/code-simplifier/SKILL.md +91 -0
- package/skills/code-simplifier/commands/simplify.md +8 -0
- package/skills/code-simplifier/references/code-quality-review.md +86 -0
- package/skills/code-simplifier/references/code-reuse-review.md +63 -0
- package/skills/code-simplifier/references/efficiency-review.md +81 -0
- package/skills/datadog/.plugin/plugin.json +19 -0
- package/skills/datadog/README.md +100 -0
- package/skills/datadog/SKILL.md +95 -0
- package/skills/deno/.plugin/plugin.json +18 -0
- package/skills/deno/README.md +5 -0
- package/skills/deno/SKILL.md +99 -0
- package/skills/deno/references/README.md +6 -0
- package/skills/discord/.plugin/plugin.json +18 -0
- package/skills/discord/README.md +31 -0
- package/skills/discord/SKILL.md +109 -0
- package/skills/discord/__init__.py +0 -0
- package/skills/discord/references/REFERENCE.md +78 -0
- package/skills/discord/scripts/__init__.py +0 -0
- package/skills/discord/scripts/_http.py +127 -0
- package/skills/discord/scripts/post_webhook.py +106 -0
- package/skills/discord/scripts/send_message.py +102 -0
- package/skills/docker/.plugin/plugin.json +17 -0
- package/skills/docker/README.md +34 -0
- package/skills/docker/SKILL.md +29 -0
- package/skills/evidence-based-citations/.plugin/plugin.json +20 -0
- package/skills/evidence-based-citations/README.md +31 -0
- package/skills/evidence-based-citations/SKILL.md +59 -0
- package/skills/flarglebargle/.plugin/plugin.json +16 -0
- package/skills/flarglebargle/README.md +14 -0
- package/skills/flarglebargle/SKILL.md +9 -0
- package/skills/frontend-design/.plugin/plugin.json +21 -0
- package/skills/frontend-design/LICENSE.txt +177 -0
- package/skills/frontend-design/README.md +42 -0
- package/skills/frontend-design/SKILL.md +42 -0
- package/skills/github/.plugin/plugin.json +19 -0
- package/skills/github/README.md +42 -0
- package/skills/github/SKILL.md +106 -0
- package/skills/github-pr-review/.plugin/plugin.json +18 -0
- package/skills/github-pr-review/README.md +145 -0
- package/skills/github-pr-review/SKILL.md +148 -0
- package/skills/github-pr-review/commands/github-pr-review.md +8 -0
- package/skills/github-pr-reviewer/.plugin/plugin.json +20 -0
- package/skills/github-pr-reviewer/README.md +34 -0
- package/skills/github-pr-reviewer/SKILL.md +89 -0
- package/skills/github-pr-reviewer/commands/pr-reviewer:setup.md +8 -0
- package/skills/github-repo-monitor/.plugin/plugin.json +22 -0
- package/skills/github-repo-monitor/README.md +70 -0
- package/skills/github-repo-monitor/SKILL.md +316 -0
- package/skills/github-repo-monitor/commands/github-monitor:poll.md +8 -0
- package/skills/github-repo-monitor/references/github-api.md +241 -0
- package/skills/github-repo-monitor/references/state-schema.md +160 -0
- package/skills/github-repo-monitor/scripts/main.py +915 -0
- package/skills/github-repo-monitor/tests/test_main.py +400 -0
- package/skills/gitlab/.plugin/plugin.json +17 -0
- package/skills/gitlab/README.md +37 -0
- package/skills/gitlab/SKILL.md +32 -0
- package/skills/incident-retrospective/.plugin/plugin.json +21 -0
- package/skills/incident-retrospective/README.md +34 -0
- package/skills/incident-retrospective/SKILL.md +98 -0
- package/skills/incident-retrospective/commands/incident-retro:setup.md +8 -0
- package/skills/iterate/.plugin/plugin.json +13 -0
- package/skills/iterate/README.md +25 -0
- package/skills/iterate/SKILL.md +399 -0
- package/skills/iterate/commands/babysit.md +8 -0
- package/skills/iterate/commands/iterate.md +8 -0
- package/skills/iterate/commands/verify.md +8 -0
- package/skills/iterate/references/heuristics.md +58 -0
- package/skills/iterate/references/verification.md +96 -0
- package/skills/jupyter/.plugin/plugin.json +18 -0
- package/skills/jupyter/README.md +55 -0
- package/skills/jupyter/SKILL.md +50 -0
- package/skills/kubernetes/.plugin/plugin.json +18 -0
- package/skills/kubernetes/README.md +53 -0
- package/skills/kubernetes/SKILL.md +48 -0
- package/skills/learn-from-code-review/.plugin/plugin.json +19 -0
- package/skills/learn-from-code-review/README.md +64 -0
- package/skills/learn-from-code-review/SKILL.md +186 -0
- package/skills/learn-from-code-review/commands/learn-from-reviews.md +8 -0
- package/skills/linear/.plugin/plugin.json +19 -0
- package/skills/linear/README.md +58 -0
- package/skills/linear/SKILL.md +213 -0
- package/skills/linear-triage/.plugin/plugin.json +21 -0
- package/skills/linear-triage/README.md +34 -0
- package/skills/linear-triage/SKILL.md +91 -0
- package/skills/linear-triage/commands/linear-triage:setup.md +8 -0
- package/skills/notion/.plugin/plugin.json +17 -0
- package/skills/notion/README.md +114 -0
- package/skills/notion/SKILL.md +109 -0
- package/skills/npm/.plugin/plugin.json +17 -0
- package/skills/npm/README.md +14 -0
- package/skills/npm/SKILL.md +9 -0
- package/skills/openhands-api/.plugin/plugin.json +22 -0
- package/skills/openhands-api/README.md +48 -0
- package/skills/openhands-api/SKILL.md +399 -0
- package/skills/openhands-api/references/README.md +33 -0
- package/skills/openhands-api/references/TROUBLESHOOTING.md +81 -0
- package/skills/openhands-api/references/example_prompt.md +12 -0
- package/skills/openhands-api/scripts/openhands_api.py +606 -0
- package/skills/openhands-api/scripts/openhands_api.ts +252 -0
- package/skills/openhands-automation/.plugin/plugin.json +19 -0
- package/skills/openhands-automation/README.md +89 -0
- package/skills/openhands-automation/SKILL.md +875 -0
- package/skills/openhands-automation/commands/automation:create.md +8 -0
- package/skills/openhands-automation/references/ab-testing.md +185 -0
- package/skills/openhands-automation/references/custom-automation.md +644 -0
- package/skills/openhands-sdk/.plugin/plugin.json +20 -0
- package/skills/openhands-sdk/README.md +22 -0
- package/skills/openhands-sdk/SKILL.md +229 -0
- package/skills/openhands-sdk/commands/sdk.md +8 -0
- package/skills/pdflatex/.plugin/plugin.json +18 -0
- package/skills/pdflatex/README.md +39 -0
- package/skills/pdflatex/SKILL.md +34 -0
- package/skills/prd/.plugin/plugin.json +19 -0
- package/skills/prd/README.md +28 -0
- package/skills/prd/SKILL.md +237 -0
- package/skills/prd/commands/prd.md +8 -0
- package/skills/qa-changes/README.md +18 -0
- package/skills/qa-changes/SKILL.md +229 -0
- package/skills/qa-changes/commands/qa-changes.md +8 -0
- package/skills/release-notes/README.md +24 -0
- package/skills/release-notes/SKILL.md +19 -0
- package/skills/release-notes/commands/release-notes.md +8 -0
- package/skills/research-brief/.plugin/plugin.json +20 -0
- package/skills/research-brief/README.md +34 -0
- package/skills/research-brief/SKILL.md +99 -0
- package/skills/research-brief/commands/research-brief:setup.md +8 -0
- package/skills/security/.plugin/plugin.json +18 -0
- package/skills/security/README.md +38 -0
- package/skills/security/SKILL.md +33 -0
- package/skills/skill-creator/.plugin/plugin.json +17 -0
- package/skills/skill-creator/LICENSE.txt +202 -0
- package/skills/skill-creator/README.md +182 -0
- package/skills/skill-creator/SKILL.md +545 -0
- package/skills/skill-creator/references/output-patterns.md +82 -0
- package/skills/skill-creator/references/workflows.md +28 -0
- package/skills/skill-creator/scripts/init_skill.py +303 -0
- package/skills/skill-creator/scripts/quick_validate.py +95 -0
- package/skills/slack-channel-monitor/.plugin/plugin.json +21 -0
- package/skills/slack-channel-monitor/README.md +91 -0
- package/skills/slack-channel-monitor/SKILL.md +276 -0
- package/skills/slack-channel-monitor/commands/slack-monitor:poll.md +8 -0
- package/skills/slack-channel-monitor/references/slack-api.md +207 -0
- package/skills/slack-channel-monitor/references/state-schema.md +180 -0
- package/skills/slack-channel-monitor/scripts/main.py +962 -0
- package/skills/slack-standup-digest/.plugin/plugin.json +21 -0
- package/skills/slack-standup-digest/README.md +34 -0
- package/skills/slack-standup-digest/SKILL.md +92 -0
- package/skills/slack-standup-digest/commands/standup-digest:setup.md +8 -0
- package/skills/spark-version-upgrade/.plugin/plugin.json +20 -0
- package/skills/spark-version-upgrade/README.md +54 -0
- package/skills/spark-version-upgrade/SKILL.md +233 -0
- package/skills/ssh/.plugin/plugin.json +18 -0
- package/skills/ssh/README.md +140 -0
- package/skills/ssh/SKILL.md +135 -0
- package/skills/swift-linux/.plugin/plugin.json +17 -0
- package/skills/swift-linux/README.md +86 -0
- package/skills/swift-linux/SKILL.md +81 -0
- package/skills/theme-factory/.plugin/plugin.json +19 -0
- package/skills/theme-factory/LICENSE.txt +202 -0
- package/skills/theme-factory/README.md +58 -0
- package/skills/theme-factory/SKILL.md +59 -0
- package/skills/theme-factory/theme-showcase.pdf +0 -0
- package/skills/theme-factory/themes/arctic-frost.md +19 -0
- package/skills/theme-factory/themes/botanical-garden.md +19 -0
- package/skills/theme-factory/themes/desert-rose.md +19 -0
- package/skills/theme-factory/themes/forest-canopy.md +19 -0
- package/skills/theme-factory/themes/golden-hour.md +19 -0
- package/skills/theme-factory/themes/midnight-galaxy.md +19 -0
- package/skills/theme-factory/themes/modern-minimalist.md +19 -0
- package/skills/theme-factory/themes/ocean-depths.md +19 -0
- package/skills/theme-factory/themes/sunset-boulevard.md +19 -0
- package/skills/theme-factory/themes/tech-innovation.md +19 -0
- package/skills/uv/.plugin/plugin.json +18 -0
- package/skills/uv/README.md +5 -0
- package/skills/uv/SKILL.md +95 -0
- package/skills/uv/references/README.md +5 -0
- package/skills/vercel/.plugin/plugin.json +18 -0
- package/skills/vercel/README.md +108 -0
- package/skills/vercel/SKILL.md +103 -0
- package/tests/test_add_skill_installs_to_agents_dir.py +42 -0
- package/tests/test_catalogs.py +109 -0
- package/tests/test_code_review_risk_evaluation.py +94 -0
- package/tests/test_issue_duplicate_checker.py +240 -0
- package/tests/test_openhands_api_python.py +152 -0
- package/tests/test_plugin_manifest.py +83 -0
- package/tests/test_pr_review_diff_payload.py +202 -0
- package/tests/test_pr_review_feedback.py +263 -0
- package/tests/test_pr_review_prompt.py +152 -0
- package/tests/test_pr_review_review_context.py +253 -0
- package/tests/test_qa_changes.py +232 -0
- package/tests/test_qa_changes_evaluation.py +259 -0
- package/tests/test_release_notes_generator.py +990 -0
- package/tests/test_sdk_loading.py +150 -0
- package/tests/test_skill_plugin_loading.py +149 -0
- package/tests/test_skills_have_readme.py +66 -0
- package/tests/test_sync_extensions.py +292 -0
- package/tests/test_workflow_sync.py +46 -0
- package/utils/analysis/README.md +7 -0
- package/utils/analysis/laminar_signals/README.md +211 -0
- package/utils/analysis/laminar_signals/analyze.py +780 -0
- package/utils/analysis/laminar_signals/templates/default.j2 +49 -0
- package/utils/analysis/laminar_signals/templates/pr_review.j2 +61 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Botanical Garden
|
|
2
|
+
|
|
3
|
+
A fresh and organic theme featuring vibrant garden-inspired colors for lively presentations.
|
|
4
|
+
|
|
5
|
+
## Color Palette
|
|
6
|
+
|
|
7
|
+
- **Fern Green**: `#4a7c59` - Rich natural green
|
|
8
|
+
- **Marigold**: `#f9a620` - Bright floral accent
|
|
9
|
+
- **Terracotta**: `#b7472a` - Earthy warm tone
|
|
10
|
+
- **Cream**: `#f5f3ed` - Soft neutral backgrounds
|
|
11
|
+
|
|
12
|
+
## Typography
|
|
13
|
+
|
|
14
|
+
- **Headers**: DejaVu Serif Bold
|
|
15
|
+
- **Body Text**: DejaVu Sans
|
|
16
|
+
|
|
17
|
+
## Best Used For
|
|
18
|
+
|
|
19
|
+
Garden centers, food presentations, farm-to-table content, botanical brands, natural products.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Desert Rose
|
|
2
|
+
|
|
3
|
+
A soft and sophisticated theme with dusty, muted tones perfect for elegant presentations.
|
|
4
|
+
|
|
5
|
+
## Color Palette
|
|
6
|
+
|
|
7
|
+
- **Dusty Rose**: `#d4a5a5` - Soft primary color
|
|
8
|
+
- **Clay**: `#b87d6d` - Earthy accent
|
|
9
|
+
- **Sand**: `#e8d5c4` - Warm neutral backgrounds
|
|
10
|
+
- **Deep Burgundy**: `#5d2e46` - Rich dark contrast
|
|
11
|
+
|
|
12
|
+
## Typography
|
|
13
|
+
|
|
14
|
+
- **Headers**: FreeSans Bold
|
|
15
|
+
- **Body Text**: FreeSans
|
|
16
|
+
|
|
17
|
+
## Best Used For
|
|
18
|
+
|
|
19
|
+
Fashion presentations, beauty brands, wedding planning, interior design, boutique businesses.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Forest Canopy
|
|
2
|
+
|
|
3
|
+
A natural and grounded theme featuring earth tones inspired by dense forest environments.
|
|
4
|
+
|
|
5
|
+
## Color Palette
|
|
6
|
+
|
|
7
|
+
- **Forest Green**: `#2d4a2b` - Primary dark green
|
|
8
|
+
- **Sage**: `#7d8471` - Muted green accent
|
|
9
|
+
- **Olive**: `#a4ac86` - Light accent color
|
|
10
|
+
- **Ivory**: `#faf9f6` - Backgrounds and text
|
|
11
|
+
|
|
12
|
+
## Typography
|
|
13
|
+
|
|
14
|
+
- **Headers**: FreeSerif Bold
|
|
15
|
+
- **Body Text**: FreeSans
|
|
16
|
+
|
|
17
|
+
## Best Used For
|
|
18
|
+
|
|
19
|
+
Environmental presentations, sustainability reports, outdoor brands, wellness content, organic products.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Golden Hour
|
|
2
|
+
|
|
3
|
+
A rich and warm autumnal palette that creates an inviting and sophisticated atmosphere.
|
|
4
|
+
|
|
5
|
+
## Color Palette
|
|
6
|
+
|
|
7
|
+
- **Mustard Yellow**: `#f4a900` - Bold primary accent
|
|
8
|
+
- **Terracotta**: `#c1666b` - Warm secondary color
|
|
9
|
+
- **Warm Beige**: `#d4b896` - Neutral backgrounds
|
|
10
|
+
- **Chocolate Brown**: `#4a403a` - Dark text and anchors
|
|
11
|
+
|
|
12
|
+
## Typography
|
|
13
|
+
|
|
14
|
+
- **Headers**: FreeSans Bold
|
|
15
|
+
- **Body Text**: FreeSans
|
|
16
|
+
|
|
17
|
+
## Best Used For
|
|
18
|
+
|
|
19
|
+
Restaurant presentations, hospitality brands, fall campaigns, cozy lifestyle content, artisan products.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Midnight Galaxy
|
|
2
|
+
|
|
3
|
+
A dramatic and cosmic theme with deep purples and mystical tones for impactful presentations.
|
|
4
|
+
|
|
5
|
+
## Color Palette
|
|
6
|
+
|
|
7
|
+
- **Deep Purple**: `#2b1e3e` - Rich dark base
|
|
8
|
+
- **Cosmic Blue**: `#4a4e8f` - Mystical mid-tone
|
|
9
|
+
- **Lavender**: `#a490c2` - Soft accent color
|
|
10
|
+
- **Silver**: `#e6e6fa` - Light highlights and text
|
|
11
|
+
|
|
12
|
+
## Typography
|
|
13
|
+
|
|
14
|
+
- **Headers**: FreeSans Bold
|
|
15
|
+
- **Body Text**: FreeSans
|
|
16
|
+
|
|
17
|
+
## Best Used For
|
|
18
|
+
|
|
19
|
+
Entertainment industry, gaming presentations, nightlife venues, luxury brands, creative agencies.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Modern Minimalist
|
|
2
|
+
|
|
3
|
+
A clean and contemporary theme with a sophisticated grayscale palette for maximum versatility.
|
|
4
|
+
|
|
5
|
+
## Color Palette
|
|
6
|
+
|
|
7
|
+
- **Charcoal**: `#36454f` - Primary dark color
|
|
8
|
+
- **Slate Gray**: `#708090` - Medium gray for accents
|
|
9
|
+
- **Light Gray**: `#d3d3d3` - Backgrounds and dividers
|
|
10
|
+
- **White**: `#ffffff` - Text and clean backgrounds
|
|
11
|
+
|
|
12
|
+
## Typography
|
|
13
|
+
|
|
14
|
+
- **Headers**: DejaVu Sans Bold
|
|
15
|
+
- **Body Text**: DejaVu Sans
|
|
16
|
+
|
|
17
|
+
## Best Used For
|
|
18
|
+
|
|
19
|
+
Tech presentations, architecture portfolios, design showcases, modern business proposals, data visualization.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Ocean Depths
|
|
2
|
+
|
|
3
|
+
A professional and calming maritime theme that evokes the serenity of deep ocean waters.
|
|
4
|
+
|
|
5
|
+
## Color Palette
|
|
6
|
+
|
|
7
|
+
- **Deep Navy**: `#1a2332` - Primary background color
|
|
8
|
+
- **Teal**: `#2d8b8b` - Accent color for highlights and emphasis
|
|
9
|
+
- **Seafoam**: `#a8dadc` - Secondary accent for lighter elements
|
|
10
|
+
- **Cream**: `#f1faee` - Text and light backgrounds
|
|
11
|
+
|
|
12
|
+
## Typography
|
|
13
|
+
|
|
14
|
+
- **Headers**: DejaVu Sans Bold
|
|
15
|
+
- **Body Text**: DejaVu Sans
|
|
16
|
+
|
|
17
|
+
## Best Used For
|
|
18
|
+
|
|
19
|
+
Corporate presentations, financial reports, professional consulting decks, trust-building content.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Sunset Boulevard
|
|
2
|
+
|
|
3
|
+
A warm and vibrant theme inspired by golden hour sunsets, perfect for energetic and creative presentations.
|
|
4
|
+
|
|
5
|
+
## Color Palette
|
|
6
|
+
|
|
7
|
+
- **Burnt Orange**: `#e76f51` - Primary accent color
|
|
8
|
+
- **Coral**: `#f4a261` - Secondary warm accent
|
|
9
|
+
- **Warm Sand**: `#e9c46a` - Highlighting and backgrounds
|
|
10
|
+
- **Deep Purple**: `#264653` - Dark contrast and text
|
|
11
|
+
|
|
12
|
+
## Typography
|
|
13
|
+
|
|
14
|
+
- **Headers**: DejaVu Serif Bold
|
|
15
|
+
- **Body Text**: DejaVu Sans
|
|
16
|
+
|
|
17
|
+
## Best Used For
|
|
18
|
+
|
|
19
|
+
Creative pitches, marketing presentations, lifestyle brands, event promotions, inspirational content.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Tech Innovation
|
|
2
|
+
|
|
3
|
+
A bold and modern theme with high-contrast colors perfect for cutting-edge technology presentations.
|
|
4
|
+
|
|
5
|
+
## Color Palette
|
|
6
|
+
|
|
7
|
+
- **Electric Blue**: `#0066ff` - Vibrant primary accent
|
|
8
|
+
- **Neon Cyan**: `#00ffff` - Bright highlight color
|
|
9
|
+
- **Dark Gray**: `#1e1e1e` - Deep backgrounds
|
|
10
|
+
- **White**: `#ffffff` - Clean text and contrast
|
|
11
|
+
|
|
12
|
+
## Typography
|
|
13
|
+
|
|
14
|
+
- **Headers**: DejaVu Sans Bold
|
|
15
|
+
- **Body Text**: DejaVu Sans
|
|
16
|
+
|
|
17
|
+
## Best Used For
|
|
18
|
+
|
|
19
|
+
Tech startups, software launches, innovation showcases, AI/ML presentations, digital transformation content.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "uv",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Common project, dependency, and environment operations using uv.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "OpenHands",
|
|
7
|
+
"email": "contact@all-hands.dev"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/OpenHands/extensions",
|
|
10
|
+
"repository": "https://github.com/OpenHands/extensions",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"uv",
|
|
14
|
+
"python",
|
|
15
|
+
"dependencies",
|
|
16
|
+
"venv"
|
|
17
|
+
]
|
|
18
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: uv
|
|
3
|
+
description: If the project uses uv, use this skill. Use this skill to create/manage Python projects and environments with `uv`, add/remove dependencies, sync a project from `uv.lock`, and run commands in the project environment.
|
|
4
|
+
triggers:
|
|
5
|
+
- uv
|
|
6
|
+
- uv.lock
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# uv (Python)
|
|
10
|
+
|
|
11
|
+
Use `uv` as the default tool for Python dependency + environment management when the repo has `uv.lock`, mentions `uv` in its docs/Makefile, or already uses a `.venv` created by `uv`.
|
|
12
|
+
|
|
13
|
+
## Quick decision rules
|
|
14
|
+
|
|
15
|
+
- If the repo has `uv.lock` and `pyproject.toml`: treat it as a uv-managed project.
|
|
16
|
+
- If the repo has only `requirements.txt`: you can still use `uv pip` for fast installs.
|
|
17
|
+
- Prefer **project commands** (`uv add/remove/sync/run/lock`) over raw `pip` unless the repo explicitly uses `uv pip`.
|
|
18
|
+
|
|
19
|
+
## Installation (if needed)
|
|
20
|
+
|
|
21
|
+
Prefer a packaged install method when available. If you use the official installer, review it first (avoid blindly piping into a shell) and follow the latest instructions in the official docs.
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# macOS/Linux (official installer)
|
|
25
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
26
|
+
|
|
27
|
+
# Windows (PowerShell, official installer)
|
|
28
|
+
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Common operations
|
|
32
|
+
|
|
33
|
+
### Initialize a new project
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
uv init
|
|
37
|
+
# or
|
|
38
|
+
uv init my-project
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Create / use a virtual environment
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
uv venv # creates .venv
|
|
45
|
+
|
|
46
|
+
# If you need a specific version, match the project's declared requirement
|
|
47
|
+
# (e.g., pyproject.toml / CI config), not an arbitrary latest version.
|
|
48
|
+
uv venv --python 3.x
|
|
49
|
+
|
|
50
|
+
# optional activation (not required for uv commands)
|
|
51
|
+
source .venv/bin/activate # macOS/Linux
|
|
52
|
+
# .venv\\Scripts\\activate # Windows
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Add / remove dependencies (updates pyproject.toml and uv.lock)
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
uv add requests
|
|
59
|
+
uv add 'requests==2.31.0'
|
|
60
|
+
uv add -r requirements.txt
|
|
61
|
+
|
|
62
|
+
uv remove requests
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Lock + sync (reproducible installs)
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
uv lock # (re)generate uv.lock
|
|
69
|
+
uv sync # create/update .venv to match uv.lock
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
If you pulled new changes and `uv.lock` changed, run `uv sync`.
|
|
73
|
+
|
|
74
|
+
### Run commands inside the project environment
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
uv run python -m pytest -q
|
|
78
|
+
uv run python main.py
|
|
79
|
+
uv run ruff check .
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Using uv as a fast pip replacement (requirements workflows)
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
uv venv
|
|
86
|
+
uv pip install -r requirements.txt
|
|
87
|
+
uv pip freeze
|
|
88
|
+
uv pip list
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Notes / pitfalls
|
|
92
|
+
|
|
93
|
+
- `uv` will usually auto-detect and use `.venv` in the project root.
|
|
94
|
+
- In CI/containers you may see `uv pip install --system`, but prefer virtualenvs for local dev.
|
|
95
|
+
- If a command mutates deps, prefer `uv add/remove/lock/sync` so `uv.lock` stays correct.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "vercel",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Deploy and manage applications on Vercel, including preview deployments and deployment protection.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "OpenHands",
|
|
7
|
+
"email": "contact@all-hands.dev"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/OpenHands/extensions",
|
|
10
|
+
"repository": "https://github.com/OpenHands/extensions",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"vercel",
|
|
14
|
+
"deployment",
|
|
15
|
+
"preview",
|
|
16
|
+
"hosting"
|
|
17
|
+
]
|
|
18
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Vercel
|
|
2
|
+
|
|
3
|
+
Deploy and manage applications on Vercel, including preview deployments and deployment protection. Use when working with Vercel-hosted projects or configuring Vercel deployments.
|
|
4
|
+
|
|
5
|
+
## Triggers
|
|
6
|
+
|
|
7
|
+
This skill is activated by the following keywords:
|
|
8
|
+
|
|
9
|
+
- `vercel`
|
|
10
|
+
- `preview deployment`
|
|
11
|
+
|
|
12
|
+
## Details
|
|
13
|
+
|
|
14
|
+
# Vercel Deployment Guide
|
|
15
|
+
|
|
16
|
+
## Deployment Protection and Agent Access
|
|
17
|
+
|
|
18
|
+
Vercel deployments may have **Deployment Protection** enabled, which requires authentication to access preview deployments. This can block automated testing and agent access to preview URLs.
|
|
19
|
+
|
|
20
|
+
### Identifying Protected Deployments
|
|
21
|
+
|
|
22
|
+
If you encounter a login page or authentication requirement when accessing a Vercel preview URL, the deployment has protection enabled. Signs include:
|
|
23
|
+
- Redirect to `vercel.com/login` or SSO login page
|
|
24
|
+
- 401/403 errors when accessing the deployment
|
|
25
|
+
- Preview URLs that require Vercel team membership
|
|
26
|
+
|
|
27
|
+
### Enabling Agent Access with Protection Bypass
|
|
28
|
+
|
|
29
|
+
To allow agents and automated systems to access protected deployments, users need to set up **Protection Bypass for Automation**:
|
|
30
|
+
|
|
31
|
+
1. **Navigate to Project Settings**
|
|
32
|
+
- Go to the Vercel Dashboard
|
|
33
|
+
- Select the project
|
|
34
|
+
- Click on **Settings** → **Deployment Protection**
|
|
35
|
+
|
|
36
|
+
2. **Generate a Protection Bypass Secret**
|
|
37
|
+
- Under "Protection Bypass for Automation", click **Generate Secret**
|
|
38
|
+
- Copy the generated secret securely
|
|
39
|
+
|
|
40
|
+
3. **Using the Bypass Secret**
|
|
41
|
+
|
|
42
|
+
The secret can be used in two ways:
|
|
43
|
+
|
|
44
|
+
**As a Header:**
|
|
45
|
+
```bash
|
|
46
|
+
curl -H "x-vercel-protection-bypass: <secret>" https://your-preview-url.vercel.app
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**As a Query Parameter:**
|
|
50
|
+
```
|
|
51
|
+
https://your-preview-url.vercel.app?x-vercel-protection-bypass=<secret>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
4. **For Browser-Based Testing**
|
|
55
|
+
- Append `?x-vercel-protection-bypass=<secret>` to the preview URL
|
|
56
|
+
- The secret will be stored in a cookie for subsequent requests
|
|
57
|
+
|
|
58
|
+
### Alternative: Disable Protection for Previews
|
|
59
|
+
|
|
60
|
+
If protection bypass is not suitable, users can disable protection for preview deployments:
|
|
61
|
+
|
|
62
|
+
1. Go to **Settings** → **Deployment Protection**
|
|
63
|
+
2. Set "Vercel Authentication" to **Only Production Deployments** or **Disabled**
|
|
64
|
+
|
|
65
|
+
<IMPORTANT>
|
|
66
|
+
If you cannot access a Vercel preview deployment due to authentication requirements, inform the user that they need to either:
|
|
67
|
+
1. Set up a Protection Bypass secret and provide it to you, OR
|
|
68
|
+
2. Disable Deployment Protection for preview deployments in their Vercel project settings
|
|
69
|
+
|
|
70
|
+
Do NOT repeatedly attempt to access protected URLs without the bypass secret.
|
|
71
|
+
</IMPORTANT>
|
|
72
|
+
|
|
73
|
+
## Environment Variables
|
|
74
|
+
|
|
75
|
+
Set environment variables in Vercel Dashboard under **Settings** → **Environment Variables**, or use the Vercel CLI:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
vercel env add MY_SECRET
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Access in your application:
|
|
82
|
+
```typescript
|
|
83
|
+
const secret = process.env.MY_SECRET;
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Vercel CLI Commands
|
|
87
|
+
|
|
88
|
+
Common Vercel CLI commands:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Login to Vercel
|
|
92
|
+
vercel login
|
|
93
|
+
|
|
94
|
+
# Deploy to preview
|
|
95
|
+
vercel
|
|
96
|
+
|
|
97
|
+
# Deploy to production
|
|
98
|
+
vercel --prod
|
|
99
|
+
|
|
100
|
+
# List deployments
|
|
101
|
+
vercel ls
|
|
102
|
+
|
|
103
|
+
# View deployment logs
|
|
104
|
+
vercel logs <deployment-url>
|
|
105
|
+
|
|
106
|
+
# Pull environment variables locally
|
|
107
|
+
vercel env pull
|
|
108
|
+
```
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vercel
|
|
3
|
+
description: Deploy and manage applications on Vercel, including preview deployments and deployment protection. Use when working with Vercel-hosted projects or configuring Vercel deployments.
|
|
4
|
+
triggers:
|
|
5
|
+
- vercel
|
|
6
|
+
- preview deployment
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Vercel Deployment Guide
|
|
10
|
+
|
|
11
|
+
## Deployment Protection and Agent Access
|
|
12
|
+
|
|
13
|
+
Vercel deployments may have **Deployment Protection** enabled, which requires authentication to access preview deployments. This can block automated testing and agent access to preview URLs.
|
|
14
|
+
|
|
15
|
+
### Identifying Protected Deployments
|
|
16
|
+
|
|
17
|
+
If you encounter a login page or authentication requirement when accessing a Vercel preview URL, the deployment has protection enabled. Signs include:
|
|
18
|
+
- Redirect to `vercel.com/login` or SSO login page
|
|
19
|
+
- 401/403 errors when accessing the deployment
|
|
20
|
+
- Preview URLs that require Vercel team membership
|
|
21
|
+
|
|
22
|
+
### Enabling Agent Access with Protection Bypass
|
|
23
|
+
|
|
24
|
+
To allow agents and automated systems to access protected deployments, users need to set up **Protection Bypass for Automation**:
|
|
25
|
+
|
|
26
|
+
1. **Navigate to Project Settings**
|
|
27
|
+
- Go to the Vercel Dashboard
|
|
28
|
+
- Select the project
|
|
29
|
+
- Click on **Settings** → **Deployment Protection**
|
|
30
|
+
|
|
31
|
+
2. **Generate a Protection Bypass Secret**
|
|
32
|
+
- Under "Protection Bypass for Automation", click **Generate Secret**
|
|
33
|
+
- Copy the generated secret securely
|
|
34
|
+
|
|
35
|
+
3. **Using the Bypass Secret**
|
|
36
|
+
|
|
37
|
+
The secret can be used in two ways:
|
|
38
|
+
|
|
39
|
+
**As a Header:**
|
|
40
|
+
```bash
|
|
41
|
+
curl -H "x-vercel-protection-bypass: <secret>" https://your-preview-url.vercel.app
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**As a Query Parameter:**
|
|
45
|
+
```
|
|
46
|
+
https://your-preview-url.vercel.app?x-vercel-protection-bypass=<secret>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
4. **For Browser-Based Testing**
|
|
50
|
+
- Append `?x-vercel-protection-bypass=<secret>` to the preview URL
|
|
51
|
+
- The secret will be stored in a cookie for subsequent requests
|
|
52
|
+
|
|
53
|
+
### Alternative: Disable Protection for Previews
|
|
54
|
+
|
|
55
|
+
If protection bypass is not suitable, users can disable protection for preview deployments:
|
|
56
|
+
|
|
57
|
+
1. Go to **Settings** → **Deployment Protection**
|
|
58
|
+
2. Set "Vercel Authentication" to **Only Production Deployments** or **Disabled**
|
|
59
|
+
|
|
60
|
+
<IMPORTANT>
|
|
61
|
+
If you cannot access a Vercel preview deployment due to authentication requirements, inform the user that they need to either:
|
|
62
|
+
1. Set up a Protection Bypass secret and provide it to you, OR
|
|
63
|
+
2. Disable Deployment Protection for preview deployments in their Vercel project settings
|
|
64
|
+
|
|
65
|
+
Do NOT repeatedly attempt to access protected URLs without the bypass secret.
|
|
66
|
+
</IMPORTANT>
|
|
67
|
+
|
|
68
|
+
## Environment Variables
|
|
69
|
+
|
|
70
|
+
Set environment variables in Vercel Dashboard under **Settings** → **Environment Variables**, or use the Vercel CLI:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
vercel env add MY_SECRET
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Access in your application:
|
|
77
|
+
```typescript
|
|
78
|
+
const secret = process.env.MY_SECRET;
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Vercel CLI Commands
|
|
82
|
+
|
|
83
|
+
Common Vercel CLI commands:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Login to Vercel
|
|
87
|
+
vercel login
|
|
88
|
+
|
|
89
|
+
# Deploy to preview
|
|
90
|
+
vercel
|
|
91
|
+
|
|
92
|
+
# Deploy to production
|
|
93
|
+
vercel --prod
|
|
94
|
+
|
|
95
|
+
# List deployments
|
|
96
|
+
vercel ls
|
|
97
|
+
|
|
98
|
+
# View deployment logs
|
|
99
|
+
vercel logs <deployment-url>
|
|
100
|
+
|
|
101
|
+
# Pull environment variables locally
|
|
102
|
+
vercel env pull
|
|
103
|
+
```
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import importlib.util
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def _load_fetch_skill_module():
|
|
8
|
+
repo_root = Path(__file__).resolve().parents[1]
|
|
9
|
+
module_path = repo_root / 'skills' / 'add-skill' / 'scripts' / 'fetch_skill.py'
|
|
10
|
+
spec = importlib.util.spec_from_file_location('fetch_skill', module_path)
|
|
11
|
+
assert spec and spec.loader
|
|
12
|
+
module = importlib.util.module_from_spec(spec)
|
|
13
|
+
spec.loader.exec_module(module)
|
|
14
|
+
return module
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def test_fetch_skill_installs_into_agents_skills_dir(tmp_path: Path, monkeypatch):
|
|
18
|
+
fetch_skill_mod = _load_fetch_skill_module()
|
|
19
|
+
fetch_skill = fetch_skill_mod.fetch_skill
|
|
20
|
+
monkeypatch.setattr('subprocess.run', lambda *args, **kwargs: None)
|
|
21
|
+
|
|
22
|
+
skill_path = 'skills/example-skill'
|
|
23
|
+
src_skill_dir = tmp_path / skill_path
|
|
24
|
+
src_skill_dir.mkdir(parents=True)
|
|
25
|
+
(src_skill_dir / 'SKILL.md').write_text('# Example skill\n')
|
|
26
|
+
|
|
27
|
+
class _FakeTempDir:
|
|
28
|
+
def __enter__(self):
|
|
29
|
+
return str(tmp_path)
|
|
30
|
+
|
|
31
|
+
def __exit__(self, exc_type, exc, tb):
|
|
32
|
+
return False
|
|
33
|
+
|
|
34
|
+
monkeypatch.setattr('tempfile.TemporaryDirectory', lambda: _FakeTempDir())
|
|
35
|
+
|
|
36
|
+
workspace = tmp_path / 'workspace'
|
|
37
|
+
workspace.mkdir()
|
|
38
|
+
|
|
39
|
+
installed_path = Path(fetch_skill('OpenHands/extensions/' + skill_path, str(workspace), force=True))
|
|
40
|
+
|
|
41
|
+
assert installed_path == workspace / '.agents' / 'skills' / 'example-skill'
|
|
42
|
+
assert (installed_path / 'SKILL.md').exists()
|