Python 3.11+ and Node 20+ are required.
python -m venv .venv
.venv/bin/pip install -e '.[dev]'
.venv/bin/python -m pytest
.venv/bin/ruff check orbit/ backend/ tests/
npm --prefix frontend install
npm --prefix frontend run buildFor the packaged local-app path, run npm install at the repository root and
then npx orbit-agent-console run --no-open.
On Windows, activate the environment with .venv\\Scripts\\Activate.ps1 and
use .venv\\Scripts\\python.exe.
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 npm --prefix frontend 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.