@jterrats/open-orchestra 1.0.14 → 1.0.16
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.
- package/AGENTS.md +7 -4
- package/CHANGELOG.md +26 -0
- package/CLAUDE.md +2 -2
- package/dist/automation-evidence.d.ts +2 -23
- package/dist/automation-evidence.js +1 -218
- package/dist/automation-evidence.js.map +1 -1
- package/dist/command-manifest.js +12 -3
- package/dist/command-manifest.js.map +1 -1
- package/dist/command-routes-integrations.js +2 -1
- package/dist/command-routes-integrations.js.map +1 -1
- package/dist/command-routes.js +11 -1
- package/dist/command-routes.js.map +1 -1
- package/dist/commands.d.ts +5 -3
- package/dist/commands.js +9 -3
- package/dist/commands.js.map +1 -1
- package/dist/context-index-commands.d.ts +2 -0
- package/dist/context-index-commands.js +51 -1
- package/dist/context-index-commands.js.map +1 -1
- package/dist/context-index-service.d.ts +2 -1
- package/dist/context-index-service.js +3 -1
- package/dist/context-index-service.js.map +1 -1
- package/dist/context-index-signals.d.ts +2 -0
- package/dist/context-index-signals.js +102 -0
- package/dist/context-index-signals.js.map +1 -0
- package/dist/context-pack-service.d.ts +14 -0
- package/dist/context-pack-service.js +153 -0
- package/dist/context-pack-service.js.map +1 -0
- package/dist/context-search-service.d.ts +10 -0
- package/dist/context-search-service.js +142 -0
- package/dist/context-search-service.js.map +1 -0
- package/dist/context-vault-commands.d.ts +5 -0
- package/dist/context-vault-commands.js +79 -0
- package/dist/context-vault-commands.js.map +1 -0
- package/dist/context-vault-file-metadata.d.ts +3 -0
- package/dist/context-vault-file-metadata.js +25 -0
- package/dist/context-vault-file-metadata.js.map +1 -0
- package/dist/context-vault-model.d.ts +79 -0
- package/dist/context-vault-model.js +2 -0
- package/dist/context-vault-model.js.map +1 -0
- package/dist/context-vault-redaction.d.ts +5 -0
- package/dist/context-vault-redaction.js +22 -0
- package/dist/context-vault-redaction.js.map +1 -0
- package/dist/context-vault-renderer.d.ts +3 -0
- package/dist/context-vault-renderer.js +30 -0
- package/dist/context-vault-renderer.js.map +1 -0
- package/dist/context-vault-service.d.ts +17 -0
- package/dist/context-vault-service.js +183 -0
- package/dist/context-vault-service.js.map +1 -0
- package/dist/delivery-commands.d.ts +1 -0
- package/dist/delivery-commands.js +19 -1
- package/dist/delivery-commands.js.map +1 -1
- package/dist/diagram-schema.d.ts +2 -0
- package/dist/diagram-schema.js +148 -0
- package/dist/diagram-schema.js.map +1 -0
- package/dist/diagrams/geometry.d.ts +12 -0
- package/dist/diagrams/geometry.js +69 -0
- package/dist/diagrams/geometry.js.map +1 -0
- package/dist/diagrams/iconify.d.ts +22 -0
- package/dist/diagrams/iconify.js +42 -0
- package/dist/diagrams/iconify.js.map +1 -0
- package/dist/diagrams/index.d.ts +8 -0
- package/dist/diagrams/index.js +8 -0
- package/dist/diagrams/index.js.map +1 -0
- package/dist/diagrams/layout.d.ts +2 -0
- package/dist/diagrams/layout.js +142 -0
- package/dist/diagrams/layout.js.map +1 -0
- package/dist/diagrams/model.d.ts +94 -0
- package/dist/diagrams/model.js +2 -0
- package/dist/diagrams/model.js.map +1 -0
- package/dist/diagrams/pipeline.d.ts +11 -0
- package/dist/diagrams/pipeline.js +92 -0
- package/dist/diagrams/pipeline.js.map +1 -0
- package/dist/diagrams/render-svg.d.ts +7 -0
- package/dist/diagrams/render-svg.js +66 -0
- package/dist/diagrams/render-svg.js.map +1 -0
- package/dist/diagrams/validate.d.ts +5 -0
- package/dist/diagrams/validate.js +120 -0
- package/dist/diagrams/validate.js.map +1 -0
- package/dist/evidence-compaction-model.d.ts +62 -0
- package/dist/evidence-compaction-model.js +2 -0
- package/dist/evidence-compaction-model.js.map +1 -0
- package/dist/evidence-compaction-renderer.d.ts +2 -0
- package/dist/evidence-compaction-renderer.js +35 -0
- package/dist/evidence-compaction-renderer.js.map +1 -0
- package/dist/evidence-compaction-service.d.ts +11 -0
- package/dist/evidence-compaction-service.js +94 -0
- package/dist/evidence-compaction-service.js.map +1 -0
- package/dist/evidence-compaction-summary.d.ts +4 -0
- package/dist/evidence-compaction-summary.js +160 -0
- package/dist/evidence-compaction-summary.js.map +1 -0
- package/dist/handoff-acceptance-metadata.d.ts +6 -0
- package/dist/handoff-acceptance-metadata.js +8 -0
- package/dist/handoff-acceptance-metadata.js.map +1 -0
- package/dist/knowledge-base.js +7 -1
- package/dist/knowledge-base.js.map +1 -1
- package/dist/model-providers.d.ts +3 -1
- package/dist/model-providers.js +68 -11
- package/dist/model-providers.js.map +1 -1
- package/dist/performance-benchmark.d.ts +45 -0
- package/dist/performance-benchmark.js +134 -0
- package/dist/performance-benchmark.js.map +1 -0
- package/dist/phase-executor.js +24 -6
- package/dist/phase-executor.js.map +1 -1
- package/dist/planning-commands.js +23 -1
- package/dist/planning-commands.js.map +1 -1
- package/dist/provider-agent-wrapper.d.ts +12 -0
- package/dist/provider-agent-wrapper.js +264 -0
- package/dist/provider-agent-wrapper.js.map +1 -0
- package/dist/qa-commands.d.ts +1 -0
- package/dist/qa-commands.js +26 -0
- package/dist/qa-commands.js.map +1 -1
- package/dist/qa-evidence-surface-rules.d.ts +5 -0
- package/dist/qa-evidence-surface-rules.js +238 -0
- package/dist/qa-evidence-surface-rules.js.map +1 -0
- package/dist/qa-evidence-validation.d.ts +23 -0
- package/dist/qa-evidence-validation.js +78 -0
- package/dist/qa-evidence-validation.js.map +1 -0
- package/dist/quality-contracts.js +21 -6
- package/dist/quality-contracts.js.map +1 -1
- package/dist/release-candidate.d.ts +4 -0
- package/dist/release-candidate.js +54 -0
- package/dist/release-candidate.js.map +1 -1
- package/dist/release-commands.js +8 -0
- package/dist/release-commands.js.map +1 -1
- package/dist/release-readiness.d.ts +8 -0
- package/dist/release-readiness.js +59 -4
- package/dist/release-readiness.js.map +1 -1
- package/dist/release-reviewer-selection.d.ts +13 -0
- package/dist/release-reviewer-selection.js +135 -0
- package/dist/release-reviewer-selection.js.map +1 -0
- package/dist/report-index.d.ts +3 -0
- package/dist/report-index.js +3 -0
- package/dist/report-index.js.map +1 -0
- package/dist/report-model.d.ts +22 -0
- package/dist/report-model.js +2 -0
- package/dist/report-model.js.map +1 -0
- package/dist/report-render-markdown.d.ts +1 -0
- package/dist/report-render-markdown.js +40 -0
- package/dist/report-render-markdown.js.map +1 -0
- package/dist/report-schema.d.ts +2 -0
- package/dist/report-schema.js +109 -0
- package/dist/report-schema.js.map +1 -0
- package/dist/rule-catalog.d.ts +33 -0
- package/dist/rule-catalog.js +215 -0
- package/dist/rule-catalog.js.map +1 -0
- package/dist/runtime-adapters.js +4 -1
- package/dist/runtime-adapters.js.map +1 -1
- package/dist/runtime-bootstrap.js +11 -0
- package/dist/runtime-bootstrap.js.map +1 -1
- package/dist/runtime-child-prompt.d.ts +14 -0
- package/dist/runtime-child-prompt.js +49 -0
- package/dist/runtime-child-prompt.js.map +1 -0
- package/dist/runtime-commands.js +7 -2
- package/dist/runtime-commands.js.map +1 -1
- package/dist/runtime-context-manifest.d.ts +15 -1
- package/dist/runtime-context-manifest.js +24 -25
- package/dist/runtime-context-manifest.js.map +1 -1
- package/dist/runtime-context-pack-reference.d.ts +10 -0
- package/dist/runtime-context-pack-reference.js +37 -0
- package/dist/runtime-context-pack-reference.js.map +1 -0
- package/dist/runtime-execution-renderer.js +6 -0
- package/dist/runtime-execution-renderer.js.map +1 -1
- package/dist/runtime-execution.js +8 -4
- package/dist/runtime-execution.js.map +1 -1
- package/dist/runtime-lifecycle-notifications.d.ts +28 -0
- package/dist/runtime-lifecycle-notifications.js +110 -0
- package/dist/runtime-lifecycle-notifications.js.map +1 -0
- package/dist/runtime-lifecycle-watch-adapters.js +22 -3
- package/dist/runtime-lifecycle-watch-adapters.js.map +1 -1
- package/dist/runtime-lifecycle-watch.d.ts +1 -1
- package/dist/runtime-lifecycle-watch.js +55 -27
- package/dist/runtime-lifecycle-watch.js.map +1 -1
- package/dist/runtime-notification-commands.d.ts +2 -0
- package/dist/runtime-notification-commands.js +31 -0
- package/dist/runtime-notification-commands.js.map +1 -0
- package/dist/runtime-parent-action-dispatch.js +9 -0
- package/dist/runtime-parent-action-dispatch.js.map +1 -1
- package/dist/runtime-parent-actions.d.ts +2 -1
- package/dist/runtime-parent-actions.js +17 -6
- package/dist/runtime-parent-actions.js.map +1 -1
- package/dist/runtime-spawn-bridge.js +54 -41
- package/dist/runtime-spawn-bridge.js.map +1 -1
- package/dist/structured-output-validation.d.ts +9 -0
- package/dist/structured-output-validation.js +20 -0
- package/dist/structured-output-validation.js.map +1 -0
- package/dist/task-graph-commands.js +1 -1
- package/dist/task-graph-commands.js.map +1 -1
- package/dist/types/context-index.d.ts +57 -0
- package/dist/types/model-config.d.ts +93 -0
- package/dist/types/runtime.d.ts +10 -1
- package/dist/types.d.ts +4 -2
- package/dist/types.js.map +1 -1
- package/dist/web-api-read-routes.js +2 -0
- package/dist/web-api-read-routes.js.map +1 -1
- package/dist/web-api.js +45 -22
- package/dist/web-api.js.map +1 -1
- package/dist/web-console/assets/{index-jxCY5eEc.css → index-BHs7OIv8.css} +1 -1
- package/dist/web-console/assets/index-BJuVTqfQ.js +11 -0
- package/dist/web-console/index.html +2 -2
- package/dist/workflow-evidence-service.js +18 -3
- package/dist/workflow-evidence-service.js.map +1 -1
- package/dist/workflow-gates.js +1 -13
- package/dist/workflow-gates.js.map +1 -1
- package/dist/workflow-handoff-assessment.js +35 -2
- package/dist/workflow-handoff-assessment.js.map +1 -1
- package/dist/workflow-handoff-gates.d.ts +2 -0
- package/dist/workflow-handoff-gates.js +28 -0
- package/dist/workflow-handoff-gates.js.map +1 -0
- package/dist/workflow-run-commands.js +78 -1
- package/dist/workflow-run-commands.js.map +1 -1
- package/dist/workflow-services.d.ts +1 -0
- package/dist/workflow-services.js +132 -151
- package/dist/workflow-services.js.map +1 -1
- package/dist/workspace-claude-settings.d.ts +27 -0
- package/dist/workspace-claude-settings.js +54 -0
- package/dist/workspace-claude-settings.js.map +1 -0
- package/dist/workspace-runtime-bootstrap.js +5 -0
- package/dist/workspace-runtime-bootstrap.js.map +1 -1
- package/dist/workspace-selection.d.ts +12 -0
- package/dist/workspace-selection.js +25 -0
- package/dist/workspace-selection.js.map +1 -0
- package/docs/autonomous-workflow.md +3 -3
- package/docs/context-index-packs.md +45 -2
- package/docs/context-vault.md +34 -11
- package/docs/diagrams/deterministic-pipeline/README.md +102 -0
- package/docs/e2e-test-batteries.md +3 -3
- package/docs/evidence-compaction.md +25 -0
- package/docs/reports/context-pack-benchmark-gh-452.json +119 -0
- package/docs/reports/context-pack-benchmark-gh-452.md +32 -0
- package/docs/reports/gh-428-test-coverage-context-review-20260522.md +75 -0
- package/docs/rule-loading-strategy.md +37 -0
- package/docs/runtime-adapters.md +138 -27
- package/docs/security-env-vars.md +41 -0
- package/docs/sonar-quality-gates.md +23 -1
- package/package.json +4 -2
- package/rules/development/semantic-code.md +28 -0
- package/rules/diagram-quality.mdc +2 -0
- package/dist/web-console/assets/index-DA8Fs4r7.js +0 -11
package/docs/runtime-adapters.md
CHANGED
|
@@ -62,10 +62,19 @@ Provider-backed phases require explicit opt-in. Connecting a provider with
|
|
|
62
62
|
`runtimePolicy.delegation.allowDirectProviderApi=true`; without that opt-in,
|
|
63
63
|
workflow phases fail before calling the provider. Successful provider-backed
|
|
64
64
|
phases are recorded as `executor: provider-backed-phase` with provider, model,
|
|
65
|
-
fallbacks,
|
|
65
|
+
fallbacks, request id, response id, token usage source, cost source, final
|
|
66
|
+
provider/model, and `directProviderApiAllowed: true`. Runtime-native subagent
|
|
66
67
|
requests remain `directProviderApiAllowed: false`, even when provider routing is
|
|
67
68
|
configured for the same role.
|
|
68
69
|
|
|
70
|
+
Provider-backed phase execution goes through the provider-backed agent wrapper.
|
|
71
|
+
The wrapper resolves `openai`, `anthropic`, `gemini`, `ollama`, `fake`, and
|
|
72
|
+
future providers through the provider registry/factory boundary around
|
|
73
|
+
`ModelProvider`; workflow orchestration should not branch on provider vendors.
|
|
74
|
+
OpenAI/Codex provider models are provider-backed execution. `codex-cli` is a
|
|
75
|
+
runtime-native parent session and never becomes a provider API fallback unless a
|
|
76
|
+
future explicit hybrid policy records that decision as evidence.
|
|
77
|
+
|
|
69
78
|
## Init Modes
|
|
70
79
|
|
|
71
80
|
Default project init keeps the current compact bootstrap behavior:
|
|
@@ -129,6 +138,29 @@ orchestra workflow render --target codex --task STORY-001
|
|
|
129
138
|
Change `--target` to the runtime that is executing the work. The workflow state,
|
|
130
139
|
roles, evidence, reviews, and gates remain runtime-agnostic.
|
|
131
140
|
|
|
141
|
+
## Codex Recurring Preflight
|
|
142
|
+
|
|
143
|
+
Codex does not provide a project-native recurring hook that Open Orchestra can
|
|
144
|
+
install for every context compaction, resumed session, interruption, or role
|
|
145
|
+
handoff. The fallback is explicit managed guidance in `AGENTS.md` plus the
|
|
146
|
+
existing pre-run validation command.
|
|
147
|
+
|
|
148
|
+
Before each new Codex work block, and again after any context shift, run:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
orchestra health --json
|
|
152
|
+
orchestra task list --json --status pending,blocked,in_progress
|
|
153
|
+
orchestra validate --pre-run --task STORY-001 --json
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
The JSON report includes `activeOrchestraContext` and `missingActiveContext`.
|
|
157
|
+
When `activeOrchestraContext` is `false`, the current Codex session is missing
|
|
158
|
+
one or more required workflow anchors: task registration, effort estimate, or a
|
|
159
|
+
workflow run for the task. Reload task context and resume or register the
|
|
160
|
+
workflow before editing files. Evidence and review checks still appear in the
|
|
161
|
+
same report, but those are completion/handoff signals rather than active-context
|
|
162
|
+
anchors.
|
|
163
|
+
|
|
132
164
|
## Web And VS Code
|
|
133
165
|
|
|
134
166
|
The local web console exposes workspace classification and supported runtime
|
|
@@ -185,6 +217,54 @@ points to the prompt artifact, expected result artifact, ownership paths,
|
|
|
185
217
|
allowed commands, and lifecycle commands. It does not include secrets or direct
|
|
186
218
|
provider credentials.
|
|
187
219
|
|
|
220
|
+
## Runtime Spawn Bridge Boundary
|
|
221
|
+
|
|
222
|
+
Open Orchestra is the runtime delegation control plane, not the owner of hidden
|
|
223
|
+
LLM runtime tools. Core commands normalize the spawn intent, evaluate guardrails,
|
|
224
|
+
write prompt and handoff artifacts, expose parent actions, record lifecycle, and
|
|
225
|
+
resume workflows. The actual native spawn call belongs to a parent-side consumer
|
|
226
|
+
running inside the active runtime session.
|
|
227
|
+
|
|
228
|
+
The bridge contract has two sides:
|
|
229
|
+
|
|
230
|
+
- **Control-plane wrapper**: Orchestra emits a runtime-neutral request with task
|
|
231
|
+
id, run id, phase, role, context bundle, ownership paths, expected output,
|
|
232
|
+
evidence contract, queue metadata, and lifecycle commands.
|
|
233
|
+
- **Parent-side consumer**: the active Codex, Claude, Cursor, local worker, or
|
|
234
|
+
other runtime reads the parent action, invokes any native child-agent tool it
|
|
235
|
+
owns, and records `runtime spawn-lifecycle` with the real child identifier.
|
|
236
|
+
|
|
237
|
+
A session is only considered actually spawned after a lifecycle event records
|
|
238
|
+
`--status spawned` with a real runtime child id. Parent actions, request
|
|
239
|
+
artifacts, and dispatch guidance are not equivalent to a running subagent.
|
|
240
|
+
|
|
241
|
+
Adapter capability terms are strict:
|
|
242
|
+
|
|
243
|
+
- `parent-tool`: a parent runtime can invoke a native tool such as Codex
|
|
244
|
+
`spawn_agent`, but Orchestra still cannot call that hidden tool from Node.
|
|
245
|
+
- `request-only`: Orchestra can produce the request and lifecycle instructions,
|
|
246
|
+
while the parent runtime must execute the native tool manually or by following
|
|
247
|
+
its session prompt.
|
|
248
|
+
- `local-process`: a future explicit local executor can be launched as a child
|
|
249
|
+
process under Orchestra policy.
|
|
250
|
+
- `unsupported`: no subagent request should be emitted except as an explicit
|
|
251
|
+
unsupported/fallback result.
|
|
252
|
+
|
|
253
|
+
For Codex, the intended path is parent-tool mediated: Orchestra renders
|
|
254
|
+
`codex-spawn-agent`, the parent Codex agent consumes the action and calls
|
|
255
|
+
`spawn_agent`, and the returned Codex agent id is recorded through
|
|
256
|
+
`runtime spawn-lifecycle --status spawned`. Until that happens, Codex actions
|
|
257
|
+
remain requested or skipped with manual guidance.
|
|
258
|
+
|
|
259
|
+
For Claude, the current supported path is request-only or parent-agent mediated.
|
|
260
|
+
Claude Code's parent session can launch Agent/Subagent work, but Orchestra
|
|
261
|
+
cannot invoke that tool directly from its CLI process. Real automation requires
|
|
262
|
+
the parent Claude agent to follow the session instruction to inspect
|
|
263
|
+
`runtime parent-actions` and call the Agent tool, or a future Claude hook/API
|
|
264
|
+
that can trigger the same action. Until such a hook or callback is available and
|
|
265
|
+
verified, automated Claude native execution remains deferred/manual and must not
|
|
266
|
+
claim spawned lifecycle.
|
|
267
|
+
|
|
188
268
|
Pending parent actions also include structured `eligibility` metadata. The
|
|
189
269
|
metadata records the checked runtime, action kind, tool name, session status,
|
|
190
270
|
runtime filter when supplied, and safety state. Dispatchable actions report
|
|
@@ -200,13 +280,14 @@ have two supported paths:
|
|
|
200
280
|
- Manual inspection: run `runtime parent-actions --task <id> --json`, inspect
|
|
201
281
|
each requested action, call the active runtime's native tool, then record
|
|
202
282
|
`runtime spawn-lifecycle` with the returned child id.
|
|
203
|
-
-
|
|
283
|
+
- Verified dispatch: run
|
|
204
284
|
`runtime parent-actions --task <id> --dispatch --until-idle --runtime <runtime-id>`.
|
|
205
285
|
The dispatcher repeatedly inspects pending parent actions, dispatches only
|
|
206
286
|
safe actions for the active runtime, records spawned and active lifecycle
|
|
207
|
-
events
|
|
208
|
-
`runtime watch` completions when expected handoff
|
|
209
|
-
paused workflow runs, and continues across later
|
|
287
|
+
events only when the adapter has a real runtime child id or verified callback
|
|
288
|
+
correlation id, applies `runtime watch` completions when expected handoff
|
|
289
|
+
artifacts appear, resumes paused workflow runs, and continues across later
|
|
290
|
+
phases until idle or timeout.
|
|
210
291
|
|
|
211
292
|
The auto-dispatch loop is bounded by `--timeout`, `--idle-timeout`, and
|
|
212
293
|
`--interval`, so it never polls forever. It skips queued actions, suspended
|
|
@@ -216,14 +297,17 @@ manual requests, and tool mismatches. Skipped actions include fallback guidance
|
|
|
216
297
|
with the prompt artifact, expected result artifact, and manual lifecycle
|
|
217
298
|
commands so a human parent runtime can safely continue without provider API
|
|
218
299
|
access. This keeps the boundary explicit: Orchestra emits auditable actions and
|
|
219
|
-
lifecycle commands; the active parent runtime
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
300
|
+
lifecycle commands; the active parent runtime or a verified local bridge
|
|
301
|
+
executes native tools. Codex dispatch cannot invoke `spawn_agent` from the CLI
|
|
302
|
+
process, so `codex-spawn-agent` dispatch returns manual guidance and must not
|
|
303
|
+
record `spawned` until the Codex parent runtime has called `spawn_agent` and
|
|
304
|
+
then runs `runtime spawn-lifecycle --status spawned` with the real returned
|
|
305
|
+
agent id. For Claude, the tested dispatch contract accepts
|
|
306
|
+
`claude-agent-request` with `tool=claude-code-agent`, but it records `spawned`
|
|
307
|
+
and `active` only when the active parent runtime is Claude and the native
|
|
308
|
+
callback capability is explicitly verified. Unsupported Codex, CI, non-Claude,
|
|
309
|
+
or callback-unavailable contexts return fallback guidance and do not claim
|
|
310
|
+
native execution. Orchestra does not call Claude Code, Anthropic APIs, or
|
|
227
311
|
another provider API.
|
|
228
312
|
|
|
229
313
|
Runtime-native dispatch also enforces delegation capacity before calling parent
|
|
@@ -238,14 +322,37 @@ or gates from flooding the parent runtime at once while still allowing
|
|
|
238
322
|
background work to continue as capacity becomes available.
|
|
239
323
|
|
|
240
324
|
Runtime lifecycle watching is adapter-driven. Each inspected session reports a
|
|
241
|
-
`watcher` object with adapter id, detection mode, support level,
|
|
242
|
-
behavior, and the reason a native callback is
|
|
243
|
-
`claude-cli`, and `cursor-cli`
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
325
|
+
`watcher` object with adapter id, detection mode, support level, supported
|
|
326
|
+
completion signals, fallback behavior, and the reason a native callback is
|
|
327
|
+
unavailable. `codex-cli`, `claude-cli`, and `cursor-cli` reconcile completion
|
|
328
|
+
through observable runtime notifications, explicit lifecycle events, child
|
|
329
|
+
self-report commands, and bounded expected-artifact inspection. `generic-runtime`,
|
|
330
|
+
unknown runtime ids, and runtimes without declared callbacks use the same safe
|
|
331
|
+
artifact fallback directly. Event-driven callbacks should only be used when the
|
|
332
|
+
selected watcher adapter declares native support; otherwise `runtime watch`
|
|
333
|
+
requires a safe handoff artifact or a recorded runtime notification before it
|
|
334
|
+
marks a session terminal.
|
|
335
|
+
|
|
336
|
+
Runtime notifications are provider-neutral. A parent runtime, local integration,
|
|
337
|
+
web callback, or child agent that cannot directly run `runtime spawn-lifecycle`
|
|
338
|
+
can record an observable signal with:
|
|
339
|
+
|
|
340
|
+
```bash
|
|
341
|
+
orchestra runtime notification --session <session-id> --status completed --artifact <expected-handoff.md> --agent-id <runtime-child-id>
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
The watcher still validates task id, phase, role, runtime, session id, and the
|
|
345
|
+
expected handoff artifact before applying completion. A notification without the
|
|
346
|
+
expected artifact stays waiting; a mismatched or unsafe artifact is skipped with
|
|
347
|
+
an explicit reason. Failed notifications record failed lifecycle state and do not
|
|
348
|
+
auto-resume the workflow.
|
|
349
|
+
For spawned or active sessions, expected handoff validation runs before timeout
|
|
350
|
+
evaluation. A stale session that already produced the valid expected handoff is
|
|
351
|
+
completed, while stale sessions without a valid completion artifact can still be
|
|
352
|
+
marked timed out.
|
|
353
|
+
Requested sessions are also reconciled from a valid expected handoff artifact.
|
|
354
|
+
This covers parent runtimes that produce the handoff but cannot self-report the
|
|
355
|
+
intermediate spawned lifecycle event.
|
|
249
356
|
|
|
250
357
|
## Claude Adapter Support Level
|
|
251
358
|
|
|
@@ -321,7 +428,10 @@ They need a precise packet and lifecycle hooks:
|
|
|
321
428
|
assignment. In workflow auto-consumer mode, use
|
|
322
429
|
`runtime parent-actions --dispatch --until-idle --runtime codex-cli` to
|
|
323
430
|
discover and consume safe actions after the run pauses. Keep the child
|
|
324
|
-
detached unless the parent is blocked.
|
|
431
|
+
detached unless the parent is blocked. The child prompt must write the
|
|
432
|
+
expected handoff and self-report completion with `runtime spawn-lifecycle`; if
|
|
433
|
+
the runtime cannot execute commands, it must emit a runtime notification that
|
|
434
|
+
can be reconciled by `runtime watch`.
|
|
325
435
|
- Cursor: render `runtime spawn-request`, then launch it as a Cursor Background
|
|
326
436
|
Agent. Background work should stay detached from the current chat and report
|
|
327
437
|
lifecycle state back to Orchestra before the workflow is resumed.
|
|
@@ -350,12 +460,13 @@ role/profile with the runtime executor:
|
|
|
350
460
|
- **Subagent**: a runtime-native role-scoped execution unit, only available
|
|
351
461
|
when the selected runtime adapter declares `subagents.runtimeNative: true`
|
|
352
462
|
and a supported `subagents.spawn.mode`.
|
|
353
|
-
- **Spawn bridge**: the runtime-specific mechanism for
|
|
463
|
+
- **Spawn bridge**: the runtime-specific mechanism for requesting that child
|
|
354
464
|
execution. Modes are `unsupported`, `request-only`, `parent-tool`, and
|
|
355
|
-
`local-process`. `codex-cli`
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
465
|
+
`local-process`. `codex-cli` renders a `spawn_agent` request for the active
|
|
466
|
+
Codex parent session, but the parent Codex agent must call the tool and record
|
|
467
|
+
the returned id. `claude-cli` is request-only or parent-agent mediated until a
|
|
468
|
+
reliable hook/API/callback is available. Other runtimes can consume the same
|
|
469
|
+
request artifact without allowing Orchestra to call vendor APIs directly.
|
|
359
470
|
- **Provider**: a direct model/provider route used by provider-backed phase
|
|
360
471
|
prompts. Provider APIs are separate from runtime-native subagents and are
|
|
361
472
|
never used as a silent fallback for runtime delegation.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Security Environment Variable Manifest
|
|
2
|
+
|
|
3
|
+
This manifest documents environment variable names that are referenced by local
|
|
4
|
+
security-sensitive automation and runtime detection. It intentionally records
|
|
5
|
+
names only; secret values must stay in the caller environment, CI secret store,
|
|
6
|
+
or local secret files.
|
|
7
|
+
|
|
8
|
+
## Local Runtime And Tooling
|
|
9
|
+
|
|
10
|
+
- `ANTHROPIC_API_KEY_FILE`: optional Anthropic credential file path.
|
|
11
|
+
- `CLAUDE_CODE`: Claude Code runtime marker.
|
|
12
|
+
- `CLAUDECODE`: Claude Code runtime marker.
|
|
13
|
+
- `CODEX_SANDBOX`: Codex runtime marker.
|
|
14
|
+
- `CODEX_THREAD_ID`: Codex runtime marker.
|
|
15
|
+
- `CURSOR_AGENT`: Cursor runtime marker.
|
|
16
|
+
- `CURSOR_TRACE_ID`: Cursor runtime marker.
|
|
17
|
+
- `OLLAMA_API_KEY_FILE`: optional Ollama credential file path.
|
|
18
|
+
- `OPENAI_API_KEY_FILE`: optional OpenAI credential file path.
|
|
19
|
+
- `OPEN_ORCHESTRA_CLAUDE_NATIVE_CALLBACK`: local Claude native callback marker.
|
|
20
|
+
- `OPEN_ORCHESTRA_CLAUDE_NATIVE_CHILD_ID`: Claude native child id marker.
|
|
21
|
+
- `ORCHESTRA_GITLEAKS_BIN`: optional absolute gitleaks binary override.
|
|
22
|
+
- `ORCHESTRA_SECRET_SCAN_FORCE_FALLBACK`: forces fallback secret scanning.
|
|
23
|
+
- `ORCHESTRA_SKIP_UPDATE_CHECK`: disables package update checks.
|
|
24
|
+
- `ORCHESTRA_UPDATE_CHECK_CACHE_DIR`: package update check cache directory.
|
|
25
|
+
- `ORCHESTRA_WORKFLOW_HEARTBEAT_MS`: workflow heartbeat interval override.
|
|
26
|
+
|
|
27
|
+
## CI And Release Automation
|
|
28
|
+
|
|
29
|
+
- `CF_ACCESS_PROXY_LISTEN_HOST`: local Cloudflare Access proxy host.
|
|
30
|
+
- `CF_ACCESS_PROXY_LISTEN_PORT`: local Cloudflare Access proxy port.
|
|
31
|
+
- `CLOUDFLARE_ACCOUNT_ID`: Cloudflare account identifier from CI secrets.
|
|
32
|
+
- `CLOUDFLARE_API_TOKEN`: Cloudflare deployment token from CI secrets.
|
|
33
|
+
- `GH_TOKEN`: GitHub CLI token provided by GitHub Actions.
|
|
34
|
+
- `GITHUB_HEAD_REF`: GitHub Actions pull request source branch.
|
|
35
|
+
- `GITHUB_REPOSITORY`: GitHub Actions repository slug.
|
|
36
|
+
- `GITLEAKS_ASSET`: temporary gitleaks release asset name in CI.
|
|
37
|
+
- `GITLEAKS_VERSION`: pinned gitleaks release version in CI.
|
|
38
|
+
- `NPM_USER`: npm authenticated username captured during release validation.
|
|
39
|
+
- `NPM_VERSION`: npm package version captured during release validation.
|
|
40
|
+
- `PKG_VERSION`: package version used by release tag creation.
|
|
41
|
+
- `PRERELEASE_FLAG`: release tag prerelease marker.
|
|
@@ -18,6 +18,28 @@ Supported provider modes:
|
|
|
18
18
|
regulated tenants, private codebases, or repositories where hosted LOC limits
|
|
19
19
|
and external API permissions are a concern.
|
|
20
20
|
|
|
21
|
+
### Community Branch and PR Decoration Option
|
|
22
|
+
|
|
23
|
+
SonarQube Community Edition does not include the same branch analysis and pull
|
|
24
|
+
request decoration capabilities as paid editions. If those capabilities are
|
|
25
|
+
needed in a private local or self-hosted Community setup, evaluate
|
|
26
|
+
[`mc1arke/sonarqube-community-branch-plugin`](https://github.com/mc1arke/sonarqube-community-branch-plugin)
|
|
27
|
+
as an optional infrastructure add-on.
|
|
28
|
+
|
|
29
|
+
Use this only as an explicitly accepted operational dependency:
|
|
30
|
+
|
|
31
|
+
- It is not maintained or supported by SonarSource.
|
|
32
|
+
- Plugin compatibility follows the SonarQube major/minor version; pin the image
|
|
33
|
+
or plugin release to the running SonarQube version.
|
|
34
|
+
- Migration from Community Edition plus this plugin to commercial SonarQube
|
|
35
|
+
editions has no guaranteed official upgrade path.
|
|
36
|
+
- SaaS or regulated-tenant usage requires a separate security, supportability,
|
|
37
|
+
upgrade, backup, and rollback review before adoption.
|
|
38
|
+
|
|
39
|
+
For low-cost local dogfooding, prefer the plugin's published Docker image or a
|
|
40
|
+
separate shared SonarQube infrastructure repository instead of coupling plugin
|
|
41
|
+
installation to this product repository.
|
|
42
|
+
|
|
21
43
|
Required GitHub secret when the GitHub Actions workflow is enabled:
|
|
22
44
|
|
|
23
45
|
- `SONAR_TOKEN`: token for SonarQube Cloud or SonarQube Server.
|
|
@@ -394,7 +416,7 @@ rules, and Orchestra review gates.
|
|
|
394
416
|
|
|
395
417
|
Until Sonar directives are adopted, architecture violations are enforced through:
|
|
396
418
|
|
|
397
|
-
- repo standards in `AGENTS.md` and
|
|
419
|
+
- repo standards in `AGENTS.md` and neutral rule sources selected by Orchestra;
|
|
398
420
|
- architecture gate decisions and ADR-style records;
|
|
399
421
|
- code review against domain boundaries;
|
|
400
422
|
- tests that protect command contracts, workflow behavior, and generated
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jterrats/open-orchestra",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.16",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"workspaces": [
|
|
6
6
|
"extensions/vscode-open-orchestra",
|
|
@@ -17,13 +17,15 @@
|
|
|
17
17
|
"test:coverage": "npm run build && c8 --reporter=lcov --reports-dir coverage --exclude \"test/**\" --exclude \"e2e/**\" --exclude \"extensions/**/test/**\" --exclude \"dist/assets/**\" --exclude \"dist/web-console/**\" node --test test/**/*.js extensions/**/*.test.cjs",
|
|
18
18
|
"test:e2e": "npm run build && npm run site:build && playwright test",
|
|
19
19
|
"test:e2e:init": "node --test e2e/init-onboarding.test.js e2e/runtime-instruction-flow.test.js",
|
|
20
|
-
"test:e2e:runtime": "node --test e2e/runtime-manual-queue.test.js",
|
|
20
|
+
"test:e2e:runtime": "node --test e2e/runtime-manual-queue.test.js e2e/runtime-multi-squad.test.js",
|
|
21
|
+
"test:e2e:security": "npm run build && node --test e2e/security-boundaries.test.js",
|
|
21
22
|
"test:e2e:runtime:ollama": "npm run build && node --test e2e/runtime-ollama-provider.test.js",
|
|
22
23
|
"lint": "eslint . && prettier --check \"{bin,e2e,scripts,test,src}/**/*.js\" \"{site,web-console}/src/**/*.{css,js,jsx}\" \"{site,web-console}/*.{html,js,json}\" \"extensions/**/*.{cjs,json,md}\" \"src/**/*.ts\" \"*.{js,json}\"",
|
|
23
24
|
"format": "prettier --write \"{bin,e2e,scripts,test,src}/**/*.js\" \"{site,web-console}/src/**/*.{css,js,jsx}\" \"{site,web-console}/*.{html,js,json}\" \"extensions/**/*.{cjs,json,md}\" \"src/**/*.ts\" \"*.{js,json}\"",
|
|
24
25
|
"secret-scan": "node scripts/secret-scan.js",
|
|
25
26
|
"security:audit": "node scripts/security-audit.js",
|
|
26
27
|
"architecture:inventory": "npm run build && node scripts/architecture-debt-inventory.js",
|
|
28
|
+
"context:pack:bench": "npm run build && node scripts/context-pack-benchmark.js --report-dir docs/reports",
|
|
27
29
|
"duplicates": "jscpd --config .jscpd.json",
|
|
28
30
|
"validate:workflow": "node scripts/validate-workflow.js",
|
|
29
31
|
"release:matrix": "node scripts/release-test-matrix.js",
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Semantic Code
|
|
2
|
+
|
|
3
|
+
Code must be readable by intent before it is explained by comments.
|
|
4
|
+
|
|
5
|
+
## Naming
|
|
6
|
+
|
|
7
|
+
- Use domain language for modules, functions, variables, types, and test names.
|
|
8
|
+
- Prefer names that reveal purpose and observable behavior, such as `validateReleaseGateEvidence`, not vague names such as `processData`.
|
|
9
|
+
- Boolean names must make the predicate clear: `isReady`, `hasEvidence`, `canRetry`, `shouldBlockRelease`.
|
|
10
|
+
|
|
11
|
+
## Structure
|
|
12
|
+
|
|
13
|
+
- Keep entry points thin. Move decisions and business rules into focused domain, service, or policy modules.
|
|
14
|
+
- Extract helpers when a reader needs comments to understand a block of code.
|
|
15
|
+
- Avoid generic containers in public APIs when narrow types or explicit models can describe the contract.
|
|
16
|
+
- Avoid hardcoded command lists, statuses, roles, labels, or fixture values when a typed registry or catalog can be the source of truth.
|
|
17
|
+
|
|
18
|
+
## Comments
|
|
19
|
+
|
|
20
|
+
- Comments explain why, trade-offs, invariants, or external constraints.
|
|
21
|
+
- Do not add comments that restate what the code already says.
|
|
22
|
+
- If a function needs line-by-line comments to be understandable, refactor the names, types, or helper boundaries.
|
|
23
|
+
|
|
24
|
+
## Review Checklist
|
|
25
|
+
|
|
26
|
+
- A reviewer can identify the domain intent from names and file boundaries without tracing every line.
|
|
27
|
+
- New code follows the existing project vocabulary and layering.
|
|
28
|
+
- Tests read like behavior specifications and use meaningful scenario names.
|
|
@@ -25,6 +25,8 @@
|
|
|
25
25
|
- Validate annotation target clarity; annotation arrows must visibly land on the element or line they describe, and annotation text must not obscure the target.
|
|
26
26
|
- For diagrams without a source reference, create a diagram contract before drawing and validate the render against that contract before handoff.
|
|
27
27
|
- Source-free diagrams still require a pixel-perfect pass against their own contract before delivery: no text overflow, no clipped containers, no floating or buried connector endpoints, no unintended overlaps, no hidden arrowheads, and no incoherent whitespace.
|
|
28
|
+
- For deterministic SVG pipeline work, treat the typed diagram model as the source of truth. Layout, SVG rendering, validation findings, icon references, and final deliverables must be reproducible from model input without LLM-selected absolute coordinates.
|
|
29
|
+
- Icon references in deterministic diagrams should use semantic purpose plus Iconify id, resolved from a cacheable source. Tests must not require network access to fetch icons.
|
|
28
30
|
- For source-free diagrams, iterate after the first render until container sizes, line routing, connector anchors, label positions, and visual balance are correct. Do not deliver an unreviewed first render.
|
|
29
31
|
- For every post-render correction, re-run the full diagram review rather than checking only the edited area. A diagram passes only when the whole canvas still satisfies container containment, label clearance, connector routing, z-order, and whitespace rules.
|
|
30
32
|
- A regenerated diagram must materially change geometry for the finding it claims to fix. If two versions preserve the same collision, overflow, endpoint gap, or unnecessary route bend, change the layout strategy instead of only re-rendering.
|