@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,25 @@
1
+ ---
2
+ name: custom-codereview-guide
3
+ description: Repository-specific code review guidelines for OpenHands/extensions
4
+ triggers:
5
+ - /codereview
6
+ ---
7
+
8
+ # Extensions Repo — Code Review Guidelines
9
+
10
+ ## SDK Documentation Placement
11
+
12
+ If a PR adds or modifies OpenHands SDK-specific documentation (API guides, SDK usage examples, SDK feature descriptions), flag it:
13
+
14
+ - The canonical source of truth for SDK documentation is <https://docs.openhands.dev/sdk> and its `llms.txt` index.
15
+ - The `skills/openhands-sdk/SKILL.md` in this repo is a thin pointer to the docs site. It should NOT contain duplicated SDK content.
16
+ - **Push back**: ask the submitter to contribute SDK documentation changes to [OpenHands/docs](https://github.com/OpenHands/docs) instead.
17
+
18
+ ## Pre-release Integration Catalog Changes
19
+
20
+ The `@openhands/extensions/mcps` catalog was experimental and pre-release. If a
21
+ PR intentionally replaces it with the broader `integrations` catalog and updates
22
+ known downstream consumers in the same coordinated stack, do not require
23
+ backward-compatible `mcps` aliases or a deprecation window. Require migration
24
+ documentation for consumers, but accept a clean breaking change for this
25
+ pre-release surface.
@@ -0,0 +1,38 @@
1
+ <!-- Keep this PR as draft until it is ready for review. -->
2
+
3
+ <!-- AI/LLM agents: be concise and specific. Do not check the box below. -->
4
+
5
+ - [ ] A human has tested these changes.
6
+
7
+ ---
8
+
9
+ ## Why
10
+
11
+ <!-- Describe problem, motivation, etc.-->
12
+
13
+ ## Summary
14
+
15
+ <!-- 1-3 bullets describing what changed. -->
16
+ -
17
+
18
+ ## Issue Number
19
+ <!-- Required if there is a relevant issue to this PR. -->
20
+
21
+ ## How to Test
22
+
23
+ <!--
24
+ Required. Share the steps for the reviewer to be able to test your PR. e.g. You can test by running `npm install` then `npm build dev`.
25
+
26
+ If you could not test this, say why.
27
+ -->
28
+
29
+ ## Video/Screenshots
30
+
31
+ <!--
32
+ Provide a video or screenshots of testing your PR. e.g. you added a new feature to the gui, show us the video of you testing it successfully.
33
+
34
+ -->
35
+
36
+ ## Notes
37
+
38
+ <!-- Optional: migrations, config changes, rollout concerns, follow-ups, or anything reviewers should know. -->
@@ -0,0 +1,14 @@
1
+ changelog:
2
+ categories:
3
+ - title: Features
4
+ labels: ["type: feat"]
5
+ - title: Bug Fixes
6
+ labels: ["type: fix"]
7
+ - title: Performance
8
+ labels: ["type: perf"]
9
+ - title: Documentation
10
+ labels: ["type: docs"]
11
+ - title: Maintenance
12
+ labels: ["type: chore", "type: build", "type: ci", "type: refactor", "type: style", "type: test", "type: revert"]
13
+ - title: Other Changes
14
+ labels: ["*"]
@@ -0,0 +1,72 @@
1
+ name: Check Extensions
2
+
3
+ on:
4
+ pull_request:
5
+ branches: ["*"]
6
+ push:
7
+ branches: ["main", "master"]
8
+
9
+ jobs:
10
+ validate-claude-code:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - name: Checkout repository
14
+ uses: actions/checkout@v4
15
+
16
+ - name: Setup Node.js
17
+ uses: actions/setup-node@v4
18
+ with:
19
+ node-version: "20"
20
+
21
+ - name: Install Claude Code CLI
22
+ run: npm install -g @anthropic-ai/claude-code
23
+
24
+ - name: Validate all plugins with Claude Code
25
+ run: |
26
+ failed=0
27
+ for plugin_dir in plugins/*/; do
28
+ if [ -d "${plugin_dir}.plugin" ]; then
29
+ echo "Validating ${plugin_dir}..."
30
+ if ! claude plugin validate "${plugin_dir}"; then
31
+ echo "❌ Validation failed for ${plugin_dir}"
32
+ failed=1
33
+ else
34
+ echo "✅ ${plugin_dir} is valid"
35
+ fi
36
+ fi
37
+ done
38
+ if [ "$failed" -ne 0 ]; then
39
+ echo "::error::One or more plugins failed Claude Code validation"
40
+ exit 1
41
+ fi
42
+
43
+ sync-extensions:
44
+ runs-on: ubuntu-latest
45
+ steps:
46
+ - name: Checkout repository
47
+ uses: actions/checkout@v4
48
+
49
+ - name: Setup Python
50
+ uses: actions/setup-python@v5
51
+ with:
52
+ python-version: "3.12"
53
+
54
+ - name: Install dependencies
55
+ run: pip install pyyaml
56
+
57
+ - name: Check extensions are in sync
58
+ run: python scripts/sync_extensions.py --check
59
+
60
+ sync-sdk-skill:
61
+ runs-on: ubuntu-latest
62
+ steps:
63
+ - name: Checkout repository
64
+ uses: actions/checkout@v4
65
+
66
+ - name: Setup Python
67
+ uses: actions/setup-python@v5
68
+ with:
69
+ python-version: "3.12"
70
+
71
+ - name: Check SDK skill is up to date
72
+ run: python scripts/sync_openhands_sdk_skill.py --check
@@ -0,0 +1,89 @@
1
+ name: Publish to npm
2
+
3
+ # Publishes @openhands/extensions to npm via OIDC trusted publishing (no token).
4
+ # Fires when release-please pushes a version tag (v*) cut from main; the manual
5
+ # dispatch path re-publishes a specific tag. Trusted publishing must be
6
+ # configured for this package on npmjs.com (this repo + this workflow file).
7
+ on:
8
+ push:
9
+ tags:
10
+ - 'v*'
11
+ workflow_dispatch:
12
+ inputs:
13
+ tag:
14
+ description: 'Release tag to publish (e.g. v0.1.0)'
15
+ required: true
16
+ type: string
17
+
18
+ concurrency:
19
+ group: npm-publish-${{ inputs.tag || github.ref }}
20
+ cancel-in-progress: false
21
+
22
+ permissions:
23
+ contents: read
24
+ id-token: write
25
+
26
+ jobs:
27
+ publish:
28
+ name: Publish to npm
29
+ runs-on: ubuntu-latest
30
+ timeout-minutes: 15
31
+
32
+ steps:
33
+ - name: Check out repository
34
+ uses: actions/checkout@v6
35
+ with:
36
+ ref: ${{ inputs.tag || github.ref }}
37
+
38
+ # Trusted publishing requires Node 22.14.0+ and npm 11.5.1+
39
+ # See: https://docs.npmjs.com/trusted-publishers/
40
+ - name: Set up Node.js for npm trusted publishing
41
+ uses: actions/setup-node@v6
42
+ with:
43
+ node-version: '24'
44
+ registry-url: https://registry.npmjs.org
45
+
46
+ - name: Verify npm version supports trusted publishing
47
+ run: |
48
+ echo "Node version: $(node --version)"
49
+ echo "npm version: $(npm --version)"
50
+ NPM_VERSION=$(npm --version)
51
+ NPM_MAJOR=$(echo $NPM_VERSION | cut -d. -f1)
52
+ NPM_MINOR=$(echo $NPM_VERSION | cut -d. -f2)
53
+ if [ "$NPM_MAJOR" -lt 11 ] || ([ "$NPM_MAJOR" -eq 11 ] && [ "$NPM_MINOR" -lt 5 ]); then
54
+ echo "Error: npm 11.5.1+ required for trusted publishing, got $NPM_VERSION"
55
+ exit 1
56
+ fi
57
+ echo "✓ npm $NPM_VERSION meets trusted publishing requirements"
58
+
59
+ # No install/test/build steps: @openhands/extensions ships source directly
60
+ # (plain ESM + hand-written .d.ts + JSON catalogs) with only peerDependencies,
61
+ # and has no build script, test suite, or lockfile.
62
+
63
+ - name: Verify package contents
64
+ run: npm pack --dry-run
65
+
66
+ - name: Validate package version matches release tag
67
+ env:
68
+ # Pass inputs.tag via env var to prevent script injection from
69
+ # GitHub Actions expression interpolation inside run blocks.
70
+ INPUT_TAG: ${{ inputs.tag }}
71
+ run: |
72
+ PACKAGE_VERSION=$(node -p "require('./package.json').version")
73
+ # Resolve tag: prefer workflow_dispatch input, fall back to push-event GITHUB_REF
74
+ if [ -n "$INPUT_TAG" ]; then
75
+ RAW_TAG="$INPUT_TAG"
76
+ else
77
+ RAW_TAG="${GITHUB_REF#refs/tags/}"
78
+ fi
79
+ TAG_VERSION="${RAW_TAG#v}"
80
+ echo "Package version: $PACKAGE_VERSION"
81
+ echo "Release tag version: $TAG_VERSION"
82
+ if [ "$PACKAGE_VERSION" != "$TAG_VERSION" ]; then
83
+ echo "Error: package.json version ($PACKAGE_VERSION) doesn't match release tag ($TAG_VERSION)"
84
+ exit 1
85
+ fi
86
+ echo "✓ Version $PACKAGE_VERSION matches release tag"
87
+
88
+ - name: Publish to npm with provenance
89
+ run: npm publish --access public --provenance
@@ -0,0 +1,30 @@
1
+ name: pr
2
+
3
+ # Caller workflow for the shared PR-title lint/label in OpenHands/release-actions.
4
+ #
5
+ # Trigger is pull_request_target (NOT pull_request) so the lint/label also runs
6
+ # on PRs from forks — e.g. external contributors who aren't org members. On a
7
+ # fork-originated `pull_request`, GITHUB_TOKEN is read-only, so the label step
8
+ # (which needs pull-requests: write) would fail; pull_request_target runs in the
9
+ # base repo's context with a writable token.
10
+ #
11
+ # pull_request_target is safe here — and only stays safe — because of two
12
+ # invariants enforced by the reusable workflow:
13
+ # 1. It NEVER checks out or executes any code from the PR. It only reads the
14
+ # PR title from the event payload, so fork code never runs with the base
15
+ # repo's token/secrets. Do not add a checkout step.
16
+ # 2. This caller does NOT pass `secrets: inherit`, so the release App's
17
+ # credentials are not in scope for the title workflow — it runs on the
18
+ # default GITHUB_TOKEN alone. Do not add `secrets: inherit`.
19
+ on:
20
+ pull_request_target:
21
+ # synchronize is needed alongside the title events: required status checks
22
+ # attach to a head SHA, and release-please force-pushes new commits to its
23
+ # release PR, so the lint must re-run on each update to stay green.
24
+ types: [opened, edited, reopened, synchronize]
25
+
26
+ jobs:
27
+ pr-title:
28
+ permissions:
29
+ pull-requests: write
30
+ uses: OpenHands/release-actions/.github/workflows/pr-title.yml@main
@@ -0,0 +1,24 @@
1
+ name: release
2
+
3
+ # Caller workflow for the shared release automation in OpenHands/release-actions.
4
+ # This file owns the trigger; the reusable workflow owns the logic.
5
+ on:
6
+ push:
7
+ branches:
8
+ - main
9
+ # Maintenance/freeze branches (e.g. release/0.2). The reusable workflow
10
+ # scopes the release to whichever branch triggered this run.
11
+ - 'release/**'
12
+
13
+ jobs:
14
+ release-please:
15
+ # The caller must grant the permissions the reusable workflow needs; the
16
+ # effective token is the intersection of the two.
17
+ permissions:
18
+ contents: write
19
+ pull-requests: write
20
+ # Passes the org-level RELEASE_APP_ID / RELEASE_APP_PRIVATE_KEY through so the
21
+ # reusable workflow can mint the GitHub App token. These are org secrets —
22
+ # nothing to create per-repo.
23
+ secrets: inherit
24
+ uses: OpenHands/release-actions/.github/workflows/release-please.yml@main
@@ -0,0 +1,25 @@
1
+ name: Tests
2
+
3
+ on:
4
+ pull_request:
5
+ branches: ["*"]
6
+ push:
7
+ branches: ["main", "master"]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - name: Checkout repository
14
+ uses: actions/checkout@v4
15
+
16
+ - name: Install uv
17
+ uses: astral-sh/setup-uv@v7
18
+ with:
19
+ enable-cache: true
20
+ python-version: "3.12"
21
+
22
+ - name: Run tests
23
+ run: uv run --group test pytest tests/
24
+ env:
25
+ PYTHONPATH: ${{ github.workspace }}
@@ -0,0 +1,87 @@
1
+ # Vulnerability Scan and Remediation Workflow
2
+ #
3
+ # This is a thin wrapper that uses the OpenHands vulnerability-remediation action.
4
+ # It auto-updates when the action in OpenHands/extensions is updated.
5
+ #
6
+ # INSTALLATION:
7
+ # curl -o .github/workflows/vulnerability-scan.yml \
8
+ # https://raw.githubusercontent.com/OpenHands/extensions/main/plugins/vulnerability-remediation/workflows/vulnerability-scan.yml
9
+ #
10
+ # REQUIRED SECRETS:
11
+ # - LLM_API_KEY: API key for your LLM provider (OpenAI, Anthropic, etc.)
12
+ #
13
+ # OPTIONAL SECRETS:
14
+ # - PAT_TOKEN: GitHub PAT for creating PRs (uses GITHUB_TOKEN if not set)
15
+ #
16
+ # The action will:
17
+ # 1. Run a Trivy security scan
18
+ # 2. Skip agent if no vulnerabilities found (saves costs)
19
+ # 3. Create PRs for fixable vulnerabilities
20
+
21
+ name: Vulnerability Scan and Remediation
22
+
23
+ on:
24
+ # Run weekly on Monday at 9am UTC
25
+ schedule:
26
+ - cron: '0 9 * * 1'
27
+
28
+ # Allow manual trigger
29
+ workflow_dispatch:
30
+ inputs:
31
+ severity_threshold:
32
+ description: 'Minimum severity to remediate'
33
+ required: false
34
+ default: 'HIGH'
35
+ type: choice
36
+ options:
37
+ - CRITICAL
38
+ - HIGH
39
+ - MEDIUM
40
+ - LOW
41
+ max_vulnerabilities:
42
+ description: 'Maximum vulnerabilities to fix (0 = unlimited)'
43
+ required: false
44
+ default: '5'
45
+ type: string
46
+ llm_model:
47
+ description: 'LLM model to use for remediation'
48
+ required: false
49
+ default: 'anthropic/claude-sonnet-4-5-20250929'
50
+ type: string
51
+ llm_base_url:
52
+ description: 'Custom LLM base URL (optional)'
53
+ required: false
54
+ default: ''
55
+ type: string
56
+
57
+ permissions:
58
+ contents: write
59
+ pull-requests: write
60
+ security-events: read
61
+
62
+ jobs:
63
+ scan-and-remediate:
64
+ runs-on: ubuntu-latest
65
+ timeout-minutes: 60
66
+
67
+ steps:
68
+ # Uses @main to auto-update when the action is improved
69
+ - name: Run Vulnerability Remediation
70
+ id: remediate
71
+ uses: OpenHands/extensions/plugins/vulnerability-remediation@main
72
+ with:
73
+ severity-threshold: ${{ inputs.severity_threshold || 'HIGH' }}
74
+ max-vulnerabilities: ${{ inputs.max_vulnerabilities || '5' }}
75
+ llm-model: ${{ inputs.llm_model || 'anthropic/claude-sonnet-4-5-20250929' }}
76
+ llm-base-url: ${{ inputs.llm_base_url || '' }}
77
+ llm-api-key: ${{ secrets.LLM_API_KEY }}
78
+ github-token: ${{ secrets.OPENHANDS_BOT_GITHUB_PAT_PUBLIC || secrets.GITHUB_TOKEN }}
79
+
80
+ - name: Summary
81
+ run: |
82
+ echo "### Vulnerability Scan Results" >> $GITHUB_STEP_SUMMARY
83
+ if [ "${{ steps.remediate.outputs.scan-only }}" == "true" ]; then
84
+ echo "✅ No vulnerabilities found that need remediation." >> $GITHUB_STEP_SUMMARY
85
+ else
86
+ echo "🔍 Found ${{ steps.remediate.outputs.vulnerabilities-found }} vulnerabilities to remediate." >> $GITHUB_STEP_SUMMARY
87
+ fi
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.2.0"
3
+ }
package/AGENTS.md ADDED
@@ -0,0 +1,132 @@
1
+ # OpenHands Extensions — Agent Notes
2
+
3
+ This repository (`OpenHands/extensions`) is the **public extensions registry** for OpenHands.
4
+ It contains **shareable skills and plugins** that can be loaded by OpenHands (CLI/GUI/Cloud) and by client code using the **Software Agent SDK**.
5
+
6
+ ## What this repo contains
7
+
8
+ - `skills/` — a catalog of skills, **one directory per skill**.
9
+ - `skills/<skill-name>/SKILL.md` — the skill definition (AgentSkills-style progressive disclosure)
10
+ - `skills/<skill-name>/README.md` — optional extra docs/examples for humans
11
+
12
+ - `plugins/` — a catalog of plugins with executable code components.
13
+ - `plugins/<plugin-name>/SKILL.md` — the plugin definition
14
+ - `plugins/<plugin-name>/hooks/` — lifecycle hooks (optional)
15
+ - `plugins/<plugin-name>/scripts/` — utility scripts (optional)
16
+
17
+ There is no application code here; the primary artifacts are Markdown skill definitions and plugin configurations, which can contain `scripts/`, `hooks/` sub-directories.
18
+
19
+ ## How client code uses this repo
20
+
21
+ ### OpenHands Applications
22
+
23
+ OpenHands can load skills from a project directory (repo-level) and from user-level locations.
24
+ This repository is the **global/public** registry referenced by the docs.
25
+
26
+ ### Skill loading models to know
27
+
28
+ OpenHands supports two complementary mechanisms:
29
+
30
+ 1. **Always-on context (repository rules)**
31
+ - Loaded at conversation start.
32
+ - Prefer a root `AGENTS.md` (and optionally model-specific variants like `CLAUDE.md` / `GEMINI.md`).
33
+
34
+ 2. **AgentSkills (progressive disclosure), with an OpenHands extension for keyword triggers**
35
+ - Each skill lives in its own directory with a `SKILL.md` entry point.
36
+ - The agent is shown a catalog (name/description/location) and decides when to open/read the full content.
37
+ - **OpenHands extension**: the `SKILL.md` may include optional `triggers:` frontmatter to enable keyword-based activation.
38
+
39
+ This registry primarily provides (2). Client repositories typically add (1) for repo-specific, always-on instructions.
40
+
41
+ ### Software Agent SDK
42
+
43
+ SDK consumers typically load skills either:
44
+
45
+ - as **always-loaded context** (e.g., `AGENTS.md`), and/or
46
+ - as **trigger-loaded keyword skills**, and/or
47
+ - as **progressive-disclosure AgentSkills** by discovering `SKILL.md` files under a directory.
48
+
49
+ See: https://docs.openhands.dev/sdk/guides/skill
50
+
51
+ ## AgentSkills / Skill authoring rules (follow these)
52
+
53
+ OpenHands uses an **extended AgentSkills standard**:
54
+
55
+ - **Compatible with the AgentSkills specification** (https://agentskills.io/specification)
56
+ - **Extended with optional `triggers:` frontmatter** for keyword-based activation
57
+
58
+ When editing or adding skills in this repo, follow these rules (and add new skills to `marketplaces/openhands-extensions.json`):
59
+
60
+ 1. **One skill per directory**
61
+ - Create `skills/<skill-name>/SKILL.md`.
62
+ - Keep the directory name stable; it is used as the skill identifier/location.
63
+
64
+ 2. **SKILL.md should be progressive disclosure**
65
+ - Put a concise summary/description first.
66
+ - Include only the information needed for an agent to decide whether to open/read the skill.
67
+ - If the skill needs large references, keep them in the same directory (e.g., `references/`) and point to them.
68
+
69
+ 3. **Be specific and operational**
70
+ - Prefer checklists, steps, and concrete examples.
71
+ - Avoid vague guidance like “be careful” without actionable criteria.
72
+
73
+ 4. **Avoid repo-local assumptions**
74
+ - Skills here are **public and reusable**.
75
+ - Don’t reference private paths, secrets, or company-specific URLs.
76
+
77
+ 5. **Do not include secrets or sensitive data**
78
+ - Never commit API keys, tokens, credentials, private endpoints, or internal customer data.
79
+
80
+ 6. **Prefer minimal, composable skills**
81
+ - Keep a skill focused on a single domain/task.
82
+ - If it grows large, split it into multiple skills.
83
+
84
+ 7. **Compatibility notes**
85
+ - The legacy `.openhands/microagents/` location may still exist in user repos, but this registry uses the current skills layout.
86
+
87
+ ## Repository conventions
88
+
89
+ - **Punctuation style**: Use plain hyphens (`-`) instead of em dashes (`—` / `\u2014`) in skill descriptions, SKILL.md content, and marketplace JSON entries.
90
+ - Keep formatting consistent across skills.
91
+ - If you change a skill’s behavior or scope, update its `README.md` (if present) accordingly.
92
+ - If you change top-level documentation, ensure links still resolve.
93
+ - `integrations/catalog/*.json` and `integrations/index.js` are the source of truth consumed by `@openhands/extensions`; agent-canvas and integrations-hub import this package directly, so integration marketplace fixes belong here rather than in app-local constants. When upstream MCP projects move repos, verify both `docsUrl` and the connection option (`transport`, `command`/`args`, or URL), not just links.
94
+ - For Python test runs, prefer `uv sync --group test` followed by `uv run pytest -q`; the full suite depends on `openhands-sdk`, which is not available in the base environment.
95
+ - Agent-driven plugins (for example `plugins/pr-review` and `plugins/release-notes`) use `uv run --with openhands-sdk --with openhands-tools ...` and require an `LLM_API_KEY` in addition to `GITHUB_TOKEN`.
96
+ - For OpenHands Cloud API guidance, automations, and CLI integration, use `plugins/openhands`. It is the canonical unified OpenHands plugin covering the V1 Cloud API, Automations API, and CLI. The individual skills (`skills/openhands-api`, `skills/openhands-automation`) are also available standalone.
97
+ - When reviewing or editing `skills/openhands-sdk`, validate copy-paste imports against the released packages with `uv run --with openhands-tools --with openhands-workspace --with openhands-agent-server python ...`. In the current released workspace package, the exported remote workspace classes are `APIRemoteWorkspace` / `OpenHandsCloudWorkspace`; `RemoteAPIWorkspace` is not available.
98
+ - For agent-driven plugin scripts, prefer `from openhands.sdk.plugin import PluginSource` and pass `plugins=[PluginSource(source=...)]` into `Conversation`. In the current released SDK (`openhands-sdk` 1.18.x), `Plugin` is not exported from `openhands.sdk.plugin`, so direct `Plugin.load(...)` imports can break CI.
99
+ - `plugins/qa-changes/action.yml` now has a preflight guard for fork PRs in `pull_request` context: if the PR comes from a fork and `LLM_API_KEY` is unavailable (normal for forks), the action exits successfully with a clear skip notice instead of failing.
100
+ - `skills/bitbucket` should not tell agents to rewrite remotes proactively. In OpenHands, `BITBUCKET_TOKEN` is commonly kept in unencoded `user:token` form for API calls like `curl --user "$BITBUCKET_TOKEN" ...`; only split and URL-encode it when constructing a non-interactive HTTPS Git remote URL.
101
+
102
+ - `plugins/release-notes` now has a standalone validator at `plugins/release-notes/scripts/validate_release_notes.py`; it rebuilds the deterministic tag-range context, fails if a change bullet omits explicit PR/commit refs or matching author handles, and enforces full PR/author coverage by appending a compact `### 🔎 Small Fixes/Internal Changes` appendix grouped by author when the agent omits lower-signal items. New contributor detection in `generate_release_notes.py` should use merged PR history for human authors (excluding bots) rather than commit-author lookup.
103
+
104
+
105
+ ## CI / validation gotchas
106
+
107
+ - The test suite expects **every directory under `skills/`** to be listed in a marketplace. If you add a new skill (or rebase onto a main branch that added skills), update the appropriate marketplace file or CI will fail with `Skills missing from marketplace: [...]`.
108
+ - `scripts/sync_extensions.py` keeps generated artifacts in sync: Claude Code command files, README catalog section, coverage checks, and vendor symlinks. Run `python scripts/sync_extensions.py --check` (or just push — CI runs it) to verify everything is consistent. Run without `--check` to auto-fix. The "Quick Start" section in `README.md` (OpenHands SDK, Claude Code, and Codex setup instructions) is **manually maintained** above the auto-generated catalog markers and is intentionally not generated by the sync script.
109
+ - The sync script uses PyYAML to parse SKILL.md frontmatter. If you add a skill with a slash trigger (e.g., `triggers: ["/mycommand"]`), the script auto-generates `commands/mycommand.md`. **Note:** Slash triggers in SKILL.md frontmatter are deprecated — prefer adding a `commands/command-name.md` file to the plugin's `commands/` directory instead. Keyword triggers (non-slash) remain the recommended way to activate skills by topic.
110
+
111
+ ## OpenHands SDK documentation policy
112
+
113
+ - **Do NOT add SDK-specific or SDK-related documentation to this repo.** The canonical source of truth for SDK documentation is the [OpenHands docs site](https://docs.openhands.dev/sdk) and its structured index at <https://docs.openhands.dev/llms.txt>.
114
+ - The `skills/openhands-sdk/SKILL.md` is **auto-generated** by `scripts/sync_openhands_sdk_skill.py`. It pulls class names, guides, examples, and the hello-world snippet directly from the docs site and the SDK repo. **Do not edit SKILL.md by hand** - run the script to regenerate it.
115
+ - CI runs `python scripts/sync_openhands_sdk_skill.py --check` on every PR. If the skill is out of date, regenerate it with `python scripts/sync_openhands_sdk_skill.py`.
116
+ - If a PR adds or modifies SDK-specific documentation in this repo, **push back**: ask the submitter to contribute those changes to [OpenHands/docs](https://github.com/OpenHands/docs) instead.
117
+
118
+ ## PR review plugin notes
119
+
120
+ - The `code-review` and `codereview-roasted` skills have been merged into a single `code-review` skill. The `/codereview-roasted` trigger is kept as an alias for backward compatibility. The `review-style` action input is deprecated and ignored.
121
+ - `plugins/pr-review` supports an optional `require-evidence` action input that tells the reviewer to require end-to-end proof in the PR description that the code works; test output alone is not sufficient evidence.
122
+ - The corresponding `REQUIRE_EVIDENCE` env flag is consumed by `plugins/pr-review/scripts/agent_script.py` and injected into the review prompt via `plugins/pr-review/scripts/prompt.py`.
123
+ - `plugins/pr-review` exposes an `enable-uv-cache` input (default `'false'`) that toggles `setup-uv`'s GitHub Actions cache. Default stays off because a prompt-injected reviewer could poison a shared cache that higher-privilege workflows later consume; opt in only on single-tenant self-hosted runners. The README's "Caching and Security" section documents the threat model and recommends a host-level uv cache volume as the preferred alternative for self-hosted setups.
124
+ - GitHub review suggestions that only delete lines can look empty in `PullRequestReviewComment.body`; the rendered content is available via `bodyText`/`bodyHTML`, so review-context formatting should fall back there before treating a suggestion as empty.
125
+ - Prompt coverage for this behavior lives in `tests/test_pr_review_prompt.py`.
126
+ - `plugins/pr-review`'s `collect-feedback` input should append a short thumbs up/down footer to the main GitHub review body via `agent_script.py` / `prompt.py`, rather than posting a separate PR comment. `evaluate_review.py` should read feedback from review-body reactions while still tolerating legacy issue-comment markers.
127
+
128
+
129
+ ## When uncertain
130
+
131
+ - Prefer the official OpenHands docs on skills: https://docs.openhands.dev/overview/skills
132
+ - Prefer the SDK skill guide: https://docs.openhands.dev/sdk/guides/skill
package/README.md CHANGED
@@ -45,6 +45,16 @@ React logo components are isolated behind a separate export so data-only consume
45
45
  import { INTEGRATION_LOGOS } from "@openhands/extensions/integrations/logos";
46
46
  ```
47
47
 
48
+ The package ships the whole repo, so the `skills/`, `plugins/`, and `marketplaces/` trees are available from the installed package. Resolve content files to a path, or import JSON manifests directly:
49
+
50
+ ```js
51
+ // .md / .py / etc.: resolve to a path, then read with fs
52
+ const skillPath = import.meta.resolve("@openhands/extensions/skills/code-review/SKILL.md");
53
+
54
+ // .json: import directly
55
+ import marketplace from "@openhands/extensions/marketplaces/openhands-extensions.json" with { type: "json" };
56
+ ```
57
+
48
58
  See [`integrations/README.md`](integrations/README.md), [`automations/README.md`](automations/README.md), and [`MIGRATION.md`](MIGRATION.md) for catalog-specific details.
49
59
 
50
60
  ## Extensions Catalog