* ci: adopt release-please via shared release-actions
Standardize agent-canvas releases on the org-wide release-please
automation (OpenHands/release-actions), matching typescript-client and
OpenHands/OpenHands.
Adds the three caller workflows:
- release.yml release-please on push to main / release/**
- pr.yml Conventional-Commit title lint + type: labels
- release-ready.yml draft release PR -> "Ready for review" gate
(Slack alert to #proj-agent-canvas + optional tests)
Adds the release-please state files: release-please-config.json
(node, draft PRs, extra-files), .release-please-manifest.json,
.github/release.yml (changelog categories), version.txt. Manifest is
seeded at 1.0.0 (the current GA release, v1.0.0 shipped 2026-06-15).
extra-files keeps the non-package.json version pins in lockstep:
config/defaults.json ($.versions.agentCanvas) and the README docker
example. The node release-type already bumps package.json and
package-lock.json.
Corrects stale on-main version refs (package.json rc.6,
config/defaults.json + README rc.11) to the real released 1.0.0, so all
pins share a single source of truth.
Removes create-release.yml: release-please now owns tag + GitHub Release
creation. npm-publish.yml and docker.yml are unchanged - they trigger on
the v* tags release-please still produces (pushed with the release App
token so tag-triggered workflows fire).
Co-authored-by: smolpaws <engel@enyst.org>
* fix: sync README.windows.md docker tag + track it in release-please
The docs-version-sync test also checks README.windows.md, which still
pinned 1.0.0-rc.11. Update both its docker image refs to the released
1.0.0 and add it to release-please extra-files (with the
x-release-please-version annotation) so future bumps keep it in lockstep
alongside README.md and config/defaults.json.
Co-authored-by: smolpaws <engel@enyst.org>
* ci: pin v-prefix tagging and first-release start point
Two robustness fixes after confirming agent-canvas's release conventions:
- include-v-in-tag: true (explicit). agent-canvas tags are vX.Y.Z
(v1.0.0, v1.0.0-rc.12), and npm-publish.yml + docker.yml trigger on
push tags 'v*'. release-please's node default already adds the v, but
pin it explicitly so a default change can't silently drop the prefix
and break tag-triggered publishing. (Matches typescript-client, which
also ships v-prefixed tags; differs from OpenHands/OpenHands, which
sets include-v-in-tag:false for its no-v scheme.)
- last-release-sha pinned to the v1.0.0 release commit
(7b9c17e). v1.0.0 is a real, published release (2026-06-15; npm
latest). This tells release-please the first managed release starts
from there, so its first run scans only post-1.0.0 commits instead of
walking the whole history.
Co-authored-by: smolpaws <engel@enyst.org>
* ci: drop orphaned version.txt
Per AI review: version.txt would never be updated and nothing consumes
it. The README's "four state files" guidance assumes the `simple`
release-type (which release-actions itself uses, where version.txt is
the canonical version source). agent-canvas uses `release-type: node`,
where package.json is the source of truth — so version.txt is redundant
and not auto-bumped. The other node adopters (typescript-client,
OpenHands/OpenHands) ship no version.txt either. Remove it rather than
keep a file that silently goes stale.
Co-authored-by: smolpaws <engel@enyst.org>
* docs: document the release-please flow
---------
Co-authored-by: smolpaws <engel@enyst.org>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: hieptl <hieptl.developer@gmail.com>
* fix(settings): show ACP-disabled tooltip on desktop (drop pointer-events-none)
When an ACP agent is active, the desktop settings sidebar greys out the
LLM/Condenser/Verification items and wraps them in a hover StyledTooltip
("Disabled while {agent} is active"). The tooltip never opened, so users
saw a greyed item with no explanation (reported on macOS desktop).
Root cause: the disabled link also got `pointer-events-none`, but
StyledTooltip is HeroUI's pointer-driven Tooltip — with pointer events
suppressed, onPointerEnter never fires and the tooltip can't open.
pointer-events-none wasn't needed for correctness either: onClick already
preventDefaults navigation, and tabIndex=-1 + aria-disabled cover
keyboard/AT.
Fix: keep the item visually greyed (opacity-50) but only apply
pointer-events-none when there's no disabledReason tooltip to show.
Fixes#1498
Co-authored-by: smolpaws <engel@enyst.org>
* chore: Remove PR-only artifacts
* Address ACP tooltip review comment
* Restore sidebar disabled aria comment
---------
Co-authored-by: smolpaws <engel@enyst.org>
Co-authored-by: openhands <openhands@all-hands.dev>
Update README source-code links for OpenHands Agent, Agent Server, and Agent Canvas.\n\nThis squash commit was generated by an AI agent (OpenHands) on behalf of the user.
* settings: trust public OpenHands provider models
* test: update OpenHands profile E2E expectation
* test: allow transitional OpenHands model shape in E2E
* test: update OpenHands provider profile E2E
* ci: pin mock e2e to SDK provider PR
Temporarily run mock-LLM E2E against OpenHands/software-agent-sdk#3548 so the provider settings refactor is validated with the matching SDK end state.
* test: stabilize automation trajectory for SDK pin
Use non-empty safety replies for the automation-run conversation so the mock trajectory completes whether the pinned SDK does or does not consume an internal LLM turn first.
* ci: isolate SDK PR pin to smoke test
Keep the full mock-LLM and Docker E2E suites on the released agent-server/automation stack, and add a targeted profile-management E2E job that runs against the SDK PR git ref.
* ci: remove temporary SDK PR pin
Revert the temporary OpenHands/software-agent-sdk#3548 git ref before switching the PR to the release-branch SDK pin.
* ci: pin SDK smoke to release PR
Point the temporary SDK smoke-test pin at OpenHands/software-agent-sdk#3638 (Release v1.28.0) so PR #1280 validates against the release branch hash.
Co-authored-by: openhands <openhands@all-hands.dev>
Remove the temporary SDK release-branch pin now that software-agent-sdk v1.28.0 is published, and run the mock E2E workflow against the released agent-server package.
* test: align agent server version references
Update docs and drift-detection expectations for the 1.28.0 agent-server pin.
---------
Co-authored-by: openhands <openhands@all-hands.dev>
Keep package metadata in sync with config/defaults.json so npm scripts and mock E2E logs report the current agent-canvas RC version.
Co-authored-by: openhands <openhands@all-hands.dev>
* fix: stabilize snapshot consent handling
Seed the legacy analytics-consent key in snapshot tests so the server-backed analytics dialog closes before page interactions, and make snapshot reports distinguish visual diffs/new snapshots from actual workflow failures.
* fix: only seed analytics consent for snapshots
---------
Co-authored-by: openhands <openhands@all-hands.dev>
* fix: default onboarding LLM to OpenAI GPT-5.5
Co-authored-by: openhands <openhands@all-hands.dev>
* test: share onboarding default LLM model constant
Co-authored-by: openhands <openhands@all-hands.dev>
* test: update mock e2e onboarding test for OpenAI GPT-5.5 default
Align the onboarding regression spec with the new default model
(openai/gpt-5.5) introduced in this PR, replacing the previous
Anthropic Claude Opus assertions.
Co-authored-by: openhands <openhands@all-hands.dev>
* fix: add openai/gpt-5.5 to onboarding LLM catalog mock
The routeOnboardingLlmCatalog helper only included anthropic and
openhands providers. The new onboarding default (openai/gpt-5.5) needs
the openai provider and model in the intercepted API responses so the
provider/model dropdowns can populate correctly.
Co-authored-by: openhands <openhands@all-hands.dev>
* fix: strip stale llm_base_url from settings in onboarding e2e tests
Earlier mock-LLM tests (conversation, automation) configure the real
agent-server with llm_base_url pointing at the mock LLM server. That
stale URL causes LlmSettingsScreen to open in Advanced view (text
inputs) instead of Basic view (ModelSelector dropdowns), so the
onboarding regression test can't find the provider/model inputs.
Intercept GET /api/settings in routeOnboardingLlmCatalog to clear
llm_base_url, ensuring the form renders in Basic view.
Co-authored-by: openhands <openhands@all-hands.dev>
* docs: add E2E test debugging guide to AGENTS.md
Document the workflow for diagnosing CI failures: reading PR comments,
downloading artifacts, inspecting error-context.md page snapshots,
and common failure patterns (stale state, view mode mismatch, route
interception).
Co-authored-by: openhands <openhands@all-hands.dev>
* fix: intercept agent_settings.llm.base_url in onboarding test
Move the settings interception from the shared helper into the
specific test's beforeGoto callback. Clear agent_settings.llm.base_url
(not top-level llm_base_url) from the real server response so the LLM
form renders in Basic view with ModelSelector dropdowns.
The interception is registered AFTER routeSessionApiKey so Playwright's
LIFO order processes it first for /api/settings requests.
Co-authored-by: openhands <openhands@all-hands.dev>
---------
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
Use the agent-server switch_profile endpoint for running conversations so the UI does not need to fetch encrypted profile secrets before switching models.
Co-authored-by: openhands <openhands@all-hands.dev>
Update the extensions dependency to the commit that removes deprecated MCP entries, assert those entries stay absent from the marketplace, and keep legacy installed servers visible/searchable in the MCP settings UI.
Co-authored-by: openhands <openhands@all-hands.dev>