@openhands/extensions 0.21.0 → 0.22.1

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 (267) hide show
  1. package/.claude-plugin/marketplace.json +881 -0
  2. package/.codex-plugin/marketplace.json +881 -0
  3. package/.github/workflows/npm-publish.yml +9 -3
  4. package/.plugin/marketplace.json +881 -0
  5. package/.release-please-manifest.json +1 -1
  6. package/README.md +3 -2
  7. package/automations/bundle-index.js +16 -7
  8. package/automations/catalog/github-delivery-watchdog/manifest.json +79 -0
  9. package/automations/catalog/github-issue-to-pr/manifest.json +23 -15
  10. package/automations/catalog/github-issue-triage/manifest.json +4 -3
  11. package/automations/catalog/github-pr-reviewer/manifest.json +22 -15
  12. package/automations/catalog-index.js +6 -4
  13. package/marketplaces/openhands-extensions.json +6 -0
  14. package/package.json +1 -1
  15. package/plugins/city-weather/.claude-plugin/plugin.json +13 -0
  16. package/plugins/city-weather/.codex-plugin/plugin.json +13 -0
  17. package/plugins/cobol-modernization/.claude-plugin/plugin.json +19 -0
  18. package/plugins/cobol-modernization/.codex-plugin/plugin.json +19 -0
  19. package/plugins/issue-duplicate-checker/.claude-plugin/plugin.json +13 -0
  20. package/plugins/issue-duplicate-checker/.codex-plugin/plugin.json +13 -0
  21. package/plugins/magic-test/.claude-plugin/plugin.json +13 -0
  22. package/plugins/magic-test/.codex-plugin/plugin.json +13 -0
  23. package/plugins/migration-scoring/.claude-plugin/plugin.json +19 -0
  24. package/plugins/migration-scoring/.codex-plugin/plugin.json +19 -0
  25. package/plugins/onboarding/.claude-plugin/plugin.json +20 -0
  26. package/plugins/onboarding/.codex-plugin/plugin.json +20 -0
  27. package/plugins/onboarding/skills/agent-readiness-report/references/criteria.md +144 -0
  28. package/plugins/onboarding/skills/improve-agent-readiness/references/criteria.md +144 -0
  29. package/plugins/openhands/.claude-plugin/plugin.json +13 -0
  30. package/plugins/openhands/.codex-plugin/plugin.json +13 -0
  31. package/plugins/openhands/skills/openhands-api/.claude-plugin/plugin.json +22 -0
  32. package/plugins/openhands/skills/openhands-api/.codex-plugin/plugin.json +22 -0
  33. package/plugins/openhands/skills/openhands-api/.plugin/plugin.json +22 -0
  34. package/plugins/openhands/skills/openhands-api/README.md +52 -0
  35. package/plugins/openhands/skills/openhands-api/SKILL.md +469 -0
  36. package/plugins/openhands/skills/openhands-api/references/README.md +33 -0
  37. package/plugins/openhands/skills/openhands-api/references/TROUBLESHOOTING.md +81 -0
  38. package/plugins/openhands/skills/openhands-api/references/example_prompt.md +12 -0
  39. package/plugins/openhands/skills/openhands-api/references/windows.md +44 -0
  40. package/plugins/openhands/skills/openhands-api/scripts/openhands_api.py +606 -0
  41. package/plugins/openhands/skills/openhands-api/scripts/openhands_api.ts +252 -0
  42. package/plugins/openhands/skills/openhands-automation/.claude-plugin/plugin.json +19 -0
  43. package/plugins/openhands/skills/openhands-automation/.codex-plugin/plugin.json +19 -0
  44. package/plugins/openhands/skills/openhands-automation/.plugin/plugin.json +19 -0
  45. package/plugins/openhands/skills/openhands-automation/README.md +89 -0
  46. package/plugins/openhands/skills/openhands-automation/SKILL.md +899 -0
  47. package/plugins/openhands/skills/openhands-automation/commands/automation-create.md +8 -0
  48. package/plugins/openhands/skills/openhands-automation/references/ab-testing.md +185 -0
  49. package/plugins/openhands/skills/openhands-automation/references/custom-automation.md +832 -0
  50. package/plugins/openhands/skills/openhands-automation/references/security.md +84 -0
  51. package/plugins/openhands/skills/openhands-automation/references/windows.md +57 -0
  52. package/plugins/openhands/skills/openhands-sdk/.claude-plugin/plugin.json +20 -0
  53. package/plugins/openhands/skills/openhands-sdk/.codex-plugin/plugin.json +20 -0
  54. package/plugins/openhands/skills/openhands-sdk/.plugin/plugin.json +20 -0
  55. package/plugins/openhands/skills/openhands-sdk/README.md +22 -0
  56. package/plugins/openhands/skills/openhands-sdk/SKILL.md +245 -0
  57. package/plugins/openhands/skills/openhands-sdk/commands/sdk.md +8 -0
  58. package/plugins/pr-review/.claude-plugin/plugin.json +13 -0
  59. package/plugins/pr-review/.codex-plugin/plugin.json +13 -0
  60. package/plugins/pr-review/skills/code-review/.claude-plugin/plugin.json +19 -0
  61. package/plugins/pr-review/skills/code-review/.codex-plugin/plugin.json +19 -0
  62. package/plugins/pr-review/skills/code-review/.plugin/plugin.json +19 -0
  63. package/plugins/pr-review/skills/code-review/README.md +18 -0
  64. package/plugins/pr-review/skills/code-review/SKILL.md +209 -0
  65. package/plugins/pr-review/skills/code-review/commands/codereview-roasted.md +8 -0
  66. package/plugins/pr-review/skills/code-review/commands/codereview.md +8 -0
  67. package/plugins/pr-review/skills/code-review/references/risk-evaluation.md +41 -0
  68. package/plugins/pr-review/skills/code-review/references/supply-chain-security.md +31 -0
  69. package/plugins/pr-review/skills/github-pr-review/.claude-plugin/plugin.json +18 -0
  70. package/plugins/pr-review/skills/github-pr-review/.codex-plugin/plugin.json +18 -0
  71. package/plugins/pr-review/skills/github-pr-review/.plugin/plugin.json +18 -0
  72. package/plugins/pr-review/skills/github-pr-review/README.md +145 -0
  73. package/plugins/pr-review/skills/github-pr-review/SKILL.md +187 -0
  74. package/plugins/pr-review/skills/github-pr-review/commands/github-pr-review.md +8 -0
  75. package/plugins/pr-review/skills/github-pr-review/references/windows.md +47 -0
  76. package/plugins/qa-changes/.claude-plugin/plugin.json +11 -0
  77. package/plugins/qa-changes/.codex-plugin/plugin.json +11 -0
  78. package/plugins/qa-changes/skills/github-pr-review/.claude-plugin/plugin.json +18 -0
  79. package/plugins/qa-changes/skills/github-pr-review/.codex-plugin/plugin.json +18 -0
  80. package/plugins/qa-changes/skills/github-pr-review/.plugin/plugin.json +18 -0
  81. package/plugins/qa-changes/skills/github-pr-review/README.md +145 -0
  82. package/plugins/qa-changes/skills/github-pr-review/SKILL.md +187 -0
  83. package/plugins/qa-changes/skills/github-pr-review/commands/github-pr-review.md +8 -0
  84. package/plugins/qa-changes/skills/github-pr-review/references/windows.md +47 -0
  85. package/plugins/qa-changes/skills/qa-changes/README.md +18 -0
  86. package/plugins/qa-changes/skills/qa-changes/SKILL.md +229 -0
  87. package/plugins/qa-changes/skills/qa-changes/commands/qa-changes.md +8 -0
  88. package/plugins/release-notes/.claude-plugin/plugin.json +19 -0
  89. package/plugins/release-notes/.codex-plugin/plugin.json +19 -0
  90. package/plugins/release-notes/skills/release-notes/README.md +24 -0
  91. package/plugins/release-notes/skills/release-notes/SKILL.md +19 -0
  92. package/plugins/release-notes/skills/release-notes/commands/release-notes.md +8 -0
  93. package/plugins/vulnerability-remediation/.claude-plugin/plugin.json +19 -0
  94. package/plugins/vulnerability-remediation/.codex-plugin/plugin.json +19 -0
  95. package/plugins/vulnerability-remediation/skills/github/.claude-plugin/plugin.json +19 -0
  96. package/plugins/vulnerability-remediation/skills/github/.codex-plugin/plugin.json +19 -0
  97. package/plugins/vulnerability-remediation/skills/github/.plugin/plugin.json +19 -0
  98. package/plugins/vulnerability-remediation/skills/github/README.md +42 -0
  99. package/plugins/vulnerability-remediation/skills/github/SKILL.md +107 -0
  100. package/plugins/vulnerability-remediation/skills/github/references/windows.md +48 -0
  101. package/plugins/vulnerability-remediation/skills/github/scripts/agent_conversation.py +150 -0
  102. package/plugins/vulnerability-remediation/skills/github/scripts/github_client.py +230 -0
  103. package/plugins/vulnerability-remediation/skills/security/.claude-plugin/plugin.json +18 -0
  104. package/plugins/vulnerability-remediation/skills/security/.codex-plugin/plugin.json +18 -0
  105. package/plugins/vulnerability-remediation/skills/security/.plugin/plugin.json +18 -0
  106. package/plugins/vulnerability-remediation/skills/security/README.md +38 -0
  107. package/plugins/vulnerability-remediation/skills/security/SKILL.md +33 -0
  108. package/pyproject.toml +1 -1
  109. package/python/openhands_extensions/_version.py +1 -1
  110. package/skills/add-javadoc/.claude-plugin/plugin.json +18 -0
  111. package/skills/add-javadoc/.codex-plugin/plugin.json +18 -0
  112. package/skills/add-skill/.claude-plugin/plugin.json +18 -0
  113. package/skills/add-skill/.codex-plugin/plugin.json +18 -0
  114. package/skills/agent-canvas-environment/.claude-plugin/plugin.json +19 -0
  115. package/skills/agent-canvas-environment/.codex-plugin/plugin.json +19 -0
  116. package/skills/agent-creator/.claude-plugin/plugin.json +20 -0
  117. package/skills/agent-creator/.codex-plugin/plugin.json +20 -0
  118. package/skills/agent-memory/.claude-plugin/plugin.json +18 -0
  119. package/skills/agent-memory/.codex-plugin/plugin.json +18 -0
  120. package/skills/agent-sdk-builder/.claude-plugin/plugin.json +18 -0
  121. package/skills/agent-sdk-builder/.codex-plugin/plugin.json +18 -0
  122. package/skills/azure-devops/.claude-plugin/plugin.json +18 -0
  123. package/skills/azure-devops/.codex-plugin/plugin.json +18 -0
  124. package/skills/bitbucket/.claude-plugin/plugin.json +17 -0
  125. package/skills/bitbucket/.codex-plugin/plugin.json +17 -0
  126. package/skills/bitbucket-cloud/.claude-plugin/plugin.json +18 -0
  127. package/skills/bitbucket-cloud/.codex-plugin/plugin.json +18 -0
  128. package/skills/bitbucket-data-center/.claude-plugin/plugin.json +19 -0
  129. package/skills/bitbucket-data-center/.codex-plugin/plugin.json +19 -0
  130. package/skills/code-review/.claude-plugin/plugin.json +19 -0
  131. package/skills/code-review/.codex-plugin/plugin.json +19 -0
  132. package/skills/code-simplifier/.claude-plugin/plugin.json +21 -0
  133. package/skills/code-simplifier/.codex-plugin/plugin.json +21 -0
  134. package/skills/datadog/.claude-plugin/plugin.json +19 -0
  135. package/skills/datadog/.codex-plugin/plugin.json +19 -0
  136. package/skills/deno/.claude-plugin/plugin.json +18 -0
  137. package/skills/deno/.codex-plugin/plugin.json +18 -0
  138. package/skills/discord/.claude-plugin/plugin.json +18 -0
  139. package/skills/discord/.codex-plugin/plugin.json +18 -0
  140. package/skills/docker/.claude-plugin/plugin.json +17 -0
  141. package/skills/docker/.codex-plugin/plugin.json +17 -0
  142. package/skills/evidence-based-citations/.claude-plugin/plugin.json +20 -0
  143. package/skills/evidence-based-citations/.codex-plugin/plugin.json +20 -0
  144. package/skills/flarglebargle/.claude-plugin/plugin.json +16 -0
  145. package/skills/flarglebargle/.codex-plugin/plugin.json +16 -0
  146. package/skills/frontend-design/.claude-plugin/plugin.json +21 -0
  147. package/skills/frontend-design/.codex-plugin/plugin.json +21 -0
  148. package/skills/github/.claude-plugin/plugin.json +19 -0
  149. package/skills/github/.codex-plugin/plugin.json +19 -0
  150. package/skills/github/scripts/agent_conversation.py +150 -0
  151. package/skills/github/scripts/github_client.py +31 -5
  152. package/skills/github-actions/.claude-plugin/plugin.json +19 -0
  153. package/skills/github-actions/.codex-plugin/plugin.json +19 -0
  154. package/skills/github-agents-md-maintainer/.claude-plugin/plugin.json +19 -0
  155. package/skills/github-agents-md-maintainer/.codex-plugin/plugin.json +19 -0
  156. package/skills/github-agents-md-maintainer/scripts/github_client.py +230 -0
  157. package/skills/github-delivery-watchdog/.claude-plugin/plugin.json +9 -0
  158. package/skills/github-delivery-watchdog/.codex-plugin/plugin.json +9 -0
  159. package/skills/github-delivery-watchdog/.plugin/plugin.json +9 -0
  160. package/skills/github-delivery-watchdog/README.md +10 -0
  161. package/skills/github-delivery-watchdog/SKILL.md +35 -0
  162. package/skills/github-delivery-watchdog/commands/github-delivery-watchdog.md +8 -0
  163. package/skills/github-delivery-watchdog/scripts/github_client.py +230 -0
  164. package/skills/github-delivery-watchdog/scripts/worker.py +96 -0
  165. package/skills/github-issue-to-pr/.claude-plugin/plugin.json +19 -0
  166. package/skills/github-issue-to-pr/.codex-plugin/plugin.json +19 -0
  167. package/skills/github-issue-to-pr/SKILL.md +7 -0
  168. package/skills/github-issue-to-pr/scripts/agent_conversation.py +150 -0
  169. package/skills/github-issue-to-pr/scripts/github_client.py +230 -0
  170. package/skills/github-issue-to-pr/scripts/main.py +16 -10
  171. package/skills/github-issue-to-pr/scripts/worker.py +172 -0
  172. package/skills/github-issue-triage/.claude-plugin/plugin.json +9 -0
  173. package/skills/github-issue-triage/.codex-plugin/plugin.json +9 -0
  174. package/skills/github-issue-triage/SKILL.md +15 -18
  175. package/skills/github-issue-triage/scripts/agent_conversation.py +150 -0
  176. package/skills/github-issue-triage/scripts/github_client.py +230 -0
  177. package/skills/github-issue-triage/scripts/worker.py +81 -98
  178. package/skills/github-pr-review/.claude-plugin/plugin.json +18 -0
  179. package/skills/github-pr-review/.codex-plugin/plugin.json +18 -0
  180. package/skills/github-pr-reviewer/.claude-plugin/plugin.json +20 -0
  181. package/skills/github-pr-reviewer/.codex-plugin/plugin.json +20 -0
  182. package/skills/github-pr-reviewer/SKILL.md +7 -0
  183. package/skills/github-pr-reviewer/scripts/agent_conversation.py +150 -0
  184. package/skills/github-pr-reviewer/scripts/github_client.py +230 -0
  185. package/skills/github-pr-reviewer/scripts/main.py +20 -8
  186. package/skills/github-pr-reviewer/scripts/worker.py +94 -0
  187. package/skills/github-repo-monitor/.claude-plugin/plugin.json +22 -0
  188. package/skills/github-repo-monitor/.codex-plugin/plugin.json +22 -0
  189. package/skills/github-repo-monitor/scripts/github_client.py +230 -0
  190. package/skills/gitlab/.claude-plugin/plugin.json +17 -0
  191. package/skills/gitlab/.codex-plugin/plugin.json +17 -0
  192. package/skills/gitlab-issue-to-mr/.claude-plugin/plugin.json +19 -0
  193. package/skills/gitlab-issue-to-mr/.codex-plugin/plugin.json +19 -0
  194. package/skills/incident-retrospective/.claude-plugin/plugin.json +21 -0
  195. package/skills/incident-retrospective/.codex-plugin/plugin.json +21 -0
  196. package/skills/index.js +12 -3
  197. package/skills/iterate/.claude-plugin/plugin.json +13 -0
  198. package/skills/iterate/.codex-plugin/plugin.json +13 -0
  199. package/skills/jira-issue-to-pr/.claude-plugin/plugin.json +19 -0
  200. package/skills/jira-issue-to-pr/.codex-plugin/plugin.json +19 -0
  201. package/skills/jupyter/.claude-plugin/plugin.json +18 -0
  202. package/skills/jupyter/.codex-plugin/plugin.json +18 -0
  203. package/skills/kubernetes/.claude-plugin/plugin.json +18 -0
  204. package/skills/kubernetes/.codex-plugin/plugin.json +18 -0
  205. package/skills/learn-from-code-review/.claude-plugin/plugin.json +19 -0
  206. package/skills/learn-from-code-review/.codex-plugin/plugin.json +19 -0
  207. package/skills/linear/.claude-plugin/plugin.json +19 -0
  208. package/skills/linear/.codex-plugin/plugin.json +19 -0
  209. package/skills/linear-triage/.claude-plugin/plugin.json +21 -0
  210. package/skills/linear-triage/.codex-plugin/plugin.json +21 -0
  211. package/skills/news-digest/.claude-plugin/plugin.json +19 -0
  212. package/skills/news-digest/.codex-plugin/plugin.json +19 -0
  213. package/skills/notion/.claude-plugin/plugin.json +17 -0
  214. package/skills/notion/.codex-plugin/plugin.json +17 -0
  215. package/skills/npm/.claude-plugin/plugin.json +17 -0
  216. package/skills/npm/.codex-plugin/plugin.json +17 -0
  217. package/skills/openhands-api/.claude-plugin/plugin.json +22 -0
  218. package/skills/openhands-api/.codex-plugin/plugin.json +22 -0
  219. package/skills/openhands-automation/.claude-plugin/plugin.json +19 -0
  220. package/skills/openhands-automation/.codex-plugin/plugin.json +19 -0
  221. package/skills/openhands-enterprise-troubleshooting/.claude-plugin/plugin.json +20 -0
  222. package/skills/openhands-enterprise-troubleshooting/.codex-plugin/plugin.json +20 -0
  223. package/skills/openhands-sdk/.claude-plugin/plugin.json +20 -0
  224. package/skills/openhands-sdk/.codex-plugin/plugin.json +20 -0
  225. package/skills/pdflatex/.claude-plugin/plugin.json +18 -0
  226. package/skills/pdflatex/.codex-plugin/plugin.json +18 -0
  227. package/skills/plain-english-content/.claude-plugin/plugin.json +15 -0
  228. package/skills/plain-english-content/.codex-plugin/plugin.json +15 -0
  229. package/skills/prd/.claude-plugin/plugin.json +19 -0
  230. package/skills/prd/.codex-plugin/plugin.json +19 -0
  231. package/skills/research-brief/.claude-plugin/plugin.json +20 -0
  232. package/skills/research-brief/.codex-plugin/plugin.json +20 -0
  233. package/skills/security/.claude-plugin/plugin.json +18 -0
  234. package/skills/security/.codex-plugin/plugin.json +18 -0
  235. package/skills/skill-creator/.claude-plugin/plugin.json +17 -0
  236. package/skills/skill-creator/.codex-plugin/plugin.json +17 -0
  237. package/skills/slack-channel-monitor/.claude-plugin/plugin.json +21 -0
  238. package/skills/slack-channel-monitor/.codex-plugin/plugin.json +21 -0
  239. package/skills/slack-standup-digest/.claude-plugin/plugin.json +21 -0
  240. package/skills/slack-standup-digest/.codex-plugin/plugin.json +21 -0
  241. package/skills/spark-version-upgrade/.claude-plugin/plugin.json +20 -0
  242. package/skills/spark-version-upgrade/.codex-plugin/plugin.json +20 -0
  243. package/skills/ssh/.claude-plugin/plugin.json +18 -0
  244. package/skills/ssh/.codex-plugin/plugin.json +18 -0
  245. package/skills/swift-linux/.claude-plugin/plugin.json +17 -0
  246. package/skills/swift-linux/.codex-plugin/plugin.json +17 -0
  247. package/skills/technical-writing/.claude-plugin/plugin.json +15 -0
  248. package/skills/technical-writing/.codex-plugin/plugin.json +15 -0
  249. package/skills/theme-factory/.claude-plugin/plugin.json +19 -0
  250. package/skills/theme-factory/.codex-plugin/plugin.json +19 -0
  251. package/skills/ticket-to-code-change/.claude-plugin/plugin.json +21 -0
  252. package/skills/ticket-to-code-change/.codex-plugin/plugin.json +21 -0
  253. package/skills/upstream-fork-sync/.claude-plugin/plugin.json +21 -0
  254. package/skills/upstream-fork-sync/.codex-plugin/plugin.json +21 -0
  255. package/skills/uv/.claude-plugin/plugin.json +18 -0
  256. package/skills/uv/.codex-plugin/plugin.json +18 -0
  257. package/skills/vercel/.claude-plugin/plugin.json +18 -0
  258. package/skills/vercel/.codex-plugin/plugin.json +18 -0
  259. package/tests/fixtures/automations/capabilities.json +6 -3
  260. package/tests/fixtures/automations/github-pr-reviewer.json +64 -43
  261. package/tests/github_automation_helpers.py +7 -1
  262. package/tests/test_agent_conversation_dispatch.py +196 -0
  263. package/tests/test_automation_setup.py +3 -3
  264. package/tests/test_github_developer_delivery.py +150 -0
  265. package/tests/test_github_reviewer_delivery.py +110 -0
  266. package/tests/test_github_triage_delivery.py +78 -41
  267. package/tests/test_github_watchdog_delivery.py +233 -0
@@ -0,0 +1,79 @@
1
+ {
2
+ "id": "github-delivery-watchdog",
3
+ "version": "1.0.0",
4
+ "name": "GitHub delivery watchdog",
5
+ "category": "Project management",
6
+ "description": "Periodically check pull requests and merge only current heads with independent review, tests, and passing CI.",
7
+ "requires": {
8
+ "integrations": {},
9
+ "features": [
10
+ "customTarball"
11
+ ]
12
+ },
13
+ "estimatedSetupMinutes": 3,
14
+ "exampleImplementation": "Run a deterministic scheduled scanner using its configured GitHub credential. It creates no agent or conversation. For each managed PR, it rechecks the exact head, independent review and test statuses, GitHub Actions, base freshness, and mergeability before issuing a SHA-pinned squash merge.",
15
+ "setup": {
16
+ "version": "1.0",
17
+ "mode": "direct",
18
+ "form": {
19
+ "triggers": {
20
+ "cron": {
21
+ "schedule": {
22
+ "type": "cron",
23
+ "label": "Check frequency",
24
+ "help": "How often to check repository progress.",
25
+ "default": "*/5 * * * *",
26
+ "required": true
27
+ },
28
+ "timezone": {
29
+ "type": "timezone",
30
+ "label": "Timezone",
31
+ "help": "Timezone for the schedule.",
32
+ "default": "UTC",
33
+ "required": true
34
+ }
35
+ }
36
+ },
37
+ "args": {
38
+ "repositories": {
39
+ "type": "repo-picker",
40
+ "provider": "github",
41
+ "multiple": true,
42
+ "label": "Repositories",
43
+ "help": "Repositories this automation may work on.",
44
+ "required": true
45
+ },
46
+ "githubTokenSecret": {
47
+ "type": "text",
48
+ "label": "GitHub token secret",
49
+ "help": "Name of a saved Agent Server secret. Enter its name, not its value.",
50
+ "default": "GITHUB_PERSONAL_ACCESS_TOKEN",
51
+ "required": true
52
+ },
53
+ "branchPrefix": {
54
+ "type": "text",
55
+ "label": "Delivery branch prefix",
56
+ "help": "Only merge branches with this prefix and an issue number. Match the developer and reviewer settings.",
57
+ "default": "openhands/issue",
58
+ "required": true
59
+ }
60
+ }
61
+ },
62
+ "bundle": {
63
+ "version": "1.0.0",
64
+ "entrypoint": "python3 worker.py",
65
+ "timeout": 300,
66
+ "files": {
67
+ "worker.py": "skills/github-delivery-watchdog/scripts/worker.py",
68
+ "github_client.py": "skills/github/scripts/github_client.py"
69
+ },
70
+ "config": {
71
+ "repos": "{{form.repositories}}",
72
+ "github_token_secret": "{{form.githubTokenSecret}}",
73
+ "branch_prefix": "{{form.branchPrefix}}"
74
+ }
75
+ },
76
+ "message": "Configure the repositories, credential name, delivery branch prefix, and schedule."
77
+ },
78
+ "popularityRank": 80
79
+ }
@@ -2,20 +2,17 @@
2
2
  "id": "github-issue-to-pr",
3
3
  "name": "GitHub issue to PR",
4
4
  "category": "Software development",
5
- "description": "Watch for a configurable label on GitHub issues, implement the issue in a clone of the default branch, and open a pull request for each label event.",
5
+ "description": "Implement ready GitHub issues, address pull request feedback, and publish tested changes for review.",
6
6
  "requires": {
7
- "integrations": {
8
- "github": {
9
- "message": "Used to read labelled issues, push the branch, and open the pull request."
10
- }
11
- },
7
+ "integrations": {},
12
8
  "features": [
13
- "customTarball"
9
+ "customTarball",
10
+ "agentProfiles"
14
11
  ]
15
12
  },
16
13
  "popularityRank": 95,
17
14
  "estimatedSetupMinutes": 4,
18
- "exampleImplementation": "Trigger: cron polling for open GitHub issues with a configured label such as openhands\nRequired secret: GITHUB_PERSONAL_ACCESS_TOKEN, with permission to write contents, issues, and pull requests\n\n1. Read the repositories, trigger label, branch prefix, draft mode, and polling schedule from setup.\n2. Poll each repository independently, with its own state, so issue numbers never collide.\n3. List open labelled issues, drop pull requests, and find the latest matching GitHub labeled issue event for each.\n4. Deduplicate on the label event ID so every label application queues exactly one attempt.\n5. Clone the default branch into a directory of its own, create the working branch, and start an OpenHands conversation with that directory as its workspace. The clone carries no credential and the agent is handed no secrets, because the prompt is built from an issue body that anyone can write.\n6. Comment on the issue with the branch and the conversation link.\n7. Once the conversation has stopped, commit whatever the agent left, push the branch, open a draft pull request titled after the issue, and comment the link on the issue. An agent that made no changes gets its answer posted instead.\n8. Remove the clone once the conversation has stopped, so nothing accumulates between runs.",
15
+ "exampleImplementation": "A scheduled scanner selects every ready issue and each pull request whose exact head failed review. It submits one idempotent subject turn for each item. The profile-backed agent then clones the repository in its own runtime, implements or revises the change, tests it, pushes it, and requests independent review.",
19
16
  "impact": {
20
17
  "basis": "completed-runs",
21
18
  "one": "1 issue sweep completed",
@@ -90,24 +87,35 @@
90
87
  "label": "Ready for review"
91
88
  }
92
89
  ]
90
+ },
91
+ "githubTokenSecret": {
92
+ "type": "text",
93
+ "label": "GitHub token secret",
94
+ "help": "Name of a saved Agent Server secret. Include it in the selected profile so the delegated agent can use GitHub.",
95
+ "default": "GITHUB_PERSONAL_ACCESS_TOKEN",
96
+ "required": true
93
97
  }
94
98
  }
95
99
  },
96
100
  "bundle": {
97
- "version": "1.0.0",
98
- "entrypoint": "python3 main.py",
99
- "timeout": 900,
101
+ "version": "1.2.1",
102
+ "entrypoint": "python3 worker.py",
103
+ "timeout": 300,
100
104
  "files": {
101
105
  "main.py": "skills/github-issue-to-pr/scripts/main.py",
102
- "github_client.py": "skills/github/scripts/github_client.py"
106
+ "agent_conversation.py": "skills/github/scripts/agent_conversation.py",
107
+ "github_client.py": "skills/github/scripts/github_client.py",
108
+ "worker.py": "skills/github-issue-to-pr/scripts/worker.py"
103
109
  },
104
110
  "config": {
105
111
  "repos": "{{form.repositories}}",
106
112
  "trigger_label": "{{form.triggerLabel}}",
107
113
  "branch_prefix": "{{form.branchPrefix}}",
108
- "pull_request_mode": "{{form.pullRequestMode}}"
114
+ "pull_request_mode": "{{form.pullRequestMode}}",
115
+ "github_token_secret": "{{form.githubTokenSecret}}"
109
116
  }
110
117
  },
111
- "message": "This deployment cannot run the scheduled issue-to-PR automation directly. Set it up in this conversation instead: confirm the repositories to watch, the trigger label, the branch prefix, whether pull requests open as drafts, and the polling schedule, then create the automation."
112
- }
118
+ "message": "Configure the repositories, labels, branch prefix, pull request mode, agent profile, and schedule."
119
+ },
120
+ "version": "1.2.1"
113
121
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "id": "github-issue-triage",
3
- "version": "1.0.0",
3
+ "version": "1.1.1",
4
4
  "name": "GitHub issue triage",
5
5
  "category": "Project management",
6
6
  "description": "Prioritize open issues and establish acceptance criteria before marking them ready for development.",
@@ -54,11 +54,12 @@
54
54
  }
55
55
  },
56
56
  "bundle": {
57
- "version": "1.0.0",
57
+ "version": "1.1.1",
58
58
  "entrypoint": "python3 worker.py",
59
- "timeout": 3000,
59
+ "timeout": 300,
60
60
  "files": {
61
61
  "worker.py": "skills/github-issue-triage/scripts/worker.py",
62
+ "agent_conversation.py": "skills/github/scripts/agent_conversation.py",
62
63
  "github_client.py": "skills/github/scripts/github_client.py"
63
64
  },
64
65
  "config": {
@@ -1,22 +1,19 @@
1
1
  {
2
2
  "id": "github-pr-reviewer",
3
- "version": "1.0.0",
3
+ "version": "1.1.1",
4
4
  "name": "GitHub code review",
5
5
  "category": "Code review",
6
- "description": "Watch for a configurable label on GitHub pull requests, inspect full PR and repository context, and post an AI review comment once per label event.",
6
+ "description": "Review labeled pull-request heads, publish readable findings, and record exact-head test and review decisions.",
7
7
  "requires": {
8
- "integrations": {
9
- "github": {
10
- "message": "Used to read pull requests and post review comments."
11
- }
12
- },
8
+ "integrations": {},
13
9
  "features": [
14
- "customTarball"
10
+ "customTarball",
11
+ "agentProfiles"
15
12
  ]
16
13
  },
17
14
  "popularityRank": 100,
18
15
  "estimatedSetupMinutes": 4,
19
- "exampleImplementation": "Trigger: cron polling for open GitHub PRs with a configured label such as openhands-review\nRequired secret: GITHUB_PERSONAL_ACCESS_TOKEN, with permission to write pull request reviews\n\n1. Read the repositories, trigger label, review tone, and polling schedule from setup.\n2. Poll each repository independently, with its own state, so PR numbers never collide.\n3. List open PRs and find the latest matching GitHub labeled issue event for each labeled PR.\n4. Deduplicate on the label event ID so every label application queues exactly one review.\n5. Extract the PR head commit into a directory of its own and start an OpenHands conversation with that directory as its workspace, so the agent reviews the exact commit without cloning anything.\n6. Post an acknowledgement with the conversation link, then confirm on GitHub that the review was published for that head SHA, falling back to posting the agent's text as a comment.\n7. Remove the checkout once the conversation has stopped, so nothing accumulates between runs.",
16
+ "exampleImplementation": "A scheduled scanner selects every labeled PR head and submits an idempotent subject turn. The profile-backed agent clones that exact head in its runtime, reuses the established review workflow, runs appropriate tests, publishes a readable native review, and records exact-head review and test statuses.",
20
17
  "impact": {
21
18
  "basis": "completed-runs",
22
19
  "one": "1 PR review sweep completed",
@@ -84,23 +81,33 @@
84
81
  "label": "Friendly"
85
82
  }
86
83
  ]
84
+ },
85
+ "githubTokenSecret": {
86
+ "type": "text",
87
+ "label": "GitHub token secret",
88
+ "help": "Name of a saved Agent Server secret. Include it in the selected profile so the delegated agent can use GitHub.",
89
+ "default": "GITHUB_PERSONAL_ACCESS_TOKEN",
90
+ "required": true
87
91
  }
88
92
  }
89
93
  },
90
94
  "bundle": {
91
- "version": "1.0.0",
92
- "entrypoint": "python3 main.py",
93
- "timeout": 600,
95
+ "version": "1.1.1",
96
+ "entrypoint": "python3 worker.py",
97
+ "timeout": 300,
94
98
  "files": {
95
99
  "main.py": "skills/github-pr-reviewer/scripts/main.py",
96
- "github_client.py": "skills/github/scripts/github_client.py"
100
+ "agent_conversation.py": "skills/github/scripts/agent_conversation.py",
101
+ "github_client.py": "skills/github/scripts/github_client.py",
102
+ "worker.py": "skills/github-pr-reviewer/scripts/worker.py"
97
103
  },
98
104
  "config": {
99
105
  "repos": "{{form.repositories}}",
100
106
  "trigger_label": "{{form.triggerLabel}}",
101
- "review_tone": "{{form.reviewTone}}"
107
+ "review_tone": "{{form.reviewTone}}",
108
+ "github_token_secret": "{{form.githubTokenSecret}}"
102
109
  }
103
110
  },
104
- "message": "This deployment cannot run the scheduled review automation directly. Set it up in this conversation instead: confirm the repository to review, the trigger label, the review tone, and the polling schedule, then create the automation."
111
+ "message": "Configure the repositories, review label, tone, credential name, agent profile, and schedule."
105
112
  }
106
113
  }
@@ -19,10 +19,11 @@ import entry13 from "./catalog/jira-issue-to-gitlab-mr/manifest.json" with { typ
19
19
  import entry14 from "./catalog/research-brief-writer/manifest.json" with { type: "json" };
20
20
  import entry15 from "./catalog/jira-issue-to-bitbucket-pr/manifest.json" with { type: "json" };
21
21
  import entry16 from "./catalog/github-agents-md-maintainer/manifest.json" with { type: "json" };
22
- import entry17 from "./catalog/github-issue-triage/manifest.json" with { type: "json" };
23
- import entry18 from "./catalog/upstream-fork-sync/manifest.json" with { type: "json" };
24
- import entry19 from "./catalog/incident-retrospective-drafter/manifest.json" with { type: "json" };
25
- import entry20 from "./catalog/news-digest/manifest.json" with { type: "json" };
22
+ import entry17 from "./catalog/github-delivery-watchdog/manifest.json" with { type: "json" };
23
+ import entry18 from "./catalog/github-issue-triage/manifest.json" with { type: "json" };
24
+ import entry19 from "./catalog/upstream-fork-sync/manifest.json" with { type: "json" };
25
+ import entry20 from "./catalog/incident-retrospective-drafter/manifest.json" with { type: "json" };
26
+ import entry21 from "./catalog/news-digest/manifest.json" with { type: "json" };
26
27
 
27
28
  export const AUTOMATION_CATALOG_ENTRIES = [
28
29
  entry0,
@@ -46,4 +47,5 @@ export const AUTOMATION_CATALOG_ENTRIES = [
46
47
  entry18,
47
48
  entry19,
48
49
  entry20,
50
+ entry21,
49
51
  ];
@@ -870,6 +870,12 @@
870
870
  "source": "./skills/github-issue-triage",
871
871
  "description": "Prioritize open issues and establish acceptance criteria before marking them ready for development.",
872
872
  "category": "automations"
873
+ },
874
+ {
875
+ "name": "github-delivery-watchdog",
876
+ "source": "./skills/github-delivery-watchdog",
877
+ "description": "Periodically check pull requests and merge only current heads with independent review, tests, and passing CI.",
878
+ "category": "automations"
873
879
  }
874
880
  ]
875
881
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openhands/extensions",
3
- "version": "0.21.0",
3
+ "version": "0.22.1",
4
4
  "description": "Public OpenHands extension catalogs for skills, plugins, integrations, and automation templates.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "city-weather",
3
+ "version": "1.0.0",
4
+ "description": "Get current weather, time, and precipitation forecast for any city",
5
+ "author": {
6
+ "name": "JP Shackelford",
7
+ "email": "jpshackelford@users.noreply.github.com"
8
+ },
9
+ "homepage": "https://github.com/jpshackelford/openhands-sample-plugins",
10
+ "repository": "https://github.com/jpshackelford/openhands-sample-plugins",
11
+ "license": "MIT",
12
+ "keywords": ["weather", "time", "forecast", "temperature", "precipitation"]
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "city-weather",
3
+ "version": "1.0.0",
4
+ "description": "Get current weather, time, and precipitation forecast for any city",
5
+ "author": {
6
+ "name": "JP Shackelford",
7
+ "email": "jpshackelford@users.noreply.github.com"
8
+ },
9
+ "homepage": "https://github.com/jpshackelford/openhands-sample-plugins",
10
+ "repository": "https://github.com/jpshackelford/openhands-sample-plugins",
11
+ "license": "MIT",
12
+ "keywords": ["weather", "time", "forecast", "temperature", "precipitation"]
13
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "cobol-modernization",
3
+ "version": "1.0.0",
4
+ "description": "End-to-end COBOL to Java migration workflow. Handles build setup, mainframe dependency removal, and code migration with 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
+ "cobol",
14
+ "java",
15
+ "migration",
16
+ "mainframe",
17
+ "modernization"
18
+ ]
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "cobol-modernization",
3
+ "version": "1.0.0",
4
+ "description": "End-to-end COBOL to Java migration workflow. Handles build setup, mainframe dependency removal, and code migration with 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
+ "cobol",
14
+ "java",
15
+ "migration",
16
+ "mainframe",
17
+ "modernization"
18
+ ]
19
+ }
@@ -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,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,13 @@
1
+ {
2
+ "name": "magic-test",
3
+ "version": "1.0.0",
4
+ "description": "A simple test plugin with a magic word skill for verifying plugin loading",
5
+ "author": {
6
+ "name": "OpenHands Test",
7
+ "email": "test@openhands.dev"
8
+ },
9
+ "homepage": "https://github.com/jpshackelford/openhands-sample-plugins",
10
+ "repository": "https://github.com/jpshackelford/openhands-sample-plugins",
11
+ "license": "MIT",
12
+ "keywords": ["test", "magic", "plugin", "verification"]
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "magic-test",
3
+ "version": "1.0.0",
4
+ "description": "A simple test plugin with a magic word skill for verifying plugin loading",
5
+ "author": {
6
+ "name": "OpenHands Test",
7
+ "email": "test@openhands.dev"
8
+ },
9
+ "homepage": "https://github.com/jpshackelford/openhands-sample-plugins",
10
+ "repository": "https://github.com/jpshackelford/openhands-sample-plugins",
11
+ "license": "MIT",
12
+ "keywords": ["test", "magic", "plugin", "verification"]
13
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "migration-scoring",
3
+ "version": "1.0.0",
4
+ "description": "Evaluate code migration quality with coverage, correctness, and style scoring. Generates executive reports with actionable recommendations.",
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
+ "migration",
14
+ "scoring",
15
+ "quality",
16
+ "evaluation",
17
+ "reporting"
18
+ ]
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "migration-scoring",
3
+ "version": "1.0.0",
4
+ "description": "Evaluate code migration quality with coverage, correctness, and style scoring. Generates executive reports with actionable recommendations.",
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
+ "migration",
14
+ "scoring",
15
+ "quality",
16
+ "evaluation",
17
+ "reporting"
18
+ ]
19
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "onboarding",
3
+ "version": "1.0.0",
4
+ "description": "Assess repository agent-readiness across five pillars, propose high-impact fixes, and generate repo-specific AGENTS.md files",
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
+ "onboarding",
14
+ "readiness",
15
+ "agents-md",
16
+ "agent-readiness",
17
+ "assessment",
18
+ "ai-readiness"
19
+ ]
20
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "onboarding",
3
+ "version": "1.0.0",
4
+ "description": "Assess repository agent-readiness across five pillars, propose high-impact fixes, and generate repo-specific AGENTS.md files",
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
+ "onboarding",
14
+ "readiness",
15
+ "agents-md",
16
+ "agent-readiness",
17
+ "assessment",
18
+ "ai-readiness"
19
+ ]
20
+ }