@open-agent-toolkit/cli 0.1.9 → 0.1.11
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/config-and-local-state.md +1 -1
- package/assets/docs/reference/oat-directory-structure.md +1 -0
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-pjm-review-backlog/SKILL.md +52 -8
- package/assets/skills/oat-pjm-review-backlog/references/backlog-review-template.md +4 -2
- package/assets/skills/oat-pjm-review-backlog/references/priority-alignment-template.md +86 -0
- package/assets/skills/oat-project-complete/SKILL.md +2 -2
- package/assets/skills/oat-project-implement/SKILL.md +10 -10
- package/assets/skills/oat-project-import-plan/SKILL.md +2 -2
- package/assets/skills/oat-project-new/SKILL.md +3 -3
- package/assets/skills/oat-project-quick-start/SKILL.md +6 -7
- package/assets/skills/oat-project-review-provide/SKILL.md +2 -2
- package/assets/skills/oat-project-review-receive/SKILL.md +2 -2
- package/dist/commands/init/gitignore.d.ts +9 -0
- package/dist/commands/init/gitignore.d.ts.map +1 -1
- package/dist/commands/init/gitignore.js +49 -4
- package/dist/commands/tools/update/index.d.ts.map +1 -1
- package/dist/commands/tools/update/index.js +3 -0
- package/package.json +2 -2
|
@@ -101,7 +101,7 @@ For the full state model, repair semantics, and examples, see [Instruction Sync]
|
|
|
101
101
|
|
|
102
102
|
## Repo state helpers
|
|
103
103
|
|
|
104
|
-
- `oat state refresh` - rebuild the `.oat/state.md` dashboard for the repo
|
|
104
|
+
- `oat state refresh` - rebuild the generated, gitignored `.oat/state.md` dashboard for the repo
|
|
105
105
|
- `oat index init` - generate a lightweight `project-index.md` for orientation
|
|
106
106
|
|
|
107
107
|
## Internal helpers and diagnostics
|
|
@@ -45,6 +45,7 @@ Project scope is used for project workflows and repo-local sync state. User scop
|
|
|
45
45
|
| ------------------------ | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------- |
|
|
46
46
|
| `.oat/config.json` | Shared repo runtime config for non-sync settings | Includes `worktrees.root`, `projects.root`, `git.defaultBranch`, `archive.*`, and `documentation.*` |
|
|
47
47
|
| `.oat/config.local.json` | Local per-developer runtime state | Gitignored; includes `activeProject`, `lastPausedProject`, `activeIdea` |
|
|
48
|
+
| `.oat/state.md` | Generated repo state dashboard | Gitignored; rebuilt with `oat state refresh` from config, project artifacts, and knowledge metadata |
|
|
48
49
|
| `.oat/projects/` | OAT project artifacts | `shared`, `local`, `archived` scopes |
|
|
49
50
|
| `.oat/ideas/` | Project-level ideas store | Often gitignored |
|
|
50
51
|
| `.oat/sync/` | Interop sync state/config | See details below |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-pjm-review-backlog
|
|
3
|
-
version: 1.
|
|
3
|
+
version: 1.2.0
|
|
4
4
|
description: Use when prioritizing the file-backed repo backlog or evaluating roadmap alignment. Produces value-effort ratings, dependency mapping, and execution recommendations.
|
|
5
5
|
argument-hint: '[backlog-root] [--roadmap=<path>] [--output=<path>]'
|
|
6
6
|
disable-model-invocation: true
|
|
@@ -48,11 +48,12 @@ When executing this skill, provide lightweight progress feedback so the user can
|
|
|
48
48
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
49
49
|
|
|
50
50
|
- Before multi-step work, print short step indicators, e.g.:
|
|
51
|
-
- `[1/
|
|
52
|
-
- `[2/
|
|
53
|
-
- `[3/
|
|
54
|
-
- `[4/
|
|
55
|
-
- `[5/
|
|
51
|
+
- `[1/6] Resolving backlog inputs…`
|
|
52
|
+
- `[2/6] Cataloging backlog items…`
|
|
53
|
+
- `[3/6] Reading codebase context…`
|
|
54
|
+
- `[4/6] Writing review document…`
|
|
55
|
+
- `[5/6] Summarizing recommendations…`
|
|
56
|
+
- `[6/6] (Optional) Priority-alignment walkthrough…` — only print after the operator accepts the offer in Step 9
|
|
56
57
|
|
|
57
58
|
## Arguments
|
|
58
59
|
|
|
@@ -60,7 +61,8 @@ Parse from `$ARGUMENTS`:
|
|
|
60
61
|
|
|
61
62
|
- **backlog-root**: (optional) Path to the backlog root directory. Defaults to `.oat/repo/reference/backlog/`.
|
|
62
63
|
- **--roadmap=\<path\>**: (optional) Path to a roadmap document for alignment analysis.
|
|
63
|
-
- **--output=\<path\>**: (optional) Where to write the review. Defaults to `.oat/repo/reviews/backlog-and-roadmap-review.md`.
|
|
64
|
+
- **--output=\<path\>**: (optional) Where to write the living review. Defaults to `.oat/repo/reference/backlog/reviews/backlog-and-roadmap-review.md`.
|
|
65
|
+
- **--archive-dated**: (optional) Also write a dated snapshot alongside the living review at `.oat/repo/reference/backlog/reviews/backlog-and-roadmap-review-YYYY-MM-DD.md`. Default: off.
|
|
64
66
|
|
|
65
67
|
## Process
|
|
66
68
|
|
|
@@ -85,7 +87,12 @@ Parse from `$ARGUMENTS`:
|
|
|
85
87
|
**Output path:**
|
|
86
88
|
|
|
87
89
|
1. If `--output` is provided, use it directly.
|
|
88
|
-
2. Otherwise, default to `.oat/repo/reviews/backlog-and-roadmap-review.md
|
|
90
|
+
2. Otherwise, default to `.oat/repo/reference/backlog/reviews/backlog-and-roadmap-review.md` (the living, single-file review co-located with the backlog).
|
|
91
|
+
3. If the `backlog/reviews/` directory does not exist yet, create it before writing. Do not fall back to `.oat/repo/reviews/` — backlog review artifacts now live under the file-backed backlog, not the repo-wide reviews directory.
|
|
92
|
+
|
|
93
|
+
**Dated snapshot (optional):**
|
|
94
|
+
|
|
95
|
+
If `--archive-dated` is passed, also write a copy to `.oat/repo/reference/backlog/reviews/backlog-and-roadmap-review-YYYY-MM-DD.md` in the **same directory** as the living review. Do not write dated snapshots to `.oat/repo/reviews/`.
|
|
89
96
|
|
|
90
97
|
### Step 2: Read and Catalog Backlog Items
|
|
91
98
|
|
|
@@ -165,6 +172,8 @@ If a roadmap was provided:
|
|
|
165
172
|
|
|
166
173
|
Use the template at `.agents/skills/oat-pjm-review-backlog/references/backlog-review-template.md`.
|
|
167
174
|
|
|
175
|
+
Write the **living** review to the resolved output path (default `.oat/repo/reference/backlog/reviews/backlog-and-roadmap-review.md`). If `--archive-dated` was passed, also write a dated snapshot alongside it (`backlog-and-roadmap-review-YYYY-MM-DD.md` in the same directory). Never split living and dated outputs across different directories — they must live together under `backlog/reviews/`.
|
|
176
|
+
|
|
168
177
|
Ensure:
|
|
169
178
|
|
|
170
179
|
- Every active backlog item file appears in the item catalog
|
|
@@ -183,6 +192,39 @@ After writing the review, provide:
|
|
|
183
192
|
|
|
184
193
|
When listing specific items in this summary, follow the **Reference Format Convention** above — every backlog item must appear as `` `bl-XXXX` (human-readable title) `` (or the bold-with-em-dash variant in tables). Do not emit bare IDs.
|
|
185
194
|
|
|
195
|
+
### Step 9: Offer Priority Alignment Walkthrough (Optional, Collaborative)
|
|
196
|
+
|
|
197
|
+
The full review answers "what's in the backlog and how is each item rated." Operators still have to mentally extract "what should I actually do next, and in what order, with what parallelism." `priority-alignment.md` is the one-page execution companion that makes that extraction explicit.
|
|
198
|
+
|
|
199
|
+
This step is **optional** and **collaborative** — it requires operator context (recent ships, capacity, calendar, ongoing initiatives) that the skill alone does not have. Do not produce or refresh `priority-alignment.md` without operator participation.
|
|
200
|
+
|
|
201
|
+
**Decision: should we run the walkthrough?**
|
|
202
|
+
|
|
203
|
+
After the summary, ask the operator:
|
|
204
|
+
|
|
205
|
+
> Want to walk through the review together and produce a one-page execution view at `backlog/reviews/priority-alignment.md`? It captures phased order, parallelism, and a recommended kickoff stack — a faster reference than the full review.
|
|
206
|
+
|
|
207
|
+
If `.oat/repo/reference/backlog/reviews/priority-alignment.md` already exists, frame it as an **update** to the existing document rather than a fresh create. Read the existing file first so the walkthrough builds on it.
|
|
208
|
+
|
|
209
|
+
If the operator declines, stop after the summary. Do not silently write or modify `priority-alignment.md`.
|
|
210
|
+
|
|
211
|
+
**If the operator accepts, run the walkthrough:**
|
|
212
|
+
|
|
213
|
+
1. **Propose a phase breakdown** based on the review's quadrants and dependency graph:
|
|
214
|
+
- "Finishing / in flight" — items already started or in code review
|
|
215
|
+
- One or more execution phases that group items by initiative, parallel lane, or sequencing constraint
|
|
216
|
+
- Surface the natural parallelism boundaries from Step 5 as parallel tracks within a phase
|
|
217
|
+
2. **Solicit operator context** that the review alone cannot capture:
|
|
218
|
+
- What just shipped or changed since the last alignment? (Goes in the **Status** line and **Changelog**.)
|
|
219
|
+
- What's the operator's capacity / appetite for parallel work this cycle?
|
|
220
|
+
- Are there calendar constraints (freezes, releases, time off) that affect ordering?
|
|
221
|
+
- Does the operator want an optional axis like "planning investment" or "design effort" as a column? (Some repos find this useful; many don't. Default: omit unless operator opts in.)
|
|
222
|
+
3. **Iterate on phase names, ordering, and the kickoff stack** until the operator is satisfied. Phase names should reflect the repo's actual initiatives, not generic placeholders.
|
|
223
|
+
4. **Write or update** `.oat/repo/reference/backlog/reviews/priority-alignment.md` using the template at `.agents/skills/oat-pjm-review-backlog/references/priority-alignment-template.md`. Add a new Changelog entry summarizing what shifted in this pass.
|
|
224
|
+
5. **Confirm the result** with the operator: file path, top-of-doc Status line, and the kickoff stack.
|
|
225
|
+
|
|
226
|
+
When referencing backlog items inside the priority-alignment doc, the **Reference Format Convention** still applies — link to the item file and pair the ID with a human-readable title.
|
|
227
|
+
|
|
186
228
|
## Success Criteria
|
|
187
229
|
|
|
188
230
|
- Every active backlog item file has a value-effort rating with rationale
|
|
@@ -190,4 +232,6 @@ When listing specific items in this summary, follow the **Reference Format Conve
|
|
|
190
232
|
- Parallel lanes and execution waves are actionable
|
|
191
233
|
- Roadmap alignment gaps are surfaced when roadmap input is present
|
|
192
234
|
- Output document follows the review template structure
|
|
235
|
+
- Living review is written to `.oat/repo/reference/backlog/reviews/backlog-and-roadmap-review.md` (unless `--output` is explicitly overridden); dated snapshots, when emitted, live in the same `backlog/reviews/` directory and never under `.oat/repo/reviews/`
|
|
236
|
+
- The operator is offered (but never forced into) a collaborative walkthrough that produces or updates `backlog/reviews/priority-alignment.md`; if the operator accepts, the file is written using the priority-alignment template and includes a Changelog entry for this pass; if the operator declines, no file is created or modified
|
|
193
237
|
- Every user-facing reference to a backlog item pairs the ID with a human-readable title (per the Reference Format Convention)
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
# Backlog & Roadmap Review
|
|
2
2
|
|
|
3
3
|
**Date:** {YYYY-MM-DD}
|
|
4
|
-
**Scope:** {Description of what was reviewed, e.g., "All items
|
|
5
|
-
**Roadmap:** {Path to roadmap if included, or "N/A"}
|
|
4
|
+
**Scope:** {Description of what was reviewed, e.g., "All active items under `.oat/repo/reference/backlog/items/`"}
|
|
5
|
+
**Roadmap:** {Path to roadmap if included, e.g. `.oat/repo/reference/roadmap.md`, or "N/A"}
|
|
6
6
|
**Purpose:** Prioritize by value/effort, surface dependencies, and recommend an execution sequence
|
|
7
7
|
|
|
8
|
+
> If a one-page execution companion exists in this directory, see [`priority-alignment.md`](./priority-alignment.md) — produced via the optional walkthrough at the end of `oat-pjm-review-backlog`. It is the short, ordered "what to do next" view of this full review.
|
|
9
|
+
|
|
8
10
|
---
|
|
9
11
|
|
|
10
12
|
## 1. Executive Summary
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Backlog Priority Alignment
|
|
2
|
+
|
|
3
|
+
**Date:** {YYYY-MM-DD}
|
|
4
|
+
**Status:** {Active|Stale} — {one-line snapshot of what just shipped or shifted since the previous alignment, e.g. "Post-PR #XX ship of feature Y; new high-priority item Z promoted"}.
|
|
5
|
+
|
|
6
|
+
One-page execution guide: recommended order, scope, parallelism, and (optionally) planning investment. For the full value/effort catalog, dependency graph, and quadrant tables, see [backlog-and-roadmap-review.md](./backlog-and-roadmap-review.md).
|
|
7
|
+
|
|
8
|
+
> This document is produced or refreshed via the optional walkthrough at the end of `oat-pjm-review-backlog`. It is **not** auto-generated — phase shape, parallelism, and the kickoff stack reflect operator judgment captured during the walkthrough.
|
|
9
|
+
|
|
10
|
+
## Related sources
|
|
11
|
+
|
|
12
|
+
| Document | Role |
|
|
13
|
+
| ---------------------------------------------------------------- | --------------------------------------------------------------------- |
|
|
14
|
+
| [roadmap.md](../../roadmap.md) | Authoritative Now / Next / Later execution order |
|
|
15
|
+
| [current-state.md](../../current-state.md) | Shipped capabilities and selected active backlog (if maintained) |
|
|
16
|
+
| [backlog/index.md](../index.md) | Curated overview + generated item table |
|
|
17
|
+
| [backlog/items/](../items/) | Executable backlog records (one file per item) |
|
|
18
|
+
| [backlog-and-roadmap-review.md](./backlog-and-roadmap-review.md) | Full `oat-pjm-review-backlog` artifact (catalog, dependencies, waves) |
|
|
19
|
+
| Dated snapshots | `backlog-and-roadmap-review-YYYY-MM-DD.md` in this directory |
|
|
20
|
+
|
|
21
|
+
<!--
|
|
22
|
+
Optional axis: some teams find a "planning investment" or "design effort" column
|
|
23
|
+
useful — it separates discovery/design time from total build time. If you use it,
|
|
24
|
+
define the term inline here so readers don't have to guess. Example:
|
|
25
|
+
|
|
26
|
+
> **Planning investment** = discovery/design likely needed *before* implementation
|
|
27
|
+
> pays off — not total build time.
|
|
28
|
+
|
|
29
|
+
If the team doesn't find it useful, omit the column entirely.
|
|
30
|
+
-->
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Finishing / in flight
|
|
35
|
+
|
|
36
|
+
Items already started, in code review, or otherwise mid-flight. Close these out before — or alongside — the next phase.
|
|
37
|
+
|
|
38
|
+
| Item | Scope | Notes |
|
|
39
|
+
| ------------------------------------------------ | ---------- | -------------------------------------------- |
|
|
40
|
+
| [Item title](../items/{filename}.md) (`bl-XXXX`) | {S/M/L/XL} | {Status, blocker if any, next concrete step} |
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
<!-- Repeat one section per execution phase. Use repo-specific phase names —
|
|
45
|
+
organize by initiative, parallel lane, or sequencing constraint, not by
|
|
46
|
+
generic "Phase 1 / Phase 2". The point of named phases is that operators
|
|
47
|
+
can talk about them ("the synthesis phase", "the docs IA push"). -->
|
|
48
|
+
|
|
49
|
+
## Phase {N} — {Repo-specific name}
|
|
50
|
+
|
|
51
|
+
{One short paragraph: what this phase represents, how many tracks can run in parallel inside it, any kickoff constraints (e.g. "weekly pair is one combined kickoff").}
|
|
52
|
+
|
|
53
|
+
| Item | Scope | {Optional column} | Parallel with | Notes |
|
|
54
|
+
| ------------------------------------------------ | ---------- | ----------------- | -------------------- | --------------------------------------- |
|
|
55
|
+
| [Item title](../items/{filename}.md) (`bl-XXXX`) | {S/M/L/XL} | {Low/Med/High} | `bl-YYYY`, `bl-ZZZZ` | {One-line context — gotchas, decisions} |
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Parallelism cheat sheet
|
|
60
|
+
|
|
61
|
+
Quick lookup for "can I start X while Y is in flight?"
|
|
62
|
+
|
|
63
|
+
| Can run together | Keep sequential |
|
|
64
|
+
| --------------------- | -------------------------- |
|
|
65
|
+
| `bl-XXXX` ∥ `bl-YYYY` | `bl-AAAA` before `bl-BBBB` |
|
|
66
|
+
| {…} | {…} |
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Suggested next kickoff stack
|
|
71
|
+
|
|
72
|
+
Three concrete actions for the next development cycle. Not a ranked list of everything — just what to do _first_.
|
|
73
|
+
|
|
74
|
+
1. **{Close|Kick off|Defer}** [`bl-XXXX`](../items/{filename}.md) — {one-line reason: why now, what it unblocks}
|
|
75
|
+
2. **{Close|Kick off|Defer}** [`bl-YYYY`](../items/{filename}.md) — {one-line reason}
|
|
76
|
+
3. **{Close|Kick off|Defer}** [`bl-ZZZZ`](../items/{filename}.md) — {one-line reason}
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Changelog
|
|
81
|
+
|
|
82
|
+
Append a new row each time this file is refreshed via the `oat-pjm-review-backlog` walkthrough. Keep entries short — what shifted and why.
|
|
83
|
+
|
|
84
|
+
| Date | Update |
|
|
85
|
+
| ------------ | ---------------------------------------------------------------------------------- |
|
|
86
|
+
| {YYYY-MM-DD} | {What changed this pass: promotions/demotions, new high-pri items, phase reshapes} |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-complete
|
|
3
|
-
version: 1.4.
|
|
3
|
+
version: 1.4.8
|
|
4
4
|
description: Use when all implementation work is finished and the project is ready to close. Marks the OAT project lifecycle as complete.
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
user-invocable: true
|
|
@@ -519,7 +519,7 @@ Expected changes may include:
|
|
|
519
519
|
- `{PROJECT_PATH}/implementation.md` (if touched earlier in the lifecycle closeout)
|
|
520
520
|
- `{PROJECT_PATH}/plan.md` (if review receive just ran)
|
|
521
521
|
- `{PROJECT_PATH}/pr/project-pr-*.md` (PR description artifact)
|
|
522
|
-
- `.oat/state.md`
|
|
522
|
+
- `.oat/state.md` is regenerated locally in Step 9 but should not be staged; it is generated dashboard state and normally gitignored.
|
|
523
523
|
- `.oat/config.local.json` (if `activeProject` cleared)
|
|
524
524
|
- Shared-project deletions under `{PROJECTS_ROOT}/{PROJECT_NAME}` (if archived)
|
|
525
525
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-implement
|
|
3
|
-
version: 2.0.
|
|
3
|
+
version: 2.0.19
|
|
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
|
argument-hint: '[--retry-limit <N>] [--dry-run]'
|
|
6
6
|
disable-model-invocation: true
|
|
@@ -23,10 +23,10 @@ Execute the implementation plan task-by-task with full state tracking.
|
|
|
23
23
|
**Purpose:** Execute plan tasks with TDD discipline, track progress, handle blockers.
|
|
24
24
|
|
|
25
25
|
**CRITICAL — Bookkeeping commits are mandatory, not optional.**
|
|
26
|
-
After every code commit and after every phase/review-fix completion, you MUST commit the OAT tracking files (project: `implementation.md`, `state.md`, `plan.md
|
|
26
|
+
After every code commit and after every phase/review-fix completion, you MUST commit the OAT tracking files (project: `implementation.md`, `state.md`, `plan.md`) as a separate bookkeeping commit. Refresh the repo dashboard with `oat state refresh` before staging when available, but do not stage `.oat/state.md`; it is generated dashboard state and is normally gitignored. Do not defer, batch, or skip these commits under the reasoning that they "aren't related to the implementation." Skipping a bookkeeping commit is the primary cause of cross-session state drift and will cause the next implementation run to fail bookkeeping cross-checks. If bookkeeping commits feel frequent, that is the intended design — they are cheap and they prevent drift.
|
|
27
27
|
|
|
28
28
|
**CRITICAL — Review boundaries require a committed artifact baseline.**
|
|
29
|
-
Do not enter checkpoint review, final review, revise, or PR-final handoff with dirty core project artifacts (`discovery.md`, `spec.md`, `design.md`, `plan.md`, `implementation.md`, `state.md
|
|
29
|
+
Do not enter checkpoint review, final review, revise, or PR-final handoff with dirty core project artifacts (`discovery.md`, `spec.md`, `design.md`, `plan.md`, `implementation.md`, `state.md`). If one of those boundaries is next and artifact bookkeeping is still uncommitted, stop and create the bookkeeping commit first.
|
|
30
30
|
|
|
31
31
|
**CRITICAL — Intentional artifact divergence must be recorded.**
|
|
32
32
|
If implementation intentionally diverges from `spec.md`, `design.md`, or `plan.md`, record the delta in `implementation.md` before the next phase/review boundary. Include what diverged, why it diverged, whether the implementation or original artifact is now source of truth, and any follow-up artifact updates or explicit deferral. Do not leave accepted design drift only in chat, a review artifact, or code comments; final summary generation depends on `implementation.md` preserving the delta.
|
|
@@ -909,7 +909,7 @@ For each phase that completed:
|
|
|
909
909
|
|
|
910
910
|
```bash
|
|
911
911
|
oat state refresh
|
|
912
|
-
git add {PROJECT_PATH}/implementation.md {PROJECT_PATH}/state.md {PROJECT_PATH}/plan.md
|
|
912
|
+
git add {PROJECT_PATH}/implementation.md {PROJECT_PATH}/state.md {PROJECT_PATH}/plan.md
|
|
913
913
|
git commit -m "chore(oat): bookkeeping after {pNN} {pass|fail}"
|
|
914
914
|
```
|
|
915
915
|
|
|
@@ -990,15 +990,15 @@ When pausing:
|
|
|
990
990
|
|
|
991
991
|
**DO NOT SKIP.** This commit prevents state drift across sessions.
|
|
992
992
|
|
|
993
|
-
After phase summary and task pointer advancement, refresh the repo dashboard and commit all modified
|
|
993
|
+
After phase summary and task pointer advancement, refresh the repo dashboard when available and commit all modified project tracking files:
|
|
994
994
|
|
|
995
995
|
```bash
|
|
996
996
|
oat state refresh
|
|
997
|
-
git add "$PROJECT_PATH/implementation.md" "$PROJECT_PATH/state.md" "$PROJECT_PATH/plan.md"
|
|
997
|
+
git add "$PROJECT_PATH/implementation.md" "$PROJECT_PATH/state.md" "$PROJECT_PATH/plan.md"
|
|
998
998
|
git diff --cached --quiet || git commit -m "chore(oat): update tracking artifacts for {phase} completion"
|
|
999
999
|
```
|
|
1000
1000
|
|
|
1001
|
-
Do not use `git add -A` or glob patterns. Only commit the
|
|
1001
|
+
Do not use `git add -A` or glob patterns. Only commit the three project artifacts listed above; `.oat/state.md` is a generated, gitignored dashboard.
|
|
1002
1002
|
|
|
1003
1003
|
**Note on HiLL types:**
|
|
1004
1004
|
|
|
@@ -1124,15 +1124,15 @@ Implementation - Tasks complete; awaiting final review.
|
|
|
1124
1124
|
|
|
1125
1125
|
**DO NOT SKIP.** This commit prevents state drift across sessions.
|
|
1126
1126
|
|
|
1127
|
-
After updating state.md to reflect implementation completion, refresh the repo dashboard and commit all modified
|
|
1127
|
+
After updating state.md to reflect implementation completion, refresh the repo dashboard when available and commit all modified project tracking files:
|
|
1128
1128
|
|
|
1129
1129
|
```bash
|
|
1130
1130
|
oat state refresh
|
|
1131
|
-
git add "$PROJECT_PATH/implementation.md" "$PROJECT_PATH/state.md" "$PROJECT_PATH/plan.md"
|
|
1131
|
+
git add "$PROJECT_PATH/implementation.md" "$PROJECT_PATH/state.md" "$PROJECT_PATH/plan.md"
|
|
1132
1132
|
git diff --cached --quiet || git commit -m "chore(oat): update tracking artifacts for implementation complete"
|
|
1133
1133
|
```
|
|
1134
1134
|
|
|
1135
|
-
Do not use `git add -A` or glob patterns. Only commit the
|
|
1135
|
+
Do not use `git add -A` or glob patterns. Only commit the three project artifacts listed above; `.oat/state.md` is a generated, gitignored dashboard.
|
|
1136
1136
|
|
|
1137
1137
|
### Step 13: Final Verification
|
|
1138
1138
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-import-plan
|
|
3
|
-
version: 1.3.
|
|
3
|
+
version: 1.3.2
|
|
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
|
disable-model-invocation: true
|
|
@@ -250,4 +250,4 @@ Report:
|
|
|
250
250
|
- ✅ `oat_plan_hill_phases` left unset in frontmatter (deferred to `oat-project-implement` Step 2.5).
|
|
251
251
|
- ✅ `## Planning Checklist` items left unchecked (HiLL configuration deferred to implementation).
|
|
252
252
|
- ✅ `activeProject` in `.oat/config.local.json` points to the imported project.
|
|
253
|
-
- ✅ `.oat/state.md` has been refreshed after pointer update.
|
|
253
|
+
- ✅ `.oat/state.md` has been refreshed locally after pointer update; it is not staged or committed.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-new
|
|
3
|
-
version: 1.3.
|
|
3
|
+
version: 1.3.1
|
|
4
4
|
description: Use when starting a spec-driven OAT project from scratch. Scaffolds a new project under PROJECTS_ROOT and sets it active.
|
|
5
5
|
argument-hint: '<project-name> [--force]'
|
|
6
6
|
disable-model-invocation: true
|
|
@@ -77,7 +77,7 @@ Confirm to the user:
|
|
|
77
77
|
|
|
78
78
|
- Project path created: `{PROJECTS_ROOT}/{project-name}`
|
|
79
79
|
- Active project set in local config: `.oat/config.local.json` (`activeProject`)
|
|
80
|
-
- Repo State Dashboard refreshed: `.oat/state.md` (if enabled)
|
|
80
|
+
- Repo State Dashboard refreshed locally: `.oat/state.md` (if enabled; generated and normally gitignored)
|
|
81
81
|
|
|
82
82
|
Then explicitly instruct the user to run discovery next:
|
|
83
83
|
|
|
@@ -88,4 +88,4 @@ Then explicitly instruct the user to run discovery next:
|
|
|
88
88
|
- ✅ `{PROJECTS_ROOT}/{project-name}/` exists
|
|
89
89
|
- ✅ Standard artifacts exist in the project dir (copied from `.oat/templates/*.md`)
|
|
90
90
|
- ✅ `activeProject` in `.oat/config.local.json` points at the project path
|
|
91
|
-
- ✅ `.oat/state.md` is refreshed
|
|
91
|
+
- ✅ `.oat/state.md` is refreshed locally unless disabled; it is not staged or committed.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-quick-start
|
|
3
|
-
version: 2.1.
|
|
3
|
+
version: 2.1.3
|
|
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
|
disable-model-invocation: true
|
|
@@ -70,7 +70,7 @@ When executing this skill, provide lightweight progress feedback so the user can
|
|
|
70
70
|
|
|
71
71
|
- After any write to `discovery.md`, `design.md`, `plan.md`, `implementation.md`, or project `state.md`, ensure the artifact is saved immediately and remains tracked in git.
|
|
72
72
|
- If the skill is about to pause for user input or stop after mutating artifacts, commit the changed artifacts before waiting. Do not leave discovery/design updates only in the working tree.
|
|
73
|
-
- Quick-start handoff is not complete until the changed project artifacts
|
|
73
|
+
- Quick-start handoff is not complete until the changed project artifacts have been committed. Refresh `.oat/state.md` when available, but do not stage it; the repo dashboard is generated and normally gitignored.
|
|
74
74
|
- This applies to downstream lifecycle boundaries too: implementation, review, revise, and PR skills must inherit a committed artifact baseline, not an untracked project tree.
|
|
75
75
|
|
|
76
76
|
## Process
|
|
@@ -226,7 +226,7 @@ oat project complete-discovery "$PROJECT_PATH" --ready-for oat-project-design
|
|
|
226
226
|
- Commit the promoted discovery/state artifacts before stopping:
|
|
227
227
|
|
|
228
228
|
```bash
|
|
229
|
-
git add "$PROJECT_PATH/discovery.md" "$PROJECT_PATH/state.md"
|
|
229
|
+
git add "$PROJECT_PATH/discovery.md" "$PROJECT_PATH/state.md"
|
|
230
230
|
git diff --cached --quiet || git commit -m "chore(oat): promote quick-start discovery for {project-name}"
|
|
231
231
|
```
|
|
232
232
|
|
|
@@ -552,8 +552,7 @@ for path in \
|
|
|
552
552
|
"$PROJECT_PATH/design.md" \
|
|
553
553
|
"$PROJECT_PATH/plan.md" \
|
|
554
554
|
"$PROJECT_PATH/implementation.md" \
|
|
555
|
-
"$PROJECT_PATH/state.md"
|
|
556
|
-
".oat/state.md"; do
|
|
555
|
+
"$PROJECT_PATH/state.md"; do
|
|
557
556
|
[ -e "$path" ] && git add "$path"
|
|
558
557
|
done
|
|
559
558
|
git diff --cached --quiet || git commit -m "chore(oat): update quick-start artifacts for {project-name}"
|
|
@@ -569,7 +568,7 @@ Report:
|
|
|
569
568
|
- execution shape summary (sequential or declared parallel groups)
|
|
570
569
|
- next options:
|
|
571
570
|
- `oat-project-implement`
|
|
572
|
-
- dashboard location: `.oat/state.md` (confirm it was regenerated)
|
|
571
|
+
- dashboard location: `.oat/state.md` (confirm it was regenerated locally)
|
|
573
572
|
|
|
574
573
|
## Success Criteria
|
|
575
574
|
|
|
@@ -578,4 +577,4 @@ Report:
|
|
|
578
577
|
- ✅ `discovery.md` contains synthesized or backfilled quick discovery decisions from the session context.
|
|
579
578
|
- ✅ `plan.md` is complete and executable (`oat_ready_for: oat-project-implement`).
|
|
580
579
|
- ✅ `implementation.md` is initialized for resumable execution.
|
|
581
|
-
- ✅ Changed quick-start artifacts
|
|
580
|
+
- ✅ Changed quick-start artifacts are committed before handoff or pause; `.oat/state.md` is refreshed locally when available.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-review-provide
|
|
3
|
-
version: 1.3.
|
|
3
|
+
version: 1.3.5
|
|
4
4
|
description: Use when completed work in an active OAT project needs a quality gate before merge. Performs a lifecycle-scoped review after a task, phase, or full implementation, unlike oat-review-provide.
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
user-invocable: true
|
|
@@ -234,7 +234,7 @@ Before gathering review context, inspect the core project artifacts:
|
|
|
234
234
|
- `"$PROJECT_PATH/plan.md"`
|
|
235
235
|
- `"$PROJECT_PATH/implementation.md"`
|
|
236
236
|
- `"$PROJECT_PATH/state.md"`
|
|
237
|
-
- `.oat/state.md`
|
|
237
|
+
- `.oat/state.md` is generated dashboard state; ignore it for committed artifact baseline checks.
|
|
238
238
|
|
|
239
239
|
If any of those files are untracked or modified only because the previous workflow step did not finish its bookkeeping commit:
|
|
240
240
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-review-receive
|
|
3
|
-
version: 1.4.
|
|
3
|
+
version: 1.4.3
|
|
4
4
|
description: Use when review findings from oat-project-review-provide need closure. Converts review artifacts into actionable plan tasks.
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
user-invocable: true
|
|
@@ -450,7 +450,7 @@ git diff --cached --quiet || git commit -m "chore(oat): record review findings a
|
|
|
450
450
|
|
|
451
451
|
Do not use `git add -A` or glob patterns that reach outside `"$PROJECT_PATH/reviews/"`. Do not include unrelated implementation or code files in this commit. Do not defer this commit without explicit user approval — if deferred, clearly state in the summary that bookkeeping is uncommitted so the original agent knows to commit on return.
|
|
452
452
|
|
|
453
|
-
If the project itself is still untracked because earlier lifecycle steps never committed the initial artifact set, widen this bookkeeping commit to include the untracked core project artifacts (`discovery.md`, `spec.md`, `design.md`, `plan.md`, `implementation.md`, `state.md
|
|
453
|
+
If the project itself is still untracked because earlier lifecycle steps never committed the initial artifact set, widen this bookkeeping commit to include the untracked core project artifacts (`discovery.md`, `spec.md`, `design.md`, `plan.md`, `implementation.md`, `state.md`). Do not stage `.oat/state.md`; it is generated dashboard state and normally gitignored. Do not leave the project tree partially tracked after receive-review finishes.
|
|
454
454
|
|
|
455
455
|
**Note on archived review paths:** When `reviews/archived/` matches a `localPaths` pattern (the default setup), the archived file is gitignored and `git add "$PROJECT_PATH/reviews/"` will only stage the deletion of the original (now-moved) top-level review file. When `reviews/archived/` is tracked, both the deletion and the new archived location are staged. Both cases are safe — the command handles them uniformly.
|
|
456
456
|
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
export interface ApplyOatCoreResult {
|
|
2
2
|
action: 'created' | 'updated' | 'no-change';
|
|
3
3
|
entries: string[];
|
|
4
|
+
stateDashboardIndexAction: 'untracked' | 'not-tracked' | 'not-git-repo';
|
|
4
5
|
}
|
|
5
6
|
export declare function applyOatCoreGitignore(repoRoot: string): Promise<ApplyOatCoreResult>;
|
|
7
|
+
/**
|
|
8
|
+
* Removes the generated repo dashboard from the git index once the OAT core
|
|
9
|
+
* ignore rule is present, while leaving the working-tree file intact.
|
|
10
|
+
*
|
|
11
|
+
* @param repoRoot Repository root where the OAT core gitignore section applies.
|
|
12
|
+
* @returns The index migration outcome for `.oat/state.md`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function untrackOatStateDashboard(repoRoot: string): Promise<ApplyOatCoreResult['stateDashboardIndexAction']>;
|
|
6
15
|
//# sourceMappingURL=gitignore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../../../src/commands/init/gitignore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../../../src/commands/init/gitignore.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC5C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,yBAAyB,EAAE,WAAW,GAAG,aAAa,GAAG,cAAc,CAAC;CACzE;AAMD,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,kBAAkB,CAAC,CAgD7B;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,kBAAkB,CAAC,2BAA2B,CAAC,CAAC,CAyB1D"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
1
2
|
import { readFile, writeFile } from 'node:fs/promises';
|
|
2
3
|
import { join } from 'node:path';
|
|
4
|
+
import { promisify } from 'node:util';
|
|
3
5
|
import { fileExists } from '../../fs/io.js';
|
|
4
6
|
const SECTION_START = '# OAT core';
|
|
5
7
|
const SECTION_END = '# END OAT core';
|
|
8
|
+
const OAT_STATE_DASHBOARD_PATH = '.oat/state.md';
|
|
9
|
+
const execFileAsync = promisify(execFile);
|
|
6
10
|
const CORE_ENTRIES = [
|
|
7
11
|
'.oat/config.local.json',
|
|
8
12
|
'.oat/state.md',
|
|
@@ -20,7 +24,11 @@ export async function applyOatCoreGitignore(repoRoot) {
|
|
|
20
24
|
const section = buildSection();
|
|
21
25
|
if (!exists) {
|
|
22
26
|
await writeFile(gitignorePath, `${section}\n`, 'utf8');
|
|
23
|
-
return {
|
|
27
|
+
return {
|
|
28
|
+
action: 'created',
|
|
29
|
+
entries: CORE_ENTRIES,
|
|
30
|
+
stateDashboardIndexAction: await untrackOatStateDashboard(repoRoot),
|
|
31
|
+
};
|
|
24
32
|
}
|
|
25
33
|
const content = await readFile(gitignorePath, 'utf8');
|
|
26
34
|
const startIdx = content.indexOf(SECTION_START);
|
|
@@ -28,14 +36,51 @@ export async function applyOatCoreGitignore(repoRoot) {
|
|
|
28
36
|
if (startIdx !== -1 && endIdx !== -1) {
|
|
29
37
|
const existingSection = content.slice(startIdx, endIdx + SECTION_END.length);
|
|
30
38
|
if (existingSection === section) {
|
|
31
|
-
return {
|
|
39
|
+
return {
|
|
40
|
+
action: 'no-change',
|
|
41
|
+
entries: CORE_ENTRIES,
|
|
42
|
+
stateDashboardIndexAction: await untrackOatStateDashboard(repoRoot),
|
|
43
|
+
};
|
|
32
44
|
}
|
|
33
45
|
const before = content.slice(0, startIdx);
|
|
34
46
|
const after = content.slice(endIdx + SECTION_END.length);
|
|
35
47
|
await writeFile(gitignorePath, `${before}${section}${after}`, 'utf8');
|
|
36
|
-
return {
|
|
48
|
+
return {
|
|
49
|
+
action: 'updated',
|
|
50
|
+
entries: CORE_ENTRIES,
|
|
51
|
+
stateDashboardIndexAction: await untrackOatStateDashboard(repoRoot),
|
|
52
|
+
};
|
|
37
53
|
}
|
|
38
54
|
const separator = content.endsWith('\n') ? '\n' : '\n\n';
|
|
39
55
|
await writeFile(gitignorePath, `${content}${separator}${section}\n`, 'utf8');
|
|
40
|
-
return {
|
|
56
|
+
return {
|
|
57
|
+
action: 'updated',
|
|
58
|
+
entries: CORE_ENTRIES,
|
|
59
|
+
stateDashboardIndexAction: await untrackOatStateDashboard(repoRoot),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Removes the generated repo dashboard from the git index once the OAT core
|
|
64
|
+
* ignore rule is present, while leaving the working-tree file intact.
|
|
65
|
+
*
|
|
66
|
+
* @param repoRoot Repository root where the OAT core gitignore section applies.
|
|
67
|
+
* @returns The index migration outcome for `.oat/state.md`.
|
|
68
|
+
*/
|
|
69
|
+
export async function untrackOatStateDashboard(repoRoot) {
|
|
70
|
+
try {
|
|
71
|
+
await execFileAsync('git', ['rev-parse', '--is-inside-work-tree'], {
|
|
72
|
+
cwd: repoRoot,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return 'not-git-repo';
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
await execFileAsync('git', ['ls-files', '--error-unmatch', OAT_STATE_DASHBOARD_PATH], { cwd: repoRoot });
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return 'not-tracked';
|
|
83
|
+
}
|
|
84
|
+
await execFileAsync('git', ['rm', '--cached', '--force', '--quiet', '--', OAT_STATE_DASHBOARD_PATH], { cwd: repoRoot });
|
|
85
|
+
return 'untracked';
|
|
41
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/tools/update/index.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAKvE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAE7B,MAAM,gBAAgB,CAAC;AAexB,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAAA;CAAE,GAClD,MAAM,EAAE,CAUV;AAgCD,wBAAgB,wBAAwB,CACtC,YAAY,GAAE,uBAA6C,EAC3D,gBAAgB,GAAE,oBAA8C,GAC/D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/tools/update/index.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAKvE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAE7B,MAAM,gBAAgB,CAAC;AAexB,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAAA;CAAE,GAClD,MAAM,EAAE,CAUV;AAgCD,wBAAgB,wBAAwB,CACtC,YAAY,GAAE,uBAA6C,EAC3D,gBAAgB,GAAE,oBAA8C,GAC/D,OAAO,CA4JT;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAI7E;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,YAAY,GACnB,OAAO,CAOT;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,OAAO,GACd,MAAM,CAMR"}
|
|
@@ -92,6 +92,9 @@ export function createToolsUpdateCommand(dependencies = defaultDependencies, syn
|
|
|
92
92
|
const verb = gitignoreResult.action === 'created' ? 'Created' : 'Updated';
|
|
93
93
|
logger.info(`${verb} .gitignore OAT core section (${gitignoreResult.entries.length} entries).`);
|
|
94
94
|
}
|
|
95
|
+
if (gitignoreResult.stateDashboardIndexAction === 'untracked') {
|
|
96
|
+
logger.info('Untracked generated dashboard from git index: .oat/state.md.');
|
|
97
|
+
}
|
|
95
98
|
}
|
|
96
99
|
// Refresh ~/.oat/docs/ when the core pack is explicitly updated or
|
|
97
100
|
// reconciled through --all (D3 requirement).
|
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.11",
|
|
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",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"ora": "^9.0.0",
|
|
34
34
|
"yaml": "2.8.2",
|
|
35
35
|
"zod": "^3.25.76",
|
|
36
|
-
"@open-agent-toolkit/control-plane": "0.1.
|
|
36
|
+
"@open-agent-toolkit/control-plane": "0.1.11"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^22.10.0",
|