@openhands/extensions 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/.release-please-manifest.json +1 -1
  2. package/README.md +3 -2
  3. package/automations/catalog/jira-issue-to-pr.json +14 -0
  4. package/automations/index.js +2 -0
  5. package/integrations/catalog/atlassian.json +78 -3
  6. package/integrations/catalog/datadog.json +33 -2
  7. package/integrations/catalog/superhuman-mail.json +36 -0
  8. package/integrations/catalog-index.js +45 -43
  9. package/marketplaces/openhands-extensions.json +10 -0
  10. package/package.json +1 -1
  11. package/plugins/cobol-modernization/skills/build-setup/SKILL.md +1 -0
  12. package/plugins/cobol-modernization/skills/cobol-modernization/SKILL.md +9 -0
  13. package/plugins/migration-scoring/skills/migration-scoring/SKILL.md +11 -0
  14. package/plugins/onboarding/skills/agent-readiness-report/SKILL.md +2 -0
  15. package/plugins/openhands/SKILL.md +7 -0
  16. package/plugins/release-notes/SKILL.md +9 -0
  17. package/pyproject.toml +1 -1
  18. package/python/openhands_extensions/_version.py +1 -1
  19. package/scripts/build-skills-catalog.mjs +1 -1
  20. package/skills/add-skill/SKILL.md +2 -0
  21. package/skills/azure-devops/SKILL.md +12 -1
  22. package/skills/bitbucket-cloud/SKILL.md +11 -0
  23. package/skills/code-review/SKILL.md +1 -0
  24. package/skills/datadog/SKILL.md +3 -1
  25. package/skills/datadog/references/windows.md +45 -0
  26. package/skills/discord/SKILL.md +2 -0
  27. package/skills/docker/SKILL.md +5 -1
  28. package/skills/github/SKILL.md +3 -1
  29. package/skills/github/references/windows.md +48 -0
  30. package/skills/github-pr-review/SKILL.md +1 -0
  31. package/skills/github-pr-review/references/windows.md +47 -0
  32. package/skills/github-pr-reviewer/SKILL.md +1 -0
  33. package/skills/github-pr-reviewer/references/windows.md +61 -0
  34. package/skills/github-repo-monitor/SKILL.md +1 -0
  35. package/skills/github-repo-monitor/references/windows.md +61 -0
  36. package/skills/gitlab/SKILL.md +3 -1
  37. package/skills/incident-retrospective/SKILL.md +2 -0
  38. package/skills/index.js +36 -30
  39. package/skills/iterate/SKILL.md +1 -0
  40. package/skills/iterate/references/windows.md +41 -0
  41. package/skills/jira-issue-to-pr/.plugin/plugin.json +19 -0
  42. package/skills/jira-issue-to-pr/README.md +56 -0
  43. package/skills/jira-issue-to-pr/SKILL.md +216 -0
  44. package/skills/jira-issue-to-pr/references/setup.md +170 -0
  45. package/skills/jira-issue-to-pr/scripts/main.py +341 -0
  46. package/skills/jupyter/SKILL.md +7 -1
  47. package/skills/kubernetes/SKILL.md +2 -1
  48. package/skills/kubernetes/references/windows.md +38 -0
  49. package/skills/linear/SKILL.md +2 -0
  50. package/skills/linear/references/windows.md +29 -0
  51. package/skills/linear-triage/SKILL.md +2 -0
  52. package/skills/notion/SKILL.md +2 -0
  53. package/skills/notion/references/windows.md +43 -0
  54. package/skills/openhands-api/SKILL.md +1 -0
  55. package/skills/openhands-api/references/windows.md +44 -0
  56. package/skills/openhands-automation/SKILL.md +1 -0
  57. package/skills/openhands-automation/references/custom-automation.md +20 -0
  58. package/skills/openhands-automation/references/windows.md +57 -0
  59. package/skills/pdflatex/SKILL.md +3 -1
  60. package/skills/research-brief/SKILL.md +2 -0
  61. package/skills/skill-creator/SKILL.md +1 -0
  62. package/skills/skill-creator/references/windows.md +30 -0
  63. package/skills/slack-channel-monitor/SKILL.md +1 -0
  64. package/skills/slack-channel-monitor/references/windows.md +64 -0
  65. package/skills/slack-standup-digest/SKILL.md +2 -0
  66. package/skills/spark-version-upgrade/SKILL.md +2 -1
  67. package/skills/ssh/SKILL.md +2 -1
  68. package/skills/ssh/references/windows.md +59 -0
  69. package/skills/swift-linux/SKILL.md +2 -1
  70. package/skills/vercel/SKILL.md +5 -0
  71. package/tests/test_catalogs.py +6 -1
@@ -87,6 +87,8 @@ curl -s -X POST "${OPENHANDS_HOST}/api/automation/v1/preset/prompt" \
87
87
  }'
88
88
  ```
89
89
 
90
+ PowerShell note: use `curl.exe` for this exact flag syntax, and replace `${OPENHANDS_HOST}` / `$OPENHANDS_AUTOMATION_API_KEY` with `$env:OPENHANDS_HOST` / `$env:OPENHANDS_AUTOMATION_API_KEY` if running it natively.
91
+
90
92
  ### Step 5 — Confirm
91
93
 
92
94
  Tell the user:
@@ -6,6 +6,7 @@ description: This skill should be used when the user wants to "create a skill",
6
6
  # Skill Creator
7
7
 
8
8
  This skill provides guidance for creating effective skills.
9
+ Windows PowerShell equivalents for the Unix shell commands used in examples are in `references/windows.md`.
9
10
 
10
11
  ## About Skills
11
12
 
@@ -0,0 +1,30 @@
1
+ # Windows Notes for Skill Creation Commands
2
+
3
+ Use these PowerShell equivalents for the Unix shell examples in this skill.
4
+
5
+ ## Create a Skill Directory
6
+
7
+ ```powershell
8
+ New-Item -ItemType Directory -Force skill-name\references,skill-name\scripts,skill-name\assets | Out-Null
9
+ New-Item -ItemType File -Force skill-name\SKILL.md | Out-Null
10
+ ```
11
+
12
+ ## Run Helper Scripts
13
+
14
+ Use `python` if `python3` is not available:
15
+
16
+ ```powershell
17
+ python scripts\init_skill.py <skill-name> --path <output-directory>
18
+ python scripts\quick_validate.py <path\to\skill-folder>
19
+ ```
20
+
21
+ ## Search and Extract Text
22
+
23
+ PowerShell alternatives for common Unix text tools:
24
+
25
+ ```powershell
26
+ Select-String -Path SKILL.md -Pattern "^name:"
27
+ Get-Content SKILL.md | Select-Object -First 20
28
+ ```
29
+
30
+ If a repository already provides `rg`, prefer it for recursive searches because it works well on Windows too.
@@ -15,6 +15,7 @@ triggers:
15
15
  # Slack Channel Monitor
16
16
 
17
17
  Create a cron automation that polls up to 10 Slack channels every minute.
18
+ Windows PowerShell equivalents for the setup, packaging, upload, and API-check shell snippets are in `references/windows.md`.
18
19
  When a message containing the **trigger phrase** (default: `@openhands`) is
19
20
  detected it:
20
21
 
@@ -0,0 +1,64 @@
1
+ # Windows Notes for Slack Channel Monitor Setup
2
+
3
+ Use these PowerShell forms when creating the Slack monitor automation from Windows.
4
+
5
+ ## Validate Slack Tokens
6
+
7
+ ```powershell
8
+ curl.exe -s https://slack.com/api/auth.test `
9
+ -H "Authorization: Bearer $env:SLACK_BOT_TOKEN" |
10
+ python -c "import json,sys; d=json.load(sys.stdin); print('ok' if d.get('ok') else d.get('error'))"
11
+ ```
12
+
13
+ For a user token, replace `$env:SLACK_BOT_TOKEN` with `$env:SLACK_USER_TOKEN`.
14
+
15
+ ## Build Directory, Syntax Check, and Integrity Check
16
+
17
+ ```powershell
18
+ $buildDir = Join-Path $env:TEMP "slack-monitor-build"
19
+ New-Item -ItemType Directory -Force $buildDir | Out-Null
20
+ $main = Join-Path $buildDir "main.py"
21
+ # copy scripts/main.py to $main, then replace only the configuration constants
22
+
23
+ python -m py_compile $main
24
+ Select-String -Path $main -Pattern 'TRIGGER_PHRASE = "'
25
+ Select-String -Path $main -Pattern 'CHANNEL_IDS: list\[str\] ='
26
+ Select-String -Path $main -Pattern 'DEFAULT_OPENHANDS_URL = "'
27
+ Select-String -Path $main -Pattern 'def get_secret'
28
+ Select-String -Path $main -Pattern 'def _state_file_path'
29
+ Select-String -Path $main -Pattern 'def create_conversation'
30
+ ```
31
+
32
+ ## Package and Upload
33
+
34
+ ```powershell
35
+ $tarball = Join-Path $env:TEMP "slack-monitor.tar.gz"
36
+ tar.exe -czf $tarball -C $buildDir .
37
+
38
+ $upload = curl.exe -s -X POST `
39
+ "$env:OPENHANDS_HOST/api/automation/v1/uploads?name=slack-channel-monitor" `
40
+ -H "X-Session-API-Key: $env:OPENHANDS_AUTOMATION_API_KEY" `
41
+ -H "Content-Type: application/gzip" `
42
+ --data-binary "@$tarball" | ConvertFrom-Json
43
+
44
+ $tarballPath = $upload.tarball_path
45
+ ```
46
+
47
+ ## Create the Automation
48
+
49
+ ```powershell
50
+ $body = @"
51
+ {
52
+ "name": "Slack Channel Monitor",
53
+ "trigger": {"type": "cron", "schedule": "* * * * *"},
54
+ "tarball_path": "$tarballPath",
55
+ "entrypoint": "python3 main.py",
56
+ "timeout": 55
57
+ }
58
+ "@
59
+
60
+ curl.exe -s -X POST "$env:OPENHANDS_HOST/api/automation/v1" `
61
+ -H "X-Session-API-Key: $env:OPENHANDS_AUTOMATION_API_KEY" `
62
+ -H "Content-Type: application/json" `
63
+ -d $body
64
+ ```
@@ -80,6 +80,8 @@ curl -s -X POST "${OPENHANDS_HOST}/api/automation/v1/preset/prompt" \
80
80
  }'
81
81
  ```
82
82
 
83
+ PowerShell note: use `curl.exe` for this exact flag syntax, and replace `${OPENHANDS_HOST}` / `$OPENHANDS_AUTOMATION_API_KEY` with `$env:OPENHANDS_HOST` / `$env:OPENHANDS_AUTOMATION_API_KEY` if running it natively.
84
+
83
85
  ### Step 5 — Confirm
84
86
 
85
87
  Tell the user:
@@ -44,6 +44,7 @@ https://spark.apache.org/docs/latest/migration-guide.html
44
44
  - [ ] Identify target Spark version
45
45
  - [ ] Search for deprecated APIs: `grep -rn 'import org.apache.spark' --include='*.scala' --include='*.java' --include='*.py'`
46
46
  - [ ] List all Spark config properties: `grep -rn 'spark\.' --include='*.conf' --include='*.properties' --include='*.scala' --include='*.java' --include='*.py' | grep -v 'test'`
47
+ - [ ] On Windows PowerShell, use `Get-ChildItem -Recurse -Include *.scala,*.java,*.py | Select-String 'import org.apache.spark'` and adjust the extensions/pattern for config searches.
47
48
  - [ ] Check for custom `SparkSession` or `SparkContext` extensions
48
49
  - [ ] Identify connector dependencies (Hive, Kafka, Cassandra, Delta, Iceberg)
49
50
  - [ ] Document findings in `spark_upgrade_impact.md`
@@ -230,4 +231,4 @@ Spark SQL behavior changes between versions can silently alter query results.
230
231
  ✓ No removed APIs remain in code
231
232
  ✓ Configuration properties are current
232
233
  ✓ SQL queries produce correct results
233
- ✓ Upgrade impact documented in `spark_upgrade_impact.md`
234
+ ✓ Upgrade impact documented in `spark_upgrade_impact.md`
@@ -14,6 +14,7 @@ triggers:
14
14
  # SSH Skill
15
15
 
16
16
  This skill provides capabilities for establishing and managing SSH connections to remote machines.
17
+ Windows PowerShell equivalents for SSH config creation, key paths, ssh-agent, and permissions are in `references/windows.md`.
17
18
 
18
19
  ## Capabilities
19
20
 
@@ -132,4 +133,4 @@ chmod 600 ~/.ssh/id_ed25519
132
133
  chmod 644 ~/.ssh/id_ed25519.pub
133
134
  # Set correct permissions for SSH directory
134
135
  chmod 700 ~/.ssh
135
- ```
136
+ ```
@@ -0,0 +1,59 @@
1
+ # Windows Notes for SSH Commands
2
+
3
+ Windows includes OpenSSH Client on current Windows versions. Use these PowerShell forms for Windows-native setup.
4
+
5
+ ## Key Paths
6
+
7
+ Use the Windows profile path:
8
+
9
+ ```powershell
10
+ $sshDir = Join-Path $env:USERPROFILE ".ssh"
11
+ New-Item -ItemType Directory -Force $sshDir | Out-Null
12
+ ```
13
+
14
+ ## Generate and Use a Key
15
+
16
+ ```powershell
17
+ $key = Join-Path $sshDir "key_name"
18
+ ssh-keygen -t ed25519 -f $key -C "comment" -N ""
19
+ ssh -i $key username@hostname
20
+ ```
21
+
22
+ ## Create SSH Config
23
+
24
+ ```powershell
25
+ $config = Join-Path $sshDir "config"
26
+ @'
27
+ Host alias
28
+ HostName hostname_or_ip
29
+ User username
30
+ IdentityFile ~/.ssh/key_name
31
+ Port 22
32
+ ServerAliveInterval 60
33
+ '@ | Set-Content -LiteralPath $config -Encoding ascii
34
+ ```
35
+
36
+ ## Start ssh-agent
37
+
38
+ ```powershell
39
+ Set-Service ssh-agent -StartupType Automatic
40
+ Start-Service ssh-agent
41
+ ssh-add $key
42
+ ```
43
+
44
+ ## Permissions
45
+
46
+ POSIX `chmod 600` does not apply to Windows filesystems. Restrict private-key ACLs with `icacls`:
47
+
48
+ ```powershell
49
+ icacls $key /inheritance:r
50
+ icacls $key /grant:r "${env:USERNAME}:R"
51
+ ```
52
+
53
+ ## Copy a Public Key
54
+
55
+ `ssh-copy-id` is usually not installed on Windows. For Unix-like remotes, append the key with SSH:
56
+
57
+ ```powershell
58
+ Get-Content "$key.pub" | ssh username@hostname "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
59
+ ```
@@ -12,6 +12,7 @@ triggers:
12
12
  This document provides instructions for installing Swift on Debian 12 (Bookworm).
13
13
 
14
14
  > This setup is intended for non-UI development tasks on Swift on Linux.
15
+ > On Windows, run these Debian commands inside WSL2 or a Linux container. For native Windows Swift, use the Windows toolchain from Swift.org instead.
15
16
 
16
17
  ## Prerequisites
17
18
 
@@ -78,4 +79,4 @@ Verify that Swift is correctly installed by running:
78
79
 
79
80
  ```bash
80
81
  swift --version
81
- ```
82
+ ```
@@ -40,6 +40,11 @@ To allow agents and automated systems to access protected deployments, users nee
40
40
  ```bash
41
41
  curl -H "x-vercel-protection-bypass: <secret>" https://your-preview-url.vercel.app
42
42
  ```
43
+
44
+ PowerShell equivalent:
45
+ ```powershell
46
+ Invoke-WebRequest -Headers @{ "x-vercel-protection-bypass" = "<secret>" } -Uri https://your-preview-url.vercel.app
47
+ ```
43
48
 
44
49
  **As a Query Parameter:**
45
50
  ```
@@ -79,9 +79,14 @@ def test_remote_no_auth_mcp_entries_are_intentionally_public():
79
79
  for entry in load_catalog_entries("integrations/catalog"):
80
80
  for option in entry["connectionOptions"]:
81
81
  transport = option.get("transport", {})
82
+ # An option with `headerFields` still requires the user to supply
83
+ # credentials (just via named headers, e.g. Datadog's
84
+ # DD-API-KEY/DD-APPLICATION-KEY), so it is NOT "public/no-auth".
85
+ has_header_credentials = bool(transport.get("headerFields"))
82
86
  if (
83
87
  option["provider"] == "mcp"
84
88
  and option["auth"]["strategy"] == "none"
89
+ and not has_header_credentials
85
90
  and transport.get("url", "").startswith("https://")
86
91
  ):
87
92
  actual.add(entry["id"])
@@ -98,7 +103,7 @@ def test_credential_fields_have_helper_text_and_link():
98
103
  for entry in load_catalog_entries("integrations/catalog"):
99
104
  for option in entry["connectionOptions"]:
100
105
  transport = option.get("transport", {})
101
- for field_group in ("envFields", "argFields"):
106
+ for field_group in ("envFields", "argFields", "headerFields"):
102
107
  for field in transport.get(field_group, []):
103
108
  if field.get("type") == "password":
104
109
  field_key = field.get("key", "<unknown>")