@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.
Files changed (347) hide show
  1. package/.agents/skills/custom-codereview-guide.md +25 -0
  2. package/.github/pull_request_template.md +38 -0
  3. package/.github/release.yml +14 -0
  4. package/.github/workflows/check-extensions.yml +72 -0
  5. package/.github/workflows/npm-publish.yml +89 -0
  6. package/.github/workflows/pr.yml +30 -0
  7. package/.github/workflows/release.yml +24 -0
  8. package/.github/workflows/tests.yml +25 -0
  9. package/.github/workflows/vulnerability-scan.yml +87 -0
  10. package/.release-please-manifest.json +3 -0
  11. package/AGENTS.md +132 -0
  12. package/README.md +10 -0
  13. package/analysis_results.md +162 -0
  14. package/marketplaces/large-codebase.json +66 -0
  15. package/marketplaces/openhands-extensions.json +682 -0
  16. package/package.json +4 -10
  17. package/plugins/README.md +30 -0
  18. package/plugins/city-weather/.plugin/plugin.json +13 -0
  19. package/plugins/city-weather/README.md +145 -0
  20. package/plugins/city-weather/commands/now.md +56 -0
  21. package/plugins/cobol-modernization/.plugin/plugin.json +19 -0
  22. package/plugins/cobol-modernization/README.md +201 -0
  23. package/plugins/cobol-modernization/references/troubleshooting.md +18 -0
  24. package/plugins/cobol-modernization/skills/build-setup/SKILL.md +78 -0
  25. package/plugins/cobol-modernization/skills/build-setup/scripts/install-gnucobol.sh +32 -0
  26. package/plugins/cobol-modernization/skills/cobol-modernization-overview/SKILL.md +113 -0
  27. package/plugins/cobol-modernization/skills/mainfraime-removal/SKILL.md +62 -0
  28. package/plugins/cobol-modernization/skills/mainfraime-removal/references/cics-transformation-examples.md +45 -0
  29. package/plugins/cobol-modernization/skills/mainframe-planning/SKILL.md +78 -0
  30. package/plugins/cobol-modernization/skills/to-java-migration/SKILL.md +59 -0
  31. package/plugins/cobol-modernization/skills/to-java-migration/references/cobol-to-java-example.md +58 -0
  32. package/plugins/cobol-modernization/skills/to-java-migration/references/datatype-mappings.md +19 -0
  33. package/plugins/issue-duplicate-checker/.plugin/plugin.json +13 -0
  34. package/plugins/issue-duplicate-checker/README.md +51 -0
  35. package/plugins/issue-duplicate-checker/action.yml +349 -0
  36. package/plugins/issue-duplicate-checker/scripts/auto_close_duplicate_issues.py +569 -0
  37. package/plugins/issue-duplicate-checker/scripts/issue_duplicate_check_openhands.py +681 -0
  38. package/plugins/issue-duplicate-checker/scripts/post_duplicate_notice.js +220 -0
  39. package/plugins/issue-duplicate-checker/scripts/remove_duplicate_candidate_label.js +27 -0
  40. package/plugins/magic-test/.plugin/plugin.json +13 -0
  41. package/plugins/magic-test/skills/magic-word/SKILL.md +33 -0
  42. package/plugins/migration-scoring/.plugin/plugin.json +19 -0
  43. package/plugins/migration-scoring/README.md +244 -0
  44. package/plugins/migration-scoring/skills/migration-mapping/SKILL.md +72 -0
  45. package/plugins/migration-scoring/skills/migration-report/SKILL.md +118 -0
  46. package/plugins/migration-scoring/skills/migration-scoring-overview/SKILL.md +126 -0
  47. package/plugins/migration-scoring/skills/score-quality/SKILL.md +54 -0
  48. package/plugins/migration-scoring/skills/score-quality/references/scoring-criteria.md +30 -0
  49. package/plugins/migration-scoring/skills/score-style/SKILL.md +106 -0
  50. package/plugins/onboarding/.plugin/plugin.json +20 -0
  51. package/plugins/onboarding/README.md +30 -0
  52. package/plugins/onboarding/references/criteria.md +144 -0
  53. package/plugins/onboarding/skills/agent-readiness-report/README.md +23 -0
  54. package/plugins/onboarding/skills/agent-readiness-report/SKILL.md +122 -0
  55. package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_agent_instructions.sh +88 -0
  56. package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_build_env.sh +114 -0
  57. package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_feedback_loops.sh +133 -0
  58. package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_policy.sh +113 -0
  59. package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_workflows.sh +127 -0
  60. package/plugins/onboarding/skills/improve-agent-readiness/README.md +19 -0
  61. package/plugins/onboarding/skills/improve-agent-readiness/SKILL.md +167 -0
  62. package/plugins/onboarding/skills/setup-agents-md/README.md +15 -0
  63. package/plugins/onboarding/skills/setup-agents-md/SKILL.md +150 -0
  64. package/plugins/onboarding/skills/setup-openhands/README.md +20 -0
  65. package/plugins/onboarding/skills/setup-openhands/SKILL.md +56 -0
  66. package/plugins/onboarding/skills/setup-pr-review/README.md +23 -0
  67. package/plugins/onboarding/skills/setup-pr-review/SKILL.md +72 -0
  68. package/plugins/openhands/.plugin/plugin.json +13 -0
  69. package/plugins/openhands/README.md +52 -0
  70. package/plugins/openhands/SKILL.md +61 -0
  71. package/plugins/openhands/commands/create.md +55 -0
  72. package/plugins/openhands/commands/openhands-cloud.md +8 -0
  73. package/plugins/openhands/scripts/run.sh +69 -0
  74. package/plugins/pr-review/.plugin/plugin.json +13 -0
  75. package/plugins/pr-review/README.md +393 -0
  76. package/plugins/pr-review/action.yml +298 -0
  77. package/plugins/pr-review/scripts/agent_script.py +1282 -0
  78. package/plugins/pr-review/scripts/evaluate_review.py +655 -0
  79. package/plugins/pr-review/scripts/prompt.py +260 -0
  80. package/plugins/pr-review/workflows/pr-review-by-openhands.yml +51 -0
  81. package/plugins/pr-review/workflows/pr-review-evaluation.yml +85 -0
  82. package/plugins/qa-changes/.plugin/plugin.json +11 -0
  83. package/plugins/qa-changes/README.md +185 -0
  84. package/plugins/qa-changes/action.yml +181 -0
  85. package/plugins/qa-changes/scripts/agent_script.py +406 -0
  86. package/plugins/qa-changes/scripts/evaluate_qa_changes.py +385 -0
  87. package/plugins/qa-changes/scripts/prompt.py +174 -0
  88. package/plugins/qa-changes/workflows/qa-changes-by-openhands.yml +50 -0
  89. package/plugins/qa-changes/workflows/qa-changes-evaluation.yml +85 -0
  90. package/plugins/release-notes/.plugin/plugin.json +19 -0
  91. package/plugins/release-notes/README.md +283 -0
  92. package/plugins/release-notes/SKILL.md +83 -0
  93. package/plugins/release-notes/action.yml +117 -0
  94. package/plugins/release-notes/commands/release-notes.md +8 -0
  95. package/plugins/release-notes/scripts/agent_script.py +292 -0
  96. package/plugins/release-notes/scripts/generate_release_notes.py +733 -0
  97. package/plugins/release-notes/scripts/prompt.py +90 -0
  98. package/plugins/release-notes/scripts/validate_release_notes.py +328 -0
  99. package/plugins/release-notes/workflows/release-notes.yml +76 -0
  100. package/plugins/vulnerability-remediation/.plugin/plugin.json +19 -0
  101. package/plugins/vulnerability-remediation/README.md +217 -0
  102. package/plugins/vulnerability-remediation/action.yml +187 -0
  103. package/plugins/vulnerability-remediation/scripts/scan_and_remediate.py +561 -0
  104. package/plugins/vulnerability-remediation/workflows/vulnerability-scan.yml +87 -0
  105. package/pyproject.toml +12 -0
  106. package/release-please-config.json +16 -0
  107. package/scripts/sync_extensions.py +494 -0
  108. package/scripts/sync_openhands_sdk_skill.py +264 -0
  109. package/skills/README.md +159 -0
  110. package/skills/add-javadoc/.plugin/plugin.json +18 -0
  111. package/skills/add-javadoc/README.md +40 -0
  112. package/skills/add-javadoc/SKILL.md +35 -0
  113. package/skills/add-javadoc/references/example.md +32 -0
  114. package/skills/add-skill/.plugin/plugin.json +18 -0
  115. package/skills/add-skill/README.md +67 -0
  116. package/skills/add-skill/SKILL.md +47 -0
  117. package/skills/add-skill/scripts/fetch_skill.py +259 -0
  118. package/skills/agent-creator/.plugin/plugin.json +20 -0
  119. package/skills/agent-creator/README.md +104 -0
  120. package/skills/agent-creator/SKILL.md +190 -0
  121. package/skills/agent-creator/commands/agent-creator.md +8 -0
  122. package/skills/agent-creator/references/fallback.md +117 -0
  123. package/skills/agent-memory/.plugin/plugin.json +18 -0
  124. package/skills/agent-memory/README.md +35 -0
  125. package/skills/agent-memory/SKILL.md +30 -0
  126. package/skills/agent-memory/commands/remember.md +8 -0
  127. package/skills/agent-sdk-builder/.plugin/plugin.json +18 -0
  128. package/skills/agent-sdk-builder/README.md +40 -0
  129. package/skills/agent-sdk-builder/SKILL.md +37 -0
  130. package/skills/agent-sdk-builder/commands/agent-builder.md +8 -0
  131. package/skills/azure-devops/.plugin/plugin.json +18 -0
  132. package/skills/azure-devops/README.md +55 -0
  133. package/skills/azure-devops/SKILL.md +50 -0
  134. package/skills/bitbucket/.plugin/plugin.json +17 -0
  135. package/skills/bitbucket/README.md +50 -0
  136. package/skills/bitbucket/SKILL.md +45 -0
  137. package/skills/code-review/.plugin/plugin.json +19 -0
  138. package/skills/code-review/README.md +18 -0
  139. package/skills/code-review/SKILL.md +208 -0
  140. package/skills/code-review/commands/codereview-roasted.md +8 -0
  141. package/skills/code-review/commands/codereview.md +8 -0
  142. package/skills/code-review/references/risk-evaluation.md +41 -0
  143. package/skills/code-review/references/supply-chain-security.md +31 -0
  144. package/skills/code-simplifier/.plugin/plugin.json +21 -0
  145. package/skills/code-simplifier/README.md +30 -0
  146. package/skills/code-simplifier/SKILL.md +91 -0
  147. package/skills/code-simplifier/commands/simplify.md +8 -0
  148. package/skills/code-simplifier/references/code-quality-review.md +86 -0
  149. package/skills/code-simplifier/references/code-reuse-review.md +63 -0
  150. package/skills/code-simplifier/references/efficiency-review.md +81 -0
  151. package/skills/datadog/.plugin/plugin.json +19 -0
  152. package/skills/datadog/README.md +100 -0
  153. package/skills/datadog/SKILL.md +95 -0
  154. package/skills/deno/.plugin/plugin.json +18 -0
  155. package/skills/deno/README.md +5 -0
  156. package/skills/deno/SKILL.md +99 -0
  157. package/skills/deno/references/README.md +6 -0
  158. package/skills/discord/.plugin/plugin.json +18 -0
  159. package/skills/discord/README.md +31 -0
  160. package/skills/discord/SKILL.md +109 -0
  161. package/skills/discord/__init__.py +0 -0
  162. package/skills/discord/references/REFERENCE.md +78 -0
  163. package/skills/discord/scripts/__init__.py +0 -0
  164. package/skills/discord/scripts/_http.py +127 -0
  165. package/skills/discord/scripts/post_webhook.py +106 -0
  166. package/skills/discord/scripts/send_message.py +102 -0
  167. package/skills/docker/.plugin/plugin.json +17 -0
  168. package/skills/docker/README.md +34 -0
  169. package/skills/docker/SKILL.md +29 -0
  170. package/skills/evidence-based-citations/.plugin/plugin.json +20 -0
  171. package/skills/evidence-based-citations/README.md +31 -0
  172. package/skills/evidence-based-citations/SKILL.md +59 -0
  173. package/skills/flarglebargle/.plugin/plugin.json +16 -0
  174. package/skills/flarglebargle/README.md +14 -0
  175. package/skills/flarglebargle/SKILL.md +9 -0
  176. package/skills/frontend-design/.plugin/plugin.json +21 -0
  177. package/skills/frontend-design/LICENSE.txt +177 -0
  178. package/skills/frontend-design/README.md +42 -0
  179. package/skills/frontend-design/SKILL.md +42 -0
  180. package/skills/github/.plugin/plugin.json +19 -0
  181. package/skills/github/README.md +42 -0
  182. package/skills/github/SKILL.md +106 -0
  183. package/skills/github-pr-review/.plugin/plugin.json +18 -0
  184. package/skills/github-pr-review/README.md +145 -0
  185. package/skills/github-pr-review/SKILL.md +148 -0
  186. package/skills/github-pr-review/commands/github-pr-review.md +8 -0
  187. package/skills/github-pr-reviewer/.plugin/plugin.json +20 -0
  188. package/skills/github-pr-reviewer/README.md +34 -0
  189. package/skills/github-pr-reviewer/SKILL.md +89 -0
  190. package/skills/github-pr-reviewer/commands/pr-reviewer:setup.md +8 -0
  191. package/skills/github-repo-monitor/.plugin/plugin.json +22 -0
  192. package/skills/github-repo-monitor/README.md +70 -0
  193. package/skills/github-repo-monitor/SKILL.md +316 -0
  194. package/skills/github-repo-monitor/commands/github-monitor:poll.md +8 -0
  195. package/skills/github-repo-monitor/references/github-api.md +241 -0
  196. package/skills/github-repo-monitor/references/state-schema.md +160 -0
  197. package/skills/github-repo-monitor/scripts/main.py +915 -0
  198. package/skills/github-repo-monitor/tests/test_main.py +400 -0
  199. package/skills/gitlab/.plugin/plugin.json +17 -0
  200. package/skills/gitlab/README.md +37 -0
  201. package/skills/gitlab/SKILL.md +32 -0
  202. package/skills/incident-retrospective/.plugin/plugin.json +21 -0
  203. package/skills/incident-retrospective/README.md +34 -0
  204. package/skills/incident-retrospective/SKILL.md +98 -0
  205. package/skills/incident-retrospective/commands/incident-retro:setup.md +8 -0
  206. package/skills/iterate/.plugin/plugin.json +13 -0
  207. package/skills/iterate/README.md +25 -0
  208. package/skills/iterate/SKILL.md +399 -0
  209. package/skills/iterate/commands/babysit.md +8 -0
  210. package/skills/iterate/commands/iterate.md +8 -0
  211. package/skills/iterate/commands/verify.md +8 -0
  212. package/skills/iterate/references/heuristics.md +58 -0
  213. package/skills/iterate/references/verification.md +96 -0
  214. package/skills/jupyter/.plugin/plugin.json +18 -0
  215. package/skills/jupyter/README.md +55 -0
  216. package/skills/jupyter/SKILL.md +50 -0
  217. package/skills/kubernetes/.plugin/plugin.json +18 -0
  218. package/skills/kubernetes/README.md +53 -0
  219. package/skills/kubernetes/SKILL.md +48 -0
  220. package/skills/learn-from-code-review/.plugin/plugin.json +19 -0
  221. package/skills/learn-from-code-review/README.md +64 -0
  222. package/skills/learn-from-code-review/SKILL.md +186 -0
  223. package/skills/learn-from-code-review/commands/learn-from-reviews.md +8 -0
  224. package/skills/linear/.plugin/plugin.json +19 -0
  225. package/skills/linear/README.md +58 -0
  226. package/skills/linear/SKILL.md +213 -0
  227. package/skills/linear-triage/.plugin/plugin.json +21 -0
  228. package/skills/linear-triage/README.md +34 -0
  229. package/skills/linear-triage/SKILL.md +91 -0
  230. package/skills/linear-triage/commands/linear-triage:setup.md +8 -0
  231. package/skills/notion/.plugin/plugin.json +17 -0
  232. package/skills/notion/README.md +114 -0
  233. package/skills/notion/SKILL.md +109 -0
  234. package/skills/npm/.plugin/plugin.json +17 -0
  235. package/skills/npm/README.md +14 -0
  236. package/skills/npm/SKILL.md +9 -0
  237. package/skills/openhands-api/.plugin/plugin.json +22 -0
  238. package/skills/openhands-api/README.md +48 -0
  239. package/skills/openhands-api/SKILL.md +399 -0
  240. package/skills/openhands-api/references/README.md +33 -0
  241. package/skills/openhands-api/references/TROUBLESHOOTING.md +81 -0
  242. package/skills/openhands-api/references/example_prompt.md +12 -0
  243. package/skills/openhands-api/scripts/openhands_api.py +606 -0
  244. package/skills/openhands-api/scripts/openhands_api.ts +252 -0
  245. package/skills/openhands-automation/.plugin/plugin.json +19 -0
  246. package/skills/openhands-automation/README.md +89 -0
  247. package/skills/openhands-automation/SKILL.md +875 -0
  248. package/skills/openhands-automation/commands/automation:create.md +8 -0
  249. package/skills/openhands-automation/references/ab-testing.md +185 -0
  250. package/skills/openhands-automation/references/custom-automation.md +644 -0
  251. package/skills/openhands-sdk/.plugin/plugin.json +20 -0
  252. package/skills/openhands-sdk/README.md +22 -0
  253. package/skills/openhands-sdk/SKILL.md +229 -0
  254. package/skills/openhands-sdk/commands/sdk.md +8 -0
  255. package/skills/pdflatex/.plugin/plugin.json +18 -0
  256. package/skills/pdflatex/README.md +39 -0
  257. package/skills/pdflatex/SKILL.md +34 -0
  258. package/skills/prd/.plugin/plugin.json +19 -0
  259. package/skills/prd/README.md +28 -0
  260. package/skills/prd/SKILL.md +237 -0
  261. package/skills/prd/commands/prd.md +8 -0
  262. package/skills/qa-changes/README.md +18 -0
  263. package/skills/qa-changes/SKILL.md +229 -0
  264. package/skills/qa-changes/commands/qa-changes.md +8 -0
  265. package/skills/release-notes/README.md +24 -0
  266. package/skills/release-notes/SKILL.md +19 -0
  267. package/skills/release-notes/commands/release-notes.md +8 -0
  268. package/skills/research-brief/.plugin/plugin.json +20 -0
  269. package/skills/research-brief/README.md +34 -0
  270. package/skills/research-brief/SKILL.md +99 -0
  271. package/skills/research-brief/commands/research-brief:setup.md +8 -0
  272. package/skills/security/.plugin/plugin.json +18 -0
  273. package/skills/security/README.md +38 -0
  274. package/skills/security/SKILL.md +33 -0
  275. package/skills/skill-creator/.plugin/plugin.json +17 -0
  276. package/skills/skill-creator/LICENSE.txt +202 -0
  277. package/skills/skill-creator/README.md +182 -0
  278. package/skills/skill-creator/SKILL.md +545 -0
  279. package/skills/skill-creator/references/output-patterns.md +82 -0
  280. package/skills/skill-creator/references/workflows.md +28 -0
  281. package/skills/skill-creator/scripts/init_skill.py +303 -0
  282. package/skills/skill-creator/scripts/quick_validate.py +95 -0
  283. package/skills/slack-channel-monitor/.plugin/plugin.json +21 -0
  284. package/skills/slack-channel-monitor/README.md +91 -0
  285. package/skills/slack-channel-monitor/SKILL.md +276 -0
  286. package/skills/slack-channel-monitor/commands/slack-monitor:poll.md +8 -0
  287. package/skills/slack-channel-monitor/references/slack-api.md +207 -0
  288. package/skills/slack-channel-monitor/references/state-schema.md +180 -0
  289. package/skills/slack-channel-monitor/scripts/main.py +962 -0
  290. package/skills/slack-standup-digest/.plugin/plugin.json +21 -0
  291. package/skills/slack-standup-digest/README.md +34 -0
  292. package/skills/slack-standup-digest/SKILL.md +92 -0
  293. package/skills/slack-standup-digest/commands/standup-digest:setup.md +8 -0
  294. package/skills/spark-version-upgrade/.plugin/plugin.json +20 -0
  295. package/skills/spark-version-upgrade/README.md +54 -0
  296. package/skills/spark-version-upgrade/SKILL.md +233 -0
  297. package/skills/ssh/.plugin/plugin.json +18 -0
  298. package/skills/ssh/README.md +140 -0
  299. package/skills/ssh/SKILL.md +135 -0
  300. package/skills/swift-linux/.plugin/plugin.json +17 -0
  301. package/skills/swift-linux/README.md +86 -0
  302. package/skills/swift-linux/SKILL.md +81 -0
  303. package/skills/theme-factory/.plugin/plugin.json +19 -0
  304. package/skills/theme-factory/LICENSE.txt +202 -0
  305. package/skills/theme-factory/README.md +58 -0
  306. package/skills/theme-factory/SKILL.md +59 -0
  307. package/skills/theme-factory/theme-showcase.pdf +0 -0
  308. package/skills/theme-factory/themes/arctic-frost.md +19 -0
  309. package/skills/theme-factory/themes/botanical-garden.md +19 -0
  310. package/skills/theme-factory/themes/desert-rose.md +19 -0
  311. package/skills/theme-factory/themes/forest-canopy.md +19 -0
  312. package/skills/theme-factory/themes/golden-hour.md +19 -0
  313. package/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  314. package/skills/theme-factory/themes/modern-minimalist.md +19 -0
  315. package/skills/theme-factory/themes/ocean-depths.md +19 -0
  316. package/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  317. package/skills/theme-factory/themes/tech-innovation.md +19 -0
  318. package/skills/uv/.plugin/plugin.json +18 -0
  319. package/skills/uv/README.md +5 -0
  320. package/skills/uv/SKILL.md +95 -0
  321. package/skills/uv/references/README.md +5 -0
  322. package/skills/vercel/.plugin/plugin.json +18 -0
  323. package/skills/vercel/README.md +108 -0
  324. package/skills/vercel/SKILL.md +103 -0
  325. package/tests/test_add_skill_installs_to_agents_dir.py +42 -0
  326. package/tests/test_catalogs.py +109 -0
  327. package/tests/test_code_review_risk_evaluation.py +94 -0
  328. package/tests/test_issue_duplicate_checker.py +240 -0
  329. package/tests/test_openhands_api_python.py +152 -0
  330. package/tests/test_plugin_manifest.py +83 -0
  331. package/tests/test_pr_review_diff_payload.py +202 -0
  332. package/tests/test_pr_review_feedback.py +263 -0
  333. package/tests/test_pr_review_prompt.py +152 -0
  334. package/tests/test_pr_review_review_context.py +253 -0
  335. package/tests/test_qa_changes.py +232 -0
  336. package/tests/test_qa_changes_evaluation.py +259 -0
  337. package/tests/test_release_notes_generator.py +990 -0
  338. package/tests/test_sdk_loading.py +150 -0
  339. package/tests/test_skill_plugin_loading.py +149 -0
  340. package/tests/test_skills_have_readme.py +66 -0
  341. package/tests/test_sync_extensions.py +292 -0
  342. package/tests/test_workflow_sync.py +46 -0
  343. package/utils/analysis/README.md +7 -0
  344. package/utils/analysis/laminar_signals/README.md +211 -0
  345. package/utils/analysis/laminar_signals/analyze.py +780 -0
  346. package/utils/analysis/laminar_signals/templates/default.j2 +49 -0
  347. package/utils/analysis/laminar_signals/templates/pr_review.j2 +61 -0
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "release-notes",
3
+ "version": "1.0.0",
4
+ "description": "Generate consistent, well-structured release notes from git history with categorized changelog, contributor attribution, and semver tag support.",
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
+ "release-notes",
14
+ "changelog",
15
+ "git",
16
+ "semver",
17
+ "versioning"
18
+ ]
19
+ }
@@ -0,0 +1,283 @@
1
+ # Release Notes Generator Plugin
2
+
3
+ Automated release notes generation using OpenHands agents. This plugin provides GitHub workflows that generate consistent, well-structured release notes when release tags are pushed.
4
+
5
+ ## Quick Start
6
+
7
+ Copy the workflow file to your repository:
8
+
9
+ ```bash
10
+ mkdir -p .github/workflows
11
+ curl -o .github/workflows/release-notes.yml \
12
+ https://raw.githubusercontent.com/OpenHands/extensions/main/plugins/release-notes/workflows/release-notes.yml
13
+ ```
14
+
15
+ Then configure the required secrets (see [Installation](#installation) below).
16
+
17
+ ## Features
18
+
19
+ - **Automatic Tag Detection**: Automatically finds the previous release tag to determine the commit range
20
+ - **Agent-Based Summaries**: Uses an OpenHands agent to judge significance, merge related PRs, and decide what is worth mentioning
21
+ - **Structured GitHub Context**: Feeds the agent merged PR titles, labels, bodies, authors, and contributor information for the release range
22
+ - **Conventional Commits Support**: Uses commit prefixes (`feat:`, `fix:`, `docs:`, etc.) as categorization hints for the agent
23
+ - **PR Label Support**: Uses GitHub PR labels as additional hints for the agent
24
+ - **Contributor Attribution**: Includes PR numbers and author usernames for each change the agent keeps
25
+ - **Attribution Validation**: Fails the workflow if any release-range PR/commit or corresponding author is omitted from the final notes
26
+ - **Deterministic Coverage Appendix**: When the agent omits lower-signal PRs, the action appends a compact `### 🔎 Small Fixes/Internal Changes` appendix grouped by author so every PR and author in the release range is still listed somewhere in the output
27
+ - **New Contributor Highlighting**: Identifies first-time human contributors from merged PR history and excludes bot accounts
28
+ - **Flexible Output**: Updates GitHub release notes directly or outputs for CHANGELOG.md
29
+
30
+ ## Plugin Contents
31
+
32
+ ```
33
+ plugins/release-notes/
34
+ ├── README.md # This file
35
+ ├── SKILL.md # Plugin definition
36
+ ├── action.yml # Composite GitHub Action
37
+ ├── scripts/ # Python scripts
38
+ │ ├── agent_script.py # OpenHands agent orchestration
39
+ │ ├── generate_release_notes.py
40
+ │ ├── prompt.py
41
+ │ └── validate_release_notes.py
42
+ └── workflows/ # Example GitHub workflow files
43
+ └── release-notes.yml
44
+ ```
45
+
46
+ ## Installation
47
+
48
+ ### 1. Copy the Workflow File
49
+
50
+ Copy the workflow file to your repository's `.github/workflows/` directory:
51
+
52
+ ```bash
53
+ mkdir -p .github/workflows
54
+ curl -o .github/workflows/release-notes.yml \
55
+ https://raw.githubusercontent.com/OpenHands/extensions/main/plugins/release-notes/workflows/release-notes.yml
56
+ ```
57
+
58
+ ### 2. Configure Secrets
59
+
60
+ Add the following secrets in your repository settings (**Settings → Secrets and variables → Actions**):
61
+
62
+ | Secret | Required | Description |
63
+ |--------|----------|-------------|
64
+ | `LLM_API_KEY` | Yes | API key for the LLM used by the OpenHands agent |
65
+ | `GITHUB_TOKEN` | Auto | Provided automatically by GitHub Actions |
66
+
67
+ **Note**: The default `GITHUB_TOKEN` is sufficient for most use cases. For repositories that need elevated permissions, use a personal access token.
68
+
69
+ ### 3. Customize the Workflow (Optional)
70
+
71
+ Edit the workflow file to customize:
72
+
73
+ ```yaml
74
+ - name: Generate Release Notes
75
+ uses: OpenHands/extensions/plugins/release-notes@main
76
+ with:
77
+ # The release tag to generate notes for
78
+ tag: ${{ github.ref_name }}
79
+
80
+ # Optional: Override previous tag detection
81
+ # previous-tag: v1.0.0
82
+
83
+ # Include internal/infrastructure changes (default: false)
84
+ include-internal: false
85
+
86
+ # Output format: 'release' (GitHub release) or 'changelog' (CHANGELOG.md)
87
+ output-format: release
88
+
89
+ # Optional model override
90
+ # llm-model: anthropic/claude-sonnet-4-5-20250929
91
+
92
+ # Secrets
93
+ llm-api-key: ${{ secrets.LLM_API_KEY }}
94
+ github-token: ${{ secrets.GITHUB_TOKEN }}
95
+ ```
96
+
97
+ ## Usage
98
+
99
+ ### Automatic Triggers
100
+
101
+ Release notes are automatically generated when:
102
+
103
+ 1. A tag matching `v[0-9]+.[0-9]+.[0-9]+*` is pushed (e.g., `v1.2.0`, `v2.0.0-beta.1`)
104
+
105
+ ### Manual Triggering
106
+
107
+ You can also manually trigger release notes generation:
108
+
109
+ 1. Go to **Actions** in your repository
110
+ 2. Select the "Generate Release Notes" workflow
111
+ 3. Click **Run workflow**
112
+ 4. Enter the tag to generate notes for
113
+
114
+ ## Action Inputs
115
+
116
+ | Input | Required | Default | Description |
117
+ |-------|----------|---------|-------------|
118
+ | `tag` | Yes | - | The release tag to generate notes for |
119
+ | `previous-tag` | No | Auto-detect | Override automatic detection of previous release |
120
+ | `include-internal` | No | `false` | Include internal/infrastructure changes |
121
+ | `output-format` | No | `release` | Output format: `release` or `changelog` |
122
+ | `llm-model` | No | `anthropic/claude-sonnet-4-5-20250929` | LLM used by the OpenHands agent |
123
+ | `llm-base-url` | No | - | Optional custom LLM endpoint |
124
+ | `llm-api-key` | Yes | - | API key for the OpenHands agent's LLM |
125
+ | `github-token` | Yes | - | GitHub token for API access |
126
+
127
+ ## Action Outputs
128
+
129
+ | Output | Description |
130
+ |--------|-------------|
131
+ | `release-notes` | The generated release notes in markdown format |
132
+ | `previous-tag` | The detected or provided previous release tag |
133
+ | `commit-count` | Number of commits included in the release |
134
+ | `contributor-count` | Number of unique contributors |
135
+ | `new-contributor-count` | Number of first-time contributors |
136
+
137
+ ## Release Notes Structure
138
+
139
+ Generated release notes follow this format:
140
+
141
+ ```markdown
142
+ ## [v1.2.0] - 2026-03-06
143
+
144
+ ### ⚠️ Breaking Changes
145
+ - Remove deprecated `--legacy` CLI flag (#456) @maintainer
146
+
147
+ ### ✨ New Features
148
+ - Add support for Claude Sonnet 4.6 model (#445) @contributor1
149
+ - Implement parallel tool execution (#438) @contributor2
150
+
151
+ ### 🐛 Bug Fixes
152
+ - Fix WebSocket reconnection on network interruption (#451) @contributor3
153
+ - Resolve memory leak in long-running sessions (#447) @maintainer
154
+
155
+ ### 📚 Documentation
156
+ - Update installation guide for v1.2 (#442) @contributor2
157
+
158
+ ### 🏗️ Internal/Infrastructure
159
+ - Upgrade CI to use Node 20 (#440) @maintainer
160
+
161
+ ### 👥 New Contributors
162
+ - @contributor3 made their first contribution in #451
163
+
164
+ **Full Changelog**: https://github.com/org/repo/compare/v1.1.0...v1.2.0
165
+ ```
166
+
167
+ ## Change Categorization
168
+
169
+ The agent receives deterministic categorization hints, but it makes the final decision about significance, grouping, and which entries to keep.
170
+
171
+ ### 1. Conventional Commit Prefixes
172
+
173
+ | Prefix | Category |
174
+ |--------|----------|
175
+ | `BREAKING:` or `!:` suffix | ⚠️ Breaking Changes |
176
+ | `feat:`, `feature:` | ✨ New Features |
177
+ | `fix:`, `bugfix:` | 🐛 Bug Fixes |
178
+ | `docs:` | 📚 Documentation |
179
+ | `chore:`, `ci:`, `refactor:`, `test:`, `build:` | 🏗️ Internal/Infrastructure |
180
+
181
+ ### 2. PR Labels
182
+
183
+ | Labels | Category |
184
+ |--------|----------|
185
+ | `breaking-change`, `breaking` | ⚠️ Breaking Changes |
186
+ | `enhancement`, `feature` | ✨ New Features |
187
+ | `bug`, `bugfix` | 🐛 Bug Fixes |
188
+ | `documentation`, `docs` | 📚 Documentation |
189
+ | `internal`, `chore`, `ci`, `dependencies` | 🏗️ Internal/Infrastructure |
190
+
191
+ ## Content Guidelines
192
+
193
+ The generator follows these principles:
194
+
195
+ - **Conversational overview**: Starts with a short plain-language summary of the release before the detailed sections
196
+ - **Concise but informative**: The agent decides which changes matter and can merge related PRs into a single higher-signal bullet
197
+ - **User-focused**: The agent prioritizes end-user and client-developer impact over low-level implementation detail
198
+ - **Internal changes stay secondary**: CI churn, prompt tweaks, workflow plumbing, contributor ergonomics, and similar toolkit-maintainer details belong in `### 🔎 Small Fixes/Internal Changes` unless they are unusually significant
199
+ - **Scannable**: Easy to quickly find relevant changes
200
+ - **Imperative mood**: Uses "Add feature" not "Added feature"
201
+ - **Attribution**: Includes PR number and author for traceability
202
+
203
+ ## Validation Guardrail
204
+
205
+ After the agent writes `release_notes.md`, the action runs `scripts/validate_release_notes.py`.
206
+ That validator rebuilds the deterministic PR/author context for the same tag range and checks that the final notes:
207
+
208
+ - include at least one explicit PR or commit reference in every user-facing change bullet
209
+ - include the author handle for every referenced PR or commit
210
+ - do not reference unknown PRs or commits
211
+ - cover every PR/commit in the release range somewhere in the markdown
212
+
213
+ If the agent keeps the main sections concise and omits lower-signal PRs, `agent_script.py` inserts a compact `### 🔎 Small Fixes/Internal Changes` appendix before the full changelog link. That appendix is grouped by author so the output remains readable while still being exhaustive.
214
+
215
+ ## Customizing Output
216
+
217
+ ### Excluding Internal Changes
218
+
219
+ By default, internal/infrastructure changes are excluded. To include them:
220
+
221
+ ```yaml
222
+ - uses: OpenHands/extensions/plugins/release-notes@main
223
+ with:
224
+ include-internal: true
225
+ ```
226
+
227
+ ### Generating CHANGELOG.md Entries
228
+
229
+ To generate output suitable for a CHANGELOG.md file:
230
+
231
+ ```yaml
232
+ - uses: OpenHands/extensions/plugins/release-notes@main
233
+ with:
234
+ output-format: changelog
235
+ ```
236
+
237
+ Then use the output in a subsequent step:
238
+
239
+ ```yaml
240
+ - name: Update CHANGELOG
241
+ run: |
242
+ echo "${{ steps.release-notes.outputs.release-notes }}" >> CHANGELOG.md
243
+ ```
244
+
245
+ ## Troubleshooting
246
+
247
+ ### Missing LLM Credentials
248
+
249
+ Make sure `LLM_API_KEY` is configured in repository secrets and passed to the action.
250
+
251
+ ### Release Notes Not Generated
252
+
253
+ 1. Check that the tag matches the semver pattern: `v[0-9]+.[0-9]+.[0-9]+*`
254
+ 2. Verify the workflow file is in `.github/workflows/`
255
+ 3. Check the Actions tab for error messages
256
+
257
+ ### Wrong Previous Tag Detected
258
+
259
+ Use the `previous-tag` input to override automatic detection:
260
+
261
+ ```yaml
262
+ previous-tag: v1.0.0
263
+ ```
264
+
265
+ ### Missing Contributors
266
+
267
+ The generator uses the GitHub API to fetch PR authors. Ensure:
268
+ 1. Commits are associated with merged PRs
269
+ 2. The `GITHUB_TOKEN` has read access to pull requests
270
+
271
+ ## Security
272
+
273
+ - Uses the default `GITHUB_TOKEN` for API access
274
+ - No secrets are persisted or logged
275
+ - Read-only access to repository history and PRs
276
+
277
+ ## Contributing
278
+
279
+ See the main [extensions repository](https://github.com/OpenHands/extensions) for contribution guidelines.
280
+
281
+ ## License
282
+
283
+ This plugin is part of the OpenHands extensions repository. See [LICENSE](../../LICENSE) for details.
@@ -0,0 +1,83 @@
1
+ ---
2
+ name: release-notes
3
+ description: Generate consistent, well-structured release notes from git history. Triggered on release tags following semver patterns (v*.*.*) to produce categorized changelog with breaking changes, features, fixes, and contributor attribution.
4
+ triggers:
5
+ - /release-notes
6
+ ---
7
+
8
+ # Release Notes Generator Plugin
9
+
10
+ Automates the generation of standardized release notes for OpenHands repositories using an OpenHands agent. The agent reviews the release range, judges significance, groups related PRs, and produces concise markdown for GitHub releases or changelogs.
11
+
12
+ ## Features
13
+
14
+ - **Automatic tag detection**: Finds the previous release tag to determine the commit range
15
+ - **Agent-based editing**: Lets the agent decide which changes matter, open with a short conversational summary, and group related PRs into higher-signal summaries while keeping toolkit-maintainer-only details out of the main sections unless they are unusually significant
16
+ - **Structured GitHub context**: Supplies PR titles, labels, descriptions, and contributor metadata to guide the agent
17
+ - **Contributor attribution**: Includes PR numbers and author usernames for each change
18
+ - **Attribution validation**: Verifies every change bullet contains explicit PR/commit references and the matching author handles
19
+ - **Full coverage appendix**: Appends a compact `### 🔎 Small Fixes/Internal Changes` section grouped by author when needed so every PR and author in the release range is still listed somewhere in the final markdown
20
+ - **New contributor highlighting**: Identifies first-time human contributors from merged PR history and excludes bot accounts
21
+ - **Flexible output**: Can update GitHub release notes or generate CHANGELOG.md entries
22
+
23
+ ## Quick Start
24
+
25
+ ### As a GitHub Action
26
+
27
+ Copy the workflow file to your repository:
28
+
29
+ ```bash
30
+ mkdir -p .github/workflows
31
+ curl -o .github/workflows/release-notes.yml \
32
+ https://raw.githubusercontent.com/OpenHands/extensions/main/plugins/release-notes/workflows/release-notes.yml
33
+ ```
34
+
35
+ Configure required secrets (see the README for details).
36
+
37
+ ### Manual Invocation
38
+
39
+ Use the `/release-notes` trigger in an OpenHands conversation to generate release notes for the current repository.
40
+
41
+ ## Release Notes Format
42
+
43
+ Generated release notes follow this structure:
44
+
45
+ ```markdown
46
+ ## [v1.2.0] - 2026-03-06
47
+
48
+ ### ⚠️ Breaking Changes
49
+ - Remove deprecated `--legacy` CLI flag (#456) @maintainer
50
+
51
+ ### ✨ New Features
52
+ - Add support for Claude Sonnet 4.6 model (#445) @contributor1
53
+
54
+ ### 🐛 Bug Fixes
55
+ - Fix WebSocket reconnection on network interruption (#451) @contributor3
56
+
57
+ ### 📚 Documentation
58
+ - Update installation guide (#442) @contributor2
59
+
60
+ ### 👥 New Contributors
61
+ - @contributor3 made their first contribution in #451
62
+
63
+ **Full Changelog**: https://github.com/org/repo/compare/v1.1.0...v1.2.0
64
+ ```
65
+
66
+ ## Change Categorization
67
+
68
+ Changes are categorized based on:
69
+
70
+ 1. **Conventional commit prefixes**: `feat:`, `fix:`, `docs:`, `chore:`, `BREAKING:`
71
+ 2. **PR labels**: `breaking-change`, `bug`, `enhancement`, `documentation`
72
+
73
+ | Category | Commit Prefixes | PR Labels |
74
+ |----------|-----------------|-----------|
75
+ | Breaking Changes | `BREAKING:`, `!:` suffix | `breaking-change`, `breaking` |
76
+ | Features | `feat:`, `feature:` | `enhancement`, `feature` |
77
+ | Bug Fixes | `fix:`, `bugfix:` | `bug`, `bugfix` |
78
+ | Documentation | `docs:` | `documentation`, `docs` |
79
+ | Internal | `chore:`, `ci:`, `refactor:`, `test:` | `internal`, `chore`, `ci` |
80
+
81
+ ## Configuration
82
+
83
+ See the [README](./README.md) for full configuration options and workflow setup instructions.
@@ -0,0 +1,117 @@
1
+ ---
2
+ name: OpenHands Release Notes Generator
3
+ description: Generate agent-authored release notes from git history and PR context
4
+ author: OpenHands
5
+
6
+ branding:
7
+ icon: file-text
8
+ color: green
9
+
10
+ inputs:
11
+ tag:
12
+ description: The release tag to generate notes for
13
+ required: true
14
+ previous-tag:
15
+ description: Override automatic detection of previous release tag
16
+ required: false
17
+ default: ''
18
+ include-internal:
19
+ description: Include internal/infrastructure changes in the release notes
20
+ required: false
21
+ default: 'false'
22
+ output-format:
23
+ description: "Output format: 'release' (GitHub release) or 'changelog' (CHANGELOG.md)"
24
+ required: false
25
+ default: release
26
+ llm-model:
27
+ description: LLM model to use for agent-based release note generation
28
+ required: false
29
+ default: anthropic/claude-sonnet-4-5-20250929
30
+ llm-base-url:
31
+ description: LLM base URL (optional, for custom LLM endpoints)
32
+ required: false
33
+ default: ''
34
+ llm-api-key:
35
+ description: LLM API key (required)
36
+ required: true
37
+ github-token:
38
+ description: GitHub token for API access (required)
39
+ required: true
40
+
41
+ outputs:
42
+ release-notes:
43
+ description: The generated release notes in markdown format
44
+ value: ${{ steps.generate.outputs.release_notes }}
45
+ previous-tag:
46
+ description: The detected or provided previous release tag
47
+ value: ${{ steps.generate.outputs.previous_tag }}
48
+ commit-count:
49
+ description: Number of commits included in the release
50
+ value: ${{ steps.generate.outputs.commit_count }}
51
+ contributor-count:
52
+ description: Number of unique contributors
53
+ value: ${{ steps.generate.outputs.contributor_count }}
54
+ new-contributor-count:
55
+ description: Number of first-time contributors
56
+ value: ${{ steps.generate.outputs.new_contributor_count }}
57
+
58
+ runs:
59
+ using: composite
60
+ steps:
61
+ - name: Checkout extensions repository
62
+ uses: actions/checkout@v4
63
+ with:
64
+ repository: OpenHands/extensions
65
+ ref: main
66
+ path: extensions
67
+ sparse-checkout: plugins/release-notes
68
+
69
+ - name: Set up Python
70
+ uses: actions/setup-python@v5
71
+ with:
72
+ python-version: '3.12'
73
+
74
+ - name: Install uv
75
+ uses: astral-sh/setup-uv@v6
76
+ with:
77
+ enable-cache: true
78
+
79
+ - name: Generate release notes
80
+ id: generate
81
+ shell: bash
82
+ env:
83
+ LLM_MODEL: ${{ inputs.llm-model }}
84
+ LLM_BASE_URL: ${{ inputs.llm-base-url }}
85
+ LLM_API_KEY: ${{ inputs.llm-api-key }}
86
+ GITHUB_TOKEN: ${{ inputs.github-token }}
87
+ TAG: ${{ inputs.tag }}
88
+ PREVIOUS_TAG: ${{ inputs.previous-tag }}
89
+ INCLUDE_INTERNAL: ${{ inputs.include-internal }}
90
+ OUTPUT_FORMAT: ${{ inputs.output-format }}
91
+ REPO_NAME: ${{ github.repository }}
92
+ run: |
93
+ uv run --with openhands-sdk --with openhands-tools \
94
+ python extensions/plugins/release-notes/scripts/agent_script.py
95
+
96
+ - name: Validate PR and author attribution
97
+ shell: bash
98
+ env:
99
+ GITHUB_TOKEN: ${{ inputs.github-token }}
100
+ TAG: ${{ inputs.tag }}
101
+ PREVIOUS_TAG: ${{ inputs.previous-tag }}
102
+ INCLUDE_INTERNAL: ${{ inputs.include-internal }}
103
+ REPO_NAME: ${{ github.repository }}
104
+ run: |
105
+ python extensions/plugins/release-notes/scripts/validate_release_notes.py
106
+
107
+ - name: Update GitHub release (if release format)
108
+ if: inputs.output-format == 'release'
109
+ shell: bash
110
+ env:
111
+ GITHUB_TOKEN: ${{ inputs.github-token }}
112
+ run: |
113
+ if [ -f release_notes.md ]; then
114
+ echo "Updating release notes for tag ${{ inputs.tag }}"
115
+ gh release edit "${{ inputs.tag }}" --notes-file release_notes.md || \
116
+ echo "Note: Could not update release. Release may not exist yet."
117
+ fi
@@ -0,0 +1,8 @@
1
+ ---
2
+ # auto-generated by sync_extensions.py
3
+ description: Generate consistent, well-structured release notes from git history. Triggered on release tags following semver patterns (v*.*.*) to produce categorized changelog with breaking changes, features, fixes, and contributor attribution.
4
+ ---
5
+
6
+ Read and follow the complete instructions in the SKILL.md file located in this skill's directory.
7
+
8
+ $ARGUMENTS