@open-agent-toolkit/cli 0.1.51 → 0.1.53
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/cli-utilities/tool-packs.md +23 -2
- package/assets/docs/contributing/skills.md +16 -0
- 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 +25 -0
- package/assets/docs/workflows/projects/lifecycle.md +9 -0
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-dispatch-subagents/SKILL.md +222 -0
- package/assets/skills/oat-dispatch-subagents/references/provider-claude.md +44 -0
- package/assets/skills/oat-dispatch-subagents/references/provider-codex.md +69 -0
- package/assets/skills/oat-dispatch-subagents/references/provider-cursor.md +61 -0
- package/assets/skills/oat-dispatch-subagents/references/record-schema.md +100 -0
- package/assets/skills/oat-project-dispatch-subagents/SKILL.md +218 -0
- 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/assets/skills/oat-repo-improve/SKILL.md +137 -0
- package/assets/skills/oat-repo-improve/references/audit-playbook.md +130 -0
- package/assets/skills/oat-repo-improve/references/closing-the-loop.md +96 -0
- package/assets/skills/oat-repo-improve/references/plan-template.md +199 -0
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +34 -9
- package/dist/commands/init/tools/shared/skill-manifest.d.ts +2 -2
- package/dist/commands/init/tools/shared/skill-manifest.d.ts.map +1 -1
- package/dist/commands/init/tools/shared/skill-manifest.js +3 -0
- 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
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# Handoff Plan Template
|
|
2
|
+
|
|
3
|
+
Every plan is written for an executor model that has **zero context**: it has not seen the advisor session, the audit, the other plans, or any prior conversation. It may be a smaller/cheaper model. Assume it is competent at following explicit instructions and weak at filling gaps, recovering from ambiguity, or knowing when to stop.
|
|
4
|
+
|
|
5
|
+
Three properties make a plan executable by a weaker model:
|
|
6
|
+
|
|
7
|
+
1. **Self-contained context** — everything needed is in the file: paths, code excerpts, conventions, commands.
|
|
8
|
+
2. **Verification gates** — every step ends with a command and its expected result. The executor never has to _judge_ whether it succeeded.
|
|
9
|
+
3. **Hard boundaries and escape hatches** — explicit out-of-scope list, and "STOP and report" conditions instead of letting the model improvise when reality doesn't match the plan.
|
|
10
|
+
|
|
11
|
+
File naming: `plans/NNN-short-slug.md`, numbered in recommended execution order.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Template
|
|
16
|
+
|
|
17
|
+
```markdown
|
|
18
|
+
# Plan NNN: <Imperative title — what will be true after this plan>
|
|
19
|
+
|
|
20
|
+
> **Executor instructions**: Follow this plan step by step. Run every
|
|
21
|
+
> verification command and confirm the expected result before moving to the
|
|
22
|
+
> next step. If anything in the "STOP conditions" section occurs, stop and
|
|
23
|
+
> report — do not improvise. When done, update the status row for this plan
|
|
24
|
+
> in `plans/README.md` — unless a reviewer dispatched you and told you they
|
|
25
|
+
> maintain the index.
|
|
26
|
+
>
|
|
27
|
+
> **Drift check (run first)**: `git diff --stat <planned-at SHA>..HEAD -- <in-scope paths>`
|
|
28
|
+
> If any in-scope file changed since this plan was written, compare the
|
|
29
|
+
> "Current state" excerpts against the live code before proceeding; on a
|
|
30
|
+
> mismatch, treat it as a STOP condition.
|
|
31
|
+
|
|
32
|
+
## Status
|
|
33
|
+
|
|
34
|
+
- **Priority**: P1 | P2 | P3
|
|
35
|
+
- **Effort**: S | M | L
|
|
36
|
+
- **Risk**: LOW | MED | HIGH
|
|
37
|
+
- **Depends on**: plans/NNN-\*.md (or "none")
|
|
38
|
+
- **Category**: bug | security | perf | tests | tech-debt | migration | dx | docs | direction
|
|
39
|
+
- **Planned at**: commit `<short SHA>`, <YYYY-MM-DD>
|
|
40
|
+
- **Issue**: <GitHub issue URL — only when published via `--issues`; omit otherwise>
|
|
41
|
+
|
|
42
|
+
## Why this matters
|
|
43
|
+
|
|
44
|
+
2–5 sentences. The problem, its concrete cost, and what improves when this
|
|
45
|
+
lands. Written so the executor (and a human reviewer) understands the intent —
|
|
46
|
+
intent is what lets a correct judgment call happen when a detail is off.
|
|
47
|
+
|
|
48
|
+
## Current state
|
|
49
|
+
|
|
50
|
+
The facts the executor needs, inlined — never "as discussed" or "see audit":
|
|
51
|
+
|
|
52
|
+
- The relevant files, each with one line on its role:
|
|
53
|
+
- `src/orders/api.ts` — order-list endpoint; contains the N+1 (lines 130–160)
|
|
54
|
+
- Excerpts of the code as it exists today (short, with `file:line` markers),
|
|
55
|
+
enough that the executor can confirm it's looking at the right thing.
|
|
56
|
+
- The repo conventions that apply here, with a pointer to one exemplar file:
|
|
57
|
+
"Error handling follows the Result pattern — see `src/lib/result.ts` and its
|
|
58
|
+
use in `src/users/api.ts:40-60`. Match it."
|
|
59
|
+
- Any documented vocabulary or design constraints the plan must honor, inlined
|
|
60
|
+
from the intent/design docs found in recon: the relevant `CONTEXT.md` terms
|
|
61
|
+
the executor should use in names and comments, the `DESIGN.md` tokens/components
|
|
62
|
+
to reuse, or the ADR whose decision this work must stay consistent with. Quote
|
|
63
|
+
the specific lines — the executor has not read those docs.
|
|
64
|
+
|
|
65
|
+
## Commands you will need
|
|
66
|
+
|
|
67
|
+
| Purpose | Command | Expected on success |
|
|
68
|
+
| --------- | ----------------------- | ------------------- |
|
|
69
|
+
| Install | `pnpm install` | exit 0 |
|
|
70
|
+
| Typecheck | `pnpm typecheck` | exit 0, no errors |
|
|
71
|
+
| Tests | `pnpm test -- <filter>` | all pass |
|
|
72
|
+
| Lint | `pnpm lint` | exit 0 |
|
|
73
|
+
|
|
74
|
+
(Exact commands from this repo — verified during recon, not guessed.)
|
|
75
|
+
|
|
76
|
+
## Suggested executor toolkit
|
|
77
|
+
|
|
78
|
+
(Optional — include only when relevant skills/tools plausibly exist in the
|
|
79
|
+
executor's environment. Skip the section otherwise.)
|
|
80
|
+
|
|
81
|
+
- Skills the executor should invoke if available, and for what:
|
|
82
|
+
"use `vercel-react-best-practices` when writing the memoization in step 3".
|
|
83
|
+
- Reference docs worth reading before starting, by path or URL.
|
|
84
|
+
|
|
85
|
+
## Scope
|
|
86
|
+
|
|
87
|
+
**In scope** (the only files you should modify):
|
|
88
|
+
|
|
89
|
+
- `src/orders/api.ts`
|
|
90
|
+
- `src/orders/api.test.ts` (create)
|
|
91
|
+
|
|
92
|
+
**Out of scope** (do NOT touch, even though they look related):
|
|
93
|
+
|
|
94
|
+
- `src/orders/legacy-api.ts` — deprecated path, scheduled for deletion;
|
|
95
|
+
changing it wastes effort and risks the v1 clients still pinned to it.
|
|
96
|
+
- Any change to the public response shape — clients depend on it.
|
|
97
|
+
|
|
98
|
+
## Git workflow
|
|
99
|
+
|
|
100
|
+
(Filled from recon — match the repo's observed conventions.)
|
|
101
|
+
|
|
102
|
+
- Branch: `advisor/NNN-<slug>` (or the repo's branch-naming convention if one is evident)
|
|
103
|
+
- Commit per step or per logical unit; message style: <match repo, e.g. conventional commits — include an example from `git log`>
|
|
104
|
+
- Do NOT push or open a PR unless the operator instructed it.
|
|
105
|
+
|
|
106
|
+
## Steps
|
|
107
|
+
|
|
108
|
+
### Step 1: <imperative title>
|
|
109
|
+
|
|
110
|
+
What to do, precisely. Reference exact files/symbols. Include the target code
|
|
111
|
+
shape when it's load-bearing (the pattern to produce, not necessarily every
|
|
112
|
+
line).
|
|
113
|
+
|
|
114
|
+
**Verify**: `<command>` → <expected output>
|
|
115
|
+
|
|
116
|
+
### Step 2: ...
|
|
117
|
+
|
|
118
|
+
(Each step small enough to verify independently. Order steps so the codebase
|
|
119
|
+
is never broken between steps when possible — e.g. add new path, switch
|
|
120
|
+
callers, then remove old path.)
|
|
121
|
+
|
|
122
|
+
## Test plan
|
|
123
|
+
|
|
124
|
+
- New tests to write, in which file, covering which cases (list them:
|
|
125
|
+
happy path, the specific bug/regression this plan fixes, named edge cases).
|
|
126
|
+
- Which existing test to use as the structural pattern:
|
|
127
|
+
"model after `src/users/api.test.ts`".
|
|
128
|
+
- Verification: `<test command>` → all pass, including N new tests.
|
|
129
|
+
|
|
130
|
+
## Done criteria
|
|
131
|
+
|
|
132
|
+
Machine-checkable. ALL must hold:
|
|
133
|
+
|
|
134
|
+
- [ ] `pnpm typecheck` exits 0
|
|
135
|
+
- [ ] `pnpm test` exits 0; new tests for <X> exist and pass
|
|
136
|
+
- [ ] `grep -rn "<old pattern>" src/` returns no matches
|
|
137
|
+
- [ ] No files outside the in-scope list are modified (`git status`)
|
|
138
|
+
- [ ] `plans/README.md` status row updated
|
|
139
|
+
|
|
140
|
+
## STOP conditions
|
|
141
|
+
|
|
142
|
+
Stop and report back (do not improvise) if:
|
|
143
|
+
|
|
144
|
+
- The code at the locations in "Current state" doesn't match the excerpts
|
|
145
|
+
(the codebase has drifted since this plan was written).
|
|
146
|
+
- A step's verification fails twice after a reasonable fix attempt.
|
|
147
|
+
- The fix appears to require touching an out-of-scope file.
|
|
148
|
+
- You discover the assumption "<key assumption>" is false.
|
|
149
|
+
|
|
150
|
+
## Maintenance notes
|
|
151
|
+
|
|
152
|
+
For the human/agent who owns this code after the change lands:
|
|
153
|
+
|
|
154
|
+
- What future changes will interact with this (e.g. "if pagination is added
|
|
155
|
+
to this endpoint, the batching in step 2 must be revisited").
|
|
156
|
+
- What a reviewer should scrutinize in the PR.
|
|
157
|
+
- Any follow-up explicitly deferred out of this plan (and why).
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Index file: `plans/README.md`
|
|
163
|
+
|
|
164
|
+
Written once by the advisor after all plans, updated by executors:
|
|
165
|
+
|
|
166
|
+
```markdown
|
|
167
|
+
# Implementation Plans
|
|
168
|
+
|
|
169
|
+
Generated by the oat-repo-improve skill on <date>. Execute in the order below unless
|
|
170
|
+
dependencies say otherwise. Each executor: read the plan fully before starting,
|
|
171
|
+
honor its STOP conditions, and update your row when done.
|
|
172
|
+
|
|
173
|
+
## Execution order & status
|
|
174
|
+
|
|
175
|
+
| Plan | Title | Priority | Effort | Depends on | Status |
|
|
176
|
+
| ---- | ----- | -------- | ------ | ---------- | ------ |
|
|
177
|
+
| 001 | ... | P1 | S | — | TODO |
|
|
178
|
+
| 002 | ... | P1 | M | 001 | TODO |
|
|
179
|
+
|
|
180
|
+
Status values: TODO | IN PROGRESS | DONE | BLOCKED (with one-line reason) | REJECTED (with one-line rationale — finding fixed independently or approach abandoned)
|
|
181
|
+
|
|
182
|
+
## Dependency notes
|
|
183
|
+
|
|
184
|
+
- 002 requires 001 because <reason>.
|
|
185
|
+
|
|
186
|
+
## Findings considered and rejected
|
|
187
|
+
|
|
188
|
+
- <finding>: not worth doing because <one line>. (So nobody re-audits it.)
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Quality bar — check before finishing each plan
|
|
192
|
+
|
|
193
|
+
- Could a model that has never seen this repo execute this with only the plan file and the repo? If any step requires knowledge from the advisor session, inline that knowledge.
|
|
194
|
+
- Is every verification a command with an expected result, not a judgment ("make sure it works")?
|
|
195
|
+
- Does every step name exact files and symbols, not "the relevant module"?
|
|
196
|
+
- Are the STOP conditions specific to this plan's actual risks, not boilerplate?
|
|
197
|
+
- Would a reviewer reading only "Why this matters" + "Done criteria" understand what they're approving?
|
|
198
|
+
- No secret values anywhere in the file — locations and credential types only.
|
|
199
|
+
- "Planned at" SHA is filled in and the in-scope paths in the drift check match the Scope section.
|
|
@@ -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
|
}
|
|
@@ -11,7 +11,7 @@ export interface PackMetadata {
|
|
|
11
11
|
}
|
|
12
12
|
export declare const PACK_METADATA: Record<string, PackMetadata>;
|
|
13
13
|
export declare function resolvePackDefaultScope(packName: string): 'user' | 'project';
|
|
14
|
-
export declare const WORKFLOW_SKILLS: readonly ["oat-project-capture", "oat-project-clear-active", "oat-project-complete", "oat-project-design", "oat-project-discover", "oat-project-document", "oat-project-implement", "oat-project-import-plan", "oat-project-new", "oat-project-next", "oat-project-open", "oat-project-plan", "oat-project-plan-writing", "oat-project-pr-final", "oat-project-pr-progress", "oat-project-progress", "oat-project-promote-spec-driven", "oat-project-quick-start", "oat-project-reconcile", "oat-project-revise", "oat-project-review-provide", "oat-project-review-provide-remote", "oat-project-review-receive", "oat-project-review-receive-remote", "oat-project-spec", "oat-project-split", "oat-project-summary", "oat-repo-knowledge-index", "oat-worktree-bootstrap", "oat-worktree-bootstrap-auto", "oat-wrap-up"];
|
|
14
|
+
export declare const WORKFLOW_SKILLS: readonly ["oat-project-capture", "oat-project-clear-active", "oat-project-complete", "oat-project-design", "oat-project-dispatch-subagents", "oat-project-discover", "oat-project-document", "oat-project-implement", "oat-project-import-plan", "oat-project-new", "oat-project-next", "oat-project-open", "oat-project-plan", "oat-project-plan-writing", "oat-project-pr-final", "oat-project-pr-progress", "oat-project-progress", "oat-project-promote-spec-driven", "oat-project-quick-start", "oat-project-reconcile", "oat-project-revise", "oat-project-review-provide", "oat-project-review-provide-remote", "oat-project-review-receive", "oat-project-review-receive-remote", "oat-project-spec", "oat-project-split", "oat-project-summary", "oat-repo-knowledge-index", "oat-worktree-bootstrap", "oat-worktree-bootstrap-auto", "oat-wrap-up"];
|
|
15
15
|
export declare const WORKFLOW_AGENTS: readonly ["oat-codebase-mapper.md", "oat-phase-implementer.md", "oat-reviewer.md"];
|
|
16
16
|
export declare const WORKFLOW_TEMPLATES: readonly ["state.md", "discovery.md", "spec.md", "design.md", "plan.md", "implementation.md", "summary.md"];
|
|
17
17
|
export declare const WORKFLOW_SCRIPTS: readonly ["generate-oat-state.sh", "generate-thin-index.sh", "resolve-tracking.sh"];
|
|
@@ -19,7 +19,7 @@ export declare const IDEA_SKILLS: readonly ["oat-idea-new", "oat-idea-ideate", "
|
|
|
19
19
|
export declare const CORE_SKILLS: readonly ["oat-docs", "oat-doctor"];
|
|
20
20
|
export declare const DOCS_SKILLS: readonly ["authoring-docs", "oat-agent-instructions-analyze", "oat-agent-instructions-apply", "oat-docs-analyze", "oat-docs-apply", "oat-docs-authoring", "oat-docs-bootstrap"];
|
|
21
21
|
export declare const DOCS_SCRIPTS: readonly ["resolve-tracking.sh"];
|
|
22
|
-
export declare const UTILITY_SKILLS: readonly ["create-agnostic-skill", "oat-repo-maintainability-review", "oat-review-provide", "oat-review-provide-remote", "oat-review-receive", "oat-review-receive-remote"];
|
|
22
|
+
export declare const UTILITY_SKILLS: readonly ["create-agnostic-skill", "oat-dispatch-subagents", "oat-repo-improve", "oat-repo-maintainability-review", "oat-review-provide", "oat-review-provide-remote", "oat-review-receive", "oat-review-receive-remote"];
|
|
23
23
|
export declare const PROJECT_MANAGEMENT_SKILLS: readonly ["oat-pjm-add-backlog-item", "oat-pjm-decision", "oat-pjm-update-repo-reference", "oat-pjm-review-backlog"];
|
|
24
24
|
export declare const PROJECT_MANAGEMENT_TEMPLATES: readonly ["backlog-item.md", "roadmap.md", "current-state.md", "decision.md", "repo-agents.md", "pjm-agents.md", "reference-agents.md"];
|
|
25
25
|
export declare const PROJECT_MANAGEMENT_SCRIPTS: readonly [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-manifest.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/shared/skill-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAKtD,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5E;AAID,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"skill-manifest.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/shared/skill-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAKtD,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5E;AAID,eAAO,MAAM,eAAe,+zBAiClB,CAAC;AAEX,eAAO,MAAM,eAAe,oFAIlB,CAAC;AAEX,eAAO,MAAM,kBAAkB,6GAQrB,CAAC;AAEX,eAAO,MAAM,gBAAgB,qFAInB,CAAC;AAIX,eAAO,MAAM,WAAW,2FAKd,CAAC;AAIX,eAAO,MAAM,WAAW,qCAAsC,CAAC;AAI/D,eAAO,MAAM,WAAW,iLAQd,CAAC;AAEX,eAAO,MAAM,YAAY,kCAAmC,CAAC;AAI7D,eAAO,MAAM,cAAc,2NASjB,CAAC;AAIX,eAAO,MAAM,yBAAyB,sHAK5B,CAAC;AAEX,eAAO,MAAM,4BAA4B,yIAQ/B,CAAC;AAEX,eAAO,MAAM,0BAA0B,aAAc,CAAC;AAItD,eAAO,MAAM,iBAAiB,6BAA8B,CAAC;AAI7D,eAAO,MAAM,eAAe,2EAMlB,CAAC;AAEX,eAAO,MAAM,eAAe,qCAAsC,CAAC"}
|
|
@@ -20,6 +20,7 @@ export const WORKFLOW_SKILLS = [
|
|
|
20
20
|
'oat-project-clear-active',
|
|
21
21
|
'oat-project-complete',
|
|
22
22
|
'oat-project-design',
|
|
23
|
+
'oat-project-dispatch-subagents',
|
|
23
24
|
'oat-project-discover',
|
|
24
25
|
'oat-project-document',
|
|
25
26
|
'oat-project-implement',
|
|
@@ -90,6 +91,8 @@ export const DOCS_SCRIPTS = ['resolve-tracking.sh'];
|
|
|
90
91
|
// ── Utility pack ───────────────────────────────────────────────────
|
|
91
92
|
export const UTILITY_SKILLS = [
|
|
92
93
|
'create-agnostic-skill',
|
|
94
|
+
'oat-dispatch-subagents',
|
|
95
|
+
'oat-repo-improve',
|
|
93
96
|
'oat-repo-maintainability-review',
|
|
94
97
|
'oat-review-provide',
|
|
95
98
|
'oat-review-provide-remote',
|
|
@@ -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.53",
|
|
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.53"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/node": "^22.10.0",
|