@open-agent-toolkit/cli 0.1.45 → 0.1.48
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 +202 -191
- package/assets/agents/oat-reviewer.md +12 -2
- package/assets/config/dispatch-matrix-recommendation.json +120 -13
- package/assets/docs/cli-utilities/config-and-local-state.md +7 -0
- package/assets/docs/cli-utilities/configuration.md +183 -84
- package/assets/docs/cli-utilities/workflow-gates.md +161 -27
- package/assets/docs/contributing/skills.md +14 -8
- package/assets/docs/provider-sync/config.md +5 -1
- package/assets/docs/provider-sync/manifest-and-drift.md +6 -1
- package/assets/docs/provider-sync/providers.md +42 -5
- package/assets/docs/provider-sync/scope-and-surface.md +3 -2
- package/assets/docs/reference/cli-reference.md +3 -1
- package/assets/docs/reference/oat-directory-structure.md +27 -26
- package/assets/docs/workflows/projects/artifacts.md +31 -1
- package/assets/docs/workflows/projects/dispatch-ceiling.md +235 -174
- package/assets/docs/workflows/projects/implementation-execution.md +283 -253
- package/assets/docs/workflows/projects/lifecycle.md +26 -5
- package/assets/docs/workflows/projects/reviews.md +27 -2
- package/assets/migration/pjm-restructure.md +1 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-implement/SKILL.md +347 -178
- package/assets/skills/oat-project-import-plan/SKILL.md +173 -16
- package/assets/skills/oat-project-next/SKILL.md +2 -2
- package/assets/skills/oat-project-plan/SKILL.md +122 -92
- package/assets/skills/oat-project-plan-writing/SKILL.md +246 -15
- package/assets/skills/oat-project-quick-start/SKILL.md +156 -94
- package/assets/skills/oat-project-review-provide/SKILL.md +94 -22
- package/dist/commands/config/index.d.ts +2 -2
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +129 -53
- package/dist/commands/doctor/index.d.ts +2 -2
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +102 -31
- package/dist/commands/gate/index.d.ts +7 -1
- package/dist/commands/gate/index.d.ts.map +1 -1
- package/dist/commands/gate/index.js +544 -67
- package/dist/commands/gate/review-verdict.d.ts +16 -0
- package/dist/commands/gate/review-verdict.d.ts.map +1 -1
- package/dist/commands/gate/review-verdict.js +72 -9
- package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
- package/dist/commands/project/dispatch-ceiling/index.js +586 -23
- package/dist/commands/providers/codex/index.d.ts +4 -0
- package/dist/commands/providers/codex/index.d.ts.map +1 -0
- package/dist/commands/providers/codex/index.js +7 -0
- package/dist/commands/providers/codex/materialize.d.ts +5 -0
- package/dist/commands/providers/codex/materialize.d.ts.map +1 -0
- package/dist/commands/providers/codex/materialize.js +157 -0
- package/dist/commands/providers/index.d.ts +2 -2
- package/dist/commands/providers/index.d.ts.map +1 -1
- package/dist/commands/providers/index.js +4 -2
- package/dist/commands/providers/providers.types.d.ts +23 -0
- package/dist/commands/providers/providers.types.d.ts.map +1 -1
- package/dist/commands/shared/codex-strays.d.ts.map +1 -1
- package/dist/commands/shared/codex-strays.js +11 -1
- package/dist/commands/shared/frontmatter.d.ts +4 -0
- package/dist/commands/shared/frontmatter.d.ts.map +1 -1
- package/dist/commands/shared/frontmatter.js +23 -0
- package/dist/commands/status/index.d.ts +5 -1
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +10 -4
- package/dist/commands/sync/index.d.ts.map +1 -1
- package/dist/commands/sync/index.js +10 -3
- package/dist/commands/sync/sync.types.d.ts +5 -1
- package/dist/commands/sync/sync.types.d.ts.map +1 -1
- package/dist/config/dispatch-ceiling-preset.d.ts +4 -0
- package/dist/config/dispatch-ceiling-preset.d.ts.map +1 -1
- package/dist/config/dispatch-ceiling-preset.js +3 -0
- package/dist/config/dispatch-policy-options.d.ts +20 -0
- package/dist/config/dispatch-policy-options.d.ts.map +1 -0
- package/dist/config/dispatch-policy-options.js +96 -0
- package/dist/config/oat-config.d.ts +25 -2
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +154 -24
- package/dist/config/resolve.d.ts +8 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +66 -2
- package/dist/engine/index.d.ts +1 -1
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +1 -1
- package/dist/engine/scanner.d.ts +1 -0
- package/dist/engine/scanner.d.ts.map +1 -1
- package/dist/engine/scanner.js +17 -1
- package/dist/fs/paths.d.ts +4 -0
- package/dist/fs/paths.d.ts.map +1 -1
- package/dist/fs/paths.js +18 -1
- package/dist/providers/ceiling/registry.d.ts +8 -5
- package/dist/providers/ceiling/registry.d.ts.map +1 -1
- package/dist/providers/ceiling/registry.js +25 -7
- package/dist/providers/codex/codec/catalog.d.ts +14 -0
- package/dist/providers/codex/codec/catalog.d.ts.map +1 -0
- package/dist/providers/codex/codec/catalog.js +21 -0
- package/dist/providers/codex/codec/config-merge.d.ts +6 -0
- package/dist/providers/codex/codec/config-merge.d.ts.map +1 -1
- package/dist/providers/codex/codec/config-merge.js +7 -0
- package/dist/providers/codex/codec/materialize.d.ts +16 -0
- package/dist/providers/codex/codec/materialize.d.ts.map +1 -0
- package/dist/providers/codex/codec/materialize.js +58 -0
- package/dist/providers/codex/codec/shared.d.ts +20 -0
- package/dist/providers/codex/codec/shared.d.ts.map +1 -1
- package/dist/providers/codex/codec/shared.js +107 -6
- package/dist/providers/codex/codec/sync-extension.d.ts +7 -1
- package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/codex/codec/sync-extension.js +299 -52
- package/dist/providers/identity/availability.d.ts +24 -1
- package/dist/providers/identity/availability.d.ts.map +1 -1
- package/dist/providers/identity/availability.js +253 -19
- package/dist/providers/identity/stamp.d.ts.map +1 -1
- package/dist/providers/identity/stamp.js +4 -0
- package/dist/shared/types.d.ts +1 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +4 -0
- package/package.json +2 -2
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { execFile } from 'node:child_process';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
2
|
import { promisify } from 'node:util';
|
|
4
|
-
import { VALID_CLAUDE_DISPATCH_CEILINGS
|
|
3
|
+
import { VALID_CLAUDE_DISPATCH_CEILINGS } from '../../config/oat-config.js';
|
|
5
4
|
import { fileExists } from '../../fs/io.js';
|
|
6
5
|
const execFileAsync = promisify(execFile);
|
|
6
|
+
export function normalizeMatrixCellAvailability(result) {
|
|
7
|
+
return typeof result === 'string' ? { availability: result } : result;
|
|
8
|
+
}
|
|
7
9
|
async function runCursorAgent(args, options) {
|
|
8
10
|
try {
|
|
9
11
|
const { stdout, stderr } = await execFileAsync('cursor-agent', args, {
|
|
@@ -27,9 +29,33 @@ async function runCursorAgent(args, options) {
|
|
|
27
29
|
};
|
|
28
30
|
}
|
|
29
31
|
}
|
|
32
|
+
async function runCodex(args, options) {
|
|
33
|
+
try {
|
|
34
|
+
const { stdout, stderr } = await execFileAsync('codex', args, {
|
|
35
|
+
cwd: options.cwd,
|
|
36
|
+
env: options.env,
|
|
37
|
+
maxBuffer: 16 * 1024 * 1024,
|
|
38
|
+
timeout: 10_000,
|
|
39
|
+
});
|
|
40
|
+
return {
|
|
41
|
+
ok: true,
|
|
42
|
+
stdout: String(stdout),
|
|
43
|
+
stderr: String(stderr),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
const failure = error;
|
|
48
|
+
return {
|
|
49
|
+
ok: false,
|
|
50
|
+
stdout: String(failure.stdout ?? ''),
|
|
51
|
+
stderr: String(failure.stderr ?? failure.message),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
30
55
|
const DEFAULT_DEPENDENCIES = {
|
|
31
56
|
pathExists: fileExists,
|
|
32
57
|
runCursorAgent,
|
|
58
|
+
runCodex,
|
|
33
59
|
env: process.env,
|
|
34
60
|
};
|
|
35
61
|
function apiKeyArgs(env) {
|
|
@@ -61,43 +87,245 @@ function availabilityFromCursorCatalog(value, stdout) {
|
|
|
61
87
|
? 'valid'
|
|
62
88
|
: 'unknown-value';
|
|
63
89
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
90
|
+
const CURSOR_SUBAGENT_PROBE_SENTINEL = 'OAT_CURSOR_SUBAGENT_MODEL_VALID';
|
|
91
|
+
function hasCursorSubagentProbeSentinel(stdout) {
|
|
92
|
+
return stdout
|
|
93
|
+
.split(/\r?\n/)
|
|
94
|
+
.some((line) => line.trim() === CURSOR_SUBAGENT_PROBE_SENTINEL);
|
|
95
|
+
}
|
|
96
|
+
function cursorSubagentProbePrompt(model) {
|
|
97
|
+
return [
|
|
98
|
+
'Validate whether a Cursor subagent Task can be launched with a specific model.',
|
|
99
|
+
`Use the Task tool once with model "${model}" and ask the subagent to reply exactly: ${CURSOR_SUBAGENT_PROBE_SENTINEL}.`,
|
|
100
|
+
'After the subagent returns, print only its exact reply.',
|
|
101
|
+
].join('\n');
|
|
102
|
+
}
|
|
103
|
+
function cursorSubagentProbeArgs(model, env) {
|
|
104
|
+
return [
|
|
105
|
+
...apiKeyArgs(env),
|
|
106
|
+
'-p',
|
|
107
|
+
cursorSubagentProbePrompt(model),
|
|
108
|
+
'--output-format=text',
|
|
109
|
+
'--force',
|
|
110
|
+
];
|
|
111
|
+
}
|
|
112
|
+
function unique(values) {
|
|
113
|
+
return [...new Set(values)];
|
|
114
|
+
}
|
|
115
|
+
function extractModelSlugs(value) {
|
|
116
|
+
const matches = value.match(/\b[a-z][a-z0-9]*(?:[-.][a-z0-9]+)+\b/gi) ?? [];
|
|
117
|
+
return unique(matches
|
|
118
|
+
.map((match) => match.replace(/[),.;:]+$/g, ''))
|
|
119
|
+
.filter((match) => /\d/.test(match)));
|
|
120
|
+
}
|
|
121
|
+
function parseCursorAllowedSubagentModels(output) {
|
|
122
|
+
const sections = [];
|
|
123
|
+
const patterns = [
|
|
124
|
+
/\ballowed\s+(?:subagent\s+)?models?\s*:?\s*([^\n]+)/gi,
|
|
125
|
+
/\bsupported\s+(?:subagent\s+)?models?\s*:?\s*([^\n]+)/gi,
|
|
126
|
+
/\bvalid\s+(?:subagent\s+)?models?\s*:?\s*([^\n]+)/gi,
|
|
127
|
+
/\bone\s+of\s*:?\s*([^\n]+)/gi,
|
|
128
|
+
];
|
|
129
|
+
for (const pattern of patterns) {
|
|
130
|
+
for (const match of output.matchAll(pattern)) {
|
|
131
|
+
if (match[1]) {
|
|
132
|
+
sections.push(match[1]);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return unique(sections.flatMap(extractModelSlugs));
|
|
137
|
+
}
|
|
138
|
+
function cursorAllowedModelsMessage(allowedValues) {
|
|
139
|
+
return `Allowed subagent models: ${allowedValues.join(', ')}.`;
|
|
140
|
+
}
|
|
141
|
+
function cursorRejectedMessage(allowedValues) {
|
|
142
|
+
return `Cursor rejected this model for subagent Task dispatch. ${cursorAllowedModelsMessage(allowedValues)}`;
|
|
143
|
+
}
|
|
144
|
+
function cursorCatalogContextMessage(value, availability) {
|
|
145
|
+
if (availability === 'valid') {
|
|
146
|
+
return `Cursor's broad model catalog lists '${value}', but subagent Task dispatch could not be validated.`;
|
|
147
|
+
}
|
|
148
|
+
if (availability === 'unknown-value') {
|
|
149
|
+
return `Cursor's broad model catalog does not list '${value}'.`;
|
|
150
|
+
}
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
function isRecord(value) {
|
|
154
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
155
|
+
}
|
|
156
|
+
function stringFromUnknown(value) {
|
|
157
|
+
return typeof value === 'string' && value.trim().length > 0
|
|
158
|
+
? value.trim()
|
|
159
|
+
: null;
|
|
160
|
+
}
|
|
161
|
+
function extractCodexEffort(value) {
|
|
162
|
+
if (typeof value === 'string') {
|
|
163
|
+
return stringFromUnknown(value);
|
|
164
|
+
}
|
|
165
|
+
if (!isRecord(value)) {
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
return (stringFromUnknown(value.effort) ??
|
|
169
|
+
stringFromUnknown(value.id) ??
|
|
170
|
+
stringFromUnknown(value.name));
|
|
171
|
+
}
|
|
172
|
+
function extractCodexEfforts(model) {
|
|
173
|
+
const efforts = [];
|
|
174
|
+
for (const key of [
|
|
175
|
+
'supported_reasoning_levels',
|
|
176
|
+
'supported_reasoning_efforts',
|
|
177
|
+
'supported_efforts',
|
|
178
|
+
]) {
|
|
179
|
+
const value = model[key];
|
|
180
|
+
if (!Array.isArray(value)) {
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
efforts.push(...value
|
|
184
|
+
.map(extractCodexEffort)
|
|
185
|
+
.filter((effort) => effort !== null));
|
|
67
186
|
}
|
|
187
|
+
const defaultEffort = stringFromUnknown(model.default_reasoning_level);
|
|
188
|
+
if (defaultEffort) {
|
|
189
|
+
efforts.push(defaultEffort);
|
|
190
|
+
}
|
|
191
|
+
return unique(efforts);
|
|
192
|
+
}
|
|
193
|
+
function parseCodexCatalog(stdout) {
|
|
194
|
+
let parsed;
|
|
68
195
|
try {
|
|
69
|
-
|
|
70
|
-
const reviewerExists = await dependencies.pathExists(join(cwd, '.codex', 'agents', `oat-reviewer-${value}.toml`));
|
|
71
|
-
return implementerExists && reviewerExists ? 'valid' : 'unknown-value';
|
|
196
|
+
parsed = JSON.parse(stdout);
|
|
72
197
|
}
|
|
73
198
|
catch {
|
|
74
|
-
return
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
if (!isRecord(parsed) || !Array.isArray(parsed.models)) {
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
const entries = [];
|
|
205
|
+
for (const model of parsed.models) {
|
|
206
|
+
if (!isRecord(model)) {
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
const slug = stringFromUnknown(model.slug);
|
|
210
|
+
if (!slug) {
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
const supportedEfforts = extractCodexEfforts(model);
|
|
214
|
+
entries.push({
|
|
215
|
+
slug,
|
|
216
|
+
supportedEfforts: supportedEfforts.length > 0 ? supportedEfforts : null,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
return entries.length > 0 ? entries : null;
|
|
220
|
+
}
|
|
221
|
+
function codexTargetFromValue(value, target) {
|
|
222
|
+
const targetModel = stringFromUnknown(target?.model);
|
|
223
|
+
const targetEffort = stringFromUnknown(target?.effort);
|
|
224
|
+
if (targetModel && targetEffort) {
|
|
225
|
+
return { model: targetModel, effort: targetEffort };
|
|
226
|
+
}
|
|
227
|
+
const [model, effort] = value.split('/');
|
|
228
|
+
return {
|
|
229
|
+
model: stringFromUnknown(model),
|
|
230
|
+
effort: stringFromUnknown(effort),
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
function codexUnsupportedEffortMessage(model, effort, supportedEfforts) {
|
|
234
|
+
return `Codex debug models lists '${model}', but effort '${effort}' is not supported. Supported Codex efforts: ${supportedEfforts.join(', ')}.`;
|
|
235
|
+
}
|
|
236
|
+
async function validateCodexCell(value, cwd, dependencies, target) {
|
|
237
|
+
const { model, effort } = codexTargetFromValue(value, target);
|
|
238
|
+
if (!model || !effort || value.trim().length === 0) {
|
|
239
|
+
return { availability: 'unknown-value' };
|
|
240
|
+
}
|
|
241
|
+
const result = await dependencies.runCodex(['debug', 'models'], {
|
|
242
|
+
cwd,
|
|
243
|
+
env: dependencies.env ?? process.env,
|
|
244
|
+
});
|
|
245
|
+
if (!result.ok) {
|
|
246
|
+
return { availability: 'unvalidated' };
|
|
247
|
+
}
|
|
248
|
+
const catalog = parseCodexCatalog(result.stdout);
|
|
249
|
+
if (!catalog) {
|
|
250
|
+
return { availability: 'unvalidated' };
|
|
251
|
+
}
|
|
252
|
+
const entry = catalog.find((modelEntry) => modelEntry.slug === model);
|
|
253
|
+
if (!entry) {
|
|
254
|
+
return {
|
|
255
|
+
availability: 'unknown-value',
|
|
256
|
+
message: `Codex debug models does not list '${model}'.`,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
if (!entry.supportedEfforts) {
|
|
260
|
+
return {
|
|
261
|
+
availability: 'unvalidated',
|
|
262
|
+
message: `Codex debug models lists '${model}', but supported reasoning efforts could not be parsed.`,
|
|
263
|
+
};
|
|
75
264
|
}
|
|
265
|
+
if (!entry.supportedEfforts.includes(effort)) {
|
|
266
|
+
return {
|
|
267
|
+
availability: 'unknown-value',
|
|
268
|
+
allowedValues: entry.supportedEfforts,
|
|
269
|
+
message: codexUnsupportedEffortMessage(model, effort, entry.supportedEfforts),
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
return { availability: 'valid' };
|
|
76
273
|
}
|
|
77
|
-
async function
|
|
274
|
+
export async function validateCursorSubagentModel(value, options) {
|
|
275
|
+
const dependencies = {
|
|
276
|
+
...DEFAULT_DEPENDENCIES,
|
|
277
|
+
env: options.env ?? DEFAULT_DEPENDENCIES.env,
|
|
278
|
+
...options.dependencies,
|
|
279
|
+
};
|
|
78
280
|
const env = dependencies.env ?? process.env;
|
|
79
|
-
const runOptions = { cwd, env };
|
|
281
|
+
const runOptions = { cwd: options.cwd, env };
|
|
282
|
+
const probeResult = await dependencies.runCursorAgent(cursorSubagentProbeArgs(value, env), runOptions);
|
|
283
|
+
const probeOutput = `${probeResult.stdout}\n${probeResult.stderr}`;
|
|
284
|
+
if (probeResult.ok && hasCursorSubagentProbeSentinel(probeResult.stdout)) {
|
|
285
|
+
return { availability: 'valid' };
|
|
286
|
+
}
|
|
287
|
+
const allowedValues = parseCursorAllowedSubagentModels(probeOutput);
|
|
288
|
+
if (allowedValues.length > 0) {
|
|
289
|
+
const availability = allowedValues.includes(value)
|
|
290
|
+
? 'valid'
|
|
291
|
+
: 'unknown-value';
|
|
292
|
+
return {
|
|
293
|
+
availability,
|
|
294
|
+
allowedValues,
|
|
295
|
+
message: availability === 'valid'
|
|
296
|
+
? cursorAllowedModelsMessage(allowedValues)
|
|
297
|
+
: cursorRejectedMessage(allowedValues),
|
|
298
|
+
};
|
|
299
|
+
}
|
|
80
300
|
const modelsResult = await dependencies.runCursorAgent([...apiKeyArgs(env), 'models'], runOptions);
|
|
81
301
|
if (modelsResult.ok) {
|
|
82
302
|
const availability = availabilityFromCursorCatalog(value, modelsResult.stdout);
|
|
83
303
|
if (availability !== null) {
|
|
84
|
-
return
|
|
304
|
+
return {
|
|
305
|
+
availability: availability === 'valid' ? 'unvalidated' : 'unknown-value',
|
|
306
|
+
message: cursorCatalogContextMessage(value, availability),
|
|
307
|
+
};
|
|
85
308
|
}
|
|
86
309
|
}
|
|
87
310
|
const listResult = await dependencies.runCursorAgent([...apiKeyArgs(env), '--list-models'], runOptions);
|
|
88
311
|
if (listResult.ok) {
|
|
89
312
|
const availability = availabilityFromCursorCatalog(value, listResult.stdout);
|
|
90
313
|
if (availability !== null) {
|
|
91
|
-
return
|
|
314
|
+
return {
|
|
315
|
+
availability: availability === 'valid' ? 'unvalidated' : 'unknown-value',
|
|
316
|
+
message: cursorCatalogContextMessage(value, availability),
|
|
317
|
+
};
|
|
92
318
|
}
|
|
93
319
|
}
|
|
94
|
-
return 'unvalidated';
|
|
320
|
+
return { availability: 'unvalidated' };
|
|
95
321
|
}
|
|
96
322
|
export async function validateMatrixCell(provider, value, options) {
|
|
97
323
|
const normalizedProvider = provider.trim().toLowerCase();
|
|
98
324
|
const normalizedValue = value.trim();
|
|
99
325
|
if (!normalizedProvider || !normalizedValue) {
|
|
100
|
-
return
|
|
326
|
+
return options.detailed
|
|
327
|
+
? { availability: 'unknown-value' }
|
|
328
|
+
: 'unknown-value';
|
|
101
329
|
}
|
|
102
330
|
const dependencies = {
|
|
103
331
|
...DEFAULT_DEPENDENCIES,
|
|
@@ -105,15 +333,21 @@ export async function validateMatrixCell(provider, value, options) {
|
|
|
105
333
|
...options.dependencies,
|
|
106
334
|
};
|
|
107
335
|
if (normalizedProvider === 'claude') {
|
|
108
|
-
|
|
336
|
+
const availability = VALID_CLAUDE_DISPATCH_CEILINGS.includes(normalizedValue)
|
|
109
337
|
? 'valid'
|
|
110
338
|
: 'unknown-value';
|
|
339
|
+
return options.detailed ? { availability } : availability;
|
|
111
340
|
}
|
|
112
341
|
if (normalizedProvider === 'codex') {
|
|
113
|
-
|
|
342
|
+
const result = await validateCodexCell(normalizedValue, options.cwd, dependencies, options.target);
|
|
343
|
+
return options.detailed ? result : result.availability;
|
|
114
344
|
}
|
|
115
345
|
if (normalizedProvider === 'cursor') {
|
|
116
|
-
|
|
346
|
+
const result = await validateCursorSubagentModel(normalizedValue, {
|
|
347
|
+
...options,
|
|
348
|
+
dependencies,
|
|
349
|
+
});
|
|
350
|
+
return options.detailed ? result : result.availability;
|
|
117
351
|
}
|
|
118
|
-
return 'unvalidated';
|
|
352
|
+
return options.detailed ? { availability: 'unvalidated' } : 'unvalidated';
|
|
119
353
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stamp.d.ts","sourceRoot":"","sources":["../../../src/providers/identity/stamp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,KAAK,GAAG,QAAQ,CAAC;AACjE,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,KAAK,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAc,SAAQ,mBAAmB;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAyDD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAiBvE;
|
|
1
|
+
{"version":3,"file":"stamp.d.ts","sourceRoot":"","sources":["../../../src/providers/identity/stamp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,KAAK,GAAG,QAAQ,CAAC;AACjE,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,KAAK,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAc,SAAQ,mBAAmB;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAyDD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAiBvE;AA6GD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,0BAA+B,GACvC,aAAa,EAAE,CAqBjB;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,0BAA+B,GACvC,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAepC"}
|
|
@@ -90,6 +90,10 @@ function parseModernStamp(line, lineNumber, fields, options) {
|
|
|
90
90
|
warn(options, lineNumber, 'missing or invalid role');
|
|
91
91
|
return undefined;
|
|
92
92
|
}
|
|
93
|
+
if (role !== inferRole(action)) {
|
|
94
|
+
warn(options, lineNumber, `incompatible action/role pair ${action}/${role}`);
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
93
97
|
const scope = singleToken(fields.get('scope'), '');
|
|
94
98
|
if (!scope) {
|
|
95
99
|
warn(options, lineNumber, 'missing scope');
|
package/dist/shared/types.d.ts
CHANGED
|
@@ -7,4 +7,5 @@ export declare const ScopeSchema: z.ZodEnum<["project", "user", "all"]>;
|
|
|
7
7
|
export type Scope = z.infer<typeof ScopeSchema>;
|
|
8
8
|
export type ConcreteScope = Exclude<Scope, 'all'>;
|
|
9
9
|
export declare const SCOPE_CONTENT_TYPES: Record<Scope, ContentType[]>;
|
|
10
|
+
export declare const USER_SCOPE_MANAGED_AGENT_FILES: readonly ["oat-phase-implementer.md", "oat-reviewer.md"];
|
|
10
11
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB,uCAAqC,CAAC;AACpE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,kBAAkB,wCAAsC,CAAC;AACtE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,WAAW,uCAAqC,CAAC;AAC9D,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAQlD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,CAI5D,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB,uCAAqC,CAAC;AACpE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,kBAAkB,wCAAsC,CAAC;AACtE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,WAAW,uCAAqC,CAAC;AAC9D,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAQlD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,CAI5D,CAAC;AAEF,eAAO,MAAM,8BAA8B,0DAGjC,CAAC"}
|
package/dist/shared/types.js
CHANGED
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.48",
|
|
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.48"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/node": "^22.10.0",
|