@open-agent-toolkit/cli 0.1.46 → 0.1.50
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/assets/agents/oat-phase-implementer.md +202 -191
- package/assets/agents/oat-reviewer.md +11 -1
- package/assets/config/dispatch-matrix-recommendation.json +120 -13
- package/assets/docs/cli-utilities/configuration.md +213 -113
- package/assets/docs/cli-utilities/workflow-gates.md +178 -27
- package/assets/docs/contributing/skills.md +14 -8
- package/assets/docs/provider-sync/providers.md +46 -8
- package/assets/docs/provider-sync/scope-and-surface.md +2 -2
- package/assets/docs/reference/cli-reference.md +3 -1
- package/assets/docs/reference/oat-directory-structure.md +27 -26
- package/assets/docs/workflows/projects/artifacts.md +31 -1
- package/assets/docs/workflows/projects/dispatch-ceiling.md +297 -197
- package/assets/docs/workflows/projects/implementation-execution.md +306 -249
- package/assets/docs/workflows/projects/lifecycle.md +26 -5
- package/assets/docs/workflows/projects/reviews.md +27 -2
- package/assets/migration/pjm-restructure.md +1 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-implement/SKILL.md +290 -149
- package/assets/skills/oat-project-import-plan/SKILL.md +173 -16
- package/assets/skills/oat-project-next/SKILL.md +2 -2
- package/assets/skills/oat-project-plan/SKILL.md +122 -92
- package/assets/skills/oat-project-plan-writing/SKILL.md +246 -15
- package/assets/skills/oat-project-quick-start/SKILL.md +157 -107
- package/assets/skills/oat-project-review-provide/SKILL.md +110 -22
- package/assets/skills/oat-project-review-provide-remote/SKILL.md +28 -1
- package/dist/commands/config/index.d.ts +3 -0
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +92 -125
- package/dist/commands/doctor/index.d.ts +3 -0
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +57 -95
- package/dist/commands/gate/index.d.ts +7 -1
- package/dist/commands/gate/index.d.ts.map +1 -1
- package/dist/commands/gate/index.js +615 -67
- package/dist/commands/gate/review-verdict.d.ts +16 -0
- package/dist/commands/gate/review-verdict.d.ts.map +1 -1
- package/dist/commands/gate/review-verdict.js +72 -9
- package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
- package/dist/commands/project/dispatch-ceiling/index.js +567 -99
- package/dist/commands/providers/codex/materialize.d.ts.map +1 -1
- package/dist/commands/providers/codex/materialize.js +6 -1
- package/dist/commands/shared/frontmatter.d.ts +4 -0
- package/dist/commands/shared/frontmatter.d.ts.map +1 -1
- package/dist/commands/shared/frontmatter.js +23 -0
- package/dist/commands/status/index.d.ts +1 -0
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +10 -4
- package/dist/commands/sync/index.d.ts.map +1 -1
- package/dist/commands/sync/index.js +10 -3
- package/dist/commands/sync/sync.types.d.ts +1 -0
- package/dist/commands/sync/sync.types.d.ts.map +1 -1
- package/dist/config/dispatch-matrix.d.ts +59 -0
- package/dist/config/dispatch-matrix.d.ts.map +1 -0
- package/dist/config/dispatch-matrix.js +264 -0
- package/dist/config/oat-config.d.ts +9 -18
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +99 -120
- package/dist/config/resolve.d.ts +8 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +66 -1
- package/dist/engine/index.d.ts +1 -1
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +1 -1
- package/dist/engine/scanner.d.ts +1 -0
- package/dist/engine/scanner.d.ts.map +1 -1
- package/dist/engine/scanner.js +17 -1
- package/dist/fs/paths.d.ts +4 -0
- package/dist/fs/paths.d.ts.map +1 -1
- package/dist/fs/paths.js +18 -1
- package/dist/providers/ceiling/registry.d.ts +1 -0
- package/dist/providers/ceiling/registry.d.ts.map +1 -1
- package/dist/providers/ceiling/registry.js +12 -5
- package/dist/providers/codex/codec/catalog.d.ts +14 -0
- package/dist/providers/codex/codec/catalog.d.ts.map +1 -0
- package/dist/providers/codex/codec/catalog.js +21 -0
- package/dist/providers/codex/codec/materialize.d.ts.map +1 -1
- package/dist/providers/codex/codec/materialize.js +6 -5
- package/dist/providers/codex/codec/shared.d.ts +19 -0
- package/dist/providers/codex/codec/shared.d.ts.map +1 -1
- package/dist/providers/codex/codec/shared.js +98 -5
- package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/codex/codec/sync-extension.js +142 -32
- package/dist/providers/identity/availability.d.ts +12 -0
- package/dist/providers/identity/availability.d.ts.map +1 -1
- package/dist/providers/identity/availability.js +72 -29
- package/dist/providers/identity/dispatch-report.d.ts +124 -0
- package/dist/providers/identity/dispatch-report.d.ts.map +1 -0
- package/dist/providers/identity/dispatch-report.js +285 -0
- package/dist/providers/identity/dispatch-validation.d.ts +28 -0
- package/dist/providers/identity/dispatch-validation.d.ts.map +1 -0
- package/dist/providers/identity/dispatch-validation.js +149 -0
- package/dist/providers/identity/stamp.d.ts +2 -0
- package/dist/providers/identity/stamp.d.ts.map +1 -1
- package/dist/providers/identity/stamp.js +7 -1
- package/dist/shared/types.d.ts +1 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +4 -0
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-quick-start
|
|
3
|
-
version: 2.1.
|
|
3
|
+
version: 2.1.13
|
|
4
4
|
description: Use when a task is small enough for quick mode or rapid iteration is preferred. Scaffolds a lightweight OAT project from discovery directly to a runnable plan, with optional brainstorming and lightweight design.
|
|
5
5
|
argument-hint: '<project-name> ["project description"]'
|
|
6
6
|
oat_gateable: true
|
|
@@ -434,20 +434,54 @@ git add "$PROJECT_PATH/discovery.md" "$PROJECT_PATH/state.md"
|
|
|
434
434
|
git diff --cached --quiet || git commit -m "chore(oat): complete quick-start discovery for {project-name}"
|
|
435
435
|
```
|
|
436
436
|
|
|
437
|
+
### Step 2.9: Snapshot Explicit Phase-Review Setting Before Plan Rewrite
|
|
438
|
+
|
|
439
|
+
Before any template-based create, update, replacement, or normalization of
|
|
440
|
+
`"$PROJECT_PATH/plan.md"`, inspect the existing plan frontmatter and snapshot:
|
|
441
|
+
|
|
442
|
+
1. The key presence of `oat_phase_review_gate` as a separate boolean. Presence
|
|
443
|
+
is not truthiness: an explicit key is authoritative regardless of validity or
|
|
444
|
+
value.
|
|
445
|
+
2. When the key is present, the complete explicit value as the exact YAML
|
|
446
|
+
frontmatter entry, including its full nested mapping or scalar form. Preserve
|
|
447
|
+
enabled, disabled, selected-phase, `null`, and malformed-for-contract values
|
|
448
|
+
verbatim; do not normalize, validate, or reconstruct the value while taking
|
|
449
|
+
the snapshot.
|
|
450
|
+
|
|
451
|
+
This snapshot protects a resumed explicit value from the template rewrite. Its
|
|
452
|
+
explicit presence must not trigger a target probe or re-prompt, even when the
|
|
453
|
+
preserved value is `null` or malformed for the phase-review contract.
|
|
454
|
+
|
|
437
455
|
### Step 3: Generate Plan Directly
|
|
438
456
|
|
|
439
457
|
Create/update `"$PROJECT_PATH/plan.md"` from `.oat/templates/plan.md`.
|
|
440
458
|
|
|
459
|
+
Restore the exact snapshot into the resulting `plan.md` frontmatter as part of
|
|
460
|
+
the first resulting plan write, before any later frontmatter rewrite and before
|
|
461
|
+
Step 3.55 invokes the shared setup contract. Carry the snapshot losslessly
|
|
462
|
+
through every subsequent plan update. When the key was explicitly present, its
|
|
463
|
+
complete value must still be present exactly as captured; do not probe,
|
|
464
|
+
re-prompt, validate, or replace it here. When the key was absent, do not invent
|
|
465
|
+
one before the shared setup contract runs.
|
|
466
|
+
|
|
441
467
|
Required frontmatter updates:
|
|
442
468
|
|
|
443
|
-
- `oat_status:
|
|
444
|
-
- `oat_ready_for:
|
|
469
|
+
- `oat_status: in_progress`
|
|
470
|
+
- `oat_ready_for: null`
|
|
445
471
|
- `oat_phase: plan`
|
|
446
|
-
- `oat_phase_status:
|
|
472
|
+
- `oat_phase_status: in_progress`
|
|
447
473
|
- `oat_plan_source: quick`
|
|
448
474
|
- `oat_import_reference: null`
|
|
449
475
|
- `oat_import_source_path: null`
|
|
450
476
|
- `oat_import_provider: null`
|
|
477
|
+
- `oat_template: true`
|
|
478
|
+
|
|
479
|
+
These values are the interruption-safe pre-review state. Here,
|
|
480
|
+
`oat_template: true` marks the generated plan as still owned by the current
|
|
481
|
+
planning workflow even after its substantive content has been written. If the
|
|
482
|
+
skill pauses, is interrupted, or cannot resolve dispatch before Step 3.7,
|
|
483
|
+
persist and commit this state. `oat-project-next` must route it back to the
|
|
484
|
+
current planning workflow and cannot advance it to implementation.
|
|
451
485
|
|
|
452
486
|
Plan requirements — apply `oat-project-plan-writing` canonical format invariants:
|
|
453
487
|
|
|
@@ -470,124 +504,96 @@ Required parallelism pass before finalizing the plan:
|
|
|
470
504
|
### Step 3.5: Resolve Dispatch Policy Before Implementation Readiness
|
|
471
505
|
|
|
472
506
|
Before moving the quick project to ready-for-implementation, resolve the
|
|
473
|
-
dispatch
|
|
507
|
+
complete dispatch ladder and the project named ceiling.
|
|
474
508
|
|
|
475
|
-
|
|
509
|
+
Invoke the `Complete Dispatch Ladder Adoption Contract` from
|
|
510
|
+
`oat-project-plan-writing`. If the effective ladder is missing or incomplete,
|
|
511
|
+
show the full bundled recommendation and ask the user to select its owning
|
|
512
|
+
scope before running exactly one command:
|
|
476
513
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
514
|
+
```bash
|
|
515
|
+
oat config adopt dispatch-matrix --shared
|
|
516
|
+
oat config adopt dispatch-matrix --local
|
|
517
|
+
oat config adopt dispatch-matrix --user
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
The selected scope owns only the reusable ladders. A project-specific active
|
|
521
|
+
policy or ceiling must not be written to user `~/.oat/config.json`.
|
|
522
|
+
Adoption preserves explicit cells, so re-run the resolver and completeness
|
|
523
|
+
check. An incomplete or missing ladder after adoption blocks readiness; do not
|
|
524
|
+
overwrite explicit cells or silently infer a fallback. Non-interactive setup
|
|
525
|
+
also blocks on a missing or incomplete ladder.
|
|
526
|
+
|
|
527
|
+
Then resolve the named ceiling in this order:
|
|
483
528
|
|
|
484
|
-
|
|
485
|
-
|
|
529
|
+
1. Project `state.md` frontmatter `oat_dispatch_policy`
|
|
530
|
+
2. Legacy project `oat_dispatch_ceiling`
|
|
531
|
+
3. Config `workflow.dispatchPolicy.*` as a proposed starting value
|
|
532
|
+
4. Interactive quick-planning prompt
|
|
533
|
+
5. Unresolved non-interactive state blocks implementation readiness
|
|
486
534
|
|
|
487
|
-
Generate the
|
|
488
|
-
presenting it:
|
|
535
|
+
Generate the canonical prompt with:
|
|
489
536
|
|
|
490
537
|
```bash
|
|
491
538
|
oat project dispatch-ceiling choices --format markdown
|
|
492
539
|
```
|
|
493
540
|
|
|
494
|
-
Do not hand-type the dispatch policy menu
|
|
495
|
-
|
|
496
|
-
`
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
At minimum, preserve these semantics in any fallback text:
|
|
501
|
-
|
|
502
|
-
- `Uncapped`: OAT still manages dispatch selection, but stores no maximum cap.
|
|
503
|
-
It is not host/default behavior and must not be represented by absent policy
|
|
504
|
-
state.
|
|
505
|
-
- `Inherit Host Defaults`: OAT does not choose model or effort controls; the
|
|
506
|
-
executing host/provider owns implementation, fix, and review defaults.
|
|
507
|
-
- `Leave Unresolved`: planning/preflight deferral only. It records no runtime
|
|
508
|
-
policy. Implementation preflight must block until a policy resolves.
|
|
509
|
-
|
|
510
|
-
OAT applies managed policies where the provider exposes a reliable mechanism
|
|
511
|
-
(Codex: pinned variants; Claude: Task model parameter). Other providers may
|
|
512
|
-
treat managed policies as advisory until their provider column has a resolvable
|
|
513
|
-
matrix cell.
|
|
514
|
-
|
|
515
|
-
For multi-family providers such as Cursor, these options choose the abstract
|
|
516
|
-
policy rung; concrete model values live in the dispatch matrix under
|
|
517
|
-
`workflow.dispatchCeiling.providers.*`. If the user wants OAT's recommended
|
|
518
|
-
starting matrix, offer `oat config adopt dispatch-matrix` for the chosen config
|
|
519
|
-
layer before finalizing `plan.md`.
|
|
520
|
-
|
|
521
|
-
**Managed capped policy selection** persists `mode: managed`,
|
|
522
|
-
`policy`, and the compiled provider targets. On selection, print the exact
|
|
523
|
-
compiled result (e.g., "Dispatch policy set: balanced → Codex: high · Claude:
|
|
524
|
-
sonnet") before proceeding.
|
|
525
|
-
|
|
526
|
-
If the resolver reports that the selected policy has a missing matrix cell for
|
|
527
|
-
the active provider/tier, run prompt-and-persist once before final review:
|
|
528
|
-
|
|
529
|
-
1. Ask for the exact provider value for the missing cell, using the provider's
|
|
530
|
-
native vocabulary (for example, `composer-2.5`, `gpt-5.5-xhigh`, `opus`, or
|
|
531
|
-
`xhigh`), or an ordered route when escalation needs multiple targets.
|
|
532
|
-
2. Persist the answer to the selected config layer with
|
|
533
|
-
`workflow.dispatchCeiling.providers.<provider>.<tier>`. Use project
|
|
534
|
-
`state.md` only for sparse project-specific matrix overrides.
|
|
535
|
-
3. Re-run the resolver. Do not silently treat a missing cell as uncapped,
|
|
536
|
-
inherited, or provider-default behavior.
|
|
537
|
-
|
|
538
|
-
**Uncapped** persists explicit managed uncapped state. OAT still manages
|
|
539
|
-
dispatch selection. It does not write provider caps, and it must not be
|
|
540
|
-
represented by leaving dispatch policy state absent.
|
|
541
|
-
|
|
542
|
-
**Inherit Host Defaults** persists explicit inherit/default state. Use this only
|
|
543
|
-
when the user wants OAT to leave implementation, fix, and review model/effort
|
|
544
|
-
controls to the executing host/provider. OAT does not choose model or effort in
|
|
545
|
-
this mode.
|
|
546
|
-
|
|
547
|
-
**Leave Unresolved** leaves dispatch policy unset for implementation preflight.
|
|
548
|
-
Use this only when non-interactive planning cannot choose a policy yet.
|
|
549
|
-
Implementation preflight must block until a policy resolves.
|
|
550
|
-
|
|
551
|
-
Persist the answer in `"$PROJECT_PATH/state.md"` frontmatter using the
|
|
552
|
-
normalized shape:
|
|
541
|
+
Do not hand-type the dispatch policy menu.
|
|
542
|
+
`Uncapped`: OAT still manages dispatch selection. It has no named maximum.
|
|
543
|
+
`Inherit Host Defaults`: OAT does not choose model or effort.
|
|
544
|
+
`Leave Unresolved` is a planning deferral.
|
|
545
|
+
Implementation preflight must block until a runnable ceiling resolves.
|
|
553
546
|
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
claude: sonnet
|
|
561
|
-
source: project-state
|
|
562
|
-
```
|
|
563
|
-
|
|
564
|
-
For `Uncapped`:
|
|
547
|
+
The menu includes every named tier plus `Uncapped`, `Inherit Host
|
|
548
|
+
Defaults`, and `Leave Unresolved`. A named tier is a maximum, never an
|
|
549
|
+
enduring exact model-family or effort preference. A named `High` ceiling
|
|
550
|
+
keeps lower configured `Economy`, `Balanced`, and `High` candidates
|
|
551
|
+
available at or below that maximum. An optional phase Dispatch Profile may
|
|
552
|
+
narrow the maximum.
|
|
565
553
|
|
|
566
554
|
```yaml
|
|
567
555
|
oat_dispatch_policy:
|
|
568
556
|
mode: managed
|
|
569
|
-
policy:
|
|
557
|
+
policy: high
|
|
570
558
|
source: project-state
|
|
571
559
|
```
|
|
572
560
|
|
|
573
|
-
|
|
561
|
+
Persist the active project ceiling only in `"$PROJECT_PATH/state.md"`. Do not
|
|
562
|
+
copy compiled provider targets into this shape or user config. `Uncapped` and
|
|
563
|
+
`Inherit Host Defaults` remain explicit modes; `Leave Unresolved` and
|
|
564
|
+
non-interactive unresolved state are not implementation-ready.
|
|
574
565
|
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
566
|
+
### Step 3.55: Configure Optional Phase Review
|
|
567
|
+
|
|
568
|
+
After the generated quick plan has stable phase IDs and before Step 3.6 starts
|
|
569
|
+
the plan artifact review, invoke the `Shared Phase-Review Setup Contract` from
|
|
570
|
+
`oat-project-plan-writing`.
|
|
580
571
|
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
572
|
+
If `plan.md` already contains an explicit `oat_phase_review_gate`, preserve it
|
|
573
|
+
through the shared contract without probing, prompting, or mutation. Otherwise
|
|
574
|
+
let the contract probe qualifying targets and offer all phases, selected
|
|
575
|
+
phases, or disabled. If the probe fails, no target qualifies, or the user
|
|
576
|
+
declines, leave phase review disabled and continue with the contract's concise
|
|
577
|
+
status output.
|
|
584
578
|
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
579
|
+
This phase-review setup is independent from HiLL checkpoints. Do not read or
|
|
580
|
+
change HiLL fields here, and do not add a provider/model `--target` to any
|
|
581
|
+
lifecycle command.
|
|
588
582
|
|
|
589
583
|
### Step 3.6: Run Plan Artifact Review Loop
|
|
590
584
|
|
|
585
|
+
Before dispatching the artifact reviewer, invoke the `Managed Dispatch
|
|
586
|
+
Readiness and Review Contract` from `oat-project-plan-writing`:
|
|
587
|
+
|
|
588
|
+
```bash
|
|
589
|
+
oat project dispatch-ceiling resolve --provider "$ACTIVE_PROVIDER" --role reviewer --preflight --json
|
|
590
|
+
```
|
|
591
|
+
|
|
592
|
+
If managed resolution or the complete ladder is unresolved, return to Step
|
|
593
|
+
3.5, adopt the recommendation in the selected ownership scope, and re-run the
|
|
594
|
+
resolver. Do not hand the quick plan to implementation while either contract is
|
|
595
|
+
unresolved.
|
|
596
|
+
|
|
591
597
|
Invoke the shared `Auto Artifact-Review Loop` from `oat-project-plan-writing` with target `plan` before syncing project state or handing off to implementation.
|
|
592
598
|
|
|
593
599
|
Required payload:
|
|
@@ -602,11 +608,44 @@ Apply the shared loop exactly:
|
|
|
602
608
|
|
|
603
609
|
- Resolve `workflow.autoArtifactReview.plan`; only an explicit `false` skips the loop.
|
|
604
610
|
- Resolve `oat_orchestration_retry_limit` from project state, defaulting to `2`.
|
|
605
|
-
-
|
|
611
|
+
- For a concrete managed target, dispatch the exact registered reviewer role. If the host cannot select it, launch a fresh Codex child pinned to the resolved model and reasoning effort with the canonical reviewer instructions.
|
|
612
|
+
- For Claude or Cursor, pass the exact resolver-returned
|
|
613
|
+
`providers.<provider>.dispatchArgs.model` as the actual invocation's model
|
|
614
|
+
argument. Preserve the same complete payload on timeout and retry; Cursor
|
|
615
|
+
strings remain opaque.
|
|
616
|
+
- Run inline only with verified equivalent current-host model and effort controls, or for explicit inherit/default behavior or the managed-uncapped reviewer exception. If none applies, fail closed before artifact review.
|
|
617
|
+
- If the reviewer times out or does not conclude, poll and nudge once, then retry the same exact role or pinned child within the retry bound. If that target-preserving retry still fails, fail closed; never downgrade the review to inline.
|
|
606
618
|
- Apply Critical and Important artifact-local fixes when unambiguous; offer Medium and Minor fixes instead of silently applying them.
|
|
607
619
|
- Re-dispatch after rewrites until clean or the retry bound is exhausted.
|
|
608
620
|
- Update the `plan` artifact row in the `## Reviews` table to `passed` when clean. If residual findings remain, preserve the row and surface the residual findings before downstream handoff.
|
|
609
621
|
|
|
622
|
+
### Step 3.7: Record Review Disposition and Mark Plan Complete
|
|
623
|
+
|
|
624
|
+
Before changing readiness, durably record the review outcome in `plan.md`:
|
|
625
|
+
|
|
626
|
+
- When review ran, update the `plan` review row in the `## Reviews` section to
|
|
627
|
+
the outcome reached by Step 3.6. Use `passed` only for a clean result. If
|
|
628
|
+
residual findings remain, retain their actual non-passed status and add a
|
|
629
|
+
concise residual-finding disposition in the same section.
|
|
630
|
+
- When `workflow.autoArtifactReview.plan` is explicitly `false`, record the
|
|
631
|
+
explicit skip in the `## Reviews` section as
|
|
632
|
+
`Plan artifact review: skipped (workflow.autoArtifactReview.plan=false)`.
|
|
633
|
+
Do not claim that the plan passed review.
|
|
634
|
+
|
|
635
|
+
The review row or explicit skip must be written to `plan.md`; chat or status
|
|
636
|
+
output alone is not durable. Only after that write succeeds, atomically update
|
|
637
|
+
the plan frontmatter:
|
|
638
|
+
|
|
639
|
+
- `oat_status: complete`
|
|
640
|
+
- `oat_ready_for: oat-project-implement`
|
|
641
|
+
- `oat_phase_status: complete`
|
|
642
|
+
- `oat_template: false`
|
|
643
|
+
|
|
644
|
+
If dispatch remains unresolved, review execution fails closed, or the outcome
|
|
645
|
+
cannot be recorded, leave the Step 3 pre-review values unchanged and commit
|
|
646
|
+
them before stopping. Never expose a partially reviewed quick plan to
|
|
647
|
+
`oat-project-implement`.
|
|
648
|
+
|
|
610
649
|
### Step 4: Sync Project State
|
|
611
650
|
|
|
612
651
|
Update `"$PROJECT_PATH/state.md"`:
|
|
@@ -666,18 +705,29 @@ Before reporting this skill as complete, run the configured gate as the final st
|
|
|
666
705
|
|
|
667
706
|
If the command returns JSON `null`, no gate is configured; the skill is complete.
|
|
668
707
|
|
|
669
|
-
2.
|
|
708
|
+
2. Export the resolved project path into the command shell:
|
|
709
|
+
|
|
710
|
+
```bash
|
|
711
|
+
export PROJECT_PATH
|
|
712
|
+
```
|
|
713
|
+
|
|
714
|
+
If the resolved command invokes `oat gate review`, the configured review command must already include `--project "$PROJECT_PATH"` and must not include `--target <id>`. A valid reusable shape is `oat gate review --project "$PROJECT_PATH" ...`. If the declaration is missing, stop and migrate the stored gate command; do not inject or append arguments at execution time.
|
|
715
|
+
|
|
716
|
+
3. Execute the resolved command exactly as configured. Capture stdout, stderr, the exit code, and the structured JSON result. A zero exit code means the review passed its threshold, but it does not by itself authorize artifact receipt or complete the handoff.
|
|
670
717
|
|
|
671
|
-
|
|
672
|
-
-
|
|
673
|
-
-
|
|
718
|
+
4. Review-artifact handoff:
|
|
719
|
+
- Parse the structured gate result. An exit code or artifact path alone never authorizes `oat-project-review-receive`.
|
|
720
|
+
- Invoke receive only when all three conditions hold: `status` is `ok` or `blocked`, the envelope explicitly sets `receiveEligible: true`, and a non-null `handoff` confirms the artifact was corroborated.
|
|
721
|
+
- `receiveEligible: false` is a hard stop even when `artifactPath` is present. Never receive `targeting_correlation_failed`; correct the project/run routing and run a new gate.
|
|
722
|
+
- Keep `artifact_validation_failed` outside receive until the artifact is corrected and the gate successfully revalidates it. Treat `review_failed`, unknown statuses, null handoffs, and contradictory eligibility fields as operational failures.
|
|
723
|
+
- `blocked` exits nonzero but is receive-eligible; `ok` exits zero and still requires durable receive disposition. Route by structured status and eligibility, not by exit code.
|
|
674
724
|
|
|
675
|
-
|
|
725
|
+
5. If the command exits nonzero, use `description` to orient the next steps and handle `onFailure`:
|
|
676
726
|
- `block`: read gate feedback, remediate, and re-run the gate up to `maxAttempts` attempts (default `2`). If attempts are exhausted, escalate to the human with accumulated feedback and append that feedback to `implementation.md`. Treat a launch failure, missing CLI, or no eligible runtime as escalation-biased and do not spend it as a remediation attempt.
|
|
677
727
|
- `prompt`: surface the gate failure and ask the human how to proceed.
|
|
678
728
|
- `warn`: record the gate failure and continue.
|
|
679
729
|
|
|
680
|
-
|
|
730
|
+
6. Runtime selection note (V1): the step runs the gate `command` as-is and reads no OAT runtime env var. By default, `oat gate review` and `oat gate cross-provider-exec` resolve the current host from built-in `hostDetectionCommand`s and avoid the same runtime when no exact target is supplied. Reusable lifecycle skill-gate commands must not include `--target <id>` so independent review stays provider-neutral. Use explicit targets only for manual/debug commands or deliberate local/user-specific overrides; do not hardcode provider/model targets in bundled skill guidance or shared lifecycle gate examples.
|
|
681
731
|
|
|
682
732
|
### Step 7: Output Next Action
|
|
683
733
|
|
|
@@ -700,4 +750,4 @@ Report:
|
|
|
700
750
|
- ✅ `plan.md` records the plan artifact review row unless `workflow.autoArtifactReview.plan` was explicitly disabled.
|
|
701
751
|
- ✅ `implementation.md` is initialized for resumable execution.
|
|
702
752
|
- ✅ Changed quick-start artifacts are committed before handoff or pause; `.oat/state.md` is refreshed locally when available.
|
|
703
|
-
- ✅ Configured gate has run, and
|
|
753
|
+
- ✅ Configured gate has run, and only a corroborated, receive-eligible artifact has been handed off to `oat-project-review-receive` before it is treated as consumed.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-review-provide
|
|
3
|
-
version: 1.3.
|
|
3
|
+
version: 1.3.13
|
|
4
4
|
description: Use when the user explicitly asks to review an OAT project — e.g. "review project", "review the project", "run project review", or confirms a previously offered review. Do NOT auto-invoke on completed work alone. Resolves a project review scope and offers before running.
|
|
5
5
|
disable-model-invocation: false
|
|
6
6
|
user-invocable: true
|
|
@@ -31,7 +31,7 @@ Before acting, verify that there is an active OAT project or a user-provided rev
|
|
|
31
31
|
|
|
32
32
|
When the invocation is manual, summarize the inferred review type and scope, then ask before running the review.
|
|
33
33
|
|
|
34
|
-
**Gate-originated mode:** If the request context says the review is gate-originated, set `REVIEW_INVOCATION=gate`, honor any provided review type/scope arguments, and run without interactive confirmation prompts. The gate session is already the explicit authorization boundary
|
|
34
|
+
**Gate-originated mode:** If the request context says the review is gate-originated, set `REVIEW_INVOCATION=gate`, honor any provided review type/scope arguments, and run without interactive confirmation prompts. The gate session is already the explicit authorization boundary, but it does not waive dispatch controls. Resolve the reviewer target and use the exact registered role or explicitly pinned fresh child. Inline gate review is allowed only with verified equivalent current-host model and effort controls or a documented base-role exception; otherwise fail closed.
|
|
35
35
|
|
|
36
36
|
## Mode Assertion
|
|
37
37
|
|
|
@@ -428,23 +428,30 @@ Proceed with review?
|
|
|
428
428
|
|
|
429
429
|
If `REVIEW_INVOCATION=gate`, print the same scope summary but do not ask `Proceed with review?`; continue directly.
|
|
430
430
|
|
|
431
|
-
### Step 4.1: Dispatch Profile
|
|
431
|
+
### Step 4.1: Dispatch Profile Ceiling Advisory (Artifact Plan Only)
|
|
432
432
|
|
|
433
|
-
When reviewing `artifact plan`, apply this Dispatch Profile
|
|
433
|
+
When reviewing `artifact plan`, apply this Dispatch Profile named-ceiling
|
|
434
|
+
advisory:
|
|
434
435
|
|
|
435
436
|
- A missing `## Dispatch Profile` section is normal and must not be flagged.
|
|
436
437
|
- Important findings:
|
|
437
438
|
- invalid phase ID that does not match a real plan phase
|
|
438
|
-
- unknown
|
|
439
|
-
-
|
|
440
|
-
|
|
439
|
+
- unknown named ceiling or a phase ceiling above the project ceiling
|
|
440
|
+
- wording that pins an exact provider model, family, effort, or role instead
|
|
441
|
+
of a named maximum
|
|
442
|
+
- low named ceiling for multi-file integration, architecture, or review-heavy
|
|
443
|
+
work
|
|
444
|
+
- low named ceiling with missing or generic rationale
|
|
441
445
|
- Medium findings:
|
|
442
446
|
- malformed but recoverable Dispatch Profile table structure
|
|
443
|
-
- mid-tier
|
|
447
|
+
- mid-tier ceiling for architecture-heavy work without convincing rationale
|
|
444
448
|
- Minor findings:
|
|
445
449
|
- rationale is present but weakly tied to phase scope
|
|
446
450
|
|
|
447
|
-
Include this advisory in the Review Scope metadata for artifact plan reviews so
|
|
451
|
+
Include this advisory in the Review Scope metadata for artifact plan reviews so
|
|
452
|
+
the reviewer evaluates explicit ceiling rows without treating omitted rows as a
|
|
453
|
+
gap. A named ceiling is a maximum; lower configured candidates remain eligible
|
|
454
|
+
for later task selection.
|
|
448
455
|
|
|
449
456
|
### Step 4.5: Gather Deferred Findings Ledger (Final Scope Only)
|
|
450
457
|
|
|
@@ -510,6 +517,72 @@ Build the "Review Scope" metadata for the reviewer:
|
|
|
510
517
|
|
|
511
518
|
### Step 6: Execute Review (3-Tier Capability Model)
|
|
512
519
|
|
|
520
|
+
**Step 6.0: Resolve the managed reviewer target**
|
|
521
|
+
|
|
522
|
+
Before capability-tier selection, resolve the same reviewer contract used by
|
|
523
|
+
plan artifact review and implementation phase/final review:
|
|
524
|
+
|
|
525
|
+
```bash
|
|
526
|
+
oat project dispatch-ceiling resolve --provider "$ACTIVE_PROVIDER" --role reviewer --preflight --report-scope "$SCOPE_TOKEN" --report-action review --json
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
Require `dispatchReport.schemaVersion: 1`. Render/consume the resolver's
|
|
530
|
+
versioned report using `formatDispatchReport(dispatchReport)` semantics, and
|
|
531
|
+
derive the formal compatibility line only with
|
|
532
|
+
`formatDispatchStamp(dispatchReport)` / `toDispatchStampRecord(dispatchReport)`.
|
|
533
|
+
Include that derived line in the review dispatch audit metadata; do not
|
|
534
|
+
hand-assemble `Dispatch:` fields from a role name or model string.
|
|
535
|
+
|
|
536
|
+
The exact managed provider target still comes from
|
|
537
|
+
`providers.<provider>.dispatchArgs` plus
|
|
538
|
+
`providers.<provider>.selection.target`, and the actual reviewer invocation
|
|
539
|
+
must retain it byte-for-byte. The report is an audit/rendering surface, not a
|
|
540
|
+
selection fallback. Configured invocation (including gate-owned immutable
|
|
541
|
+
metadata), work-producer diversity, and independently observed reviewer runtime identity are distinct. Do not promote producer stamps, configured defaults, or
|
|
542
|
+
reviewer self-report into `dispatchReport.runtimeIdentity`; leave it
|
|
543
|
+
`not-reported` unless an independent observation exists.
|
|
544
|
+
|
|
545
|
+
The reviewer resolver selects the final candidate of the configured review
|
|
546
|
+
ceiling. Do not supply ephemeral implementer candidate requests for artifact,
|
|
547
|
+
phase, project, or final review. A lower candidate is allowed only when a
|
|
548
|
+
separate reviewed contract explicitly authorizes reviewer lowering and defines
|
|
549
|
+
its bounds; a Dispatch Profile row does not authorize it.
|
|
550
|
+
|
|
551
|
+
Resolve every concrete managed reviewer target before probing generic subagent
|
|
552
|
+
availability or selecting Tier 1/Tier 2/Tier 3. The concrete target takes
|
|
553
|
+
precedence over all availability, preference, timeout, fresh-session, and gate
|
|
554
|
+
fallbacks.
|
|
555
|
+
A concrete managed Codex target takes precedence over tier availability.
|
|
556
|
+
Build the actual provider invocation before reporting the target as enforced:
|
|
557
|
+
|
|
558
|
+
- Codex uses the exact registered reviewer role or variant from
|
|
559
|
+
`providers.codex.dispatchArgs.variant` when selectable. If the current host
|
|
560
|
+
cannot select it, launch a fresh Codex child with the resolver target's
|
|
561
|
+
explicit model, reasoning effort, canonical role instructions from
|
|
562
|
+
`.agents/agents/oat-reviewer.md`, and the same Review Scope payload.
|
|
563
|
+
If that fresh child is unavailable, use only a verified-equivalent inline
|
|
564
|
+
route or block the review.
|
|
565
|
+
- Claude requires a non-empty `providers.claude.dispatchArgs.model`; the actual
|
|
566
|
+
provider invocation must include that exact value as its `model` argument.
|
|
567
|
+
- Cursor requires a non-empty `providers.cursor.dispatchArgs.model`; the actual
|
|
568
|
+
provider invocation must include that exact opaque string as its `model`
|
|
569
|
+
argument without normalization.
|
|
570
|
+
|
|
571
|
+
Managed incomplete resolver results, including a missing or incomplete
|
|
572
|
+
candidate ladder, fail closed before review. Route interactive repair through
|
|
573
|
+
the planning workflow's `Complete Dispatch Ladder Adoption Contract`; do not
|
|
574
|
+
invent a reviewer target.
|
|
575
|
+
|
|
576
|
+
On timeout or retry, reuse the same exact role or complete invocation payload,
|
|
577
|
+
including the Claude or Cursor model argument. If the host cannot apply a
|
|
578
|
+
required role or model argument, fail closed or block unless inline execution
|
|
579
|
+
has verified equivalent current-host controls.
|
|
580
|
+
Workflow correctness must not require provider restart or hot reload.
|
|
581
|
+
Never use a managed base role because a target is missing or unavailable; a
|
|
582
|
+
managed base role is forbidden except for
|
|
583
|
+
explicit inherit/default behavior or the documented managed-uncapped reviewer
|
|
584
|
+
fallback.
|
|
585
|
+
|
|
513
586
|
**Step 6a: Probe Subagent Availability**
|
|
514
587
|
|
|
515
588
|
Before selecting a tier, announce the probe and its result so the user can see what's happening:
|
|
@@ -526,8 +599,7 @@ Detection logic:
|
|
|
526
599
|
- If the host is Cursor, invoke `oat-reviewer` using Cursor-native explicit invocation (`/oat-reviewer`) or natural mention, and resolve from `.cursor/agents/oat-reviewer.md` (or `.claude/agents/oat-reviewer.md` compatibility path).
|
|
527
600
|
- If the host is Codex multi-agent, verify Codex requirements first:
|
|
528
601
|
- `[features] multi_agent = true` is enabled in active Codex config.
|
|
529
|
-
-
|
|
530
|
-
- Codex may also auto-select and spawn agents without explicit role pinning.
|
|
602
|
+
- For a concrete managed target, `agent_type` must be the exact custom role declared under `[agents.<name>]`; built-in roles and auto-selection are not equivalent fallbacks.
|
|
531
603
|
- If the current Codex host requires explicit user authorization before calling `spawn_agent`, do not mark `oat-reviewer` as unresolved. Announce `authorization required` and ask one concise confirmation question before selecting Tier 2 or Tier 3:
|
|
532
604
|
|
|
533
605
|
```
|
|
@@ -535,12 +607,12 @@ Detection logic:
|
|
|
535
607
|
```
|
|
536
608
|
|
|
537
609
|
- If the user authorizes delegation and Codex role prerequisites are satisfied, use **Tier 1**.
|
|
538
|
-
- If the user declines delegation, continue
|
|
610
|
+
- If the user declines delegation, continue only through a target-preserving pinned-child or guarded inline route. Otherwise block.
|
|
539
611
|
|
|
540
612
|
- If the runtime can dispatch reviewer work (`subagent_type` in Claude Code, Cursor invocation via `/name` or natural mention, or Codex multi-agent spawn/auto-spawn) → **Tier 1**.
|
|
541
|
-
- If the Task tool is not available or subagent dispatch is not supported
|
|
542
|
-
- If user explicitly requests inline or confirms they are already in a fresh session
|
|
543
|
-
-
|
|
613
|
+
- If the Task tool is not available or subagent dispatch is not supported, use **Tier 2** only after applying the target-first contract.
|
|
614
|
+
- If the user explicitly requests inline or confirms they are already in a fresh session, use **Tier 3** only when the guarded inline route is valid.
|
|
615
|
+
- Gate-originated review skips fresh-session handoff instructions and immediately uses the first target-preserving route available from Step 6.0. If none exists, fail closed.
|
|
544
616
|
|
|
545
617
|
**Step 6b: Tier 1 — Subagent (if available)**
|
|
546
618
|
|
|
@@ -549,9 +621,9 @@ First, pre-compute the review artifact path using Step 7 naming conventions so i
|
|
|
549
621
|
Then spawn the reviewer:
|
|
550
622
|
|
|
551
623
|
- Use provider-appropriate dispatch:
|
|
552
|
-
- Claude Code: Task tool with `subagent_type: "oat-reviewer"` (resolves from `.claude/agents/oat-reviewer.md`).
|
|
553
|
-
- Cursor: explicit invocation `/oat-reviewer` (or natural mention) with agent resolved from `.cursor/agents/oat-reviewer.md` or `.claude/agents/oat-reviewer.md` compatibility path.
|
|
554
|
-
- Codex style:
|
|
624
|
+
- Claude Code: Task tool with `subagent_type: "oat-reviewer"` (resolves from `.claude/agents/oat-reviewer.md`). For a concrete managed target, the payload must also contain `model: providers.claude.dispatchArgs.model` with the resolver-returned value.
|
|
625
|
+
- Cursor: explicit invocation `/oat-reviewer` (or natural mention) with agent resolved from `.cursor/agents/oat-reviewer.md` or `.claude/agents/oat-reviewer.md` compatibility path. For a concrete managed target, the invocation must also contain `model: providers.cursor.dispatchArgs.model` with the exact opaque resolver-returned string.
|
|
626
|
+
- Codex style: for a concrete managed target, spawn the exact resolver-returned `agent_type`; if it cannot be selected, use the explicitly pinned fresh-child route from Step 6.0. Generic auto-selection is permitted only for the documented base-role exceptions.
|
|
555
627
|
- Pass the Review Scope metadata block from Step 5 as the prompt
|
|
556
628
|
- Include the pre-computed artifact path for the subagent to write to
|
|
557
629
|
- **If a worktree was resolved in Step 1.5:** include the worktree path in the prompt so the subagent writes the artifact to the worktree directory, not the current session's working directory
|
|
@@ -566,12 +638,12 @@ After the subagent completes:
|
|
|
566
638
|
|
|
567
639
|
**Step 6c: Tier 2 — Fresh Session (recommended fallback)**
|
|
568
640
|
|
|
569
|
-
If subagent not available:
|
|
641
|
+
If target-preserving subagent dispatch is not available:
|
|
570
642
|
|
|
571
643
|
- If user is already in a fresh session (confirmed), proceed to Tier 3.
|
|
572
644
|
- If Codex reported `authorization required` and the user approved delegation, do **not** use Tier 2. Return to Tier 1 and delegate to `oat-reviewer`.
|
|
573
645
|
- If user prefers fresh session: provide instructions and exit.
|
|
574
|
-
-
|
|
646
|
+
- Gate-originated review does not return fresh-session instructions; it uses the guarded route selected in Step 6.0 or fails closed.
|
|
575
647
|
|
|
576
648
|
Instructions for fresh session:
|
|
577
649
|
|
|
@@ -585,7 +657,13 @@ To run review in a fresh session:
|
|
|
585
657
|
|
|
586
658
|
**Step 6d: Tier 3 — Inline Reset (fallback)**
|
|
587
659
|
|
|
588
|
-
If user
|
|
660
|
+
If the user requests inline review, first verify equivalent current-host model
|
|
661
|
+
and effort controls. Inline is also allowed for explicit inherit/default or the
|
|
662
|
+
documented managed-uncapped reviewer behavior. User preference alone does not
|
|
663
|
+
override a concrete managed target; if the guard fails, use the exact/pinned
|
|
664
|
+
route or block.
|
|
665
|
+
|
|
666
|
+
When inline is allowed:
|
|
589
667
|
|
|
590
668
|
- Run "reset protocol":
|
|
591
669
|
1. Re-read required artifacts for current workflow mode from scratch
|
|
@@ -649,6 +727,13 @@ oat_review_scope: { scope }
|
|
|
649
727
|
oat_review_type: { code|artifact }
|
|
650
728
|
oat_review_invocation: { manual|auto|gate }
|
|
651
729
|
oat_project: { PROJECT_PATH }
|
|
730
|
+
# Gate-only: copy the exact prompt-provided fields below.
|
|
731
|
+
oat_gate_run_id: { gate run id }
|
|
732
|
+
oat_gate_target: { configured target id }
|
|
733
|
+
oat_gate_runtime: { configured runtime }
|
|
734
|
+
oat_invocation_model: { configured model|provider-default|unknown }
|
|
735
|
+
oat_invocation_reasoning_effort: { configured effort|provider-default|unknown }
|
|
736
|
+
oat_invocation_source: { exec-target-config|unknown }
|
|
652
737
|
---
|
|
653
738
|
|
|
654
739
|
# {Code|Artifact} Review: {scope}
|
|
@@ -669,6 +754,8 @@ When `oat-project-implement` spawns this skill for auto-review at checkpoints, i
|
|
|
669
754
|
|
|
670
755
|
When `oat gate review` invokes this skill, it includes gate-originated context instructing the reviewer to write `oat_review_invocation: gate`. Honor that instruction in the artifact frontmatter.
|
|
671
756
|
|
|
757
|
+
The gate prompt also supplies exact values for `oat_gate_run_id`, `oat_gate_target`, `oat_gate_runtime`, `oat_invocation_model`, `oat_invocation_reasoning_effort`, and `oat_invocation_source`. Copy all six values verbatim for gate-originated artifacts. These fields record OAT's configured invocation; do not derive them from `baseCommand`, the target id, model self-identification, or surrounding dispatch prose. Optional observed/self-reported identity is separate and non-authoritative.
|
|
758
|
+
|
|
672
759
|
For all other invocations (user-triggered, fresh session), use `manual`.
|
|
673
760
|
|
|
674
761
|
Gate parsing contract:
|
|
@@ -784,7 +871,8 @@ For best review quality, run in a fresh session:
|
|
|
784
871
|
2. Run the oat-project-review-provide skill with: code {scope}
|
|
785
872
|
3. Return here and run the oat-project-review-receive skill
|
|
786
873
|
|
|
787
|
-
Or say "inline" to
|
|
874
|
+
Or say "inline" to request review in the current session; the managed-target
|
|
875
|
+
guard still applies.
|
|
788
876
|
|
|
789
877
|
```
|
|
790
878
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-review-provide-remote
|
|
3
|
-
version: 1.0.
|
|
3
|
+
version: 1.0.3
|
|
4
4
|
description: Use when reviewing a GitHub PR opened on another machine for an active OAT project and posting findings back as a single PR review. Resolves the project from the PR diff, reads project artifacts for mode-aware review, and posts via gh api.
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
user-invocable: true
|
|
@@ -211,6 +211,33 @@ Guard outcomes:
|
|
|
211
211
|
|
|
212
212
|
Mode-aware review against the project artifacts + the `oat-reviewer` checklist + severity model. Scope to the narrowing range when one was chosen; otherwise the full PR diff. Assign finding IDs per severity bucket (`C1`, `I1`, `M1`, `m1`), stable within the dispatch.
|
|
213
213
|
|
|
214
|
+
**Step 5.0: Resolve and report the exact reviewer target.** Before capability
|
|
215
|
+
probing, run:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
oat project dispatch-ceiling resolve --provider "$ACTIVE_PROVIDER" --role reviewer --preflight --project-path "$PROJECT_PATH" --report-scope "$SCOPE_TOKEN" --report-action review --json
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Require `dispatchReport.schemaVersion: 1`. Render/consume its versioned human
|
|
222
|
+
block with `formatDispatchReport(dispatchReport)` semantics and derive the
|
|
223
|
+
formal audit `Dispatch:` line only through
|
|
224
|
+
`formatDispatchStamp(dispatchReport)` / `toDispatchStampRecord(dispatchReport)`.
|
|
225
|
+
Never hand-build a parallel stamp schema.
|
|
226
|
+
|
|
227
|
+
Retain the exact managed provider payload from
|
|
228
|
+
`providers.<provider>.dispatchArgs` and
|
|
229
|
+
`providers.<provider>.selection.target` in the actual Tier 1/2/3 invocation;
|
|
230
|
+
the report does not authorize substitution or lowering. Configured gate
|
|
231
|
+
invocation, work-producer diversity, and independently observed reviewer
|
|
232
|
+
`dispatchReport.runtimeIdentity` remain separate. Do not treat PR markers, implementation
|
|
233
|
+
producer stamps, configured defaults, or reviewer self-report as runtime
|
|
234
|
+
confirmation. Leave report runtime identity not-reported unless independently
|
|
235
|
+
observed.
|
|
236
|
+
|
|
237
|
+
This resolver command is independent of lifecycle gates. Reusable `oat gate
|
|
238
|
+
review` commands must remain provider-neutral and must not contain or add a
|
|
239
|
+
provider/model `--target` argument.
|
|
240
|
+
|
|
214
241
|
**Step 5a: Probe subagent availability** (mirrors `oat-project-review-provide` Step 6a):
|
|
215
242
|
|
|
216
243
|
```
|
|
@@ -3,6 +3,7 @@ import { type PromptContext } from '../shared/shared.prompts.js';
|
|
|
3
3
|
import { type OatConfig, type OatLocalConfig, type UserConfig } from '../../config/oat-config.js';
|
|
4
4
|
import { type ResolvedConfig } from '../../config/resolve.js';
|
|
5
5
|
import { type MatrixCellAvailabilityResponse, type ValidateMatrixCellOptions } from '../../providers/identity/availability.js';
|
|
6
|
+
import { createDispatchValidationPassContext, validateDispatchMatrixRefs } from '../../providers/identity/dispatch-validation.js';
|
|
6
7
|
import { Command } from 'commander';
|
|
7
8
|
interface ConfigCommandDependencies {
|
|
8
9
|
buildCommandContext: (options: Parameters<typeof buildCommandContext>[0]) => CommandContext;
|
|
@@ -19,6 +20,8 @@ interface ConfigCommandDependencies {
|
|
|
19
20
|
readFile: (path: string) => Promise<string>;
|
|
20
21
|
confirmAction: (message: string, ctx: PromptContext) => Promise<boolean>;
|
|
21
22
|
validateMatrixCell: (provider: string, value: string, options: ValidateMatrixCellOptions) => Promise<MatrixCellAvailabilityResponse>;
|
|
23
|
+
createDispatchValidationPassContext: typeof createDispatchValidationPassContext;
|
|
24
|
+
validateDispatchMatrixRefs: typeof validateDispatchMatrixRefs;
|
|
22
25
|
processEnv: NodeJS.ProcessEnv;
|
|
23
26
|
}
|
|
24
27
|
export declare function createConfigCommand(overrides?: Partial<ConfigCommandDependencies>): Command;
|