@open-agent-toolkit/cli 0.2.59 → 0.2.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/agents/oat-phase-implementer.md +27 -4
- package/assets/agents/oat-reviewer.md +25 -14
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/cli-utilities/workflow-gates.md +3 -3
- package/assets/docs/reference/cli-reference.md +10 -3
- package/assets/docs/reference/oat-directory-structure.md +1 -0
- package/assets/docs/workflows/ideas/index.md +1 -1
- package/assets/docs/workflows/index.md +1 -0
- package/assets/docs/workflows/projects/artifacts.md +24 -3
- package/assets/docs/workflows/projects/hill-checkpoints.md +21 -0
- package/assets/docs/workflows/projects/implementation-execution.md +5 -0
- package/assets/docs/workflows/projects/lifecycle.md +124 -7
- package/assets/docs/workflows/projects/pr-flow.md +2 -0
- package/assets/docs/workflows/projects/reviews.md +1 -1
- package/assets/docs/workflows/projects/state-machine.md +20 -0
- package/assets/docs/workflows/skills/index.md +2 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-brainstorm/SKILL.md +61 -12
- package/assets/skills/oat-docs/SKILL.md +13 -8
- package/assets/skills/oat-doctor/SKILL.md +3 -3
- package/assets/skills/oat-pjm-review-backlog/SKILL.md +2 -2
- package/assets/skills/oat-project-autonomous/SKILL.md +14 -9
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +56 -42
- package/assets/skills/oat-project-capture/SKILL.md +2 -2
- package/assets/skills/oat-project-discover/SKILL.md +6 -5
- package/assets/skills/oat-project-document/SKILL.md +11 -1
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +56 -42
- package/assets/skills/oat-project-implement/SKILL.md +3 -3
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +106 -15
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +56 -42
- package/assets/skills/oat-project-implement/references/phase-execution.md +16 -1
- package/assets/skills/oat-project-implement/references/plan-and-resume.md +19 -1
- package/assets/skills/oat-project-import-plan/SKILL.md +47 -3
- package/assets/skills/oat-project-lite/SKILL.md +467 -0
- package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +331 -0
- package/assets/skills/oat-project-next/SKILL.md +26 -10
- package/assets/skills/oat-project-plan/SKILL.md +14 -2
- package/assets/skills/oat-project-plan-writing/SKILL.md +6 -3
- package/assets/skills/oat-project-pr-final/SKILL.md +33 -7
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +56 -42
- package/assets/skills/oat-project-pr-progress/SKILL.md +3 -3
- package/assets/skills/oat-project-progress/SKILL.md +16 -3
- package/assets/skills/oat-project-promote-spec-driven/SKILL.md +3 -1
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +56 -42
- package/assets/skills/oat-project-review-provide/SKILL.md +25 -6
- package/assets/skills/oat-project-summary/SKILL.md +27 -3
- package/assets/templates/plan-lite.md +165 -0
- package/assets/templates/plan.md +1 -1
- package/assets/templates/state.md +1 -1
- package/dist/commands/project/index.d.ts.map +1 -1
- package/dist/commands/project/index.js +2 -0
- package/dist/commands/project/new/index.d.ts +3 -2
- package/dist/commands/project/new/index.d.ts.map +1 -1
- package/dist/commands/project/new/index.js +2 -1
- package/dist/commands/project/new/scaffold.d.ts +5 -3
- package/dist/commands/project/new/scaffold.d.ts.map +1 -1
- package/dist/commands/project/new/scaffold.js +38 -10
- package/dist/commands/project/promote/index.d.ts +2 -0
- package/dist/commands/project/promote/index.d.ts.map +1 -0
- package/dist/commands/project/promote/index.js +1 -0
- package/dist/commands/project/promote/promote.d.ts +47 -0
- package/dist/commands/project/promote/promote.d.ts.map +1 -0
- package/dist/commands/project/promote/promote.js +322 -0
- package/dist/commands/project/split/run.d.ts.map +1 -1
- package/dist/commands/project/split/run.js +8 -1
- package/dist/commands/project/validate-plan/index.d.ts.map +1 -1
- package/dist/commands/project/validate-plan/index.js +25 -1
- package/dist/commands/project/validate-plan/validate-plan.d.ts +8 -0
- package/dist/commands/project/validate-plan/validate-plan.d.ts.map +1 -1
- package/dist/commands/project/validate-plan/validate-plan.js +49 -0
- package/dist/commands/shared/frontmatter.d.ts +1 -1
- package/dist/commands/shared/frontmatter.d.ts.map +1 -1
- package/dist/commands/shared/frontmatter.js +1 -0
- package/dist/commands/state/generate.d.ts.map +1 -1
- package/dist/commands/state/generate.js +23 -0
- package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-manifest.js +2 -0
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-review-provide
|
|
3
|
-
version: 1.5.
|
|
3
|
+
version: 1.5.5
|
|
4
4
|
description: Use when the user explicitly asks to review an OAT project — e.g. "review project", "review the project", "run project review", or confirms a previously offered review. Do NOT auto-invoke on completed work alone. Resolves a project review scope and offers before running.
|
|
5
5
|
disable-model-invocation: false
|
|
6
6
|
user-invocable: true
|
|
@@ -306,6 +306,7 @@ WORKFLOW_MODE=$(oat project status --project-path "$PROJECT_PATH" --field projec
|
|
|
306
306
|
- `spec-driven`: `spec.md`, `design.md`, `plan.md`
|
|
307
307
|
- `quick`: `discovery.md`, `plan.md` (`spec.md`/`design.md` optional if present)
|
|
308
308
|
- `import`: `plan.md` (`references/imported-plan.md` recommended, `spec.md`/`design.md` optional)
|
|
309
|
+
- `lite`: `plan.md`, `implementation.md` (`discovery.md`/`spec.md`/`design.md` are absent by design)
|
|
309
310
|
|
|
310
311
|
**Required for artifact review:**
|
|
311
312
|
|
|
@@ -314,9 +315,10 @@ WORKFLOW_MODE=$(oat project status --project-path "$PROJECT_PATH" --field projec
|
|
|
314
315
|
- reviewing `spec` requires `discovery.md`
|
|
315
316
|
- reviewing `design` in `spec-driven` mode requires `spec.md`
|
|
316
317
|
- reviewing `design` in `quick/import` mode requires only `discovery.md` (spec is skipped in these modes)
|
|
317
|
-
- in `quick/import` mode, missing `spec.md` must not be treated as a project review gate failure for `artifact design`; proceed with normal project-scoped review flow, artifact writing, and bookkeeping
|
|
318
|
+
- in `quick/import` mode (lite has no design artifact), missing `spec.md` must not be treated as a project review gate failure for `artifact design`; proceed with normal project-scoped review flow, artifact writing, and bookkeeping
|
|
318
319
|
- reviewing `plan` in `spec-driven` mode requires `spec.md` + `design.md`
|
|
319
|
-
- reviewing `plan` in `quick/import` mode may use `discovery.md` and/or `references/imported-plan.md` instead
|
|
320
|
+
- reviewing `plan` in `quick/import` mode may use `discovery.md` and/or `references/imported-plan.md` instead; lite uses the separate rule below
|
|
321
|
+
- reviewing `plan` in `lite` mode requires only `plan.md`; its Summary, Decisions, Assumptions, Out of Scope, and Validation Criteria sections are the complete upstream contract
|
|
320
322
|
|
|
321
323
|
**If missing:** Report missing required artifacts for the current mode and stop if requirements are not met.
|
|
322
324
|
|
|
@@ -502,6 +504,8 @@ case "$SCOPE_TOKEN" in
|
|
|
502
504
|
FILES_CHANGED=$(printf "%s\n" "$PROJECT_PATH/plan.md" "$PROJECT_PATH/spec.md" "$PROJECT_PATH/design.md")
|
|
503
505
|
elif [[ "$WORKFLOW_MODE" == "quick" ]]; then
|
|
504
506
|
FILES_CHANGED=$(printf "%s\n" "$PROJECT_PATH/plan.md" "$PROJECT_PATH/discovery.md")
|
|
507
|
+
elif [[ "$WORKFLOW_MODE" == "lite" ]]; then
|
|
508
|
+
FILES_CHANGED=$(printf "%s\n" "$PROJECT_PATH/plan.md")
|
|
505
509
|
else
|
|
506
510
|
FILES_CHANGED=$(printf "%s\n" "$PROJECT_PATH/plan.md" "$PROJECT_PATH/references/imported-plan.md")
|
|
507
511
|
fi
|
|
@@ -581,10 +585,12 @@ Build the "Review Scope" metadata for the reviewer:
|
|
|
581
585
|
**Scope:** {scope}{optional: " (" + SCOPE_RANGE + ")"}
|
|
582
586
|
**Date:** {today}
|
|
583
587
|
|
|
588
|
+
- Workflow mode: {WORKFLOW_MODE}
|
|
589
|
+
|
|
584
590
|
**Artifact Paths:**
|
|
585
591
|
|
|
586
|
-
- Spec: {PROJECT_PATH}/spec.md (required in spec-driven mode; optional in quick/import)
|
|
587
|
-
- Design: {PROJECT_PATH}/design.md (required in spec-driven mode; optional in quick/import)
|
|
592
|
+
- Spec: {PROJECT_PATH}/spec.md (required in spec-driven mode; optional in quick/import/lite)
|
|
593
|
+
- Design: {PROJECT_PATH}/design.md (required in spec-driven mode; optional in quick/import/lite)
|
|
588
594
|
- Plan: {PROJECT_PATH}/plan.md
|
|
589
595
|
- Implementation: {PROJECT_PATH}/implementation.md
|
|
590
596
|
- Discovery: {PROJECT_PATH}/discovery.md
|
|
@@ -622,6 +628,19 @@ Build the "Review Scope" metadata for the reviewer:
|
|
|
622
628
|
- Do not force a code-defect framing for accepted design drift; `oat-project-review-receive` can convert artifact drift into alignment tasks or explicit deferrals.
|
|
623
629
|
```
|
|
624
630
|
|
|
631
|
+
For `WORKFLOW_MODE=lite`, render the artifact-path portion of every artifact-plan
|
|
632
|
+
and code-final Review Scope explicitly as:
|
|
633
|
+
|
|
634
|
+
- Discovery: not required (absent by design)
|
|
635
|
+
- Spec: not required (absent by design)
|
|
636
|
+
- Design: not required (absent by design)
|
|
637
|
+
- Import reference: not required
|
|
638
|
+
- Plan: `{PROJECT_PATH}/plan.md` (Summary, Decisions, Assumptions, Out of Scope, and Validation Criteria are the requirements contract)
|
|
639
|
+
- Implementation: `{PROJECT_PATH}/implementation.md`
|
|
640
|
+
|
|
641
|
+
Always pass the resolved workflow mode. Never omit it and let the reviewer fall
|
|
642
|
+
back to its spec-driven default.
|
|
643
|
+
|
|
625
644
|
### Step 6: Execute Review (3-Tier Capability Model)
|
|
626
645
|
|
|
627
646
|
**Canonical reviewer instructions:** Before a direct reviewer-definition read or
|
|
@@ -944,7 +963,7 @@ If running inline (Tier 3), execute the review and write artifact.
|
|
|
944
963
|
**Review checklist (from oat-reviewer):**
|
|
945
964
|
|
|
946
965
|
1. Verify scope (don't review out-of-scope changes)
|
|
947
|
-
2. If code review: verify alignment to available requirements sources (`spec`/`design` for spec-driven mode; `discovery`/import reference for quick/import)
|
|
966
|
+
2. If code review: verify alignment to available requirements sources (`spec`/`design` for spec-driven mode; `discovery`/import reference for quick/import; plan.md Summary, Decisions, Assumptions, Out of Scope, and Validation Criteria for lite)
|
|
948
967
|
3. If code review: verify code quality (correctness, tests, security, maintainability)
|
|
949
968
|
4. If artifact review: verify completeness/clarity/readiness of the artifact and its alignment with upstream artifacts
|
|
950
969
|
5. Categorize findings (Critical/Important/Medium/Minor)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-summary
|
|
3
|
-
version: 1.5.
|
|
3
|
+
version: 1.5.2
|
|
4
4
|
description: Use when the user requests or confirms summarizing an active OAT project — e.g. "summarize the project", "generate the summary", "run oat-project-summary", or confirms a previously offered summary run. Do NOT auto-invoke when implementation completes. Generates summary.md from project artifacts as institutional memory.
|
|
5
5
|
disable-model-invocation: false
|
|
6
6
|
user-invocable: true
|
|
@@ -117,7 +117,16 @@ test -f "$PROJECT_PATH/implementation.md"
|
|
|
117
117
|
|
|
118
118
|
### Step 2: Read Project Artifacts
|
|
119
119
|
|
|
120
|
-
|
|
120
|
+
For `oat_workflow_mode: lite`, use the reduced artifact contract and skip the
|
|
121
|
+
ordinary artifact list below. Read the five `plan.md` sections `Summary`,
|
|
122
|
+
`Decisions`, `Assumptions`, `Out of Scope`, and `Validation Criteria`, then read
|
|
123
|
+
`implementation.md` for task outcomes and the shipped results in `Final
|
|
124
|
+
Summary (for PR/docs)`. Read `state.md` only for routing metadata. A lite
|
|
125
|
+
project accepts `discovery.md`, `spec.md`, and `design.md` as absent; do not
|
|
126
|
+
read or require them. Ground the summary in what actually shipped, with
|
|
127
|
+
`implementation.md` taking precedence over the plan.
|
|
128
|
+
|
|
129
|
+
For every other workflow mode, read all available artifacts for synthesis:
|
|
121
130
|
|
|
122
131
|
- `"$PROJECT_PATH/discovery.md"` — initial request, decisions, constraints
|
|
123
132
|
- `"$PROJECT_PATH/spec.md"` — requirements, goals (optional — may not exist in quick mode)
|
|
@@ -213,7 +222,22 @@ For each section, synthesize content from the relevant artifacts. Apply these ru
|
|
|
213
222
|
|
|
214
223
|
**Minimum viable summary:** Overview + What Was Implemented + Key Decisions. All other sections are included only when they have content worth preserving.
|
|
215
224
|
|
|
216
|
-
**
|
|
225
|
+
**Lite section sources:**
|
|
226
|
+
|
|
227
|
+
Use this table only for `oat_workflow_mode: lite`. It maps every canonical lite
|
|
228
|
+
plan section and shipped implementation results without requiring discovery,
|
|
229
|
+
spec, or design artifacts.
|
|
230
|
+
|
|
231
|
+
| Summary Section | Primary Lite Sources |
|
|
232
|
+
| -------------------- | ------------------------------------------------------------- |
|
|
233
|
+
| Overview | plan.md `Summary`; implementation.md `Final Summary` |
|
|
234
|
+
| What Was Implemented | implementation.md shipped results and task outcomes |
|
|
235
|
+
| Key Decisions | plan.md `Decisions`; implementation.md accepted decisions |
|
|
236
|
+
| Tradeoffs Made | plan.md `Assumptions`; implementation.md decisions |
|
|
237
|
+
| Follow-up Items | plan.md `Out of Scope`; implementation.md deferred results |
|
|
238
|
+
| Integration Notes | plan.md `Validation Criteria`; implementation.md test results |
|
|
239
|
+
|
|
240
|
+
**Non-lite section sources:**
|
|
217
241
|
|
|
218
242
|
| Section | Primary Sources |
|
|
219
243
|
| ------------------------------ | ---------------------------------------------------------------------- |
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
oat_status: in_progress
|
|
3
|
+
oat_ready_for: null
|
|
4
|
+
oat_blockers: []
|
|
5
|
+
oat_last_updated: YYYY-MM-DD
|
|
6
|
+
oat_phase: plan
|
|
7
|
+
oat_phase_status: in_progress
|
|
8
|
+
oat_plan_hill_phases: []
|
|
9
|
+
oat_plan_parallel_groups: []
|
|
10
|
+
oat_plan_source: lite
|
|
11
|
+
oat_import_reference: null
|
|
12
|
+
oat_import_source_path: null
|
|
13
|
+
oat_import_provider: null
|
|
14
|
+
oat_generated: false
|
|
15
|
+
oat_template: true
|
|
16
|
+
oat_template_name: plan-lite
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# Lite Plan: {Project Name}
|
|
20
|
+
|
|
21
|
+
**Goal:** [State the outcome this single-sitting change must achieve.]
|
|
22
|
+
|
|
23
|
+
## Summary
|
|
24
|
+
|
|
25
|
+
[Summarize the requested behavior and the smallest coherent implementation.]
|
|
26
|
+
|
|
27
|
+
## Decisions
|
|
28
|
+
|
|
29
|
+
- **Content shape:** `[minimal | product | technical | both]` — [One-line rationale tied to the observable shape triggers.]
|
|
30
|
+
- [Record the other decisions made during the critical interview.]
|
|
31
|
+
|
|
32
|
+
## Product Behavior
|
|
33
|
+
|
|
34
|
+
<!-- Include for product or both; omit this section for minimal or technical. -->
|
|
35
|
+
|
|
36
|
+
1. **[Observable behavior]** — [State the testable user-visible outcome.]
|
|
37
|
+
|
|
38
|
+
## Technical Design
|
|
39
|
+
|
|
40
|
+
<!-- Include for technical or both; omit this section for minimal or product. -->
|
|
41
|
+
|
|
42
|
+
- **Current operation:** [Describe how the affected modules and contracts work now.]
|
|
43
|
+
- **Proposed changes:** [Describe the change with file-and-symbol references, not line numbers.]
|
|
44
|
+
- **Data flow:** [When state or data crosses a boundary, describe its path and transformations. Omit this item otherwise.]
|
|
45
|
+
|
|
46
|
+
## Assumptions
|
|
47
|
+
|
|
48
|
+
- [Record assumptions the implementation and validation depend on.]
|
|
49
|
+
|
|
50
|
+
## Out of Scope
|
|
51
|
+
|
|
52
|
+
- [Name adjacent work intentionally excluded from this change.]
|
|
53
|
+
|
|
54
|
+
## Validation Criteria
|
|
55
|
+
|
|
56
|
+
- [ ] [Observable criterion] — Check: `[exact verification command]`
|
|
57
|
+
- [ ] [Observable criterion] — Check: `[exact verification command]`
|
|
58
|
+
|
|
59
|
+
## Parallelism
|
|
60
|
+
|
|
61
|
+
This plan has one phase and executes sequentially.
|
|
62
|
+
|
|
63
|
+
## Phase 1: [Phase Name]
|
|
64
|
+
|
|
65
|
+
### Task p01-t01: [Task Name]
|
|
66
|
+
|
|
67
|
+
**Files:**
|
|
68
|
+
|
|
69
|
+
- Create: `[path/to/file.ts]`
|
|
70
|
+
- Modify: `[path/to/existing.ts]`
|
|
71
|
+
|
|
72
|
+
**Implementation and Proof Strategy:**
|
|
73
|
+
|
|
74
|
+
- **Strategy:** `[test-first | characterization-first | implementation-then-regression | static-or-build | manual-or-visual]`
|
|
75
|
+
- **Observable risk:** [Name the behavior, contract, or invariant this evidence covers.]
|
|
76
|
+
- **Why proportionate:** [Explain why this is the smallest proof capable of detecting the relevant failure.]
|
|
77
|
+
|
|
78
|
+
**Step 1: Implement**
|
|
79
|
+
|
|
80
|
+
[Describe the bounded implementation in the order required by the selected strategy.]
|
|
81
|
+
|
|
82
|
+
**Step 2: Prove**
|
|
83
|
+
|
|
84
|
+
Run: `[exact proof command or manual: instruction]`
|
|
85
|
+
Expected: [State the observable passing result and, for behavior changes, how this proof fails without the change.]
|
|
86
|
+
|
|
87
|
+
**Step 3: Refactor and format**
|
|
88
|
+
|
|
89
|
+
[Describe bounded cleanup and name the exact write-mode formatting command.]
|
|
90
|
+
|
|
91
|
+
**Step 4: Verify**
|
|
92
|
+
|
|
93
|
+
Run: `[exact task verification command]`
|
|
94
|
+
Expected: No errors
|
|
95
|
+
|
|
96
|
+
**Step 5: Commit**
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
git add [task files]
|
|
100
|
+
git commit -m "feat(p01-t01): [description]"
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
### Task p01-t02: [Task Name]
|
|
106
|
+
|
|
107
|
+
**Files:**
|
|
108
|
+
|
|
109
|
+
- Modify: `[path/to/existing.ts]`
|
|
110
|
+
|
|
111
|
+
**Implementation and Proof Strategy:**
|
|
112
|
+
|
|
113
|
+
- **Strategy:** `[test-first | characterization-first | implementation-then-regression | static-or-build | manual-or-visual]`
|
|
114
|
+
- **Observable risk:** [Name the behavior, contract, or invariant this evidence covers.]
|
|
115
|
+
- **Why proportionate:** [Explain why this is the smallest proof capable of detecting the relevant failure.]
|
|
116
|
+
|
|
117
|
+
**Step 1: Implement**
|
|
118
|
+
|
|
119
|
+
[Describe the bounded implementation in the order required by the selected strategy.]
|
|
120
|
+
|
|
121
|
+
**Step 2: Prove**
|
|
122
|
+
|
|
123
|
+
Run: `[exact proof command or manual: instruction]`
|
|
124
|
+
Expected: [State the observable passing result and, for behavior changes, how this proof fails without the change.]
|
|
125
|
+
|
|
126
|
+
**Step 3: Refactor and format**
|
|
127
|
+
|
|
128
|
+
[Describe bounded cleanup and name the exact write-mode formatting command.]
|
|
129
|
+
|
|
130
|
+
**Step 4: Verify**
|
|
131
|
+
|
|
132
|
+
Run: `[exact task verification command]`
|
|
133
|
+
Expected: No errors
|
|
134
|
+
|
|
135
|
+
**Step 5: Commit**
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
git add [task files]
|
|
139
|
+
git commit -m "feat(p01-t02): [description]"
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Reviews
|
|
145
|
+
|
|
146
|
+
| Scope | Type | Status | Date | Artifact | Reviewed Head | Invocation | Gate Target |
|
|
147
|
+
| ------ | -------- | ------- | ---- | -------- | ------------- | ---------- | ----------- |
|
|
148
|
+
| p01 | code | pending | - | - | - | - | - |
|
|
149
|
+
| final | code | pending | - | - | - | - | - |
|
|
150
|
+
| spec | artifact | pending | - | - | - | - | - |
|
|
151
|
+
| design | artifact | pending | - | - | - | - | - |
|
|
152
|
+
|
|
153
|
+
## Implementation Complete
|
|
154
|
+
|
|
155
|
+
**Summary:**
|
|
156
|
+
|
|
157
|
+
- Phase 1: [N] tasks — [Description]
|
|
158
|
+
|
|
159
|
+
**Total: [N] tasks**
|
|
160
|
+
|
|
161
|
+
Ready for final code review and PR preparation.
|
|
162
|
+
|
|
163
|
+
## References
|
|
164
|
+
|
|
165
|
+
- Imported Source: `references/imported-plan.md` (when imported provenance applies)
|
package/assets/templates/plan.md
CHANGED
|
@@ -7,7 +7,7 @@ oat_phase: plan
|
|
|
7
7
|
oat_phase_status: in_progress
|
|
8
8
|
oat_plan_hill_phases: [] # phases to pause AFTER completing (empty = every phase)
|
|
9
9
|
oat_plan_parallel_groups: [] # groups of phases that run concurrently in worktrees; [] = fully sequential
|
|
10
|
-
oat_plan_source: spec-driven # spec-driven | quick | imported
|
|
10
|
+
oat_plan_source: spec-driven # spec-driven | quick | imported | lite
|
|
11
11
|
oat_import_reference: null # e.g., references/imported-plan.md
|
|
12
12
|
oat_import_source_path: null # original source path provided by user
|
|
13
13
|
oat_import_provider: null # codex | cursor | claude | null
|
|
@@ -34,7 +34,7 @@ oat_phase_status: in_progress # Status: in_progress | complete | pr_open
|
|
|
34
34
|
# - { harness: cursor, model: gpt-5.5-xhigh }
|
|
35
35
|
# source: project-state
|
|
36
36
|
# oat_dispatch_ceiling: # legacy compatibility alias for capped managed provider targets
|
|
37
|
-
oat_workflow_mode: { OAT_WORKFLOW_MODE } # spec-driven | quick | import
|
|
37
|
+
oat_workflow_mode: { OAT_WORKFLOW_MODE } # spec-driven | quick | import | lite
|
|
38
38
|
oat_workflow_origin: native # native | imported
|
|
39
39
|
# oat_skill_gate_overrides: # optional; per-project posture for configured lifecycle gates
|
|
40
40
|
# oat-project-implement: disabled # only the literal value `disabled`; absence means follow configuration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/project/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/project/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,wBAAgB,oBAAoB,IAAI,OAAO,CAwB9C"}
|
|
@@ -11,6 +11,7 @@ import { createProjectMigrateCommand } from './migrate/index.js';
|
|
|
11
11
|
import { createProjectNewCommand } from './new/index.js';
|
|
12
12
|
import { createProjectOpenCommand } from './open/index.js';
|
|
13
13
|
import { createProjectPauseCommand } from './pause/index.js';
|
|
14
|
+
import { createProjectPromoteCommand } from './promote/index.js';
|
|
14
15
|
import { createProjectPruneCommand } from './prune/index.js';
|
|
15
16
|
import { createProjectPullCommand } from './pull/index.js';
|
|
16
17
|
import { createProjectPushCommand } from './push/index.js';
|
|
@@ -34,6 +35,7 @@ export function createProjectCommand() {
|
|
|
34
35
|
.addCommand(createProjectNewCommand())
|
|
35
36
|
.addCommand(createProjectOpenCommand())
|
|
36
37
|
.addCommand(createProjectPauseCommand())
|
|
38
|
+
.addCommand(createProjectPromoteCommand())
|
|
37
39
|
.addCommand(createProjectPruneCommand())
|
|
38
40
|
.addCommand(createProjectPushCommand())
|
|
39
41
|
.addCommand(createProjectPullCommand())
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { type CommandContext, type GlobalOptions } from '../../../app/command-context.js';
|
|
2
2
|
import { type ProjectScope } from '../../shared/project-scope.js';
|
|
3
|
+
import { type WorkflowMode } from '@open-agent-toolkit/control-plane';
|
|
3
4
|
import { Command } from 'commander';
|
|
4
|
-
import { type
|
|
5
|
+
import { type ScaffoldProjectResult } from './scaffold.js';
|
|
5
6
|
interface ProjectNewDependencies {
|
|
6
7
|
buildCommandContext: (options: GlobalOptions) => CommandContext;
|
|
7
8
|
scaffoldProject: (options: {
|
|
8
9
|
repoRoot: string;
|
|
9
10
|
projectName: string;
|
|
10
|
-
mode:
|
|
11
|
+
mode: WorkflowMode;
|
|
11
12
|
force: boolean;
|
|
12
13
|
setActive: boolean;
|
|
13
14
|
refreshDashboard: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/new/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAE5C,OAAO,EAEL,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/new/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAE5C,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,YAAY,CAAC;AAmBpB,UAAU,sBAAsB;IAC9B,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,eAAe,EAAE,CAAC,OAAO,EAAE;QACzB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,YAAY,CAAC;QACnB,KAAK,EAAE,OAAO,CAAC;QACf,SAAS,EAAE,OAAO,CAAC;QACnB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,MAAM,EAAE,OAAO,CAAC;QAChB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,KAAK,CAAC,EAAE,YAAY,CAAC;KACtB,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACtC;AAmGD,wBAAgB,uBAAuB,CACrC,SAAS,GAAE,OAAO,CAAC,sBAAsB,CAAM,GAC9C,OAAO,CAgDT"}
|
|
@@ -2,6 +2,7 @@ import { buildCommandContext, } from '../../../app/command-context.js';
|
|
|
2
2
|
import { PROJECT_SCOPES, } from '../../shared/project-scope.js';
|
|
3
3
|
import { readGlobalOptions } from '../../shared/shared.utils.js';
|
|
4
4
|
import { CliError } from '../../../errors/cli-error.js';
|
|
5
|
+
import { WORKFLOW_MODES, } from '@open-agent-toolkit/control-plane';
|
|
5
6
|
import { Command, Option } from 'commander';
|
|
6
7
|
import { scaffoldProject as defaultScaffoldProject, } from './scaffold.js';
|
|
7
8
|
const COMMIT_STATUS_MESSAGES = {
|
|
@@ -98,7 +99,7 @@ export function createProjectNewCommand(overrides = {}) {
|
|
|
98
99
|
.description('Create or update an OAT project scaffold')
|
|
99
100
|
.argument('<name>', 'Project name (letters, numbers, dash, underscore)')
|
|
100
101
|
.addOption(new Option('--mode <mode>', 'Scaffold mode')
|
|
101
|
-
.choices([
|
|
102
|
+
.choices([...WORKFLOW_MODES])
|
|
102
103
|
.default('spec-driven'))
|
|
103
104
|
.addOption(new Option('--scope <scope>', 'Project scope').choices(PROJECT_SCOPES))
|
|
104
105
|
.option('--force', 'Allow a duplicate slug in another scope; scaffold remains non-destructive')
|
|
@@ -4,12 +4,12 @@ import { writeSyncedRecord } from '../../project/sync/record.js';
|
|
|
4
4
|
import { commitRecordChange, createSyncedProject, pushSynced, rollbackCreatedSyncedProject } from '../../project/sync/ref-sync.js';
|
|
5
5
|
import { resolveDefaultScope, type ProjectScope } from '../../shared/project-scope.js';
|
|
6
6
|
import { setActiveProject } from '../../../config/oat-config.js';
|
|
7
|
-
|
|
7
|
+
import type { WorkflowMode } from '@open-agent-toolkit/control-plane';
|
|
8
8
|
export interface ScaffoldProjectOptions {
|
|
9
9
|
repoRoot: string;
|
|
10
10
|
projectName: string;
|
|
11
11
|
scope?: ProjectScope;
|
|
12
|
-
mode?:
|
|
12
|
+
mode?: WorkflowMode;
|
|
13
13
|
force?: boolean;
|
|
14
14
|
setActive?: boolean;
|
|
15
15
|
refreshDashboard?: boolean;
|
|
@@ -34,7 +34,7 @@ export interface ScaffoldProjectOptions {
|
|
|
34
34
|
*/
|
|
35
35
|
export type CommitScaffoldStatus = 'committed' | 'skipped_disabled' | 'skipped_no_worktree' | 'skipped_nothing' | 'failed';
|
|
36
36
|
export interface ScaffoldProjectResult {
|
|
37
|
-
mode:
|
|
37
|
+
mode: WorkflowMode;
|
|
38
38
|
scope: ProjectScope;
|
|
39
39
|
projectsRoot: string;
|
|
40
40
|
projectPath: string;
|
|
@@ -60,5 +60,7 @@ export interface ScaffoldProjectDependencies {
|
|
|
60
60
|
ensureScopedRootGitignore: typeof ensureScopedRootGitignore;
|
|
61
61
|
setActiveProject: typeof setActiveProject;
|
|
62
62
|
}
|
|
63
|
+
export declare function applyTemplateReplacements(template: string, projectName: string, today: string, nowUtc: string, mode: WorkflowMode): string;
|
|
64
|
+
export declare function resolveTemplateSource(userOatRoot: string, repoRoot: string, templateFile: string): Promise<string>;
|
|
63
65
|
export declare function scaffoldProject(options: ScaffoldProjectOptions, overrides?: Partial<ScaffoldProjectDependencies>): Promise<ScaffoldProjectResult>;
|
|
64
66
|
//# sourceMappingURL=scaffold.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/new/scaffold.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAEL,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACV,4BAA4B,EAC7B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAGL,mBAAmB,EAGnB,KAAK,YAAY,EAClB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/new/scaffold.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,7 +37,15 @@ const TEMPLATES_BY_MODE = {
|
|
|
37
37
|
],
|
|
38
38
|
quick: ['state.md', 'discovery.md', 'plan.md', 'implementation.md'],
|
|
39
39
|
import: ['state.md', 'plan.md', 'implementation.md'],
|
|
40
|
+
lite: [
|
|
41
|
+
'state.md',
|
|
42
|
+
{ source: 'plan-lite.md', target: 'plan.md' },
|
|
43
|
+
'implementation.md',
|
|
44
|
+
],
|
|
40
45
|
};
|
|
46
|
+
function normalizeTemplateEntry(entry) {
|
|
47
|
+
return typeof entry === 'string' ? { source: entry, target: entry } : entry;
|
|
48
|
+
}
|
|
41
49
|
const OAT_PLACEHOLDER_PATTERN = /(?<!\{)\{\s*(OAT_[A-Z0-9_]+)\s*\}(?!\})/g;
|
|
42
50
|
const STATE_TEMPLATE_BY_MODE = {
|
|
43
51
|
'spec-driven': {
|
|
@@ -97,6 +105,22 @@ const STATE_TEMPLATE_BY_MODE = {
|
|
|
97
105
|
],
|
|
98
106
|
nextMilestone: 'Run `oat-project-import-plan` to normalize the external plan',
|
|
99
107
|
},
|
|
108
|
+
lite: {
|
|
109
|
+
hillCheckpoints: '[]',
|
|
110
|
+
phase: 'plan',
|
|
111
|
+
status: 'Plan',
|
|
112
|
+
currentPhase: 'Plan - Authoring a single-phase lite plan',
|
|
113
|
+
artifacts: [
|
|
114
|
+
'- **Plan:** `plan.md` (scaffolded lite template — not started)',
|
|
115
|
+
'- **Implementation:** `implementation.md` (scaffolded template — not started)',
|
|
116
|
+
],
|
|
117
|
+
progress: [
|
|
118
|
+
'- ✓ Lite project scaffolded',
|
|
119
|
+
'- ✓ Plan and implementation artifacts scaffolded',
|
|
120
|
+
'- ⧗ Awaiting critical interview and plan authoring',
|
|
121
|
+
],
|
|
122
|
+
nextMilestone: 'Run `oat-project-lite` to author and approve the plan',
|
|
123
|
+
},
|
|
100
124
|
};
|
|
101
125
|
function replaceOatPlaceholders(template, replacements) {
|
|
102
126
|
return template.replace(OAT_PLACEHOLDER_PATTERN, (placeholder, token) => replacements[token] ?? placeholder);
|
|
@@ -120,7 +144,7 @@ function validateProjectName(name) {
|
|
|
120
144
|
function shellQuote(value) {
|
|
121
145
|
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
122
146
|
}
|
|
123
|
-
function applyTemplateReplacements(template, projectName, today, nowUtc, mode) {
|
|
147
|
+
export function applyTemplateReplacements(template, projectName, today, nowUtc, mode) {
|
|
124
148
|
const stateContent = STATE_TEMPLATE_BY_MODE[mode];
|
|
125
149
|
const oatReplacements = {
|
|
126
150
|
OAT_HILL_CHECKPOINTS: stateContent.hillCheckpoints,
|
|
@@ -185,21 +209,25 @@ async function commitScaffold(cwd, absoluteProjectPath, projectName, createdFile
|
|
|
185
209
|
async function scaffoldModeTemplates(userOatRoot, repoRoot, absoluteProjectPath, projectName, mode, today, nowUtc) {
|
|
186
210
|
const createdFiles = [];
|
|
187
211
|
const skippedFiles = [];
|
|
188
|
-
for (const
|
|
189
|
-
const
|
|
190
|
-
const
|
|
212
|
+
for (const entry of TEMPLATES_BY_MODE[mode]) {
|
|
213
|
+
const { source, target } = normalizeTemplateEntry(entry);
|
|
214
|
+
const src = await resolveTemplateSource(userOatRoot, repoRoot, source);
|
|
215
|
+
const dest = join(absoluteProjectPath, target);
|
|
191
216
|
if (await fileExists(dest)) {
|
|
192
|
-
skippedFiles.push(
|
|
217
|
+
skippedFiles.push(target);
|
|
193
218
|
continue;
|
|
194
219
|
}
|
|
195
220
|
const template = await readFile(src, 'utf8');
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
221
|
+
let rendered = applyTemplateReplacements(template, projectName, today, nowUtc, mode);
|
|
222
|
+
if (mode === 'lite' && target === 'plan.md') {
|
|
223
|
+
rendered = rendered.replace(/^---\n/, '---\noat_template: true\n');
|
|
224
|
+
}
|
|
225
|
+
assertNoUnresolvedOatPlaceholders(rendered, source);
|
|
226
|
+
if (target === 'state.md') {
|
|
199
227
|
assertValidProjectStateContent(rendered, { filePath: dest });
|
|
200
228
|
}
|
|
201
229
|
await writeFile(dest, rendered, 'utf8');
|
|
202
|
-
createdFiles.push(
|
|
230
|
+
createdFiles.push(target);
|
|
203
231
|
}
|
|
204
232
|
return { createdFiles, skippedFiles };
|
|
205
233
|
}
|
|
@@ -214,7 +242,7 @@ async function scaffoldProjectLog(userOatRoot, repoRoot, absoluteProjectPath, pr
|
|
|
214
242
|
await writeFile(dest, instantiateProjectLogTemplate(template, projectName, today), 'utf8');
|
|
215
243
|
return 'created';
|
|
216
244
|
}
|
|
217
|
-
async function resolveTemplateSource(userOatRoot, repoRoot, templateFile) {
|
|
245
|
+
export async function resolveTemplateSource(userOatRoot, repoRoot, templateFile) {
|
|
218
246
|
const userSource = join(userOatRoot, 'templates', templateFile);
|
|
219
247
|
if (await fileExists(userSource)) {
|
|
220
248
|
return userSource;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/promote/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { createProjectPromoteCommand } from './promote.js';
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { mkdir as defaultMkdir, readFile as defaultReadFile, rename as defaultRename, writeFile as defaultWriteFile } from 'node:fs/promises';
|
|
2
|
+
import { type CommandContext, type GlobalOptions } from '../../../app/command-context.js';
|
|
3
|
+
import { resolveTemplateSource as defaultResolveTemplateSource } from '../../project/new/scaffold.js';
|
|
4
|
+
import { type GitRunner } from '../../project/sync/git.js';
|
|
5
|
+
import { type PushResult, type SyncTarget } from '../../project/sync/ref-sync.js';
|
|
6
|
+
import { fileExists as defaultFileExists } from '../../../fs/io.js';
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
export interface LitePlanSections {
|
|
9
|
+
summary: string;
|
|
10
|
+
decisions: string;
|
|
11
|
+
assumptions: string;
|
|
12
|
+
outOfScope: string;
|
|
13
|
+
validationCriteria: string;
|
|
14
|
+
productBehavior?: string;
|
|
15
|
+
technicalDesign?: string;
|
|
16
|
+
}
|
|
17
|
+
type PromotionReason = 'promoted' | 'unsupported-target' | 'not-lite' | 'lite-plan-reference-exists' | 'invalid-lite-plan' | 'scope-unresolved' | 'project-unreadable' | 'template-unreadable' | 'write-failed' | 'persistence-failed';
|
|
18
|
+
export type PromotionResult = {
|
|
19
|
+
status: 'promoted';
|
|
20
|
+
reason: 'promoted';
|
|
21
|
+
files: string[];
|
|
22
|
+
} | {
|
|
23
|
+
status: 'refused';
|
|
24
|
+
reason: Exclude<PromotionReason, 'promoted'>;
|
|
25
|
+
files: string[];
|
|
26
|
+
};
|
|
27
|
+
export interface ProjectPromoteDependencies {
|
|
28
|
+
buildCommandContext: (options: GlobalOptions) => CommandContext;
|
|
29
|
+
resolveProjectRoot: (cwd: string) => Promise<string>;
|
|
30
|
+
resolveProjectsRoot: (repoRoot: string, env: NodeJS.ProcessEnv) => Promise<string>;
|
|
31
|
+
resolveTemplateSource: typeof defaultResolveTemplateSource;
|
|
32
|
+
readFile: typeof defaultReadFile;
|
|
33
|
+
writeFile: typeof defaultWriteFile;
|
|
34
|
+
mkdir: typeof defaultMkdir;
|
|
35
|
+
rename: typeof defaultRename;
|
|
36
|
+
fileExists: typeof defaultFileExists;
|
|
37
|
+
gitRunner: GitRunner;
|
|
38
|
+
pushSynced: (target: SyncTarget, git: GitRunner, options: {
|
|
39
|
+
message?: string;
|
|
40
|
+
}) => Promise<PushResult>;
|
|
41
|
+
processEnv: NodeJS.ProcessEnv;
|
|
42
|
+
now: () => Date;
|
|
43
|
+
}
|
|
44
|
+
export declare function parseLitePlanSections(planContent: string, liteTemplateContent?: string): LitePlanSections | null;
|
|
45
|
+
export declare function createProjectPromoteCommand(overrides?: Partial<ProjectPromoteDependencies>): Command;
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=promote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promote.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/promote/promote.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,IAAI,YAAY,EACrB,QAAQ,IAAI,eAAe,EAC3B,MAAM,IAAI,aAAa,EACvB,SAAS,IAAI,gBAAgB,EAC9B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,qBAAqB,IAAI,4BAA4B,EACtD,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,UAAU,EAChB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,EAAE,UAAU,IAAI,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAEzD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,KAAK,eAAe,GAChB,UAAU,GACV,oBAAoB,GACpB,UAAU,GACV,4BAA4B,GAC5B,mBAAmB,GACnB,kBAAkB,GAClB,oBAAoB,GACpB,qBAAqB,GACrB,cAAc,GACd,oBAAoB,CAAC;AAEzB,MAAM,MAAM,eAAe,GACvB;IACE,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,GACD;IACE,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IAC7C,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAMN,MAAM,WAAW,0BAA0B;IACzC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,qBAAqB,EAAE,OAAO,4BAA4B,CAAC;IAC3D,QAAQ,EAAE,OAAO,eAAe,CAAC;IACjC,SAAS,EAAE,OAAO,gBAAgB,CAAC;IACnC,KAAK,EAAE,OAAO,YAAY,CAAC;IAC3B,MAAM,EAAE,OAAO,aAAa,CAAC;IAC7B,UAAU,EAAE,OAAO,iBAAiB,CAAC;IACrC,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,CACV,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,SAAS,EACd,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAC1B,OAAO,CAAC,UAAU,CAAC,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;IAC9B,GAAG,EAAE,MAAM,IAAI,CAAC;CACjB;AA4ED,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,mBAAmB,CAAC,EAAE,MAAM,GAC3B,gBAAgB,GAAG,IAAI,CAYzB;AA0SD,wBAAgB,2BAA2B,CACzC,SAAS,GAAE,OAAO,CAAC,0BAA0B,CAAM,GAClD,OAAO,CA+BT"}
|