openhands-extensions 0.29.0__tar.gz → 0.31.0__tar.gz

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 (706) hide show
  1. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.agents/skills/custom-codereview-guide.md +47 -5
  2. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.github/workflows/build-vscode-app.yml +3 -3
  3. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.github/workflows/check-extensions.yml +1 -1
  4. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.github/workflows/pr-artifacts.yml +4 -83
  5. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.github/workflows/tests.yml +14 -1
  6. openhands_extensions-0.31.0/.npmignore +36 -0
  7. openhands_extensions-0.31.0/.release-please-manifest.json +3 -0
  8. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/AGENTS.md +4 -3
  9. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/PKG-INFO +1 -1
  10. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/README.md +6 -5
  11. openhands_extensions-0.31.0/apps/vscode/README.md +15 -0
  12. openhands_extensions-0.31.0/apps/vscode/canvas-extension.json +27 -0
  13. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/apps/vscode/extension.js +60 -12
  14. openhands_extensions-0.31.0/apps/vscode/scripts/package.mjs +30 -0
  15. openhands_extensions-0.31.0/automations/bundle-index.js +44 -0
  16. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/github-issue-to-pr/manifest.json +1 -1
  17. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/github-issue-triage/manifest.json +4 -3
  18. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/github-pr-reviewer/manifest.json +7 -6
  19. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/gitlab-issue-to-mr/manifest.json +3 -3
  20. openhands_extensions-0.31.0/automations/catalog/jira-issue-to-bitbucket-pr/manifest.json +23 -0
  21. openhands_extensions-0.31.0/automations/catalog/jira-issue-to-gitlab-mr/manifest.json +23 -0
  22. openhands_extensions-0.31.0/automations/catalog/jira-issue-to-pr/manifest.json +19 -0
  23. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/atlassian-rovo.json +4 -3
  24. openhands_extensions-0.31.0/integrations/catalog/bitbucket.json +49 -0
  25. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/github.json +1 -0
  26. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/gitlab.json +1 -1
  27. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/marketplaces/openhands-extensions.json +20 -5
  28. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/package.json +1 -1
  29. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/README.md +1 -0
  30. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/scripts/prompt.py +44 -11
  31. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/runtime-api-configs/SKILL.md +1 -1
  32. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/vulnerability-remediation/skills/github/scripts/agent_conversation.py +224 -8
  33. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/pyproject.toml +1 -1
  34. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/python/openhands_extensions/_version.py +1 -1
  35. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/canvas-extension-api/references/backend-safety.md +3 -3
  36. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/canvas-extension-api/references/v1-contract.md +7 -4
  37. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/canvas-extension-api/scripts/validate-extension.mjs +17 -1
  38. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/canvas-extension-api/scripts/validate-extension.test.mjs +49 -0
  39. openhands_extensions-0.31.0/skills/github-issue-triage/README.md +75 -0
  40. openhands_extensions-0.31.0/skills/github-issue-triage/SKILL.md +37 -0
  41. openhands_extensions-0.31.0/skills/github-issue-triage/scripts/triage_publication.py +293 -0
  42. openhands_extensions-0.31.0/skills/github-issue-triage/scripts/worker.py +272 -0
  43. openhands_extensions-0.31.0/skills/github-pr-reviewer/README.md +206 -0
  44. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-pr-reviewer/SKILL.md +42 -8
  45. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-pr-reviewer/references/state-schema.md +8 -0
  46. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-pr-reviewer/scripts/main.py +163 -39
  47. openhands_extensions-0.31.0/skills/github-pr-reviewer/scripts/publication.py +193 -0
  48. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-pr-reviewer/scripts/worker.py +297 -8
  49. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-pr-reviewer/tests/test_main.py +73 -5
  50. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-stale-ci-pr-closer/scripts/worker.py +8 -2
  51. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/gitlab-issue-to-mr/README.md +10 -3
  52. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/gitlab-issue-to-mr/SKILL.md +43 -9
  53. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/gitlab-issue-to-mr/references/state-schema.md +4 -0
  54. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/gitlab-issue-to-mr/scripts/main.py +359 -25
  55. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/index.js +18 -8
  56. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/jira-issue-to-pr/.claude-plugin/plugin.json +4 -1
  57. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/jira-issue-to-pr/README.md +18 -11
  58. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/jira-issue-to-pr/SKILL.md +72 -23
  59. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/jira-issue-to-pr/references/setup.md +43 -12
  60. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/jira-issue-to-pr/scripts/main.py +136 -26
  61. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/slack-channel-monitor/README.md +12 -3
  62. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/slack-channel-monitor/SKILL.md +35 -20
  63. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/slack-channel-monitor/references/windows.md +6 -2
  64. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/slack-channel-monitor/scripts/main.py +189 -12
  65. openhands_extensions-0.31.0/skills/software-factory/.claude-plugin/plugin.json +19 -0
  66. openhands_extensions-0.31.0/skills/software-factory/README.md +64 -0
  67. openhands_extensions-0.31.0/skills/software-factory/SKILL.md +229 -0
  68. openhands_extensions-0.31.0/skills/software-factory/commands/software-factory.md +8 -0
  69. openhands_extensions-0.31.0/skills/software-factory/scripts/factory.py +630 -0
  70. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/ticket-to-code-change/.claude-plugin/plugin.json +1 -2
  71. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/ticket-to-code-change/SKILL.md +5 -3
  72. openhands_extensions-0.31.0/skills/ticket-to-code-change/commands/ticket-to-code-change-setup.md +8 -0
  73. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/fixtures/automations/github-pr-reviewer.json +9 -9
  74. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_agent_conversation_dispatch.py +173 -6
  75. openhands_extensions-0.31.0/tests/test_automation_llm_provenance.py +1209 -0
  76. openhands_extensions-0.31.0/tests/test_github_review_publication.py +422 -0
  77. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_github_reviewer_delivery.py +174 -21
  78. openhands_extensions-0.31.0/tests/test_github_stale_ci_pr_closer.py +107 -0
  79. openhands_extensions-0.31.0/tests/test_github_triage_delivery.py +457 -0
  80. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_gitlab_issue_to_mr.py +284 -0
  81. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_jira_issue_to_pr.py +200 -6
  82. openhands_extensions-0.31.0/tests/test_pr_review_prompt_injection.py +353 -0
  83. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_slack_channel_monitor.py +32 -1
  84. openhands_extensions-0.31.0/tests/test_software_factory_script.py +231 -0
  85. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_vscode_app.py +8 -2
  86. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/vscode-app.test.mjs +8 -2
  87. openhands_extensions-0.29.0/.release-please-manifest.json +0 -3
  88. openhands_extensions-0.29.0/apps/vscode/README.md +0 -13
  89. openhands_extensions-0.29.0/apps/vscode/canvas-extension.json +0 -19
  90. openhands_extensions-0.29.0/apps/vscode/scripts/package.mjs +0 -84
  91. openhands_extensions-0.29.0/automations/bundle-index.js +0 -42
  92. openhands_extensions-0.29.0/automations/catalog/jira-issue-to-bitbucket-pr/manifest.json +0 -23
  93. openhands_extensions-0.29.0/automations/catalog/jira-issue-to-gitlab-mr/manifest.json +0 -23
  94. openhands_extensions-0.29.0/automations/catalog/jira-issue-to-pr/manifest.json +0 -19
  95. openhands_extensions-0.29.0/integrations/catalog/bitbucket.json +0 -34
  96. openhands_extensions-0.29.0/skills/github-issue-triage/README.md +0 -16
  97. openhands_extensions-0.29.0/skills/github-issue-triage/SKILL.md +0 -57
  98. openhands_extensions-0.29.0/skills/github-issue-triage/scripts/worker.py +0 -222
  99. openhands_extensions-0.29.0/skills/github-pr-reviewer/README.md +0 -98
  100. openhands_extensions-0.29.0/skills/ticket-to-code-change/commands/ticket-to-code-change-setup.md +0 -8
  101. openhands_extensions-0.29.0/tests/test_github_stale_ci_pr_closer.py +0 -56
  102. openhands_extensions-0.29.0/tests/test_github_triage_delivery.py +0 -284
  103. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.claude-plugin/marketplace.json +0 -0
  104. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.github/dependabot.yml +0 -0
  105. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.github/pull_request_template.md +0 -0
  106. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.github/release.yml +0 -0
  107. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.github/scripts/check_pr_description.py +0 -0
  108. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.github/scripts/markdown_sections.py +0 -0
  109. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.github/scripts/refresh_linked_pr_checks.py +0 -0
  110. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.github/workflows/deprecation-check.yml +0 -0
  111. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.github/workflows/issue-readiness-check.yml +0 -0
  112. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.github/workflows/npm-publish.yml +0 -0
  113. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.github/workflows/pr-description-check.yml +0 -0
  114. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.github/workflows/pr.yml +0 -0
  115. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.github/workflows/pypi-publish.yml +0 -0
  116. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.github/workflows/release.yml +0 -0
  117. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.github/workflows/vulnerability-scan.yml +0 -0
  118. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/.gitignore +0 -0
  119. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/LICENSE +0 -0
  120. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/MIGRATION.md +0 -0
  121. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/analysis_results.md +0 -0
  122. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/apps/README.md +0 -0
  123. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/apps/catalog.json +0 -0
  124. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/apps/index.d.ts +0 -0
  125. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/apps/index.js +0 -0
  126. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/README.md +0 -0
  127. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/custom-automation/manifest.json +0 -0
  128. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/github-agents-md-maintainer/manifest.json +0 -0
  129. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/github-delivery-watchdog/manifest.json +0 -0
  130. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/github-repo-monitor/manifest.json +0 -0
  131. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/github-stale-ci-pr-closer/manifest.json +0 -0
  132. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/incident-retrospective-drafter/manifest.json +0 -0
  133. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/linear-issue-to-bitbucket-pr/manifest.json +0 -0
  134. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/linear-issue-to-github-pr/manifest.json +0 -0
  135. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/linear-issue-to-gitlab-mr/manifest.json +0 -0
  136. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/linear-triage-assistant/manifest.json +0 -0
  137. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/news-digest/manifest.json +0 -0
  138. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/qa-changes/manifest.json +0 -0
  139. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/research-brief-writer/manifest.json +0 -0
  140. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/slack-channel-monitor/manifest.json +0 -0
  141. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/slack-github-linear-daily-organization.json +0 -0
  142. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/slack-standup-digest/manifest.json +0 -0
  143. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog/upstream-fork-sync/manifest.json +0 -0
  144. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog-index.js +0 -0
  145. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/catalog.schema.json +0 -0
  146. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/index.d.ts +0 -0
  147. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/index.js +0 -0
  148. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/interface.json +0 -0
  149. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/automations/interface.schema.json +0 -0
  150. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/index.d.ts +0 -0
  151. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/index.js +0 -0
  152. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/README.md +0 -0
  153. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/airtable.json +0 -0
  154. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/apify.json +0 -0
  155. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/asana.json +0 -0
  156. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/atlassian.json +0 -0
  157. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/box.json +0 -0
  158. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/brave-search.json +0 -0
  159. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/browser-mcp.json +0 -0
  160. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/canva.json +0 -0
  161. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/clickhouse.json +0 -0
  162. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/cloudflare-bindings.json +0 -0
  163. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/cloudflare-browser-rendering.json +0 -0
  164. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/cloudflare-builds.json +0 -0
  165. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/cloudflare-docs.json +0 -0
  166. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/cloudflare-observability.json +0 -0
  167. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/confluence.json +0 -0
  168. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/datadog.json +0 -0
  169. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/deepwiki.json +0 -0
  170. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/discord.json +0 -0
  171. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/elevenlabs.json +0 -0
  172. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/everything.json +0 -0
  173. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/exa.json +0 -0
  174. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/fetch.json +0 -0
  175. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/figma.json +0 -0
  176. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/filesystem.json +0 -0
  177. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/firecrawl.json +0 -0
  178. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/git.json +0 -0
  179. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/gmail.json +0 -0
  180. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/google-calendar.json +0 -0
  181. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/google-docs.json +0 -0
  182. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/google-drive.json +0 -0
  183. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/google-sheets.json +0 -0
  184. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/granola.json +0 -0
  185. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/hubspot.json +0 -0
  186. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/huggingface.json +0 -0
  187. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/intercom.json +0 -0
  188. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/jira.json +0 -0
  189. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/kagi.json +0 -0
  190. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/linear.json +0 -0
  191. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/memory.json +0 -0
  192. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/microsoft-outlook.json +0 -0
  193. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/microsoft-teams.json +0 -0
  194. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/miro.json +0 -0
  195. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/monday.json +0 -0
  196. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/mongodb.json +0 -0
  197. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/neon.json +0 -0
  198. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/netlify.json +0 -0
  199. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/notion.json +0 -0
  200. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/obsidian.json +0 -0
  201. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/okta.json +0 -0
  202. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/onedrive.json +0 -0
  203. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/ordinal.json +0 -0
  204. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/paypal.json +0 -0
  205. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/playwright.json +0 -0
  206. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/posthog.json +0 -0
  207. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/quickbooks.json +0 -0
  208. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/redis.json +0 -0
  209. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/reportportal.json +0 -0
  210. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/resend.json +0 -0
  211. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/salesforce.json +0 -0
  212. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/sentry.json +0 -0
  213. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/sequential-thinking.json +0 -0
  214. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/sharepoint.json +0 -0
  215. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/slack.json +0 -0
  216. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/sonarqube.json +0 -0
  217. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/stripe.json +0 -0
  218. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/supabase.json +0 -0
  219. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/superhuman-mail.json +0 -0
  220. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/tavily.json +0 -0
  221. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/time.json +0 -0
  222. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/trello.json +0 -0
  223. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/vanta.json +0 -0
  224. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/vercel.json +0 -0
  225. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/webflow.json +0 -0
  226. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/xero.json +0 -0
  227. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog/zoom.json +0 -0
  228. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog-index.js +0 -0
  229. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/catalog.schema.json +0 -0
  230. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/icons/salesforce.svg +0 -0
  231. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/icons/slack.svg +0 -0
  232. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/index.d.ts +0 -0
  233. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/integrations/index.js +0 -0
  234. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/marketplaces/large-codebase.json +0 -0
  235. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/README.md +0 -0
  236. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/city-weather/.claude-plugin/plugin.json +0 -0
  237. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/city-weather/README.md +0 -0
  238. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/city-weather/commands/now.md +0 -0
  239. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/cobol-modernization/.claude-plugin/plugin.json +0 -0
  240. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/cobol-modernization/README.md +0 -0
  241. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/cobol-modernization/references/troubleshooting.md +0 -0
  242. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/cobol-modernization/skills/build-setup/SKILL.md +0 -0
  243. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/cobol-modernization/skills/build-setup/scripts/install-gnucobol.sh +0 -0
  244. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/cobol-modernization/skills/cobol-modernization/SKILL.md +0 -0
  245. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/cobol-modernization/skills/mainframe-planning/SKILL.md +0 -0
  246. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/cobol-modernization/skills/mainframe-removal/SKILL.md +0 -0
  247. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/cobol-modernization/skills/mainframe-removal/references/cics-transformation-examples.md +0 -0
  248. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/cobol-modernization/skills/to-java-migration/SKILL.md +0 -0
  249. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/cobol-modernization/skills/to-java-migration/references/cobol-to-java-example.md +0 -0
  250. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/cobol-modernization/skills/to-java-migration/references/datatype-mappings.md +0 -0
  251. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/issue-duplicate-checker/.claude-plugin/plugin.json +0 -0
  252. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/issue-duplicate-checker/README.md +0 -0
  253. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/issue-duplicate-checker/action.yml +0 -0
  254. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/issue-duplicate-checker/scripts/auto_close_duplicate_issues.py +0 -0
  255. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/issue-duplicate-checker/scripts/issue_duplicate_check_openhands.py +0 -0
  256. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/issue-duplicate-checker/scripts/post_duplicate_notice.cjs +0 -0
  257. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/issue-duplicate-checker/scripts/remove_duplicate_candidate_label.cjs +0 -0
  258. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/magic-test/.claude-plugin/plugin.json +0 -0
  259. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/magic-test/skills/magic-word/SKILL.md +0 -0
  260. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/migration-scoring/.claude-plugin/plugin.json +0 -0
  261. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/migration-scoring/README.md +0 -0
  262. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/migration-scoring/skills/migration-mapping/SKILL.md +0 -0
  263. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/migration-scoring/skills/migration-report/SKILL.md +0 -0
  264. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/migration-scoring/skills/migration-scoring/SKILL.md +0 -0
  265. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/migration-scoring/skills/score-quality/SKILL.md +0 -0
  266. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/migration-scoring/skills/score-quality/references/scoring-criteria.md +0 -0
  267. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/migration-scoring/skills/score-style/SKILL.md +0 -0
  268. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/.claude-plugin/plugin.json +0 -0
  269. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/README.md +0 -0
  270. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/references/criteria.md +0 -0
  271. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/skills/agent-readiness-report/README.md +0 -0
  272. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/skills/agent-readiness-report/SKILL.md +0 -0
  273. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/skills/agent-readiness-report/references/criteria.md +0 -0
  274. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/skills/agent-readiness-report/scripts/scan_agent_instructions.sh +0 -0
  275. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/skills/agent-readiness-report/scripts/scan_build_env.sh +0 -0
  276. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/skills/agent-readiness-report/scripts/scan_feedback_loops.sh +0 -0
  277. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/skills/agent-readiness-report/scripts/scan_policy.sh +0 -0
  278. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/skills/agent-readiness-report/scripts/scan_workflows.sh +0 -0
  279. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/skills/improve-agent-readiness/README.md +0 -0
  280. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/skills/improve-agent-readiness/SKILL.md +0 -0
  281. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/skills/improve-agent-readiness/references/criteria.md +0 -0
  282. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/skills/setup-agents-md/README.md +0 -0
  283. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/skills/setup-agents-md/SKILL.md +0 -0
  284. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/skills/setup-openhands/README.md +0 -0
  285. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/skills/setup-openhands/SKILL.md +0 -0
  286. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/skills/setup-pr-review/README.md +0 -0
  287. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/onboarding/skills/setup-pr-review/SKILL.md +0 -0
  288. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/.claude-plugin/plugin.json +0 -0
  289. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/README.md +0 -0
  290. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/SKILL.md +0 -0
  291. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/commands/create.md +0 -0
  292. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/commands/openhands-cloud.md +0 -0
  293. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/scripts/run.sh +0 -0
  294. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-api/.claude-plugin/plugin.json +0 -0
  295. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-api/README.md +0 -0
  296. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-api/SKILL.md +0 -0
  297. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-api/references/README.md +0 -0
  298. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-api/references/TROUBLESHOOTING.md +0 -0
  299. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-api/references/example_prompt.md +0 -0
  300. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-api/references/windows.md +0 -0
  301. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-api/scripts/openhands_api.py +0 -0
  302. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-api/scripts/openhands_api.ts +0 -0
  303. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-automation/.claude-plugin/plugin.json +0 -0
  304. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-automation/README.md +0 -0
  305. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-automation/SKILL.md +0 -0
  306. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-automation/commands/automation-create.md +0 -0
  307. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-automation/references/ab-testing.md +0 -0
  308. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-automation/references/custom-automation.md +0 -0
  309. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-automation/references/security.md +0 -0
  310. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-automation/references/windows.md +0 -0
  311. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-sdk/.claude-plugin/plugin.json +0 -0
  312. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-sdk/README.md +0 -0
  313. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-sdk/SKILL.md +0 -0
  314. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/openhands/skills/openhands-sdk/commands/sdk.md +0 -0
  315. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/.claude-plugin/plugin.json +0 -0
  316. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/action.yml +0 -0
  317. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/scripts/agent_script.py +0 -0
  318. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/scripts/evaluate_review.py +0 -0
  319. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/skills/code-review/.claude-plugin/plugin.json +0 -0
  320. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/skills/code-review/README.md +0 -0
  321. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/skills/code-review/SKILL.md +0 -0
  322. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/skills/code-review/commands/codereview-roasted.md +0 -0
  323. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/skills/code-review/commands/codereview.md +0 -0
  324. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/skills/code-review/references/risk-evaluation.md +0 -0
  325. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/skills/code-review/references/supply-chain-security.md +0 -0
  326. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/skills/github-pr-review/.claude-plugin/plugin.json +0 -0
  327. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/skills/github-pr-review/README.md +0 -0
  328. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/skills/github-pr-review/SKILL.md +0 -0
  329. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/skills/github-pr-review/commands/github-pr-review.md +0 -0
  330. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/skills/github-pr-review/references/windows.md +0 -0
  331. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/workflows/pr-review-by-openhands.yml +0 -0
  332. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/pr-review/workflows/pr-review-evaluation.yml +0 -0
  333. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/qa-changes/.claude-plugin/plugin.json +0 -0
  334. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/qa-changes/README.md +0 -0
  335. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/qa-changes/action.yml +0 -0
  336. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/qa-changes/scripts/agent_script.py +0 -0
  337. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/qa-changes/scripts/evaluate_qa_changes.py +0 -0
  338. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/qa-changes/scripts/prompt.py +0 -0
  339. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/qa-changes/skills/qa-changes/README.md +0 -0
  340. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/qa-changes/skills/qa-changes/SKILL.md +0 -0
  341. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/qa-changes/skills/qa-changes/commands/qa-changes.md +0 -0
  342. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/qa-changes/workflows/qa-changes-by-openhands.yml +0 -0
  343. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/qa-changes/workflows/qa-changes-evaluation.yml +0 -0
  344. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/release-notes/.claude-plugin/plugin.json +0 -0
  345. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/release-notes/README.md +0 -0
  346. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/release-notes/SKILL.md +0 -0
  347. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/release-notes/action.yml +0 -0
  348. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/release-notes/commands/release-notes.md +0 -0
  349. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/release-notes/scripts/agent_script.py +0 -0
  350. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/release-notes/scripts/generate_release_notes.py +0 -0
  351. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/release-notes/scripts/prompt.py +0 -0
  352. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/release-notes/scripts/validate_release_notes.py +0 -0
  353. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/release-notes/skills/release-notes/README.md +0 -0
  354. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/release-notes/skills/release-notes/SKILL.md +0 -0
  355. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/release-notes/skills/release-notes/commands/release-notes.md +0 -0
  356. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/release-notes/workflows/release-notes.yml +0 -0
  357. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/runtime-api-configs/.claude-plugin/plugin.json +0 -0
  358. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/runtime-api-configs/README.md +0 -0
  359. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/runtime-api-configs/scripts/warm_runtime_configs.py +0 -0
  360. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/runtime-api-configs/tests/test_warm_runtime_configs.py +0 -0
  361. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/vulnerability-remediation/.claude-plugin/plugin.json +0 -0
  362. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/vulnerability-remediation/README.md +0 -0
  363. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/vulnerability-remediation/action.yml +0 -0
  364. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/vulnerability-remediation/scripts/scan_and_remediate.py +0 -0
  365. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/vulnerability-remediation/skills/github/.claude-plugin/plugin.json +0 -0
  366. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/vulnerability-remediation/skills/github/README.md +0 -0
  367. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/vulnerability-remediation/skills/github/SKILL.md +0 -0
  368. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/vulnerability-remediation/skills/github/references/windows.md +0 -0
  369. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/vulnerability-remediation/skills/github/scripts/github_client.py +0 -0
  370. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/vulnerability-remediation/skills/security/.claude-plugin/plugin.json +0 -0
  371. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/vulnerability-remediation/skills/security/README.md +0 -0
  372. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/vulnerability-remediation/skills/security/SKILL.md +0 -0
  373. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/plugins/vulnerability-remediation/workflows/vulnerability-scan.yml +0 -0
  374. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/python/openhands_extensions/__init__.py +0 -0
  375. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/python/openhands_extensions/deprecation.py +0 -0
  376. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/python/openhands_extensions/integration_models.py +0 -0
  377. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/python/openhands_extensions/integrations.py +0 -0
  378. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/release-please-config.json +0 -0
  379. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/scripts/build-automation-catalog.mjs +0 -0
  380. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/scripts/build-integration-catalog.mjs +0 -0
  381. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/scripts/build-skills-catalog.mjs +0 -0
  382. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/scripts/check_deprecations.py +0 -0
  383. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/scripts/check_plugin_resources.py +0 -0
  384. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/scripts/sync_extensions.py +0 -0
  385. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/scripts/sync_openhands_sdk_skill.py +0 -0
  386. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/README.md +0 -0
  387. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/add-javadoc/.claude-plugin/plugin.json +0 -0
  388. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/add-javadoc/README.md +0 -0
  389. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/add-javadoc/SKILL.md +0 -0
  390. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/add-javadoc/references/example.md +0 -0
  391. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/add-skill/.claude-plugin/plugin.json +0 -0
  392. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/add-skill/README.md +0 -0
  393. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/add-skill/SKILL.md +0 -0
  394. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/add-skill/scripts/fetch_skill.py +0 -0
  395. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/agent-canvas-environment/.claude-plugin/plugin.json +0 -0
  396. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/agent-canvas-environment/README.md +0 -0
  397. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/agent-canvas-environment/SKILL.md +0 -0
  398. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/agent-creator/.claude-plugin/plugin.json +0 -0
  399. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/agent-creator/README.md +0 -0
  400. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/agent-creator/SKILL.md +0 -0
  401. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/agent-creator/commands/agent-creator.md +0 -0
  402. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/agent-creator/references/fallback.md +0 -0
  403. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/agent-memory/.claude-plugin/plugin.json +0 -0
  404. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/agent-memory/README.md +0 -0
  405. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/agent-memory/SKILL.md +0 -0
  406. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/agent-memory/commands/remember.md +0 -0
  407. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/agent-sdk-builder/.claude-plugin/plugin.json +0 -0
  408. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/agent-sdk-builder/README.md +0 -0
  409. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/agent-sdk-builder/SKILL.md +0 -0
  410. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/agent-sdk-builder/commands/agent-builder.md +0 -0
  411. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/azure-devops/.claude-plugin/plugin.json +0 -0
  412. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/azure-devops/README.md +0 -0
  413. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/azure-devops/SKILL.md +0 -0
  414. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/bitbucket/.claude-plugin/plugin.json +0 -0
  415. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/bitbucket/README.md +0 -0
  416. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/bitbucket/SKILL.md +0 -0
  417. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/bitbucket-cloud/.claude-plugin/plugin.json +0 -0
  418. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/bitbucket-cloud/README.md +0 -0
  419. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/bitbucket-cloud/SKILL.md +0 -0
  420. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/bitbucket-data-center/.claude-plugin/plugin.json +0 -0
  421. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/bitbucket-data-center/README.md +0 -0
  422. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/bitbucket-data-center/SKILL.md +0 -0
  423. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/canvas-extension-api/.claude-plugin/plugin.json +0 -0
  424. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/canvas-extension-api/README.md +0 -0
  425. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/canvas-extension-api/SKILL.md +0 -0
  426. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/canvas-extension-api/references/acceptance-checklist.md +0 -0
  427. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/canvas-extension-api/references/connections.md +0 -0
  428. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/canvas-extension-api/references/native-design.md +0 -0
  429. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/canvas-extension-api/references/packaging-recipes.md +0 -0
  430. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/canvas-extension-api/references/sidecar-pattern.md +0 -0
  431. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/canvas-extension-api/references/testing-and-installation.md +0 -0
  432. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/code-simplifier/.claude-plugin/plugin.json +0 -0
  433. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/code-simplifier/README.md +0 -0
  434. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/code-simplifier/SKILL.md +0 -0
  435. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/code-simplifier/commands/simplify.md +0 -0
  436. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/code-simplifier/references/code-quality-review.md +0 -0
  437. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/code-simplifier/references/code-reuse-review.md +0 -0
  438. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/code-simplifier/references/efficiency-review.md +0 -0
  439. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/datadog/.claude-plugin/plugin.json +0 -0
  440. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/datadog/README.md +0 -0
  441. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/datadog/SKILL.md +0 -0
  442. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/datadog/references/windows.md +0 -0
  443. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/deno/.claude-plugin/plugin.json +0 -0
  444. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/deno/README.md +0 -0
  445. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/deno/SKILL.md +0 -0
  446. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/deno/references/README.md +0 -0
  447. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/discord/.claude-plugin/plugin.json +0 -0
  448. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/discord/README.md +0 -0
  449. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/discord/SKILL.md +0 -0
  450. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/discord/__init__.py +0 -0
  451. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/discord/references/REFERENCE.md +0 -0
  452. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/discord/scripts/__init__.py +0 -0
  453. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/discord/scripts/_http.py +0 -0
  454. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/discord/scripts/post_webhook.py +0 -0
  455. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/discord/scripts/send_message.py +0 -0
  456. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/docker/.claude-plugin/plugin.json +0 -0
  457. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/docker/README.md +0 -0
  458. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/docker/SKILL.md +0 -0
  459. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/evidence-based-citations/.claude-plugin/plugin.json +0 -0
  460. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/evidence-based-citations/README.md +0 -0
  461. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/evidence-based-citations/SKILL.md +0 -0
  462. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/flarglebargle/.claude-plugin/plugin.json +0 -0
  463. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/flarglebargle/README.md +0 -0
  464. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/flarglebargle/SKILL.md +0 -0
  465. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/frontend-design/.claude-plugin/plugin.json +0 -0
  466. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/frontend-design/LICENSE.txt +0 -0
  467. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/frontend-design/README.md +0 -0
  468. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/frontend-design/SKILL.md +0 -0
  469. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-actions/.claude-plugin/plugin.json +0 -0
  470. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-actions/README.md +0 -0
  471. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-actions/SKILL.md +0 -0
  472. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-agents-md-maintainer/.claude-plugin/plugin.json +0 -0
  473. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-agents-md-maintainer/README.md +0 -0
  474. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-agents-md-maintainer/SKILL.md +0 -0
  475. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-agents-md-maintainer/commands/agents-md-setup.md +0 -0
  476. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-agents-md-maintainer/references/state-schema.md +0 -0
  477. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-agents-md-maintainer/scripts/github_client.py +0 -0
  478. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-agents-md-maintainer/scripts/main.py +0 -0
  479. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-delivery-watchdog/.claude-plugin/plugin.json +0 -0
  480. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-delivery-watchdog/README.md +0 -0
  481. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-delivery-watchdog/SKILL.md +0 -0
  482. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-delivery-watchdog/commands/github-delivery-watchdog.md +0 -0
  483. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-delivery-watchdog/scripts/github_client.py +0 -0
  484. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-delivery-watchdog/scripts/worker.py +0 -0
  485. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-issue-to-pr/.claude-plugin/plugin.json +0 -0
  486. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-issue-to-pr/README.md +0 -0
  487. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-issue-to-pr/SKILL.md +0 -0
  488. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-issue-to-pr/commands/issue-to-pr-setup.md +0 -0
  489. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-issue-to-pr/references/state-schema.md +0 -0
  490. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-issue-to-pr/scripts/agent_conversation.py +0 -0
  491. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-issue-to-pr/scripts/github_client.py +0 -0
  492. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-issue-to-pr/scripts/main.py +0 -0
  493. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-issue-to-pr/scripts/worker.py +0 -0
  494. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-issue-triage/.claude-plugin/plugin.json +0 -0
  495. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-issue-triage/commands/github-issue-triage.md +0 -0
  496. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-issue-triage/scripts/agent_conversation.py +0 -0
  497. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-issue-triage/scripts/github_client.py +0 -0
  498. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-pr-reviewer/.claude-plugin/plugin.json +0 -0
  499. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-pr-reviewer/commands/pr-reviewer-setup.md +0 -0
  500. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-pr-reviewer/references/windows.md +0 -0
  501. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-pr-reviewer/scripts/agent_conversation.py +0 -0
  502. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-pr-reviewer/scripts/github_client.py +0 -0
  503. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-pr-reviewer/scripts/maintainer_handoff.py +0 -0
  504. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-repo-monitor/.claude-plugin/plugin.json +0 -0
  505. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-repo-monitor/README.md +0 -0
  506. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-repo-monitor/SKILL.md +0 -0
  507. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-repo-monitor/commands/github-monitor-poll.md +0 -0
  508. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-repo-monitor/references/github-api.md +0 -0
  509. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-repo-monitor/references/state-schema.md +0 -0
  510. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-repo-monitor/references/windows.md +0 -0
  511. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-repo-monitor/scripts/github_client.py +0 -0
  512. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-repo-monitor/scripts/main.py +0 -0
  513. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-repo-monitor/tests/test_main.py +0 -0
  514. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-stale-ci-pr-closer/.claude-plugin/plugin.json +0 -0
  515. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-stale-ci-pr-closer/README.md +0 -0
  516. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-stale-ci-pr-closer/SKILL.md +0 -0
  517. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-stale-ci-pr-closer/commands/github-stale-ci-pr-closer.md +0 -0
  518. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/github-stale-ci-pr-closer/tests/test_worker.py +0 -0
  519. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/gitlab/.claude-plugin/plugin.json +0 -0
  520. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/gitlab/README.md +0 -0
  521. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/gitlab/SKILL.md +0 -0
  522. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/gitlab-issue-to-mr/.claude-plugin/plugin.json +0 -0
  523. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/gitlab-issue-to-mr/commands/issue-to-mr-setup.md +0 -0
  524. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/incident-retrospective/.claude-plugin/plugin.json +0 -0
  525. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/incident-retrospective/README.md +0 -0
  526. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/incident-retrospective/SKILL.md +0 -0
  527. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/incident-retrospective/commands/incident-retro-setup.md +0 -0
  528. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/index.d.ts +0 -0
  529. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/iterate/.claude-plugin/plugin.json +0 -0
  530. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/iterate/.codex-plugin/plugin.json +0 -0
  531. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/iterate/.plugin/plugin.json +0 -0
  532. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/iterate/README.md +0 -0
  533. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/iterate/SKILL.md +0 -0
  534. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/iterate/commands/babysit.md +0 -0
  535. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/iterate/commands/iterate.md +0 -0
  536. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/iterate/commands/verify.md +0 -0
  537. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/iterate/references/heuristics.md +0 -0
  538. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/iterate/references/verification.md +0 -0
  539. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/iterate/references/windows.md +0 -0
  540. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/jira-issue-to-pr/scripts/setup_webhook.py +0 -0
  541. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/jupyter/.claude-plugin/plugin.json +0 -0
  542. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/jupyter/README.md +0 -0
  543. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/jupyter/SKILL.md +0 -0
  544. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/kubernetes/.claude-plugin/plugin.json +0 -0
  545. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/kubernetes/README.md +0 -0
  546. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/kubernetes/SKILL.md +0 -0
  547. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/kubernetes/references/windows.md +0 -0
  548. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/learn-from-code-review/.claude-plugin/plugin.json +0 -0
  549. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/learn-from-code-review/README.md +0 -0
  550. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/learn-from-code-review/SKILL.md +0 -0
  551. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/learn-from-code-review/commands/learn-from-reviews.md +0 -0
  552. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/linear/.claude-plugin/plugin.json +0 -0
  553. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/linear/README.md +0 -0
  554. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/linear/SKILL.md +0 -0
  555. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/linear/references/windows.md +0 -0
  556. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/linear-triage/.claude-plugin/plugin.json +0 -0
  557. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/linear-triage/README.md +0 -0
  558. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/linear-triage/SKILL.md +0 -0
  559. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/linear-triage/commands/linear-triage-setup.md +0 -0
  560. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/news-digest/.claude-plugin/plugin.json +0 -0
  561. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/news-digest/README.md +0 -0
  562. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/news-digest/SKILL.md +0 -0
  563. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/news-digest/commands/news-digest-setup.md +0 -0
  564. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/news-digest/references/state-schema.md +0 -0
  565. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/news-digest/scripts/main.py +0 -0
  566. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/notion/.claude-plugin/plugin.json +0 -0
  567. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/notion/README.md +0 -0
  568. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/notion/SKILL.md +0 -0
  569. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/notion/references/windows.md +0 -0
  570. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/npm/.claude-plugin/plugin.json +0 -0
  571. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/npm/README.md +0 -0
  572. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/npm/SKILL.md +0 -0
  573. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/openhands-enterprise-troubleshooting/.claude-plugin/plugin.json +0 -0
  574. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/openhands-enterprise-troubleshooting/README.md +0 -0
  575. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/openhands-enterprise-troubleshooting/SKILL.md +0 -0
  576. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/openhands-enterprise-troubleshooting/references/diagnostics.md +0 -0
  577. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/openhands-enterprise-troubleshooting/references/support-bundle-analysis.md +0 -0
  578. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/openhands-enterprise-troubleshooting/scripts/bundle_triage.py +0 -0
  579. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/pdflatex/.claude-plugin/plugin.json +0 -0
  580. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/pdflatex/README.md +0 -0
  581. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/pdflatex/SKILL.md +0 -0
  582. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/plain-english-content/.claude-plugin/plugin.json +0 -0
  583. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/plain-english-content/README.md +0 -0
  584. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/plain-english-content/SKILL.md +0 -0
  585. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/prd/.claude-plugin/plugin.json +0 -0
  586. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/prd/README.md +0 -0
  587. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/prd/SKILL.md +0 -0
  588. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/prd/commands/prd.md +0 -0
  589. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/research-brief/.claude-plugin/plugin.json +0 -0
  590. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/research-brief/README.md +0 -0
  591. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/research-brief/SKILL.md +0 -0
  592. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/research-brief/commands/research-brief-setup.md +0 -0
  593. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/simplified-technical-english/.claude-plugin/plugin.json +0 -0
  594. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/simplified-technical-english/README.md +0 -0
  595. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/simplified-technical-english/SKILL.md +0 -0
  596. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/skill-creator/.claude-plugin/plugin.json +0 -0
  597. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/skill-creator/LICENSE.txt +0 -0
  598. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/skill-creator/README.md +0 -0
  599. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/skill-creator/SKILL.md +0 -0
  600. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/skill-creator/references/output-patterns.md +0 -0
  601. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/skill-creator/references/windows.md +0 -0
  602. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/skill-creator/references/workflows.md +0 -0
  603. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/skill-creator/scripts/init_skill.py +0 -0
  604. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/skill-creator/scripts/quick_validate.py +0 -0
  605. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/slack-channel-monitor/.claude-plugin/plugin.json +0 -0
  606. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/slack-channel-monitor/commands/slack-monitor-poll.md +0 -0
  607. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/slack-channel-monitor/references/slack-api.md +0 -0
  608. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/slack-channel-monitor/references/state-schema.md +0 -0
  609. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/slack-standup-digest/.claude-plugin/plugin.json +0 -0
  610. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/slack-standup-digest/README.md +0 -0
  611. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/slack-standup-digest/SKILL.md +0 -0
  612. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/slack-standup-digest/commands/standup-digest-setup.md +0 -0
  613. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/spark-version-upgrade/.claude-plugin/plugin.json +0 -0
  614. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/spark-version-upgrade/README.md +0 -0
  615. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/spark-version-upgrade/SKILL.md +0 -0
  616. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/ssh/.claude-plugin/plugin.json +0 -0
  617. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/ssh/README.md +0 -0
  618. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/ssh/SKILL.md +0 -0
  619. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/ssh/references/windows.md +0 -0
  620. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/swift-linux/.claude-plugin/plugin.json +0 -0
  621. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/swift-linux/README.md +0 -0
  622. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/swift-linux/SKILL.md +0 -0
  623. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/technical-writing/.claude-plugin/plugin.json +0 -0
  624. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/technical-writing/README.md +0 -0
  625. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/technical-writing/SKILL.md +0 -0
  626. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/theme-factory/.claude-plugin/plugin.json +0 -0
  627. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/theme-factory/LICENSE.txt +0 -0
  628. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/theme-factory/README.md +0 -0
  629. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/theme-factory/SKILL.md +0 -0
  630. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/theme-factory/theme-showcase.pdf +0 -0
  631. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/theme-factory/themes/arctic-frost.md +0 -0
  632. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/theme-factory/themes/botanical-garden.md +0 -0
  633. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/theme-factory/themes/desert-rose.md +0 -0
  634. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/theme-factory/themes/forest-canopy.md +0 -0
  635. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/theme-factory/themes/golden-hour.md +0 -0
  636. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/theme-factory/themes/midnight-galaxy.md +0 -0
  637. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/theme-factory/themes/modern-minimalist.md +0 -0
  638. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/theme-factory/themes/ocean-depths.md +0 -0
  639. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/theme-factory/themes/sunset-boulevard.md +0 -0
  640. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/theme-factory/themes/tech-innovation.md +0 -0
  641. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/ticket-to-code-change/README.md +0 -0
  642. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/upstream-fork-sync/.claude-plugin/plugin.json +0 -0
  643. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/upstream-fork-sync/README.md +0 -0
  644. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/upstream-fork-sync/SKILL.md +0 -0
  645. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/upstream-fork-sync/commands/upstream-fork-sync-setup.md +0 -0
  646. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/use-jev/.claude-plugin/plugin.json +0 -0
  647. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/use-jev/README.md +0 -0
  648. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/use-jev/SKILL.md +0 -0
  649. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/uv/.claude-plugin/plugin.json +0 -0
  650. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/uv/README.md +0 -0
  651. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/uv/SKILL.md +0 -0
  652. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/uv/references/README.md +0 -0
  653. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/vercel/.claude-plugin/plugin.json +0 -0
  654. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/vercel/README.md +0 -0
  655. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/skills/vercel/SKILL.md +0 -0
  656. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/fixtures/automations/capabilities.json +0 -0
  657. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/fixtures/automations/custom-automation.json +0 -0
  658. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/fixtures/automations/github-repo-monitor.json +0 -0
  659. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/fixtures/automations/incident-retrospective-drafter.json +0 -0
  660. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/fixtures/automations/upstream-fork-sync.json +0 -0
  661. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/github_automation_helpers.py +0 -0
  662. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_add_skill_installs_to_agents_dir.py +0 -0
  663. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_apps_catalog.py +0 -0
  664. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_automation_setup.py +0 -0
  665. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_catalog_schema.py +0 -0
  666. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_catalogs.py +0 -0
  667. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_check_pr_description.py +0 -0
  668. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_code_review_risk_evaluation.py +0 -0
  669. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_deprecations.py +0 -0
  670. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_github_agents_md_maintainer.py +0 -0
  671. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_github_automation_foundation.py +0 -0
  672. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_github_developer_delivery.py +0 -0
  673. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_github_issue_to_pr.py +0 -0
  674. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_github_pr_review_skill.py +0 -0
  675. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_github_repo_monitor.py +0 -0
  676. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_github_skill_installation.py +0 -0
  677. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_github_watchdog_delivery.py +0 -0
  678. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_integration_catalog_in_sync.py +0 -0
  679. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_interface_manifest.py +0 -0
  680. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_issue_duplicate_checker.py +0 -0
  681. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_jira_setup_webhook.py +0 -0
  682. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_live_integration_smoke.py +0 -0
  683. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_maintainer_handoff.py +0 -0
  684. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_news_digest.py +0 -0
  685. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_openhands_api_python.py +0 -0
  686. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_plugin_manifest.py +0 -0
  687. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_pr_review_diff_payload.py +0 -0
  688. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_pr_review_feedback.py +0 -0
  689. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_pr_review_prompt.py +0 -0
  690. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_pr_review_review_context.py +0 -0
  691. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_qa_changes.py +0 -0
  692. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_qa_changes_evaluation.py +0 -0
  693. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_refresh_linked_pr_checks.py +0 -0
  694. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_release_notes_generator.py +0 -0
  695. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_sdk_loading.py +0 -0
  696. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_skill_plugin_loading.py +0 -0
  697. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_skills_catalog.py +0 -0
  698. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_skills_have_readme.py +0 -0
  699. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_sync_extensions.py +0 -0
  700. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_version_alignment.py +0 -0
  701. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/tests/test_workflow_sync.py +0 -0
  702. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/utils/analysis/README.md +0 -0
  703. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/utils/analysis/laminar_signals/README.md +0 -0
  704. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/utils/analysis/laminar_signals/analyze.py +0 -0
  705. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/utils/analysis/laminar_signals/templates/default.j2 +0 -0
  706. {openhands_extensions-0.29.0 → openhands_extensions-0.31.0}/utils/analysis/laminar_signals/templates/pr_review.j2 +0 -0
@@ -27,7 +27,32 @@ Cross-repository work is acceptable when this PR contains only the
27
27
  extensions-owned portion and relies on public interfaces from the owning
28
28
  repository.
29
29
 
30
- ## Blocking checkpoints
30
+ ## Issue triage
31
+
32
+ Issue readiness means the work is clear enough to start—not that the fix is
33
+ complete. Do not require a PR, passing implementation tests, or before-and-after
34
+ fix evidence. Reconsider readiness when new information leaves scope or expected
35
+ behavior unresolved. Read the issue, linked discussion, applicable `AGENTS.md`,
36
+ and adjacent source before asking questions.
37
+
38
+ For API failures, compare the extension request with the provider's reported or
39
+ supported version, not upstream main. Use dependency pins or deployment evidence.
40
+ Instructions, request arguments, response parsing, and scanner policy belong
41
+ here; use the ownership boundaries above for other failures. State required
42
+ cross-repository changes and their order. An independent upstream defect need
43
+ not block this work. Naming an owner does not authorize edits or duplicate tickets.
44
+
45
+ Define the smallest useful outcome and explicit non-goals. Cover only affected
46
+ entrypoints, environments, and permissions. For scanners, state whether discovery,
47
+ commenting, and dispatch are allowed for ineligible candidates or after a cap.
48
+ Discovery alone does not authorize unsolicited comments.
49
+
50
+ Request visual evidence only when needed; otherwise use logs, minimal
51
+ reproductions, or failing tests. Do not repeat answered questions. Match managed
52
+ criteria to current human decisions and authoritative readiness policy. Report
53
+ conflicts instead of repeatedly adding a label that policy removes.
54
+
55
+ ## Implementation review checkpoints
31
56
 
32
57
  ### Executable instructions and runtime parity
33
58
 
@@ -42,6 +67,16 @@ in a clean environment far enough to exercise the changed behavior. Keep local
42
67
  and cloud behavior identical unless the documentation names and explains a real
43
68
  platform capability difference.
44
69
 
70
+ For provider changes, inspect the supported implementation; mocks and local types
71
+ alone do not establish an API contract. Separate static/helper tests, tests with
72
+ simulated services, and real integration evidence. If the version or runtime is
73
+ unavailable, report that limit, not an assumed defect. For packaging changes,
74
+ check source, shipped bundle, and deployed files separately.
75
+
76
+ For scanners, check eligibility, permissions, caps, retries, unchanged runs, and
77
+ recovery for each action listed under triage. A launch cap does not permit
78
+ unlimited gate comments.
79
+
45
80
  ### Untrusted triggers and credentials
46
81
 
47
82
  Treat repository events, issue and PR comments, chat messages, catalog fields,
@@ -111,10 +146,9 @@ deep change lacks it, weigh the gap by risk:
111
146
  the diff would materially slow or weaken the review.
112
147
  - **LOW** risk: never block on missing design context alone.
113
148
 
114
- Approving a same-repository PR removes its `.pr/` directory. If a temporary
115
- `.pr/` page is the only design explanation, submit a COMMENT review instead of
116
- approving, so the page remains for the human maintainer's decision, unless the
117
- PR description already carries the durable equivalent.
149
+ Temporary `.pr/` artifacts remain available during review and are removed through
150
+ a cleanup PR after merge to `main`. Preserve any design explanation needed beyond
151
+ that cleanup in the PR description or permanent documentation.
118
152
 
119
153
  Design context aids review; it does not excuse correctness, security,
120
154
  architecture, or repository-ownership problems.
@@ -130,3 +164,11 @@ Do not comment on punctuation, preferred prose tone, optional DRY cleanup, or
130
164
  hypothetical non-standard configurations without a supported failure mode. Before
131
165
  raising a finding, verify that the referenced file and behavior are present in
132
166
  the current PR head and have not already been addressed in review history.
167
+
168
+ ## Review verdict
169
+
170
+ Do not approve material code defects or unmet blocking merge/evidence checks.
171
+ Distinguish code defects from missing merge requirements and optional follow-up.
172
+ If GitHub forbids self-approval of a clean PR, use COMMENT and explain why.
173
+ Respect accepted scope and non-goals: block on a pre-existing limitation only if
174
+ this change exposes it.
@@ -14,15 +14,15 @@ jobs:
14
14
  - uses: actions/checkout@v7
15
15
  - uses: actions/setup-node@v7
16
16
  with:
17
- node-version: "20"
17
+ node-version: "24"
18
18
  - name: Build installable App package
19
19
  run: node apps/vscode/scripts/package.mjs
20
20
  - name: Validate package files
21
21
  run: |
22
22
  test -f dist/apps/vscode/canvas-extension.json
23
23
  test -f dist/apps/vscode/extension.js
24
- test -f dist/apps/vscode/backend/openvscode-linux-amd64.tar.gz
25
- test -f dist/apps/vscode/backend/openvscode-linux-arm64.tar.gz
24
+ test -f dist/apps/vscode/README.md
25
+ test -z "$(find dist/apps/vscode -type f -name '*.tar.gz' -print -quit)"
26
26
  - uses: actions/upload-artifact@v7
27
27
  with:
28
28
  name: vscode-app-${{ github.sha }}
@@ -16,7 +16,7 @@ jobs:
16
16
  - name: Setup Node.js
17
17
  uses: actions/setup-node@v7
18
18
  with:
19
- node-version: "20"
19
+ node-version: "24"
20
20
 
21
21
  - name: Install Claude Code CLI
22
22
  run: npm install -g @anthropic-ai/claude-code
@@ -6,84 +6,9 @@ on:
6
6
  pull_request_target:
7
7
  types: [opened, synchronize, reopened, closed]
8
8
  branches: [main]
9
- pull_request_review:
10
- types: [submitted]
11
9
 
12
10
  jobs:
13
- # Auto-remove .pr/ directory from same-repository PRs when approved.
14
- cleanup-on-approval:
15
- concurrency:
16
- group: cleanup-pr-artifacts-${{ github.event.pull_request.number }}
17
- cancel-in-progress: false
18
- if: >-
19
- github.event_name == 'pull_request_review' &&
20
- github.event.review.state == 'approved' &&
21
- github.event.pull_request.head.repo.full_name == github.repository
22
- runs-on: ubuntu-latest
23
- permissions:
24
- contents: write
25
- pull-requests: write
26
- steps:
27
- # Use PAT so the push triggers CI workflows that will complete and
28
- # satisfy branch protection. We can't use [skip ci] because GitHub Apps
29
- # can create stuck checks that block merging.
30
- - uses: actions/checkout@v7
31
- with:
32
- ref: ${{ github.event.pull_request.head.ref }}
33
- token: ${{ secrets.OPENHANDS_BOT_GITHUB_PAT_PUBLIC }}
34
-
35
- - name: Remove .pr/ directory
36
- id: remove
37
- run: |
38
- if [ -d ".pr" ]; then
39
- git config user.name "allhands-bot"
40
- git config user.email "allhands-bot@users.noreply.github.com"
41
- git rm -rf .pr/
42
- git commit -m "chore: Remove PR-only artifacts [automated]"
43
- git push || {
44
- echo "::error::Failed to push cleanup commit. Check branch protection rules."
45
- exit 1
46
- }
47
- echo "removed=true" >> "$GITHUB_OUTPUT"
48
- echo "::notice::Removed .pr/ directory"
49
- else
50
- echo "removed=false" >> "$GITHUB_OUTPUT"
51
- echo "::notice::No .pr/ directory to remove"
52
- fi
53
-
54
- - name: Update PR comment after cleanup
55
- if: steps.remove.outputs.removed == 'true'
56
- uses: actions/github-script@v9
57
- with:
58
- script: |
59
- const marker = '<!-- pr-artifacts-notice -->';
60
- const body = `${marker}
61
- ✅ **PR Artifacts Cleaned Up**
62
-
63
- The \`.pr/\` directory has been automatically removed.
64
- `;
65
-
66
- const comments = await github.paginate(
67
- github.rest.issues.listComments,
68
- {
69
- owner: context.repo.owner,
70
- repo: context.repo.repo,
71
- issue_number: context.issue.number,
72
- per_page: 100,
73
- },
74
- );
75
-
76
- const existing = comments.find(c => c.body.includes(marker));
77
- if (existing) {
78
- await github.rest.issues.updateComment({
79
- owner: context.repo.owner,
80
- repo: context.repo.repo,
81
- comment_id: existing.id,
82
- body: body,
83
- });
84
- }
85
-
86
- # Inspect the fork through the API; never check out untrusted code with a write token.
11
+ # Inspect PR artifacts through the API; never check out untrusted code with a write token.
87
12
  check-pr-artifacts:
88
13
  if: >-
89
14
  github.event_name == 'pull_request_target' &&
@@ -144,14 +69,10 @@ jobs:
144
69
  return;
145
70
  }
146
71
 
147
- const isFork = headRepository.full_name !== context.payload.repository.full_name;
148
- const cleanup = isFork
149
- ? 'Because this is a fork PR, the workflow will **open or update a cleanup PR against `main` after merge**.'
150
- : 'The directory will be **automatically removed when the PR is approved**.';
151
72
  const body = `${marker}
152
73
  📁 **PR Artifacts Notice**
153
74
 
154
- This PR contains a \`.pr/\` directory with temporary PR-specific documents. ${cleanup}
75
+ This PR contains a \`.pr/\` directory with temporary PR-specific documents. The directory will be **automatically removed after this PR merges to \`main\`** through a cleanup PR opened or updated by this workflow.
155
76
  `;
156
77
 
157
78
  core.warning('.pr/ directory contains temporary PR-only artifacts');
@@ -171,8 +92,8 @@ jobs:
171
92
  });
172
93
  }
173
94
 
174
- # Fork branches cannot be modified reliably. If artifacts reach the trusted base,
175
- # remove them through a pull request so branch protections remain enforced.
95
+ # Remove artifacts from all merged PRs through the trusted base cleanup path,
96
+ # preserving branch protections and avoiding a cleanup push during review.
176
97
  cleanup-after-merge:
177
98
  concurrency:
178
99
  group: cleanup-pr-artifacts-${{ github.event.pull_request.base.ref }}
@@ -14,6 +14,19 @@ jobs:
14
14
  - name: Checkout repository
15
15
  uses: actions/checkout@v7
16
16
 
17
+ - name: Reject temporary artifacts in release PRs
18
+ if: >-
19
+ github.event_name == 'pull_request' &&
20
+ startsWith(github.head_ref, 'release-please--')
21
+ run: |
22
+ set -euo pipefail
23
+ artifacts="$(git ls-tree -r --name-only HEAD -- .pr)"
24
+ if [ -n "$artifacts" ]; then
25
+ echo "::error::Release PR contains temporary .pr artifacts. Merge the cleanup PR and let release-please update this PR before merging."
26
+ printf '%s\n' "$artifacts"
27
+ exit 1
28
+ fi
29
+
17
30
  - name: Install uv
18
31
  uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
19
32
  with:
@@ -23,7 +36,7 @@ jobs:
23
36
  - name: Setup Node.js
24
37
  uses: actions/setup-node@v7
25
38
  with:
26
- node-version: "20"
39
+ node-version: "24"
27
40
 
28
41
  - name: Run tests
29
42
  run: uv run --group test pytest tests/
@@ -0,0 +1,36 @@
1
+ # Retain the Git ignore exclusions npm used before this file was added.
2
+ # Byte-compiled / optimized / DLL files
3
+ __pycache__/
4
+ *.py[cod]
5
+ *$py.class
6
+
7
+ # pytest cache
8
+ .pytest_cache/
9
+
10
+ # Virtual environments
11
+ venv/
12
+ .venv/
13
+ env/
14
+
15
+ # IDE
16
+ .idea/
17
+ .vscode/
18
+ *.swp
19
+ *.swo
20
+
21
+ # OS
22
+ .DS_Store
23
+ Thumbs.db
24
+ .agents/*
25
+ !.agents/skills/
26
+ .agents/skills/*
27
+ !.agents/skills/custom-codereview-guide.md
28
+
29
+ # uv lock file (no application code in this repo)
30
+ uv.lock
31
+
32
+ # npm pack artifacts (also keeps stray tarballs out of the published package)
33
+ *.tgz
34
+
35
+ # Temporary review artifacts may reach main before the cleanup PR merges.
36
+ /.pr/
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.31.0"
3
+ }
@@ -146,7 +146,7 @@ When editing or adding skills in this repo, follow these rules (and add new skil
146
146
 
147
147
  ## PR-specific documents (`.pr/`)
148
148
 
149
- When working on a PR that requires design documents, live-test logs, development-only scripts, or other temporary artifacts that should **not** be merged to `main`, store them in a `.pr/` directory at the repository root.
149
+ When working on a PR that requires design documents, live-test logs, development-only scripts, or other temporary artifacts that should be removed after merging to `main`, store them in a `.pr/` directory at the repository root.
150
150
 
151
151
  ```bash
152
152
  mkdir -p .pr
@@ -160,14 +160,15 @@ mkdir -p .pr
160
160
  The `PR Artifacts` workflow (`.github/workflows/pr-artifacts.yml`) owns the lifecycle of this directory:
161
161
 
162
162
  1. **Notification**: When a PR contains `.pr/`, a single comment is posted to the PR conversation alerting reviewers.
163
- 2. **Auto-cleanup on approval**: For same-repository PRs, the directory is automatically removed by a follow-up commit when the PR is approved.
164
- 3. **Post-merge cleanup**: If artifacts reach `main`, including through a fork PR, the workflow opens or updates a cleanup PR against `main`.
163
+ 2. **Post-merge cleanup**: After a same-repository or fork PR merges to `main`, the workflow automatically opens or updates a cleanup PR to remove the directory from `main`.
165
164
 
166
165
  Important notes:
167
166
 
168
167
  - Do not put anything in `.pr/` that needs to be preserved.
169
168
  - The `.pr/` check is informational during development; it posts a notice rather than blocking the PR.
170
169
  - Cleanup PRs follow the normal review and required-check protections for `main`.
170
+ - npm packaging excludes `.pr/` while its cleanup PR is pending, so temporary review artifacts do not ship in releases.
171
+ - Release PRs fail the required `test` check while their committed tree contains `.pr/`. Merge the artifact-cleanup PR and let release-please update the release PR before merging it.
171
172
 
172
173
  ## CI / validation gotchas
173
174
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: openhands-extensions
3
- Version: 0.29.0
3
+ Version: 0.31.0
4
4
  Summary: OpenHands extensions, plugins, and skills (Python bindings for the integration catalog)
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -100,7 +100,7 @@ The JS and Python versions are kept in lock-step by `release-please` and guarded
100
100
  ## Extensions Catalog
101
101
 
102
102
  <!-- BEGIN AUTO-GENERATED CATALOG -->
103
- This repository contains **2 marketplace(s)** with **77 extensions** (66 skills, 11 plugins).
103
+ This repository contains **2 marketplace(s)** with **78 extensions** (67 skills, 11 plugins).
104
104
 
105
105
  ### large-codebase
106
106
 
@@ -119,7 +119,7 @@ OpenHands skills for interacting, improving, and refactoring large codebases
119
119
 
120
120
  Official skills and plugins for OpenHands — the open-source AI software engineer.
121
121
 
122
- **73 extensions** (64 skills, 9 plugins)
122
+ **74 extensions** (65 skills, 9 plugins)
123
123
 
124
124
  | Name | Type | Description | Commands |
125
125
  |------|------|-------------|----------|
@@ -154,10 +154,10 @@ Official skills and plugins for OpenHands — the open-source AI software engine
154
154
  | github-repo-monitor | skill | Create a cron automation that polls a GitHub repository for issue and PR comments containing a configurable trigger p... | `/github-monitor:poll` |
155
155
  | github-stale-ci-pr-closer | skill | Warn and close abandoned pull requests whose required CI remains failing. | `/github-stale-ci-pr-closer` |
156
156
  | gitlab | skill | Interact with GitLab repositories, merge requests, and APIs using the GITLAB_TOKEN environment variable. Use when wor... | — |
157
- | gitlab-issue-to-mr | skill | Create an automation that implements GitLab issues when a configurable trigger label is applied. Clones the default b... | `/issue-to-mr:setup` |
157
+ | gitlab-issue-to-mr | skill | Create an automation that implements GitLab issues when a configurable trigger label is applied. Polls the projects d... | `/issue-to-mr:setup` |
158
158
  | incident-retrospective | skill | Create an automation that drafts incident retrospectives by gathering incident-channel messages from Slack, collectin... | `/incident-retro:setup` |
159
159
  | iterate | skill | Iterate on a GitHub pull request — drive it through CI, code review, and QA until merge-ready. Monitors state, fixes ... | `/iterate`, `/verify`, `/babysit` |
160
- | jira-issue-to-pr | skill | Deploy a cron-based OpenHands automation that watches a Jira Cloud project for issues labeled with a configurable lab... | — |
160
+ | jira-issue-to-pr | skill | Deploy a cron-based OpenHands automation that opens a GitHub pull request, a GitLab merge request or a Bitbucket pull... | — |
161
161
  | jupyter | skill | Read, modify, execute, and convert Jupyter notebooks programmatically. Use when working with .ipynb files for data sc... | — |
162
162
  | kubernetes | skill | Set up and manage local Kubernetes clusters using KIND (Kubernetes IN Docker). Use when testing Kubernetes applicatio... | — |
163
163
  | learn-from-code-review | skill | Distill code review feedback from GitHub PRs into reusable skills and guidelines. Use when users ask to learn from co... | `/learn-from-reviews` |
@@ -186,11 +186,12 @@ Official skills and plugins for OpenHands — the open-source AI software engine
186
186
  | skill-creator | skill | Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an ex... | — |
187
187
  | slack-channel-monitor | skill | Create a cron automation that polls up to 10 Slack channels every minute and starts an OpenHands conversation when a ... | `/slack-monitor:poll` |
188
188
  | slack-standup-digest | skill | Create an automation that generates an async standup digest from Slack. Searches selected channels for messages since... | `/standup-digest:setup` |
189
+ | software-factory | skill | Set up a GitHub software factory fast: ask only for the repositories and the ticket source (GitHub issues, Jira or Li... | `/software-factory` |
189
190
  | ssh | skill | Establish and manage SSH connections to remote machines, including key generation, configuration, and file transfers.... | — |
190
191
  | swift-linux | skill | Install and configure Swift programming language on Debian Linux for server-side development. Use when building Swift... | — |
191
192
  | technical-writing | skill | Write and revise technical explanations in flowing, direct, conversational prose that stays concise without becoming ... | — |
192
193
  | theme-factory | skill | Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc.... | — |
193
- | ticket-to-code-change | skill | Set up Jira or Linear ticket-to-code-change automations for GitHub, GitLab, and Bitbucket. | `/ticket-to-code-change:setup` |
194
+ | ticket-to-code-change | skill | Set up Linear ticket-to-code-change automations for GitHub, GitLab, and Bitbucket. | `/ticket-to-code-change:setup` |
194
195
  | upstream-fork-sync | skill | Keep a long-lived fork in sync with its upstream. Creates a cron automation that fetches upstream changes, rebases lo... | `/upstream-fork-sync:setup` |
195
196
  | use-jev | skill | Use Jev, a general classifier, for typed choices, scores, and yes/no probabilities in software. | — |
196
197
  | uv | skill | Common project, dependency, and environment operations using uv. | — |
@@ -0,0 +1,15 @@
1
+ # VS Code App
2
+
3
+ Install this App in Agent Canvas by opening **Apps → Add App** and entering:
4
+
5
+ ```text
6
+ https://github.com/OpenHands/extensions/tree/main/apps/vscode
7
+ ```
8
+
9
+ The App provides a full-height OpenVSCode editor. Before the backend is ready, it shows backend status, an optional workspace-folder input, and revision-bound prepare/start/stop/refresh actions. Once ready, the page contains only the editor iframe.
10
+
11
+ ## Artifact delivery
12
+
13
+ The repository contains no OpenVSCode binaries. During the explicit **Prepare and start** step, Agent Server downloads only the current platform's pinned OpenVSCode Server `v1.109.5` archive from its public GitHub Release, verifies the manifest-pinned SHA-256 digest, safely extracts it into an App-owned content-addressed cache, and starts it with App-owned home, user-data, and extensions directories. It does not send Agent Server or repository credentials to the artifact host.
14
+
15
+ The optional folder is persisted in browser storage and forwarded as the editor folder. It is a user convenience, not OS sandboxing.
@@ -0,0 +1,27 @@
1
+ {
2
+ "schema_version": 1,
3
+ "name": "vscode",
4
+ "display_name": "VS Code",
5
+ "version": "0.1.0",
6
+ "description": "A managed OpenVSCode editor for the selected Agent Canvas workspace.",
7
+ "entrypoint": "extension.js",
8
+ "contributes": {"pages": [{"id": "editor", "title": "VS Code", "path": "/editor"}]},
9
+ "backend": {
10
+ "schema_version": 1,
11
+ "artifacts": {
12
+ "linux-amd64": {
13
+ "url": "https://github.com/gitpod-io/openvscode-server/releases/download/openvscode-server-v1.109.5/openvscode-server-v1.109.5-linux-x64.tar.gz",
14
+ "sha256": "b433bf4f0227321a7014d8460d10a8f958adc0f45aa79bd889e84e65e8f88363",
15
+ "strip_components": 1
16
+ },
17
+ "linux-arm64": {
18
+ "url": "https://github.com/gitpod-io/openvscode-server/releases/download/openvscode-server-v1.109.5/openvscode-server-v1.109.5-linux-arm64.tar.gz",
19
+ "sha256": "36d9c14036489b63de84ebace837fcacf7e60e669a0dc715802c5443684ea4dc",
20
+ "strip_components": 1
21
+ }
22
+ },
23
+ "argv": ["{artifact_dir}/bin/openvscode-server", "--host", "127.0.0.1", "--port", "{port}", "--without-connection-token", "--accept-server-license-terms", "--telemetry-level", "off", "--user-data-dir", "{data_dir}/user", "--extensions-dir", "{data_dir}/extensions", "--server-base-path", "/app-backends/vscode", "{data_dir}"],
24
+ "health": {"path": "/", "timeout_seconds": 90, "interval_seconds": 0.5},
25
+ "inherit_environment": ["PATH", "LANG", "LC_ALL", "TMPDIR"]
26
+ }
27
+ }
@@ -5,14 +5,32 @@ function folderKey(host) {
5
5
  return `${FOLDER_KEY_PREFIX}:${host.backend.id}:${host.backend.orgId || "local"}:${host.extension.name}`;
6
6
  }
7
7
 
8
- function button(label, onClick) {
8
+ function button(label, onClick, variant = "secondary") {
9
9
  const element = document.createElement("button");
10
10
  element.type = "button";
11
11
  element.textContent = label;
12
+ element.style.cssText = [
13
+ "min-height:40px",
14
+ "padding:0 18px",
15
+ "border-radius:8px",
16
+ "border:1px solid transparent",
17
+ "font:inherit",
18
+ "font-size:14px",
19
+ "font-weight:600",
20
+ "cursor:pointer",
21
+ "transition:opacity 120ms ease,background-color 120ms ease",
22
+ variant === "primary"
23
+ ? "background:#f3ce49;color:#171717"
24
+ : "background:#262626;color:#fafafa;border-color:#525252",
25
+ ].join(";");
12
26
  element.addEventListener("click", onClick);
13
27
  return element;
14
28
  }
15
29
 
30
+ function statusLabel(state) {
31
+ return state.charAt(0).toUpperCase() + state.slice(1);
32
+ }
33
+
16
34
  export function activate(host) {
17
35
  return host.registerPage("editor", async ({ container }) => {
18
36
  container.style.minHeight = "100vh";
@@ -54,26 +72,55 @@ export function activate(host) {
54
72
  return;
55
73
  }
56
74
 
75
+ shell.style.justifyContent = "center";
76
+ shell.style.alignItems = "center";
77
+ shell.style.padding = "32px";
78
+ shell.style.boxSizing = "border-box";
79
+
57
80
  const panel = document.createElement("section");
58
81
  panel.setAttribute("aria-live", "polite");
82
+ panel.style.cssText = "width:min(100%,520px);padding:32px;border:1px solid #262626;border-radius:12px;background:#0a0a0a;color:#fafafa;box-sizing:border-box;text-align:center";
59
83
  const heading = document.createElement("h2");
60
- heading.textContent = "VS Code setup";
61
- const detail = document.createElement("p");
62
- detail.textContent = status.detail || `Backend status: ${status.state}.`;
63
- panel.append(heading, detail);
84
+ heading.textContent = "Set up VS Code";
85
+ heading.style.cssText = "margin:0;font-size:24px;line-height:32px;font-weight:600";
86
+ const description = document.createElement("p");
87
+ description.textContent = "Start the secure VS Code backend for this Agent Canvas session. The first launch downloads and verifies the pinned editor package.";
88
+ description.style.cssText = "margin:12px auto 0;max-width:440px;color:#a3a3a3;font-size:14px;line-height:21px";
89
+ const statusRow = document.createElement("div");
90
+ statusRow.style.cssText = "display:flex;align-items:center;justify-content:center;gap:8px;margin:20px 0 24px;font-size:13px;color:#a3a3a3";
91
+ const statusDot = document.createElement("span");
92
+ statusDot.setAttribute("aria-hidden", "true");
93
+ statusDot.style.cssText = `width:8px;height:8px;border-radius:999px;background:${status.state === "unhealthy" ? "#fda4af" : "#737373"}`;
94
+ const detail = document.createElement("span");
95
+ detail.textContent = status.detail || `Backend status: ${statusLabel(status.state)}`;
96
+ statusRow.append(statusDot, detail);
97
+ panel.append(heading, description, statusRow);
98
+
99
+ const field = document.createElement("label");
100
+ field.style.cssText = "display:flex;flex-direction:column;gap:8px;text-align:left";
101
+ const fieldLabel = document.createElement("span");
102
+ fieldLabel.textContent = "Workspace folder";
103
+ fieldLabel.style.cssText = "font-size:13px;font-weight:500;color:#fafafa";
64
104
  const folder = document.createElement("input");
65
105
  folder.type = "text";
66
- folder.placeholder = "Workspace folder path (optional)";
106
+ folder.placeholder = "Optional path to open in VS Code";
67
107
  folder.value = localStorage.getItem(storageKey) || "";
68
108
  folder.setAttribute("aria-label", "Workspace folder path");
69
- panel.append(folder);
70
- const actions = document.createElement("p");
109
+ folder.style.cssText = "width:100%;height:42px;padding:0 12px;border:1px solid #525252;border-radius:8px;background:#1a1a1a;color:#fafafa;font:inherit;font-size:14px;box-sizing:border-box;outline:none";
110
+ const hint = document.createElement("span");
111
+ hint.textContent = "Leave blank to open the default App workspace.";
112
+ hint.style.cssText = "font-size:12px;color:#8c8c8c";
113
+ field.append(fieldLabel, folder, hint);
114
+ panel.append(field);
115
+
116
+ const actions = document.createElement("div");
117
+ actions.style.cssText = "display:flex;justify-content:center;gap:10px;margin-top:24px;flex-wrap:wrap";
71
118
  if (status.state === "missing" || status.state === "stopped" || status.state === "unhealthy") {
72
119
  actions.append(button("Prepare and start", async () => {
73
120
  const selectedFolder = folder.value.trim();
74
121
  if (selectedFolder) localStorage.setItem(storageKey, selectedFolder);
75
122
  else localStorage.removeItem(storageKey);
76
- actions.replaceChildren(document.createTextNode("Preparing..."));
123
+ actions.replaceChildren(document.createTextNode("Preparing and verifying VS Code..."));
77
124
  try {
78
125
  let approval = status;
79
126
  if (!approval.revision) approval = await request("GET");
@@ -90,14 +137,15 @@ export function activate(host) {
90
137
  render(await request("GET"));
91
138
  } catch (error) {
92
139
  detail.textContent = `Setup failed: ${error.message}`;
93
- actions.replaceChildren(button("Prepare and start", () => render(status)));
140
+ statusDot.style.background = "#fda4af";
141
+ actions.replaceChildren(button("Try again", () => render(status), "primary"));
94
142
  }
95
- }));
143
+ }, "primary"));
96
144
  }
97
145
  if (status.state === "ready" || status.state === "starting") {
98
146
  actions.append(button("Stop", async () => render(await request("POST", `${BACKEND}/stop`))));
99
147
  }
100
- actions.append(button("Refresh", async () => render(await request("GET"))));
148
+ actions.append(button("Refresh status", async () => render(await request("GET"))));
101
149
  panel.append(actions);
102
150
  shell.append(panel);
103
151
  };
@@ -0,0 +1,30 @@
1
+ import { cp, mkdir, readFile, rm } from "node:fs/promises";
2
+ import path from "node:path";
3
+
4
+ const appRoot = path.resolve(new URL("..", import.meta.url).pathname);
5
+ const root = path.resolve(appRoot, "../..");
6
+ const output = path.resolve(process.env.OUTPUT_DIR ?? path.join(root, "dist"));
7
+ const packageRoot = path.join(output, "apps", "vscode");
8
+ const manifest = JSON.parse(
9
+ await readFile(path.join(appRoot, "canvas-extension.json"), "utf8"),
10
+ );
11
+
12
+ for (const [platform, artifact] of Object.entries(manifest.backend.artifacts)) {
13
+ const url = new URL(artifact.url);
14
+ if (url.protocol !== "https:" || !url.pathname.endsWith(".tar.gz")) {
15
+ throw new Error(`${platform}: invalid HTTPS artifact URL`);
16
+ }
17
+ if (!/^[0-9a-f]{64}$/.test(artifact.sha256)) {
18
+ throw new Error(`${platform}: invalid SHA-256`);
19
+ }
20
+ if (!Number.isInteger(artifact.strip_components) || artifact.strip_components < 0) {
21
+ throw new Error(`${platform}: invalid strip_components`);
22
+ }
23
+ }
24
+
25
+ await rm(packageRoot, { recursive: true, force: true });
26
+ await mkdir(packageRoot, { recursive: true });
27
+ for (const filename of ["canvas-extension.json", "extension.js", "README.md"]) {
28
+ await cp(path.join(appRoot, filename), path.join(packageRoot, filename));
29
+ }
30
+ console.log(`Wrote source-installable App package to ${packageRoot}`);