#17260·OpenHands

[Feature]: Add Refresh Support for Installed Canvas Apps

Author: fattanehtCreated Sep 10, 2026Updated Sep 17, 2026
Labelsenhancementready-for-dev

Problem or Motivation

Canvas Apps installed from a local path are copied into the Agent Server’s installed extensions directory. When the source files change during development, Canvas continues using the previously installed bundle.

As a result, developers must uninstall, reinstall, and re-enable the App after every change. This makes the local development workflow unnecessarily slow.

A Refresh action should reload and validate the App from its original source, preserve its enabled state, and reactivate the updated bundle without requiring a full uninstall and reinstall.

Desired Behavior

Each installed Canvas App should provide a Refresh action that:

  • Reloads the App from its original local or Git source.
  • Revalidates canvas-extension.json and the entrypoint.
  • Preserves the App’s enabled or disabled state.
  • Disposes the currently active instance and loads the updated bundle when enabled.
  • Reloads the bundle even when its manifest version has not changed.
  • Displays a clear success message or validation error.

Acceptance Criteria

  • Every installed Canvas App has a visible Refresh action.
  • Refresh works for both backend-local paths and Git sources.
  • The App is reloaded from its original installation source.
  • The manifest and entrypoint are validated before replacing the installed version.
  • A failed refresh leaves the currently installed App unchanged.
  • The App’s enabled or disabled state is preserved.
  • An enabled App is disposed and reactivated with the updated bundle.
  • Changes are loaded even when the manifest version remains unchanged.
  • Canvas displays clear success and failure feedback.
  • Automated tests cover successful refresh, validation failure, state preservation, and runtime reactivation.

Alternatives Considered

No response

Additional Context

No response