@open-agent-toolkit/cli 0.1.43 → 0.1.45
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/config/dispatch-matrix-recommendation.json +23 -0
- package/assets/docs/cli-utilities/configuration.md +59 -20
- package/assets/docs/cli-utilities/workflow-gates.md +79 -16
- package/assets/docs/contributing/code.md +10 -4
- package/assets/docs/contributing/hooks-and-safety.md +23 -0
- package/assets/docs/workflows/projects/dispatch-ceiling.md +80 -10
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-implement/SKILL.md +53 -11
- package/assets/skills/oat-project-plan/SKILL.md +22 -3
- package/assets/skills/oat-project-quick-start/SKILL.md +22 -3
- package/assets/templates/state.md +5 -0
- package/dist/commands/config/index.d.ts +6 -0
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +366 -8
- package/dist/commands/doctor/index.d.ts +6 -1
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +138 -4
- package/dist/commands/gate/index.d.ts +39 -2
- package/dist/commands/gate/index.d.ts.map +1 -1
- package/dist/commands/gate/index.js +343 -30
- package/dist/commands/internal/cursor-current-target.d.ts +37 -0
- package/dist/commands/internal/cursor-current-target.d.ts.map +1 -0
- package/dist/commands/internal/cursor-current-target.js +228 -0
- package/dist/commands/internal/index.d.ts.map +1 -1
- package/dist/commands/internal/index.js +2 -0
- package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
- package/dist/commands/project/dispatch-ceiling/index.js +359 -16
- package/dist/config/oat-config.d.ts +15 -5
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +103 -10
- package/dist/config/resolve.js +12 -0
- package/dist/manifest/manifest.types.d.ts +12 -12
- package/dist/providers/ceiling/registry.d.ts.map +1 -1
- package/dist/providers/ceiling/registry.js +16 -0
- package/dist/providers/identity/availability.d.ts +22 -0
- package/dist/providers/identity/availability.d.ts.map +1 -0
- package/dist/providers/identity/availability.js +119 -0
- package/dist/providers/identity/family.d.ts +13 -0
- package/dist/providers/identity/family.d.ts.map +1 -0
- package/dist/providers/identity/family.js +32 -0
- package/dist/providers/identity/provenance.d.ts +21 -0
- package/dist/providers/identity/provenance.d.ts.map +1 -0
- package/dist/providers/identity/provenance.js +65 -0
- package/dist/providers/identity/stamp.d.ts +35 -0
- package/dist/providers/identity/stamp.d.ts.map +1 -0
- package/dist/providers/identity/stamp.js +171 -0
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-implement
|
|
3
|
-
version: 2.0.
|
|
3
|
+
version: 2.0.28
|
|
4
4
|
description: Use when plan.md is ready for execution. Dispatches phase-level subagents with bounded fix loops; supports plan-declared parallel phase groups with worktree-isolated execution and ordered fan-in.
|
|
5
5
|
oat_gateable: true
|
|
6
6
|
argument-hint: '[--retry-limit <N>] [--dry-run]'
|
|
@@ -341,6 +341,23 @@ Use these inputs:
|
|
|
341
341
|
- host-exposed provider controls, by axis
|
|
342
342
|
- prior outcomes for the phase, including review results and failed retries
|
|
343
343
|
|
|
344
|
+
Route selection is part of runtime dispatch selection when the resolver returns
|
|
345
|
+
an ordered matrix route:
|
|
346
|
+
|
|
347
|
+
- Start every implementation/fix scope at route level `0` unless the plan's
|
|
348
|
+
`## Dispatch Profile` names a different starting route level for that
|
|
349
|
+
phase/task. Level `0` is the route floor.
|
|
350
|
+
- Pass `--escalation-level <route-level>` on implementer/fix resolver calls.
|
|
351
|
+
Single-axis providers ignore this flag and keep their normal capped `min()`
|
|
352
|
+
behavior.
|
|
353
|
+
- Read `providers.<provider>.target` and `providers.<provider>.selection.target`
|
|
354
|
+
from resolver JSON when present. A target with `crossHarness: true` is an
|
|
355
|
+
explicit deferred cross-harness target: log it as advisory and do not invent a
|
|
356
|
+
same-harness fallback.
|
|
357
|
+
- On repeated review failure or retry-loop escalation, advance by one route
|
|
358
|
+
entry before retrying, up to the last available route entry and within
|
|
359
|
+
`oat_orchestration_retry_limit`.
|
|
360
|
+
|
|
344
361
|
Axis states:
|
|
345
362
|
|
|
346
363
|
- `selected:<value>` - host exposes the axis and the orchestrator chose a value.
|
|
@@ -360,7 +377,7 @@ Codex rules:
|
|
|
360
377
|
3. For capped managed implementer/fix work, selected effort is `min(preferred, resolved_cap)`.
|
|
361
378
|
4. For managed `Uncapped` implementer/fix work, selected effort is the preferred effort with no cap.
|
|
362
379
|
5. For inherit/default mode, the resolver returns no selected dispatch args. Use the base/unpinned Codex role, log `Selected effort: provider-default`, display provider default effort when known, and do not describe this as managed uncapped behavior.
|
|
363
|
-
6. For implementer/fix dispatch: call `oat project dispatch-ceiling resolve --provider codex --role implementer --preferred <preferred-effort>`; read `providers.codex.selection.selectedValue
|
|
380
|
+
6. For implementer/fix dispatch: call `oat project dispatch-ceiling resolve --provider codex --role implementer --preferred <preferred-effort> --escalation-level <route-level>`; read `providers.codex.selection.selectedValue`, `providers.codex.dispatchArgs.variant`, and any `providers.codex.target` for the selected role name or route target. Never pass a cap-only implementer variant when `selection.selectedValue` is lower.
|
|
364
381
|
7. For review dispatch: call `oat project dispatch-ceiling resolve --provider codex --role reviewer`; read `providers.codex.dispatchArgs.variant`.
|
|
365
382
|
- Capped managed policy: reviewer targets the configured cap for deterministic quality gate behavior.
|
|
366
383
|
- Managed `Uncapped`: no reviewer target exists; use base/unpinned reviewer fallback and log `selectionMode=no-review-target`, `selectedValue=null`, and `effort_axis=provider-default`.
|
|
@@ -378,7 +395,7 @@ Claude rules:
|
|
|
378
395
|
- Review dispatch:
|
|
379
396
|
- Capped managed policy: target the configured policy cap directly.
|
|
380
397
|
- Managed `Uncapped` or inherit/default: no reviewer target exists; omit `model` and log inherited/default model behavior.
|
|
381
|
-
- For implementer/fix dispatch, call `oat project dispatch-ceiling resolve --provider claude --role implementer --preferred <preferred-model> --orchestrator-tier <current-orchestrator-tier>`; for review dispatch, call the same resolver with `--role reviewer` and no `--preferred`. Read `providers.claude.selection.selectedValue
|
|
398
|
+
- For implementer/fix dispatch, call `oat project dispatch-ceiling resolve --provider claude --role implementer --preferred <preferred-model> --orchestrator-tier <current-orchestrator-tier> --escalation-level <route-level>`; for review dispatch, call the same resolver with `--role reviewer` and no `--preferred`. Read `providers.claude.selection.selectedValue`, `providers.claude.dispatchArgs.model`, and any `providers.claude.target` for the selected model string or route target. Pass `--orchestrator-tier` so the resolver can flag above-orchestrator upgrade requests and set `verifyOnDispatch` correctly.
|
|
382
399
|
- Pass `model: "<value>"` when `model_axis=selected:<value>` on the Task tool call.
|
|
383
400
|
- Keep `effort_axis=not-applicable`; Claude Code has no separate per-dispatch effort axis.
|
|
384
401
|
|
|
@@ -387,6 +404,19 @@ Payload-first invariant:
|
|
|
387
404
|
- Build the actual host dispatch argument map before logging.
|
|
388
405
|
- Do not emit `selected:<value>` unless the host invocation contains the corresponding role/model selection.
|
|
389
406
|
- Derive `Dispatch target` and `Effort axis` / `Model axis` from the payload.
|
|
407
|
+
- After the payload is built, append a formal dispatch stamp to Dispatch Notes
|
|
408
|
+
for every implementation, fix, and review dispatch. Use the p01 grammar
|
|
409
|
+
exactly:
|
|
410
|
+
`Dispatch: scope=<phase-or-task> action=<implementation|fix|review> role=<implementer|fix|reviewer> producer=<slug|unknown> provenance=<declared|observed|inferred|unknown> model_axis=<axis> effort_axis=<axis> dispatch_policy=<policy|unknown> dispatch_ceiling=<value|none> target=<target|unknown>`.
|
|
411
|
+
Derive `producer` and `provenance` from the resolver payload and actual host
|
|
412
|
+
arguments. Only concrete model arguments, including same-harness route model
|
|
413
|
+
args for model-arg providers, declare producer identity. Codex pinned
|
|
414
|
+
variants declare the effort axis only; record `effort_axis=selected:<value>`
|
|
415
|
+
and keep `producer=unknown provenance=unknown` unless an observed/inferred
|
|
416
|
+
model identity is available. Base/unpinned or deferred cross-harness paths are
|
|
417
|
+
also `producer=unknown provenance=unknown` unless an observed/inferred
|
|
418
|
+
identity is available. Do not write prose-only or legacy comma-separated stamp
|
|
419
|
+
forms.
|
|
390
420
|
|
|
391
421
|
Structured dispatch log:
|
|
392
422
|
|
|
@@ -400,9 +430,11 @@ Selected effort: {low | medium | high | xhigh | provider-default | not-applicabl
|
|
|
400
430
|
Policy source: {repo config | project state | preflight prompt}
|
|
401
431
|
Provider default effort: {value | unknown | not-applicable}
|
|
402
432
|
Selection mode: {capped | uncapped | review-target | no-review-target | inherit-default}
|
|
433
|
+
Route level: {0 | 1 | ... | none}
|
|
403
434
|
Model axis: { selected:<value> | inherited | not-applicable | host-auto }
|
|
404
435
|
Effort axis: { selected:<value> | provider-default | inherited | not-applicable | host-auto }
|
|
405
436
|
Dispatch target: {host-specific subagent/role/tool target}
|
|
437
|
+
Dispatch stamp: Dispatch: scope=<phase-or-task> action=<implementation|fix|review> role=<implementer|fix|reviewer> producer=<slug|unknown> provenance=<declared|observed|inferred|unknown> model_axis=<axis> effort_axis=<axis> dispatch_policy=<policy|unknown> dispatch_ceiling=<value|none> target=<target|unknown>
|
|
406
438
|
Rationale: {short rationale grounded in phase scope and any policy cap/uncapped/default behavior}
|
|
407
439
|
```
|
|
408
440
|
|
|
@@ -518,6 +550,11 @@ dispatch_policy:
|
|
|
518
550
|
ceiling_source: { repo config | project state | preflight prompt }
|
|
519
551
|
policy_source: { repo config | project state | preflight prompt }
|
|
520
552
|
provider_default_effort: { value | unknown | not-applicable }
|
|
553
|
+
dispatch_route_level:
|
|
554
|
+
{ integer route level; omit when no ordered route is in play }
|
|
555
|
+
dispatch_target:
|
|
556
|
+
{ resolver target or host-specific dispatch target; omit if unknown }
|
|
557
|
+
dispatch_stamp: { exact `Dispatch: ...` line written to Dispatch Notes }
|
|
521
558
|
dispatch_rationale: { short rationale }
|
|
522
559
|
```
|
|
523
560
|
|
|
@@ -886,13 +923,16 @@ For each phase `pNN` in the plan (or each phase in the current parallel group),
|
|
|
886
923
|
policy_source: {repo config | project state | preflight prompt; omit if unknown}
|
|
887
924
|
ceiling_source: {repo config | project state | preflight prompt; omit if unknown; compatibility alias for policy_source}
|
|
888
925
|
provider_default_effort: {value | unknown | not-applicable; omit if unknown}
|
|
926
|
+
dispatch_route_level: {integer route level; omit when no ordered route is in play}
|
|
927
|
+
dispatch_target: {resolver target or host-specific dispatch target; omit if unknown}
|
|
928
|
+
dispatch_stamp: {exact `Dispatch: ...` line written to Dispatch Notes; omit if not yet written}
|
|
889
929
|
dispatch_rationale: {short rationale; omit if unknown}
|
|
890
930
|
```
|
|
891
931
|
|
|
892
932
|
2. Perform a pre-dispatch assertion against the host invocation parameters. The Phase Scope fields are audit/context fields; selected axes must also be represented in the actual host dispatch call.
|
|
893
933
|
- Codex implementer/fix dispatch:
|
|
894
|
-
- Before building the `spawn_agent` argument map, classify the phase complexity and choose preferred effort (`low`, `medium`, `high`, or `xhigh`), then call `oat project dispatch-ceiling resolve --provider codex --role implementer --preferred <preferred-effort>`.
|
|
895
|
-
- Build the `spawn_agent` argument map from `providers.codex.selection.selectedValue` and `providers.codex.dispatchArgs.variant` before logging the dispatch. If `effort_axis=selected:low|medium|high|xhigh`, the argument map MUST use the matching `agent_type`: `"oat-phase-implementer-low"`, `"oat-phase-implementer-medium"`, `"oat-phase-implementer-high"`, or `"oat-phase-implementer-xhigh"`. Then derive the `OAT Dispatch:` block `Effort axis:` field from that same argument map.
|
|
934
|
+
- Before building the `spawn_agent` argument map, classify the phase complexity and choose preferred effort (`low`, `medium`, `high`, or `xhigh`), determine the current route level (Dispatch Profile floor or `0`), then call `oat project dispatch-ceiling resolve --provider codex --role implementer --preferred <preferred-effort> --escalation-level <route-level>`.
|
|
935
|
+
- Build the `spawn_agent` argument map from `providers.codex.selection.selectedValue` and `providers.codex.dispatchArgs.variant` before logging the dispatch. If `providers.codex.target.crossHarness` is true, the resolver intentionally returns no native dispatch args; log the deferred target and use provider-default/base fallback only when that is the explicit selected fallback. If `effort_axis=selected:low|medium|high|xhigh`, the argument map MUST use the matching `agent_type`: `"oat-phase-implementer-low"`, `"oat-phase-implementer-medium"`, `"oat-phase-implementer-high"`, or `"oat-phase-implementer-xhigh"`. Then derive the `OAT Dispatch:` block `Effort axis:` field from that same argument map.
|
|
896
936
|
- Example selected low payload shape: `agent_type: "oat-phase-implementer-low"` and a Phase Scope message containing `effort_axis: selected:low`.
|
|
897
937
|
- Immediately after spawning, compare the returned Codex status line with the selected effort before waiting on the agent. If the spawned status reports a different effort than the selected value (for example, the log says `effort_axis=selected:medium` but the spawn result reports `gpt-5.5 high`), treat this as an orchestration deviation. Stop, record the deviation in `implementation.md`, and redispatch with corrected parameters before continuing. Do not use work from the mismatched dispatch.
|
|
898
938
|
- If `effort_axis=provider-default`, use base `agent_type: "oat-phase-implementer"` and omit `reasoning_effort`. The dispatch rationale MUST say this is a base/unpinned fallback and include provider default effort when known.
|
|
@@ -935,13 +975,15 @@ Escalate the runtime dispatch control when there is evidence that the current co
|
|
|
935
975
|
When escalation is needed:
|
|
936
976
|
|
|
937
977
|
1. If a stronger available control exists, re-dispatch at the next stronger control and include the reason in the scope packet. The escalation ladder is provider-specific:
|
|
978
|
+
- **Route-backed matrix cells:** increment `--escalation-level` by one and re-resolve before using provider-specific ladders. The resolver's `providers.<provider>.target.routeLength` is the route bound; never advance past the final route entry.
|
|
938
979
|
- **Codex:** `selected:low -> selected:medium -> selected:high -> selected:xhigh`, capped by the resolved managed cap when one exists; managed `Uncapped` may select up to the preferred value; inherit/default mode has no OAT escalation control.
|
|
939
980
|
- **Claude Code:** `selected:haiku -> selected:sonnet -> selected:opus -> selected:fable`, capped by the resolved managed cap when one exists; managed `Uncapped` may select up to the preferred model; inherit/default mode has no OAT escalation control.
|
|
940
981
|
2. Count the escalation redispatch against the existing bounded retry budget. Escalation changes the control; it does not create extra retry attempts.
|
|
941
|
-
3. Record a compact
|
|
942
|
-
- `Dispatch: p03
|
|
943
|
-
- `Dispatch: p03
|
|
944
|
-
- `Dispatch:
|
|
982
|
+
3. Record a compact formal stamp in `implementation.md` when practical; surrounding prose may describe why the route advanced, but the `Dispatch:` line itself must stay parseable:
|
|
983
|
+
- `Dispatch: scope=p03 action=implementation role=implementer producer=gpt-5.5-xhigh provenance=declared model_axis=selected:gpt-5.5-xhigh effort_axis=not-applicable dispatch_policy=high dispatch_ceiling=gpt-5.5-xhigh target=cursor`
|
|
984
|
+
- `Dispatch: scope=p03 action=implementation role=implementer producer=opus provenance=declared model_axis=selected:opus effort_axis=not-applicable dispatch_policy=high dispatch_ceiling=opus target=claude`
|
|
985
|
+
- `Dispatch: scope=p03 action=implementation role=implementer producer=unknown provenance=unknown model_axis=inherited effort_axis=selected:high dispatch_policy=high dispatch_ceiling=high target=oat-phase-implementer-high`
|
|
986
|
+
- `Dispatch: scope=p02 action=implementation role=implementer producer=unknown provenance=unknown model_axis=host-auto effort_axis=host-auto dispatch_policy=unknown dispatch_ceiling=none target=unknown`
|
|
945
987
|
4. If the phase is already at the strongest available control, do not invent a stronger tier. Provide more context, split the phase, revise the plan, or stop for user direction.
|
|
946
988
|
|
|
947
989
|
#### Dispatch Retry (Transient Failures)
|
|
@@ -1001,7 +1043,7 @@ On reviewer verdict `fail`, run a bounded fix loop.
|
|
|
1001
1043
|
|
|
1002
1044
|
1. Read `oat_orchestration_retry_limit` from `state.md` frontmatter (default: `2`, range 0–5).
|
|
1003
1045
|
2. For each retry (up to the limit):
|
|
1004
|
-
a. Select/log fix dispatch axes from the fix scope, then perform the same pre-dispatch assertion used for implementation dispatch. A Codex fix dispatch with `effort_axis=selected:low|medium|high|xhigh` MUST use matching `agent_type: "oat-phase-implementer-low|medium|high|xhigh"`; a Claude Code fix dispatch with `model_axis=selected:<value>` MUST pass `model: "<value>"` on the Task call.
|
|
1046
|
+
a. Select/log fix dispatch axes from the fix scope, advance the route level by one after repeated review failure when the resolver reports an ordered target route, then perform the same pre-dispatch assertion used for implementation dispatch. A Codex fix dispatch with `effort_axis=selected:low|medium|high|xhigh` MUST use matching `agent_type: "oat-phase-implementer-low|medium|high|xhigh"`; a Claude Code fix dispatch with `model_axis=selected:<value>` MUST pass `model: "<value>"` on the Task call. Every fix dispatch writes the formal `Dispatch: scope=<phase-or-task> action=fix role=fix producer=<slug|unknown> provenance=<declared|observed|inferred|unknown> model_axis=<axis> effort_axis=<axis> dispatch_policy=<policy|unknown> dispatch_ceiling=<value|none> target=<target|unknown>` stamp before waiting on the implementer result.
|
|
1005
1047
|
b. Dispatch the selected phase implementer role in `fix` mode (Tier 1) OR read the agent and apply fixes inline (Tier 2), with: - `review_artifact`: the path written by the reviewer - `findings`: the Critical + Important findings list - `prior_summary`: the last implementer summary
|
|
1006
1048
|
c. Receive the fix summary.
|
|
1007
1049
|
d. Re-dispatch the reviewer with the updated commit range.
|
|
@@ -1157,7 +1199,7 @@ Append a new entry to the `## Orchestration Runs` section between the `<!-- orch
|
|
|
1157
1199
|
|
|
1158
1200
|
#### Dispatch Notes
|
|
1159
1201
|
|
|
1160
|
-
- Dispatch: {
|
|
1202
|
+
- Dispatch stamps: {formal `Dispatch: ...` records, plus route level and escalation rationale when applicable}
|
|
1161
1203
|
|
|
1162
1204
|
#### Outstanding Items
|
|
1163
1205
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-plan
|
|
3
|
-
version: 1.3.
|
|
3
|
+
version: 1.3.10
|
|
4
4
|
description: Use when design.md is complete and executable implementation tasks are needed. Breaks design into bite-sized TDD tasks in canonical plan.md format.
|
|
5
5
|
oat_gateable: true
|
|
6
6
|
disable-model-invocation: true
|
|
@@ -321,7 +321,7 @@ Before marking the plan ready for implementation, resolve the dispatch policy.
|
|
|
321
321
|
Resolution order:
|
|
322
322
|
|
|
323
323
|
1. Config keys `workflow.dispatchPolicy.mode` / `workflow.dispatchPolicy.policy` via the resolver CLI
|
|
324
|
-
2.
|
|
324
|
+
2. Layered dispatch matrix / compatibility config under `workflow.dispatchCeiling.providers.<provider>` and `workflow.dispatchCeiling.providers.<provider>.<tier>`
|
|
325
325
|
3. Project `state.md` frontmatter key `oat_dispatch_policy`
|
|
326
326
|
4. Legacy project `state.md` frontmatter key `oat_dispatch_ceiling`
|
|
327
327
|
5. Interactive planning prompt (below)
|
|
@@ -347,7 +347,14 @@ Set the dispatch policy — how OAT should choose subagent model/effort controls
|
|
|
347
347
|
|
|
348
348
|
OAT applies managed policies where the provider exposes a reliable mechanism
|
|
349
349
|
(Codex: pinned variants; Claude: Task model parameter). Other providers may
|
|
350
|
-
treat managed policies as advisory
|
|
350
|
+
treat managed policies as advisory until their provider column has a resolvable
|
|
351
|
+
matrix cell.
|
|
352
|
+
|
|
353
|
+
For multi-family providers such as Cursor, these options choose the abstract
|
|
354
|
+
policy rung; concrete model values live in the dispatch matrix under
|
|
355
|
+
`workflow.dispatchCeiling.providers.*`. If the user wants OAT's recommended
|
|
356
|
+
starting matrix, offer `oat config adopt dispatch-matrix` for the chosen config
|
|
357
|
+
layer before finalizing the plan.
|
|
351
358
|
```
|
|
352
359
|
|
|
353
360
|
**Managed capped policy selection (options 1-4)** persists `mode: managed`,
|
|
@@ -355,6 +362,18 @@ treat managed policies as advisory.
|
|
|
355
362
|
compiled result (e.g., "Dispatch policy set: balanced → Codex: high · Claude:
|
|
356
363
|
sonnet") before proceeding.
|
|
357
364
|
|
|
365
|
+
If the resolver reports that the selected policy has a missing matrix cell for
|
|
366
|
+
the active provider/tier, run prompt-and-persist once before final review:
|
|
367
|
+
|
|
368
|
+
1. Ask for the exact provider value for the missing cell, using the provider's
|
|
369
|
+
native vocabulary (for example, `composer-2.5`, `gpt-5.5-xhigh`, `opus`, or
|
|
370
|
+
`xhigh`), or an ordered route when escalation needs multiple targets.
|
|
371
|
+
2. Persist the answer to the selected config layer with
|
|
372
|
+
`workflow.dispatchCeiling.providers.<provider>.<tier>`. Use project
|
|
373
|
+
`state.md` only for sparse project-specific matrix overrides.
|
|
374
|
+
3. Re-run the resolver. Do not silently treat a missing cell as uncapped,
|
|
375
|
+
inherited, or provider-default behavior.
|
|
376
|
+
|
|
358
377
|
**Uncapped (option 5)** persists explicit managed uncapped state. It does not
|
|
359
378
|
write provider caps, and it must not be represented by leaving dispatch policy
|
|
360
379
|
state absent.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-quick-start
|
|
3
|
-
version: 2.1.
|
|
3
|
+
version: 2.1.10
|
|
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
|
|
@@ -475,7 +475,7 @@ dispatch policy.
|
|
|
475
475
|
Resolution order:
|
|
476
476
|
|
|
477
477
|
1. Config keys `workflow.dispatchPolicy.mode` / `workflow.dispatchPolicy.policy` via the resolver CLI
|
|
478
|
-
2.
|
|
478
|
+
2. Layered dispatch matrix / compatibility config under `workflow.dispatchCeiling.providers.<provider>` and `workflow.dispatchCeiling.providers.<provider>.<tier>`
|
|
479
479
|
3. Project `state.md` frontmatter key `oat_dispatch_policy`
|
|
480
480
|
4. Legacy project `state.md` frontmatter key `oat_dispatch_ceiling`
|
|
481
481
|
5. Interactive quick-planning prompt (below)
|
|
@@ -501,7 +501,14 @@ Set the dispatch policy — how OAT should choose subagent model/effort controls
|
|
|
501
501
|
|
|
502
502
|
OAT applies managed policies where the provider exposes a reliable mechanism
|
|
503
503
|
(Codex: pinned variants; Claude: Task model parameter). Other providers may
|
|
504
|
-
treat managed policies as advisory
|
|
504
|
+
treat managed policies as advisory until their provider column has a resolvable
|
|
505
|
+
matrix cell.
|
|
506
|
+
|
|
507
|
+
For multi-family providers such as Cursor, these options choose the abstract
|
|
508
|
+
policy rung; concrete model values live in the dispatch matrix under
|
|
509
|
+
`workflow.dispatchCeiling.providers.*`. If the user wants OAT's recommended
|
|
510
|
+
starting matrix, offer `oat config adopt dispatch-matrix` for the chosen config
|
|
511
|
+
layer before finalizing `plan.md`.
|
|
505
512
|
```
|
|
506
513
|
|
|
507
514
|
**Managed capped policy selection (options 1-4)** persists `mode: managed`,
|
|
@@ -509,6 +516,18 @@ treat managed policies as advisory.
|
|
|
509
516
|
compiled result (e.g., "Dispatch policy set: balanced → Codex: high · Claude:
|
|
510
517
|
sonnet") before proceeding.
|
|
511
518
|
|
|
519
|
+
If the resolver reports that the selected policy has a missing matrix cell for
|
|
520
|
+
the active provider/tier, run prompt-and-persist once before final review:
|
|
521
|
+
|
|
522
|
+
1. Ask for the exact provider value for the missing cell, using the provider's
|
|
523
|
+
native vocabulary (for example, `composer-2.5`, `gpt-5.5-xhigh`, `opus`, or
|
|
524
|
+
`xhigh`), or an ordered route when escalation needs multiple targets.
|
|
525
|
+
2. Persist the answer to the selected config layer with
|
|
526
|
+
`workflow.dispatchCeiling.providers.<provider>.<tier>`. Use project
|
|
527
|
+
`state.md` only for sparse project-specific matrix overrides.
|
|
528
|
+
3. Re-run the resolver. Do not silently treat a missing cell as uncapped,
|
|
529
|
+
inherited, or provider-default behavior.
|
|
530
|
+
|
|
512
531
|
**Uncapped (option 5)** persists explicit managed uncapped state. It does not
|
|
513
532
|
write provider caps, and it must not be represented by leaving dispatch policy
|
|
514
533
|
state absent.
|
|
@@ -20,6 +20,11 @@ oat_phase_status: in_progress # Status: in_progress | complete | pr_open
|
|
|
20
20
|
# providers: # present for capped managed policies; omitted for uncapped/inherit
|
|
21
21
|
# codex: high # low|medium|high|xhigh
|
|
22
22
|
# claude: sonnet # haiku|sonnet|opus|fable
|
|
23
|
+
# matrix: # optional sparse project override; full dispatch matrix lives in layered config
|
|
24
|
+
# cursor:
|
|
25
|
+
# high:
|
|
26
|
+
# - composer-2.5
|
|
27
|
+
# - { harness: cursor, model: gpt-5.5-xhigh }
|
|
23
28
|
# source: project-state
|
|
24
29
|
# oat_dispatch_ceiling: # legacy compatibility alias for capped managed provider targets
|
|
25
30
|
oat_workflow_mode: { OAT_WORKFLOW_MODE } # spec-driven | quick | import
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { buildCommandContext, type CommandContext } from '../../app/command-context.js';
|
|
2
|
+
import { type PromptContext } from '../shared/shared.prompts.js';
|
|
2
3
|
import { type OatConfig, type OatLocalConfig, type UserConfig } from '../../config/oat-config.js';
|
|
3
4
|
import { type ResolvedConfig } from '../../config/resolve.js';
|
|
5
|
+
import { type MatrixCellAvailability, type ValidateMatrixCellOptions } from '../../providers/identity/availability.js';
|
|
4
6
|
import { Command } from 'commander';
|
|
5
7
|
interface ConfigCommandDependencies {
|
|
6
8
|
buildCommandContext: (options: Parameters<typeof buildCommandContext>[0]) => CommandContext;
|
|
@@ -13,6 +15,10 @@ interface ConfigCommandDependencies {
|
|
|
13
15
|
writeUserConfig: (userConfigDir: string, config: UserConfig) => Promise<void>;
|
|
14
16
|
resolveProjectsRoot: (repoRoot: string, env: NodeJS.ProcessEnv) => Promise<string>;
|
|
15
17
|
resolveEffectiveConfig: (repoRoot: string, userConfigDir: string, env: NodeJS.ProcessEnv) => Promise<ResolvedConfig>;
|
|
18
|
+
resolveAssetsRoot: () => Promise<string>;
|
|
19
|
+
readFile: (path: string) => Promise<string>;
|
|
20
|
+
confirmAction: (message: string, ctx: PromptContext) => Promise<boolean>;
|
|
21
|
+
validateMatrixCell: (provider: string, value: string, options: ValidateMatrixCellOptions) => Promise<MatrixCellAvailability>;
|
|
16
22
|
processEnv: NodeJS.ProcessEnv;
|
|
17
23
|
}
|
|
18
24
|
export declare function createConfigCommand(overrides?: Partial<ConfigCommandDependencies>): Command;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACL,KAAK,SAAS,EACd,KAAK,cAAc,EAGnB,KAAK,UAAU,EAchB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC/B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkFpC,UAAU,yBAAyB;IACjC,mBAAmB,EAAE,CACnB,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAC/C,cAAc,CAAC;IACpB,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,KACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/D,eAAe,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,sBAAsB,EAAE,CACtB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,kBAAkB,EAAE,CAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,yBAAyB,KAC/B,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AA61DD,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CAwKT"}
|