@openhands/extensions 0.1.0 → 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,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cobol-modernization
|
|
3
|
+
description: End-to-end COBOL to Java migration workflow. Handles build setup, mainframe dependency removal, and code migration with test validation.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Requires GnuCOBOL, Java 11+, Maven/Gradle, Python 3.13 with uv
|
|
6
|
+
triggers:
|
|
7
|
+
- cobol modernization
|
|
8
|
+
- cobol to java
|
|
9
|
+
- cobol migration
|
|
10
|
+
- mainframe migration
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
End-to-end workflow for migrating COBOL codebases to Java.
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
This plugin orchestrates a multi-phase COBOL modernization project:
|
|
18
|
+
|
|
19
|
+
1. **Build Setup** — Configure compilation for both COBOL and Java, create test fixtures
|
|
20
|
+
2. **Mainframe Planning** — Document transformations needed to remove mainframe dependencies
|
|
21
|
+
3. **Mainframe Removal** — Convert CICS/VSAM code to standard COBOL
|
|
22
|
+
4. **Java Migration** — Translate standardized COBOL to idiomatic Java
|
|
23
|
+
|
|
24
|
+
## Prerequisites
|
|
25
|
+
|
|
26
|
+
- GnuCOBOL compiler (`cobc`)
|
|
27
|
+
- Java 11+ with Maven or Gradle
|
|
28
|
+
- Python 3.13 with `uv`
|
|
29
|
+
- LLM API key (Anthropic or OpenAI)
|
|
30
|
+
|
|
31
|
+
## Quick Start
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
export LLM_API_KEY="your-api-key"
|
|
35
|
+
export LLM_MODEL="anthropic/claude-3-5-sonnet-20241022"
|
|
36
|
+
|
|
37
|
+
uv run python -m lc_sdk_examples.cobol_modernization --src-path /path/to/cobol/project
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Workflow Phases
|
|
41
|
+
|
|
42
|
+
### Phase 1: Build Setup
|
|
43
|
+
|
|
44
|
+
See [../build-setup/SKILL.md](../build-setup/SKILL.md)
|
|
45
|
+
|
|
46
|
+
Creates the foundation for the migration:
|
|
47
|
+
- COBOL compilation environment (GnuCOBOL)
|
|
48
|
+
- Java project structure (Maven/Gradle + JUnit 5)
|
|
49
|
+
- Test fixtures with golden outputs from COBOL execution
|
|
50
|
+
|
|
51
|
+
**Outputs:**
|
|
52
|
+
- `build_notes.md` — Build instructions
|
|
53
|
+
- `test-fixtures/` — Input/output test data
|
|
54
|
+
- `test_manifest.json` — Test case mapping
|
|
55
|
+
|
|
56
|
+
### Phase 2: Mainframe Planning
|
|
57
|
+
|
|
58
|
+
See [../mainframe-planning/SKILL.md](../mainframe-planning/SKILL.md)
|
|
59
|
+
|
|
60
|
+
Creates a transformation guide without modifying code:
|
|
61
|
+
- Maps CICS/VSAM constructs to standard COBOL equivalents
|
|
62
|
+
- Documents error handling replacements
|
|
63
|
+
- Identifies UI operations to stub
|
|
64
|
+
|
|
65
|
+
**Output:**
|
|
66
|
+
- `mainframe_dependency_removal_plan.md`
|
|
67
|
+
|
|
68
|
+
### Phase 3: Mainframe Removal
|
|
69
|
+
|
|
70
|
+
See [../mainfraime-removal/SKILL.md](../mainfraime-removal/SKILL.md)
|
|
71
|
+
|
|
72
|
+
Applies the transformation guide:
|
|
73
|
+
- Replaces EXEC CICS commands with file I/O
|
|
74
|
+
- Adds FILE STATUS checking
|
|
75
|
+
- Stubs BMS/screen operations
|
|
76
|
+
|
|
77
|
+
**Verification:**
|
|
78
|
+
- Code compiles with GnuCOBOL
|
|
79
|
+
- Runs with test fixtures
|
|
80
|
+
|
|
81
|
+
### Phase 4: Java Migration
|
|
82
|
+
|
|
83
|
+
See [../to-java-migration/SKILL.md](../to-java-migration/SKILL.md)
|
|
84
|
+
|
|
85
|
+
Translates to idiomatic Java:
|
|
86
|
+
- Proper Java conventions (not literal translations)
|
|
87
|
+
- JUnit tests using golden outputs
|
|
88
|
+
- COBOL references in comments
|
|
89
|
+
|
|
90
|
+
**Done when:**
|
|
91
|
+
- All code compiles
|
|
92
|
+
- All JUnit tests pass
|
|
93
|
+
- No TODOs or stubs remain
|
|
94
|
+
|
|
95
|
+
## Output Structure
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
your-project/
|
|
99
|
+
├── .lc-sdk/
|
|
100
|
+
│ ├── initial_batch_graph.json
|
|
101
|
+
│ ├── fixed_batch_graph.json
|
|
102
|
+
│ └── mainframe_dependency_removal_plan.md
|
|
103
|
+
├── test-fixtures/
|
|
104
|
+
│ ├── inputs/
|
|
105
|
+
│ └── expected_outputs/
|
|
106
|
+
├── test_manifest.json
|
|
107
|
+
├── src/main/java/
|
|
108
|
+
└── src/test/java/
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Troubleshooting
|
|
112
|
+
|
|
113
|
+
See [../../references/troubleshooting.md](../../references/troubleshooting.md) for common issues and solutions.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mainframe-removal
|
|
3
|
+
description: Apply mainframe dependency transformations to COBOL code using a pre-generated transformation guide. Converts CICS/VSAM constructs to standard COBOL.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Requires GnuCOBOL (cobc) for verification
|
|
6
|
+
triggers:
|
|
7
|
+
- remove mainframe
|
|
8
|
+
- cobol transformation
|
|
9
|
+
- cics removal
|
|
10
|
+
- standard cobol
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
Apply the transformations from a transformation guide to convert mainframe-specific COBOL to standard COBOL.
|
|
14
|
+
|
|
15
|
+
**Prerequisite**: A transformation guide must exist (see `cobol-mainframe-planning` skill).
|
|
16
|
+
|
|
17
|
+
## Transformation Requirements
|
|
18
|
+
|
|
19
|
+
### Data Operations
|
|
20
|
+
|
|
21
|
+
- Replace each CICS/VSAM construct with its standard COBOL equivalent per the plan
|
|
22
|
+
- Add FILE STATUS checks after EVERY file operation:
|
|
23
|
+
- Check for success (00) before proceeding
|
|
24
|
+
- Handle "not found" (23) distinctly from I/O errors (3x)
|
|
25
|
+
- Handle "file not exists" (35) at OPEN time
|
|
26
|
+
- Add explicit CLOSE statements in all code paths (including error paths)
|
|
27
|
+
|
|
28
|
+
### UI/Terminal Operations (BMS maps, SEND/RECEIVE)
|
|
29
|
+
|
|
30
|
+
- Replace with simple stubs or ACCEPT/DISPLAY statements
|
|
31
|
+
- Do NOT spend time replicating screen layouts
|
|
32
|
+
- Focus on preserving data flow, not UI fidelity
|
|
33
|
+
|
|
34
|
+
### Error Handling
|
|
35
|
+
|
|
36
|
+
- Replace CICS RESP/RESP2 checks with equivalent FILE STATUS logic
|
|
37
|
+
- Replace HANDLE CONDITION with explicit status checking after operations
|
|
38
|
+
- Ensure error paths don't leave files open
|
|
39
|
+
|
|
40
|
+
See [references/cics-transformation-examples.md](references/cics-transformation-examples.md) for before/after code examples.
|
|
41
|
+
|
|
42
|
+
## Verification
|
|
43
|
+
|
|
44
|
+
After transformation:
|
|
45
|
+
- Code MUST compile without errors
|
|
46
|
+
- Test with valid input → should execute core business logic
|
|
47
|
+
- Test with missing/invalid files → should fail gracefully, not crash
|
|
48
|
+
|
|
49
|
+
## Preserve
|
|
50
|
+
|
|
51
|
+
- All original business logic
|
|
52
|
+
- Data transformations and calculations
|
|
53
|
+
- Validation rules
|
|
54
|
+
|
|
55
|
+
## Checklist
|
|
56
|
+
|
|
57
|
+
- [ ] All EXEC CICS commands replaced
|
|
58
|
+
- [ ] FILE STATUS declared for all files
|
|
59
|
+
- [ ] FILE STATUS checked after every I/O operation
|
|
60
|
+
- [ ] CLOSE statements in all code paths
|
|
61
|
+
- [ ] Code compiles successfully
|
|
62
|
+
- [ ] Basic test execution passes
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# CICS Transformation Examples
|
|
2
|
+
|
|
3
|
+
## UI/Terminal Operations
|
|
4
|
+
|
|
5
|
+
### Before (CICS)
|
|
6
|
+
```cobol
|
|
7
|
+
EXEC CICS SEND MAP('CUSTMAP') MAPSET('CUSTSET') END-EXEC
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
### After (Standard COBOL)
|
|
11
|
+
```cobol
|
|
12
|
+
DISPLAY "Customer Screen Output"
|
|
13
|
+
DISPLAY WS-CUSTOMER-NAME
|
|
14
|
+
DISPLAY WS-CUSTOMER-ADDRESS
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Error Handling
|
|
20
|
+
|
|
21
|
+
### Before (CICS with RESP/RESP2)
|
|
22
|
+
```cobol
|
|
23
|
+
EXEC CICS READ FILE('CUSTFILE')
|
|
24
|
+
INTO(WS-CUSTOMER-REC)
|
|
25
|
+
RIDFLD(WS-CUST-KEY)
|
|
26
|
+
RESP(WS-RESP)
|
|
27
|
+
RESP2(WS-RESP2)
|
|
28
|
+
END-EXEC
|
|
29
|
+
IF WS-RESP = DFHRESP(NOTFND)
|
|
30
|
+
PERFORM CUSTOMER-NOT-FOUND
|
|
31
|
+
END-IF
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### After (Standard COBOL with FILE STATUS)
|
|
35
|
+
```cobol
|
|
36
|
+
READ CUSTFILE INTO WS-CUSTOMER-REC
|
|
37
|
+
KEY IS WS-CUST-KEY
|
|
38
|
+
IF FILE-STATUS NOT = '00'
|
|
39
|
+
IF FILE-STATUS = '23'
|
|
40
|
+
PERFORM CUSTOMER-NOT-FOUND
|
|
41
|
+
ELSE
|
|
42
|
+
PERFORM FILE-ERROR-HANDLER
|
|
43
|
+
END-IF
|
|
44
|
+
END-IF
|
|
45
|
+
```
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mainframe-planning
|
|
3
|
+
description: Create a transformation guide for replacing mainframe-specific COBOL constructs with standard COBOL equivalents. Use when preparing COBOL code for local execution or migration.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Requires knowledge of CICS/VSAM mainframe constructs
|
|
6
|
+
triggers:
|
|
7
|
+
- mainframe planning
|
|
8
|
+
- cics replacement
|
|
9
|
+
- cobol transformation guide
|
|
10
|
+
- mainframe dependency
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
Create a comprehensive transformation guide that maps each mainframe dependency to its standard COBOL replacement.
|
|
14
|
+
|
|
15
|
+
This guide is a prerequisite for the actual transformation — DO NOT modify any code, only create the guide.
|
|
16
|
+
|
|
17
|
+
## Output Format
|
|
18
|
+
|
|
19
|
+
Document each mainframe-specific construct with:
|
|
20
|
+
|
|
21
|
+
1. **Pattern**: The mainframe construct (e.g., `EXEC CICS READ FILE(...)`)
|
|
22
|
+
2. **Replacement**: The standard COBOL equivalent
|
|
23
|
+
3. **Error Handling**: How to replicate the mainframe's error behavior
|
|
24
|
+
- Map CICS RESP/RESP2 codes to FILE STATUS equivalents
|
|
25
|
+
- Specify which FILE STATUS values to check (e.g., 00=success, 23=not found, 35=file not exists)
|
|
26
|
+
4. **Resource Cleanup**: Any cleanup the replacement requires (CICS auto-manages resources; file I/O does not)
|
|
27
|
+
5. **Edge Cases**: Behavior differences between mainframe and standard COBOL
|
|
28
|
+
|
|
29
|
+
## Constructs to Address
|
|
30
|
+
|
|
31
|
+
### Data Operations (CICS/IMS/VSAM)
|
|
32
|
+
|
|
33
|
+
- READ, WRITE, REWRITE, DELETE operations
|
|
34
|
+
- STARTBR, READNEXT, READPREV (browse operations)
|
|
35
|
+
- CICS error handling: HANDLE CONDITION, RESP/RESP2 options
|
|
36
|
+
- VSAM → sequential or indexed file I/O
|
|
37
|
+
|
|
38
|
+
### UI/Terminal Operations (BMS maps, screens)
|
|
39
|
+
|
|
40
|
+
- SEND MAP, RECEIVE MAP → these can be MOCKED or stubbed
|
|
41
|
+
- Screen I/O is not needed for business logic validation
|
|
42
|
+
- Document how to replace with simple ACCEPT/DISPLAY or test harness stubs
|
|
43
|
+
- Focus on preserving the data flow, not the UI interaction
|
|
44
|
+
|
|
45
|
+
### Other Mainframe Constructs
|
|
46
|
+
|
|
47
|
+
- Mainframe data types (COMP-3 packed decimal, etc.)
|
|
48
|
+
- JCL-embedded constructs
|
|
49
|
+
- IMS calls (if present)
|
|
50
|
+
|
|
51
|
+
## Critical Requirements
|
|
52
|
+
|
|
53
|
+
- Every CICS command that can fail MUST have an error handling replacement documented
|
|
54
|
+
- UI operations should be clearly marked as "mock/stub" so the agent doesn't get stuck on them
|
|
55
|
+
- Prefer: file-based I/O over mainframe I/O, standard data types over mainframe types
|
|
56
|
+
|
|
57
|
+
## Common Mappings Reference
|
|
58
|
+
|
|
59
|
+
### FILE STATUS Codes
|
|
60
|
+
|
|
61
|
+
| Code | Meaning | CICS Equivalent |
|
|
62
|
+
|------|---------|-----------------|
|
|
63
|
+
| 00 | Success | Normal completion |
|
|
64
|
+
| 23 | Record not found | NOTFND condition |
|
|
65
|
+
| 35 | File does not exist | NOTOPEN condition |
|
|
66
|
+
| 22 | Duplicate key | DUPREC condition |
|
|
67
|
+
| 3x | I/O errors | Various IOERR conditions |
|
|
68
|
+
|
|
69
|
+
### CICS to Standard COBOL
|
|
70
|
+
|
|
71
|
+
| CICS Command | Standard COBOL |
|
|
72
|
+
|--------------|----------------|
|
|
73
|
+
| `EXEC CICS READ FILE(...)` | `READ filename INTO...` |
|
|
74
|
+
| `EXEC CICS WRITE FILE(...)` | `WRITE record-name FROM...` |
|
|
75
|
+
| `EXEC CICS REWRITE FILE(...)` | `REWRITE record-name FROM...` |
|
|
76
|
+
| `EXEC CICS DELETE FILE(...)` | `DELETE filename RECORD` |
|
|
77
|
+
| `EXEC CICS STARTBR FILE(...)` | `START filename KEY...` |
|
|
78
|
+
| `EXEC CICS READNEXT FILE(...)` | `READ filename NEXT INTO...` |
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: to-java-migration
|
|
3
|
+
description: Migrate COBOL code to idiomatic Java, preserving business logic while following Java best practices. Use for COBOL modernization projects.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Requires Java 11+, Maven or Gradle
|
|
6
|
+
triggers:
|
|
7
|
+
- cobol to java
|
|
8
|
+
- cobol migration
|
|
9
|
+
- cobol modernization
|
|
10
|
+
- migrate cobol
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
Migrate COBOL code to idiomatic Java, preserving all business logic.
|
|
14
|
+
|
|
15
|
+
## Code Style Requirements
|
|
16
|
+
|
|
17
|
+
Write idiomatic Java, NOT literal COBOL translations:
|
|
18
|
+
- Use Java conventions: camelCase names, standard collections (List, Map)
|
|
19
|
+
- Use Java standard library instead of rolling your own
|
|
20
|
+
- No god classes — split into cohesive, single-responsibility classes
|
|
21
|
+
- No TODO comments or stub implementations — fully implement everything
|
|
22
|
+
|
|
23
|
+
## Robustness Requirements
|
|
24
|
+
|
|
25
|
+
- Validate inputs at method entry (null checks, range validation)
|
|
26
|
+
- Use try-catch for all I/O and external operations
|
|
27
|
+
- Use try-with-resources for files, streams, connections
|
|
28
|
+
- Handle errors gracefully with meaningful messages
|
|
29
|
+
|
|
30
|
+
## Configuration Requirements
|
|
31
|
+
|
|
32
|
+
- No hardcoded file paths or credentials — use environment variables
|
|
33
|
+
- No magic numbers — use named constants
|
|
34
|
+
- Make limits and timeouts configurable
|
|
35
|
+
|
|
36
|
+
## Documentation Requirements
|
|
37
|
+
|
|
38
|
+
- Add COBOL references: `// COBOL equivalent: BNK1CRA.cbl 145-167`
|
|
39
|
+
- Document assumptions made during conversion
|
|
40
|
+
- Add Javadoc to public methods
|
|
41
|
+
|
|
42
|
+
## Testing Requirements
|
|
43
|
+
|
|
44
|
+
If test fixtures exist (see `cobol-build-setup` skill):
|
|
45
|
+
- Create a JUnit test class for each migrated program
|
|
46
|
+
- Load inputs from fixtures, assert output matches expected (golden) output
|
|
47
|
+
- All tests must pass before migration is complete
|
|
48
|
+
|
|
49
|
+
## References
|
|
50
|
+
|
|
51
|
+
- See [references/cobol-to-java-example.md](references/cobol-to-java-example.md) for a complete transformation example
|
|
52
|
+
- See [references/datatype-mappings.md](references/datatype-mappings.md) for COBOL→Java type mappings
|
|
53
|
+
|
|
54
|
+
## Done When
|
|
55
|
+
|
|
56
|
+
✓ Code compiles without errors
|
|
57
|
+
✓ All JUnit tests pass (Java output matches COBOL golden output)
|
|
58
|
+
✓ No TODO or stub implementations remain
|
|
59
|
+
✓ COBOL references documented in comments
|
package/plugins/cobol-modernization/skills/to-java-migration/references/cobol-to-java-example.md
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# COBOL to Java Transformation Example
|
|
2
|
+
|
|
3
|
+
## COBOL (Before)
|
|
4
|
+
|
|
5
|
+
```cobol
|
|
6
|
+
IDENTIFICATION DIVISION.
|
|
7
|
+
PROGRAM-ID. CALC-TAX.
|
|
8
|
+
DATA DIVISION.
|
|
9
|
+
WORKING-STORAGE SECTION.
|
|
10
|
+
01 WS-SUBTOTAL PIC 9(7)V99.
|
|
11
|
+
01 WS-TAX-RATE PIC V999 VALUE 0.085.
|
|
12
|
+
01 WS-TAX-AMOUNT PIC 9(7)V99.
|
|
13
|
+
|
|
14
|
+
PROCEDURE DIVISION.
|
|
15
|
+
MULTIPLY WS-SUBTOTAL BY WS-TAX-RATE
|
|
16
|
+
GIVING WS-TAX-AMOUNT.
|
|
17
|
+
STOP RUN.
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Java (After)
|
|
21
|
+
|
|
22
|
+
```java
|
|
23
|
+
/**
|
|
24
|
+
* Tax calculation service.
|
|
25
|
+
* COBOL equivalent: CALC-TAX.cbl
|
|
26
|
+
*/
|
|
27
|
+
public class TaxCalculator {
|
|
28
|
+
private static final BigDecimal DEFAULT_TAX_RATE = new BigDecimal("0.085");
|
|
29
|
+
|
|
30
|
+
private final BigDecimal taxRate;
|
|
31
|
+
|
|
32
|
+
public TaxCalculator() {
|
|
33
|
+
this(DEFAULT_TAX_RATE);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public TaxCalculator(BigDecimal taxRate) {
|
|
37
|
+
this.taxRate = Objects.requireNonNull(taxRate, "Tax rate cannot be null");
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Calculate tax for a given subtotal.
|
|
42
|
+
* COBOL equivalent: CALC-TAX.cbl lines 10-12
|
|
43
|
+
*
|
|
44
|
+
* @param subtotal The pre-tax amount
|
|
45
|
+
* @return The calculated tax amount
|
|
46
|
+
* @throws IllegalArgumentException if subtotal is null or negative
|
|
47
|
+
*/
|
|
48
|
+
public BigDecimal calculateTax(BigDecimal subtotal) {
|
|
49
|
+
if (subtotal == null) {
|
|
50
|
+
throw new IllegalArgumentException("Subtotal cannot be null");
|
|
51
|
+
}
|
|
52
|
+
if (subtotal.compareTo(BigDecimal.ZERO) < 0) {
|
|
53
|
+
throw new IllegalArgumentException("Subtotal cannot be negative");
|
|
54
|
+
}
|
|
55
|
+
return subtotal.multiply(taxRate).setScale(2, RoundingMode.HALF_UP);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# COBOL to Java Data Type Mappings
|
|
2
|
+
|
|
3
|
+
| COBOL | Java | Notes |
|
|
4
|
+
|-------|------|-------|
|
|
5
|
+
| `PIC 9(n)V99` | `BigDecimal` | Decimal with implied decimal point |
|
|
6
|
+
| `PIC X(n)` | `String` | Alphanumeric |
|
|
7
|
+
| `PIC 9(n)` | `int` or `long` | Use `long` for n > 9 |
|
|
8
|
+
| `COMP-3` (packed decimal) | `BigDecimal` | Preserve precision |
|
|
9
|
+
| `OCCURS n TIMES` | `List<T>` or array | Prefer `List` for flexibility |
|
|
10
|
+
|
|
11
|
+
## Control Flow Mappings
|
|
12
|
+
|
|
13
|
+
| COBOL | Java |
|
|
14
|
+
|-------|------|
|
|
15
|
+
| `PERFORM` | method call |
|
|
16
|
+
| `EVALUATE/WHEN` | `switch` |
|
|
17
|
+
| `IF/ELSE` | `if/else` |
|
|
18
|
+
| `PERFORM UNTIL` | `while` loop |
|
|
19
|
+
| `PERFORM VARYING` | `for` loop |
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "issue-duplicate-checker",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Detect duplicate GitHub issues with OpenHands Cloud and manage duplicate-candidate lifecycle automation.",
|
|
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": ["issues", "duplicates", "github", "automation"]
|
|
13
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# OpenHands Issue Duplicate Checker
|
|
2
|
+
|
|
3
|
+
Reusable GitHub Action for detecting duplicate issues with an OpenHands Cloud conversation, posting a duplicate/overlap notice, labeling high-confidence duplicates as `duplicate-candidate`, and auto-closing aged candidates.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
- uses: OpenHands/extensions/plugins/issue-duplicate-checker@main
|
|
9
|
+
with:
|
|
10
|
+
mode: issue-check
|
|
11
|
+
repository: ${{ github.repository }}
|
|
12
|
+
issue-number: ${{ github.event.issue.number }}
|
|
13
|
+
openhands-api-key: ${{ secrets.OPENHANDS_API_KEY }}
|
|
14
|
+
github-token: ${{ secrets.OPENHANDS_BOT_GITHUB_PAT_PUBLIC || github.token }}
|
|
15
|
+
# Optional OpenHands polling controls. Each polling phase can wait up to
|
|
16
|
+
# max-wait-seconds, so total runtime can approach twice this value when a
|
|
17
|
+
# start task must be awaited before the conversation run.
|
|
18
|
+
poll-interval-seconds: '5'
|
|
19
|
+
max-wait-seconds: '900'
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
For scheduled auto-close:
|
|
23
|
+
|
|
24
|
+
```yaml
|
|
25
|
+
- uses: OpenHands/extensions/plugins/issue-duplicate-checker@main
|
|
26
|
+
with:
|
|
27
|
+
mode: auto-close
|
|
28
|
+
repository: ${{ github.repository }}
|
|
29
|
+
github-token: ${{ secrets.OPENHANDS_BOT_GITHUB_PAT_PUBLIC || github.token }}
|
|
30
|
+
close-after-days: '3'
|
|
31
|
+
# Optional: preview without mutating issues.
|
|
32
|
+
dry-run: 'false'
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
For removing the `duplicate-candidate` label after a human comments, run the action from an `issue_comment` event:
|
|
36
|
+
|
|
37
|
+
```yaml
|
|
38
|
+
on:
|
|
39
|
+
issue_comment:
|
|
40
|
+
types: [created]
|
|
41
|
+
|
|
42
|
+
jobs:
|
|
43
|
+
remove-duplicate-candidate:
|
|
44
|
+
steps:
|
|
45
|
+
- uses: OpenHands/extensions/plugins/issue-duplicate-checker@main
|
|
46
|
+
with:
|
|
47
|
+
mode: remove-label
|
|
48
|
+
github-token: ${{ secrets.OPENHANDS_BOT_GITHUB_PAT_PUBLIC || github.token }}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The action requires `issues: write` permission. `issue-check` also requires an `OPENHANDS_API_KEY` secret.
|