@jterrats/open-orchestra 0.1.0

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 (93) hide show
  1. package/AGENTS.md +151 -0
  2. package/CLAUDE.md +157 -0
  3. package/README.md +60 -0
  4. package/bin/orchestra.js +8 -0
  5. package/dist/args.d.ts +3 -0
  6. package/dist/args.js +30 -0
  7. package/dist/args.js.map +1 -0
  8. package/dist/cli.d.ts +2 -0
  9. package/dist/cli.js +190 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/commands.d.ts +44 -0
  12. package/dist/commands.js +883 -0
  13. package/dist/commands.js.map +1 -0
  14. package/dist/constants.d.ts +15 -0
  15. package/dist/constants.js +69 -0
  16. package/dist/constants.js.map +1 -0
  17. package/dist/defaults.d.ts +72 -0
  18. package/dist/defaults.js +694 -0
  19. package/dist/defaults.js.map +1 -0
  20. package/dist/fs-utils.d.ts +8 -0
  21. package/dist/fs-utils.js +35 -0
  22. package/dist/fs-utils.js.map +1 -0
  23. package/dist/model-providers.d.ts +19 -0
  24. package/dist/model-providers.js +78 -0
  25. package/dist/model-providers.js.map +1 -0
  26. package/dist/types.d.ts +550 -0
  27. package/dist/types.js +2 -0
  28. package/dist/types.js.map +1 -0
  29. package/dist/validation.d.ts +10 -0
  30. package/dist/validation.js +163 -0
  31. package/dist/validation.js.map +1 -0
  32. package/dist/web-api.d.ts +16 -0
  33. package/dist/web-api.js +220 -0
  34. package/dist/web-api.js.map +1 -0
  35. package/dist/web-chart-contracts.d.ts +13 -0
  36. package/dist/web-chart-contracts.js +13 -0
  37. package/dist/web-chart-contracts.js.map +1 -0
  38. package/dist/web-console.d.ts +1 -0
  39. package/dist/web-console.js +232 -0
  40. package/dist/web-console.js.map +1 -0
  41. package/dist/web-evidence.d.ts +25 -0
  42. package/dist/web-evidence.js +67 -0
  43. package/dist/web-evidence.js.map +1 -0
  44. package/dist/web-playwright.d.ts +3 -0
  45. package/dist/web-playwright.js +14 -0
  46. package/dist/web-playwright.js.map +1 -0
  47. package/dist/web-roles.d.ts +33 -0
  48. package/dist/web-roles.js +70 -0
  49. package/dist/web-roles.js.map +1 -0
  50. package/dist/workflow-gates.d.ts +7 -0
  51. package/dist/workflow-gates.js +291 -0
  52. package/dist/workflow-gates.js.map +1 -0
  53. package/dist/workflow-services.d.ts +56 -0
  54. package/dist/workflow-services.js +1240 -0
  55. package/dist/workflow-services.js.map +1 -0
  56. package/dist/workspace-validator.d.ts +6 -0
  57. package/dist/workspace-validator.js +189 -0
  58. package/dist/workspace-validator.js.map +1 -0
  59. package/dist/workspace.d.ts +10 -0
  60. package/dist/workspace.js +72 -0
  61. package/dist/workspace.js.map +1 -0
  62. package/docs/multi-agent-orchestrator-backlog.md +445 -0
  63. package/docs/multi-agent-orchestrator-sprint-1.md +433 -0
  64. package/docs/orchestra-mvp.md +176 -0
  65. package/package.json +63 -0
  66. package/rules/agent-collaboration.mdc +58 -0
  67. package/rules/agent-roles.mdc +105 -0
  68. package/rules/ai-assisted-development.mdc +31 -0
  69. package/rules/api-design.mdc +31 -0
  70. package/rules/architecture-decisions.mdc +27 -0
  71. package/rules/code-review-engineering.mdc +34 -0
  72. package/rules/concurrency-async.mdc +32 -0
  73. package/rules/configuration-management.mdc +31 -0
  74. package/rules/data-modeling-domain.mdc +31 -0
  75. package/rules/delivery-quality-gates.mdc +40 -0
  76. package/rules/dependency-management.mdc +31 -0
  77. package/rules/devops-tooling.mdc +55 -0
  78. package/rules/documentation-standards.mdc +26 -0
  79. package/rules/dry-clean-code.mdc +30 -0
  80. package/rules/error-handling.mdc +28 -0
  81. package/rules/frontend-engineering.mdc +32 -0
  82. package/rules/git-discipline.mdc +39 -0
  83. package/rules/infra-data-encryption.mdc +81 -0
  84. package/rules/performance-reliability.mdc +32 -0
  85. package/rules/readiness-done.mdc +32 -0
  86. package/rules/release-rollback.mdc +32 -0
  87. package/rules/rule-composition.mdc +28 -0
  88. package/rules/security-guardrails.mdc +37 -0
  89. package/rules/solid-architecture.mdc +32 -0
  90. package/rules/static-analysis-githooks.mdc +32 -0
  91. package/rules/testing-discipline.mdc +42 -0
  92. package/rules/ux-ui-product-experience.mdc +51 -0
  93. package/rules/work-intake-sequencing.mdc +39 -0
package/AGENTS.md ADDED
@@ -0,0 +1,151 @@
1
+ # Engineering Standards — Codex
2
+
3
+ > Stack-agnostic guardrails for all projects. Managed by Open Orchestra.
4
+
5
+ ## Rule Composition
6
+
7
+ - Keep root files concise. Put detailed guidance in focused `rules/*.mdc` files and reference only the operating principles here.
8
+ - Treat specialized rule files like skills: load the smallest relevant set for the task, and load roles, collaboration, testing, security, and delivery gates for broad delivery work.
9
+ - Detailed rules live in `rules/*.mdc`; use the root file as an index and universal baseline.
10
+
11
+ ## Work Intake & Sequencing
12
+
13
+ - Before each work block, confirm the GitHub issue exists, is technically refined, and provides the Backlog Item ID.
14
+ - Refine expected domain/model changes, service/integration changes, controller/entry-point changes, data flow, risks, and test evidence before coding.
15
+ - Implement in order: models/domain first, service/integration second, controllers/entry points third, evidence and handoff last.
16
+ - Run Security review when work touches auth, secrets, PII, file paths, shell execution, network calls, dependencies, TLS, cookies, sessions, CORS, webhooks, or infrastructure.
17
+
18
+ ## UX/UI Product Experience
19
+
20
+ - User-facing work must be mobile-first, responsive, accessible, and designed around complete end-user flows.
21
+ - Screens must include friendly copy, clear next steps, tooltips for unclear controls, and usable loading, empty, error, success, and recovery states.
22
+ - Game UI must teach controls, objectives, feedback loops, and failure recovery through contextual guides or progressive prompts.
23
+ - UI delivery should include screenshots or recordings for key responsive breakpoints when practical.
24
+
25
+ ## SOLID & Clean Architecture
26
+
27
+ - **SRP**: One module = one reason to change. Max 300 lines/file, 30 lines/function, 5 params.
28
+ - **OCP**: Data-driven designs over per-variant functions. Handler maps over large switch blocks (>5 cases).
29
+ - **LSP**: Subclasses honor parent contracts. Never override to throw "not supported".
30
+ - **ISP**: No `any`, `object`, or `Record<string, unknown>` in public APIs. Use narrow types and generics.
31
+ - **DIP**: Import from barrel exports, not deep paths. Static imports only — no `require()` in TypeScript.
32
+ - **Separation of Concerns**: View = layout + events. Service = orchestration. Data = I/O + queries.
33
+
34
+ ## DRY & Clean Code
35
+
36
+ - Single Source of Truth for all data, types, and config. Never copy-paste across packages.
37
+ - Extract a function when two blocks share >5 identical lines.
38
+ - Names reveal intent: `validateOrderItems()` not `processData()`. Booleans: `is`/`has`/`can`/`should`.
39
+ - No hardcoded timeouts, CLI commands, or error messages. Use named constants.
40
+ - Never commit dead code, `console.log` debris, or lint suppressions without a linked issue.
41
+ - Comments explain **why**, not **what**. Delete obvious comments.
42
+
43
+ ## Development Engineering
44
+
45
+ - APIs are product contracts: define request, response, error shape, auth, pagination, rate limits, compatibility, and idempotency before implementation.
46
+ - Data models must use domain language, explicit invariants, clear ownership, safe migrations, and indexes based on real query patterns.
47
+ - Frontend code must separate presentation, state, data access, and domain logic while preserving accessibility and responsive behavior.
48
+ - Performance-sensitive work needs budgets, hot-path review, caching ownership, timeouts, retries, backoff, and measurement evidence.
49
+ - Async workflows must be idempotent, observable, retry-safe, and explicit about ordering, partial failure, and dead-letter handling.
50
+ - Config must be typed, centralized, environment-isolated, and validated at startup; feature flags need owners, rollout, and cleanup plans.
51
+ - AI-assisted code must be grounded in the existing codebase, scoped to the agreed plan, tested, reviewed, and treated as untrusted until verified.
52
+
53
+ ## DevOps Tooling & Operations
54
+
55
+ - Choose DevOps tools by capability: IaC, CI/CD, GitOps/deploy, orchestration, scalability, downtime strategy, observability, alerting, SLOs, FinOps, security, secrets, backups, load testing, and synthetic monitoring.
56
+ - Non-trivial designs must include scalability, downtime, observability, security, cost, and recovery considerations.
57
+ - Production services need actionable dashboards and alerts for availability, latency, errors, saturation, cost/capacity, and business-critical signals.
58
+ - Rollouts must define strategy, rollback, feature flags, migrations, ownership, RTO/RPO when relevant, and post-release monitoring.
59
+
60
+ ## Security — Non-Negotiable
61
+
62
+ - **No shell interpolation.** Use `execFile`/`spawn` with args arrays, not `exec` with template literals.
63
+ - **No raw innerHTML with user data.** Escape or use `textContent` + `createElement`.
64
+ - **Validate URLs** (`https://` only before `fetch()`). Validate file paths (no traversal).
65
+ - **Never hardcode secrets.** Use env vars or secret managers. Rotate if accidentally committed.
66
+ - Never expose stack traces, internal paths, or DB errors to users.
67
+ - Static analysis and secret scanning must run before commit and in CI.
68
+
69
+ ## Data, Infrastructure & Encryption
70
+
71
+ - **Encrypt at rest**: all databases, object storage, and backups must use AES-256 or equivalent. Enable by default.
72
+ - **Encrypt in transit**: TLS 1.2+ for all connections. No plain HTTP, no self-signed certs in production.
73
+ - **Passwords**: never store plaintext. Use bcrypt/scrypt/argon2 with per-user salt. Never use MD5/SHA for passwords.
74
+ - **PII & sensitive data**: classify fields at design time. Apply column-level encryption or tokenization for SSN, credit cards, health data.
75
+ - **Secrets management**: use a vault (AWS Secrets Manager, Azure Key Vault, HashiCorp Vault). Never env vars in container images.
76
+ - **Environment segregation**: dev/staging/prod must be isolated (separate accounts/subscriptions, separate credentials, separate networks).
77
+ - **Infrastructure as Code**: all infra must be reproducible via IaC (Terraform, Pulumi, CloudFormation). No manual console changes in staging/prod.
78
+ - **Least privilege**: every service, user, and CI runner gets the minimum permissions needed. Review IAM quarterly.
79
+ - **Database migrations**: version-controlled, idempotent, reversible. Never run DDL manually in production.
80
+ - **Backups & DR**: automated daily backups with tested restore. Define RPO/RTO per environment.
81
+
82
+ ## Testing
83
+
84
+ - Write tests before or alongside implementation. One assertion per test. Name as specifications.
85
+ - **Arrange → Act → Assert.** Deterministic: no clock, network, or randomness without seeding.
86
+ - Target 90%+ coverage for business logic. Page Object pattern for E2E.
87
+ - Every development task must include unit tests for new or changed business logic before QA handoff.
88
+ - Prefer Playwright for browser-based E2E, smoke, and regression automation.
89
+
90
+ ## Error Handling
91
+
92
+ - Empty `catch {}` is forbidden. Log, propagate, or convert to user-friendly message.
93
+ - Operational errors: handle gracefully. Programmer errors: crash fast, log, fix.
94
+ - Include context in logs: operation name, IDs, duration.
95
+
96
+ ## Agent Roles
97
+
98
+ - Use roles to force complete thinking, not to create silos. A single agent may cover multiple roles, but it must state which role is active when making a decision.
99
+ - Start non-trivial tasks by identifying the needed roles and the lead role. Do not activate every role by default.
100
+ - **Product Owner**: user value, acceptance criteria, scope boundaries, release readiness.
101
+ - **Product Manager**: product strategy, trade-offs, sequencing, success metrics.
102
+ - **Analyst**: requirements discovery, domain modeling, workflows, edge cases.
103
+ - **Architect**: system boundaries, integration contracts, data flow, maintainability.
104
+ - **Developer**: implementation quality, local consistency, typed and tested code.
105
+ - **QA**: verification strategy, regression risk, release confidence.
106
+ - **DevOps**: deployment, CI/CD, observability, rollback, operational readiness.
107
+ - **Security**: threat modeling, data classification, identity, secrets, dependency risk.
108
+ - **UX/UI Designer**: user experience, accessibility, responsive behavior, UI copy, and flow clarity.
109
+ - **SRE**: SLOs, error budgets, incident response, capacity, resilience, and production reliability.
110
+ - **Data Engineer/Analyst**: pipelines, analytics, reporting definitions, data quality, lineage, and metric correctness.
111
+ - **DBA**: database performance, indexes, locking, migrations, replication, backups, and restore safety.
112
+ - **Tech Lead/Engineering Manager**: technical coordination, sequencing, ownership, integration, and delivery coherence.
113
+ - **Release Manager**: release coordination, rollout, rollback, communication, and go/no-go checklist.
114
+ - **Support/Customer Success**: customer impact, support readiness, known issues, FAQs, and feedback loops.
115
+ - **Compliance/Privacy**: regulatory requirements, PII, retention, consent, auditability, and data processing risk.
116
+ - **Content/Technical Writer**: user docs, technical docs, runbooks, release notes, API examples, and help content.
117
+ - **Game Designer**: mechanics, progression, difficulty, economy, onboarding, feedback loops, and player engagement.
118
+
119
+ ## Agent Collaboration
120
+
121
+ - Agents must collaborate through explicit artifacts and review checkpoints, not isolated workstreams.
122
+ - Start with a shared task brief: goal, backlog item, constraints, assumptions, risks, and definition of done.
123
+ - Before implementation, discuss the proposed solution and architecture with the user: scope, modules, data flow, risks, trade-offs, test strategy, and expected evidence.
124
+ - Product Owner and Analyst define acceptance criteria before Developer or QA treat the task as ready.
125
+ - Architect and Security review designs before implementation when work touches boundaries, data, auth, infra, or external integrations.
126
+ - UX, SRE, DBA, Release, Compliance, Technical Writer, and Game Designer review when their ownership area is impacted.
127
+ - Every handoff must include: status, touched files/components, decisions, risks, test evidence, and remaining work.
128
+ - Developer-to-QA handoff must include unit tests, exact test commands, known gaps, and recommended Playwright coverage.
129
+ - Parallel work must be split by stable boundaries. Avoid duplicate edits to the same files; if overlap is unavoidable, assign one integration owner.
130
+ - Review findings must include severity, affected artifact, expected behavior, actual risk, and a concrete recommendation.
131
+ - Product, technical, verification, and security conflicts are resolved by Product Owner, Architect, QA, and Security respectively.
132
+
133
+ ## Delivery Quality Gates
134
+
135
+ - Work must meet Definition of Ready before implementation and Definition of Done before release.
136
+ - Development is complete only after developer verification, QA review, automation planning, and evidence capture.
137
+ - Code review must verify behavior, data safety, security, reliability, tests, user impact, and evidence before style.
138
+ - QA must produce a test plan covering acceptance criteria, regression areas, edge cases, data setup, and environment assumptions.
139
+ - Completed delivery must include evidence: commands run, pass/fail result, logs, screenshots, traces, videos, and unresolved risks when relevant.
140
+ - Product Owner gives go/no-go using QA results, automation status, unresolved defects, and accepted risks.
141
+ - Important architecture choices need lightweight ADRs. Releases must include rollback, observability, and documentation updates when impacted.
142
+ - Dependencies are treated as product risk: justify additions, pin via lockfiles, scan for CVEs, and keep updates atomic.
143
+
144
+ ## Git Discipline
145
+
146
+ - Each commit compiles and passes tests. One logical change per commit.
147
+ - A version-controlled pre-commit hook must run static analysis before every commit.
148
+ - Never bypass hooks with `--no-verify` unless the user explicitly approves and a follow-up item records the reason.
149
+ - Ask for **Backlog Item ID** first. Use Conventional Commits with backlog scope: `type(ID): short description`.
150
+ - Mark breaking changes with `!` and a `BREAKING CHANGE:` footer.
151
+ - Keep PRs <400 lines. Review your own diff before requesting review.
package/CLAUDE.md ADDED
@@ -0,0 +1,157 @@
1
+ # Engineering Standards — Claude Code
2
+
3
+ > Stack-agnostic guardrails for all projects. Managed by Open Orchestra.
4
+
5
+ ## Rule Composition
6
+
7
+ - Keep root files concise. Put detailed guidance in focused `rules/*.mdc` files and reference only the operating principles here.
8
+ - Treat specialized rule files like skills: load the smallest relevant set for the task, and load roles, collaboration, testing, security, and delivery gates for broad delivery work.
9
+ - Detailed rules live in `rules/*.mdc`; use the root file as an index and universal baseline.
10
+
11
+ ## Work Intake & Sequencing
12
+
13
+ - Before each work block, confirm the GitHub issue exists, is technically refined, and provides the Backlog Item ID.
14
+ - Refine expected domain/model changes, service/integration changes, controller/entry-point changes, data flow, risks, and test evidence before coding.
15
+ - Implement in order: models/domain first, service/integration second, controllers/entry points third, evidence and handoff last.
16
+ - Run Security review when work touches auth, secrets, PII, file paths, shell execution, network calls, dependencies, TLS, cookies, sessions, CORS, webhooks, or infrastructure.
17
+
18
+ ## UX/UI Product Experience
19
+
20
+ - User-facing work must be mobile-first, responsive, accessible, and designed around complete end-user flows.
21
+ - Screens must include friendly copy, clear next steps, tooltips for unclear controls, and usable loading, empty, error, success, and recovery states.
22
+ - Game UI must teach controls, objectives, feedback loops, and failure recovery through contextual guides or progressive prompts.
23
+ - UI delivery should include screenshots or recordings for key responsive breakpoints when practical.
24
+
25
+ ## SOLID & Clean Architecture
26
+
27
+ - **SRP**: One module = one reason to change. Max 300 lines/file, 30 lines/function, 5 params.
28
+ - **OCP**: Data-driven designs over per-variant functions. Handler maps over large switch blocks (>5 cases).
29
+ - **LSP**: Subclasses honor parent contracts. Never override to throw "not supported".
30
+ - **ISP**: No `any`, `object`, or `Record<string, unknown>` in public APIs. Use narrow types and generics.
31
+ - **DIP**: Import from barrel exports, not deep paths. Static imports only — no `require()` in TypeScript.
32
+ - **Separation of Concerns**: View = layout + events. Service = orchestration. Data = I/O + queries.
33
+
34
+ ## DRY & Clean Code
35
+
36
+ - Single Source of Truth for all data, types, and config. Never copy-paste across packages.
37
+ - Extract a function when two blocks share >5 identical lines.
38
+ - Names reveal intent: `validateOrderItems()` not `processData()`. Booleans: `is`/`has`/`can`/`should`.
39
+ - No hardcoded timeouts, CLI commands, or error messages. Use named constants.
40
+ - Never commit dead code, `console.log` debris, or lint suppressions without a linked issue.
41
+ - Comments explain **why**, not **what**. Delete obvious comments.
42
+
43
+ ## Development Engineering
44
+
45
+ - APIs are product contracts: define request, response, error shape, auth, pagination, rate limits, compatibility, and idempotency before implementation.
46
+ - Data models must use domain language, explicit invariants, clear ownership, safe migrations, and indexes based on real query patterns.
47
+ - Frontend code must separate presentation, state, data access, and domain logic while preserving accessibility and responsive behavior.
48
+ - Performance-sensitive work needs budgets, hot-path review, caching ownership, timeouts, retries, backoff, and measurement evidence.
49
+ - Async workflows must be idempotent, observable, retry-safe, and explicit about ordering, partial failure, and dead-letter handling.
50
+ - Config must be typed, centralized, environment-isolated, and validated at startup; feature flags need owners, rollout, and cleanup plans.
51
+ - AI-assisted code must be grounded in the existing codebase, scoped to the agreed plan, tested, reviewed, and treated as untrusted until verified.
52
+
53
+ ## DevOps Tooling & Operations
54
+
55
+ - Choose DevOps tools by capability: IaC, CI/CD, GitOps/deploy, orchestration, scalability, downtime strategy, observability, alerting, SLOs, FinOps, security, secrets, backups, load testing, and synthetic monitoring.
56
+ - Non-trivial designs must include scalability, downtime, observability, security, cost, and recovery considerations.
57
+ - Production services need actionable dashboards and alerts for availability, latency, errors, saturation, cost/capacity, and business-critical signals.
58
+ - Rollouts must define strategy, rollback, feature flags, migrations, ownership, RTO/RPO when relevant, and post-release monitoring.
59
+
60
+ ## Security — Non-Negotiable
61
+
62
+ - **No shell interpolation.** Use `execFile`/`spawn` with args arrays, not `exec` with template literals.
63
+ - **No raw innerHTML with user data.** Escape or use `textContent` + `createElement`.
64
+ - **Validate URLs** (`https://` only before `fetch()`). Validate file paths (no traversal).
65
+ - **Never hardcode secrets.** Use env vars or secret managers. Rotate if accidentally committed.
66
+ - Never expose stack traces, internal paths, or DB errors to users.
67
+ - Static analysis and secret scanning must run before commit and in CI.
68
+
69
+ ## Data, Infrastructure & Encryption
70
+
71
+ - **Encrypt at rest**: all databases, object storage, and backups must use AES-256 or equivalent. Enable by default.
72
+ - **Encrypt in transit**: TLS 1.2+ for all connections. No plain HTTP, no self-signed certs in production.
73
+ - **Passwords**: never store plaintext. Use bcrypt/scrypt/argon2 with per-user salt. Never use MD5/SHA for passwords.
74
+ - **PII & sensitive data**: classify fields at design time. Apply column-level encryption or tokenization for SSN, credit cards, health data.
75
+ - **Secrets management**: use a vault (AWS Secrets Manager, Azure Key Vault, HashiCorp Vault). Never env vars in container images.
76
+ - **Environment segregation**: dev/staging/prod must be isolated (separate accounts/subscriptions, separate credentials, separate networks).
77
+ - **Infrastructure as Code**: all infra must be reproducible via IaC (Terraform, Pulumi, CloudFormation). No manual console changes in staging/prod.
78
+ - **Least privilege**: every service, user, and CI runner gets the minimum permissions needed. Review IAM quarterly.
79
+ - **Database migrations**: version-controlled, idempotent, reversible. Never run DDL manually in production.
80
+ - **Backups & DR**: automated daily backups with tested restore. Define RPO/RTO per environment.
81
+
82
+ ## Testing
83
+
84
+ - Write tests before or alongside implementation. One assertion per test. Name as specifications.
85
+ - **Arrange → Act → Assert.** Deterministic: no clock, network, or randomness without seeding.
86
+ - Target 90%+ coverage for business logic. Page Object pattern for E2E.
87
+ - Every development task must include unit tests for new or changed business logic before QA handoff.
88
+ - Prefer Playwright for browser-based E2E, smoke, and regression automation.
89
+
90
+ ## Error Handling
91
+
92
+ - Empty `catch {}` is forbidden. Log, propagate, or convert to user-friendly message.
93
+ - Operational errors: handle gracefully. Programmer errors: crash fast, log, fix.
94
+ - Include context in logs: operation name, IDs, duration.
95
+
96
+ ## Agent Roles
97
+
98
+ - Use roles to force complete thinking, not to create silos. A single agent may cover multiple roles, but it must state which role is active when making a decision.
99
+ - Start non-trivial tasks by identifying the needed roles and the lead role. Do not activate every role by default.
100
+ - **Product Owner**: user value, acceptance criteria, scope boundaries, release readiness.
101
+ - **Product Manager**: product strategy, trade-offs, sequencing, success metrics.
102
+ - **Analyst**: requirements discovery, domain modeling, workflows, edge cases.
103
+ - **Architect**: system boundaries, integration contracts, data flow, maintainability.
104
+ - **Developer**: implementation quality, local consistency, typed and tested code.
105
+ - **QA**: verification strategy, regression risk, release confidence.
106
+ - **DevOps**: deployment, CI/CD, observability, rollback, operational readiness.
107
+ - **Security**: threat modeling, data classification, identity, secrets, dependency risk.
108
+ - **UX/UI Designer**: user experience, accessibility, responsive behavior, UI copy, and flow clarity.
109
+ - **SRE**: SLOs, error budgets, incident response, capacity, resilience, and production reliability.
110
+ - **Data Engineer/Analyst**: pipelines, analytics, reporting definitions, data quality, lineage, and metric correctness.
111
+ - **DBA**: database performance, indexes, locking, migrations, replication, backups, and restore safety.
112
+ - **Tech Lead/Engineering Manager**: technical coordination, sequencing, ownership, integration, and delivery coherence.
113
+ - **Release Manager**: release coordination, rollout, rollback, communication, and go/no-go checklist.
114
+ - **Support/Customer Success**: customer impact, support readiness, known issues, FAQs, and feedback loops.
115
+ - **Compliance/Privacy**: regulatory requirements, PII, retention, consent, auditability, and data processing risk.
116
+ - **Content/Technical Writer**: user docs, technical docs, runbooks, release notes, API examples, and help content.
117
+ - **Game Designer**: mechanics, progression, difficulty, economy, onboarding, feedback loops, and player engagement.
118
+
119
+ ## Agent Collaboration
120
+
121
+ - Agents must collaborate through explicit artifacts and review checkpoints, not isolated workstreams.
122
+ - Start with a shared task brief: goal, backlog item, constraints, assumptions, risks, and definition of done.
123
+ - Before implementation, discuss the proposed solution and architecture with the user: scope, modules, data flow, risks, trade-offs, test strategy, and expected evidence.
124
+ - Product Owner and Analyst define acceptance criteria before Developer or QA treat the task as ready.
125
+ - Architect and Security review designs before implementation when work touches boundaries, data, auth, infra, or external integrations.
126
+ - UX, SRE, DBA, Release, Compliance, Technical Writer, and Game Designer review when their ownership area is impacted.
127
+ - Every handoff must include: status, touched files/components, decisions, risks, test evidence, and remaining work.
128
+ - Developer-to-QA handoff must include unit tests, exact test commands, known gaps, and recommended Playwright coverage.
129
+ - Parallel work must be split by stable boundaries. Avoid duplicate edits to the same files; if overlap is unavoidable, assign one integration owner.
130
+ - Review findings must include severity, affected artifact, expected behavior, actual risk, and a concrete recommendation.
131
+ - Product, technical, verification, and security conflicts are resolved by Product Owner, Architect, QA, and Security respectively.
132
+
133
+ ## Delivery Quality Gates
134
+
135
+ - Work must meet Definition of Ready before implementation and Definition of Done before release.
136
+ - Development is complete only after developer verification, QA review, automation planning, and evidence capture.
137
+ - Code review must verify behavior, data safety, security, reliability, tests, user impact, and evidence before style.
138
+ - QA must produce a test plan covering acceptance criteria, regression areas, edge cases, data setup, and environment assumptions.
139
+ - Completed delivery must include evidence: commands run, pass/fail result, logs, screenshots, traces, videos, and unresolved risks when relevant.
140
+ - Product Owner gives go/no-go using QA results, automation status, unresolved defects, and accepted risks.
141
+ - Important architecture choices need lightweight ADRs. Releases must include rollback, observability, and documentation updates when impacted.
142
+ - Dependencies are treated as product risk: justify additions, pin via lockfiles, scan for CVEs, and keep updates atomic.
143
+
144
+ ## Git Discipline
145
+
146
+ - Each commit compiles and passes tests. One logical change per commit.
147
+ - A version-controlled pre-commit hook must run static analysis before every commit.
148
+ - Never bypass hooks with `--no-verify` unless the user explicitly approves and a follow-up item records the reason.
149
+ - Ask for **Backlog Item ID** first. Use Conventional Commits with backlog scope: `type(ID): short description`.
150
+ - Mark breaking changes with `!` and a `BREAKING CHANGE:` footer.
151
+ - Keep PRs <400 lines. Review your own diff before requesting review.
152
+
153
+ ## Interaction Preferences
154
+
155
+ - Concise, but detailed in architectural justifications.
156
+ - Correct mistakes directly without apologizing.
157
+ - **No Ninja Edits.** Summarize proposed changes and get agreement before modifying files.
package/README.md ADDED
@@ -0,0 +1,60 @@
1
+ # Open Orchestra
2
+
3
+ Open Orchestra is a local-first, provider-agnostic framework for governed multi-agent software delivery.
4
+
5
+ It coordinates agents through task graphs, durable workflow files, handoffs, reviews, evidence, gates, locks, model routing, model provenance, and budget controls. The public CLI is `orchestra`.
6
+
7
+ ## Quick Start
8
+
9
+ ```bash
10
+ npm install
11
+ npm run build
12
+ node bin/orchestra.js init
13
+ node bin/orchestra.js status
14
+ node bin/orchestra.js roles list --json
15
+ ```
16
+
17
+
18
+ ## Role Catalog
19
+
20
+ Open Orchestra treats roles as capabilities and governance responsibilities, not only human job titles. Projects can keep roles inactive until risk, scope, impact area, or a workflow gate requires them.
21
+
22
+ Core delivery roles remain available: Product Manager, Product Owner, Business Analyst, Architect, Developer, QA, Security, DevOps, SRE, DBA, UX/UI Designer, Release Manager, Compliance/Privacy, and Technical Writer.
23
+
24
+ State-of-the-art orchestration roles are also included:
25
+
26
+ - Parent Agent / Orchestrator for sequencing, handoffs, locks, escalation, and integration.
27
+ - Planner for work breakdown, dependency mapping, and role activation rationale.
28
+ - Reviewer / Critic for independent review before gates or handoffs.
29
+ - Toolsmith / Integration Engineer for tools, MCPs, providers, adapters, and automation contracts.
30
+ - Context Curator / Memory Manager for decisions, assumptions, stale context, and shared memory hygiene.
31
+ - Policy / Governance Agent for approvals, budgets, workflow rules, and compliance gates.
32
+ - Observability / Incident Response for telemetry, alerts, runbooks, and incident readiness.
33
+ - Data / Privacy Officer for PII, retention, encryption, access, and data compliance.
34
+ - Domain Expert for project-specific business or industry judgment.
35
+ - UX Researcher / Accessibility Reviewer for mobile-first UX, accessibility, onboarding, and game/player guidance.
36
+ - Performance Engineer for load, latency, scalability, caching, concurrency, and graceful degradation.
37
+ - Game Designer for gameplay loops, tutorialization, player feedback, and balance risk.
38
+
39
+ Each default role declares activation criteria, expected evidence, and gate participation so a parent agent can select only the roles needed for a task.
40
+
41
+ ## VS Code Control Center
42
+
43
+ The first VS Code extension scaffold lives in `extensions/vscode-open-orchestra`. It provides an Open Orchestra activity bar view that consumes stable CLI JSON contracts for status, validation, graph plan, roles, approvals, evidence, config inspection, and Playwright evidence attachment. The CLI remains the source of truth; the extension does not parse human-readable terminal output or duplicate workflow file logic.
44
+
45
+ Initial local usage:
46
+
47
+ ```bash
48
+ # From this repo, build the CLI first
49
+ npm run build
50
+ # Open the extension folder in VS Code and run the extension host
51
+ code extensions/vscode-open-orchestra
52
+ ```
53
+
54
+ ## Compatibility
55
+
56
+ - Existing `.agent-workflow/` data remains valid.
57
+ - Existing `AGENTS.md`, `CLAUDE.md`, Cursor rules, and generated instruction files remain supported.
58
+ - `ORCHESTRA.md` is the intended future primary guide name and can coexist with current agent instruction files.
59
+
60
+ See [docs/orchestra-mvp.md](docs/orchestra-mvp.md) for the current command reference.
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { runCli } from "../dist/cli.js";
3
+
4
+ runCli(process.argv.slice(2)).catch((error) => {
5
+ const message = error instanceof Error ? error.message : String(error);
6
+ console.error(`orchestra: ${message}`);
7
+ process.exitCode = 1;
8
+ });
package/dist/args.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import type { CliOptions } from "./types.js";
2
+ export declare function parseArgs(args: string[]): CliOptions;
3
+ export declare function requireArg(options: CliOptions, key: string): string;
package/dist/args.js ADDED
@@ -0,0 +1,30 @@
1
+ export function parseArgs(args) {
2
+ const result = { _: [] };
3
+ for (let index = 0; index < args.length; index += 1) {
4
+ const arg = args[index];
5
+ if (!arg) {
6
+ continue;
7
+ }
8
+ if (!arg.startsWith("--")) {
9
+ result._.push(arg);
10
+ continue;
11
+ }
12
+ const key = arg.slice(2);
13
+ const next = args[index + 1];
14
+ if (!next || next.startsWith("--")) {
15
+ result[key] = true;
16
+ continue;
17
+ }
18
+ result[key] = next;
19
+ index += 1;
20
+ }
21
+ return result;
22
+ }
23
+ export function requireArg(options, key) {
24
+ const value = options[key];
25
+ if (typeof value !== "string" || value.trim() === "") {
26
+ throw new Error(`missing required --${key}`);
27
+ }
28
+ return value;
29
+ }
30
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,MAAM,GAAe,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IACrC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACnB,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACnB,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAmB,EAAE,GAAW;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import type { CliIo } from "./types.js";
2
+ export declare function runCli(argv: string[], io?: CliIo): Promise<void>;
package/dist/cli.js ADDED
@@ -0,0 +1,190 @@
1
+ import { parseArgs } from "./args.js";
2
+ import { approvalsApproveCommand, approvalsListCommand, approvalsRejectCommand, approvalsShowCommand, budgetCheckCommand, configShowCommand, decisionAddCommand, decisionListCommand, evidenceCommand, evidenceListCommand, gateCommand, graphPlanCommand, graphRunReadyCommand, graphRunNextCommand, handoffCommand, initCommand, lockClaimCommand, lockListCommand, lockReleaseCommand, modelProvidersCommand, modelCompleteFakeCommand, modelProvenanceAddCommand, modelProvenanceListCommand, modelSetRoleCommand, contextCommand, planCommand, runCommand, playwrightEvidenceCommand, playwrightPlanCommand, prSummaryCommand, readinessCommand, rolesListCommand, reviewCommand, reviewListCommand, statusCommand, summaryCommand, taskAddCommand, taskDepsCommand, taskListCommand, taskUpdateCommand, usageCommand, validateCommand, webCommand, } from "./commands.js";
3
+ const help = `orchestra
4
+
5
+ Commands:
6
+ init [--force]
7
+ status [--json]
8
+ validate [--json]
9
+ web [--host <localhost|127.0.0.1|::1>] [--port <port>]
10
+ serve [--host <localhost|127.0.0.1|::1>] [--port <port>]
11
+ task add --id <id> --title <title> --owner <role> [--paths <csv>]
12
+ task list [--json]
13
+ task update --id <id> [--status <status>] [--blocked-reason <text>]
14
+ task deps --id <id> [--json]
15
+ graph plan [--json]
16
+ graph run-next [--json]
17
+ graph run-ready [--json]
18
+ lock claim --task <id> --role <role> --path <path> --reason <text>
19
+ lock release --id <id>
20
+ lock list [--json]
21
+ roles list [--json]
22
+ summary [--json]
23
+ pr-summary --task <id> [--json]
24
+ context --task <id> [--json]
25
+ plan --task <id> [--json]
26
+ run --task <id> [--json] [--approve-budget-fallback --approver <name>] [--reject-budget-fallback]
27
+ readiness --task <id>
28
+ gate --gate <architecture> --task <id>
29
+ handoff --task <id> --from <role> --to <role> --changed <text> --behavior <text> --tests <text> --commands <text>
30
+ review --task <id> --role <role> --result <approve|block|changes> --findings <text> --recommendation <text> [--severity <level>]
31
+ review list [--json] [--task <id>]
32
+ decision add --task <id> --owner <role> --title <text> --context <text> --decision <text> --consequences <text>
33
+ decision list [--json] [--task <id>]
34
+ evidence add --task <id> --role <role> --type <type> --summary <text> [--path <file>] [--command <cmd>] [--exit-code <code>]
35
+ evidence list [--json] [--task <id>]
36
+ usage [--json] [--task <id>]
37
+ budget check [--json] [--task <id>]
38
+ config show [--json]
39
+ approvals list [--json] [--task <id>]
40
+ approvals show --id <id> [--json]
41
+ approvals approve --id <id> --approver <name> --rationale <text>
42
+ approvals reject --id <id> --approver <name> --rationale <text>
43
+ playwright plan --task <id> [--json]
44
+ playwright evidence --task <id> --kind <kind> --path <file> --summary <text> [--run-id <id>]
45
+ model providers [--json]
46
+ model set-role --role <role> --provider <provider> --model <model>
47
+ model complete-fake --provider <provider> --model <model> --prompt <text> [--fallbacks <csv>] [--fail-provider <csv>]
48
+ model provenance add --task <id> --role <role> --provider <provider> --model <model> --prompt-id <id> --response-id <id>
49
+ model provenance list [--json] [--task <id>]
50
+ `;
51
+ export async function runCli(argv, io = console) {
52
+ const [command, subcommand, ...rest] = argv;
53
+ if (!command || command === "--help" || command === "-h") {
54
+ io.log(help);
55
+ return;
56
+ }
57
+ if (command === "init") {
58
+ return initCommand(parseArgs(argv.slice(1)), io);
59
+ }
60
+ if (command === "status") {
61
+ return statusCommand(parseArgs(argv.slice(1)), io);
62
+ }
63
+ if (command === "validate") {
64
+ return validateCommand(parseArgs(argv.slice(1)), io);
65
+ }
66
+ if (command === "web" || command === "serve") {
67
+ return webCommand(parseArgs(argv.slice(1)), io);
68
+ }
69
+ if (command === "task" && subcommand === "add") {
70
+ return taskAddCommand(parseArgs(rest), io);
71
+ }
72
+ if (command === "task" && subcommand === "list") {
73
+ return taskListCommand(parseArgs(rest), io);
74
+ }
75
+ if (command === "task" && subcommand === "update") {
76
+ return taskUpdateCommand(parseArgs(rest), io);
77
+ }
78
+ if (command === "task" && subcommand === "deps") {
79
+ return taskDepsCommand(parseArgs(rest), io);
80
+ }
81
+ if (command === "graph" && subcommand === "plan") {
82
+ return graphPlanCommand(parseArgs(rest), io);
83
+ }
84
+ if (command === "graph" && subcommand === "run-next") {
85
+ return graphRunNextCommand(parseArgs(rest), io);
86
+ }
87
+ if (command === "graph" && subcommand === "run-ready") {
88
+ return graphRunReadyCommand(parseArgs(rest), io);
89
+ }
90
+ if (command === "lock" && subcommand === "claim") {
91
+ return lockClaimCommand(parseArgs(rest), io);
92
+ }
93
+ if (command === "lock" && subcommand === "release") {
94
+ return lockReleaseCommand(parseArgs(rest), io);
95
+ }
96
+ if (command === "lock" && subcommand === "list") {
97
+ return lockListCommand(parseArgs(rest), io);
98
+ }
99
+ if (command === "roles" && subcommand === "list") {
100
+ return rolesListCommand(parseArgs(rest), io);
101
+ }
102
+ if (command === "summary") {
103
+ return summaryCommand(parseArgs(argv.slice(1)), io);
104
+ }
105
+ if (command === "usage") {
106
+ return usageCommand(parseArgs(argv.slice(1)), io);
107
+ }
108
+ if (command === "budget" && subcommand === "check") {
109
+ return budgetCheckCommand(parseArgs(rest), io);
110
+ }
111
+ if (command === "config" && subcommand === "show") {
112
+ return configShowCommand(parseArgs(rest), io);
113
+ }
114
+ if (command === "approvals" && subcommand === "list") {
115
+ return approvalsListCommand(parseArgs(rest), io);
116
+ }
117
+ if (command === "approvals" && subcommand === "show") {
118
+ return approvalsShowCommand(parseArgs(rest), io);
119
+ }
120
+ if (command === "approvals" && subcommand === "approve") {
121
+ return approvalsApproveCommand(parseArgs(rest), io);
122
+ }
123
+ if (command === "approvals" && subcommand === "reject") {
124
+ return approvalsRejectCommand(parseArgs(rest), io);
125
+ }
126
+ if (command === "pr-summary") {
127
+ return prSummaryCommand(parseArgs(argv.slice(1)), io);
128
+ }
129
+ if (command === "context") {
130
+ return contextCommand(parseArgs(argv.slice(1)), io);
131
+ }
132
+ if (command === "plan") {
133
+ return planCommand(parseArgs(argv.slice(1)), io);
134
+ }
135
+ if (command === "run") {
136
+ return runCommand(parseArgs(argv.slice(1)), io);
137
+ }
138
+ if (command === "readiness") {
139
+ return readinessCommand(parseArgs(argv.slice(1)), io);
140
+ }
141
+ if (command === "gate") {
142
+ return gateCommand(parseArgs(argv.slice(1)), io);
143
+ }
144
+ if (command === "handoff") {
145
+ return handoffCommand(parseArgs(argv.slice(1)), io);
146
+ }
147
+ if (command === "review" && subcommand === "list") {
148
+ return reviewListCommand(parseArgs(rest), io);
149
+ }
150
+ if (command === "review") {
151
+ return reviewCommand(parseArgs(argv.slice(1)), io);
152
+ }
153
+ if (command === "decision" && subcommand === "add") {
154
+ return decisionAddCommand(parseArgs(rest), io);
155
+ }
156
+ if (command === "decision" && subcommand === "list") {
157
+ return decisionListCommand(parseArgs(rest), io);
158
+ }
159
+ if (command === "evidence" && subcommand === "add") {
160
+ return evidenceCommand(parseArgs(rest), io);
161
+ }
162
+ if (command === "evidence" && subcommand === "list") {
163
+ return evidenceListCommand(parseArgs(rest), io);
164
+ }
165
+ if (command === "playwright" && subcommand === "plan") {
166
+ return playwrightPlanCommand(parseArgs(rest), io);
167
+ }
168
+ if (command === "playwright" && subcommand === "evidence") {
169
+ return playwrightEvidenceCommand(parseArgs(rest), io);
170
+ }
171
+ if (command === "model" && subcommand === "providers") {
172
+ return modelProvidersCommand(parseArgs(rest), io);
173
+ }
174
+ if (command === "model" && subcommand === "set-role") {
175
+ return modelSetRoleCommand(parseArgs(rest), io);
176
+ }
177
+ if (command === "model" && subcommand === "complete-fake") {
178
+ return modelCompleteFakeCommand(parseArgs(rest), io);
179
+ }
180
+ if (command === "model" && subcommand === "provenance" && rest[0] === "add") {
181
+ return modelProvenanceAddCommand(parseArgs(rest.slice(1)), io);
182
+ }
183
+ if (command === "model" &&
184
+ subcommand === "provenance" &&
185
+ rest[0] === "list") {
186
+ return modelProvenanceListCommand(parseArgs(rest.slice(1)), io);
187
+ }
188
+ throw new Error(`unknown command: ${argv.join(" ")}`);
189
+ }
190
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}