orkestra-runtime 0.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. orkestra_runtime-0.1.2/.github/workflows/ci.yml +98 -0
  2. orkestra_runtime-0.1.2/.github/workflows/publish-to-pypi.yml +54 -0
  3. orkestra_runtime-0.1.2/.gitignore +41 -0
  4. orkestra_runtime-0.1.2/.gitleaks.toml +17 -0
  5. orkestra_runtime-0.1.2/BUILD_STATUS.md +46 -0
  6. orkestra_runtime-0.1.2/CHANGELOG.md +71 -0
  7. orkestra_runtime-0.1.2/CODE_OF_CONDUCT.md +44 -0
  8. orkestra_runtime-0.1.2/CONTRIBUTING.md +65 -0
  9. orkestra_runtime-0.1.2/FINAL_BUILD_REPORT.md +248 -0
  10. orkestra_runtime-0.1.2/LICENSE +202 -0
  11. orkestra_runtime-0.1.2/MASTERPROMPT.md +1268 -0
  12. orkestra_runtime-0.1.2/NOTICE +10 -0
  13. orkestra_runtime-0.1.2/PKG-INFO +290 -0
  14. orkestra_runtime-0.1.2/README.md +259 -0
  15. orkestra_runtime-0.1.2/ROADMAP.md +33 -0
  16. orkestra_runtime-0.1.2/SECURITY.md +28 -0
  17. orkestra_runtime-0.1.2/docs/CLI.md +101 -0
  18. orkestra_runtime-0.1.2/docs/CONCEPTS.md +73 -0
  19. orkestra_runtime-0.1.2/docs/CONFIGURATION.md +124 -0
  20. orkestra_runtime-0.1.2/docs/FAQ.md +62 -0
  21. orkestra_runtime-0.1.2/docs/INSTALL.md +66 -0
  22. orkestra_runtime-0.1.2/docs/PROVIDERS.md +71 -0
  23. orkestra_runtime-0.1.2/docs/QUICKSTART.md +93 -0
  24. orkestra_runtime-0.1.2/docs/SECURITY_MODEL.md +66 -0
  25. orkestra_runtime-0.1.2/docs/TROUBLESHOOTING.md +77 -0
  26. orkestra_runtime-0.1.2/docs/adapters/AUTHORING.md +57 -0
  27. orkestra_runtime-0.1.2/docs/adapters/PROTOCOL.md +109 -0
  28. orkestra_runtime-0.1.2/docs/architecture/ARCHITECTURE.md +230 -0
  29. orkestra_runtime-0.1.2/docs/architecture/adr/ADR-0001-language-python.md +40 -0
  30. orkestra_runtime-0.1.2/docs/architecture/adr/ADR-0002-custom-kernel-no-framework.md +37 -0
  31. orkestra_runtime-0.1.2/docs/architecture/adr/ADR-0003-persistence-sqlite-plain-sql.md +37 -0
  32. orkestra_runtime-0.1.2/docs/architecture/adr/ADR-0004-agent-integration-cli-subprocess.md +49 -0
  33. orkestra_runtime-0.1.2/docs/architecture/adr/ADR-0005-git-worktree-isolation.md +35 -0
  34. orkestra_runtime-0.1.2/docs/architecture/adr/ADR-0006-no-dynamic-plugins-v01.md +29 -0
  35. orkestra_runtime-0.1.2/docs/architecture/adr/ADR-0007-license-apache-2.md +35 -0
  36. orkestra_runtime-0.1.2/docs/architecture/adr/ADR-0008-director-pluggable-claude-default.md +33 -0
  37. orkestra_runtime-0.1.2/docs/development/ENVIRONMENT_CHANGES.md +11 -0
  38. orkestra_runtime-0.1.2/docs/development/SELF_REVIEW.md +104 -0
  39. orkestra_runtime-0.1.2/docs/development/evidence/DOGFOOD_RUN_REPORT.md +53 -0
  40. orkestra_runtime-0.1.2/docs/development/evidence/LIVE_SMOKE_REPORT.md +53 -0
  41. orkestra_runtime-0.1.2/docs/research/AGENT_INTEGRATION_RESEARCH.md +145 -0
  42. orkestra_runtime-0.1.2/docs/research/ANTIGRAVITY_CLI_RESEARCH.md +112 -0
  43. orkestra_runtime-0.1.2/docs/research/COMPETITIVE_ANALYSIS.md +82 -0
  44. orkestra_runtime-0.1.2/docs/research/ENVIRONMENT_INVENTORY.md +72 -0
  45. orkestra_runtime-0.1.2/docs/research/LICENSING_AND_NAMING_REVIEW.md +84 -0
  46. orkestra_runtime-0.1.2/docs/research/RESEARCH_METHOD.md +48 -0
  47. orkestra_runtime-0.1.2/docs/research/TECH_STACK_DECISION.md +151 -0
  48. orkestra_runtime-0.1.2/docs/research/TERMS_AND_AUTHENTICATION_REVIEW.md +115 -0
  49. orkestra_runtime-0.1.2/docs/research/samples/antigravity-print-json.json +14 -0
  50. orkestra_runtime-0.1.2/docs/research/samples/antigravity-stream-jsonl.jsonl +6 -0
  51. orkestra_runtime-0.1.2/docs/research/samples/claude-code-print-json.json +22 -0
  52. orkestra_runtime-0.1.2/docs/research/samples/codex-exec-jsonl.jsonl +5 -0
  53. orkestra_runtime-0.1.2/docs/research/samples/gemini-auth-error.json +9 -0
  54. orkestra_runtime-0.1.2/docs/security/THREAT_MODEL.md +177 -0
  55. orkestra_runtime-0.1.2/examples/many-agents/config.toml +35 -0
  56. orkestra_runtime-0.1.2/examples/three-agents/config.toml +28 -0
  57. orkestra_runtime-0.1.2/examples/two-agents/config.toml +14 -0
  58. orkestra_runtime-0.1.2/pyproject.toml +124 -0
  59. orkestra_runtime-0.1.2/src/orkestra/__init__.py +1 -0
  60. orkestra_runtime-0.1.2/src/orkestra/adapters/__init__.py +12 -0
  61. orkestra_runtime-0.1.2/src/orkestra/adapters/antigravity_cli.py +231 -0
  62. orkestra_runtime-0.1.2/src/orkestra/adapters/base.py +85 -0
  63. orkestra_runtime-0.1.2/src/orkestra/adapters/claude_code.py +211 -0
  64. orkestra_runtime-0.1.2/src/orkestra/adapters/codex_cli.py +219 -0
  65. orkestra_runtime-0.1.2/src/orkestra/adapters/external.py +160 -0
  66. orkestra_runtime-0.1.2/src/orkestra/adapters/fake.py +30 -0
  67. orkestra_runtime-0.1.2/src/orkestra/adapters/fake_worker.py +195 -0
  68. orkestra_runtime-0.1.2/src/orkestra/adapters/gemini_cli.py +232 -0
  69. orkestra_runtime-0.1.2/src/orkestra/adapters/jsonl.py +68 -0
  70. orkestra_runtime-0.1.2/src/orkestra/adapters/registry.py +42 -0
  71. orkestra_runtime-0.1.2/src/orkestra/adapters/runner.py +216 -0
  72. orkestra_runtime-0.1.2/src/orkestra/adapters/testkit.py +148 -0
  73. orkestra_runtime-0.1.2/src/orkestra/app.py +87 -0
  74. orkestra_runtime-0.1.2/src/orkestra/capabilities/__init__.py +6 -0
  75. orkestra_runtime-0.1.2/src/orkestra/capabilities/ledger.py +48 -0
  76. orkestra_runtime-0.1.2/src/orkestra/capabilities/matrix.py +87 -0
  77. orkestra_runtime-0.1.2/src/orkestra/capabilities/probes.py +164 -0
  78. orkestra_runtime-0.1.2/src/orkestra/cli/__init__.py +1 -0
  79. orkestra_runtime-0.1.2/src/orkestra/cli/main.py +685 -0
  80. orkestra_runtime-0.1.2/src/orkestra/cli/template.py +109 -0
  81. orkestra_runtime-0.1.2/src/orkestra/director/__init__.py +5 -0
  82. orkestra_runtime-0.1.2/src/orkestra/director/heuristic.py +112 -0
  83. orkestra_runtime-0.1.2/src/orkestra/director/prompts.py +147 -0
  84. orkestra_runtime-0.1.2/src/orkestra/director/service.py +253 -0
  85. orkestra_runtime-0.1.2/src/orkestra/errors.py +43 -0
  86. orkestra_runtime-0.1.2/src/orkestra/ids.py +57 -0
  87. orkestra_runtime-0.1.2/src/orkestra/kernel/__init__.py +1 -0
  88. orkestra_runtime-0.1.2/src/orkestra/kernel/dag.py +126 -0
  89. orkestra_runtime-0.1.2/src/orkestra/kernel/prepare.py +158 -0
  90. orkestra_runtime-0.1.2/src/orkestra/kernel/retry.py +46 -0
  91. orkestra_runtime-0.1.2/src/orkestra/kernel/scheduler.py +902 -0
  92. orkestra_runtime-0.1.2/src/orkestra/kernel/states.py +81 -0
  93. orkestra_runtime-0.1.2/src/orkestra/policy/__init__.py +5 -0
  94. orkestra_runtime-0.1.2/src/orkestra/policy/engine.py +117 -0
  95. orkestra_runtime-0.1.2/src/orkestra/py.typed +0 -0
  96. orkestra_runtime-0.1.2/src/orkestra/redact.py +139 -0
  97. orkestra_runtime-0.1.2/src/orkestra/report/__init__.py +5 -0
  98. orkestra_runtime-0.1.2/src/orkestra/report/final.py +144 -0
  99. orkestra_runtime-0.1.2/src/orkestra/schemas/__init__.py +84 -0
  100. orkestra_runtime-0.1.2/src/orkestra/schemas/agent.py +112 -0
  101. orkestra_runtime-0.1.2/src/orkestra/schemas/capability.py +62 -0
  102. orkestra_runtime-0.1.2/src/orkestra/schemas/common.py +65 -0
  103. orkestra_runtime-0.1.2/src/orkestra/schemas/config.py +145 -0
  104. orkestra_runtime-0.1.2/src/orkestra/schemas/decision.py +41 -0
  105. orkestra_runtime-0.1.2/src/orkestra/schemas/director.py +79 -0
  106. orkestra_runtime-0.1.2/src/orkestra/schemas/task.py +48 -0
  107. orkestra_runtime-0.1.2/src/orkestra/store/__init__.py +6 -0
  108. orkestra_runtime-0.1.2/src/orkestra/store/db.py +92 -0
  109. orkestra_runtime-0.1.2/src/orkestra/store/migrations.py +126 -0
  110. orkestra_runtime-0.1.2/src/orkestra/store/repo.py +532 -0
  111. orkestra_runtime-0.1.2/src/orkestra/verify/__init__.py +5 -0
  112. orkestra_runtime-0.1.2/src/orkestra/verify/runner.py +130 -0
  113. orkestra_runtime-0.1.2/src/orkestra/workspace/__init__.py +6 -0
  114. orkestra_runtime-0.1.2/src/orkestra/workspace/git.py +193 -0
  115. orkestra_runtime-0.1.2/src/orkestra/workspace/worktrees.py +155 -0
  116. orkestra_runtime-0.1.2/tests/__init__.py +0 -0
  117. orkestra_runtime-0.1.2/tests/adapters/__init__.py +0 -0
  118. orkestra_runtime-0.1.2/tests/adapters/test_contract.py +37 -0
  119. orkestra_runtime-0.1.2/tests/adapters/test_parsers.py +343 -0
  120. orkestra_runtime-0.1.2/tests/cli/__init__.py +0 -0
  121. orkestra_runtime-0.1.2/tests/cli/test_cli.py +206 -0
  122. orkestra_runtime-0.1.2/tests/e2e/__init__.py +0 -0
  123. orkestra_runtime-0.1.2/tests/e2e/conftest.py +70 -0
  124. orkestra_runtime-0.1.2/tests/e2e/test_orchestration.py +327 -0
  125. orkestra_runtime-0.1.2/tests/unit/__init__.py +0 -0
  126. orkestra_runtime-0.1.2/tests/unit/test_app.py +47 -0
  127. orkestra_runtime-0.1.2/tests/unit/test_capabilities.py +121 -0
  128. orkestra_runtime-0.1.2/tests/unit/test_config.py +113 -0
  129. orkestra_runtime-0.1.2/tests/unit/test_dag.py +101 -0
  130. orkestra_runtime-0.1.2/tests/unit/test_director.py +111 -0
  131. orkestra_runtime-0.1.2/tests/unit/test_fake_worker.py +183 -0
  132. orkestra_runtime-0.1.2/tests/unit/test_ids_and_redact.py +87 -0
  133. orkestra_runtime-0.1.2/tests/unit/test_policy.py +87 -0
  134. orkestra_runtime-0.1.2/tests/unit/test_probe_runner.py +97 -0
  135. orkestra_runtime-0.1.2/tests/unit/test_redact_v2.py +124 -0
  136. orkestra_runtime-0.1.2/tests/unit/test_report.py +86 -0
  137. orkestra_runtime-0.1.2/tests/unit/test_states_and_retry.py +73 -0
  138. orkestra_runtime-0.1.2/tests/unit/test_store.py +196 -0
  139. orkestra_runtime-0.1.2/tests/workspace/__init__.py +0 -0
  140. orkestra_runtime-0.1.2/tests/workspace/test_worktrees.py +168 -0
  141. orkestra_runtime-0.1.2/uv.lock +1036 -0
@@ -0,0 +1,98 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ tags: ["v*"]
7
+ pull_request:
8
+ branches: [main]
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ quality:
15
+ name: Lint, types, security
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+ - uses: astral-sh/setup-uv@v5
20
+ with:
21
+ python-version: "3.12"
22
+ - name: Sync dependencies
23
+ run: uv sync --locked
24
+ - name: Ruff format check
25
+ run: uv run ruff format --check .
26
+ - name: Ruff lint
27
+ run: uv run ruff check .
28
+ - name: Mypy (strict)
29
+ run: uv run mypy
30
+ - name: Bandit
31
+ run: uv run bandit -c pyproject.toml -r src
32
+ - name: pip-audit
33
+ run: uv run pip-audit --skip-editable
34
+ continue-on-error: false
35
+
36
+ secrets-scan:
37
+ name: Secret scan
38
+ runs-on: ubuntu-latest
39
+ steps:
40
+ - uses: actions/checkout@v4
41
+ with:
42
+ fetch-depth: 0
43
+ # Direct pinned gitleaks over full history (the wrapper action fails on
44
+ # push ranges that include the root commit).
45
+ - name: Run gitleaks (full history)
46
+ run: |
47
+ curl -sSfL -o /tmp/gitleaks.tgz \
48
+ https://github.com/gitleaks/gitleaks/releases/download/v8.24.3/gitleaks_8.24.3_linux_x64.tar.gz
49
+ tar -xzf /tmp/gitleaks.tgz -C /tmp gitleaks
50
+ /tmp/gitleaks detect --source . --redact -v
51
+
52
+ test:
53
+ name: Tests (py${{ matrix.python }} / ${{ matrix.os }})
54
+ runs-on: ${{ matrix.os }}
55
+ strategy:
56
+ fail-fast: false
57
+ matrix:
58
+ os: [ubuntu-latest, macos-latest]
59
+ python: ["3.12", "3.13"]
60
+ steps:
61
+ - uses: actions/checkout@v4
62
+ - uses: astral-sh/setup-uv@v5
63
+ with:
64
+ python-version: ${{ matrix.python }}
65
+ - name: Sync dependencies
66
+ run: uv sync --locked
67
+ - name: Configure git identity (worktree tests)
68
+ run: |
69
+ git config --global user.name "CI"
70
+ git config --global user.email "ci@example.invalid"
71
+ git config --global init.defaultBranch main
72
+ - name: Run tests with coverage
73
+ run: uv run pytest --cov=orkestra --cov-report=xml --cov-report=term
74
+ - name: Enforce coverage floor
75
+ run: uv run coverage report --fail-under=80
76
+
77
+ install-smoke:
78
+ name: Clean install smoke test
79
+ runs-on: ubuntu-latest
80
+ steps:
81
+ - uses: actions/checkout@v4
82
+ - uses: astral-sh/setup-uv@v5
83
+ with:
84
+ python-version: "3.12"
85
+ - name: Build wheel
86
+ run: uv build
87
+ - name: Install wheel into fresh venv and smoke test
88
+ run: |
89
+ uv venv /tmp/smoke
90
+ VIRTUAL_ENV=/tmp/smoke uv pip install dist/*.whl
91
+ /tmp/smoke/bin/orkestra --version
92
+ /tmp/smoke/bin/orkestra --help
93
+ git config --global user.name "CI"
94
+ git config --global user.email "ci@example.invalid"
95
+ git config --global init.defaultBranch main
96
+ mkdir /tmp/smokeproj && cd /tmp/smokeproj
97
+ /tmp/smoke/bin/orkestra init . --non-interactive
98
+ /tmp/smoke/bin/orkestra doctor || true
@@ -0,0 +1,54 @@
1
+ name: Publish to PyPI
2
+
3
+ # PyPI Trusted Publishing via GitHub OIDC — no API tokens anywhere.
4
+ # The `publish` job deploys through the protected `pypi` environment
5
+ # (required reviewer: repository owner; tag pattern v*).
6
+
7
+ on:
8
+ release:
9
+ types: [published]
10
+ workflow_dispatch:
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ jobs:
16
+ build:
17
+ name: Build distributions
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - uses: actions/checkout@v4
21
+ - uses: astral-sh/setup-uv@v5
22
+ with:
23
+ python-version: "3.12"
24
+ - name: Build sdist and wheel
25
+ run: uv build
26
+ - name: Check package metadata
27
+ run: uvx twine check --strict dist/*
28
+ - name: Smoke test the built wheel
29
+ run: |
30
+ uv venv /tmp/pubsmoke
31
+ VIRTUAL_ENV=/tmp/pubsmoke uv pip install dist/*.whl
32
+ /tmp/pubsmoke/bin/orkestra --version
33
+ - uses: actions/upload-artifact@v4
34
+ with:
35
+ name: dist
36
+ path: dist/
37
+ if-no-files-found: error
38
+
39
+ publish:
40
+ name: Publish to PyPI (requires approval)
41
+ needs: build
42
+ runs-on: ubuntu-latest
43
+ environment:
44
+ name: pypi
45
+ url: https://pypi.org/project/orkestra-runtime/
46
+ permissions:
47
+ id-token: write # OIDC token for PyPI Trusted Publishing
48
+ steps:
49
+ - uses: actions/download-artifact@v4
50
+ with:
51
+ name: dist
52
+ path: dist/
53
+ - name: Publish to PyPI
54
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,41 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ .eggs/
6
+ build/
7
+ dist/
8
+ .venv/
9
+ venv/
10
+
11
+ # Tooling caches
12
+ .pytest_cache/
13
+ .mypy_cache/
14
+ .ruff_cache/
15
+ .pyright/
16
+ .coverage
17
+ coverage.xml
18
+ htmlcov/
19
+
20
+ # Orkestra runtime state (never commit local orchestration state)
21
+ .orkestra/
22
+ *.orkestra.db
23
+ *.sqlite3
24
+
25
+ # Worktrees and scratch
26
+ .worktrees/
27
+ .scratch/
28
+
29
+ # OS
30
+ .DS_Store
31
+
32
+ # Editors
33
+ .idea/
34
+ .vscode/
35
+
36
+ # Env / secrets
37
+ .env
38
+ .env.*
39
+ *.pem
40
+ *.key
41
+ .claude/
@@ -0,0 +1,17 @@
1
+ # Gitleaks configuration for Orkestra.
2
+ # The test suite and redaction module intentionally contain FAKE
3
+ # credential-shaped strings to verify that redaction works; none are
4
+ # real secrets.
5
+
6
+ [extend]
7
+ useDefault = true
8
+
9
+ [allowlist]
10
+ description = "Intentional fake credential shapes used to test redaction"
11
+ paths = [
12
+ '''tests/unit/test_ids_and_redact\.py''',
13
+ '''tests/unit/test_redact_v2\.py''',
14
+ '''tests/unit/test_report\.py''',
15
+ '''tests/unit/test_store\.py''',
16
+ '''src/orkestra/redact\.py''',
17
+ ]
@@ -0,0 +1,46 @@
1
+ # Orkestra Build Status
2
+
3
+ **Status:** COMPLETE
4
+ **Phase:** 10 — Released (v0.1.0)
5
+ **Last updated:** 2026-07-24
6
+
7
+ ## Phase checklist
8
+
9
+ - [x] Phase 0 — Bootstrap and environment inventory
10
+ - [x] Phase 1 — Research and architecture decision (docs/research/*, ADRs)
11
+ - [x] Phase 2 — Repository and quality foundation
12
+ - [x] Phase 3 — Core kernel and persistence
13
+ - [x] Phase 4 — Adapter layer (claude-code, codex-cli, antigravity-cli,
14
+ gemini-cli, fake, external + contract kit)
15
+ - [x] Phase 5 — Git workspace and integration engine
16
+ - [x] Phase 6 — Director and capability system
17
+ - [x] Phase 7 — CLI and operator experience
18
+ - [x] Phase 8 — Policy, human gates, redaction (docker sandbox deferred
19
+ honestly to v0.2 — refused with explanation, see ROADMAP)
20
+ - [ ] Phase 9 — E2E validation and dogfooding
21
+ - [x] 15-scenario fake-agent E2E suite (2/3/5-agent runs, fallback,
22
+ review rejection/repair, gate veto, decisions, interruption/
23
+ resume, cancellation, merge-conflict recovery)
24
+ - [x] Live smoke iterations 1–3 with real claude/codex/agy: director
25
+ analysis, live probes, plan challenges verified; three kernel
26
+ defects found and fixed (dirty-repo fail-fast, orphaned
27
+ PLANNING runs, prose acceptance commands crashing the pipeline)
28
+ - [x] Full live run to COMPLETE (run_7ccfb487: gate-caught failure,
29
+ fallback repair, Codex structured review approval, human gate,
30
+ integration branch verified — evidence/LIVE_SMOKE_REPORT.md)
31
+ - [x] Controlled self-review dogfood (run_cb25ff11: codex analysis
32
+ integrated after independent claude review; second task skipped
33
+ at the human gate after bounded review cycles — evidence in
34
+ docs/development/SELF_REVIEW.md)
35
+ - [x] Phase 10 — Documentation, packaging, GitHub publication,
36
+ v0.1.0 tag + release, FINAL_BUILD_REPORT.md
37
+
38
+ ## Final quality gates
39
+
40
+ - 211 tests passing (unit, integration, E2E, CLI)
41
+ - Coverage 81% (floor 80); ruff / mypy --strict / bandit / pip-audit /
42
+ gitleaks clean; CI green on GitHub
43
+ - Live cross-vendor orchestration + dogfood evidence in
44
+ docs/development/evidence/
45
+
46
+ See FINAL_BUILD_REPORT.md for the complete evidence trail.
@@ -0,0 +1,71 @@
1
+ # Changelog
2
+
3
+ All notable changes to Orkestra are documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
7
+ (pre-1.0: minor versions may contain breaking changes, announced here).
8
+
9
+ ## [Unreleased]
10
+
11
+ ## [0.1.2] - 2026-07-24
12
+
13
+ ### Added
14
+
15
+ - PyPI publication via Trusted Publishing (GitHub OIDC): new
16
+ `publish-to-pypi.yml` workflow builds, metadata-checks, and smoke-tests
17
+ distributions, then publishes through the protected `pypi` environment
18
+ with manual approval. No API tokens are stored anywhere.
19
+ - Orkestra is now installable as `uv tool install orkestra-runtime`
20
+ (or `pip install orkestra-runtime`).
21
+
22
+ ## [0.1.1] - 2026-07-24
23
+
24
+ ### Security
25
+
26
+ - Redaction hardening, driven directly by Orkestra's own dogfood
27
+ self-review (`docs/development/SELF_REVIEW.md`):
28
+ - New provider patterns: AWS session tokens, GCP `privateKeyData`,
29
+ Azure `AccountKey`/`SharedAccessSignature`/SAS `sig=`, GitLab
30
+ `glpat-`/`glcbt-`, Slack `xapp-`, npm `npm_`/`.npmrc` `_authToken`,
31
+ PyPI `pypi-`, URL userinfo passwords (user/host preserved).
32
+ - Generic credential matcher now covers provider-prefixed and
33
+ quoted-JSON keys (`AWS_SESSION_TOKEN=`, `"password": "..."`, plain
34
+ `token=`, camelCase `apiKey`) while skipping benign values
35
+ (status words, `${VAR}` templates, absolute paths, masked values)
36
+ and no longer over-consumes past commas.
37
+ - New `redact_structure()` recursively redacts sensitive keys in
38
+ structured event data BEFORE JSON serialization; wired into event
39
+ persistence.
40
+ - Table-driven positive/negative regression suite covering every
41
+ verified miss and false positive from the review.
42
+
43
+ ## [0.1.0] - 2026-07-24
44
+
45
+ ### Added
46
+
47
+ - Deterministic orchestration kernel: persistent SQLite state, task DAG
48
+ with cycle detection, async scheduler with bounded retries, backoff,
49
+ fallback agents, cancellation, pause/resume, and crash recovery.
50
+ - Agent adapter layer with first-party adapters for Claude Code, Codex
51
+ CLI, and Gemini CLI; scripted fake adapter; external-command adapter
52
+ protocol (`orkestra-jsonl/1`); adapter contract test kit.
53
+ - Git workspace engine: per-task worktree isolation, base-commit
54
+ tracking, hook-disabled Git execution, diff path-policy checks,
55
+ no-ff integration with conflict detection, interrupted-operation
56
+ recovery.
57
+ - Director system (default: Claude Code) with schema-validated decision
58
+ envelopes, deterministic heuristic fallback planner, capability
59
+ probes with budgets and caching, weighted capability matrix with
60
+ confidence, agent performance ledger, and dynamic reassignment.
61
+ - Policy engine with safe defaults, explicit opt-in elevated modes,
62
+ independent-review enforcement (implementer ≠ reviewer), and
63
+ deterministic verification gates that agents cannot override.
64
+ - Human gates: persisted decision records, `orkestra decisions` /
65
+ `orkestra approve`, resume-after-decision workflow.
66
+ - CLI: `init`, `doctor`, `agents list|probe`, `analyze`, `plan`, `run`,
67
+ `status`, `logs`, `decisions`, `approve`, `pause`, `resume`, `cancel`,
68
+ `report`.
69
+ - Secret redaction for logs, reports, and support bundles.
70
+ - Full research corpus, architecture documentation, ADRs, and threat
71
+ model.
@@ -0,0 +1,44 @@
1
+ # Code of Conduct
2
+
3
+ ## Our pledge
4
+
5
+ We as members, contributors, and leaders pledge to make participation in
6
+ the Orkestra community a harassment-free experience for everyone,
7
+ regardless of age, body size, visible or invisible disability, ethnicity,
8
+ sex characteristics, gender identity and expression, level of experience,
9
+ education, socio-economic status, nationality, personal appearance, race,
10
+ religion, or sexual identity and orientation.
11
+
12
+ ## Our standards
13
+
14
+ Examples of behavior that contributes to a positive environment:
15
+
16
+ - Demonstrating empathy and kindness toward other people
17
+ - Being respectful of differing opinions, viewpoints, and experiences
18
+ - Giving and gracefully accepting constructive feedback
19
+ - Accepting responsibility and apologizing to those affected by our
20
+ mistakes, and learning from the experience
21
+ - Focusing on what is best for the overall community
22
+
23
+ Examples of unacceptable behavior:
24
+
25
+ - The use of sexualized language or imagery, and sexual attention or
26
+ advances of any kind
27
+ - Trolling, insulting or derogatory comments, and personal or political
28
+ attacks
29
+ - Public or private harassment
30
+ - Publishing others' private information without their explicit permission
31
+ - Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Enforcement
35
+
36
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
37
+ reported to the project maintainers via GitHub. All complaints will be
38
+ reviewed and investigated promptly and fairly. Maintainers are obligated
39
+ to respect the privacy and security of the reporter of any incident.
40
+
41
+ ## Attribution
42
+
43
+ This Code of Conduct is adapted from the
44
+ [Contributor Covenant](https://www.contributor-covenant.org), version 2.1.
@@ -0,0 +1,65 @@
1
+ # Contributing to Orkestra
2
+
3
+ Thanks for your interest in improving Orkestra.
4
+
5
+ ## Development setup
6
+
7
+ Requirements: Python ≥ 3.12, [uv](https://docs.astral.sh/uv/), Git.
8
+
9
+ ```bash
10
+ git clone https://github.com/andyyaro/orkestra
11
+ cd orkestra
12
+ uv sync # creates .venv with dev dependencies
13
+ uv run pytest # run the test suite
14
+ ```
15
+
16
+ ## Quality gates (run before every PR)
17
+
18
+ ```bash
19
+ uv run ruff format --check .
20
+ uv run ruff check .
21
+ uv run mypy
22
+ uv run pytest --cov=orkestra
23
+ uv run bandit -c pyproject.toml -r src
24
+ ```
25
+
26
+ CI runs the same commands; PRs must be green.
27
+
28
+ ## Ground rules
29
+
30
+ - **Determinism first.** The kernel must never depend on LLM output for
31
+ policy, state transitions, or verification. Director/agent output is
32
+ untrusted input — validate it.
33
+ - **No fixed-agent-count assumptions.** Code, schemas, and tests must work
34
+ for 2 agents and for N agents. Never hard-code three.
35
+ - **Security posture.** Subprocesses use argument arrays (no `shell=True`);
36
+ external paths are resolved and scope-checked; Git runs hook-disabled;
37
+ secrets are redacted from anything persisted.
38
+ - **Evidence over self-report.** New agent-facing behavior needs a fake- or
39
+ contract-test demonstrating the failure modes (timeout, garbage output,
40
+ non-zero exit), not just the happy path.
41
+ - **Tests accompany code.** Bug fixes include a regression test.
42
+
43
+ ## Adding an agent adapter
44
+
45
+ See `docs/adapters/AUTHORING.md`. Implement the adapter contract, then run
46
+ the contract test kit:
47
+
48
+ ```bash
49
+ uv run pytest tests/adapters/test_contract.py --adapter your-adapter
50
+ ```
51
+
52
+ ## Commit / PR conventions
53
+
54
+ - Small, atomic commits with imperative subjects.
55
+ - PRs describe *what* and *why*; link issues.
56
+ - ADRs (`docs/architecture/adr/`) for decisions that constrain future work.
57
+
58
+ ## Code of conduct
59
+
60
+ See `CODE_OF_CONDUCT.md`. Be excellent to each other.
61
+
62
+ ## License
63
+
64
+ Contributions are accepted under Apache-2.0 (inbound = outbound, per
65
+ Apache-2.0 §5). No CLA.