@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,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "slack-standup-digest",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Create an automation that generates an async standup digest from Slack. Searches selected channels for messages since the previous workday, groups updates by project, highlights blockers and decisions, and posts a summary to a target channel.",
|
|
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
|
+
"slack",
|
|
14
|
+
"standup",
|
|
15
|
+
"digest",
|
|
16
|
+
"summary",
|
|
17
|
+
"daily",
|
|
18
|
+
"cron",
|
|
19
|
+
"automation"
|
|
20
|
+
]
|
|
21
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Slack Standup Digest
|
|
2
|
+
|
|
3
|
+
Create an automation that generates an async standup digest from Slack channels.
|
|
4
|
+
|
|
5
|
+
## Triggers
|
|
6
|
+
|
|
7
|
+
This skill is activated by keywords:
|
|
8
|
+
|
|
9
|
+
- `standup digest`
|
|
10
|
+
- `daily summary from Slack`
|
|
11
|
+
- `async standup automation`
|
|
12
|
+
|
|
13
|
+
## Features
|
|
14
|
+
|
|
15
|
+
- **Scans selected Slack channels for recent messages**
|
|
16
|
+
- **Groups updates by project with blockers and decisions highlighted**
|
|
17
|
+
- **Configurable schedule and timezone**
|
|
18
|
+
- **Auto-post or draft mode for review before posting**
|
|
19
|
+
- **Smart lookback**: Friday→Monday for weekend gaps
|
|
20
|
+
|
|
21
|
+
## Prerequisites
|
|
22
|
+
|
|
23
|
+
Slack MCP installed in Settings → MCP
|
|
24
|
+
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
Ask OpenHands:
|
|
28
|
+
|
|
29
|
+
> "Set up a daily standup digest that summarizes #engineering and
|
|
30
|
+
> #frontend channels and posts to #standup at 9 AM ET"
|
|
31
|
+
|
|
32
|
+
## See Also
|
|
33
|
+
|
|
34
|
+
- [SKILL.md](SKILL.md) — Full setup workflow reference
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: slack-standup-digest
|
|
3
|
+
description: >
|
|
4
|
+
Create an automation that generates an async standup digest from Slack.
|
|
5
|
+
Searches selected channels for messages since the previous workday, groups
|
|
6
|
+
updates by project, highlights blockers and decisions, and posts a summary
|
|
7
|
+
to a target channel.
|
|
8
|
+
triggers:
|
|
9
|
+
- /standup-digest:setup
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Slack Standup Digest Automation
|
|
13
|
+
|
|
14
|
+
Set up a recurring automation that summarizes Slack activity into an async
|
|
15
|
+
standup digest.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Prerequisites
|
|
20
|
+
|
|
21
|
+
### Required integration
|
|
22
|
+
|
|
23
|
+
- **Slack MCP** must be installed in Settings → MCP.
|
|
24
|
+
|
|
25
|
+
### Information to collect
|
|
26
|
+
|
|
27
|
+
Ask the user for:
|
|
28
|
+
|
|
29
|
+
1. **Source channels** — which Slack channels to scan for updates (e.g. `#engineering`, `#frontend`, `#backend`)
|
|
30
|
+
2. **Target channel** — where the digest should be posted (e.g. `#standup`, `#team-updates`)
|
|
31
|
+
3. **Schedule** — when should the digest run? Default: weekday mornings at 9 AM
|
|
32
|
+
4. **Timezone** — user's timezone (e.g. `America/New_York`, `Europe/London`)
|
|
33
|
+
5. **Auto-post or draft** — should the digest post automatically, or be saved for the user to review and approve first?
|
|
34
|
+
6. **Grouping** — how should updates be organized? Default: by project/channel, with sections for shipped work, active work, blockers, and decisions
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Setup Workflow
|
|
39
|
+
|
|
40
|
+
### Step 1 — Verify Slack MCP access
|
|
41
|
+
|
|
42
|
+
Confirm the Slack MCP integration is working:
|
|
43
|
+
```
|
|
44
|
+
Use the Slack MCP to search for recent messages in one of the source channels.
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
If it fails, tell the user to install the Slack MCP integration first.
|
|
48
|
+
|
|
49
|
+
### Step 2 — Configure the schedule
|
|
50
|
+
|
|
51
|
+
Build a cron schedule from the user's preferences:
|
|
52
|
+
- Weekday mornings at 9 AM ET: `0 9 * * 1-5` with timezone `America/New_York`
|
|
53
|
+
- Daily at 8 AM UTC: `0 8 * * *`
|
|
54
|
+
|
|
55
|
+
### Step 3 — Build the digest prompt
|
|
56
|
+
|
|
57
|
+
Construct a prompt that includes:
|
|
58
|
+
- Source channels to scan
|
|
59
|
+
- Target channel for posting
|
|
60
|
+
- Lookback window (typically "since previous workday" — Friday→Monday for Monday digests)
|
|
61
|
+
- Grouping structure (by project, by channel, etc.)
|
|
62
|
+
- Whether to auto-post or draft
|
|
63
|
+
- What to highlight: blockers, decisions, shipped items, unanswered questions
|
|
64
|
+
|
|
65
|
+
### Step 4 — Create the automation
|
|
66
|
+
|
|
67
|
+
Read the Automation backend URL and auth from `<RUNTIME_SERVICES>`:
|
|
68
|
+
- Use the **Automation backend** `url_from_agent` as `OPENHANDS_HOST`
|
|
69
|
+
- Auth: `X-Session-API-Key: $OPENHANDS_AUTOMATION_API_KEY`
|
|
70
|
+
|
|
71
|
+
Use the **prompt preset** endpoint:
|
|
72
|
+
```bash
|
|
73
|
+
curl -s -X POST "${OPENHANDS_HOST}/api/automation/v1/preset/prompt" \
|
|
74
|
+
-H "X-Session-API-Key: $OPENHANDS_AUTOMATION_API_KEY" \
|
|
75
|
+
-H "Content-Type: application/json" \
|
|
76
|
+
-d '{
|
|
77
|
+
"name": "Slack Standup Digest",
|
|
78
|
+
"prompt": "<constructed digest prompt>",
|
|
79
|
+
"trigger": {"type": "cron", "schedule": "<schedule>", "timezone": "<tz>"}
|
|
80
|
+
}'
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Step 5 — Confirm
|
|
84
|
+
|
|
85
|
+
Tell the user:
|
|
86
|
+
> ✅ **Slack Standup Digest** is running!
|
|
87
|
+
>
|
|
88
|
+
> - Automation ID: `{id}`
|
|
89
|
+
> - Source channels: `{channel list}`
|
|
90
|
+
> - Target channel: `{target}`
|
|
91
|
+
> - Schedule: `{cron description}`
|
|
92
|
+
> - Mode: `{auto-post or draft}`
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
# auto-generated by sync_extensions.py
|
|
3
|
+
description: Create an automation that generates an async standup digest from Slack. Searches selected channels for messages since the previous workday, groups updates by project, highlights blockers and decisions, and posts a summary to a target channel.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Read and follow the complete instructions in the SKILL.md file located in this skill's directory.
|
|
7
|
+
|
|
8
|
+
$ARGUMENTS
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "spark-version-upgrade",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Upgrade Apache Spark applications between major versions (2.x\u21923.x, 3.x\u21924.x). Covers build files, deprecated APIs, configuration changes, SQL/DataFrame updates, and test validation.",
|
|
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
|
+
"spark",
|
|
14
|
+
"upgrade",
|
|
15
|
+
"migration",
|
|
16
|
+
"pyspark",
|
|
17
|
+
"scala",
|
|
18
|
+
"big-data"
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# spark-version-upgrade
|
|
2
|
+
|
|
3
|
+
Upgrade Apache Spark applications between major versions (2.x→3.x, 3.x→4.x). Covers build files, deprecated APIs, configuration changes, SQL/DataFrame updates, and test validation.
|
|
4
|
+
|
|
5
|
+
## Triggers
|
|
6
|
+
|
|
7
|
+
This skill is activated by the following keywords:
|
|
8
|
+
|
|
9
|
+
- `spark upgrade`
|
|
10
|
+
- `spark migration`
|
|
11
|
+
- `spark version`
|
|
12
|
+
- `upgrade spark`
|
|
13
|
+
- `spark 3`
|
|
14
|
+
- `spark 4`
|
|
15
|
+
- `pyspark upgrade`
|
|
16
|
+
|
|
17
|
+
## Overview
|
|
18
|
+
|
|
19
|
+
This skill provides a structured, six-phase workflow for upgrading Apache Spark applications:
|
|
20
|
+
|
|
21
|
+
| Phase | Description |
|
|
22
|
+
|-------|-------------|
|
|
23
|
+
| 1. Inventory & Impact Analysis | Scan the codebase, identify Spark usage, document scope |
|
|
24
|
+
| 2. Build File Updates | Bump Spark/Scala/Java versions in Maven, SBT, Gradle, or pip |
|
|
25
|
+
| 3. API Migration | Replace removed/deprecated APIs (SQLContext, Accumulator, etc.) |
|
|
26
|
+
| 4. Configuration Migration | Rename/remove deprecated Spark config properties |
|
|
27
|
+
| 5. SQL & DataFrame Migration | Fix breaking SQL behavior (ANSI mode, type coercion, date parsing) |
|
|
28
|
+
| 6. Test Validation | Compile, test, compare output to pre-upgrade baseline |
|
|
29
|
+
|
|
30
|
+
## Supported Upgrade Paths
|
|
31
|
+
|
|
32
|
+
- **Spark 2.x → 3.x** — Major API removals (SQLContext, HiveContext, Accumulator v1), Scala 2.12/2.13
|
|
33
|
+
- **Spark 3.x → 4.x** — ANSI mode default, Java 17+ requirement, Scala 2.13 only, legacy flag removal
|
|
34
|
+
|
|
35
|
+
## Languages & Build Systems
|
|
36
|
+
|
|
37
|
+
- **Languages**: Scala, Java, Python (PySpark)
|
|
38
|
+
- **Build systems**: Maven, SBT, Gradle, pip/uv
|
|
39
|
+
|
|
40
|
+
## Reference Material
|
|
41
|
+
|
|
42
|
+
- [Apache Spark Migration Guide](https://spark.apache.org/docs/latest/migration-guide.html) — The official, up-to-date guide covering API removals, configuration changes, SQL behavior, PySpark, Structured Streaming, and MLlib for every Spark release
|
|
43
|
+
|
|
44
|
+
## Example Usage
|
|
45
|
+
|
|
46
|
+
Ask the agent:
|
|
47
|
+
|
|
48
|
+
> "Upgrade this project from Spark 2.4 to Spark 3.5"
|
|
49
|
+
|
|
50
|
+
> "Migrate our PySpark codebase to Spark 4.0"
|
|
51
|
+
|
|
52
|
+
> "Fix all Spark deprecation warnings in this repo"
|
|
53
|
+
|
|
54
|
+
The agent will follow the six-phase workflow, producing a `spark_upgrade_impact.md` document and systematically updating build files, code, configuration, and SQL queries.
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spark-version-upgrade
|
|
3
|
+
description: Upgrade Apache Spark applications between major versions (2.x→3.x, 3.x→4.x). Covers build files, deprecated APIs, configuration changes, SQL/DataFrame updates, and test validation.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Requires Java 8+/11+/17+, Scala 2.12/2.13, Maven/Gradle/SBT, Apache Spark
|
|
6
|
+
triggers:
|
|
7
|
+
- spark upgrade
|
|
8
|
+
- spark migration
|
|
9
|
+
- spark version
|
|
10
|
+
- upgrade spark
|
|
11
|
+
- spark 3
|
|
12
|
+
- spark 4
|
|
13
|
+
- pyspark upgrade
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
Upgrade Apache Spark applications between major versions with a structured, phase-by-phase workflow.
|
|
17
|
+
|
|
18
|
+
## When to Use
|
|
19
|
+
|
|
20
|
+
- Migrating from Spark 2.x → 3.x or Spark 3.x → 4.x
|
|
21
|
+
- Updating PySpark, Spark SQL, or Structured Streaming applications
|
|
22
|
+
- Resolving deprecation warnings before a Spark version bump
|
|
23
|
+
|
|
24
|
+
## Workflow Overview
|
|
25
|
+
|
|
26
|
+
1. **Inventory & Impact Analysis** — Scan the codebase and assess scope
|
|
27
|
+
2. **Build File Updates** — Bump Spark/Scala/Java dependencies
|
|
28
|
+
3. **API Migration** — Replace deprecated and removed APIs
|
|
29
|
+
4. **Configuration Migration** — Update Spark config properties
|
|
30
|
+
5. **SQL & DataFrame Migration** — Fix query-level breaking changes
|
|
31
|
+
6. **Test Validation** — Compile, run tests, verify results
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Phase 1: Inventory & Impact Analysis
|
|
36
|
+
|
|
37
|
+
Before changing any code, assess what needs to change. Read the official Apache Spark migration guide for the target version — it documents every API removal, config rename, and behavioral change per release:
|
|
38
|
+
https://spark.apache.org/docs/latest/migration-guide.html
|
|
39
|
+
|
|
40
|
+
### Checklist
|
|
41
|
+
|
|
42
|
+
- [ ] Read the migration guide section for the target Spark version
|
|
43
|
+
- [ ] Identify current Spark version (check `pom.xml`, `build.sbt`, `build.gradle`, or `requirements.txt`)
|
|
44
|
+
- [ ] Identify target Spark version
|
|
45
|
+
- [ ] Search for deprecated APIs: `grep -rn 'import org.apache.spark' --include='*.scala' --include='*.java' --include='*.py'`
|
|
46
|
+
- [ ] List all Spark config properties: `grep -rn 'spark\.' --include='*.conf' --include='*.properties' --include='*.scala' --include='*.java' --include='*.py' | grep -v 'test'`
|
|
47
|
+
- [ ] Check for custom `SparkSession` or `SparkContext` extensions
|
|
48
|
+
- [ ] Identify connector dependencies (Hive, Kafka, Cassandra, Delta, Iceberg)
|
|
49
|
+
- [ ] Document findings in `spark_upgrade_impact.md`
|
|
50
|
+
|
|
51
|
+
### Output
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
spark_upgrade_impact.md # Summary of affected files, APIs, and configs
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Phase 2: Build File Updates
|
|
60
|
+
|
|
61
|
+
Update dependency versions and resolve compilation.
|
|
62
|
+
|
|
63
|
+
### Maven (`pom.xml`)
|
|
64
|
+
|
|
65
|
+
```xml
|
|
66
|
+
<!-- Update Spark version property -->
|
|
67
|
+
<spark.version>3.5.1</spark.version> <!-- or 4.0.0 -->
|
|
68
|
+
<scala.version>2.13.12</scala.version> <!-- Spark 3.x: 2.12/2.13; Spark 4.x: 2.13 -->
|
|
69
|
+
|
|
70
|
+
<!-- Update artifact IDs if Scala cross-version changed -->
|
|
71
|
+
<artifactId>spark-core_2.13</artifactId>
|
|
72
|
+
<artifactId>spark-sql_2.13</artifactId>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### SBT (`build.sbt`)
|
|
76
|
+
|
|
77
|
+
```scala
|
|
78
|
+
val sparkVersion = "3.5.1" // or "4.0.0"
|
|
79
|
+
scalaVersion := "2.13.12"
|
|
80
|
+
|
|
81
|
+
libraryDependencies += "org.apache.spark" %% "spark-core" % sparkVersion
|
|
82
|
+
libraryDependencies += "org.apache.spark" %% "spark-sql" % sparkVersion
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Gradle (`build.gradle`)
|
|
86
|
+
|
|
87
|
+
```groovy
|
|
88
|
+
ext {
|
|
89
|
+
sparkVersion = '3.5.1' // or '4.0.0'
|
|
90
|
+
}
|
|
91
|
+
dependencies {
|
|
92
|
+
implementation "org.apache.spark:spark-core_2.13:${sparkVersion}"
|
|
93
|
+
implementation "org.apache.spark:spark-sql_2.13:${sparkVersion}"
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### PySpark (`requirements.txt` / `pyproject.toml`)
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
pyspark==3.5.1 # or 4.0.0
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Checklist
|
|
104
|
+
|
|
105
|
+
- [ ] Update Spark version in build file
|
|
106
|
+
- [ ] Update Scala version if crossing 2.12→2.13 boundary
|
|
107
|
+
- [ ] Update Java source/target level if required (Spark 4.x requires Java 17+)
|
|
108
|
+
- [ ] Update connector library versions to match new Spark version
|
|
109
|
+
- [ ] Resolve dependency conflicts (`mvn dependency:tree` / `sbt dependencyTree`)
|
|
110
|
+
- [ ] Confirm project compiles (errors at this stage are expected — they guide Phase 3)
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Phase 3: API Migration
|
|
115
|
+
|
|
116
|
+
Replace removed and deprecated APIs. Work through compiler errors systematically.
|
|
117
|
+
|
|
118
|
+
### Common Patterns
|
|
119
|
+
|
|
120
|
+
Consult the official Apache Spark migration guide for the complete list of changes for each version:
|
|
121
|
+
https://spark.apache.org/docs/latest/migration-guide.html
|
|
122
|
+
|
|
123
|
+
#### SparkSession Creation (2.x → 3.x)
|
|
124
|
+
|
|
125
|
+
```scala
|
|
126
|
+
// BEFORE (Spark 1.x/2.x)
|
|
127
|
+
val sc = new SparkContext(conf)
|
|
128
|
+
val sqlContext = new SQLContext(sc)
|
|
129
|
+
|
|
130
|
+
// AFTER (Spark 2.x+/3.x)
|
|
131
|
+
val spark = SparkSession.builder()
|
|
132
|
+
.config(conf)
|
|
133
|
+
.enableHiveSupport() // if needed
|
|
134
|
+
.getOrCreate()
|
|
135
|
+
val sc = spark.sparkContext
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
#### RDD to DataFrame (2.x → 3.x)
|
|
139
|
+
|
|
140
|
+
```scala
|
|
141
|
+
// BEFORE
|
|
142
|
+
rdd.toDF() // implicit from SQLContext
|
|
143
|
+
|
|
144
|
+
// AFTER
|
|
145
|
+
import spark.implicits._
|
|
146
|
+
rdd.toDF() // implicit from SparkSession
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
#### Accumulator API (2.x → 3.x)
|
|
150
|
+
|
|
151
|
+
```scala
|
|
152
|
+
// BEFORE
|
|
153
|
+
val acc = sc.accumulator(0)
|
|
154
|
+
|
|
155
|
+
// AFTER
|
|
156
|
+
val acc = sc.longAccumulator("name")
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Checklist
|
|
160
|
+
|
|
161
|
+
- [ ] Replace `SQLContext` / `HiveContext` with `SparkSession`
|
|
162
|
+
- [ ] Replace deprecated `Accumulator` with `AccumulatorV2`
|
|
163
|
+
- [ ] Update `DataFrame` → `Dataset[Row]` where needed
|
|
164
|
+
- [ ] Replace removed `RDD.mapPartitionsWithContext` with `mapPartitions`
|
|
165
|
+
- [ ] Fix `SparkConf` deprecated setters
|
|
166
|
+
- [ ] Update custom `UserDefinedFunction` registration
|
|
167
|
+
- [ ] Migrate `Experimental` / `DeveloperApi` usages that were removed
|
|
168
|
+
- [ ] Verify all compilation errors from Phase 2 are resolved
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Phase 4: Configuration Migration
|
|
173
|
+
|
|
174
|
+
Spark renames and removes configuration properties between versions. The official migration guide documents every renamed and removed property per release:
|
|
175
|
+
https://spark.apache.org/docs/latest/migration-guide.html
|
|
176
|
+
|
|
177
|
+
### Checklist
|
|
178
|
+
|
|
179
|
+
- [ ] Rename deprecated config keys (e.g., `spark.shuffle.file.buffer.kb` → `spark.shuffle.file.buffer`)
|
|
180
|
+
- [ ] Update removed configs to their replacements
|
|
181
|
+
- [ ] Review `spark-defaults.conf`, application code, and submit scripts
|
|
182
|
+
- [ ] Check for hardcoded config values in test fixtures
|
|
183
|
+
- [ ] Verify `SparkSession.builder().config(...)` calls use current property names
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Phase 5: SQL & DataFrame Migration
|
|
188
|
+
|
|
189
|
+
Spark SQL behavior changes between versions can silently alter query results.
|
|
190
|
+
|
|
191
|
+
### Key Breaking Changes (2.x → 3.x)
|
|
192
|
+
|
|
193
|
+
- `CAST` to integer no longer truncates silently — set `spark.sql.ansi.enabled` if needed
|
|
194
|
+
- `FROM` clause is required in `SELECT` (no more `SELECT 1`)
|
|
195
|
+
- Column resolution order changed in subqueries
|
|
196
|
+
- `spark.sql.legacy.timeParserPolicy` controls date/time parsing behavior
|
|
197
|
+
|
|
198
|
+
### Key Breaking Changes (3.x → 4.x)
|
|
199
|
+
|
|
200
|
+
- ANSI mode is default (`spark.sql.ansi.enabled=true`)
|
|
201
|
+
- Stricter type coercion in comparisons
|
|
202
|
+
- `spark.sql.legacy.*` flags removed
|
|
203
|
+
|
|
204
|
+
### Checklist
|
|
205
|
+
|
|
206
|
+
- [ ] Audit SQL strings and DataFrame expressions for changed behavior
|
|
207
|
+
- [ ] Add explicit `CAST` where implicit coercion relied on legacy behavior
|
|
208
|
+
- [ ] Update date/time format patterns to match new parser
|
|
209
|
+
- [ ] Test SQL queries with representative data and compare output to pre-upgrade baseline
|
|
210
|
+
- [ ] Set `spark.sql.legacy.*` flags temporarily if needed for phased migration
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Phase 6: Test Validation
|
|
215
|
+
|
|
216
|
+
### Checklist
|
|
217
|
+
|
|
218
|
+
- [ ] All code compiles without errors
|
|
219
|
+
- [ ] All existing unit tests pass
|
|
220
|
+
- [ ] All existing integration tests pass
|
|
221
|
+
- [ ] Run Spark jobs locally with sample data and compare output to pre-upgrade baseline
|
|
222
|
+
- [ ] No deprecation warnings remain (or are documented with a migration timeline)
|
|
223
|
+
- [ ] Update CI/CD pipeline to use new Spark version
|
|
224
|
+
- [ ] Document any `spark.sql.legacy.*` flags that are set temporarily
|
|
225
|
+
|
|
226
|
+
## Done When
|
|
227
|
+
|
|
228
|
+
✓ Project compiles against target Spark version
|
|
229
|
+
✓ All tests pass
|
|
230
|
+
✓ No removed APIs remain in code
|
|
231
|
+
✓ Configuration properties are current
|
|
232
|
+
✓ SQL queries produce correct results
|
|
233
|
+
✓ Upgrade impact documented in `spark_upgrade_impact.md`
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ssh",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Establish and manage SSH connections to remote machines, including key generation, configuration, and file transfers. Use when connecting to remote servers, executing remote commands, or transferri...",
|
|
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
|
+
"ssh",
|
|
14
|
+
"remote",
|
|
15
|
+
"scp",
|
|
16
|
+
"server"
|
|
17
|
+
]
|
|
18
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Ssh
|
|
2
|
+
|
|
3
|
+
Establish and manage SSH connections to remote machines, including key generation, configuration, and file transfers. Use when connecting to remote servers, executing remote commands, or transferring files via SCP.
|
|
4
|
+
|
|
5
|
+
## Triggers
|
|
6
|
+
|
|
7
|
+
This skill is activated by the following keywords:
|
|
8
|
+
|
|
9
|
+
- `ssh`
|
|
10
|
+
- `remote server`
|
|
11
|
+
- `remote machine`
|
|
12
|
+
- `remote host`
|
|
13
|
+
- `remote connection`
|
|
14
|
+
- `secure shell`
|
|
15
|
+
- `ssh keys`
|
|
16
|
+
|
|
17
|
+
## Details
|
|
18
|
+
|
|
19
|
+
# SSH Skill
|
|
20
|
+
|
|
21
|
+
This skill provides capabilities for establishing and managing SSH connections to remote machines.
|
|
22
|
+
|
|
23
|
+
## Capabilities
|
|
24
|
+
|
|
25
|
+
- Establish SSH connections using password or key-based authentication
|
|
26
|
+
- Generate and manage SSH key pairs
|
|
27
|
+
- Configure SSH for easier connections
|
|
28
|
+
- Execute commands on remote machines
|
|
29
|
+
- Transfer files between local and remote machines
|
|
30
|
+
- Manage SSH configurations and known hosts
|
|
31
|
+
|
|
32
|
+
## Authentication Methods
|
|
33
|
+
|
|
34
|
+
### Password Authentication
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
ssh username@hostname
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
When prompted, you should ask the user for their password or a private key.
|
|
41
|
+
|
|
42
|
+
### Key-Based Authentication
|
|
43
|
+
|
|
44
|
+
Generate a new SSH key pair:
|
|
45
|
+
```bash
|
|
46
|
+
ssh-keygen -t ed25519 -f ~/.ssh/key_name -C "comment" -N ""
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Copy the public key to the remote server:
|
|
50
|
+
```bash
|
|
51
|
+
ssh-copy-id -i ~/.ssh/key_name.pub username@hostname
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Connect using the private key:
|
|
55
|
+
```bash
|
|
56
|
+
ssh -i ~/.ssh/key_name username@hostname
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## SSH Configuration
|
|
60
|
+
|
|
61
|
+
Create or edit the SSH config file for easier connections:
|
|
62
|
+
```bash
|
|
63
|
+
mkdir -p ~/.ssh
|
|
64
|
+
cat > ~/.ssh/config << 'EOF'
|
|
65
|
+
Host alias
|
|
66
|
+
HostName hostname_or_ip
|
|
67
|
+
User username
|
|
68
|
+
IdentityFile ~/.ssh/key_name
|
|
69
|
+
Port 22
|
|
70
|
+
ServerAliveInterval 60
|
|
71
|
+
EOF
|
|
72
|
+
chmod 600 ~/.ssh/config
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Then connect using the alias:
|
|
76
|
+
```bash
|
|
77
|
+
ssh alias
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Common SSH Options
|
|
81
|
+
|
|
82
|
+
- `-p PORT`: Connect to a specific port
|
|
83
|
+
- `-X`: Enable X11 forwarding
|
|
84
|
+
- `-L local_port:remote_host:remote_port`: Set up local port forwarding
|
|
85
|
+
- `-R remote_port:local_host:local_port`: Set up remote port forwarding
|
|
86
|
+
- `-N`: Do not execute a remote command (useful for port forwarding)
|
|
87
|
+
- `-f`: Run in background
|
|
88
|
+
- `-v`: Verbose mode (add more v's for increased verbosity)
|
|
89
|
+
|
|
90
|
+
## File Transfer with SCP
|
|
91
|
+
|
|
92
|
+
Copy a file to the remote server:
|
|
93
|
+
```bash
|
|
94
|
+
scp /path/to/local/file username@hostname:/path/to/remote/directory/
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Copy a file from the remote server:
|
|
98
|
+
```bash
|
|
99
|
+
scp username@hostname:/path/to/remote/file /path/to/local/directory/
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Copy a directory recursively:
|
|
103
|
+
```bash
|
|
104
|
+
scp -r /path/to/local/directory username@hostname:/path/to/remote/directory/
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## SSH Agent
|
|
108
|
+
|
|
109
|
+
Start the SSH agent:
|
|
110
|
+
```bash
|
|
111
|
+
eval "$(ssh-agent -s)"
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Add a key to the agent:
|
|
115
|
+
```bash
|
|
116
|
+
ssh-add ~/.ssh/key_name
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Troubleshooting
|
|
120
|
+
|
|
121
|
+
- Check SSH service status on remote: `systemctl status sshd`
|
|
122
|
+
- Verify SSH port is open: `nc -zv hostname 22`
|
|
123
|
+
- Debug connection issues: `ssh -vvv username@hostname`
|
|
124
|
+
- Check permissions: SSH private keys should have 600 permissions (`chmod 600 ~/.ssh/key_name`)
|
|
125
|
+
- Verify known_hosts: If host key changed, remove the old entry with `ssh-keygen -R hostname`
|
|
126
|
+
|
|
127
|
+
## Secure SSH Key Management
|
|
128
|
+
|
|
129
|
+
### Local Storage with Proper Permissions
|
|
130
|
+
|
|
131
|
+
The most basic approach is to ensure proper file permissions:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
# Set correct permissions for private keys
|
|
135
|
+
chmod 600 ~/.ssh/id_ed25519
|
|
136
|
+
# Set correct permissions for public keys
|
|
137
|
+
chmod 644 ~/.ssh/id_ed25519.pub
|
|
138
|
+
# Set correct permissions for SSH directory
|
|
139
|
+
chmod 700 ~/.ssh
|
|
140
|
+
```
|