Repository navigation
feat: support slash-command automation prompts - #1068
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
8233cde to
cefc92b
Compare
cefc92b to
fc383e4
Compare
Update @openhands/extensions to pick up slash-command catalog prompts (/slack-monitor:poll, /github-monitor:poll). The buildAutomationPrompt boilerplate still appends API routing info since the skills don't distinguish local vs cloud backends themselves. Companion PR: OpenHands/extensions#298 Co-authored-by: openhands <openhands@all-hands.dev>
fc383e4 to
0b2f317
Compare
…mmands) Co-authored-by: openhands <openhands@all-hands.dev>
|
Going to add an e2e test for this as well |
Exercises the full recommended-automations flow: 1. Configure Slack MCP and mock LLM profile via API 2. Navigate to /automations, click Slack standup digest card 3. Verify conversation opens with /standup-digest:setup 4. Submit the slash command, verify skill activation 5. Mock LLM replies with text and conversation ends Step 4 (skill activation) will fail until the extensions PR #298 merges, since the agent-server needs the skill with the /standup-digest:setup trigger registered. Co-authored-by: openhands <openhands@all-hands.dev>
Includes CI fixes: marketplace entries, README, plugin manifests, and vendor symlinks for all 5 new automation skills. Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: openhands <openhands@all-hands.dev>
❌ Mock-LLM E2E Tests26/27 passed · 1 failed Commit:
🔍 Failure details (1)❌ mock-llm-preset-automation.spec.ts › preset automation → slash command conversation › direct slash command from home page triggers skill activationPosted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
3b43f09 to
3e7c4b8
Compare
|
| Status | Test | Duration |
|---|
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses)
📸 Snapshot Test ReportWarning Snapshot comparison step crashed (timeout, OOM, or runner error) — diff results below may be incomplete or absent. ❌ 5 snapshots differ from the main branch baselines. Add the
🔴 Changed snapshots (5)
|
| Expected (main) | Actual (PR) | Diff |
|---|---|---|
![]() |
![]() |
![]() |
mcp-custom-server-editor
| Expected (main) | Actual (PR) | Diff |
|---|---|---|
![]() |
![]() |
![]() |
mcp-empty-installed
| Expected (main) | Actual (PR) | Diff |
|---|---|---|
![]() |
![]() |
![]() |
mcp-slack-install-1-marketplace
| Expected (main) | Actual (PR) | Diff |
|---|---|---|
![]() |
![]() |
![]() |
onboarding
onboarding-step-2-setup-llm
| Expected (main) | Actual (PR) | Diff |
|---|---|---|
![]() |
![]() |
![]() |
✅ Unchanged snapshots (68)
archived-conversation
- conversation-panel-with-archived-badges
- conversation-view-archived
- conversation-view-sandbox-error
automations
- automations-delete-modal
- automations-list-active-inactive
- automations-no-automations
- automations-search-no-results
backends-extended
- backend-add-blank-disabled
- backend-add-cloud-advanced-open
- backend-add-cloud-no-key-disabled
- backend-add-cloud-with-key-enabled
- backend-add-form-partially-filled
- backend-add-invalid-url-disabled
- backend-add-local-ready
- backend-add-name-only-disabled
- backend-add-two-column-layout
- backend-add-whitespace-host-disabled
- backend-after-switch
- backend-cancel-nothing-saved
- backend-dropdown-two-backends
- backend-edit-prefilled
- backend-manage-after-removal
- backend-manage-two-listed
- backend-remove-cancelled
- backend-remove-confirmation
- backend-switch-overlay
backends
- backend-add-modal
- backend-manage-modal
- backend-selector-open
changes-tab
- changes-deleted-file
- changes-diff-viewer
- changes-empty
collapsible-thinking
- reasoning-content-collapsed
- reasoning-content-expanded
- think-action-collapsed
- think-action-expanded
mcp-page
- mcp-custom-server-2-url-filled
- mcp-custom-server-3-all-filled
- mcp-custom-server-4-installed
- mcp-search-filtered
- mcp-slack-install-2-modal
- mcp-slack-install-3-filled
- mcp-slack-install-4-installed
onboarding
- onboarding-step-0-check-backend
- onboarding-step-1-choose-agent
- onboarding-step-3-say-hello
projects-workspace-browser
- projects-workspace-browser
settings-page
- add-backend-modal
- analytics-consent-modal
- home-screen
- settings-app-page
- settings-page
settings-secrets
- secrets-add-form-filled
- secrets-add-form
- secrets-after-save
- secrets-delete-confirm
- secrets-list
settings-verification
- condenser-settings
- verification-settings-off
- verification-settings-on
sidebar
- sidebar-collapsed
- sidebar-conversation-panel
- sidebar-filter-menu
skills-page
- skills-empty
- skills-loaded
- skills-no-match
- skills-search-filtered
- skills-type-filter
Generated by the Snapshot Tests workflow. This comment was created by an AI agent (OpenHands) on behalf of the repo maintainers.
❌ Mock-LLM E2E Tests26/27 passed · 1 failed Commit:
🔍 Failure details (1)❌ mock-llm-preset-automation.spec.ts › preset automation → slash command conversation › direct slash command from home page triggers skill activationPosted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
…skill Root cause: Two issues blocked the activated_skills assertion: 1. MCP configuration with a dummy command (echo/cat) caused the agent- server to block for 30s in create_mcp_tools() during conversation startup. The MCP client can't init with a non-MCP process, so the conversation never processed the user message (0 events, no LLM calls visible in mock server logs). 2. The events API sort_order parameter was 'TIMESTAMP_ASC' which is invalid (valid values: TIMESTAMP, TIMESTAMP_DESC), returning 422. Fix: - Remove MCP config entirely; send the slash command from the home page instead of clicking the automation card (which requires a working MCP) - Install the slash-command skill via POST /api/skills/install so the agent-server's AgentContext._load_auto_skills picks it up - Verify the agent actually replies before checking events (proves the conversation ran end-to-end) - Poll events API with diagnostic output for debugging - Clean up installed skill + temp files in afterAll The activated_skills FE assertion is preserved — the FE renders it. Co-authored-by: openhands <openhands@all-hands.dev>
3e7c4b8 to
bbd5d9c
Compare
📸 Snapshot Test Report✅ All snapshots match the main branch baselines.
✅ Unchanged snapshots (73)
Generated by the Snapshot Tests workflow. This comment was created by an AI agent (OpenHands) on behalf of the repo maintainers. |
|
| Status | Test | Duration |
|---|
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses)
✅ Mock-LLM E2E Tests27/27 passed Commit:
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
📸 Snapshot Test ReportWarning Snapshot comparison step crashed (timeout, OOM, or runner error) — diff results below may be incomplete or absent. ❌ 6 snapshots differ from the main branch baselines. Add the
🔴 Changed snapshots (6)
|
| Expected (main) | Actual (PR) | Diff |
|---|---|---|
![]() |
![]() |
![]() |
mcp-page — 4 snapshots
mcp-custom-server-1-editor-open
| Expected (main) | Actual (PR) | Diff |
|---|---|---|
![]() |
![]() |
![]() |
mcp-custom-server-editor
| Expected (main) | Actual (PR) | Diff |
|---|---|---|
![]() |
![]() |
![]() |
mcp-empty-installed
| Expected (main) | Actual (PR) | Diff |
|---|---|---|
![]() |
![]() |
![]() |
mcp-slack-install-1-marketplace
| Expected (main) | Actual (PR) | Diff |
|---|---|---|
![]() |
![]() |
![]() |
onboarding
onboarding-step-2-setup-llm
| Expected (main) | Actual (PR) | Diff |
|---|---|---|
![]() |
![]() |
![]() |
✅ Unchanged snapshots (67)
archived-conversation
- conversation-panel-with-archived-badges
- conversation-view-archived
- conversation-view-sandbox-error
automations
- automations-delete-modal
- automations-list-active-inactive
- automations-no-automations
- automations-search-no-results
backends-extended
- backend-add-blank-disabled
- backend-add-cloud-advanced-open
- backend-add-cloud-no-key-disabled
- backend-add-cloud-with-key-enabled
- backend-add-form-partially-filled
- backend-add-invalid-url-disabled
- backend-add-local-ready
- backend-add-name-only-disabled
- backend-add-two-column-layout
- backend-add-whitespace-host-disabled
- backend-after-switch
- backend-cancel-nothing-saved
- backend-edit-prefilled
- backend-manage-after-removal
- backend-manage-two-listed
- backend-remove-cancelled
- backend-remove-confirmation
- backend-switch-overlay
backends
- backend-add-modal
- backend-manage-modal
- backend-selector-open
changes-tab
- changes-deleted-file
- changes-diff-viewer
- changes-empty
collapsible-thinking
- reasoning-content-collapsed
- reasoning-content-expanded
- think-action-collapsed
- think-action-expanded
mcp-page
- mcp-custom-server-2-url-filled
- mcp-custom-server-3-all-filled
- mcp-custom-server-4-installed
- mcp-search-filtered
- mcp-slack-install-2-modal
- mcp-slack-install-3-filled
- mcp-slack-install-4-installed
onboarding
- onboarding-step-0-check-backend
- onboarding-step-1-choose-agent
- onboarding-step-3-say-hello
projects-workspace-browser
- projects-workspace-browser
settings-page
- add-backend-modal
- analytics-consent-modal
- home-screen
- settings-app-page
- settings-page
settings-secrets
- secrets-add-form-filled
- secrets-add-form
- secrets-after-save
- secrets-delete-confirm
- secrets-list
settings-verification
- condenser-settings
- verification-settings-off
- verification-settings-on
sidebar
- sidebar-collapsed
- sidebar-conversation-panel
- sidebar-filter-menu
skills-page
- skills-empty
- skills-loaded
- skills-no-match
- skills-search-filtered
- skills-type-filter
Generated by the Snapshot Tests workflow. This comment was created by an AI agent (OpenHands) on behalf of the repo maintainers.
|
| Status | Test | Duration |
|---|
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses)
✅ Mock-LLM E2E Tests27/27 passed Commit:
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
🔶 Mock-LLM Docker E2E Test Results22/27 passed · 5 skipped Commit:
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
📸 Snapshot Test Report✅ All snapshots match the main branch baselines.
✅ Unchanged snapshots (73)
Generated by the Snapshot Tests workflow. This comment was created by an AI agent (OpenHands) on behalf of the repo maintainers. |
|
🚀 Released in v1.2.0. |
🔶 Mock-LLM Docker E2E Test Results22/27 passed · 5 skipped Commit:
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
✅ Mock-LLM E2E Tests27/27 passed Commit:
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
📸 Snapshot Test ReportWarning Snapshot comparison step crashed (timeout, OOM, or runner error) — diff results below may be incomplete or absent. ✅ No baseline found on main — all 73 snapshots are new and will become the baseline once this PR merges.
🆕 New snapshots (73)These snapshots have no baseline on main and will become the new baseline once this PR merges.
|










































































































Summary
Update the automation launcher to support slash-command prompts from the updated
@openhands/extensionscatalog. When a recommended automation's prompt is a slash command (e.g./slack-monitor:poll), skip the API routing boilerplate — the loaded skill already handles that.Changes
recommended-automations-launcher.tsxisSlashCommand()check — prompts starting with/are passed through verbatim<RUNTIME_SERVICES>), so thebuildAutomationPromptboilerplate is redundant for thempackage.json/package-lock.json@openhands/extensionstoc0e605awhich converts the Slack and GitHub monitor catalog entries to slash commandsTests
"returns slash-command prompts verbatim without appending API instructions"— verifies/slack-monitor:pollis passed through for both local and cloud backendsBefore → After
What the user sees as the first message in a new automation conversation:
Before:
After:
The skill is activated by the
/slack-monitor:polltrigger in its frontmatter, and the skill itself contains all the interactive setup logic and API routing.Companion PR
Extensions: OpenHands/extensions#298
This PR was created by an AI agent (OpenHands) on behalf of the user.
@malhotra5 can click here to continue refining the PR
🐳 Docker images for this PR
• GHCR package: https://github.com/OpenHands/agent-canvas/pkgs/container/agent-canvas
ghcr.io/openhands/agent-canvasghcr.io/openhands/agent-server:1.24.0-pythonopenhands-automation==1.0.0a6479c87c4457753683e252b73794375519e3af937Pull (multi-arch manifest)
# Multi-arch manifest — Docker automatically pulls the correct architecture docker pull ghcr.io/openhands/agent-canvas:sha-479c87cRun
All tags pushed for this build
About Multi-Architecture Support
sha-479c87c) is a multi-arch manifest supporting both amd64 and arm64sha-479c87c-amd64) are also available if needed