@jterrats/open-orchestra 0.4.2-beta.1 → 0.5.0-beta.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 (170) hide show
  1. package/AGENTS.md +5 -3
  2. package/README.md +29 -5
  3. package/dist/advisory-artifacts.d.ts +20 -0
  4. package/dist/advisory-artifacts.js +136 -0
  5. package/dist/advisory-artifacts.js.map +1 -0
  6. package/dist/assets/web-console.js +436 -4
  7. package/dist/cli.js +16 -117
  8. package/dist/cli.js.map +1 -1
  9. package/dist/command-manifest.d.ts +6 -0
  10. package/dist/command-manifest.js +141 -43
  11. package/dist/command-manifest.js.map +1 -1
  12. package/dist/command-utils.d.ts +5 -0
  13. package/dist/command-utils.js +23 -0
  14. package/dist/command-utils.js.map +1 -1
  15. package/dist/commands.d.ts +7 -42
  16. package/dist/commands.js +214 -1356
  17. package/dist/commands.js.map +1 -1
  18. package/dist/constants.js +3 -0
  19. package/dist/constants.js.map +1 -1
  20. package/dist/context-budget.d.ts +4 -0
  21. package/dist/context-budget.js +119 -0
  22. package/dist/context-budget.js.map +1 -0
  23. package/dist/delivery-commands.d.ts +10 -0
  24. package/dist/delivery-commands.js +152 -0
  25. package/dist/delivery-commands.js.map +1 -0
  26. package/dist/github.d.ts +50 -1
  27. package/dist/github.js +234 -0
  28. package/dist/github.js.map +1 -1
  29. package/dist/health-checks.d.ts +1 -0
  30. package/dist/health-checks.js +11 -1
  31. package/dist/health-checks.js.map +1 -1
  32. package/dist/health-commands.js +2 -0
  33. package/dist/health-commands.js.map +1 -1
  34. package/dist/mcp-oauth-proxy.d.ts +32 -0
  35. package/dist/mcp-oauth-proxy.js +120 -0
  36. package/dist/mcp-oauth-proxy.js.map +1 -1
  37. package/dist/memory.d.ts +2 -1
  38. package/dist/memory.js +71 -10
  39. package/dist/memory.js.map +1 -1
  40. package/dist/package-update-check.d.ts +5 -1
  41. package/dist/package-update-check.js +20 -8
  42. package/dist/package-update-check.js.map +1 -1
  43. package/dist/planning-commands.d.ts +14 -0
  44. package/dist/planning-commands.js +372 -0
  45. package/dist/planning-commands.js.map +1 -0
  46. package/dist/release-candidate.d.ts +2 -0
  47. package/dist/release-candidate.js +9 -14
  48. package/dist/release-candidate.js.map +1 -1
  49. package/dist/release-commands.d.ts +2 -0
  50. package/dist/release-commands.js +58 -6
  51. package/dist/release-commands.js.map +1 -1
  52. package/dist/release-readiness.d.ts +49 -0
  53. package/dist/release-readiness.js +172 -0
  54. package/dist/release-readiness.js.map +1 -0
  55. package/dist/runtime-commands.js +11 -4
  56. package/dist/runtime-commands.js.map +1 -1
  57. package/dist/runtime-execution-renderer.js +2 -0
  58. package/dist/runtime-execution-renderer.js.map +1 -1
  59. package/dist/runtime-execution.d.ts +4 -2
  60. package/dist/runtime-execution.js +11 -4
  61. package/dist/runtime-execution.js.map +1 -1
  62. package/dist/setup-agents-import.d.ts +42 -0
  63. package/dist/setup-agents-import.js +335 -0
  64. package/dist/setup-agents-import.js.map +1 -0
  65. package/dist/skills-catalog-service.d.ts +2 -0
  66. package/dist/skills-catalog-service.js +8 -0
  67. package/dist/skills-catalog-service.js.map +1 -0
  68. package/dist/skills-catalog.d.ts +2 -0
  69. package/dist/skills-catalog.js +389 -0
  70. package/dist/skills-catalog.js.map +1 -0
  71. package/dist/skills-commands.js +1 -11
  72. package/dist/skills-commands.js.map +1 -1
  73. package/dist/skills-events.d.ts +9 -0
  74. package/dist/skills-events.js +50 -0
  75. package/dist/skills-events.js.map +1 -0
  76. package/dist/skills-memory.d.ts +18 -0
  77. package/dist/skills-memory.js +127 -0
  78. package/dist/skills-memory.js.map +1 -0
  79. package/dist/skills-planning.d.ts +2 -0
  80. package/dist/skills-planning.js +87 -0
  81. package/dist/skills-planning.js.map +1 -0
  82. package/dist/skills-render.d.ts +14 -0
  83. package/dist/skills-render.js +83 -0
  84. package/dist/skills-render.js.map +1 -0
  85. package/dist/skills-validation.d.ts +2 -0
  86. package/dist/skills-validation.js +49 -0
  87. package/dist/skills-validation.js.map +1 -0
  88. package/dist/skills.d.ts +6 -42
  89. package/dist/skills.js +6 -773
  90. package/dist/skills.js.map +1 -1
  91. package/dist/task-graph-commands.d.ts +14 -0
  92. package/dist/task-graph-commands.js +367 -0
  93. package/dist/task-graph-commands.js.map +1 -0
  94. package/dist/tool-commands.js +8 -0
  95. package/dist/tool-commands.js.map +1 -1
  96. package/dist/types/context.d.ts +12 -0
  97. package/dist/types/context.js +2 -0
  98. package/dist/types/context.js.map +1 -0
  99. package/dist/types/metrics.d.ts +114 -0
  100. package/dist/types/metrics.js +2 -0
  101. package/dist/types/metrics.js.map +1 -0
  102. package/dist/types/model-config.d.ts +212 -0
  103. package/dist/types/model-config.js +2 -0
  104. package/dist/types/model-config.js.map +1 -0
  105. package/dist/types/runtime.d.ts +93 -0
  106. package/dist/types/runtime.js +2 -0
  107. package/dist/types/runtime.js.map +1 -0
  108. package/dist/types/skills.d.ts +147 -0
  109. package/dist/types/skills.js +2 -0
  110. package/dist/types/skills.js.map +1 -0
  111. package/dist/types/tasks.d.ts +171 -0
  112. package/dist/types/tasks.js +2 -0
  113. package/dist/types/tasks.js.map +1 -0
  114. package/dist/types/workflow-run.d.ts +79 -0
  115. package/dist/types/workflow-run.js +2 -0
  116. package/dist/types/workflow-run.js.map +1 -0
  117. package/dist/types.d.ts +13 -798
  118. package/dist/types.js +1 -1
  119. package/dist/types.js.map +1 -1
  120. package/dist/upgrade-commands.d.ts +2 -0
  121. package/dist/upgrade-commands.js +65 -0
  122. package/dist/upgrade-commands.js.map +1 -0
  123. package/dist/web-api-read-routes.d.ts +5 -0
  124. package/dist/web-api-read-routes.js +37 -0
  125. package/dist/web-api-read-routes.js.map +1 -0
  126. package/dist/web-api.d.ts +1 -3
  127. package/dist/web-api.js +145 -44
  128. package/dist/web-api.js.map +1 -1
  129. package/dist/web-console-sections.d.ts +2 -0
  130. package/dist/web-console-sections.js +7 -0
  131. package/dist/web-console-sections.js.map +1 -0
  132. package/dist/web-console.js +23 -3
  133. package/dist/web-console.js.map +1 -1
  134. package/dist/workflow-approval-service.d.ts +9 -0
  135. package/dist/workflow-approval-service.js +126 -0
  136. package/dist/workflow-approval-service.js.map +1 -0
  137. package/dist/workflow-approval-utils.d.ts +10 -0
  138. package/dist/workflow-approval-utils.js +82 -0
  139. package/dist/workflow-approval-utils.js.map +1 -0
  140. package/dist/workflow-budget-utils.d.ts +7 -0
  141. package/dist/workflow-budget-utils.js +96 -0
  142. package/dist/workflow-budget-utils.js.map +1 -0
  143. package/dist/workflow-evidence-service.d.ts +7 -0
  144. package/dist/workflow-evidence-service.js +100 -0
  145. package/dist/workflow-evidence-service.js.map +1 -0
  146. package/dist/workflow-run-commands.d.ts +8 -0
  147. package/dist/workflow-run-commands.js +479 -0
  148. package/dist/workflow-run-commands.js.map +1 -0
  149. package/dist/workflow-services.d.ts +8 -18
  150. package/dist/workflow-services.js +30 -481
  151. package/dist/workflow-services.js.map +1 -1
  152. package/dist/workflow-summary-service.d.ts +4 -0
  153. package/dist/workflow-summary-service.js +82 -0
  154. package/dist/workflow-summary-service.js.map +1 -0
  155. package/dist/workflow-templates.d.ts +1 -0
  156. package/dist/workflow-templates.js +1 -0
  157. package/dist/workflow-templates.js.map +1 -1
  158. package/dist/workspace.d.ts +18 -1
  159. package/dist/workspace.js +72 -4
  160. package/dist/workspace.js.map +1 -1
  161. package/docs/command-contracts.md +22 -0
  162. package/docs/mcp-oauth-proxy-evaluation.md +14 -0
  163. package/docs/orchestra-mvp.md +158 -114
  164. package/docs/package-naming.md +20 -0
  165. package/docs/persona-workflows.md +209 -0
  166. package/docs/runtime-adapters.md +19 -14
  167. package/docs/runtime-llm-flow.md +29 -28
  168. package/docs/setup-agents-bridge.md +61 -0
  169. package/docs/traceability-flow.md +89 -0
  170. package/package.json +9 -7
package/AGENTS.md CHANGED
@@ -150,7 +150,7 @@
150
150
  - Mark breaking changes with `!` and a `BREAKING CHANGE:` footer.
151
151
  - Keep PRs <400 lines. Review your own diff before requesting review.
152
152
 
153
- <!-- open-orchestra:start block-id="runtime-bootstrap" generator="open-orchestra runtime bootstrap" version="1" target="codex" source-manifest="open-orchestra command-manifest,runtime-bootstrap" content-sha256="c215b82bf89b09651384dbee3c7bd8c4e66cab148adc844b4979788848017be5" updated-at="2026-05-06T22:12:02.623Z" -->
153
+ <!-- open-orchestra:start block-id="runtime-bootstrap" generator="open-orchestra runtime bootstrap" version="1" target="codex" source-manifest="open-orchestra command-manifest,runtime-bootstrap" content-sha256="411e2d184a03aafe61fc4b71d49011f83a4f94d33d3a64cc4cd590a979d07319" updated-at="2026-05-10T05:17:06.513Z" -->
154
154
  # Open Orchestra Runtime Bootstrap
155
155
 
156
156
  Runtime target: Codex. Reference Open Orchestra from AGENTS.md so local CLI work follows workflow gates.
@@ -210,9 +210,11 @@ orchestra benchmark --task <ID>
210
210
  ```
211
211
 
212
212
  ## Active Work
213
- - Run `orchestra health --json`.
214
- - Run `orchestra task list --json` and identify the active task.
213
+ - At session start, run `orchestra health --json` before implementation or file edits.
214
+ - Run `orchestra task list --json --status pending,blocked,in_progress` and identify resumable work before creating a new task.
215
215
  - For the active task, run context, delegation, plan, skills, protocol, and workflow render commands.
216
+ - Run `orchestra validate --pre-run --task <ID> --json` before implementation; resolve missing estimate, workflow run, evidence, or review checks.
217
+ - If a user accepts a smaller/advisory path, record it with `orchestra validate --pre-run --task <ID> --bypass --bypass-rationale "..."`.
216
218
 
217
219
  ## Task Loop
218
220
  - `orchestra health` - Check local tools and workflow readiness.
package/README.md CHANGED
@@ -4,19 +4,43 @@ Open Orchestra is a local-first, provider-agnostic framework for governed multi-
4
4
 
5
5
  It coordinates agents through task graphs, durable workflow files, handoffs, reviews, evidence, gates, locks, model routing, model provenance, budget controls, and an autonomous multi-phase workflow engine. The public CLI is `orchestra`.
6
6
 
7
+ Package naming: install `@jterrats/open-orchestra`; run the CLI as
8
+ `orchestra`. The shorter `@jterrats/orchestra` package is not the canonical
9
+ published install target.
10
+
7
11
  ## Quick Start
8
12
 
9
13
  ```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
14
+ npm install -g @jterrats/open-orchestra
15
+ orchestra init
16
+ orchestra status
17
+ orchestra roles list --json
15
18
  ```
16
19
 
20
+ When developing Open Orchestra from this repository, use `npm install`,
21
+ `npm run build`, and `node bin/orchestra.js ...` to exercise the local source.
22
+
17
23
  For Claude, Codex, Cursor, VS Code, Windsurf, and generic LLM usage, see
18
24
  [docs/runtime-llm-flow.md](docs/runtime-llm-flow.md) and
19
25
  [docs/runtime-adapters.md](docs/runtime-adapters.md).
26
+ To start by job-to-be-done, use the
27
+ [persona workflows guide](docs/persona-workflows.md) for PO refinement,
28
+ developer execution, QA validation, tech lead oversight, and release
29
+ management.
30
+ For package naming rules, see [docs/package-naming.md](docs/package-naming.md).
31
+
32
+ ## Supported Platforms
33
+
34
+ Open Orchestra supports current Node.js LTS/runtime releases on macOS, Linux,
35
+ and Windows. Repository scripts avoid Unix-only shell requirements for the
36
+ core quality and workflow gates; `npm run validate:workflow` runs through a
37
+ Node helper so it works in Windows shells as well as POSIX shells. The CI
38
+ dogfood path validates installed-package init and workflow validation on
39
+ `ubuntu-latest`, `macos-latest`, and `windows-latest`.
40
+
41
+ Known limitations: publish/release automation may still use GitHub-hosted
42
+ Linux shell steps, but local development, validation, and installed CLI
43
+ dogfooding are expected to be cross-platform.
20
44
 
21
45
  ## Autonomous Workflow
22
46
 
@@ -0,0 +1,20 @@
1
+ import type { WorkspaceClassification } from "./types.js";
2
+ export interface AdvisoryArtifactsResult {
3
+ files: string[];
4
+ projectTask: {
5
+ id: string;
6
+ title: string;
7
+ ownerRole: string;
8
+ goal: string;
9
+ scope: string;
10
+ acceptanceCriteria: string[];
11
+ assumptions: string[];
12
+ risks: string[];
13
+ paths: string[];
14
+ testStrategy: string;
15
+ };
16
+ }
17
+ export declare function writeAdvisoryArtifacts({ root, classification, }: {
18
+ root: string;
19
+ classification: WorkspaceClassification;
20
+ }): Promise<AdvisoryArtifactsResult>;
@@ -0,0 +1,136 @@
1
+ import { WORKFLOW_DIR } from "./constants.js";
2
+ import { defaultRoles } from "./defaults.js";
3
+ import { writeArtifact } from "./workspace.js";
4
+ const ADVISORY_DIRECTORY = "advisory";
5
+ export async function writeAdvisoryArtifacts({ root, classification, }) {
6
+ const projectTask = advisoryProjectTask();
7
+ const files = [
8
+ await writeArtifact(root, ADVISORY_DIRECTORY, "README.md", renderAdvisoryReadme(classification)),
9
+ await writeArtifact(root, ADVISORY_DIRECTORY, "role-guides.md", renderRoleGuides(defaultRoles)),
10
+ await writeArtifact(root, ADVISORY_DIRECTORY, "decisions.md", renderPortableDecisions()),
11
+ await writeArtifact(root, ADVISORY_DIRECTORY, "conversion.md", renderConversionGuide()),
12
+ await writeArtifact(root, ADVISORY_DIRECTORY, "project-task.json", `${JSON.stringify(projectTask, null, 2)}\n`),
13
+ ];
14
+ return { files, projectTask };
15
+ }
16
+ function advisoryProjectTask() {
17
+ return {
18
+ id: "ADVISORY-CONVERSION",
19
+ title: "Convert advisory findings into a project task",
20
+ ownerRole: "product_owner",
21
+ goal: "Convert advisory findings into a project delivery task",
22
+ scope: "Advisory findings, decisions, role guides, and conversion path",
23
+ acceptanceCriteria: [
24
+ "Target project is confirmed",
25
+ "Backlog item and scope are approved",
26
+ "Risks and assumptions are reviewed",
27
+ "Evidence from advisory artifacts is linked",
28
+ ],
29
+ assumptions: ["Target project repository is confirmed before conversion."],
30
+ risks: ["Advisory findings may require project-owner validation."],
31
+ paths: [".agent-workflow/advisory"],
32
+ testStrategy: "Review advisory artifacts and attach project evidence.",
33
+ };
34
+ }
35
+ function renderAdvisoryReadme(classification) {
36
+ return `# Advisory Workspace
37
+
38
+ This workspace was initialized in advisory mode. Open Orchestra created workflow
39
+ state and portable guidance under \`${WORKFLOW_DIR}/advisory\` without writing
40
+ root instruction files.
41
+
42
+ ## Use This For
43
+
44
+ - Product and technical discovery before choosing a target repository.
45
+ - Reviewing requirements, risks, acceptance criteria, and delivery evidence.
46
+ - Preparing a project task that can be copied into a real project workspace.
47
+
48
+ ## Safe Next Steps
49
+
50
+ 1. Refine findings in \`${WORKFLOW_DIR}/advisory/decisions.md\`.
51
+ 2. Review role-specific responsibilities in \`${WORKFLOW_DIR}/advisory/role-guides.md\`.
52
+ 3. Follow \`${WORKFLOW_DIR}/advisory/conversion.md\` after the target repo is confirmed.
53
+ 4. Convert \`${WORKFLOW_DIR}/advisory/project-task.json\` with \`orchestra advisory convert --json\`.
54
+
55
+ ## Classification
56
+
57
+ - Kind: \`${classification.kind}\`
58
+ - Write policy: \`${classification.writePolicy}\`
59
+ - Signals: ${classification.signals.map((signal) => `\`${signal}\``).join(", ")}
60
+ `;
61
+ }
62
+ function renderConversionGuide() {
63
+ return `# Advisory Conversion
64
+
65
+ Use this checklist after the target project repository is confirmed.
66
+
67
+ ## Convert To A Task
68
+
69
+ \`\`\`sh
70
+ orchestra advisory convert --json
71
+ \`\`\`
72
+
73
+ Optional flags:
74
+
75
+ - \`--file <file>\` converts a different project-task JSON file.
76
+ - \`--id <id>\` overrides the advisory task ID.
77
+ - \`--backlog <url>\` links the converted task to an external backlog item.
78
+ - \`--target-dir <dir>\` writes the task into a specific project workspace.
79
+
80
+ ## Verify
81
+
82
+ \`\`\`sh
83
+ orchestra status --json
84
+ orchestra health --json
85
+ \`\`\`
86
+
87
+ Attach the advisory README, decisions, role guides, and this conversion result as evidence on the project task.
88
+ `;
89
+ }
90
+ function renderRoleGuides(roles) {
91
+ const advisoryRoles = roles.filter((role) => [
92
+ "product_owner",
93
+ "analyst",
94
+ "architect",
95
+ "developer",
96
+ "qa",
97
+ "security",
98
+ "release_manager",
99
+ "technical_writer",
100
+ ].includes(role.id));
101
+ return `# Advisory Role Guides
102
+
103
+ ${advisoryRoles.map(renderRoleGuide).join("\n\n")}
104
+ `;
105
+ }
106
+ function renderRoleGuide(role) {
107
+ const activates = (role.activationCriteria ?? ["requested by workflow"])
108
+ .slice(0, 3)
109
+ .map((item) => `- ${item}`)
110
+ .join("\n");
111
+ return `## ${role.name}
112
+
113
+ Focus: ${role.description}
114
+
115
+ Activation:
116
+ ${activates}
117
+ `;
118
+ }
119
+ function renderPortableDecisions() {
120
+ return `# Portable Advisory Decisions
121
+
122
+ Use this file for decisions that should survive the move from advisory mode to a
123
+ project workspace.
124
+
125
+ ## Decision Template
126
+
127
+ - Title:
128
+ - Context:
129
+ - Decision:
130
+ - Consequences:
131
+ - Evidence:
132
+ - Owner:
133
+ - Status: proposed
134
+ `;
135
+ }
136
+ //# sourceMappingURL=advisory-artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advisory-artifacts.js","sourceRoot":"","sources":["../src/advisory-artifacts.ts"],"names":[],"mappings":"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"}