@open-agent-toolkit/cli 0.1.51 → 0.1.52
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/docs/cli-utilities/configuration.md +1 -1
- package/assets/docs/reference/cli-reference.md +2 -2
- package/assets/docs/workflows/projects/hill-checkpoints.md +1 -1
- package/assets/docs/workflows/projects/implementation-execution.md +5 -0
- package/assets/docs/workflows/projects/lifecycle.md +9 -0
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-implement/SKILL.md +104 -30
- package/assets/skills/oat-project-import-plan/SKILL.md +6 -6
- package/assets/skills/oat-project-next/SKILL.md +8 -1
- package/assets/skills/oat-project-plan/SKILL.md +6 -6
- package/assets/skills/oat-project-plan-writing/SKILL.md +13 -10
- package/assets/skills/oat-project-pr-final/SKILL.md +8 -1
- package/assets/skills/oat-project-quick-start/SKILL.md +5 -5
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +34 -9
- package/dist/config/oat-config.d.ts +9 -1
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +55 -4
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +7 -3
- package/package.json +2 -2
|
@@ -453,7 +453,7 @@ Workflow preference keys live under the `workflow.*` namespace:
|
|
|
453
453
|
- `workflow.hillCheckpointDefault` — `every` or `final`. Default HiLL checkpoint behavior in `oat-project-implement`: pause after every phase or only after the last phase. When unset, the skill prompts.
|
|
454
454
|
- `workflow.archiveOnComplete` — boolean. Skip the "Archive after completion?" prompt in `oat-project-complete`. When unset, the skill prompts.
|
|
455
455
|
- `workflow.createPrOnComplete` — boolean. Skip the "Open a PR?" prompt in `oat-project-complete`; when true, completion auto-triggers PR creation. When unset, the skill prompts.
|
|
456
|
-
- `workflow.postImplementSequence` — `wait`, `summary`, `pr`, or `docs-pr
|
|
456
|
+
- `workflow.postImplementSequence` — legacy `wait`, `summary`, `pr`, or `docs-pr`, or `{ "preApproval": [...], "postApproval": [...] }`. Legacy values remain strings; structured arrays contain ordered, globally unique `summary`, `document`, and `pr` steps. Pre-approval steps run after final review and before final HiLL approval; post-approval steps run only after that approval. Plain retrieval keeps legacy strings and prints structured values as compact JSON; `--json` returns the raw value.
|
|
457
457
|
- `workflow.reviewExecutionModel` — `subagent`, `inline`, or `fresh-session`. Default final-review execution model in `oat-project-implement`. `subagent` and `inline` run automatically. `fresh-session` is a soft preference: the skill prints guidance to run the review in another session but still offers escape hatches to `subagent` or `inline` if you change your mind. When unset, the skill prompts.
|
|
458
458
|
- `workflow.autoReviewAtHillCheckpoints` — boolean. Automatically run the extra lifecycle review when a HiLL checkpoint is reached. This does not control Tier 1 per-phase `oat-reviewer` gates, which run after each phase in Tier 1 regardless of this setting. When unset, the skill prompts.
|
|
459
459
|
- `workflow.autoNarrowReReviewScope` — boolean. Auto-narrow re-review scope to fix-task commits only in `oat-project-review-provide`. When unset, the skill prompts.
|
|
@@ -66,7 +66,7 @@ Notable commands introduced in the current CLI surface:
|
|
|
66
66
|
- `oat project complete-state <project-path>` - apply the canonical completed-state mutation to a project's `state.md`; used by `oat-project-complete` during lifecycle closeout
|
|
67
67
|
- `oat project archive [project-path]` - archive a tracked project through the same local move, summary export, and optional S3 upload path used by completion. When omitted, the project path falls back to the active project.
|
|
68
68
|
- `oat repo archive sync [project-name]` - hydrate archived project snapshots from the configured repo-scoped S3 archive into `.oat/projects/archived/`. The old `oat project archive sync` path remains as a deprecated shim.
|
|
69
|
-
- `oat project validate-plan --project-path <path>` - validates `oat_plan_parallel_groups` metadata in `plan.md`; exits non-zero on invalid. See [Implementation Execution](../workflows/projects/implementation-execution.md#
|
|
69
|
+
- `oat project validate-plan --project-path <path>` - validates `oat_plan_parallel_groups` metadata in `plan.md`; exits non-zero on invalid. See [Implementation Execution](../workflows/projects/implementation-execution.md#plan-declared-parallelism).
|
|
70
70
|
- `oat project set-mode` — deprecated no-op. Execution mode is no longer user-selectable; emits a deprecation warning and preserves the `--json` contract.
|
|
71
71
|
- `oat gate review <prompt...>` - run a stateful OAT review through the target registry, parse the produced review artifact, and exit nonzero for configured blocking findings. With `--json`, the result envelope on exit is the canonical completion signal: `status` is `ok` | `blocked` | `review_failed` | `artifact_validation_failed` | `targeting_correlation_failed`, alongside `runId`, `generatedAt`, and `artifactPath` when available. Invoke `oat-project-review-receive` only when all three conditions hold: `status` is `ok` or `blocked`, `receiveEligible` is `true`, and `handoff` is non-null. For `artifact_validation_failed`, correct the artifact and rerun the gate for successful revalidation before receive. `targeting_correlation_failed` sets `receiveEligible: false`; do not run review-receive even if it reports an artifact path. Orchestrators should read the structured result rather than poll the filesystem. The command runs standalone (for example, `--review-scope final`), not only inside `oat-project-implement`. See [Workflow Gates → Gate completion signal](../cli-utilities/workflow-gates.md#gate-completion-signal).
|
|
72
72
|
- `oat gate target set <id> --invocation-model <model|provider-default> --invocation-reasoning-effort <effort|provider-default>` - persist optional configured invocation metadata alongside an exec target without inferring it from the target command.
|
|
@@ -92,7 +92,7 @@ The `workflow.*` namespace holds user-facing workflow preferences that let you a
|
|
|
92
92
|
- `workflow.hillCheckpointDefault` (`every` | `final`) — default HiLL checkpoint behavior in `oat-project-implement`
|
|
93
93
|
- `workflow.archiveOnComplete` (`boolean`) — skip the archive prompt in `oat-project-complete`
|
|
94
94
|
- `workflow.createPrOnComplete` (`boolean`) — skip the "Open a PR?" prompt in `oat-project-complete`
|
|
95
|
-
- `workflow.postImplementSequence` (`wait` | `summary` | `pr` | `docs-pr`) — post-implementation chaining
|
|
95
|
+
- `workflow.postImplementSequence` (legacy `wait` | `summary` | `pr` | `docs-pr`, or structured `{preApproval, postApproval}` arrays) — approval-aware post-implementation chaining
|
|
96
96
|
- `workflow.reviewExecutionModel` (`subagent` | `inline` | `fresh-session`) — default final-review execution model
|
|
97
97
|
- `workflow.autoReviewAtHillCheckpoints` (`boolean`) — auto-run the extra lifecycle review at HiLL checkpoints
|
|
98
98
|
- `workflow.autoNarrowReReviewScope` (`boolean`) — auto-narrow re-review scope to fix-task commits
|
|
@@ -10,7 +10,7 @@ OAT supports two checkpoint classes:
|
|
|
10
10
|
- Workflow phase checkpoints
|
|
11
11
|
- Plan phase checkpoints
|
|
12
12
|
|
|
13
|
-
The [
|
|
13
|
+
The [Phase gate review](reviews.md#phase-review-gate) (`oat_phase_review_gate`) is a separate, non-pausing mechanism — it does not pause on a passing gate and never modifies the HiLL keys below (`oat_hill_completed`, `oat_plan_hill_phases`).
|
|
14
14
|
|
|
15
15
|
## Workflow checkpoints (`state.md`)
|
|
16
16
|
|
|
@@ -374,6 +374,11 @@ context. An unresolved or verification-failing conflict stops fan-in.
|
|
|
374
374
|
|
|
375
375
|
## Phase Review Gate and HiLL
|
|
376
376
|
|
|
377
|
+
Phase gate review is independent from HiLL: a configured passing gate continues
|
|
378
|
+
automatically, while a HiLL checkpoint pauses for human approval. For the final
|
|
379
|
+
phase, approval-aware post-implementation sequences run pre-approval work only
|
|
380
|
+
after final review and post-approval work only after the recorded approval.
|
|
381
|
+
|
|
377
382
|
After standard review passes and bookkeeping is committed, an enabled
|
|
378
383
|
`oat_phase_review_gate` may run a target-neutral external review for the phase.
|
|
379
384
|
Passing artifacts are still received for durable disposition; blocking
|
|
@@ -84,6 +84,15 @@ This distinction matters during completion: `oat-project-complete` can skip the
|
|
|
84
84
|
|
|
85
85
|
### Auto-review at HiLL checkpoints
|
|
86
86
|
|
|
87
|
+
### Approval-aware post-implementation sequencing
|
|
88
|
+
|
|
89
|
+
`workflow.postImplementSequence` can use the legacy string values or a structured
|
|
90
|
+
`{ preApproval, postApproval }` value. After the final review passes, OAT
|
|
91
|
+
snapshots the effective sequence, runs ordered pre-approval steps, records final
|
|
92
|
+
HiLL approval, and only then runs post-approval steps. The snapshot is
|
|
93
|
+
restart-safe: an incomplete sequence routes back to implementation and resumes
|
|
94
|
+
from its first incomplete step.
|
|
95
|
+
|
|
87
96
|
When `workflow.autoReviewAtHillCheckpoints` is enabled or `plan.md` frontmatter sets `oat_auto_review_at_hill_checkpoints`, completing a HiLL checkpoint automatically runs the extra lifecycle review scoped to every implementation phase not already covered by a passed whole-phase code review, through the just-completed checkpoint. Mid-implementation multi-phase reviews use inclusive phase-range scopes such as `p02-p03`; the final implementation checkpoint uses `code final`. The review uses auto-disposition mode (minors auto-converted to fix tasks, no user prompts). Disabled by default. Legacy `autoReviewAtCheckpoints` and `oat_auto_review_at_checkpoints` are still read as fallbacks. This does not control Tier 1 per-phase `oat-reviewer` gates.
|
|
88
97
|
|
|
89
98
|
### Phase-review setup during planning
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-implement
|
|
3
|
-
version: 2.0.
|
|
3
|
+
version: 2.0.36
|
|
4
4
|
description: Use when plan.md is ready for execution. Dispatches phase coordinators that select one exact target-pinned worker per task; supports bounded fix loops and plan-declared worktree-isolated parallel phases.
|
|
5
5
|
oat_gateable: true
|
|
6
6
|
argument-hint: '[--retry-limit <N>] [--dry-run]'
|
|
@@ -1451,7 +1451,7 @@ git add {PROJECT_PATH}/implementation.md {PROJECT_PATH}/state.md {PROJECT_PATH}/
|
|
|
1451
1451
|
git commit -m "chore(oat): bookkeeping after {pNN} {pass|fail}"
|
|
1452
1452
|
```
|
|
1453
1453
|
|
|
1454
|
-
Then run the optional external phase review gate for the completed phase when `oat_phase_review_gate` selects it. After the gate passes or is skipped, check HiLL checkpoint
|
|
1454
|
+
Then run the optional external phase review gate for the completed phase when `oat_phase_review_gate` selects it. After the gate passes or is skipped, check the HiLL checkpoint. A non-final checkpoint pauses at this boundary; defer a final-phase checkpoint to **Final HiLL Closeout Sequence** after final verification, final review, and any configured pre-approval steps succeed.
|
|
1455
1455
|
|
|
1456
1456
|
### Step 8: Check Plan Phase Completion
|
|
1457
1457
|
|
|
@@ -1495,12 +1495,20 @@ Before pausing at a checkpoint, check if auto-review is enabled:
|
|
|
1495
1495
|
|
|
1496
1496
|
3. If disabled: skip directly to the checkpoint pause.
|
|
1497
1497
|
|
|
1498
|
-
When pausing:
|
|
1498
|
+
When pausing at a non-final checkpoint:
|
|
1499
1499
|
|
|
1500
1500
|
- Output phase summary (tasks completed, commits made)
|
|
1501
1501
|
- Ask user: "Phase {N} ({phase_name}) complete. Continue to next phase?"
|
|
1502
1502
|
- Wait for user approval before proceeding to next plan phase
|
|
1503
1503
|
|
|
1504
|
+
**Final checkpoint deferral:** If the current phase is the final implementation
|
|
1505
|
+
phase and it is configured as a HiLL checkpoint, do not ask the generic
|
|
1506
|
+
"Continue to next phase?" question. Final checkpoint auto-review above still
|
|
1507
|
+
runs exactly as written, including `oat-project-review-provide code final` and
|
|
1508
|
+
its no-duplicate-final-review rule. Then continue through Steps 9–14. Final
|
|
1509
|
+
approval occurs only in **Final HiLL Closeout Sequence**, after final review and
|
|
1510
|
+
the stored pre-approval sequence complete.
|
|
1511
|
+
|
|
1504
1512
|
**Restart safety (required):**
|
|
1505
1513
|
|
|
1506
1514
|
- At the end of each task and at each phase boundary, ensure `implementation.md` is persisted and internally consistent:
|
|
@@ -1541,7 +1549,7 @@ Do not use `git add -A` or glob patterns. Only commit the three project artifact
|
|
|
1541
1549
|
**Note on HiLL types:**
|
|
1542
1550
|
|
|
1543
1551
|
- **Workflow HiLL** (`oat_hill_checkpoints` in state.md): Gates between workflow phases (discovery → spec → design → plan → implement). Checked by oat-project-progress router.
|
|
1544
|
-
- **Plan phase checkpoints** (`oat_plan_hill_phases` in plan.md): Gates at plan phase boundaries during implementation. `[]` means pause after every phase; a populated array pauses only after listed phases. The field may be absent only before the first implementation-run confirmation. Listed phases are where you stop AFTER completing them.
|
|
1552
|
+
- **Plan phase checkpoints** (`oat_plan_hill_phases` in plan.md): Gates at plan phase boundaries during implementation. `[]` means pause after every phase; a populated array pauses only after listed phases. The field may be absent only before the first implementation-run confirmation. Listed phases are where you stop AFTER completing them. A checkpoint on the final implementation phase is deferred to final closeout so final verification, final review, and configured pre-approval work finish before explicit approval.
|
|
1545
1553
|
- **Phase review gate** (`oat_phase_review_gate` in plan.md): Optional non-pausing external review gate after a completed phase passes the standard reviewer. Missing/disabled means skip; `phases: []` means gate every implementation phase. Passing gates continue automatically; blocking gates are received/fixed before execution proceeds.
|
|
1546
1554
|
|
|
1547
1555
|
**Revision phase completion handling:**
|
|
@@ -1715,10 +1723,12 @@ echo "$FINAL_ROW"
|
|
|
1715
1723
|
- Example row:
|
|
1716
1724
|
- `| final | code | passed | 2026-01-28 | reviews/final-review-2026-01-28T140322Z.md |`
|
|
1717
1725
|
- Check:
|
|
1726
|
+
|
|
1718
1727
|
```bash
|
|
1719
1728
|
echo "$FINAL_ROW" | grep -qE "^\\|\\s*final\\s*\\|.*\\|\\s*passed\\s*\\|" && echo "passed"
|
|
1720
1729
|
```
|
|
1721
|
-
|
|
1730
|
+
|
|
1731
|
+
- Continue to Step 15 (final closeout)
|
|
1722
1732
|
|
|
1723
1733
|
**If final review is not marked `passed`:**
|
|
1724
1734
|
|
|
@@ -1807,36 +1817,100 @@ To run in a separate session use: oat-project-review-provide code final
|
|
|
1807
1817
|
|
|
1808
1818
|
**After final review is marked `passed`:**
|
|
1809
1819
|
|
|
1810
|
-
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
- Append `"implement"` to `oat_hill_completed` (only if configured as a HiLL gate)
|
|
1815
|
-
- Update state content to "Implementation complete".
|
|
1816
|
-
- Update `"$PROJECT_PATH/plan.md"`:
|
|
1817
|
-
- Set the `final` review row status to `passed` (if not already)
|
|
1818
|
-
- Ensure `## Implementation Complete` totals reflect any review fix tasks that were added
|
|
1819
|
-
- Update `"$PROJECT_PATH/implementation.md"`:
|
|
1820
|
-
- Ensure `oat_current_task_id: null`
|
|
1821
|
-
- Ensure the "Review Received" section reflects completed fixes and points to the next action (PR) rather than "execute fix tasks"
|
|
1820
|
+
- Record the passed final review and keep the project in implementation closeout.
|
|
1821
|
+
- Do not append `"implement"` to `oat_hill_completed`, set
|
|
1822
|
+
`oat_phase_status: complete`, or offer the normal next-step prompt yet.
|
|
1823
|
+
- Continue to **Final HiLL Closeout Sequence**.
|
|
1822
1824
|
|
|
1823
|
-
### Step 15:
|
|
1825
|
+
### Step 15: Final HiLL Closeout Sequence
|
|
1824
1826
|
|
|
1825
|
-
|
|
1827
|
+
The final-closeout orchestrator owns this sequence after the rebased phase
|
|
1828
|
+
coordinator has finished. Do not move lifecycle sequencing into task workers or
|
|
1829
|
+
weaken exact target selection for child dispatches.
|
|
1826
1830
|
|
|
1827
|
-
|
|
1831
|
+
Identify the final implementation phase from the plan. A final HiLL checkpoint
|
|
1832
|
+
exists when `oat_plan_hill_phases` is `[]` (every phase) or when it explicitly
|
|
1833
|
+
contains that final phase ID. Defer only a checkpoint on the final implementation
|
|
1834
|
+
phase; non-final checkpoint behavior remains unchanged.
|
|
1828
1835
|
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1836
|
+
Run final verification (Step 13). Final review must be `passed` before any
|
|
1837
|
+
pre-approval dispatch. If final checkpoint auto-review is enabled, Step 8 has
|
|
1838
|
+
already run `oat-project-review-provide code final`; do not run a duplicate
|
|
1839
|
+
final review here.
|
|
1840
|
+
|
|
1841
|
+
Read the effective `workflow.postImplementSequence` once. For a configured
|
|
1842
|
+
legacy or structured preference, normalize legacy values before snapshotting:
|
|
1843
|
+
`wait` → `{ preApproval: [], postApproval: [] }`, `summary` →
|
|
1844
|
+
`{ preApproval: ["summary"], postApproval: [] }`, `pr` → `{ preApproval:
|
|
1845
|
+
["summary", "pr"], postApproval: [] }`, and `docs-pr` → `{ preApproval:
|
|
1846
|
+
["summary", "document", "pr"], postApproval: [] }`.
|
|
1832
1847
|
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1848
|
+
Persist this immutable state before dispatching a child:
|
|
1849
|
+
|
|
1850
|
+
```yaml
|
|
1851
|
+
oat_post_implement_sequence:
|
|
1852
|
+
status: pre_approval # pre_approval | awaiting_approval | post_approval | failed | complete
|
|
1853
|
+
final_phase: pNN
|
|
1854
|
+
pre_approval: [summary, document, pr]
|
|
1855
|
+
pre_approval_completed: []
|
|
1856
|
+
approval: pending # pending | approved | not_required
|
|
1857
|
+
post_approval: []
|
|
1858
|
+
post_approval_completed: []
|
|
1859
|
+
failure: null
|
|
1860
|
+
```
|
|
1838
1861
|
|
|
1839
|
-
|
|
1862
|
+
The snapshot is immutable for this closeout: never re-resolve
|
|
1863
|
+
`workflow.postImplementSequence` while it is incomplete. Iterate
|
|
1864
|
+
`pre_approval` and `post_approval` in their stored array order; do not sort or
|
|
1865
|
+
substitute a vocabulary order. Resume from the first incomplete stored step,
|
|
1866
|
+
including a partially completed noncanonical order.
|
|
1867
|
+
|
|
1868
|
+
For every pending `summary`, `document`, or `pr`, dispatch respectively
|
|
1869
|
+
`oat-project-summary`, `oat-project-document`, or `oat-project-pr-final`.
|
|
1870
|
+
Every `summary`, `document`, and `pr` child receives the authoritative snapshot
|
|
1871
|
+
and must merge state updates without replacing `oat_post_implement_sequence`.
|
|
1872
|
+
Re-read and verify the snapshot after every child returns before recording step
|
|
1873
|
+
success. If a child removed or altered it, restore the authoritative snapshot,
|
|
1874
|
+
record that step as failed, and stop with the boundary, failed step, and exact
|
|
1875
|
+
resume command: `oat-project-implement`.
|
|
1876
|
+
|
|
1877
|
+
Commit each completed step before dispatching the next step. On failure, persist
|
|
1878
|
+
`status: failed`, the boundary, the failed step, and concise recovery context.
|
|
1879
|
+
A pre-approval failure leaves `approval: pending`; a post-approval failure
|
|
1880
|
+
retains `approval: approved`. Fail fast with the boundary, failed step, and
|
|
1881
|
+
exact resume command: `oat-project-implement`.
|
|
1882
|
+
|
|
1883
|
+
1. Dispatch incomplete `pre_approval` steps in stored order.
|
|
1884
|
+
2. When they succeed and a final checkpoint exists, commit `status:
|
|
1885
|
+
awaiting_approval` with `approval: pending` before asking for final HiLL
|
|
1886
|
+
approval.
|
|
1887
|
+
3. Record explicit approval as `approval: approved` and `status: post_approval`
|
|
1888
|
+
before any post-approval dispatch. Then dispatch incomplete `post_approval`
|
|
1889
|
+
steps in stored order.
|
|
1890
|
+
4. A decline or defer keeps `status: awaiting_approval` and `approval: pending`;
|
|
1891
|
+
record neither approval nor failure and run no post-approval step. State the
|
|
1892
|
+
boundary and exact resume command: `oat-project-implement`.
|
|
1893
|
+
5. If no final checkpoint exists, commit `approval: not_required` before
|
|
1894
|
+
post-approval dispatch. `approval: not_required` is valid only when no final
|
|
1895
|
+
checkpoint exists.
|
|
1896
|
+
6. After all stored steps finish, commit `status: complete`. Only then complete
|
|
1897
|
+
implementation state, append the configured final HiLL completion, and
|
|
1898
|
+
continue to the existing next-step behavior.
|
|
1899
|
+
|
|
1900
|
+
If the preference is unset, do not create a sequence snapshot. When the
|
|
1901
|
+
preference is unset, retain the existing next-step prompt only after final
|
|
1902
|
+
approval when a final checkpoint is configured.
|
|
1903
|
+
|
|
1904
|
+
### Step 16: Prompt for Next Steps
|
|
1905
|
+
|
|
1906
|
+
Run the standard next-step prompt only when
|
|
1907
|
+
`workflow.postImplementSequence` was unset and no sequence snapshot was
|
|
1908
|
+
created. It occurs after final approval when a final checkpoint is configured.
|
|
1909
|
+
A configured legacy or structured preference has already completed through
|
|
1910
|
+
**Final HiLL Closeout Sequence**; do not re-dispatch its steps here. When the
|
|
1911
|
+
completed snapshot came from configured `wait`, print
|
|
1912
|
+
`Post-implementation: wait (from workflow.postImplementSequence). Run
|
|
1913
|
+
follow-up skills manually when ready.` and exit without auto-chaining.
|
|
1840
1914
|
|
|
1841
1915
|
**Standard prompt (when preference is unset):**
|
|
1842
1916
|
|
|
@@ -1869,7 +1943,7 @@ Do not route directly to `oat-project-complete`. The `pr_open` status set by pr-
|
|
|
1869
1943
|
|
|
1870
1944
|
Tell user: "Run the skills individually when ready: oat-project-summary → oat-project-document → oat-project-pr-final"
|
|
1871
1945
|
|
|
1872
|
-
### Step
|
|
1946
|
+
### Step 17: Output Summary
|
|
1873
1947
|
|
|
1874
1948
|
```
|
|
1875
1949
|
Implementation complete for {project-name}.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-import-plan
|
|
3
|
-
version: 1.4.
|
|
3
|
+
version: 1.4.5
|
|
4
4
|
description: Use when you have an external markdown plan to execute with OAT. Preserves the source plan and normalizes it into canonical plan.md format.
|
|
5
5
|
argument-hint: '<path-to-plan.md> [--provider codex|cursor|claude] [--project <name>]'
|
|
6
6
|
oat_gateable: true
|
|
@@ -16,7 +16,7 @@ Import a markdown plan from an external coding provider and normalize it into OA
|
|
|
16
16
|
Provider native plan mode uses this same path: provider-plan-via-import
|
|
17
17
|
preserves the provider plan first, and provider plan dispatch readiness
|
|
18
18
|
inherits the same import workflow contract below, including complete ladder
|
|
19
|
-
adoption, the project named ceiling, the `Shared Phase
|
|
19
|
+
adoption, the project named ceiling, the `Shared Phase Gate Review Setup Contract`,
|
|
20
20
|
and the rule that readiness and completion follow only after a durable review
|
|
21
21
|
disposition. It does not add a separate provider-plan prompt.
|
|
22
22
|
|
|
@@ -277,10 +277,10 @@ maximum. Use the canonical
|
|
|
277
277
|
project ceiling resolves. `Uncapped` and `Inherit Host Defaults` remain
|
|
278
278
|
explicit modes; `Leave Unresolved` is not implementation-ready.
|
|
279
279
|
|
|
280
|
-
### Step 4.25: Configure Optional Phase Review
|
|
280
|
+
### Step 4.25: Configure Optional Phase Gate Review
|
|
281
281
|
|
|
282
282
|
After normalization has produced stable phase IDs and before Step 4.5 starts
|
|
283
|
-
the import-aware plan artifact review, invoke the `Shared Phase
|
|
283
|
+
the import-aware plan artifact review, invoke the `Shared Phase Gate Review Setup
|
|
284
284
|
Contract` from `oat-project-plan-writing`. Provider native plan mode uses this
|
|
285
285
|
same import step and inherits its result.
|
|
286
286
|
|
|
@@ -289,10 +289,10 @@ through the shared contract without probing, prompting, or mutation. Resumed or
|
|
|
289
289
|
imported explicit values remain authoritative without re-prompting. Otherwise
|
|
290
290
|
let the contract probe qualifying targets and offer all phases, selected
|
|
291
291
|
phases, or disabled. If the probe fails, no target qualifies, or the user
|
|
292
|
-
declines, leave
|
|
292
|
+
declines, leave Phase gate review disabled and continue with the contract's concise
|
|
293
293
|
status output.
|
|
294
294
|
|
|
295
|
-
This
|
|
295
|
+
This Phase gate review setup is independent from HiLL checkpoints. Do not read or
|
|
296
296
|
change HiLL fields here, and do not add a provider/model `--target` to any
|
|
297
297
|
lifecycle command.
|
|
298
298
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-next
|
|
3
|
-
version: 1.0.
|
|
3
|
+
version: 1.0.7
|
|
4
4
|
description: Use when continuing work on the active OAT project. Reads project state, determines the next lifecycle action, and invokes the appropriate skill automatically.
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
user-invocable: true
|
|
@@ -259,6 +259,13 @@ Entry condition: `oat_phase == "implement"` AND (`oat_phase_status == "complete"
|
|
|
259
259
|
|
|
260
260
|
Apply the following checks in priority order. Stop at the first match:
|
|
261
261
|
|
|
262
|
+
**5.0: Incomplete approval-aware post-implementation sequence**
|
|
263
|
+
|
|
264
|
+
Before every other post-implementation route, inspect `oat_post_implement_sequence`
|
|
265
|
+
in project state. When the snapshot exists and is incomplete, route to
|
|
266
|
+
`oat-project-implement`. This applies even when `oat_phase_status` is `pr_open`
|
|
267
|
+
or a summary exists. A completed snapshot falls through to the normal router.
|
|
268
|
+
|
|
262
269
|
**5.1: Incomplete revision tasks**
|
|
263
270
|
|
|
264
271
|
Grep plan.md for `p-revN` phases. If any `p-revN` tasks exist with status != completed in implementation.md:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-plan
|
|
3
|
-
version: 1.3.
|
|
3
|
+
version: 1.3.13
|
|
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
|
|
@@ -203,7 +203,7 @@ oat_template: false
|
|
|
203
203
|
|
|
204
204
|
When Overwrite restored an explicit phase-review snapshot, keep that exact
|
|
205
205
|
entry in this first rewritten frontmatter. Do not let the generic frontmatter
|
|
206
|
-
update remove or replace it. The shared
|
|
206
|
+
update remove or replace it. The shared Phase gate review setup in Step 12.25 must
|
|
207
207
|
observe the restored key and preserve it without probing, prompting, or
|
|
208
208
|
mutation. When the key was absent from the overwritten plan, do not invent it
|
|
209
209
|
before the shared setup contract runs.
|
|
@@ -417,20 +417,20 @@ Ask: "Does this breakdown make sense? Any tasks missing?"
|
|
|
417
417
|
|
|
418
418
|
Iterate until user confirms.
|
|
419
419
|
|
|
420
|
-
### Step 12.25: Configure Optional Phase Review
|
|
420
|
+
### Step 12.25: Configure Optional Phase Gate Review
|
|
421
421
|
|
|
422
422
|
After the confirmed plan has stable phase IDs and before Step 12.5 starts the
|
|
423
|
-
plan artifact review, invoke the `Shared Phase
|
|
423
|
+
plan artifact review, invoke the `Shared Phase Gate Review Setup Contract` from
|
|
424
424
|
`oat-project-plan-writing`.
|
|
425
425
|
|
|
426
426
|
If `plan.md` already contains an explicit `oat_phase_review_gate`, preserve it
|
|
427
427
|
through the shared contract without probing, prompting, or mutation. Otherwise
|
|
428
428
|
let the contract probe qualifying targets and offer all phases, selected
|
|
429
429
|
phases, or disabled. If the probe fails, no target qualifies, or the user
|
|
430
|
-
declines, leave
|
|
430
|
+
declines, leave Phase gate review disabled and continue with the contract's concise
|
|
431
431
|
status output.
|
|
432
432
|
|
|
433
|
-
This
|
|
433
|
+
This Phase gate review setup is independent from HiLL checkpoints. Do not read or
|
|
434
434
|
change HiLL fields here, and do not add a provider/model `--target` to any
|
|
435
435
|
lifecycle command.
|
|
436
436
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-plan-writing
|
|
3
|
-
version: 1.2.
|
|
3
|
+
version: 1.2.9
|
|
4
4
|
description: Use when authoring or mutating plan.md in any OAT workflow. Defines canonical format invariants — stable task IDs, required sections, review table rules, and resume guardrails.
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
user-invocable: false
|
|
@@ -134,7 +134,7 @@ The Auto Artifact-Review Loop below consumes this reviewer dispatch contract.
|
|
|
134
134
|
Tier selection happens only after the target-preserving route is known and
|
|
135
135
|
changes execution mechanics, not the resolved model/effort contract.
|
|
136
136
|
|
|
137
|
-
## Shared Phase
|
|
137
|
+
## Shared Phase Gate Review Setup Contract
|
|
138
138
|
|
|
139
139
|
Every plan-producing workflow invokes this procedure after the complete plan
|
|
140
140
|
has stable phase IDs and before the plan artifact review begins. The calling
|
|
@@ -149,7 +149,7 @@ unchanged. Do not probe targets, prompt, or mutate the setting. This applies to
|
|
|
149
149
|
enabled, disabled, resumed, and imported explicit values. Report:
|
|
150
150
|
|
|
151
151
|
```text
|
|
152
|
-
Phase review: preserved existing oat_phase_review_gate setting.
|
|
152
|
+
Phase gate review: preserved existing oat_phase_review_gate setting.
|
|
153
153
|
```
|
|
154
154
|
|
|
155
155
|
Implementation preflight remains responsible for rejecting a malformed
|
|
@@ -182,13 +182,13 @@ If the probe fails, emit exactly this concise warning and continue planning
|
|
|
182
182
|
without adding the setting:
|
|
183
183
|
|
|
184
184
|
```text
|
|
185
|
-
Warning:
|
|
185
|
+
Warning: Phase gate review target probe failed; Phase gate review remains disabled.
|
|
186
186
|
```
|
|
187
187
|
|
|
188
188
|
If no qualifying target exists, emit:
|
|
189
189
|
|
|
190
190
|
```text
|
|
191
|
-
Phase review: disabled (no qualifying target);
|
|
191
|
+
Phase gate review: disabled (no qualifying target); Phase gate review remains disabled.
|
|
192
192
|
```
|
|
193
193
|
|
|
194
194
|
Do not invent enablement in either branch.
|
|
@@ -198,9 +198,12 @@ Do not invent enablement in either branch.
|
|
|
198
198
|
When at least one target qualifies and an interactive user-response channel is
|
|
199
199
|
available, offer exactly these outcomes:
|
|
200
200
|
|
|
201
|
-
1. **All phases** - enable review
|
|
202
|
-
2. **Selected phases** - enable review only
|
|
203
|
-
3. **Disabled** - leave
|
|
201
|
+
1. **All phases** - enable the independent Phase gate review after every implementation phase.
|
|
202
|
+
2. **Selected phases** - enable the independent Phase gate review only after chosen stable phase IDs.
|
|
203
|
+
3. **Disabled** - leave Phase gate review disabled.
|
|
204
|
+
|
|
205
|
+
Phase gate review is non-pausing when it passes and is distinct from both HiLL
|
|
206
|
+
approval and final artifact review.
|
|
204
207
|
|
|
205
208
|
For all phases, write the existing plan frontmatter shape:
|
|
206
209
|
|
|
@@ -222,7 +225,7 @@ If the user declines or chooses Disabled, do not add
|
|
|
222
225
|
`oat_phase_review_gate`; emit:
|
|
223
226
|
|
|
224
227
|
```text
|
|
225
|
-
Phase review: disabled (user declined);
|
|
228
|
+
Phase gate review: disabled (user declined); Phase gate review remains disabled.
|
|
226
229
|
```
|
|
227
230
|
|
|
228
231
|
### 4. Handle non-interactive planning
|
|
@@ -233,7 +236,7 @@ a qualifying target, do not guess all phases or selected phases and do not
|
|
|
233
236
|
invent enablement. Leave the setting absent and emit:
|
|
234
237
|
|
|
235
238
|
```text
|
|
236
|
-
Phase review: disabled (non-interactive; no selection recorded);
|
|
239
|
+
Phase gate review: disabled (non-interactive; no selection recorded); Phase gate review remains disabled.
|
|
237
240
|
```
|
|
238
241
|
|
|
239
242
|
### 5. Keep review gates independent from HiLL
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-pr-final
|
|
3
|
-
version: 1.4.
|
|
3
|
+
version: 1.4.2
|
|
4
4
|
description: Use when the user requests or confirms opening the final PR for an active OAT project — e.g. "open the final PR", "ship it", "run oat-project-pr-final", or confirms a previously offered final-PR step. Do NOT auto-invoke when phases are marked complete. Generates the final lifecycle PR description from artifacts and creates the PR.
|
|
5
5
|
disable-model-invocation: false
|
|
6
6
|
user-invocable: true
|
|
@@ -168,6 +168,13 @@ If `FINAL_ROW` is missing or does not contain `passed`:
|
|
|
168
168
|
|
|
169
169
|
### Step 3: Collect Project Summary
|
|
170
170
|
|
|
171
|
+
Before generating a summary, inspect `oat_post_implement_sequence`. Reuse a
|
|
172
|
+
completed `summary` step instead of regenerating it; when no completed sequence
|
|
173
|
+
summary exists, retain normal summary generation. Every state update in this
|
|
174
|
+
skill must merge with, never replace, `oat_post_implement_sequence`. If a PR
|
|
175
|
+
was partially created, reconcile the durable PR state before retrying its `pr`
|
|
176
|
+
sequence step.
|
|
177
|
+
|
|
171
178
|
**Step 3.0: Check for summary.md**
|
|
172
179
|
|
|
173
180
|
Check if `{PROJECT_PATH}/summary.md` exists:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-quick-start
|
|
3
|
-
version: 2.1.
|
|
3
|
+
version: 2.1.14
|
|
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
|
|
@@ -563,20 +563,20 @@ copy compiled provider targets into this shape or user config. `Uncapped` and
|
|
|
563
563
|
`Inherit Host Defaults` remain explicit modes; `Leave Unresolved` and
|
|
564
564
|
non-interactive unresolved state are not implementation-ready.
|
|
565
565
|
|
|
566
|
-
### Step 3.55: Configure Optional Phase Review
|
|
566
|
+
### Step 3.55: Configure Optional Phase Gate Review
|
|
567
567
|
|
|
568
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
|
|
569
|
+
the plan artifact review, invoke the `Shared Phase Gate Review Setup Contract` from
|
|
570
570
|
`oat-project-plan-writing`.
|
|
571
571
|
|
|
572
572
|
If `plan.md` already contains an explicit `oat_phase_review_gate`, preserve it
|
|
573
573
|
through the shared contract without probing, prompting, or mutation. Otherwise
|
|
574
574
|
let the contract probe qualifying targets and offer all phases, selected
|
|
575
575
|
phases, or disabled. If the probe fails, no target qualifies, or the user
|
|
576
|
-
declines, leave
|
|
576
|
+
declines, leave Phase gate review disabled and continue with the contract's concise
|
|
577
577
|
status output.
|
|
578
578
|
|
|
579
|
-
This
|
|
579
|
+
This Phase gate review setup is independent from HiLL checkpoints. Do not read or
|
|
580
580
|
change HiLL fields here, and do not add a provider/model `--target` to any
|
|
581
581
|
lifecycle command.
|
|
582
582
|
|
|
@@ -1 +1 @@
|
|
|
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;AAezC,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,cAAc,EAGnB,KAAK,UAAU,
|
|
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;AAezC,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,cAAc,EAGnB,KAAK,UAAU,EAehB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGL,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAC/B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,mCAAmC,EACnC,0BAA0B,EAC3B,MAAM,yCAAyC,CAAC;AACjD,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,8BAA8B,CAAC,CAAC;IAC7C,mCAAmC,EAAE,OAAO,mCAAmC,CAAC;IAChF,0BAA0B,EAAE,OAAO,0BAA0B,CAAC;IAC9D,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAq2DD,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CAsKT"}
|
|
@@ -7,7 +7,7 @@ import { readGlobalOptions } from '../shared/shared.utils.js';
|
|
|
7
7
|
import { compileDispatchCeilingPreset } from '../../config/dispatch-ceiling-preset.js';
|
|
8
8
|
import { normalizeDispatchMatrix, validateDispatchRouteTarget, walkDispatchMatrix, } from '../../config/dispatch-matrix.js';
|
|
9
9
|
import { dispatchPolicyModeDescription, dispatchPolicyPolicyDescription, managedDispatchPolicyValueList, } from '../../config/dispatch-policy-options.js';
|
|
10
|
-
import { VALID_DISPATCH_POLICY_MODES, VALID_MANAGED_DISPATCH_POLICIES, readOatConfig, readOatLocalConfig, readUserConfig, writeOatConfig, writeOatLocalConfig, writeUserConfig, } from '../../config/oat-config.js';
|
|
10
|
+
import { VALID_DISPATCH_POLICY_MODES, VALID_MANAGED_DISPATCH_POLICIES, normalizeWorkflowPostImplementSequence, readOatConfig, readOatLocalConfig, readUserConfig, writeOatConfig, writeOatLocalConfig, writeUserConfig, } from '../../config/oat-config.js';
|
|
11
11
|
import { resolveEffectiveConfig, } from '../../config/resolve.js';
|
|
12
12
|
import { resolveAssetsRoot } from '../../fs/assets.js';
|
|
13
13
|
import { resolveProjectRoot } from '../../fs/paths.js';
|
|
@@ -389,11 +389,11 @@ const CONFIG_CATALOG = [
|
|
|
389
389
|
group: 'Workflow Preferences (3-layer: local > shared > user)',
|
|
390
390
|
file: '.oat/config.local.json | .oat/config.json | ~/.oat/config.json',
|
|
391
391
|
scope: 'workflow',
|
|
392
|
-
type: 'wait | summary | pr | docs-pr',
|
|
392
|
+
type: 'legacy string (wait | summary | pr | docs-pr) | structured JSON object',
|
|
393
393
|
defaultValue: 'unset',
|
|
394
394
|
mutability: 'read/write',
|
|
395
|
-
owningCommand:
|
|
396
|
-
description: 'Default post-implementation chaining
|
|
395
|
+
owningCommand: "oat config set workflow.postImplementSequence '<legacy-or-json>'",
|
|
396
|
+
description: 'Default post-implementation chaining. Legacy strings remain supported unchanged. Structured JSON uses {"preApproval":[...],"postApproval":[...]} with the canonical sequence steps. Plain get/list/dump output serializes structured values as compact JSON; get --json preserves the object value. When unset, the skill prompts. Resolution: env > local > shared > user > default.',
|
|
397
397
|
},
|
|
398
398
|
{
|
|
399
399
|
key: 'workflow.reviewExecutionModel',
|
|
@@ -717,6 +717,23 @@ function parseWorkflowValue(key, rawValue) {
|
|
|
717
717
|
}
|
|
718
718
|
return normalized === 'true';
|
|
719
719
|
}
|
|
720
|
+
if (key === 'workflow.postImplementSequence') {
|
|
721
|
+
const normalized = rawValue.trim();
|
|
722
|
+
if (normalized.startsWith('{') || normalized.startsWith('[')) {
|
|
723
|
+
let parsed;
|
|
724
|
+
try {
|
|
725
|
+
parsed = JSON.parse(normalized);
|
|
726
|
+
}
|
|
727
|
+
catch {
|
|
728
|
+
throw new Error(`Invalid value for ${key}: expected valid structured JSON`);
|
|
729
|
+
}
|
|
730
|
+
const sequence = normalizeWorkflowPostImplementSequence(parsed);
|
|
731
|
+
if (!sequence || Array.isArray(parsed)) {
|
|
732
|
+
throw new Error(`Invalid value for ${key}: structured JSON must match {"preApproval":[...],"postApproval":[...]}`);
|
|
733
|
+
}
|
|
734
|
+
return sequence;
|
|
735
|
+
}
|
|
736
|
+
}
|
|
720
737
|
const allowed = WORKFLOW_ENUM_VALUES[key];
|
|
721
738
|
if (allowed) {
|
|
722
739
|
const normalized = rawValue.trim();
|
|
@@ -828,6 +845,12 @@ function toAvailabilityRef(ref) {
|
|
|
828
845
|
}
|
|
829
846
|
function applyWorkflowValue(workflow, key, value) {
|
|
830
847
|
const subKey = key.slice('workflow.'.length);
|
|
848
|
+
if (subKey === 'postImplementSequence') {
|
|
849
|
+
return {
|
|
850
|
+
...workflow,
|
|
851
|
+
postImplementSequence: value,
|
|
852
|
+
};
|
|
853
|
+
}
|
|
831
854
|
if (subKey === 'dispatchPolicy.mode') {
|
|
832
855
|
const mode = value;
|
|
833
856
|
if (mode === 'inherit') {
|
|
@@ -940,7 +963,7 @@ function formatResolvedValue(value) {
|
|
|
940
963
|
}
|
|
941
964
|
return String(value);
|
|
942
965
|
}
|
|
943
|
-
async function getConfigValue(repoRoot, userConfigDir, key, dependencies) {
|
|
966
|
+
async function getConfigValue(repoRoot, userConfigDir, key, dependencies, preserveRawObject = false) {
|
|
944
967
|
const resolved = await dependencies.resolveEffectiveConfig(repoRoot, userConfigDir, dependencies.processEnv);
|
|
945
968
|
const entry = resolved.resolved[key];
|
|
946
969
|
if (!entry) {
|
|
@@ -948,7 +971,9 @@ async function getConfigValue(repoRoot, userConfigDir, key, dependencies) {
|
|
|
948
971
|
}
|
|
949
972
|
return {
|
|
950
973
|
key,
|
|
951
|
-
value:
|
|
974
|
+
value: preserveRawObject && typeof entry.value === 'object'
|
|
975
|
+
? entry.value
|
|
976
|
+
: formatResolvedValue(entry.value),
|
|
952
977
|
source: entry.source,
|
|
953
978
|
};
|
|
954
979
|
}
|
|
@@ -966,7 +991,7 @@ async function setConfigValue(repoRoot, userConfigDir, key, rawValue, surface, d
|
|
|
966
991
|
const effectiveSurface = surface === 'auto' ? defaultSurfaceForKey(key) : surface;
|
|
967
992
|
if (isWorkflowKey(key)) {
|
|
968
993
|
const parsedValue = parseWorkflowValue(key, rawValue);
|
|
969
|
-
const displayValue =
|
|
994
|
+
const displayValue = formatResolvedValue(parsedValue);
|
|
970
995
|
if (typeof parsedValue === 'string' && isDispatchCeilingProviderKey(key)) {
|
|
971
996
|
const availability = await dependencies.validateMatrixCell(providerNameFromConfigKey(key), parsedValue, {
|
|
972
997
|
cwd: repoRoot,
|
|
@@ -1322,7 +1347,7 @@ async function runGet(keyArg, context, dependencies) {
|
|
|
1322
1347
|
}
|
|
1323
1348
|
const repoRoot = await dependencies.resolveProjectRoot(context.cwd);
|
|
1324
1349
|
const userConfigDir = join(context.home, '.oat');
|
|
1325
|
-
const value = await getConfigValue(repoRoot, userConfigDir, keyArg, dependencies);
|
|
1350
|
+
const value = await getConfigValue(repoRoot, userConfigDir, keyArg, dependencies, context.json);
|
|
1326
1351
|
if (context.json) {
|
|
1327
1352
|
context.logger.json({
|
|
1328
1353
|
status: 'ok',
|
|
@@ -1330,7 +1355,7 @@ async function runGet(keyArg, context, dependencies) {
|
|
|
1330
1355
|
});
|
|
1331
1356
|
}
|
|
1332
1357
|
else {
|
|
1333
|
-
context.logger.info(value.value ?? '');
|
|
1358
|
+
context.logger.info(formatResolvedValue(value.value) ?? '');
|
|
1334
1359
|
}
|
|
1335
1360
|
process.exitCode = 0;
|
|
1336
1361
|
}
|
|
@@ -19,7 +19,13 @@ export interface OatArchiveConfig {
|
|
|
19
19
|
awsRegion?: string;
|
|
20
20
|
}
|
|
21
21
|
export type WorkflowHillCheckpointDefault = 'every' | 'final';
|
|
22
|
-
export type
|
|
22
|
+
export type WorkflowPostImplementStep = 'summary' | 'document' | 'pr';
|
|
23
|
+
export type WorkflowPostImplementLegacySequence = 'wait' | 'summary' | 'pr' | 'docs-pr';
|
|
24
|
+
export interface WorkflowPostImplementStructuredSequence {
|
|
25
|
+
preApproval: WorkflowPostImplementStep[];
|
|
26
|
+
postApproval: WorkflowPostImplementStep[];
|
|
27
|
+
}
|
|
28
|
+
export type WorkflowPostImplementSequence = WorkflowPostImplementLegacySequence | WorkflowPostImplementStructuredSequence;
|
|
23
29
|
export type WorkflowReviewExecutionModel = 'subagent' | 'inline' | 'fresh-session';
|
|
24
30
|
export type WorkflowDesignMode = 'collaborative' | 'selective' | 'draft';
|
|
25
31
|
export type WorkflowCodexDispatchCeiling = 'low' | 'medium' | 'high' | 'xhigh' | 'max';
|
|
@@ -86,6 +92,8 @@ export declare const VALID_DISPATCH_CEILING_PRESETS: readonly WorkflowDispatchCe
|
|
|
86
92
|
export declare const VALID_DISPATCH_POLICY_MODES: readonly WorkflowDispatchPolicyMode[];
|
|
87
93
|
export declare const VALID_MANAGED_DISPATCH_POLICIES: readonly WorkflowManagedDispatchPolicy[];
|
|
88
94
|
export declare const BUILTIN_EXEC_TARGETS: Readonly<Record<string, ExecTarget>>;
|
|
95
|
+
export declare function normalizeWorkflowPostImplementSequence(value: unknown): WorkflowPostImplementStructuredSequence | undefined;
|
|
96
|
+
export declare function isWorkflowPostImplementStructuredSequence(value: unknown): value is WorkflowPostImplementStructuredSequence;
|
|
89
97
|
export type OatToolsConfig = Partial<Record<'core' | 'ideas' | 'docs' | 'workflows' | 'utility' | 'project-management' | 'research' | 'brainstorm', boolean>>;
|
|
90
98
|
export interface OatConfig {
|
|
91
99
|
version: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oat-config.d.ts","sourceRoot":"","sources":["../../src/config/oat-config.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,6BAA6B,EACnC,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,2BAA2B,EAC3B,8BAA8B,EAC9B,iCAAiC,EACjC,+BAA+B,EAC/B,iCAAiC,EACjC,2BAA2B,EAC3B,KAAK,6BAA6B,EAClC,KAAK,yBAAyB,EAC9B,KAAK,+BAA+B,EACpC,KAAK,6BAA6B,EAClC,KAAK,gCAAgC,EACrC,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,EAClC,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,GACjC,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,6BAA6B,GAAG,OAAO,GAAG,OAAO,CAAC;AAC9D,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"oat-config.d.ts","sourceRoot":"","sources":["../../src/config/oat-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,21 @@ import { normalizeDispatchMatrix, } from './dispatch-matrix.js';
|
|
|
7
7
|
import { parseJsonConfig } from './json.js';
|
|
8
8
|
export { VALID_DISPATCH_MATRIX_TIERS, isCodexMaterializedRouteTarget, isWorkflowDispatchCandidateLadder, isWorkflowDispatchFallbackRoute, toWorkflowDispatchCandidateLadder, validateDispatchRouteTarget, } from './dispatch-matrix.js';
|
|
9
9
|
const VALID_HILL_CHECKPOINT_DEFAULTS = ['every', 'final'];
|
|
10
|
-
const
|
|
10
|
+
const VALID_POST_IMPLEMENT_LEGACY_SEQUENCES = ['wait', 'summary', 'pr', 'docs-pr'];
|
|
11
|
+
const VALID_POST_IMPLEMENT_STEPS = [
|
|
12
|
+
'summary',
|
|
13
|
+
'document',
|
|
14
|
+
'pr',
|
|
15
|
+
];
|
|
16
|
+
const LEGACY_POST_IMPLEMENT_SEQUENCES = {
|
|
17
|
+
wait: { preApproval: [], postApproval: [] },
|
|
18
|
+
summary: { preApproval: ['summary'], postApproval: [] },
|
|
19
|
+
pr: { preApproval: ['summary', 'pr'], postApproval: [] },
|
|
20
|
+
'docs-pr': {
|
|
21
|
+
preApproval: ['summary', 'document', 'pr'],
|
|
22
|
+
postApproval: [],
|
|
23
|
+
},
|
|
24
|
+
};
|
|
11
25
|
const VALID_REVIEW_EXECUTION_MODELS = [
|
|
12
26
|
'subagent',
|
|
13
27
|
'inline',
|
|
@@ -71,6 +85,41 @@ export const BUILTIN_EXEC_TARGETS = {
|
|
|
71
85
|
priority: 70,
|
|
72
86
|
},
|
|
73
87
|
};
|
|
88
|
+
export function normalizeWorkflowPostImplementSequence(value) {
|
|
89
|
+
if (typeof value === 'string' &&
|
|
90
|
+
VALID_POST_IMPLEMENT_LEGACY_SEQUENCES.includes(value)) {
|
|
91
|
+
const legacy = LEGACY_POST_IMPLEMENT_SEQUENCES[value];
|
|
92
|
+
return {
|
|
93
|
+
preApproval: [...legacy.preApproval],
|
|
94
|
+
postApproval: [...legacy.postApproval],
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
if (!isRecord(value)) {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
const keys = Object.keys(value);
|
|
101
|
+
if (keys.length !== 2 ||
|
|
102
|
+
!keys.includes('preApproval') ||
|
|
103
|
+
!keys.includes('postApproval') ||
|
|
104
|
+
!Array.isArray(value.preApproval) ||
|
|
105
|
+
!Array.isArray(value.postApproval)) {
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
const steps = [...value.preApproval, ...value.postApproval];
|
|
109
|
+
if (!steps.every((step) => typeof step === 'string' &&
|
|
110
|
+
VALID_POST_IMPLEMENT_STEPS.includes(step)) ||
|
|
111
|
+
new Set(steps).size !== steps.length) {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
preApproval: [...value.preApproval],
|
|
116
|
+
postApproval: [...value.postApproval],
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
export function isWorkflowPostImplementStructuredSequence(value) {
|
|
120
|
+
return (isRecord(value) &&
|
|
121
|
+
normalizeWorkflowPostImplementSequence(value) !== undefined);
|
|
122
|
+
}
|
|
74
123
|
function normalizeMaxAttempts(value) {
|
|
75
124
|
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
76
125
|
return 2;
|
|
@@ -199,10 +248,12 @@ function normalizeWorkflowConfig(parsed) {
|
|
|
199
248
|
if (typeof parsed.createPrOnComplete === 'boolean') {
|
|
200
249
|
next.createPrOnComplete = parsed.createPrOnComplete;
|
|
201
250
|
}
|
|
202
|
-
|
|
203
|
-
|
|
251
|
+
const postImplementSequence = normalizeWorkflowPostImplementSequence(parsed.postImplementSequence);
|
|
252
|
+
if (postImplementSequence !== undefined) {
|
|
204
253
|
next.postImplementSequence =
|
|
205
|
-
parsed.postImplementSequence
|
|
254
|
+
typeof parsed.postImplementSequence === 'string'
|
|
255
|
+
? parsed.postImplementSequence
|
|
256
|
+
: postImplementSequence;
|
|
206
257
|
}
|
|
207
258
|
if (typeof parsed.reviewExecutionModel === 'string' &&
|
|
208
259
|
VALID_REVIEW_EXECUTION_MODELS.includes(parsed.reviewExecutionModel)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,OAAO,GACP,MAAM,GACN,KAAK,GACL,SAAS,CAAC;AAEd,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,cAAc,CAAC;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,kCAAkC;IACjD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CAChE;AAmFD,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,SAAS,GAAE,OAAO,CAAC,kCAAkC,CAAM,GAC1D,OAAO,CAAC,cAAc,CAAC,CAgFzB;AAED,wBAAgB,WAAW,CACzB,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE,MAAM,GAChB,UAAU,GAAG,IAAI,CAcnB;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,cAAc,GACxB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAY5B;AAED,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEvE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,cAAc,GACxB,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAoDxC"}
|
package/dist/config/resolve.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isWorkflowDispatchCandidateLadder } from './dispatch-matrix.js';
|
|
2
|
-
import { BUILTIN_EXEC_TARGETS, readOatConfig, readOatLocalConfig, readUserConfig, } from './oat-config.js';
|
|
2
|
+
import { BUILTIN_EXEC_TARGETS, isWorkflowPostImplementStructuredSequence, readOatConfig, readOatLocalConfig, readUserConfig, } from './oat-config.js';
|
|
3
3
|
const DEFAULT_DEPENDENCIES = {
|
|
4
4
|
readOatConfig,
|
|
5
5
|
readOatLocalConfig,
|
|
@@ -328,8 +328,7 @@ function flattenConfig(value, prefix = '') {
|
|
|
328
328
|
continue;
|
|
329
329
|
}
|
|
330
330
|
const nextKey = prefix ? `${prefix}.${key}` : key;
|
|
331
|
-
if (isRecord(nestedValue) &&
|
|
332
|
-
!isWorkflowDispatchCandidateLadder(nestedValue)) {
|
|
331
|
+
if (isRecord(nestedValue) && !isAtomicConfigLeaf(nextKey, nestedValue)) {
|
|
333
332
|
Object.assign(flattened, flattenConfig(nestedValue, nextKey));
|
|
334
333
|
continue;
|
|
335
334
|
}
|
|
@@ -337,6 +336,11 @@ function flattenConfig(value, prefix = '') {
|
|
|
337
336
|
}
|
|
338
337
|
return flattened;
|
|
339
338
|
}
|
|
339
|
+
function isAtomicConfigLeaf(key, value) {
|
|
340
|
+
return (isWorkflowDispatchCandidateLadder(value) ||
|
|
341
|
+
(key === 'workflow.postImplementSequence' &&
|
|
342
|
+
isWorkflowPostImplementStructuredSequence(value)));
|
|
343
|
+
}
|
|
340
344
|
function resolveEnvOverride(key, env) {
|
|
341
345
|
const envKey = ENV_OVERRIDE_MAP[key];
|
|
342
346
|
if (!envKey) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@open-agent-toolkit/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.52",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Open Agent Toolkit CLI",
|
|
6
6
|
"homepage": "https://github.com/voxmedia/open-agent-toolkit/tree/main/packages/cli",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"ora": "^9.0.0",
|
|
35
35
|
"yaml": "2.8.2",
|
|
36
36
|
"zod": "^3.25.76",
|
|
37
|
-
"@open-agent-toolkit/control-plane": "0.1.
|
|
37
|
+
"@open-agent-toolkit/control-plane": "0.1.52"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/node": "^22.10.0",
|