openhands-extensions 0.10.0__tar.gz → 0.11.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.
- openhands_extensions-0.11.0/.release-please-manifest.json +3 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/PKG-INFO +1 -1
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/README.md +3 -2
- openhands_extensions-0.11.0/integrations/catalog/atlassian-rovo.json +44 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/github.json +1 -1
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/linear.json +1 -1
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/slack.json +2 -2
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog-index.js +30 -28
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/marketplaces/openhands-extensions.json +9 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/package.json +1 -1
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/pyproject.toml +1 -1
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/python/openhands_extensions/_version.py +1 -1
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/index.js +7 -1
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/iterate/README.md +4 -1
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/iterate/SKILL.md +22 -2
- openhands_extensions-0.11.0/skills/technical-writing/.claude-plugin/plugin.json +15 -0
- openhands_extensions-0.11.0/skills/technical-writing/README.md +14 -0
- openhands_extensions-0.11.0/skills/technical-writing/SKILL.md +106 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_catalogs.py +67 -0
- openhands_extensions-0.11.0/tests/test_live_integration_smoke.py +366 -0
- openhands_extensions-0.10.0/.release-please-manifest.json +0 -3
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/.agents/skills/custom-codereview-guide.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/.claude-plugin/marketplace.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/.github/pull_request_template.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/.github/release.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/.github/workflows/check-extensions.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/.github/workflows/deprecation-check.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/.github/workflows/npm-publish.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/.github/workflows/pr.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/.github/workflows/pypi-publish.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/.github/workflows/release.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/.github/workflows/tests.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/.github/workflows/vulnerability-scan.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/.gitignore +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/AGENTS.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/LICENSE +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/MIGRATION.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/analysis_results.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/automations/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/automations/catalog/github-pr-reviewer.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/automations/catalog/github-repo-monitor.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/automations/catalog/incident-retrospective-drafter.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/automations/catalog/jira-issue-to-pr.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/automations/catalog/linear-triage-assistant.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/automations/catalog/research-brief-writer.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/automations/catalog/slack-channel-monitor.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/automations/catalog/slack-standup-digest.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/automations/index.d.ts +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/automations/index.js +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/index.d.ts +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/index.js +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/airtable.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/apify.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/asana.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/atlassian.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/bitbucket.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/box.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/brave-search.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/browser-mcp.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/canva.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/clickhouse.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/cloudflare-bindings.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/cloudflare-browser-rendering.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/cloudflare-builds.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/cloudflare-docs.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/cloudflare-observability.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/confluence.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/datadog.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/deepwiki.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/discord.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/elevenlabs.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/everything.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/exa.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/fetch.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/figma.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/filesystem.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/firecrawl.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/git.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/gmail.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/google-calendar.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/google-docs.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/google-drive.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/google-sheets.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/hubspot.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/huggingface.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/intercom.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/jira.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/kagi.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/memory.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/microsoft-outlook.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/microsoft-teams.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/miro.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/monday.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/mongodb.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/neon.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/netlify.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/notion.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/obsidian.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/okta.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/onedrive.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/ordinal.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/paypal.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/playwright.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/posthog.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/quickbooks.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/redis.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/resend.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/salesforce.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/sentry.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/sequential-thinking.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/sharepoint.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/stripe.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/supabase.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/superhuman-mail.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/tavily.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/time.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/trello.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/vanta.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/vercel.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/webflow.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/xero.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/zoom.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog.schema.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/icons/salesforce.svg +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/icons/slack.svg +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/index.d.ts +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/index.js +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/marketplaces/large-codebase.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/city-weather/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/city-weather/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/city-weather/commands/now.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/cobol-modernization/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/cobol-modernization/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/cobol-modernization/references/troubleshooting.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/cobol-modernization/skills/build-setup/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/cobol-modernization/skills/build-setup/scripts/install-gnucobol.sh +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/cobol-modernization/skills/cobol-modernization/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/cobol-modernization/skills/mainframe-planning/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/cobol-modernization/skills/mainframe-removal/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/cobol-modernization/skills/mainframe-removal/references/cics-transformation-examples.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/cobol-modernization/skills/to-java-migration/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/cobol-modernization/skills/to-java-migration/references/cobol-to-java-example.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/cobol-modernization/skills/to-java-migration/references/datatype-mappings.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/issue-duplicate-checker/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/issue-duplicate-checker/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/issue-duplicate-checker/action.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/issue-duplicate-checker/scripts/auto_close_duplicate_issues.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/issue-duplicate-checker/scripts/issue_duplicate_check_openhands.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/issue-duplicate-checker/scripts/post_duplicate_notice.cjs +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/issue-duplicate-checker/scripts/remove_duplicate_candidate_label.cjs +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/magic-test/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/magic-test/skills/magic-word/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/migration-scoring/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/migration-scoring/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/migration-scoring/skills/migration-mapping/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/migration-scoring/skills/migration-report/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/migration-scoring/skills/migration-scoring/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/migration-scoring/skills/score-quality/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/migration-scoring/skills/score-quality/references/scoring-criteria.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/migration-scoring/skills/score-style/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/references/criteria.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/skills/agent-readiness-report/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/skills/agent-readiness-report/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/skills/agent-readiness-report/references/criteria.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/skills/agent-readiness-report/scripts/scan_agent_instructions.sh +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/skills/agent-readiness-report/scripts/scan_build_env.sh +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/skills/agent-readiness-report/scripts/scan_feedback_loops.sh +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/skills/agent-readiness-report/scripts/scan_policy.sh +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/skills/agent-readiness-report/scripts/scan_workflows.sh +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/skills/improve-agent-readiness/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/skills/improve-agent-readiness/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/skills/improve-agent-readiness/references/criteria.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/skills/setup-agents-md/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/skills/setup-agents-md/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/skills/setup-openhands/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/skills/setup-openhands/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/skills/setup-pr-review/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/onboarding/skills/setup-pr-review/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/commands/create.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/commands/openhands-cloud.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/scripts/run.sh +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-api/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-api/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-api/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-api/references/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-api/references/TROUBLESHOOTING.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-api/references/example_prompt.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-api/references/windows.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-api/scripts/openhands_api.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-api/scripts/openhands_api.ts +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-automation/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-automation/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-automation/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-automation/commands/automation-create.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-automation/references/ab-testing.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-automation/references/custom-automation.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-automation/references/windows.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-sdk/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-sdk/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-sdk/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/openhands/skills/openhands-sdk/commands/sdk.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/action.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/scripts/agent_script.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/scripts/evaluate_review.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/scripts/prompt.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/skills/code-review/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/skills/code-review/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/skills/code-review/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/skills/code-review/commands/codereview-roasted.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/skills/code-review/commands/codereview.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/skills/code-review/references/risk-evaluation.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/skills/code-review/references/supply-chain-security.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/skills/github-pr-review/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/skills/github-pr-review/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/skills/github-pr-review/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/skills/github-pr-review/commands/github-pr-review.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/skills/github-pr-review/references/windows.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/workflows/pr-review-by-openhands.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/pr-review/workflows/pr-review-evaluation.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/qa-changes/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/qa-changes/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/qa-changes/action.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/qa-changes/scripts/agent_script.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/qa-changes/scripts/evaluate_qa_changes.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/qa-changes/scripts/prompt.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/qa-changes/skills/qa-changes/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/qa-changes/skills/qa-changes/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/qa-changes/skills/qa-changes/commands/qa-changes.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/qa-changes/workflows/qa-changes-by-openhands.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/qa-changes/workflows/qa-changes-evaluation.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/release-notes/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/release-notes/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/release-notes/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/release-notes/action.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/release-notes/commands/release-notes.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/release-notes/scripts/agent_script.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/release-notes/scripts/generate_release_notes.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/release-notes/scripts/prompt.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/release-notes/scripts/validate_release_notes.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/release-notes/skills/release-notes/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/release-notes/skills/release-notes/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/release-notes/skills/release-notes/commands/release-notes.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/release-notes/workflows/release-notes.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/vulnerability-remediation/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/vulnerability-remediation/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/vulnerability-remediation/action.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/vulnerability-remediation/scripts/scan_and_remediate.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/vulnerability-remediation/skills/github/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/vulnerability-remediation/skills/github/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/vulnerability-remediation/skills/github/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/vulnerability-remediation/skills/github/references/windows.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/vulnerability-remediation/skills/security/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/vulnerability-remediation/skills/security/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/vulnerability-remediation/skills/security/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/plugins/vulnerability-remediation/workflows/vulnerability-scan.yml +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/python/openhands_extensions/__init__.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/python/openhands_extensions/deprecation.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/python/openhands_extensions/integration_models.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/python/openhands_extensions/integrations.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/release-please-config.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/scripts/build-integration-catalog.mjs +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/scripts/build-skills-catalog.mjs +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/scripts/check_deprecations.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/scripts/sync_extensions.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/scripts/sync_openhands_sdk_skill.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/add-javadoc/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/add-javadoc/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/add-javadoc/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/add-javadoc/references/example.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/add-skill/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/add-skill/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/add-skill/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/add-skill/scripts/fetch_skill.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/agent-canvas-environment/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/agent-canvas-environment/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/agent-canvas-environment/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/agent-creator/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/agent-creator/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/agent-creator/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/agent-creator/commands/agent-creator.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/agent-creator/references/fallback.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/agent-memory/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/agent-memory/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/agent-memory/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/agent-memory/commands/remember.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/agent-sdk-builder/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/agent-sdk-builder/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/agent-sdk-builder/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/agent-sdk-builder/commands/agent-builder.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/azure-devops/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/azure-devops/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/azure-devops/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/bitbucket/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/bitbucket/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/bitbucket/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/bitbucket-cloud/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/bitbucket-cloud/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/bitbucket-cloud/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/bitbucket-data-center/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/bitbucket-data-center/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/bitbucket-data-center/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/code-simplifier/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/code-simplifier/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/code-simplifier/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/code-simplifier/commands/simplify.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/code-simplifier/references/code-quality-review.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/code-simplifier/references/code-reuse-review.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/code-simplifier/references/efficiency-review.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/datadog/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/datadog/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/datadog/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/datadog/references/windows.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/deno/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/deno/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/deno/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/deno/references/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/discord/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/discord/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/discord/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/discord/__init__.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/discord/references/REFERENCE.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/discord/scripts/__init__.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/discord/scripts/_http.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/discord/scripts/post_webhook.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/discord/scripts/send_message.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/docker/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/docker/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/docker/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/evidence-based-citations/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/evidence-based-citations/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/evidence-based-citations/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/flarglebargle/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/flarglebargle/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/flarglebargle/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/frontend-design/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/frontend-design/LICENSE.txt +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/frontend-design/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/frontend-design/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/github-actions/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/github-actions/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/github-actions/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/github-pr-reviewer/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/github-pr-reviewer/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/github-pr-reviewer/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/github-pr-reviewer/commands/pr-reviewer-setup.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/github-pr-reviewer/references/state-schema.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/github-pr-reviewer/references/windows.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/github-pr-reviewer/scripts/main.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/github-repo-monitor/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/github-repo-monitor/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/github-repo-monitor/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/github-repo-monitor/commands/github-monitor-poll.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/github-repo-monitor/references/github-api.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/github-repo-monitor/references/state-schema.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/github-repo-monitor/references/windows.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/github-repo-monitor/scripts/main.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/github-repo-monitor/tests/test_main.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/gitlab/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/gitlab/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/gitlab/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/incident-retrospective/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/incident-retrospective/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/incident-retrospective/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/incident-retrospective/commands/incident-retro-setup.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/index.d.ts +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/iterate/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/iterate/commands/babysit.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/iterate/commands/iterate.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/iterate/commands/verify.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/iterate/references/heuristics.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/iterate/references/verification.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/iterate/references/windows.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/jira-issue-to-pr/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/jira-issue-to-pr/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/jira-issue-to-pr/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/jira-issue-to-pr/references/setup.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/jira-issue-to-pr/scripts/main.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/jupyter/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/jupyter/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/jupyter/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/kubernetes/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/kubernetes/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/kubernetes/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/kubernetes/references/windows.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/learn-from-code-review/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/learn-from-code-review/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/learn-from-code-review/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/learn-from-code-review/commands/learn-from-reviews.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/linear/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/linear/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/linear/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/linear/references/windows.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/linear-triage/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/linear-triage/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/linear-triage/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/linear-triage/commands/linear-triage-setup.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/notion/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/notion/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/notion/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/notion/references/windows.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/npm/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/npm/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/npm/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/pdflatex/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/pdflatex/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/pdflatex/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/plain-english-content/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/plain-english-content/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/plain-english-content/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/prd/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/prd/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/prd/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/prd/commands/prd.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/research-brief/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/research-brief/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/research-brief/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/research-brief/commands/research-brief-setup.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/skill-creator/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/skill-creator/LICENSE.txt +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/skill-creator/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/skill-creator/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/skill-creator/references/output-patterns.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/skill-creator/references/windows.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/skill-creator/references/workflows.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/skill-creator/scripts/init_skill.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/skill-creator/scripts/quick_validate.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/slack-channel-monitor/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/slack-channel-monitor/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/slack-channel-monitor/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/slack-channel-monitor/commands/slack-monitor-poll.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/slack-channel-monitor/references/slack-api.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/slack-channel-monitor/references/state-schema.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/slack-channel-monitor/references/windows.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/slack-channel-monitor/scripts/main.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/slack-standup-digest/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/slack-standup-digest/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/slack-standup-digest/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/slack-standup-digest/commands/standup-digest-setup.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/spark-version-upgrade/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/spark-version-upgrade/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/spark-version-upgrade/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/ssh/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/ssh/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/ssh/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/ssh/references/windows.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/swift-linux/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/swift-linux/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/swift-linux/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/theme-factory/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/theme-factory/LICENSE.txt +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/theme-factory/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/theme-factory/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/theme-factory/theme-showcase.pdf +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/theme-factory/themes/arctic-frost.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/theme-factory/themes/botanical-garden.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/theme-factory/themes/desert-rose.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/theme-factory/themes/forest-canopy.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/theme-factory/themes/golden-hour.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/theme-factory/themes/midnight-galaxy.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/theme-factory/themes/modern-minimalist.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/theme-factory/themes/ocean-depths.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/theme-factory/themes/sunset-boulevard.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/theme-factory/themes/tech-innovation.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/uv/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/uv/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/uv/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/uv/references/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/vercel/.claude-plugin/plugin.json +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/vercel/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/skills/vercel/SKILL.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_add_skill_installs_to_agents_dir.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_catalog_schema.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_code_review_risk_evaluation.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_deprecations.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_github_pr_review_skill.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_integration_catalog_in_sync.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_issue_duplicate_checker.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_openhands_api_python.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_plugin_manifest.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_pr_review_diff_payload.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_pr_review_feedback.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_pr_review_prompt.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_pr_review_review_context.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_qa_changes.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_qa_changes_evaluation.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_release_notes_generator.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_sdk_loading.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_skill_plugin_loading.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_skills_catalog.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_skills_have_readme.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_slack_channel_monitor.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_sync_extensions.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_version_alignment.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/tests/test_workflow_sync.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/utils/analysis/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/utils/analysis/laminar_signals/README.md +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/utils/analysis/laminar_signals/analyze.py +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/utils/analysis/laminar_signals/templates/default.j2 +0 -0
- {openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/utils/analysis/laminar_signals/templates/pr_review.j2 +0 -0
|
@@ -87,7 +87,7 @@ The JS and Python versions are kept in lock-step by `release-please` and guarded
|
|
|
87
87
|
## Extensions Catalog
|
|
88
88
|
|
|
89
89
|
<!-- BEGIN AUTO-GENERATED CATALOG -->
|
|
90
|
-
This repository contains **2 marketplace(s)** with **
|
|
90
|
+
This repository contains **2 marketplace(s)** with **63 extensions** (53 skills, 10 plugins).
|
|
91
91
|
|
|
92
92
|
### large-codebase
|
|
93
93
|
|
|
@@ -106,7 +106,7 @@ OpenHands skills for interacting, improving, and refactoring large codebases
|
|
|
106
106
|
|
|
107
107
|
Official skills and plugins for OpenHands — the open-source AI software engineer.
|
|
108
108
|
|
|
109
|
-
**
|
|
109
|
+
**59 extensions** (51 skills, 8 plugins)
|
|
110
110
|
|
|
111
111
|
| Name | Type | Description | Commands |
|
|
112
112
|
|------|------|-------------|----------|
|
|
@@ -164,6 +164,7 @@ Official skills and plugins for OpenHands — the open-source AI software engine
|
|
|
164
164
|
| slack-standup-digest | skill | Create an automation that generates an async standup digest from Slack. Searches selected channels for messages since... | `/standup-digest:setup` |
|
|
165
165
|
| ssh | skill | Establish and manage SSH connections to remote machines, including key generation, configuration, and file transfers.... | — |
|
|
166
166
|
| swift-linux | skill | Install and configure Swift programming language on Debian Linux for server-side development. Use when building Swift... | — |
|
|
167
|
+
| technical-writing | skill | Write and revise technical explanations in flowing, direct, conversational prose that stays concise without becoming ... | — |
|
|
167
168
|
| theme-factory | skill | Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc.... | — |
|
|
168
169
|
| uv | skill | Common project, dependency, and environment operations using uv. | — |
|
|
169
170
|
| vercel | skill | Deploy and manage applications on Vercel, including preview deployments and deployment protection. | — |
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "atlassian-rovo",
|
|
3
|
+
"name": "Atlassian Rovo",
|
|
4
|
+
"description": "Search, create, and update Jira issues, Confluence pages, Bitbucket repos, and Jira Service Management tickets - all through Atlassian's official hosted MCP server, powered by your Teamwork Graph.",
|
|
5
|
+
"categories": [
|
|
6
|
+
"Project management",
|
|
7
|
+
"Documentation",
|
|
8
|
+
"Engineering"
|
|
9
|
+
],
|
|
10
|
+
"appUrl": "https://www.atlassian.com/rovo",
|
|
11
|
+
"docsUrl": "https://support.atlassian.com/atlassian-rovo-mcp-server/docs/getting-started-with-the-atlassian-remote-mcp-server/",
|
|
12
|
+
"notes": "OAuth 2.1 is handled entirely by the Atlassian Rovo MCP server. No client credentials required - sign in with your Atlassian account when the authentication flow starts.",
|
|
13
|
+
"iconBg": "#0052CC",
|
|
14
|
+
"logoUrl": "https://cdn.simpleicons.org/atlassian/FFFFFF",
|
|
15
|
+
"keywords": [
|
|
16
|
+
"atlassian",
|
|
17
|
+
"rovo",
|
|
18
|
+
"jira",
|
|
19
|
+
"confluence",
|
|
20
|
+
"bitbucket",
|
|
21
|
+
"jsm",
|
|
22
|
+
"tickets",
|
|
23
|
+
"wiki",
|
|
24
|
+
"issues",
|
|
25
|
+
"sprint",
|
|
26
|
+
"mcp"
|
|
27
|
+
],
|
|
28
|
+
"connectionOptions": [
|
|
29
|
+
{
|
|
30
|
+
"id": "oauth",
|
|
31
|
+
"provider": "mcp",
|
|
32
|
+
"transport": {
|
|
33
|
+
"kind": "shttp",
|
|
34
|
+
"url": "https://mcp.atlassian.com/v1/mcp/authv2"
|
|
35
|
+
},
|
|
36
|
+
"auth": {
|
|
37
|
+
"strategy": "oauth2",
|
|
38
|
+
"oauth": {
|
|
39
|
+
"clientAuthentication": "none"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}
|
{openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/github.json
RENAMED
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"strategy": "api_key",
|
|
62
62
|
"credentialLabel": "Personal access token",
|
|
63
63
|
"credentialPlaceholder": "github_pat_...",
|
|
64
|
-
"credentialHelp": "
|
|
64
|
+
"credentialHelp": "Create a token in [GitHub settings](https://github.com/settings/personal-access-tokens): classic tokens need the repo and read:user scopes; fine-grained tokens need read access to Contents, Issues, and Pull requests for the repositories you use.",
|
|
65
65
|
"credentialSecretName": "GITHUB_PERSONAL_ACCESS_TOKEN",
|
|
66
66
|
"saveCredentialAsSecretByDefault": true
|
|
67
67
|
}
|
{openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/integrations/catalog/linear.json
RENAMED
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"apiKeyOptional": true,
|
|
53
53
|
"credentialLabel": "Linear API key",
|
|
54
54
|
"credentialPlaceholder": "Paste your Linear API key",
|
|
55
|
-
"credentialHelp": "
|
|
55
|
+
"credentialHelp": "Create a personal API key (grant at least read access) under Security & access in [Linear settings](https://linear.app/settings/account/security). Sent as Authorization: Bearer <token>; optional when the endpoint accepts your OAuth session."
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
],
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
],
|
|
9
9
|
"appUrl": "https://slack.com",
|
|
10
10
|
"docsUrl": "https://github.com/zencoderai/slack-mcp-server",
|
|
11
|
-
"notes": "
|
|
11
|
+
"notes": "The OAuth option uses Slack's official hosted MCP server (confidential OAuth user-token auth); the local option runs the open-source zencoderai stdio server with a bot token.",
|
|
12
12
|
"popularityRank": 95,
|
|
13
13
|
"connectionOptions": [
|
|
14
14
|
{
|
|
@@ -101,5 +101,5 @@
|
|
|
101
101
|
"messaging",
|
|
102
102
|
"team"
|
|
103
103
|
],
|
|
104
|
-
"installHint": "Create a Slack app with
|
|
104
|
+
"installHint": "Create a Slack app with bot token scopes channels:history, channels:read, chat:write, reactions:write, users:read, and users.profile:read, then paste its bot token below."
|
|
105
105
|
}
|
|
@@ -48,34 +48,35 @@ import entry42 from "./catalog/google-drive.json" with { type: "json" };
|
|
|
48
48
|
import entry43 from "./catalog/figma.json" with { type: "json" };
|
|
49
49
|
import entry44 from "./catalog/google-docs.json" with { type: "json" };
|
|
50
50
|
import entry45 from "./catalog/apify.json" with { type: "json" };
|
|
51
|
-
import entry46 from "./catalog/
|
|
52
|
-
import entry47 from "./catalog/
|
|
53
|
-
import entry48 from "./catalog/
|
|
54
|
-
import entry49 from "./catalog/
|
|
55
|
-
import entry50 from "./catalog/cloudflare-
|
|
56
|
-
import entry51 from "./catalog/cloudflare-
|
|
57
|
-
import entry52 from "./catalog/cloudflare-
|
|
58
|
-
import entry53 from "./catalog/cloudflare-
|
|
59
|
-
import entry54 from "./catalog/
|
|
60
|
-
import entry55 from "./catalog/
|
|
61
|
-
import entry56 from "./catalog/
|
|
62
|
-
import entry57 from "./catalog/
|
|
63
|
-
import entry58 from "./catalog/
|
|
64
|
-
import entry59 from "./catalog/
|
|
65
|
-
import entry60 from "./catalog/
|
|
66
|
-
import entry61 from "./catalog/
|
|
67
|
-
import entry62 from "./catalog/
|
|
68
|
-
import entry63 from "./catalog/
|
|
69
|
-
import entry64 from "./catalog/
|
|
70
|
-
import entry65 from "./catalog/
|
|
71
|
-
import entry66 from "./catalog/
|
|
72
|
-
import entry67 from "./catalog/
|
|
73
|
-
import entry68 from "./catalog/
|
|
74
|
-
import entry69 from "./catalog/
|
|
75
|
-
import entry70 from "./catalog/
|
|
76
|
-
import entry71 from "./catalog/
|
|
77
|
-
import entry72 from "./catalog/
|
|
78
|
-
import entry73 from "./catalog/
|
|
51
|
+
import entry46 from "./catalog/atlassian-rovo.json" with { type: "json" };
|
|
52
|
+
import entry47 from "./catalog/brave-search.json" with { type: "json" };
|
|
53
|
+
import entry48 from "./catalog/browser-mcp.json" with { type: "json" };
|
|
54
|
+
import entry49 from "./catalog/clickhouse.json" with { type: "json" };
|
|
55
|
+
import entry50 from "./catalog/cloudflare-bindings.json" with { type: "json" };
|
|
56
|
+
import entry51 from "./catalog/cloudflare-browser-rendering.json" with { type: "json" };
|
|
57
|
+
import entry52 from "./catalog/cloudflare-builds.json" with { type: "json" };
|
|
58
|
+
import entry53 from "./catalog/cloudflare-docs.json" with { type: "json" };
|
|
59
|
+
import entry54 from "./catalog/cloudflare-observability.json" with { type: "json" };
|
|
60
|
+
import entry55 from "./catalog/deepwiki.json" with { type: "json" };
|
|
61
|
+
import entry56 from "./catalog/everything.json" with { type: "json" };
|
|
62
|
+
import entry57 from "./catalog/exa.json" with { type: "json" };
|
|
63
|
+
import entry58 from "./catalog/fetch.json" with { type: "json" };
|
|
64
|
+
import entry59 from "./catalog/filesystem.json" with { type: "json" };
|
|
65
|
+
import entry60 from "./catalog/firecrawl.json" with { type: "json" };
|
|
66
|
+
import entry61 from "./catalog/git.json" with { type: "json" };
|
|
67
|
+
import entry62 from "./catalog/huggingface.json" with { type: "json" };
|
|
68
|
+
import entry63 from "./catalog/kagi.json" with { type: "json" };
|
|
69
|
+
import entry64 from "./catalog/memory.json" with { type: "json" };
|
|
70
|
+
import entry65 from "./catalog/mongodb.json" with { type: "json" };
|
|
71
|
+
import entry66 from "./catalog/neon.json" with { type: "json" };
|
|
72
|
+
import entry67 from "./catalog/obsidian.json" with { type: "json" };
|
|
73
|
+
import entry68 from "./catalog/paypal.json" with { type: "json" };
|
|
74
|
+
import entry69 from "./catalog/playwright.json" with { type: "json" };
|
|
75
|
+
import entry70 from "./catalog/redis.json" with { type: "json" };
|
|
76
|
+
import entry71 from "./catalog/resend.json" with { type: "json" };
|
|
77
|
+
import entry72 from "./catalog/sequential-thinking.json" with { type: "json" };
|
|
78
|
+
import entry73 from "./catalog/superhuman-mail.json" with { type: "json" };
|
|
79
|
+
import entry74 from "./catalog/time.json" with { type: "json" };
|
|
79
80
|
|
|
80
81
|
export const INTEGRATION_CATALOG_ENTRIES = [
|
|
81
82
|
entry0,
|
|
@@ -152,4 +153,5 @@ export const INTEGRATION_CATALOG_ENTRIES = [
|
|
|
152
153
|
entry71,
|
|
153
154
|
entry72,
|
|
154
155
|
entry73,
|
|
156
|
+
entry74,
|
|
155
157
|
];
|
{openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/marketplaces/openhands-extensions.json
RENAMED
|
@@ -729,6 +729,15 @@
|
|
|
729
729
|
"automation"
|
|
730
730
|
]
|
|
731
731
|
},
|
|
732
|
+
{
|
|
733
|
+
"name": "technical-writing",
|
|
734
|
+
"source": "./skills/technical-writing",
|
|
735
|
+
"description": "Write and revise technical explanations in flowing, direct, conversational prose that stays concise without becoming fragmented or vague.",
|
|
736
|
+
"category": "productivity",
|
|
737
|
+
"keywords": [
|
|
738
|
+
"technical-writing"
|
|
739
|
+
]
|
|
740
|
+
},
|
|
732
741
|
{
|
|
733
742
|
"name": "plain-english-content",
|
|
734
743
|
"source": "./skills/plain-english-content",
|
{openhands_extensions-0.10.0 → openhands_extensions-0.11.0}/python/openhands_extensions/_version.py
RENAMED
|
@@ -17,7 +17,7 @@ from importlib.metadata import PackageNotFoundError, version
|
|
|
17
17
|
#: Fallback used only when the package is not installed (no dist metadata).
|
|
18
18
|
#: Kept in lock-step with pyproject.toml/package.json by the version test.
|
|
19
19
|
# x-release-please-version
|
|
20
|
-
_FALLBACK_VERSION = "0.
|
|
20
|
+
_FALLBACK_VERSION = "0.11.0"
|
|
21
21
|
|
|
22
22
|
try:
|
|
23
23
|
__version__: str = version("openhands-extensions")
|
|
@@ -246,7 +246,7 @@ export const SKILLS_CATALOG = [
|
|
|
246
246
|
"/verify",
|
|
247
247
|
"/babysit"
|
|
248
248
|
],
|
|
249
|
-
"content": "# /iterate — Drive a PR to Merge-Ready\n\nIterate on a pull request until it passes all verification layers.\nYou push, poll, fix, and push again — the loop only ends when the PR is green\nor a blocker requires human help.\n\nNo scripts — you are the orchestration loop. Uses only standard `gh` CLI\ncommands that work on any GitHub repo.\n\nRequires: `gh` CLI authenticated with repo access, a PR branch.\nWindows PowerShell equivalents for Bash-only assignment, redirection, and quoting patterns in this skill are in `references/windows.md`.\n\n## Discover what the repo has\n\nNot every repo has all three verification layers. Before entering the loop,\ncheck which ones exist. Only poll layers that are actually set up.\n\n```bash\ngh workflow list --json name --jq '.[].name'\n```\n\n- **CI checks** — almost every repo has these. If `gh pr checks` returns results, CI is present.\n- **PR review bot** — look for a workflow named like \"PR Review\" or \"pr-review\" in the output above, or check for `.github/workflows/pr-review*.yml` in the repo. If it's not there, the repo doesn't have automated PR review. Skip step 3 entirely.\n- **QA bot** — look for a workflow named like \"QA\" or \"qa-changes\". If it's not there, the repo doesn't have automated QA. Skip step 4 entirely.\n\nA repo might have only CI. Or CI + review. Or all three. Your \"all passed\"\ncondition is: every *present* layer is green. Don't block waiting for layers\nthat don't exist.\n\n## The loop\n\n1. Push and ensure a draft PR exists.\n2. Poll each present verification layer.\n3. Decide: all passed? fix needed? wait?\n4. If fix needed — fix, commit, push, re-request review from bots, go to 2.\n5. If waiting — sleep per polling cadence, go to 2.\n6. If all present layers passed on the *current* SHA — mark PR ready, done.\n\nIMPORTANT: pushing a fix is NOT the end. After every fix+push you MUST\nre-request review from the review bot (if present) and go back to step 2.\nThe loop only ends when the verifiers pass on your latest SHA. Addressing\nfeedback and pushing a commit is just one iteration — the bot needs to\nreview the new code too.\n\nDo not stop to ask the user whether to continue polling; continue\nautonomously until a strict stop condition is met or the user interrupts.\n\n## Step 1 — Push and ensure PR exists (as draft)\n\nCreate the PR as a draft. This prevents repo automations (merge workflows,\nartifact cleanup, auto-merge) from triggering while you're still iterating.\nYou mark it ready only after all verification layers pass.\n\n```bash\ngit push origin HEAD\ngh pr create --fill --draft 2>/dev/null || true\ngh pr view --json number,url,headRefOid,isDraft --jq '\"\\(.number) \\(.url) \\(.headRefOid) draft=\\(.isDraft)\"'\n```\n\nIf the PR already exists and is not a draft, convert it:\n\n```bash\ngh pr ready --undo\n```\n\n## Step 2 — Poll CI checks\n\n```bash\ngh pr checks --json name,state,bucket --jq '\n { passed: [.[] | select(.bucket==\"pass\")] | length,\n failed: [.[] | select(.bucket==\"fail\")] | length,\n pending: [.[] | select(.bucket==\"pending\")] | length }'\n```\n\n- Zero failed, zero pending → CI green.\n- Any pending → wait and re-poll.\n- Any failed → diagnose (see \"CI failure classification\" below).\n\nTo inspect a failure:\n\n```bash\nSHA=$(gh pr view --json headRefOid --jq .headRefOid)\ngh run list --commit \"$SHA\" --status failure --json databaseId,name,conclusion \\\n --jq '.[] | \"\\(.databaseId)\\t\\(.name)\\t\\(.conclusion)\"'\ngh run view <run-id> --log-failed\n```\n\n## Step 3 — Poll PR review (if present)\n\nSkip this step if the repo has no review bot.\n\n```bash\ngh pr view --json reviews --jq '\n [.reviews[] | select(\n .authorAssociation == \"OWNER\" or\n .authorAssociation == \"MEMBER\" or\n .authorAssociation == \"COLLABORATOR\" or\n (.author.login | test(\"openhands|all-hands-bot\"; \"i\"))\n )] | last | { state: .state, reviewer: .author.login, body: .body[0:300] }'\n```\n\n- `APPROVED` → review passed.\n- `CHANGES_REQUESTED` → read the body and inline comments, fix code.\n- `COMMENTED` → may have actionable suggestions; read and decide.\n- No matching review yet → bot may still be running; wait and re-poll.\n\nInline review comments (when changes requested):\n\n```bash\ngh api \"repos/{owner}/{repo}/pulls/{number}/comments\" \\\n --jq '.[] | select(.user.login | test(\"openhands|all-hands-bot\"; \"i\"))\n | { path: .path, line: .line, body: .body[0:200] }'\n```\n\nOn a fresh iteration, existing pending review feedback should be checked\nimmediately — not only comments that arrive after monitoring starts.\nAlready-open review comments must not be missed.\n\n## Step 4 — Poll QA report (if present)\n\nSkip this step if the repo has no QA bot.\n\nQA reports are PR issue comments with a status line like `Status: PASS`.\n\n```bash\ngh api \"repos/{owner}/{repo}/issues/{number}/comments\" --paginate \\\n --jq '[.[] | select(\n (.user.login | test(\"openhands|all-hands-bot\"; \"i\")) and\n (.body | test(\"Status:\\\\s*(PASS|FAIL|PARTIAL)\"; \"i\"))\n )] | last | { author: .user.login, body: .body[0:500], url: .html_url }'\n```\n\n- `PASS` → QA passed.\n- `FAIL` → read details, fix code.\n- `PARTIAL` → some passed, some failed; read details.\n- No QA comment yet → bot may still be running; wait and re-poll.\n\n## Step 5 — Decide and act\n\nFor each present layer, check its status. If a layer is not present in the\nrepo, treat it as passing.\n\n- All present layers green on current SHA → done.\n- CI failed → fix code, or rerun if flaky (see below).\n- Review requested changes → read comments, fix, push.\n- QA failed/partial → read report, fix, push.\n- Anything still pending → sleep per polling cadence, re-poll.\n- PR closed/merged → stop.\n\n**Priority rule:** when both review feedback and flaky CI failures are present,\nprioritize review feedback first. A new commit will retrigger CI, so avoid\nrerunning flaky checks on the old SHA when you're about to push a review fix.\n\nAfter fixing, commit, push, AND re-request review:\n\n```bash\ngit add -A\ngit commit -m \"fix: address <CI failure | review feedback | QA failure>\"\ngit push origin HEAD\n\n# Re-request review from the bot so it reviews the new SHA:\ngh pr comment --body \"Addressed feedback in $(git rev-parse --short HEAD). Ready for another look.\"\ngh api -X POST \"repos/{owner}/{repo}/pulls/{number}/requested_reviewers\" \\\n -f 'reviewers[]=all-hands-bot'\n```\n\nThen go back to step 2. You are not done until the bot reviews the new\nSHA and all present layers pass.\n\n## CI failure classification\n\nUse `gh` commands to inspect failed runs before deciding to rerun:\n\n```bash\ngh run view <run-id> --json jobs,name,workflowName,conclusion,status,url,headSha\ngh run view <run-id> --log-failed\n```\n\n**Branch-related** (fix the code):\n- Compile/lint/typecheck failures in files you touched\n- Deterministic test failures in changed areas\n- Snapshot or static-analysis violations from your changes\n- Build config changes causing deterministic failures\n\n**Flaky / unrelated** (rerun the jobs):\n- Network/DNS/registry timeouts\n- Runner provisioning or startup failures\n- GitHub Actions infrastructure errors\n- Non-deterministic failures in code you didn't touch\n- Cloud/service rate limits or transient API outages\n\nIf classification is ambiguous, perform one manual diagnosis attempt (inspect\nlogs) before choosing rerun.\n\nRerun: `gh run rerun <run-id> --failed`\n\nRetry budget: at most 3 reruns per SHA. After that, treat as real.\n\nRead `references/heuristics.md` for a concise decision tree.\n\n## Review comment handling\n\nThe review polling in Step 3 surfaces feedback from trusted sources: human\nreviewers (OWNER/MEMBER/COLLABORATOR) and approved review bots (openhands,\nall-hands-bot, etc.). Ignore unrelated bot noise.\n\nReview items come from:\n- PR issue comments\n- Inline review comments\n- Review submissions (COMMENT / APPROVED / CHANGES_REQUESTED)\n\nWhen a comment is actionable and correct:\n1. Fix the code.\n2. Commit with `chore: address PR review feedback (#<n>)`.\n3. Push and continue the loop.\n4. Reply to the review thread referencing the commit SHA.\n5. Resolve the thread.\n\nWhen a comment is non-actionable, already addressed, or you disagree:\nreply briefly explaining why, then resolve the thread. Do not leave\nthreads dangling without a response.\n\nIf a review thread is already resolved in GitHub, ignore it unless new\nunresolved follow-up appears.\n\n### Replying to and resolving review threads\n\nEvery inline review comment creates a thread. After addressing a comment\n(or deciding it's non-actionable), you must:\n\n1. **Reply** to the thread so the reviewer can see how you addressed it:\n\n ```bash\n gh api \"repos/{owner}/{repo}/pulls/{number}/comments\" \\\n -F \"body=Fixed — <describe what you changed>\" \\\n -F \"in_reply_to=<comment_database_id>\"\n ```\n\n Use `-F` (not `-f`) for `in_reply_to` so it is sent as a number.\n\n2. **Resolve** the thread via GraphQL:\n\n ```bash\n gh api graphql \\\n -f query='mutation($id: ID!) {\n resolveReviewThread(input: { threadId: $id }) {\n thread { isResolved }\n }\n }' \\\n -f id=\"<thread_node_id>\"\n ```\n\nTo discover unresolved threads and their IDs:\n\n```bash\ngh api graphql -f query='\nquery($owner: String!, $repo: String!, $pr: Int!) {\n repository(owner: $owner, name: $repo) {\n pullRequest(number: $pr) {\n reviewThreads(last: 100) {\n nodes {\n id\n isResolved\n path\n line\n comments(first: 1) {\n nodes { databaseId author { login } body }\n }\n }\n }\n }\n }\n}' -f owner=\"{owner}\" -f repo=\"{repo}\" -F pr=\"{number}\" \\\n --jq '.data.repository.pullRequest.reviewThreads.nodes[]\n | select(.isResolved == false)'\n```\n\n**Rules:**\n- Reply to every thread, even nits. A brief \"Done\" or \"Kept as-is because…\" is fine.\n- Resolve threads you have addressed. Do not leave resolved-in-code threads\n showing as unresolved in the GitHub UI.\n- Before marking the PR ready, verify zero unresolved threads remain.\n\n### Requesting re-review\n\nIf the PR is green but blocked on review approval and you've addressed all\nfeedback, you can request another look — but only when the user explicitly\nasks, or after confirming with them (avoid spamming humans):\n\n1. Leave a brief PR comment summarizing what changed:\n ```bash\n gh pr comment <pr> --body \"Addressed the requested changes in <sha>. Could you take another look?\"\n ```\n Do NOT tag humans.\n\n2. Re-request reviewers via the GitHub API:\n ```bash\n gh api -X POST repos/{owner}/{repo}/pulls/{number}/requested_reviewers \\\n -f reviewers[]=<reviewer>\n ```\n\nPrefer requesting review only once per new head SHA. If the API returns an\nerror indicating reviewers are already requested, treat it as non-fatal.\n\n## Polling cadence\n\n- CI pending or failing: every 30–60 seconds.\n- CI green, waiting for review/QA: start at 60s, back off exponentially\n (60s → 2m → 4m → 8m → 16m → 32m), cap at 1 hour.\n- Reset to 60s whenever anything changes (new SHA, check status, review\n comment, mergeability change).\n- If CI stops being green (new commit, rerun, regression): return to 30–60s.\n- After pushing a fix: re-poll immediately.\n- If any poll shows the PR is merged or closed: stop immediately.\n\n## Stop conditions\n\nStop **only** when:\n- All present verification layers passed on current SHA and PR is mergeable.\n- PR merged or closed (stop as soon as a poll confirms this).\n- Flaky retry budget exhausted (3 reruns per SHA).\n- Blocked on something requiring human input (infra outage, permissions,\n ambiguity that cannot be resolved safely).\n\n**Not** a stop condition:\n- You pushed a fix. That's one iteration — keep going.\n- You addressed review comments. The bot still needs to review new code.\n- CI is green but review bot hasn't re-reviewed yet. Wait.\n- CI is still running/queued.\n- CI is green but mergeability is unknown/pending.\n- CI is green and mergeable, but waiting for possible new review comments\n per the green-state cadence.\n- PR is green but blocked on review approval (`REVIEW_REQUIRED`); continue\n polling and surface new review comments without asking for confirmation.\n\n## When done — mark PR ready\n\nOnce all present verification layers pass on the current SHA:\n\n1. Verify all review threads are resolved (zero unresolved remaining).\n2. Convert the draft PR to ready for review:\n\n```bash\ngh pr ready\n```\n\nOnly do this at the very end, after the loop exits successfully.\n\n## Git safety\n\n- Work only on the PR head branch.\n- No destructive git commands.\n- Do not switch branches unless necessary to recover context.\n- Check for unrelated uncommitted changes before editing. If present, ask user.\n- After every fix, commit and push, then re-poll.\n- A push is not a terminal outcome; continue the monitoring loop.\n\nCommit message defaults:\n- `fix: CI failure on PR #<n>`\n- `chore: address PR review feedback (#<n>)`\n\n## Output\n\nProvide concise progress updates during monitoring:\n\n- During long unchanged periods, avoid emitting a full update on every poll;\n summarize only status changes plus occasional heartbeat updates.\n- Treat push confirmations, intermediate CI snapshots, and review-action\n updates as progress updates only; do not emit the final summary unless a\n strict stop condition is met.\n- When CI first transitions to all green for the current SHA, emit a one-time\n celebratory update. Preferred style:\n `🚀 CI is all green! 33/33 passed. Still watching for review.`\n\nFinal summary should include:\n- Final PR SHA\n- CI status summary\n- Mergeability / conflict status\n- Fixes pushed\n- Flaky retry cycles used\n- Review threads resolved (count)\n- Remaining unresolved failures or review comments\n\n## References\n\n- Verification stack (layers, signals, retriggering): `references/verification.md`\n- CI/review heuristics and decision tree: `references/heuristics.md`"
|
|
249
|
+
"content": "# /iterate — Drive a PR to Merge-Ready\n\nIterate on a pull request until it passes all verification layers.\nYou push, poll, fix, and push again — the loop only ends when the PR is green\nor a blocker requires human help.\n\nNo scripts — you are the orchestration loop. Uses only standard `gh` CLI\ncommands that work on any GitHub repo.\n\nRequires: `gh` CLI authenticated with repo access, a PR branch.\nWindows PowerShell equivalents for Bash-only assignment, redirection, and quoting patterns in this skill are in `references/windows.md`.\n\n## Discover what the repo has\n\nNot every repo has all three verification layers. Before entering the loop,\ncheck which ones exist. Only poll layers that are actually set up.\n\n```bash\ngh workflow list --json name --jq '.[].name'\n```\n\n- **CI checks** — almost every repo has these. If `gh pr checks` returns results, CI is present.\n- **PR review bot** — look for a workflow named like \"PR Review\" or \"pr-review\" in the output above, or check for `.github/workflows/pr-review*.yml` in the repo. If it's not there, the repo doesn't have automated PR review. Skip step 3 entirely.\n- **QA bot** — look for a workflow named like \"QA\" or \"qa-changes\". If it's not there, the repo doesn't have automated QA. Skip step 4 entirely.\n\nA repo might have only CI. Or CI + review. Or all three. Your \"all passed\"\ncondition is: every *present* layer is green. Don't block waiting for layers\nthat don't exist.\n\n## The loop\n\n1. Push and ensure a draft PR exists.\n2. Poll each present verification layer.\n3. Decide: all passed? fix needed? wait?\n4. If fix needed — fix, refresh any `.pr/` artifacts affected (see below),\n commit, push, re-request review from bots, go to 2.\n5. If waiting — sleep per polling cadence, go to 2.\n6. If all present layers passed on the *current* SHA — mark PR ready, done.\n\nIMPORTANT: pushing a fix is NOT the end. After every fix+push you MUST\nre-request review from the review bot (if present) and go back to step 2.\nThe loop only ends when the verifiers pass on your latest SHA. Addressing\nfeedback and pushing a commit is just one iteration — the bot needs to\nreview the new code too.\n\nDo not stop to ask the user whether to continue polling; continue\nautonomously until a strict stop condition is met or the user interrupts.\n\n## Step 1 — Push and ensure PR exists (as draft)\n\nCreate the PR as a draft. This prevents repo automations (merge workflows,\nartifact cleanup, auto-merge) from triggering while you're still iterating.\nYou mark it ready only after all verification layers pass.\n\n```bash\ngit push origin HEAD\ngh pr create --fill --draft 2>/dev/null || true\ngh pr view --json number,url,headRefOid,isDraft --jq '\"\\(.number) \\(.url) \\(.headRefOid) draft=\\(.isDraft)\"'\n```\n\nIf the PR already exists and is not a draft, convert it:\n\n```bash\ngh pr ready --undo\n```\n\n## Step 2 — Poll CI checks\n\n```bash\ngh pr checks --json name,state,bucket --jq '\n { passed: [.[] | select(.bucket==\"pass\")] | length,\n failed: [.[] | select(.bucket==\"fail\")] | length,\n pending: [.[] | select(.bucket==\"pending\")] | length }'\n```\n\n- Zero failed, zero pending → CI green.\n- Any pending → wait and re-poll.\n- Any failed → diagnose (see \"CI failure classification\" below).\n\nTo inspect a failure:\n\n```bash\nSHA=$(gh pr view --json headRefOid --jq .headRefOid)\ngh run list --commit \"$SHA\" --status failure --json databaseId,name,conclusion \\\n --jq '.[] | \"\\(.databaseId)\\t\\(.name)\\t\\(.conclusion)\"'\ngh run view <run-id> --log-failed\n```\n\n## Step 3 — Poll PR review (if present)\n\nSkip this step if the repo has no review bot.\n\n```bash\ngh pr view --json reviews --jq '\n [.reviews[] | select(\n .authorAssociation == \"OWNER\" or\n .authorAssociation == \"MEMBER\" or\n .authorAssociation == \"COLLABORATOR\" or\n (.author.login | test(\"openhands|all-hands-bot\"; \"i\"))\n )] | last | { state: .state, reviewer: .author.login, body: .body[0:300] }'\n```\n\n- `APPROVED` → review passed.\n- `CHANGES_REQUESTED` → read the body and inline comments, fix code.\n- `COMMENTED` → may have actionable suggestions; read and decide.\n- No matching review yet → bot may still be running; wait and re-poll.\n\nInline review comments (when changes requested):\n\n```bash\ngh api \"repos/{owner}/{repo}/pulls/{number}/comments\" \\\n --jq '.[] | select(.user.login | test(\"openhands|all-hands-bot\"; \"i\"))\n | { path: .path, line: .line, body: .body[0:200] }'\n```\n\nOn a fresh iteration, existing pending review feedback should be checked\nimmediately — not only comments that arrive after monitoring starts.\nAlready-open review comments must not be missed.\n\n## Step 4 — Poll QA report (if present)\n\nSkip this step if the repo has no QA bot.\n\nQA reports are PR issue comments with a status line like `Status: PASS`.\n\n```bash\ngh api \"repos/{owner}/{repo}/issues/{number}/comments\" --paginate \\\n --jq '[.[] | select(\n (.user.login | test(\"openhands|all-hands-bot\"; \"i\")) and\n (.body | test(\"Status:\\\\s*(PASS|FAIL|PARTIAL)\"; \"i\"))\n )] | last | { author: .user.login, body: .body[0:500], url: .html_url }'\n```\n\n- `PASS` → QA passed.\n- `FAIL` → read details, fix code.\n- `PARTIAL` → some passed, some failed; read details.\n- No QA comment yet → bot may still be running; wait and re-poll.\n\n## Step 5 — Decide and act\n\nFor each present layer, check its status. If a layer is not present in the\nrepo, treat it as passing.\n\n- All present layers green on current SHA → done.\n- CI failed → fix code, or rerun if flaky (see below).\n- Review requested changes → read comments, fix, push.\n- QA failed/partial → read report, fix, push.\n- Anything still pending → sleep per polling cadence, re-poll.\n- PR closed/merged → stop.\n\n**Priority rule:** when both review feedback and flaky CI failures are present,\nprioritize review feedback first. A new commit will retrigger CI, so avoid\nrerunning flaky checks on the old SHA when you're about to push a review fix.\n\nAfter fixing, commit, push, AND re-request review:\n\n```bash\ngit add -A\ngit commit -m \"fix: address <CI failure | review feedback | QA failure>\"\ngit push origin HEAD\n\n# Re-request review from the bot so it reviews the new SHA:\ngh pr comment --body \"Addressed feedback in $(git rev-parse --short HEAD). Ready for another look.\"\ngh api -X POST \"repos/{owner}/{repo}/pulls/{number}/requested_reviewers\" \\\n -f 'reviewers[]=all-hands-bot'\n```\n\nThen go back to step 2. You are not done until the bot reviews the new\nSHA and all present layers pass.\n\n## CI failure classification\n\nUse `gh` commands to inspect failed runs before deciding to rerun:\n\n```bash\ngh run view <run-id> --json jobs,name,workflowName,conclusion,status,url,headSha\ngh run view <run-id> --log-failed\n```\n\n**Branch-related** (fix the code):\n- Compile/lint/typecheck failures in files you touched\n- Deterministic test failures in changed areas\n- Snapshot or static-analysis violations from your changes\n- Build config changes causing deterministic failures\n\n**Flaky / unrelated** (rerun the jobs):\n- Network/DNS/registry timeouts\n- Runner provisioning or startup failures\n- GitHub Actions infrastructure errors\n- Non-deterministic failures in code you didn't touch\n- Cloud/service rate limits or transient API outages\n\nIf classification is ambiguous, perform one manual diagnosis attempt (inspect\nlogs) before choosing rerun.\n\nRerun: `gh run rerun <run-id> --failed`\n\nRetry budget: at most 3 reruns per SHA. After that, treat as real.\n\nRead `references/heuristics.md` for a concise decision tree.\n\n## Review comment handling\n\nThe review polling in Step 3 surfaces feedback from trusted sources: human\nreviewers (OWNER/MEMBER/COLLABORATOR) and approved review bots (openhands,\nall-hands-bot, etc.). Ignore unrelated bot noise.\n\nReview items come from:\n- PR issue comments\n- Inline review comments\n- Review submissions (COMMENT / APPROVED / CHANGES_REQUESTED)\n\nWhen a comment is actionable and correct:\n1. Fix the code.\n2. Commit with `chore: address PR review feedback (#<n>)`.\n3. Push and continue the loop.\n4. Reply to the review thread referencing the commit SHA.\n5. Resolve the thread.\n\nWhen a comment is non-actionable, already addressed, or you disagree:\nreply briefly explaining why, then resolve the thread. Do not leave\nthreads dangling without a response.\n\nIf a review thread is already resolved in GitHub, ignore it unless new\nunresolved follow-up appears.\n\n### Replying to and resolving review threads\n\nEvery inline review comment creates a thread. After addressing a comment\n(or deciding it's non-actionable), you must:\n\n1. **Reply** to the thread so the reviewer can see how you addressed it:\n\n ```bash\n gh api \"repos/{owner}/{repo}/pulls/{number}/comments\" \\\n -F \"body=Fixed — <describe what you changed>\" \\\n -F \"in_reply_to=<comment_database_id>\"\n ```\n\n Use `-F` (not `-f`) for `in_reply_to` so it is sent as a number.\n\n2. **Resolve** the thread via GraphQL:\n\n ```bash\n gh api graphql \\\n -f query='mutation($id: ID!) {\n resolveReviewThread(input: { threadId: $id }) {\n thread { isResolved }\n }\n }' \\\n -f id=\"<thread_node_id>\"\n ```\n\nTo discover unresolved threads and their IDs:\n\n```bash\ngh api graphql -f query='\nquery($owner: String!, $repo: String!, $pr: Int!) {\n repository(owner: $owner, name: $repo) {\n pullRequest(number: $pr) {\n reviewThreads(last: 100) {\n nodes {\n id\n isResolved\n path\n line\n comments(first: 1) {\n nodes { databaseId author { login } body }\n }\n }\n }\n }\n }\n}' -f owner=\"{owner}\" -f repo=\"{repo}\" -F pr=\"{number}\" \\\n --jq '.data.repository.pullRequest.reviewThreads.nodes[]\n | select(.isResolved == false)'\n```\n\n**Rules:**\n- Reply to every thread, even nits. A brief \"Done\" or \"Kept as-is because…\" is fine.\n- Resolve threads you have addressed. Do not leave resolved-in-code threads\n showing as unresolved in the GitHub UI.\n- Before marking the PR ready, verify zero unresolved threads remain.\n\n### Requesting re-review\n\nIf the PR is green but blocked on review approval and you've addressed all\nfeedback, you can request another look — but only when the user explicitly\nasks, or after confirming with them (avoid spamming humans):\n\n1. Leave a brief PR comment summarizing what changed:\n ```bash\n gh pr comment <pr> --body \"Addressed the requested changes in <sha>. Could you take another look?\"\n ```\n Do NOT tag humans.\n\n2. Re-request reviewers via the GitHub API:\n ```bash\n gh api -X POST repos/{owner}/{repo}/pulls/{number}/requested_reviewers \\\n -f reviewers[]=<reviewer>\n ```\n\nPrefer requesting review only once per new head SHA. If the API returns an\nerror indicating reviewers are already requested, treat it as non-fatal.\n\n## Polling cadence\n\n- CI pending or failing: every 30–60 seconds.\n- CI green, waiting for review/QA: start at 60s, back off exponentially\n (60s → 2m → 4m → 8m → 16m → 32m), cap at 1 hour.\n- Reset to 60s whenever anything changes (new SHA, check status, review\n comment, mergeability change).\n- If CI stops being green (new commit, rerun, regression): return to 30–60s.\n- After pushing a fix: re-poll immediately.\n- If any poll shows the PR is merged or closed: stop immediately.\n\n## Stop conditions\n\nStop **only** when:\n- All present verification layers passed on current SHA and PR is mergeable.\n- PR merged or closed (stop as soon as a poll confirms this).\n- Flaky retry budget exhausted (3 reruns per SHA).\n- Blocked on something requiring human input (infra outage, permissions,\n ambiguity that cannot be resolved safely).\n\n**Not** a stop condition:\n- You pushed a fix. That's one iteration — keep going.\n- You addressed review comments. The bot still needs to review new code.\n- CI is green but review bot hasn't re-reviewed yet. Wait.\n- CI is still running/queued.\n- CI is green but mergeability is unknown/pending.\n- CI is green and mergeable, but waiting for possible new review comments\n per the green-state cadence.\n- PR is green but blocked on review approval (`REVIEW_REQUIRED`); continue\n polling and surface new review comments without asking for confirmation.\n\n## Keep `.pr/` artifacts fresh\n\nBy convention, a PR may carry generated artifacts (diagrams, reports, generated\ndocs, fixtures) in a `.pr/` folder. These are derived from the code, so they go\nstale when you push fixes.\n\nAfter each fix — and before marking the PR ready — check `.pr/`:\n\n1. If there's no `.pr/` folder or it's empty, skip this entirely.\n2. For each artifact, work out how it was generated (a script, a documented\n command, a comment in the file, or the PR/commit history).\n3. If you can figure out how — and the code it derives from changed — regenerate\n it and commit the update, so the artifact matches the latest code.\n4. If you can't tell how it was generated, leave it alone. Don't guess.\n\nThe rule is simple: if you know how an artifact was made and the code moved on,\nkeep it up to date; otherwise don't touch it.\n\n## When done — mark PR ready\n\nOnce all present verification layers pass on the current SHA:\n\n1. Verify all review threads are resolved (zero unresolved remaining).\n2. Ensure `.pr/` artifacts are up to date with the latest code (see above).\n3. Convert the draft PR to ready for review:\n\n```bash\ngh pr ready\n```\n\nOnly do this at the very end, after the loop exits successfully.\n\n## Git safety\n\n- Work only on the PR head branch.\n- No destructive git commands.\n- Do not switch branches unless necessary to recover context.\n- Check for unrelated uncommitted changes before editing. If present, ask user.\n- After every fix, commit and push, then re-poll.\n- A push is not a terminal outcome; continue the monitoring loop.\n\nCommit message defaults:\n- `fix: CI failure on PR #<n>`\n- `chore: address PR review feedback (#<n>)`\n\n## Output\n\nProvide concise progress updates during monitoring:\n\n- During long unchanged periods, avoid emitting a full update on every poll;\n summarize only status changes plus occasional heartbeat updates.\n- Treat push confirmations, intermediate CI snapshots, and review-action\n updates as progress updates only; do not emit the final summary unless a\n strict stop condition is met.\n- When CI first transitions to all green for the current SHA, emit a one-time\n celebratory update. Preferred style:\n `🚀 CI is all green! 33/33 passed. Still watching for review.`\n\nFinal summary should include:\n- Final PR SHA\n- CI status summary\n- Mergeability / conflict status\n- Fixes pushed\n- Flaky retry cycles used\n- Review threads resolved (count)\n- Remaining unresolved failures or review comments\n\n## References\n\n- Verification stack (layers, signals, retriggering): `references/verification.md`\n- CI/review heuristics and decision tree: `references/heuristics.md`"
|
|
250
250
|
},
|
|
251
251
|
{
|
|
252
252
|
"name": "jira-issue-to-pr",
|
|
@@ -489,6 +489,12 @@ export const SKILLS_CATALOG = [
|
|
|
489
489
|
],
|
|
490
490
|
"content": "# Swift Installation Guide for Debian Linux\n\nThis document provides instructions for installing Swift on Debian 12 (Bookworm).\n\n> This setup is intended for non-UI development tasks on Swift on Linux.\n> On Windows, run these Debian commands inside WSL2 or a Linux container. For native Windows Swift, use the Windows toolchain from Swift.org instead.\n\n## Prerequisites\n\nBefore installing Swift, you need to install the required dependencies for your system. You can find the most up-to-date list of dependencies for your specific Linux distribution and version at the [Swift.org tarball installation guide](https://www.swift.org/install/linux/tarball/).\n\nFOR EXAMPLE, the dependencies you may need to install for Debian 12 could be:\n\n```bash\nsudo apt-get update\nsudo apt-get install -y \\\n binutils-gold \\\n gcc \\\n git \\\n libcurl4-openssl-dev \\\n libedit-dev \\\n libicu-dev \\\n libncurses-dev \\\n libpython3-dev \\\n libsqlite3-dev \\\n libxml2-dev \\\n pkg-config \\\n tzdata \\\n uuid-dev\n```\n\n## Download and Install Swift\n\n1. Find the latest Swift version for Debian:\n\n Go to the [Swift.org download page](https://www.swift.org/download/) to find the latest Swift version compatible with Debian 12 (Bookworm).\n\n Look for a tarball named something like `swift-<VERSION>-RELEASE-debian12.tar.gz` (e.g., `swift-6.0.3-RELEASE-debian12.tar.gz`).\n\n The URL pattern is typically:\n ```\n https://download.swift.org/swift-<VERSION>-release/debian12/swift-<VERSION>-RELEASE/swift-<VERSION>-RELEASE-debian12.tar.gz\n ```\n\n Where `<VERSION>` is the Swift version number (e.g., `6.0.3`).\n\n2. Download the Swift binary for Debian 12:\n\n```bash\ncd /workspace\nwget https://download.swift.org/swift-6.0.3-release/debian12/swift-6.0.3-RELEASE/swift-6.0.3-RELEASE-debian12.tar.gz\n```\n\n3. Extract the archive:\n\n> **Note**: Make sure to install Swift in the `/workspace` directory, but outside the git repository to avoid committing the Swift binaries.\n\n4. Add Swift to your PATH by adding the following line to your `~/.bashrc` file:\n\n```bash\necho 'export PATH=/workspace/swift-6.0.3-RELEASE-debian12/usr/bin:$PATH' >> ~/.bashrc\nsource ~/.bashrc\n```\n\n> **Note**: Make sure to update the version number in the PATH to match the version you downloaded.\n\n## Verify Installation\n\nVerify that Swift is correctly installed by running:\n\n```bash\nswift --version\n```"
|
|
491
491
|
},
|
|
492
|
+
{
|
|
493
|
+
"name": "technical-writing",
|
|
494
|
+
"description": "Guides technical explanations toward flowing, direct, conversational prose. This skill should be used for engineering chat, design discussion, architecture analysis, code-review explanations, and technical recommendations that should be concise without becoming fragmented or vague.",
|
|
495
|
+
"triggers": [],
|
|
496
|
+
"content": "# Technical Writing\n\nWrite the way a sharp senior engineer speaks in chat: direct, conversational, and confident. Favor flowing technical prose over report language, slide-deck fragments, or documentation boilerplate.\n\nFollow the user's requested format when they explicitly ask for formal documentation, a report, or slides. Otherwise, apply these rules to technical explanations, design feedback, architecture discussion, issue and pull-request replies, and recommendations.\n\n## Lead with the answer\n\nOpen with the verdict and its central caveat in one or two plain sentences. Do not use a bold heading as a substitute for the answer.\n\nMatch the length to the question and err short:\n\n- A yes/no or confirmation question usually needs 2 to 4 sentences.\n- A choice between alternatives usually needs a few paragraphs.\n- A genuinely multi-part design question may need a longer structured answer.\n\nBefore sending, remove any paragraph that does not change what the reader understands, decides, or does next. Cut unrequested background, restatements of the problem, and generic advice the reader already knows.\n\n## Complete the argument\n\nEvery paragraph and every bullet should carry a complete argument: claim, mechanism, and consequence together. Do not leave the reader to infer why a fact matters.\n\nWeak:\n\n> MoR increases scan cost, latency, and metadata overhead.\n\nBetter:\n\n> MoR is cheap to write, but every read has to reconcile delete files against data files, so scans get slower and less reliable until something compacts them - and now that compaction is part of the system you operate.\n\n## Match the form to the content\n\nVary the structure because different kinds of content need different forms:\n\n- Use short bold headings on their own line for distinct sections or comparison axes, such as cost versus operations.\n- Use a numbered list for a genuine sequence, diagnostic procedure, or ranked set of hypotheses. Start each item with a short bold lead and continue in full sentences.\n- Use plain bullets for parallel, enumerable facts.\n- Use paragraphs for reasoning, causality, and narrative.\n\nShortening does not mean flattening a useful structure into uniform paragraphs. Keep the structure and cut low-value sentences within it.\n\n## Keep connected reasoning together\n\nDo not shred connected reasoning into bullets. If the ideas connect with \"because,\" \"so,\" or \"but,\" those connections are the explanation and belong in prose.\n\nNever write a bold label followed by a clipped noun phrase as if it were a complete bullet.\n\n## Sound conversational, not dramatic\n\nUse contractions when they fit. Prefer \"so\" and \"but\" to \"therefore\" and \"however.\"\n\nState the claim directly. Avoid scaffolding such as:\n\n- \"It is worth noting\"\n- \"Importantly\"\n- \"The deciding mechanism is\"\n\nAvoid theatrical labels and hype adjectives. Explain the concrete cost instead of calling something \"the poison,\" \"the trap,\" \"brutally expensive,\" or \"the killer feature.\"\n\nLet sentences breathe. Do not create drama with a sequence of short, staccato sentences.\n\nDo not use setup phrases that delay the point, including:\n\n- \"here's the thing\"\n- \"here's the kicker\"\n- \"the part nobody warns you about\"\n- \"what nobody tells you\"\n- \"the dirty secret\"\n- \"the truth is\"\n- \"plot twist\"\n- \"the reality is\"\n- \"here's what's wild\"\n\nDo not use contrastive \"not just X, but Y\" constructions. State the full point directly instead of negating a weaker framing first.\n\n## Cut without compressing\n\nShortness comes from removing low-value content, not from clipping sentences. Keep articles, verbs, and the words needed to express the mechanism clearly. Replace strings of abstract nouns with a concrete actor and action.\n\n## End only when a conclusion helps\n\nAdd a bottom line only when the answer weighs a real decision. State the recommendation and the condition that would change it in one plain sentence.\n\nShort factual and confirmation answers should simply end.\n\n## Final pass\n\nBefore sending, check:\n\n1. Does the first sentence give the answer?\n2. Is the central caveat next to the answer?\n3. Does every paragraph or bullet explain why its claim matters?\n4. Does the structure match the content?\n5. Did connected reasoning stay in prose?\n6. Can any paragraph be removed without changing the reader's next step?\n7. Did any dramatic setup, clipped phrasing, or fake contrast survive?\n8. Is a bottom line present only when the reader has a real decision to make?\n\n## Source\n\nAdapted from the public [Writing style](https://prose.ami.rip/STYLE.md) agent instructions at prose.ami.rip."
|
|
497
|
+
},
|
|
492
498
|
{
|
|
493
499
|
"name": "theme-factory",
|
|
494
500
|
"description": "Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc. There are 10 pre-set themes with colors/fonts that you can apply to any artifact that has been creating, or can generate a new theme on-the-fly.",
|
|
@@ -15,7 +15,10 @@ or a blocker requires human help.
|
|
|
15
15
|
2. **Evaluate** what to do: fix CI failures, address review feedback, retry
|
|
16
16
|
flaky checks, or wait.
|
|
17
17
|
3. **Fix and push** — then loop back to step 1.
|
|
18
|
-
4. **
|
|
18
|
+
4. **Refresh `.pr/` artifacts** — if the PR carries generated artifacts in a
|
|
19
|
+
`.pr/` folder and the agent can tell how they were made, it regenerates any
|
|
20
|
+
that the code changes made stale.
|
|
21
|
+
5. **Stop** when the PR is merge-ready, closed, or blocked.
|
|
19
22
|
|
|
20
23
|
No scripts — the agent is the orchestration loop, using only standard `gh` CLI.
|
|
21
24
|
|
|
@@ -45,7 +45,8 @@ that don't exist.
|
|
|
45
45
|
1. Push and ensure a draft PR exists.
|
|
46
46
|
2. Poll each present verification layer.
|
|
47
47
|
3. Decide: all passed? fix needed? wait?
|
|
48
|
-
4. If fix needed — fix,
|
|
48
|
+
4. If fix needed — fix, refresh any `.pr/` artifacts affected (see below),
|
|
49
|
+
commit, push, re-request review from bots, go to 2.
|
|
49
50
|
5. If waiting — sleep per polling cadence, go to 2.
|
|
50
51
|
6. If all present layers passed on the *current* SHA — mark PR ready, done.
|
|
51
52
|
|
|
@@ -346,12 +347,31 @@ Stop **only** when:
|
|
|
346
347
|
- PR is green but blocked on review approval (`REVIEW_REQUIRED`); continue
|
|
347
348
|
polling and surface new review comments without asking for confirmation.
|
|
348
349
|
|
|
350
|
+
## Keep `.pr/` artifacts fresh
|
|
351
|
+
|
|
352
|
+
By convention, a PR may carry generated artifacts (diagrams, reports, generated
|
|
353
|
+
docs, fixtures) in a `.pr/` folder. These are derived from the code, so they go
|
|
354
|
+
stale when you push fixes.
|
|
355
|
+
|
|
356
|
+
After each fix — and before marking the PR ready — check `.pr/`:
|
|
357
|
+
|
|
358
|
+
1. If there's no `.pr/` folder or it's empty, skip this entirely.
|
|
359
|
+
2. For each artifact, work out how it was generated (a script, a documented
|
|
360
|
+
command, a comment in the file, or the PR/commit history).
|
|
361
|
+
3. If you can figure out how — and the code it derives from changed — regenerate
|
|
362
|
+
it and commit the update, so the artifact matches the latest code.
|
|
363
|
+
4. If you can't tell how it was generated, leave it alone. Don't guess.
|
|
364
|
+
|
|
365
|
+
The rule is simple: if you know how an artifact was made and the code moved on,
|
|
366
|
+
keep it up to date; otherwise don't touch it.
|
|
367
|
+
|
|
349
368
|
## When done — mark PR ready
|
|
350
369
|
|
|
351
370
|
Once all present verification layers pass on the current SHA:
|
|
352
371
|
|
|
353
372
|
1. Verify all review threads are resolved (zero unresolved remaining).
|
|
354
|
-
2.
|
|
373
|
+
2. Ensure `.pr/` artifacts are up to date with the latest code (see above).
|
|
374
|
+
3. Convert the draft PR to ready for review:
|
|
355
375
|
|
|
356
376
|
```bash
|
|
357
377
|
gh pr ready
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "technical-writing",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Write and revise technical explanations in flowing, direct, conversational prose that stays concise without becoming fragmented or vague.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "OpenHands",
|
|
7
|
+
"email": "contact@all-hands.dev"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/OpenHands/extensions",
|
|
10
|
+
"repository": "https://github.com/OpenHands/extensions",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"technical-writing"
|
|
14
|
+
]
|
|
15
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Technical writing skill
|
|
2
|
+
|
|
3
|
+
This skill helps OpenHands write and revise technical explanations in direct, conversational prose without losing the reasoning that makes them useful.
|
|
4
|
+
|
|
5
|
+
Use it for:
|
|
6
|
+
|
|
7
|
+
- engineering chat and technical recommendations
|
|
8
|
+
- design and architecture discussions
|
|
9
|
+
- code-review, issue, and pull-request explanations
|
|
10
|
+
- editing technical prose that is too long, fragmented, dramatic, or vague
|
|
11
|
+
|
|
12
|
+
It complements `plain-english-content`: that skill focuses on accessible public content and GOV.UK-style formatting, while this one focuses on complete technical arguments in engineering conversations.
|
|
13
|
+
|
|
14
|
+
The skill is adapted from the public [Writing style](https://prose.ami.rip/STYLE.md) agent instructions at prose.ami.rip.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: technical-writing
|
|
3
|
+
description: Guides technical explanations toward flowing, direct, conversational prose. This skill should be used for engineering chat, design discussion, architecture analysis, code-review explanations, and technical recommendations that should be concise without becoming fragmented or vague.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Technical Writing
|
|
7
|
+
|
|
8
|
+
Write the way a sharp senior engineer speaks in chat: direct, conversational, and confident. Favor flowing technical prose over report language, slide-deck fragments, or documentation boilerplate.
|
|
9
|
+
|
|
10
|
+
Follow the user's requested format when they explicitly ask for formal documentation, a report, or slides. Otherwise, apply these rules to technical explanations, design feedback, architecture discussion, issue and pull-request replies, and recommendations.
|
|
11
|
+
|
|
12
|
+
## Lead with the answer
|
|
13
|
+
|
|
14
|
+
Open with the verdict and its central caveat in one or two plain sentences. Do not use a bold heading as a substitute for the answer.
|
|
15
|
+
|
|
16
|
+
Match the length to the question and err short:
|
|
17
|
+
|
|
18
|
+
- A yes/no or confirmation question usually needs 2 to 4 sentences.
|
|
19
|
+
- A choice between alternatives usually needs a few paragraphs.
|
|
20
|
+
- A genuinely multi-part design question may need a longer structured answer.
|
|
21
|
+
|
|
22
|
+
Before sending, remove any paragraph that does not change what the reader understands, decides, or does next. Cut unrequested background, restatements of the problem, and generic advice the reader already knows.
|
|
23
|
+
|
|
24
|
+
## Complete the argument
|
|
25
|
+
|
|
26
|
+
Every paragraph and every bullet should carry a complete argument: claim, mechanism, and consequence together. Do not leave the reader to infer why a fact matters.
|
|
27
|
+
|
|
28
|
+
Weak:
|
|
29
|
+
|
|
30
|
+
> MoR increases scan cost, latency, and metadata overhead.
|
|
31
|
+
|
|
32
|
+
Better:
|
|
33
|
+
|
|
34
|
+
> MoR is cheap to write, but every read has to reconcile delete files against data files, so scans get slower and less reliable until something compacts them - and now that compaction is part of the system you operate.
|
|
35
|
+
|
|
36
|
+
## Match the form to the content
|
|
37
|
+
|
|
38
|
+
Vary the structure because different kinds of content need different forms:
|
|
39
|
+
|
|
40
|
+
- Use short bold headings on their own line for distinct sections or comparison axes, such as cost versus operations.
|
|
41
|
+
- Use a numbered list for a genuine sequence, diagnostic procedure, or ranked set of hypotheses. Start each item with a short bold lead and continue in full sentences.
|
|
42
|
+
- Use plain bullets for parallel, enumerable facts.
|
|
43
|
+
- Use paragraphs for reasoning, causality, and narrative.
|
|
44
|
+
|
|
45
|
+
Shortening does not mean flattening a useful structure into uniform paragraphs. Keep the structure and cut low-value sentences within it.
|
|
46
|
+
|
|
47
|
+
## Keep connected reasoning together
|
|
48
|
+
|
|
49
|
+
Do not shred connected reasoning into bullets. If the ideas connect with "because," "so," or "but," those connections are the explanation and belong in prose.
|
|
50
|
+
|
|
51
|
+
Never write a bold label followed by a clipped noun phrase as if it were a complete bullet.
|
|
52
|
+
|
|
53
|
+
## Sound conversational, not dramatic
|
|
54
|
+
|
|
55
|
+
Use contractions when they fit. Prefer "so" and "but" to "therefore" and "however."
|
|
56
|
+
|
|
57
|
+
State the claim directly. Avoid scaffolding such as:
|
|
58
|
+
|
|
59
|
+
- "It is worth noting"
|
|
60
|
+
- "Importantly"
|
|
61
|
+
- "The deciding mechanism is"
|
|
62
|
+
|
|
63
|
+
Avoid theatrical labels and hype adjectives. Explain the concrete cost instead of calling something "the poison," "the trap," "brutally expensive," or "the killer feature."
|
|
64
|
+
|
|
65
|
+
Let sentences breathe. Do not create drama with a sequence of short, staccato sentences.
|
|
66
|
+
|
|
67
|
+
Do not use setup phrases that delay the point, including:
|
|
68
|
+
|
|
69
|
+
- "here's the thing"
|
|
70
|
+
- "here's the kicker"
|
|
71
|
+
- "the part nobody warns you about"
|
|
72
|
+
- "what nobody tells you"
|
|
73
|
+
- "the dirty secret"
|
|
74
|
+
- "the truth is"
|
|
75
|
+
- "plot twist"
|
|
76
|
+
- "the reality is"
|
|
77
|
+
- "here's what's wild"
|
|
78
|
+
|
|
79
|
+
Do not use contrastive "not just X, but Y" constructions. State the full point directly instead of negating a weaker framing first.
|
|
80
|
+
|
|
81
|
+
## Cut without compressing
|
|
82
|
+
|
|
83
|
+
Shortness comes from removing low-value content, not from clipping sentences. Keep articles, verbs, and the words needed to express the mechanism clearly. Replace strings of abstract nouns with a concrete actor and action.
|
|
84
|
+
|
|
85
|
+
## End only when a conclusion helps
|
|
86
|
+
|
|
87
|
+
Add a bottom line only when the answer weighs a real decision. State the recommendation and the condition that would change it in one plain sentence.
|
|
88
|
+
|
|
89
|
+
Short factual and confirmation answers should simply end.
|
|
90
|
+
|
|
91
|
+
## Final pass
|
|
92
|
+
|
|
93
|
+
Before sending, check:
|
|
94
|
+
|
|
95
|
+
1. Does the first sentence give the answer?
|
|
96
|
+
2. Is the central caveat next to the answer?
|
|
97
|
+
3. Does every paragraph or bullet explain why its claim matters?
|
|
98
|
+
4. Does the structure match the content?
|
|
99
|
+
5. Did connected reasoning stay in prose?
|
|
100
|
+
6. Can any paragraph be removed without changing the reader's next step?
|
|
101
|
+
7. Did any dramatic setup, clipped phrasing, or fake contrast survive?
|
|
102
|
+
8. Is a bottom line present only when the reader has a real decision to make?
|
|
103
|
+
|
|
104
|
+
## Source
|
|
105
|
+
|
|
106
|
+
Adapted from the public [Writing style](https://prose.ami.rip/STYLE.md) agent instructions at prose.ami.rip.
|
|
@@ -156,3 +156,70 @@ def test_http_connectors_have_openapi_url():
|
|
|
156
156
|
if not url or not url.startswith("https://"):
|
|
157
157
|
offenders.append(f"{entry['id']}.{option['id']}")
|
|
158
158
|
assert not offenders, f"HTTP options missing openApiUrl: {offenders}"
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def _installable_option(entry):
|
|
162
|
+
"""First option a local Agent Canvas install can use — the GUI filters out
|
|
163
|
+
provider-OAuth options (isLocallyInstallableMcpOption in agent-canvas)."""
|
|
164
|
+
for option in entry["connectionOptions"]:
|
|
165
|
+
if option["auth"]["strategy"] != "oauth2":
|
|
166
|
+
return option
|
|
167
|
+
raise AssertionError(f"{entry['id']}: no locally installable connection option")
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def test_daily_workflow_entries_are_locally_installable():
|
|
171
|
+
"""GitHub, Linear, and Slack back the daily-workflow release (OSS-5193):
|
|
172
|
+
each must keep a non-OAuth MCP option that local Agent Canvas can install,
|
|
173
|
+
with the connectivity details its Test-connection probe relies on."""
|
|
174
|
+
entries = {e["id"]: e for e in load_catalog_entries("integrations/catalog")}
|
|
175
|
+
|
|
176
|
+
for entry_id, option_id in (("github", "api"), ("linear", "api-key"), ("slack", "api")):
|
|
177
|
+
entry = entries[entry_id]
|
|
178
|
+
assert entry["docsUrl"].startswith("https://")
|
|
179
|
+
option = _installable_option(entry)
|
|
180
|
+
assert option["id"] == option_id
|
|
181
|
+
assert option["provider"] == "mcp"
|
|
182
|
+
|
|
183
|
+
github = _installable_option(entries["github"])
|
|
184
|
+
assert github["transport"]["kind"] == "shttp"
|
|
185
|
+
assert github["transport"]["url"] == "https://api.githubcopilot.com/mcp/"
|
|
186
|
+
assert github["auth"]["credentialSecretName"] == "GITHUB_PERSONAL_ACCESS_TOKEN"
|
|
187
|
+
|
|
188
|
+
linear = _installable_option(entries["linear"])
|
|
189
|
+
assert linear["transport"]["kind"] == "shttp"
|
|
190
|
+
assert linear["transport"]["url"] == "https://mcp.linear.app/mcp"
|
|
191
|
+
|
|
192
|
+
slack = _installable_option(entries["slack"])
|
|
193
|
+
assert slack["transport"]["kind"] == "stdio"
|
|
194
|
+
assert slack["transport"]["command"] == "npx"
|
|
195
|
+
required_env = {
|
|
196
|
+
field["key"] for field in slack["transport"]["envFields"] if field.get("required")
|
|
197
|
+
}
|
|
198
|
+
assert required_env == {"SLACK_TEAM_ID", "SLACK_BOT_TOKEN"}
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def test_daily_workflow_entries_state_scopes_and_setup_paths():
|
|
202
|
+
"""The locally installable options must state the required scopes and link a
|
|
203
|
+
public setup path (OSS-5193). The OAuth options' scope lists never reach a
|
|
204
|
+
local Canvas install, so this metadata has to live on these options."""
|
|
205
|
+
entries = {e["id"]: e for e in load_catalog_entries("integrations/catalog")}
|
|
206
|
+
|
|
207
|
+
github_help = _installable_option(entries["github"])["auth"]["credentialHelp"]
|
|
208
|
+
assert re.search(r"\brepo\b", github_help)
|
|
209
|
+
assert "read:user" in github_help
|
|
210
|
+
assert re.search(r"\[.+?\]\(https://github\.com/settings[^)]*\)", github_help)
|
|
211
|
+
|
|
212
|
+
linear_help = _installable_option(entries["linear"])["auth"]["credentialHelp"]
|
|
213
|
+
assert "Bearer" in linear_help
|
|
214
|
+
assert re.search(r"\[.+?\]\(https://linear\.app/settings[^)]*\)", linear_help)
|
|
215
|
+
|
|
216
|
+
slack_hint = entries["slack"]["installHint"]
|
|
217
|
+
for scope in (
|
|
218
|
+
"channels:history",
|
|
219
|
+
"channels:read",
|
|
220
|
+
"chat:write",
|
|
221
|
+
"reactions:write",
|
|
222
|
+
"users:read",
|
|
223
|
+
"users.profile:read",
|
|
224
|
+
):
|
|
225
|
+
assert scope in slack_hint, f"slack installHint missing bot scope {scope}"
|