Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ All notable changes to OpenOrbit are documented in this file.
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
and this project uses [Semantic Versioning](https://semver.org/).

## [0.12.2] - 2026-09-25

### Fixed

- Fixed packaged applications failing to find their bundled frontend and SDK documentation after a pip installation.

## [0.12.1] - 2026-09-24

### Fixed
Expand Down
15 changes: 13 additions & 2 deletions backend/app/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,19 @@ async def application_lifespan(_: FastAPI):
# leftover local pipeline as interrupted when it starts.
store = ConsoleStore(recover_interrupted_runs=True)
assistant_ui_broker = AssistantUiBroker()
WEB_DIST = Path(__file__).resolve().parents[2] / "frontend" / "dist"
SDK_DOCS_DIST = Path(__file__).resolve().parents[2] / "site"


def bundled_directory(relative_path: Path, roots: tuple[Path, ...] | None = None) -> Path:
"""Find bundled files in a wheel, with a source checkout as the fallback."""
if roots is None:
module_path = Path(__file__).resolve()
roots = (module_path.parents[1], module_path.parents[2])
candidates = tuple(root / relative_path for root in roots)
return next((candidate for candidate in candidates if candidate.exists()), candidates[-1])


WEB_DIST = bundled_directory(Path("frontend") / "dist")
SDK_DOCS_DIST = bundled_directory(Path("site"))


def safely(action):
Expand Down
14 changes: 14 additions & 0 deletions backend/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,20 @@ def test_health_is_available():
assert response.json() == {"status": "ok"}


def test_bundled_directory_prefers_wheel_files_over_source_checkout(tmp_path):
installed = tmp_path / "site-packages"
source = tmp_path / "source"
source_dist = source / "frontend" / "dist"
source_dist.mkdir(parents=True)

assert main_module.bundled_directory(Path("frontend") / "dist", (installed, source)) == source_dist

installed_dist = installed / "frontend" / "dist"
installed_dist.mkdir(parents=True)

assert main_module.bundled_directory(Path("frontend") / "dist", (installed, source)) == installed_dist


def test_visual_runner_catalog_is_served_from_sdk_registry():
response = TestClient(app).get("/api/visual-runners/catalog")

Expand Down
2 changes: 1 addition & 1 deletion frontend/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "agent-improvement-console-ui",
"private": true,
"version": "0.12.1",
"version": "0.12.2",
"type": "module",
"scripts": {
"dev": "vite",
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "openorbit",
"version": "0.12.1",
"version": "0.12.2",
"description": "Open control plane for recurring AI automations",
"license": "MIT",
"type": "module",
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "hatchling.build"

[project]
name = "openorbit"
version = "0.12.1"
version = "0.12.2"
description = "Open control plane for recurring AI automations"
readme = "README.md"
license = "MIT"
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading