@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
@@ -7,7 +7,7 @@ payload support, and usage guidance in one place.
7
7
  ## Adapter Catalog
8
8
 
9
9
  ```bash
10
- node bin/orchestra.js runtime adapters --json
10
+ orchestra runtime adapters --json
11
11
  ```
12
12
 
13
13
  Current targets:
@@ -25,28 +25,32 @@ Current targets:
25
25
  Default project init keeps the current compact bootstrap behavior:
26
26
 
27
27
  ```bash
28
- node bin/orchestra.js init
28
+ orchestra init
29
29
  ```
30
30
 
31
31
  Generate only selected runtime files:
32
32
 
33
33
  ```bash
34
- node bin/orchestra.js init --target claude,cursor,windsurf
34
+ orchestra init --target claude,cursor,windsurf
35
35
  ```
36
36
 
37
37
  Advisory mode creates workflow state without root instruction files unless a
38
38
  target is explicit:
39
39
 
40
40
  ```bash
41
- node bin/orchestra.js init --advisory
42
- node bin/orchestra.js init --advisory --target claude
41
+ orchestra init --advisory
42
+ orchestra init --advisory --target claude
43
43
  ```
44
44
 
45
+ It also writes portable planning artifacts under
46
+ `.agent-workflow/advisory/`: a README, role guides, decision template, and a
47
+ project task export that can be moved into a confirmed project workspace.
48
+
45
49
  Unsafe roots are blocked before writes. Unknown non-temp directories require an
46
50
  explicit confirmation:
47
51
 
48
52
  ```bash
49
- node bin/orchestra.js init --confirm-unknown
53
+ orchestra init --confirm-unknown
50
54
  ```
51
55
 
52
56
  ## Runtime Loop
@@ -54,13 +58,14 @@ node bin/orchestra.js init --confirm-unknown
54
58
  After init, any runtime should use the same local control-plane loop:
55
59
 
56
60
  ```bash
57
- node bin/orchestra.js health --json
58
- node bin/orchestra.js task list --json
59
- node bin/orchestra.js context --task STORY-001 --json
60
- node bin/orchestra.js delegation decide --task STORY-001 --json
61
- node bin/orchestra.js skills render --target codex --task STORY-001
62
- node bin/orchestra.js protocol render --target codex --task STORY-001
63
- node bin/orchestra.js workflow render --target codex --task STORY-001
61
+ orchestra health --json
62
+ orchestra task list --json
63
+ orchestra context --task STORY-001 --json
64
+ orchestra delegation decide --task STORY-001 --json
65
+ orchestra memory hook --point before_plan --task STORY-001 --json
66
+ orchestra skills render --target codex --task STORY-001
67
+ orchestra protocol render --target codex --task STORY-001
68
+ orchestra workflow render --target codex --task STORY-001
64
69
  ```
65
70
 
66
71
  Change `--target` to the runtime that is executing the work. The workflow state,
@@ -72,7 +77,7 @@ The local web console exposes workspace classification and supported runtime
72
77
  targets through:
73
78
 
74
79
  ```bash
75
- node bin/orchestra.js web
80
+ orchestra web
76
81
  ```
77
82
 
78
83
  The API contracts are:
@@ -15,21 +15,22 @@ that phase and records phase artifacts plus model provenance.
15
15
  Use this sequence for a new project or a new task:
16
16
 
17
17
  ```bash
18
- node bin/orchestra.js init
19
- node bin/orchestra.js health --json
20
- node bin/orchestra.js task add --id STORY-001 --title "Short title" --owner developer --goal "Outcome"
21
- node bin/orchestra.js context --task STORY-001 --json
22
- node bin/orchestra.js delegation decide --task STORY-001 --json
23
- node bin/orchestra.js plan --task STORY-001 --json
24
- node bin/orchestra.js skills plan --task STORY-001 --json
25
- node bin/orchestra.js skills render --target codex --task STORY-001
26
- node bin/orchestra.js protocol render --target codex --task STORY-001
27
- node bin/orchestra.js workflow render --target codex --task STORY-001
28
- node bin/orchestra.js commands manifest --json
29
- node bin/orchestra.js runtime bootstrap --target codex
30
- node bin/orchestra.js evidence add --task STORY-001 --role developer --type command --summary "npm run precommit passed" --command "npm run precommit" --exit-code 0
31
- node bin/orchestra.js gate --gate architecture --task STORY-001
32
- node bin/orchestra.js summary --json
18
+ orchestra init
19
+ orchestra health --json
20
+ orchestra task add --id STORY-001 --title "Short title" --owner developer --goal "Outcome"
21
+ orchestra context --task STORY-001 --json
22
+ orchestra delegation decide --task STORY-001 --json
23
+ orchestra plan --task STORY-001 --json
24
+ orchestra memory hook --point before_plan --task STORY-001 --json
25
+ orchestra skills plan --task STORY-001 --json
26
+ orchestra skills render --target codex --task STORY-001
27
+ orchestra protocol render --target codex --task STORY-001
28
+ orchestra workflow render --target codex --task STORY-001
29
+ orchestra commands manifest --json
30
+ orchestra runtime bootstrap --target codex
31
+ orchestra evidence add --task STORY-001 --role developer --type command --summary "npm run precommit passed" --command "npm run precommit" --exit-code 0
32
+ orchestra gate --gate architecture --task STORY-001
33
+ orchestra summary --json
33
34
  ```
34
35
 
35
36
  Use `--target claude`, `--target cursor`, `--target codex`, `--target vscode`,
@@ -44,8 +45,8 @@ always-loaded context.
44
45
  Use explicit init targets when a project should generate runtime-specific files:
45
46
 
46
47
  ```bash
47
- node bin/orchestra.js runtime adapters --json
48
- node bin/orchestra.js init --target claude,cursor,windsurf
48
+ orchestra runtime adapters --json
49
+ orchestra init --target claude,cursor,windsurf
49
50
  ```
50
51
 
51
52
  ## Parent Agent Prompts
@@ -96,13 +97,13 @@ native provider adapter. Use `anthropic` to route phases to Claude models
96
97
  through the Anthropic Messages API.
97
98
 
98
99
  ```bash
99
- node bin/orchestra.js model providers --json
100
- node bin/orchestra.js model set-role --role qa --provider fake --model fake-model
101
- OPENAI_API_KEY=... node bin/orchestra.js model set-role --role architect --provider openai --model gpt-5.2
102
- ANTHROPIC_API_KEY=... node bin/orchestra.js model set-role --role qa --provider anthropic --model claude-sonnet-4-20250514
103
- node bin/orchestra.js model provenance list --json
104
- node bin/orchestra.js budget check --json
105
- node bin/orchestra.js workflow run --task STORY-001 --gates phase
100
+ orchestra model providers --json
101
+ orchestra model set-role --role qa --provider fake --model fake-model
102
+ OPENAI_API_KEY=... orchestra model set-role --role architect --provider openai --model gpt-5.2
103
+ ANTHROPIC_API_KEY=... orchestra model set-role --role qa --provider anthropic --model claude-sonnet-4-20250514
104
+ orchestra model provenance list --json
105
+ orchestra budget check --json
106
+ orchestra workflow run --task STORY-001 --gates phase
106
107
  ```
107
108
 
108
109
  The OpenAI adapter reads `OPENAI_API_KEY` from the environment and optionally
@@ -128,10 +129,10 @@ the work and does not want Orchestra to call OpenAI, Anthropic, or another
128
129
  vendor API directly:
129
130
 
130
131
  ```bash
131
- node bin/orchestra.js runtime adapters --json
132
- node bin/orchestra.js runtime brief --task STORY-001 --runtime claude-cli
133
- node bin/orchestra.js runtime delegate-plan --task STORY-001 --runtime claude-cli --roles architect,developer,qa
134
- node bin/orchestra.js runtime handoff --task STORY-001 --runtime claude-cli --artifact .agent-workflow/runs/STORY-001-runtime-claude-cli-delegation.md
132
+ orchestra runtime adapters --json
133
+ orchestra runtime brief --task STORY-001 --runtime claude-cli
134
+ orchestra runtime delegate-plan --task STORY-001 --runtime claude-cli --roles architect,developer,qa
135
+ orchestra runtime handoff --task STORY-001 --runtime claude-cli --artifact .agent-workflow/runs/STORY-001-runtime-claude-cli-delegation.md
135
136
  ```
136
137
 
137
138
  Runtime briefs and delegation packets are written under `.agent-workflow/runs/`
@@ -0,0 +1,61 @@
1
+ # setup-agents Bridge
2
+
3
+ Open Orchestra can import optional `setup-agents` artifacts without making the
4
+ runtime depend on Salesforce-specific setup flows.
5
+
6
+ ## Command
7
+
8
+ ```bash
9
+ orchestra setup-agents import --source .setup-agents
10
+ ```
11
+
12
+ Use `--json` to get a machine-readable report with imported, skipped, and
13
+ conflicted profiles, tasks, evidence references, and handoff references.
14
+
15
+ ## Supported Inputs
16
+
17
+ The importer reads:
18
+
19
+ - `.setup-agents/open-orchestra/profiles.json`
20
+ - `.setup-agents/tasks.json`
21
+ - `.setup-agents/tasks.jsonl`
22
+ - `.setup-agents/state/**/*.json`
23
+ - `.setup-agents/state/**/*.jsonl`
24
+
25
+ Task records may use either sparse legacy fields or enriched delivery fields.
26
+ Supported task fields include:
27
+
28
+ - `id`, `title`, `summary`
29
+ - `owner`, `ownerRole`, `role`, `profile`, `profileId`
30
+ - `backlogItem`, `backlog`
31
+ - `userStory`, `goal`, `scope`
32
+ - `acceptanceCriteria`
33
+ - `definitionOfReady`, `definitionOfDone`
34
+ - `dependencies`, `dependsOn`
35
+ - `risks`, `assumptions`, `paths`, `files`
36
+ - `testStrategy`
37
+ - `contractVersion`
38
+ - `acceptanceStatus`, `acceptedBy`
39
+ - `evidenceIds`, `evidence`
40
+ - `handoffIds`, `handoffs`
41
+
42
+ ## Mapping Rules
43
+
44
+ Profile role mappings are read from `profiles.json` when present. Setup role
45
+ IDs such as `setup-agents:qa` are normalized to Orchestra role IDs such as
46
+ `qa`. Unknown owner roles are treated as conflicts during profile import and
47
+ fall back to `developer` for sparse task records.
48
+
49
+ Imported tasks preserve setup metadata in `task.externalRefs.setupAgents`.
50
+ Evidence and handoff IDs are stored as references there; the importer does not
51
+ copy or mutate the original setup artifacts.
52
+
53
+ ## Idempotency And Conflicts
54
+
55
+ Re-running the import does not duplicate tasks. If an existing task has the
56
+ same ID, title, and owner role, the task is reported as skipped. If the ID
57
+ matches but title or owner differs, the importer reports a conflict and leaves
58
+ the existing Orchestra task unchanged.
59
+
60
+ Each import records a `SETUP_AGENTS_IMPORTED` event with summary counts so the
61
+ story-to-evidence trail remains auditable.
@@ -0,0 +1,89 @@
1
+ # Story To Release Traceability
2
+
3
+ Open Orchestra keeps delivery traceability in `.agent-workflow/`. The goal is
4
+ to connect a backlog story to technical work, verification evidence, reviews,
5
+ and release readiness without relying on chat history.
6
+
7
+ ## Product Owner Refinement
8
+
9
+ Start with a task that has a backlog item, goal, scope, acceptance criteria,
10
+ risks, and test strategy:
11
+
12
+ ```bash
13
+ orchestra task add --id STORY-1 --title "..." --owner product_owner --backlog HU-1 --acceptance "criterion one,criterion two"
14
+ orchestra task update --id STORY-1 --goal "..." --scope "..." --risks "..." --test-strategy "..."
15
+ orchestra readiness --task STORY-1
16
+ ```
17
+
18
+ The task record is the story anchor. Keep acceptance criteria user-visible and
19
+ avoid hiding product requirements in handoff notes.
20
+
21
+ ## Developer Delivery
22
+
23
+ Before implementation, the developer reads the context bundle and records
24
+ material decisions:
25
+
26
+ ```bash
27
+ orchestra context --task STORY-1 --json
28
+ orchestra decision add --task STORY-1 --owner developer --title "..." --context "..." --decision "..." --consequences "..."
29
+ ```
30
+
31
+ Implementation evidence belongs on the task:
32
+
33
+ ```bash
34
+ orchestra evidence add --task STORY-1 --role developer --type command --summary "unit tests passed" --command "npm test" --exit-code 0
35
+ ```
36
+
37
+ ## QA Verification
38
+
39
+ QA verifies acceptance criteria, regression areas, edge cases, and data setup.
40
+ Browser automation should use Playwright evidence when the behavior is
41
+ user-facing:
42
+
43
+ ```bash
44
+ orchestra playwright plan --task STORY-1
45
+ orchestra playwright evidence --task STORY-1 --kind trace --path test-results/story-1.zip --summary "acceptance flow trace"
46
+ orchestra review --task STORY-1 --role qa --result approve --findings "..." --recommendation "..."
47
+ ```
48
+
49
+ Developer-to-QA handoff should include touched files, commands, known gaps, and
50
+ recommended Playwright coverage.
51
+
52
+ ## Advisory Conversion
53
+
54
+ Advisory mode stores portable planning artifacts under
55
+ `.agent-workflow/advisory/`. Convert `project-task.json` into a real project
56
+ task only after the target repository and scope are confirmed.
57
+
58
+ Setup-agents imports preserve external references under
59
+ `task.externalRefs.setupAgents`, including evidence IDs, handoff IDs, acceptance
60
+ status, and contract version.
61
+
62
+ ## Release Readiness
63
+
64
+ Release readiness composes task readiness, architecture, QA, risk, evidence,
65
+ handoffs, reviews, and locks:
66
+
67
+ ```bash
68
+ orchestra gate --gate release-readiness --task STORY-1
69
+ orchestra release check --json
70
+ orchestra release candidate --version <version> --json
71
+ ```
72
+
73
+ The release manager should only accept unresolved risks when they are recorded
74
+ as explicit reviews, decisions, or release evidence.
75
+
76
+ ## Generated Reference Separation
77
+
78
+ Generated runtime files such as `AGENTS.md`, `ORCHESTRA.md`, and runtime adapter
79
+ blocks guide agents. Delivery truth remains in `.agent-workflow/` artifacts:
80
+
81
+ - `tasks.json` for backlog and ownership state.
82
+ - `decisions/` for why choices were made.
83
+ - `handoffs/` for role-to-role transfer.
84
+ - `evidence/` for command, file, screenshot, trace, video, log, or report proof.
85
+ - `reviews/` for approvals, blocks, and accepted risks.
86
+ - `releases/` for release candidate and rollback evidence.
87
+
88
+ Do not treat generated prompt text as delivery evidence unless it is explicitly
89
+ attached through `orchestra evidence add`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jterrats/open-orchestra",
3
- "version": "0.4.2-beta.1",
3
+ "version": "0.5.0-beta.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "orchestra": "bin/orchestra.js"
@@ -9,10 +9,12 @@
9
9
  "build": "tsc && npm run build:web",
10
10
  "typecheck": "tsc --noEmit",
11
11
  "test": "npm run build && node --test test/**/*.js extensions/**/*.test.cjs",
12
- "lint": "eslint . && prettier --check \"{bin,scripts,test,src}/**/*.js\" \"extensions/**/*.{cjs,json,md}\" \"src/**/*.ts\" \"*.json\"",
13
- "format": "prettier --write \"{bin,scripts,test,src}/**/*.js\" \"extensions/**/*.{cjs,json,md}\" \"src/**/*.ts\" \"*.json\"",
12
+ "test:e2e": "npm run build && playwright test",
13
+ "test:e2e:init": "node --test e2e/init-onboarding.test.js",
14
+ "lint": "eslint . && prettier --check \"{bin,e2e,scripts,test,src}/**/*.js\" \"extensions/**/*.{cjs,json,md}\" \"src/**/*.ts\" \"*.{js,json}\"",
15
+ "format": "prettier --write \"{bin,e2e,scripts,test,src}/**/*.js\" \"extensions/**/*.{cjs,json,md}\" \"src/**/*.ts\" \"*.{js,json}\"",
14
16
  "secret-scan": "node scripts/secret-scan.js",
15
- "validate:workflow": "sh -c 'test ! -d .agent-workflow || (npm run build && node bin/orchestra.js validate)'",
17
+ "validate:workflow": "node scripts/validate-workflow.js",
16
18
  "precommit": "npm run lint && npm run typecheck && npm run secret-scan && npm test && npm run validate:workflow",
17
19
  "prepack": "npm run build",
18
20
  "hooks:install": "git config core.hooksPath .githooks",
@@ -23,15 +25,15 @@
23
25
  },
24
26
  "devDependencies": {
25
27
  "@eslint/js": "^10.0.1",
28
+ "@playwright/test": "^1.59.1",
26
29
  "@types/node": "^25.6.0",
30
+ "chart.js": "^4.5.1",
27
31
  "esbuild": "^0.28.0",
28
32
  "eslint": "^10.2.1",
29
33
  "prettier": "^3.8.3",
30
34
  "typescript": "^6.0.3",
31
- "typescript-eslint": "^8.59.0",
32
- "chart.js": "^4.5.1"
35
+ "typescript-eslint": "^8.59.0"
33
36
  },
34
- "dependencies": {},
35
37
  "description": "Local control plane for AI-assisted development orchestration, evidence gates, and agent workflows.",
36
38
  "repository": {
37
39
  "type": "git",