Python 3.13+ and Node 24+ are required.
python -m venv .venv
.venv/bin/pip install -e '.[dev]'
.venv/bin/python -m pytest
.venv/bin/ruff check orbit/ backend/ tests/
corepack enable
pnpm install
pnpm --filter agent-improvement-console-ui run buildFor the packaged local-app path, run orbit run.
On Windows, activate the environment with .venv\\Scripts\\Activate.ps1 and
use .venv\\Scripts\\python.exe.
Start OpenOrbit with the sample data expected by
frontend/e2e/orbit-ui.spec.ts, then run from the repository root:
PLAYWRIGHT_BASE_URL=http://127.0.0.1:3000 pnpm --filter agent-improvement-console-ui exec playwright testSet PLAYWRIGHT_BASE_URL to the URL printed by your running app if it uses
another port. When omitted (or empty), the tests use http://127.0.0.1:3001.
This changes the target URL only; the existing scenarios still require their
configured repositories and sample evaluation data.
The repository checks Python with Ruff, React with ESLint, and validates the React application with a Vite production build before each commit.
.venv/bin/pre-commit install
.venv/bin/pre-commit run --all-filesThe React hook needs pnpm install to have been run once.
Every release follows the same protected sequence so that a version tag always
identifies a verified main commit.
- Create
release/vX.Y.Zfrom the currentmainbranch. - Update the version in
package.json,frontend/package.json, andpyproject.toml, then add the release entry toCHANGELOG.md. - Open a pull request from the release branch to
mainand wait for all GitHub Actions checks to pass. - Merge the pull request, then wait for the CI run triggered on
mainto pass as well. - Create an annotated
vX.Y.Ztag at that verifiedmaincommit, push it, and create the GitHub Release from the matching changelog entry. The frontend-inclusive PyPI wheel is published from theinsighta-cloud/openorbitpublishing workflow through Trusted Publishing. - Delete superseded tags only after the new tag and GitHub Release are available. Never move or overwrite an existing release tag.
The release branch is the only place where release-preparation changes are
made. A tag must never be created from an unmerged branch or before main CI
has completed successfully.
- Keep public behavior bundles independent of proprietary source, prompts, and fixtures.
- Put declarative behavior contracts in
orbit/resources/definitions/, prompt templates inorbit/resources/prompts/, and non-secret sample inputs inorbit/resources/fixtures/. - Commands must be token arrays; do not introduce shell-string execution.
- Add tests for behavior or schema changes.
- Put shared, static UI copy in
frontend/src/locales/index.ts; do not add new user-facing UI strings inline in a component. - Add every new locale key to the English, Korean, and Japanese dictionaries with the same nesting and key name. Group keys by feature rather than adding unrelated keys to an existing group.
- Use the selected application locale (
orbit.locale) as the source of truth.resolveLocalemust continue to fall back to English for an unsupported or missing value. - Use
intlLocalesfor locale-sensitive date, time, and number formatting. - Do not treat runtime content as a locale resource. For example, an AI translation of a runner template or quick start is cached display data; static controls such as Translate, Show original, and error messages remain locale keys.
- Translation must not change executable or identity-bearing values: IDs, parameter keys and values, source code, URLs, paths, and API payloads retain their original values.
Contributions are licensed under MIT.