Commit Graph
158 Commits
Author SHA1 Message Date
dependabot[bot] f2187cd50b chore(deps-dev): bump eslint-import-resolver-typescript from 4.4.4 to 4.4.5 (#16256)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-04 00:05:33 -04:00
openhands-release-bot[bot] 6790df06ea chore(main): release 1.9.0 (#16209)
Co-authored-by: openhands-release-bot[bot] <290150379+openhands-release-bot[bot]@users.noreply.github.com>
2026-08-03 14:38:43 -04:00
Hiep Le 67e23f0346 chore: bump @openhands/extensions to 0.13.0 (#16258) 2026-08-03 19:39:03 +07:00
Hiep LeandGraham Neubig 8e5dc43004 feat: add a domain-neutral extension-manifest host (#16127)
Co-authored-by: Graham Neubig <neubig@gmail.com>
2026-07-31 12:07:48 +07:00
openhands-release-bot[bot] c7a765d900 chore(main): release 1.8.0 (#16199)
Co-authored-by: openhands-release-bot[bot] <290150379+openhands-release-bot[bot]@users.noreply.github.com>
2026-07-30 12:58:38 -04:00
Hiep Le ca982d66bb chore: bump agent-server 1.39.1, automation 1.5.0, typescript-client 1.36.1 (#16197) 2026-07-30 19:05:17 +07:00
openhands-release-bot[bot] bab763e4d4 chore(main): release 1.7.2 (#16190)
Co-authored-by: openhands-release-bot[bot] <290150379+openhands-release-bot[bot]@users.noreply.github.com>
2026-07-30 04:35:02 -06:00
7fbc01824a test: add Stryker mutation testing (#16184)
Co-authored-by: Ai Vong <ai.vong@openhands.dev>
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
2026-07-30 08:39:49 +02:00
openhands-release-bot[bot] daedd91b10 chore(main): release 1.7.1 (#16187)
Co-authored-by: openhands-release-bot[bot] <290150379+openhands-release-bot[bot]@users.noreply.github.com>
2026-07-29 23:37:04 -04:00
Rohit Malhotraandopenhands c86824bafd fix: update release repository metadata (#16186)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-07-29 22:47:31 -04:00
openhands-release-bot[bot] 04462a3574 chore(main): release 1.7.0 (#16140) 2026-07-29 18:32:49 -04:00
dependabot[bot]andEngel Nyst 99a0837c6a chore(deps-dev): bump electron from 42.3.2 to 42.3.3 (#1866)
Bumps [electron](https://github.com/electron/electron) from 42.3.2 to 42.3.3.
- [Release notes](https://github.com/electron/electron/releases)
- [Commits](https://github.com/electron/electron/compare/v42.3.2...v42.3.3)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 42.3.3
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
2026-07-25 16:42:00 +00:00
dependabot[bot]andEngel Nyst cc3b063986 chore(deps): bump lucide-react from 1.14.0 to 1.25.0 (#1867)
Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 1.14.0 to 1.25.0.
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/1.25.0/packages/lucide-react)

---
updated-dependencies:
- dependency-name: lucide-react
  dependency-version: 1.24.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
2026-07-25 16:29:47 +00:00
dependabot[bot]andEngel Nyst bda0970068 chore(deps): bump axios from 1.16.0 to 1.18.0 (#1868)
Bumps [axios](https://github.com/axios/axios) from 1.16.0 to 1.18.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.16.0...v1.18.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.18.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
2026-07-25 16:18:35 +00:00
dependabot[bot]andEngel Nyst 689ce4cdcf chore(deps): bump shell-quote from 1.8.4 to 1.9.0 (#1881)
Bumps [shell-quote](https://github.com/ljharb/shell-quote) from 1.8.4 to 1.9.0.
- [Changelog](https://github.com/ljharb/shell-quote/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/shell-quote/compare/v1.8.4...v1.9.0)

---
updated-dependencies:
- dependency-name: shell-quote
  dependency-version: 1.9.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
2026-07-25 15:44:15 +00:00
dependabot[bot]andEngel Nyst 61d1d12ffb chore(deps): bump vite from 8.0.10 to 8.0.16 (#1939)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 8.0.10 to 8.0.16.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v8.0.16/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 8.0.16
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
2026-07-25 14:59:52 +00:00
openhands-release-bot[bot] aaefde6e7b chore(main): release 1.6.1 (#1941)
Co-authored-by: openhands-release-bot[bot] <290150379+openhands-release-bot[bot]@users.noreply.github.com>
2026-07-24 19:22:25 +00:00
openhands-release-bot[bot] 8d96431257 chore(main): release 1.6.0 (#1862)
Co-authored-by: openhands-release-bot[bot] <290150379+openhands-release-bot[bot]@users.noreply.github.com>
2026-07-24 14:32:46 -04:00
Hiep Le 53f0c0e231 chore: bump @openhands/extensions 0.11.0 (#1880) 2026-07-21 19:15:16 +07:00
Hiep Le 4e9ea1334a feat: add electron desktop app (#1864) 2026-07-20 15:06:31 +00:00
openhands-release-bot[bot] 70a678869a chore(main): release 1.5.2 (#1857)
Co-authored-by: openhands-release-bot[bot] <290150379+openhands-release-bot[bot]@users.noreply.github.com>
2026-07-20 07:44:03 +01:00
openhands-release-bot[bot]andneubig 702012c6c3 chore(main): release 1.5.1 (#1846)
* chore(main): release 1.6.0

* chore: release 1.5.1

---------

Co-authored-by: openhands-release-bot[bot] <290150379+openhands-release-bot[bot]@users.noreply.github.com>
Co-authored-by: neubig <neubig@users.noreply.github.com>
2026-07-19 19:32:43 +00:00
Graham Neubigandneubig 3598bb14e3 fix: preserve Canvas analytics identity (#1839)
* fix: unify Canvas PostHog identity

* fix: preserve funnel events across backend transitions

* fix: preserve telemetry consent through cloud login

* fix: isolate Canvas telemetry from host PostHog

* fix: preserve telemetry during client startup

* fix: centralize Canvas telemetry ownership

* fix: make telemetry lifecycle atomic

---------

Co-authored-by: neubig <neubig@users.noreply.github.com>
2026-07-19 20:16:20 +01:00
openhands-release-bot[bot] 898d3b7228 chore(main): release 1.5.0 (#1791)
Co-authored-by: openhands-release-bot[bot] <290150379+openhands-release-bot[bot]@users.noreply.github.com>
2026-07-18 00:47:58 +01:00
Graham Neubig e9d54fb29f feat: instrument the Canvas Cloud funnel (#1828)
Instrument the consented Canvas-to-Cloud funnel and identify Canvas Cloud requests with coarse client metadata.
2026-07-18 00:22:23 +01:00
Hiep Le e06c8ed86b chore: bump typescript-client to 1.33.0 (#1824) 2026-07-16 20:38:33 +07:00
openhands-release-bot[bot] 9587f27687 chore(main): release 1.4.0 (#1716)
Co-authored-by: openhands-release-bot[bot] <290150379+openhands-release-bot[bot]@users.noreply.github.com>
2026-07-14 17:52:55 +01:00
openhands-release-bot[bot] a120f97e61 chore(main): release 1.3.0 (#1653)
Co-authored-by: openhands-release-bot[bot] <290150379+openhands-release-bot[bot]@users.noreply.github.com>
2026-07-13 23:46:41 +07:00
openhands-release-bot[bot] 061292165f chore(main): release 1.2.1 (#1646)
Co-authored-by: openhands-release-bot[bot] <290150379+openhands-release-bot[bot]@users.noreply.github.com>
2026-07-10 17:52:12 +07:00
Devinandopenhands 8e1df028ce chore: Update extensions to 0.9 (#1640)
* Update extensions to 0.9

* test: account for jira-issue-to-pr automation in extensions 0.9.0

@openhands/extensions 0.9.0 adds the jira-issue-to-pr recommended
automation (popularityRank 85, beta). Update the recommended-automations
tests to include it in the popularity-ordered list and bump the Beta
section count from 4 to 5.

---------

Co-authored-by: openhands <openhands@all-hands.dev>
2026-07-09 17:05:21 -04:00
openhands-release-bot[bot] 4587f097f5 chore(main): release 1.2.0 (#1631)
Co-authored-by: openhands-release-bot[bot] <290150379+openhands-release-bot[bot]@users.noreply.github.com>
2026-07-10 00:22:44 +07:00
c50d049316 chore: bump typescript-client 1.32.1 + agent-server/openhands-sdk 1.33.0 (#1623)
* chore: bump typescript-client 1.32.1 + agent-server/openhands-sdk 1.33.0

- @openhands/typescript-client 1.32.0 -> 1.32.1 (package.json + lockfile)
- agent-server SDK libs (openhands-sdk/tools/workspace/agent-server) 1.32.0 -> 1.33.0 via versions.agentServer in config/defaults.json
- sweep doc/test/comment references to 1.33.0 (AGENTS.md, dev-safe.test.ts, check-sdk-version-sync.mjs, dev-safe.mjs, mock-llm-e2e.yml)
- keep the acp <0.11 transitive pin: openhands-sdk 1.33.0 still requires agent-client-protocol>=0.10.1 with no upper bound

Note: check-sdk-version-sync fails until an openhands-automation release pins openhands-sdk 1.33.0. The latest automation (1.1.3) still pins 1.32.0, so versions.automation is left at 1.1.3.

* chore: bump openhands-automation 1.1.3 -> 1.1.4 (pins SDK 1.33.0)

openhands-automation 1.1.4 is now published on PyPI and pins
openhands-sdk/openhands-workspace to 1.33.0, matching versions.agentServer.
This satisfies the check-sdk-version-sync check, which failed while
automation stayed at 1.1.3 (pinned SDK 1.32.0). Consolidates the
SDK+automation bump from #1622 into this PR alongside the ts-client bump.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Debug Agent <157206163+simonrosenberg@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 14:54:14 +00:00
Graham Neubigandopenhands c552545926 feat(mcp): add OAuth support to MCP install flow
Squash merge PR #1583.

This merge commit was created by an AI agent (OpenHands) on behalf of Graham Neubig.

Co-authored-by: openhands <openhands@all-hands.dev>
2026-07-07 12:03:36 +02:00
74f06866ec Use libraries for local proxy and static serving (#1543)
* Use libraries for local proxy and static serving

* Fix CI for proxy library refactor

* Fix static server CI failures

Co-authored-by: openhands <openhands@all-hands.dev>

---------

Co-authored-by: Codex <codex@openai.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2026-06-30 06:07:20 -07:00
Graham Neubigandneubig e3c096ba83 chore: bump @openhands/extensions 0.6.0 -> 0.7.0 (#1519)
Bump to the released 0.7.0 (OpenHands/extensions#369): defaultTool
removed, every HTTP connector has openApiUrl, MCP-first ordering, 5
vendors recovered as MCP, 10 connectors dropped, strict JSON schema
added. Typecheck passes; 3444 tests pass (1 pre-existing EADDRINUSE
port-flake unrelated to the bump).

Co-authored-by: neubig <398875+neubig@users.noreply.github.com>
2026-06-27 23:13:59 -04:00
b2ba5889d3 fix(examples): inherit acp-docker image from config/defaults.json (#1434)
* fix(examples): inherit acp-docker image from config/defaults.json

examples/acp-docker/docker-compose.yml hardcoded the agent-server image at
`1.25.0-python`. Canvas enforces `compatibility.minimumAgentServer` (1.28.0)
from the repo's single source of truth, so the example default fell below the
floor and rendered "Disconnected — requires 1.28.0 or newer" — a reviewer
following the quickstart as written never reached the feature.

examples/acp-docker was the lone in-repo file hardcoding a version instead of
inheriting from config/defaults.json (14 other files read it; check-sdk-version
-sync only validates the released PyPI package, not in-repo files).

- scripts/gen-acp-docker-env.mjs: read defaults.json, pin AGENT_SERVER_IMAGE to
  `${images.agentServer}:${versions.agentServer}-python` in examples/acp-docker
  /.env (idempotent upsert; mirrors scripts/docker-build.mjs).
- package.json: `npm run example:acp-docker:env`.
- docker-compose.yml: no-config fallback `1.25.0-python` -> `latest-python`,
  always >= the compatibility floor, so zero-config `docker compose up` never
  shows "Disconnected"; the generated .env overrides with the pinned SoT
  version for the reproducible path.
- .env.example / README.md: document both paths; correct the version narrative
  (floor is the defaults.json compatibility pin; #3510 is the deeper functional
  floor at/below it).
- __tests__/scripts/acp-docker-env-sync.test.ts: assert the generator's tag
  matches defaults.json, the pin satisfies the floor, and the compose fallback
  stays `latest-python`. Mirrors docs-version-sync.test.ts — the guard that
  makes "can't silently drift" true.

* test(examples): harden acp-docker env-sync per review

Addresses the cli-review-panel findings worth acting on (the rest were
cosmetic or matched the no-validation idiom of scripts/docker-build.mjs):

- gte() in the test guarded with parseSemver — a non-numeric pin (sha /
  pre-release) now fails the floor check loudly instead of silently
  comparing NaN. The floor check is a CI gate; its one piece of logic
  shouldn't mis-compare in silence.
- compose-fallback assertion derives the registry from config.images
  .agentServer instead of hardcoding ghcr.io/openhands/... — a registry
  change no longer false-fails a test that only cares about the latest-python
  tag.
- upsertEnvLine now has unit tests (append / replace-in-place+preserve /
  idempotent / commented-template-line / keyless-line guard), making the
  "idempotent upsert" claim defensible. It was the one untested piece of real
  logic.
- upsertEnvLine guards a keyless line (no "=") with a clear throw, instead of
  an empty key matching every line and rewriting the whole file.

* fix(examples): guard acp-docker env-sync entrypoint against undefined argv[1]

The CLI entrypoint guard called pathToFileURL(process.argv[1]) unconditionally.
process.argv[1] is undefined in some ESM contexts (e.g. importing the module for
its exports via `node --input-type=module -e "import(...)"`), so the guard threw
ERR_INVALID_ARG_TYPE at import, before any exported helper was reachable.

Short-circuit on process.argv[1] before pathToFileURL so importing the module is
side-effect-free while the CLI path is unchanged. Add a regression test that
reproduces the bare-import context and asserts a clean exit.

Addresses the review finding on #1434.

* docs(acp-docker): trim verbose comments per review

Address all-hands-bot's review suggestions on #1434:
- test header describes the current invariant, not the prior-state history
  (that narration belonged in the PR description)
- docker-compose.yml: condense the image-pin comment to the how-to-override;
  the compatibility-floor / #3510 rationale already lives in README §1 + the test
- .env.example: 7-line pin explainer down to 2

Comment-only; env-sync test still 10/10 green, prettier clean.

* Clarify ACP Docker image version guidance

Co-authored-by: openhands <openhands@all-hands.dev>

---------

Co-authored-by: enyst <engel.nyst@gmail.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2026-06-26 23:21:32 +00:00
Rohit Malhotraandopenhands bfd5f04109 Draft: Prepare 1.1.0 release (#1511)
* chore: prepare 1.1.0-rc.1 release candidate

Co-authored-by: openhands <openhands@all-hands.dev>

* chore: prepare 1.1.0 release

Co-authored-by: openhands <openhands@all-hands.dev>

---------

Co-authored-by: openhands <openhands@all-hands.dev>
2026-06-26 19:22:55 +00:00
Hiep Le c3f20e0df5 chore: bump typescript-client 1.28.0 + agent-server/openhands-sdk 1.29.3 (#1507)
* chore: bump typescript-client 1.28.0 + agent-server/openhands-sdk 1.29.3

* chore: automation
2026-06-26 17:52:18 +00:00
Vasco Schiavo 32d2e12042 chore(deps): bump typescript-client 1.27.0 + agent-server/openhands-sdk 1.29.0 (#1486)
* chore(deps): bump @openhands/typescript-client to 1.27.0

* test: update ACP provider/model fixtures for typescript-client 1.27.0

1.27.0 refreshed the claude-code/codex ACP registry data: provider command
versions (claude-agent-acp 0.30.0->0.44.0, codex-acp 0.15.0->0.16.0),
claude-code model ids (claude-opus-4-8->opus[1m], claude-sonnet-4-6->sonnet,
claude-haiku-4-5->haiku) plus a new well-labeled "default" option, and the
codex default (gpt-5.5/medium->gpt-5.5).

Canvas sources these lists from the client registry (closes #740), so the
source was already correct -- only the hardcoded test expectations were
stale. Also relaxed the acp-providers placeholder guard to accept the SDK's
intentional "Default (recommended)" entry.

* chore(deps): bump agent-server/openhands-sdk to 1.29.0

Align the spawned agent-server SDK release train (openhands-sdk,
openhands-tools, openhands-workspace, openhands-agent-server) with the
version @openhands/typescript-client 1.27.0 is validated against
(agent-server 1.29.0-python). Bump the coupled openhands-automation pin
to 1.0.0a12, whose SDK deps resolve to 1.29.0, to satisfy the
check-sdk-version-sync gate. minimumAgentServer compat floor unchanged.

Doc/JSDoc/test references updated to keep docs-version-sync green.
2026-06-25 15:03:07 +00:00
1bf2f95800 chore: pin extensions catalog dependency (#1451)
* chore: pin extensions catalog dependency

Co-authored-by: openhands <openhands@all-hands.dev>

* chore: update extensions catalog pin

Co-authored-by: openhands <openhands@all-hands.dev>

* chore: repin extensions catalog package

Co-authored-by: openhands <openhands@all-hands.dev>

* chore: consume raw integration catalog entries

Co-authored-by: openhands <openhands@all-hands.dev>

* refactor: rely on extensions Linear catalog data

Co-authored-by: openhands <openhands@all-hands.dev>

* chore: repin extensions without aggregate catalog

Co-authored-by: openhands <openhands@all-hands.dev>

* chore: repin extensions generated catalog comment

Co-authored-by: openhands <openhands@all-hands.dev>

* chore: repin extensions catalog

Co-authored-by: openhands <openhands@all-hands.dev>

* refactor: remove marketplace runtime filtering

Co-authored-by: openhands <openhands@all-hands.dev>

* fix: render MCP logos from catalog metadata

Co-authored-by: openhands <openhands@all-hands.dev>

* chore: repin extensions catalog dependency

Co-authored-by: openhands <openhands@all-hands.dev>

* chore: repin extensions catalog metadata

Co-authored-by: openhands <openhands@all-hands.dev>

* chore: repin extensions release workflow

Co-authored-by: openhands <openhands@all-hands.dev>

* chore: use released extensions package

Co-authored-by: openhands <openhands@all-hands.dev>

* fix: add img onError handler and clarify isAutomationAvailable intent

- mcp-logo-badge: add onError handler to hide broken images when the
  simpleicons CDN is unreachable, so the badge background still shows
  rather than a broken-image icon
- recommended-automations-section: document why isAutomationAvailable
  uses length > 0 (intentional: hides cards whose required integrations
  are not in the catalog or are empty) vs the old .every() behaviour
  which returned true for empty arrays

Co-authored-by: openhands <openhands@all-hands.dev>

* fix: satisfy logo fallback lint

Co-authored-by: openhands <openhands@all-hands.dev>

* fix: resolve @openhands/extensions@0.6.0 from npm registry instead of GitHub archive

Now that 0.6.0 is published on npm, update the lockfile resolved URL from
the GitHub tarball to the canonical registry artifact. The integrity hash
now matches the npm release provenance.

Co-authored-by: openhands <openhands@all-hands.dev>

* chore: remove dead marketplace backend prop

Co-authored-by: openhands <openhands@all-hands.dev>

---------

Co-authored-by: neubig <398875+neubig@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2026-06-23 20:11:49 +00:00
Rohit Malhotraandopenhands 089ecc45f3 Pin exact dependency versions (#1455)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-06-23 18:02:22 +00:00
94d5ecff9c Fix: upgrade typescript-client to v1.25.0 for pinned ACP versions (#1369)
* Update typescript-client to v1.25.0 with pinned ACP versions

Upgrades from v1.24.3 to v1.25.0 to get the ACP provider version pins:
- claude-agent-acp@0.30.0
- codex-acp@0.15.0
- gemini-cli@0.38.0

Fixes the 'Method not found' error when starting Codex ACP sessions.
The unpinned npm package was resolving to codex-acp@0.16.0 which
lacks the session/set_model RPC method that the SDK expects.

Closes: agent-canvas#<issue> (codex version incompatibility)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>

* chore: update package-lock.json typescript-client version to 1.25.0

Synchronize lockfile dependency version with package.json to fix npm ci validation.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>

* chore: complete lockfile update for typescript-client@1.25.0

Update both dependency version and package definition with correct integrity hash.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>

* test: update ACP provider command expectations for pinned versions

Update test expectations to match typescript-client@1.25.0 registry which includes
version pins: claude-agent-acp@0.30.0, codex-acp@0.15.0, gemini-cli@0.38.0.

These pins fix the 'Method not found' error on Codex ACP sessions by ensuring
npm resolves to compatible versions.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>

* fix: update ACP test expectations for typescript-client@1.25.0 pinned versions

- Change empty acp_command to fall back to registry defaults (now with pinned versions)
- Update expected Claude Code default model from opus-4-7 to opus-4-8

* fix: update test expectations for typescript-client@1.25.0 registry changes

- Default Claude Code model updated: claude-opus-4-7 → claude-opus-4-8
- Pinned commands now include version: @claude-agent-acp@0.30.0, @codex-acp@0.15.0
- Credential tests load acp_command:[] so preset detection finds claude-code
- Reconciles test types pinned codex command to match registry

---------

Co-authored-by: Debug Agent <simon@openhands.dev>
Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-16 09:11:20 +02:00
Graham Neubigandneubig df93ca36a7 Add Windows portability guards for workspace flows (#1311)
* Add Windows portability guards for workspace flows

* Increase snapshot workflow timeout

* Trigger CI after timeout update

* Fix windows portability PR after main merge

---------

Co-authored-by: neubig <398875+neubig@users.noreply.github.com>
2026-06-12 19:14:03 -04:00
OpenHands Bot 82ea2b609a feat: save hosted MCP credentials as secrets (#1331) 2026-06-12 20:03:46 +00:00
Rohit Malhotraandopenhands c7c8862c11 Remove visual snapshot tests and bump Docker E2E timeout (#1332)
* Remove visual snapshot tests

Co-authored-by: openhands <openhands@all-hands.dev>

* Bump Docker E2E timeout

Co-authored-by: openhands <openhands@all-hands.dev>

* Align Docker E2E timeout caps

Co-authored-by: openhands <openhands@all-hands.dev>

---------

Co-authored-by: openhands <openhands@all-hands.dev>
2026-06-12 13:03:58 -04:00
Tim O'Farrellandopenhands 771acb24a5 chore: bump @openhands/extensions from 0.4.1 to 0.4.2 (#1323)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-06-12 02:01:06 +00:00
Tim O'Farrellandopenhands 910b19ae76 chore: bump agent-server → 1.28.1, automation → 1.0.0a9, extensions → 0.4.1 (#1319)
* chore: bump agent-server → 1.28.1, automation → 1.0.0a9, extensions → 0.4.1

Co-authored-by: openhands <openhands@all-hands.dev>

* Test fixes

* fix: inject proxy base_url for litellm_proxy/* when server omits it (agent-server ≥1.28)

Agent-server ≥1.28 may return base_url:null when fetching a litellm_proxy/*
profile config, even when the profile was saved with the All-Hands proxy URL.
This caused the Basic-tab re-save flow in LlmSettingsLocalView.handleSave to
call isOpenHandsProxyModel(model, null) → false, hitting the else-branch that
deletes base_url and stranding the profile (issue #1146).

Fix: add a secondary check — litellm_proxy/* with a missing base_url is treated
the same as litellm_proxy/* with the proxy URL already set, and
OPENHANDS_LLM_PROXY_BASE_URL is injected before the save request is sent.

Also updates the mock-LLM E2E test to accept both storage representations:
- litellm_proxy/* + proxyBaseUrl  (pre-1.28, guards issue #1146 regression)
- openhands/*     + null          (1.28+, server-managed routing)

And adds a unit test exercising the base_url:null path.

Co-authored-by: openhands <openhands@all-hands.dev>

---------

Co-authored-by: openhands <openhands@all-hands.dev>
2026-06-11 19:16:03 -04:00
Tim O'Farrellandopenhands 8071edf72a Revert "chore: bump agent-server → 1.28.1, automation → 1.0.0a9, extensions → 0.4.1 (#1315)" (#1318)
This reverts commit 1917b5d39fbf09dc51213b4b484698fe394314c7.

Co-authored-by: openhands <openhands@all-hands.dev>
2026-06-11 21:28:04 +00:00
Tim O'Farrellandopenhands 15a52fea75 chore: bump agent-server → 1.28.1, automation → 1.0.0a9, extensions → 0.4.1 (#1315)
* chore: bump agent-server → 1.28.1, automation → 1.0.0a9, extensions → 0.4.1

Co-authored-by: openhands <openhands@all-hands.dev>

* chore: update doc examples to reference agent-server 1.28.1

Update version references in AGENTS.md, scripts/dev-safe.mjs, and
scripts/check-sdk-version-sync.mjs from 1.27.0 → 1.28.1 to stay
in sync with the agentServer pin in config/defaults.json.

Fixes: docs-version-sync.test.ts failures

Co-authored-by: openhands <openhands@all-hands.dev>

* fix: inject proxy base_url for litellm_proxy/* when server omits it (agent-server ≥1.28)

Agent-server ≥1.28 may return base_url:null when fetching a litellm_proxy/*
profile config, even when the profile was saved with the All-Hands proxy URL.
This caused the Basic-tab re-save flow in LlmSettingsLocalView.handleSave to
call isOpenHandsProxyModel(model, '') → false, hitting the else-branch that
deletes base_url and stranding the profile (issue #1146).

Fix: add a secondary check for litellm_proxy/* models with a missing base_url
(null/undefined/empty), treating them the same as a stored proxy URL and
injecting OPENHANDS_LLM_PROXY_BASE_URL before the save request is sent.

Also adds a unit test exercising the base_url:null path.

Co-authored-by: openhands <openhands@all-hands.dev>

* test(e2e): accept agent-server 1.28 model rewrite in proxy profile test

Agent-server 1.28 normalises litellm_proxy/* → openhands/* on storage
and manages the proxy URL internally (returning base_url:null). The old
assertions hard-coded the pre-1.28 storage format (litellm_proxy/* +
explicit proxy URL), causing the test to fail on every 1.28 run.

Extract assertProxyProfileConfig() helper that accepts both storage
representations:
- litellm_proxy/* + proxyBaseUrl   (pre-1.28, guards issue #1146 regression)
- openhands/*     + null           (1.28+, server-managed routing)

The issue #1146 guard is preserved: a litellm_proxy/* profile without a
proxy URL is still flagged as a stranded profile.

Co-authored-by: openhands <openhands@all-hands.dev>

---------

Co-authored-by: openhands <openhands@all-hands.dev>
2026-06-11 21:00:05 +00:00
Engel Nystandopenhands f6ea202d56 chore: align package version with RC (#1303)
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>
2026-06-11 18:22:51 +00:00