@open-agent-toolkit/cli 0.1.48 → 0.1.51
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 +16 -5
- package/assets/docs/cli-utilities/configuration.md +41 -0
- package/assets/docs/cli-utilities/workflow-gates.md +18 -1
- package/assets/docs/provider-sync/commands.md +29 -1
- package/assets/docs/provider-sync/providers.md +18 -5
- package/assets/docs/provider-sync/scope-and-surface.md +13 -0
- package/assets/docs/workflows/projects/dispatch-ceiling.md +59 -7
- package/assets/docs/workflows/projects/implementation-execution.md +63 -3
- package/assets/docs/workflows/projects/reviews.md +18 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-agent-instructions-analyze/references/docs/provider-reference.md +8 -2
- package/assets/skills/oat-agent-instructions-apply/references/docs/provider-reference.md +8 -2
- package/assets/skills/oat-project-implement/SKILL.md +141 -59
- package/assets/skills/oat-project-review-provide/SKILL.md +44 -10
- package/assets/skills/oat-project-review-provide-remote/SKILL.md +28 -1
- package/dist/commands/config/index.d.ts +3 -0
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +70 -128
- package/dist/commands/doctor/index.d.ts +3 -0
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +205 -195
- package/dist/commands/gate/index.d.ts.map +1 -1
- package/dist/commands/gate/index.js +72 -1
- package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
- package/dist/commands/project/dispatch-ceiling/index.js +224 -112
- package/dist/commands/providers/codex/materialize.d.ts.map +1 -1
- package/dist/commands/providers/codex/materialize.js +31 -15
- package/dist/config/dispatch-matrix.d.ts +59 -0
- package/dist/config/dispatch-matrix.d.ts.map +1 -0
- package/dist/config/dispatch-matrix.js +264 -0
- package/dist/config/oat-config.d.ts +2 -28
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +8 -144
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +2 -1
- package/dist/providers/codex/codec/config-merge.d.ts +8 -2
- package/dist/providers/codex/codec/config-merge.d.ts.map +1 -1
- package/dist/providers/codex/codec/config-merge.js +17 -2
- package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/codex/codec/sync-extension.js +14 -4
- package/dist/providers/identity/availability.d.ts +12 -0
- package/dist/providers/identity/availability.d.ts.map +1 -1
- package/dist/providers/identity/availability.js +72 -29
- package/dist/providers/identity/dispatch-report.d.ts +124 -0
- package/dist/providers/identity/dispatch-report.d.ts.map +1 -0
- package/dist/providers/identity/dispatch-report.js +285 -0
- package/dist/providers/identity/dispatch-validation.d.ts +28 -0
- package/dist/providers/identity/dispatch-validation.d.ts.map +1 -0
- package/dist/providers/identity/dispatch-validation.js +149 -0
- package/dist/providers/identity/stamp.d.ts +2 -0
- package/dist/providers/identity/stamp.d.ts.map +1 -1
- package/dist/providers/identity/stamp.js +3 -1
- package/package.json +2 -2
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
export const VALID_DISPATCH_MATRIX_TIERS = ['economy', 'balanced', 'high', 'frontier'];
|
|
2
|
+
const VALID_CODEX_PROVIDER_SCALARS = new Set([
|
|
3
|
+
'low',
|
|
4
|
+
'medium',
|
|
5
|
+
'high',
|
|
6
|
+
'xhigh',
|
|
7
|
+
'max',
|
|
8
|
+
]);
|
|
9
|
+
const VALID_CLAUDE_PROVIDER_SCALARS = new Set([
|
|
10
|
+
'haiku',
|
|
11
|
+
'sonnet',
|
|
12
|
+
'opus',
|
|
13
|
+
'fable',
|
|
14
|
+
]);
|
|
15
|
+
function isRecord(value) {
|
|
16
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
17
|
+
}
|
|
18
|
+
function trimNonEmptyString(value) {
|
|
19
|
+
if (typeof value !== 'string') {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
const trimmed = value.trim();
|
|
23
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
24
|
+
}
|
|
25
|
+
function normalizeProviderScalar(provider, value) {
|
|
26
|
+
const scalar = trimNonEmptyString(value);
|
|
27
|
+
if (scalar === undefined) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
if (provider === 'codex' && !VALID_CODEX_PROVIDER_SCALARS.has(scalar)) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
if (provider === 'claude' && !VALID_CLAUDE_PROVIDER_SCALARS.has(scalar)) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
return scalar;
|
|
37
|
+
}
|
|
38
|
+
function normalizeRouteTarget(value) {
|
|
39
|
+
if (!isRecord(value)) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
const target = {};
|
|
43
|
+
const harness = trimNonEmptyString(value.harness);
|
|
44
|
+
const model = trimNonEmptyString(value.model);
|
|
45
|
+
const effort = trimNonEmptyString(value.effort);
|
|
46
|
+
if (harness !== undefined) {
|
|
47
|
+
target.harness = harness;
|
|
48
|
+
}
|
|
49
|
+
if (model !== undefined) {
|
|
50
|
+
target.model = model;
|
|
51
|
+
}
|
|
52
|
+
if (effort !== undefined) {
|
|
53
|
+
target.effort = effort;
|
|
54
|
+
}
|
|
55
|
+
return Object.keys(target).length > 0 ? target : undefined;
|
|
56
|
+
}
|
|
57
|
+
function pushMalformedCandidate(issues, path, value) {
|
|
58
|
+
issues.push({ path, kind: 'malformed-candidate', value });
|
|
59
|
+
}
|
|
60
|
+
function normalizeRoute(provider, value, path, issues) {
|
|
61
|
+
if (!Array.isArray(value) || value.length === 0) {
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
const route = [];
|
|
65
|
+
for (const [index, entry] of value.entries()) {
|
|
66
|
+
const scalar = normalizeProviderScalar(provider, entry);
|
|
67
|
+
if (scalar !== undefined) {
|
|
68
|
+
route.push(scalar);
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const target = normalizeRouteTarget(entry);
|
|
72
|
+
if (target !== undefined) {
|
|
73
|
+
route.push(target);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
pushMalformedCandidate(issues, `${path}[${index}]`, entry);
|
|
77
|
+
}
|
|
78
|
+
return route.length > 0 ? route : undefined;
|
|
79
|
+
}
|
|
80
|
+
function normalizeCandidate(provider, value, path, issues) {
|
|
81
|
+
const scalar = normalizeProviderScalar(provider, value);
|
|
82
|
+
if (scalar !== undefined) {
|
|
83
|
+
return scalar;
|
|
84
|
+
}
|
|
85
|
+
if (isRecord(value) && Object.hasOwn(value, 'route')) {
|
|
86
|
+
const issueCount = issues.length;
|
|
87
|
+
const route = normalizeRoute(provider, value.route, `${path}.route`, issues);
|
|
88
|
+
if (route !== undefined) {
|
|
89
|
+
return { route };
|
|
90
|
+
}
|
|
91
|
+
if (issues.length === issueCount) {
|
|
92
|
+
pushMalformedCandidate(issues, path, value);
|
|
93
|
+
}
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
const target = normalizeRouteTarget(value);
|
|
97
|
+
if (target !== undefined) {
|
|
98
|
+
return target;
|
|
99
|
+
}
|
|
100
|
+
pushMalformedCandidate(issues, path, value);
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
function normalizeMatrixCell(provider, value, path, issues, compatibilityMode) {
|
|
104
|
+
const scalar = normalizeProviderScalar(provider, value);
|
|
105
|
+
if (scalar !== undefined) {
|
|
106
|
+
return { candidates: [scalar] };
|
|
107
|
+
}
|
|
108
|
+
if (isWorkflowDispatchCandidateLadder(value)) {
|
|
109
|
+
const candidates = [];
|
|
110
|
+
for (const [index, candidate] of value.candidates.entries()) {
|
|
111
|
+
const normalized = normalizeCandidate(provider, candidate, `${path}.candidates[${index}]`, issues);
|
|
112
|
+
if (normalized !== undefined) {
|
|
113
|
+
candidates.push(normalized);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (value.candidates.length === 0) {
|
|
117
|
+
pushMalformedCandidate(issues, path, value);
|
|
118
|
+
}
|
|
119
|
+
return candidates.length > 0 ? { candidates } : undefined;
|
|
120
|
+
}
|
|
121
|
+
if (compatibilityMode === 'layered-config') {
|
|
122
|
+
const target = normalizeRouteTarget(value);
|
|
123
|
+
if (target !== undefined) {
|
|
124
|
+
return { candidates: [target] };
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (Array.isArray(value)) {
|
|
128
|
+
const issueCount = issues.length;
|
|
129
|
+
const route = normalizeRoute(provider, value, path, issues);
|
|
130
|
+
if (route !== undefined) {
|
|
131
|
+
return { candidates: [{ route }] };
|
|
132
|
+
}
|
|
133
|
+
if (issues.length === issueCount) {
|
|
134
|
+
pushMalformedCandidate(issues, path, value);
|
|
135
|
+
}
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
pushMalformedCandidate(issues, path, value);
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
export function normalizeDispatchMatrix(value, options) {
|
|
142
|
+
const providers = {};
|
|
143
|
+
const issues = [];
|
|
144
|
+
if (!isRecord(value)) {
|
|
145
|
+
return {
|
|
146
|
+
providers,
|
|
147
|
+
issues: [
|
|
148
|
+
{
|
|
149
|
+
path: options.pathPrefix,
|
|
150
|
+
kind: 'malformed-provider',
|
|
151
|
+
value,
|
|
152
|
+
},
|
|
153
|
+
],
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
for (const [provider, rawProviderValue] of Object.entries(value)) {
|
|
157
|
+
const providerPath = `${options.pathPrefix}.${provider}`;
|
|
158
|
+
const scalar = normalizeProviderScalar(provider, rawProviderValue);
|
|
159
|
+
if (scalar !== undefined) {
|
|
160
|
+
providers[provider] = scalar;
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
if (!isRecord(rawProviderValue)) {
|
|
164
|
+
issues.push({
|
|
165
|
+
path: providerPath,
|
|
166
|
+
kind: 'malformed-provider',
|
|
167
|
+
value: rawProviderValue,
|
|
168
|
+
});
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
const tiers = {};
|
|
172
|
+
for (const [tier, rawCell] of Object.entries(rawProviderValue)) {
|
|
173
|
+
const tierPath = `${providerPath}.${tier}`;
|
|
174
|
+
if (!VALID_DISPATCH_MATRIX_TIERS.includes(tier)) {
|
|
175
|
+
issues.push({ path: tierPath, kind: 'malformed-tier', value: rawCell });
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
const normalized = normalizeMatrixCell(provider, rawCell, tierPath, issues, options.compatibilityMode);
|
|
179
|
+
if (normalized !== undefined) {
|
|
180
|
+
tiers[tier] = normalized;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if (Object.keys(tiers).length > 0) {
|
|
184
|
+
providers[provider] = tiers;
|
|
185
|
+
}
|
|
186
|
+
else if (Object.keys(rawProviderValue).length === 0) {
|
|
187
|
+
issues.push({
|
|
188
|
+
path: providerPath,
|
|
189
|
+
kind: 'malformed-provider',
|
|
190
|
+
value: rawProviderValue,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return { providers, issues };
|
|
195
|
+
}
|
|
196
|
+
export function isCodexMaterializedRouteTarget(provider, target) {
|
|
197
|
+
return (target.harness ?? provider) === 'codex';
|
|
198
|
+
}
|
|
199
|
+
export function validateDispatchRouteTarget(provider, target) {
|
|
200
|
+
if (!isCodexMaterializedRouteTarget(provider, target)) {
|
|
201
|
+
return { valid: true };
|
|
202
|
+
}
|
|
203
|
+
if (!target.model || !target.effort) {
|
|
204
|
+
return {
|
|
205
|
+
valid: false,
|
|
206
|
+
reason: 'Codex materialized dispatch targets must provide both model and effort.',
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
return { valid: true };
|
|
210
|
+
}
|
|
211
|
+
export function isWorkflowDispatchFallbackRoute(value) {
|
|
212
|
+
return isRecord(value) && Array.isArray(value.route);
|
|
213
|
+
}
|
|
214
|
+
export function isWorkflowDispatchCandidateLadder(value) {
|
|
215
|
+
return isRecord(value) && Array.isArray(value.candidates);
|
|
216
|
+
}
|
|
217
|
+
export function toWorkflowDispatchCandidateLadder(cell) {
|
|
218
|
+
if (isWorkflowDispatchCandidateLadder(cell)) {
|
|
219
|
+
return cell;
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
candidates: [Array.isArray(cell) ? { route: cell } : cell],
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
function appendRef(refs, provider, tier, candidateIndex, fallbackRouteIndex, entry, path, source) {
|
|
226
|
+
refs.push({
|
|
227
|
+
provider,
|
|
228
|
+
tier,
|
|
229
|
+
candidateIndex,
|
|
230
|
+
fallbackRouteIndex,
|
|
231
|
+
value: typeof entry === 'string' ? entry : null,
|
|
232
|
+
target: typeof entry === 'string' ? null : entry,
|
|
233
|
+
path,
|
|
234
|
+
source,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
export function walkDispatchMatrix(providers, context) {
|
|
238
|
+
const refs = [];
|
|
239
|
+
for (const [provider, providerValue] of Object.entries(providers)) {
|
|
240
|
+
const providerPath = `${context.pathPrefix}.${provider}`;
|
|
241
|
+
if (typeof providerValue === 'string') {
|
|
242
|
+
appendRef(refs, provider, null, null, null, providerValue, providerPath, context.source);
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
for (const tier of VALID_DISPATCH_MATRIX_TIERS) {
|
|
246
|
+
const cell = providerValue[tier];
|
|
247
|
+
if (cell === undefined) {
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
const ladder = toWorkflowDispatchCandidateLadder(cell);
|
|
251
|
+
for (const [candidateIndex, candidate] of ladder.candidates.entries()) {
|
|
252
|
+
const candidatePath = `${providerPath}.${tier}.candidates[${candidateIndex}]`;
|
|
253
|
+
if (isWorkflowDispatchFallbackRoute(candidate)) {
|
|
254
|
+
for (const [routeIndex, entry] of candidate.route.entries()) {
|
|
255
|
+
appendRef(refs, provider, tier, candidateIndex, routeIndex, entry, `${candidatePath}.route[${routeIndex}]`, context.source);
|
|
256
|
+
}
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
appendRef(refs, provider, tier, candidateIndex, null, candidate, candidatePath, context.source);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return refs;
|
|
264
|
+
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { type WorkflowDispatchProviderValue } from './dispatch-matrix.js';
|
|
2
|
+
export { VALID_DISPATCH_MATRIX_TIERS, isCodexMaterializedRouteTarget, isWorkflowDispatchCandidateLadder, isWorkflowDispatchFallbackRoute, toWorkflowDispatchCandidateLadder, validateDispatchRouteTarget, type DispatchRouteTargetValidation, type WorkflowDispatchCandidate, type WorkflowDispatchCandidateLadder, type WorkflowDispatchFallbackRoute, type WorkflowDispatchLegacyMatrixCell, type WorkflowDispatchMatrixCell, type WorkflowDispatchMatrixTier, type WorkflowDispatchProviderValue, type WorkflowDispatchRoute, type WorkflowDispatchRouteEntry, type WorkflowDispatchRouteTarget, } from './dispatch-matrix.js';
|
|
1
3
|
export interface OatDocumentationConfig {
|
|
2
4
|
root?: string;
|
|
3
5
|
tooling?: string;
|
|
@@ -25,28 +27,6 @@ export type WorkflowClaudeDispatchCeiling = 'haiku' | 'sonnet' | 'opus' | 'fable
|
|
|
25
27
|
export type WorkflowDispatchCeilingPreset = 'balanced' | 'maximum' | 'cost-conscious';
|
|
26
28
|
export type WorkflowDispatchPolicyMode = 'managed' | 'inherit';
|
|
27
29
|
export type WorkflowManagedDispatchPolicy = 'economy' | 'balanced' | 'high' | 'frontier' | 'uncapped';
|
|
28
|
-
export type WorkflowDispatchMatrixTier = Exclude<WorkflowManagedDispatchPolicy, 'uncapped'>;
|
|
29
|
-
export interface WorkflowDispatchRouteTarget {
|
|
30
|
-
harness?: string;
|
|
31
|
-
model?: string;
|
|
32
|
-
effort?: string;
|
|
33
|
-
}
|
|
34
|
-
export interface DispatchRouteTargetValidation {
|
|
35
|
-
valid: boolean;
|
|
36
|
-
reason?: string;
|
|
37
|
-
}
|
|
38
|
-
export type WorkflowDispatchRouteEntry = string | WorkflowDispatchRouteTarget;
|
|
39
|
-
export type WorkflowDispatchRoute = WorkflowDispatchRouteEntry[];
|
|
40
|
-
export interface WorkflowDispatchFallbackRoute {
|
|
41
|
-
route: WorkflowDispatchRoute;
|
|
42
|
-
}
|
|
43
|
-
export type WorkflowDispatchCandidate = WorkflowDispatchRouteEntry | WorkflowDispatchFallbackRoute;
|
|
44
|
-
export interface WorkflowDispatchCandidateLadder {
|
|
45
|
-
candidates: WorkflowDispatchCandidate[];
|
|
46
|
-
}
|
|
47
|
-
export type WorkflowDispatchLegacyMatrixCell = string | WorkflowDispatchRoute;
|
|
48
|
-
export type WorkflowDispatchMatrixCell = WorkflowDispatchCandidateLadder | WorkflowDispatchLegacyMatrixCell;
|
|
49
|
-
export type WorkflowDispatchProviderValue = string | Partial<Record<WorkflowDispatchMatrixTier, WorkflowDispatchMatrixCell>>;
|
|
50
30
|
export type GateOnFailure = 'block' | 'prompt' | 'warn';
|
|
51
31
|
export type GateAvoid = 'same-family' | 'same-runtime' | 'none';
|
|
52
32
|
export interface WorkflowDispatchCeiling {
|
|
@@ -105,13 +85,7 @@ export declare const VALID_CLAUDE_DISPATCH_CEILINGS: readonly WorkflowClaudeDisp
|
|
|
105
85
|
export declare const VALID_DISPATCH_CEILING_PRESETS: readonly WorkflowDispatchCeilingPreset[];
|
|
106
86
|
export declare const VALID_DISPATCH_POLICY_MODES: readonly WorkflowDispatchPolicyMode[];
|
|
107
87
|
export declare const VALID_MANAGED_DISPATCH_POLICIES: readonly WorkflowManagedDispatchPolicy[];
|
|
108
|
-
export declare const VALID_DISPATCH_MATRIX_TIERS: readonly WorkflowDispatchMatrixTier[];
|
|
109
88
|
export declare const BUILTIN_EXEC_TARGETS: Readonly<Record<string, ExecTarget>>;
|
|
110
|
-
export declare function isCodexMaterializedRouteTarget(provider: string, target: WorkflowDispatchRouteTarget): boolean;
|
|
111
|
-
export declare function validateDispatchRouteTarget(provider: string, target: WorkflowDispatchRouteTarget): DispatchRouteTargetValidation;
|
|
112
|
-
export declare function isWorkflowDispatchFallbackRoute(value: unknown): value is WorkflowDispatchFallbackRoute;
|
|
113
|
-
export declare function isWorkflowDispatchCandidateLadder(value: unknown): value is WorkflowDispatchCandidateLadder;
|
|
114
|
-
export declare function toWorkflowDispatchCandidateLadder(cell: WorkflowDispatchMatrixCell): WorkflowDispatchCandidateLadder;
|
|
115
89
|
export type OatToolsConfig = Partial<Record<'core' | 'ideas' | 'docs' | 'workflows' | 'utility' | 'project-management' | 'research' | 'brainstorm', boolean>>;
|
|
116
90
|
export interface OatConfig {
|
|
117
91
|
version: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oat-config.d.ts","sourceRoot":"","sources":["../../src/config/oat-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"oat-config.d.ts","sourceRoot":"","sources":["../../src/config/oat-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,9 @@ import { lstat, readFile } from 'node:fs/promises';
|
|
|
3
3
|
import { basename, isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
4
4
|
import { atomicWriteJson, dirExists, fileExists } from '../fs/io.js';
|
|
5
5
|
import { normalizeToPosixPath, validateRealPathWithinScope } from '../fs/paths.js';
|
|
6
|
+
import { normalizeDispatchMatrix, } from './dispatch-matrix.js';
|
|
6
7
|
import { parseJsonConfig } from './json.js';
|
|
8
|
+
export { VALID_DISPATCH_MATRIX_TIERS, isCodexMaterializedRouteTarget, isWorkflowDispatchCandidateLadder, isWorkflowDispatchFallbackRoute, toWorkflowDispatchCandidateLadder, validateDispatchRouteTarget, } from './dispatch-matrix.js';
|
|
7
9
|
const VALID_HILL_CHECKPOINT_DEFAULTS = ['every', 'final'];
|
|
8
10
|
const VALID_POST_IMPLEMENT_SEQUENCES = ['wait', 'summary', 'pr', 'docs-pr'];
|
|
9
11
|
const VALID_REVIEW_EXECUTION_MODELS = [
|
|
@@ -21,7 +23,6 @@ export const VALID_CLAUDE_DISPATCH_CEILINGS = ['haiku', 'sonnet', 'opus', 'fable
|
|
|
21
23
|
export const VALID_DISPATCH_CEILING_PRESETS = ['balanced', 'maximum', 'cost-conscious'];
|
|
22
24
|
export const VALID_DISPATCH_POLICY_MODES = ['managed', 'inherit'];
|
|
23
25
|
export const VALID_MANAGED_DISPATCH_POLICIES = ['economy', 'balanced', 'high', 'frontier', 'uncapped'];
|
|
24
|
-
export const VALID_DISPATCH_MATRIX_TIERS = ['economy', 'balanced', 'high', 'frontier'];
|
|
25
26
|
const VALID_GATE_ON_FAILURES = [
|
|
26
27
|
'block',
|
|
27
28
|
'prompt',
|
|
@@ -70,35 +71,6 @@ export const BUILTIN_EXEC_TARGETS = {
|
|
|
70
71
|
priority: 70,
|
|
71
72
|
},
|
|
72
73
|
};
|
|
73
|
-
export function isCodexMaterializedRouteTarget(provider, target) {
|
|
74
|
-
return (target.harness ?? provider) === 'codex';
|
|
75
|
-
}
|
|
76
|
-
export function validateDispatchRouteTarget(provider, target) {
|
|
77
|
-
if (!isCodexMaterializedRouteTarget(provider, target)) {
|
|
78
|
-
return { valid: true };
|
|
79
|
-
}
|
|
80
|
-
if (!target.model || !target.effort) {
|
|
81
|
-
return {
|
|
82
|
-
valid: false,
|
|
83
|
-
reason: 'Codex materialized dispatch targets must provide both model and effort.',
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
return { valid: true };
|
|
87
|
-
}
|
|
88
|
-
export function isWorkflowDispatchFallbackRoute(value) {
|
|
89
|
-
return isRecord(value) && Array.isArray(value.route);
|
|
90
|
-
}
|
|
91
|
-
export function isWorkflowDispatchCandidateLadder(value) {
|
|
92
|
-
return isRecord(value) && Array.isArray(value.candidates);
|
|
93
|
-
}
|
|
94
|
-
export function toWorkflowDispatchCandidateLadder(cell) {
|
|
95
|
-
if (isWorkflowDispatchCandidateLadder(cell)) {
|
|
96
|
-
return cell;
|
|
97
|
-
}
|
|
98
|
-
return {
|
|
99
|
-
candidates: [Array.isArray(cell) ? { route: cell } : cell],
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
74
|
function normalizeMaxAttempts(value) {
|
|
103
75
|
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
104
76
|
return 2;
|
|
@@ -150,111 +122,6 @@ function normalizeGateConfig(value) {
|
|
|
150
122
|
}
|
|
151
123
|
return gate;
|
|
152
124
|
}
|
|
153
|
-
function normalizeProviderBareValue(providerKey, value) {
|
|
154
|
-
const trimmed = trimNonEmptyString(value);
|
|
155
|
-
if (trimmed === undefined) {
|
|
156
|
-
return undefined;
|
|
157
|
-
}
|
|
158
|
-
if (providerKey === 'codex' &&
|
|
159
|
-
!VALID_CODEX_DISPATCH_CEILINGS.includes(trimmed)) {
|
|
160
|
-
return undefined;
|
|
161
|
-
}
|
|
162
|
-
if (providerKey === 'claude' &&
|
|
163
|
-
!VALID_CLAUDE_DISPATCH_CEILINGS.includes(trimmed)) {
|
|
164
|
-
return undefined;
|
|
165
|
-
}
|
|
166
|
-
return trimmed;
|
|
167
|
-
}
|
|
168
|
-
function normalizeDispatchRouteTarget(value) {
|
|
169
|
-
if (!isRecord(value)) {
|
|
170
|
-
return undefined;
|
|
171
|
-
}
|
|
172
|
-
const target = {};
|
|
173
|
-
const harness = trimNonEmptyString(value.harness);
|
|
174
|
-
if (harness !== undefined) {
|
|
175
|
-
target.harness = harness;
|
|
176
|
-
}
|
|
177
|
-
const model = trimNonEmptyString(value.model);
|
|
178
|
-
if (model !== undefined) {
|
|
179
|
-
target.model = model;
|
|
180
|
-
}
|
|
181
|
-
const effort = trimNonEmptyString(value.effort);
|
|
182
|
-
if (effort !== undefined) {
|
|
183
|
-
target.effort = effort;
|
|
184
|
-
}
|
|
185
|
-
return Object.keys(target).length > 0 ? target : undefined;
|
|
186
|
-
}
|
|
187
|
-
function normalizeDispatchRoute(providerKey, value) {
|
|
188
|
-
if (!Array.isArray(value) || value.length === 0) {
|
|
189
|
-
return undefined;
|
|
190
|
-
}
|
|
191
|
-
const route = [];
|
|
192
|
-
for (const entry of value) {
|
|
193
|
-
const bareEntry = normalizeProviderBareValue(providerKey, entry);
|
|
194
|
-
if (bareEntry !== undefined) {
|
|
195
|
-
route.push(bareEntry);
|
|
196
|
-
continue;
|
|
197
|
-
}
|
|
198
|
-
const target = normalizeDispatchRouteTarget(entry);
|
|
199
|
-
if (target !== undefined) {
|
|
200
|
-
route.push(target);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
return route.length > 0 ? route : undefined;
|
|
204
|
-
}
|
|
205
|
-
function normalizeDispatchCandidate(providerKey, value) {
|
|
206
|
-
const bareValue = normalizeProviderBareValue(providerKey, value);
|
|
207
|
-
if (bareValue !== undefined) {
|
|
208
|
-
return bareValue;
|
|
209
|
-
}
|
|
210
|
-
if (isRecord(value) && Object.hasOwn(value, 'route')) {
|
|
211
|
-
const route = normalizeDispatchRoute(providerKey, value.route);
|
|
212
|
-
return route ? { route } : undefined;
|
|
213
|
-
}
|
|
214
|
-
return normalizeDispatchRouteTarget(value);
|
|
215
|
-
}
|
|
216
|
-
function normalizeDispatchMatrixCell(providerKey, value) {
|
|
217
|
-
const bareValue = normalizeProviderBareValue(providerKey, value);
|
|
218
|
-
if (bareValue !== undefined) {
|
|
219
|
-
return { candidates: [bareValue] };
|
|
220
|
-
}
|
|
221
|
-
if (isWorkflowDispatchCandidateLadder(value)) {
|
|
222
|
-
const candidates = [];
|
|
223
|
-
for (const candidate of value.candidates) {
|
|
224
|
-
const normalized = normalizeDispatchCandidate(providerKey, candidate);
|
|
225
|
-
if (normalized !== undefined) {
|
|
226
|
-
candidates.push(normalized);
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
return candidates.length > 0 ? { candidates } : undefined;
|
|
230
|
-
}
|
|
231
|
-
const directTarget = normalizeDispatchRouteTarget(value);
|
|
232
|
-
if (directTarget !== undefined) {
|
|
233
|
-
return { candidates: [directTarget] };
|
|
234
|
-
}
|
|
235
|
-
const route = normalizeDispatchRoute(providerKey, value);
|
|
236
|
-
return route ? { candidates: [{ route }] } : undefined;
|
|
237
|
-
}
|
|
238
|
-
function normalizeDispatchProviderValue(providerKey, value) {
|
|
239
|
-
const bareValue = normalizeProviderBareValue(providerKey, value);
|
|
240
|
-
if (bareValue !== undefined) {
|
|
241
|
-
return bareValue;
|
|
242
|
-
}
|
|
243
|
-
if (!isRecord(value)) {
|
|
244
|
-
return undefined;
|
|
245
|
-
}
|
|
246
|
-
const tierMap = {};
|
|
247
|
-
for (const [tier, rawCell] of Object.entries(value)) {
|
|
248
|
-
if (!VALID_DISPATCH_MATRIX_TIERS.includes(tier)) {
|
|
249
|
-
continue;
|
|
250
|
-
}
|
|
251
|
-
const normalized = normalizeDispatchMatrixCell(providerKey, rawCell);
|
|
252
|
-
if (normalized !== undefined) {
|
|
253
|
-
tierMap[tier] = normalized;
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
return Object.keys(tierMap).length > 0 ? tierMap : undefined;
|
|
257
|
-
}
|
|
258
125
|
function normalizeExecTarget(value) {
|
|
259
126
|
if (value === null) {
|
|
260
127
|
return null;
|
|
@@ -393,15 +260,12 @@ function normalizeWorkflowConfig(parsed) {
|
|
|
393
260
|
dispatchCeiling.recommendationVersion = recommendationVersion;
|
|
394
261
|
}
|
|
395
262
|
if (isRecord(parsed.dispatchCeiling.providers)) {
|
|
396
|
-
const
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
}
|
|
403
|
-
if (Object.keys(providers).length > 0) {
|
|
404
|
-
dispatchCeiling.providers = providers;
|
|
263
|
+
const normalized = normalizeDispatchMatrix(parsed.dispatchCeiling.providers, {
|
|
264
|
+
pathPrefix: 'workflow.dispatchCeiling.providers',
|
|
265
|
+
compatibilityMode: 'layered-config',
|
|
266
|
+
});
|
|
267
|
+
if (Object.keys(normalized.providers).length > 0) {
|
|
268
|
+
dispatchCeiling.providers = normalized.providers;
|
|
405
269
|
}
|
|
406
270
|
}
|
|
407
271
|
if (Object.keys(dispatchCeiling).length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,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,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isWorkflowDispatchCandidateLadder } from './dispatch-matrix.js';
|
|
2
|
+
import { BUILTIN_EXEC_TARGETS, readOatConfig, readOatLocalConfig, readUserConfig, } from './oat-config.js';
|
|
2
3
|
const DEFAULT_DEPENDENCIES = {
|
|
3
4
|
readOatConfig,
|
|
4
5
|
readOatLocalConfig,
|
|
@@ -7,17 +7,23 @@ export interface CodexConfigMergeArgs {
|
|
|
7
7
|
existingContent: string | null;
|
|
8
8
|
desiredRoles: CodexManagedRoleConfig[];
|
|
9
9
|
staleManagedRoles?: string[];
|
|
10
|
+
inheritedMaxDepth?: number;
|
|
10
11
|
}
|
|
11
12
|
export interface CodexSingleRoleConfigMergeArgs {
|
|
12
13
|
existingContent: string | null;
|
|
13
14
|
role: CodexManagedRoleConfig;
|
|
14
15
|
staleManagedRoles?: string[];
|
|
16
|
+
inheritedMaxDepth?: number;
|
|
15
17
|
}
|
|
16
18
|
export interface CodexConfigMergeResult {
|
|
17
19
|
mergedContent: string;
|
|
18
20
|
changed: boolean;
|
|
19
21
|
removedRoles: string[];
|
|
20
22
|
}
|
|
21
|
-
|
|
22
|
-
export declare function
|
|
23
|
+
/** Reads a valid numeric agents.max_depth value from Codex TOML content. */
|
|
24
|
+
export declare function readCodexMaxDepth(content: string | null): number | null;
|
|
25
|
+
/** Merges managed Codex roles and required shared agent configuration. */
|
|
26
|
+
export declare function mergeCodexConfig({ existingContent, desiredRoles, staleManagedRoles, inheritedMaxDepth, }: CodexConfigMergeArgs): CodexConfigMergeResult;
|
|
27
|
+
/** Merges one managed Codex role using the shared configuration contract. */
|
|
28
|
+
export declare function mergeCodexConfigForRole({ existingContent, role, staleManagedRoles, inheritedMaxDepth, }: CodexSingleRoleConfigMergeArgs): CodexConfigMergeResult;
|
|
23
29
|
//# sourceMappingURL=config-merge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-merge.d.ts","sourceRoot":"","sources":["../../../../src/providers/codex/codec/config-merge.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,sBAAsB,EAAE,CAAC;IACvC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"config-merge.d.ts","sourceRoot":"","sources":["../../../../src/providers/codex/codec/config-merge.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,sBAAsB,EAAE,CAAC;IACvC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,8BAA8B;IAC7C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAqCD,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAIvE;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,EAC/B,eAAe,EACf,YAAY,EACZ,iBAAsB,EACtB,iBAAiB,GAClB,EAAE,oBAAoB,GAAG,sBAAsB,CA8C/C;AAED,6EAA6E;AAC7E,wBAAgB,uBAAuB,CAAC,EACtC,eAAe,EACf,IAAI,EACJ,iBAAsB,EACtB,iBAAiB,GAClB,EAAE,8BAA8B,GAAG,sBAAsB,CAOzD"}
|
|
@@ -25,10 +25,23 @@ function getObject(value) {
|
|
|
25
25
|
}
|
|
26
26
|
return { ...value };
|
|
27
27
|
}
|
|
28
|
-
|
|
28
|
+
function getFiniteNumber(value) {
|
|
29
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : null;
|
|
30
|
+
}
|
|
31
|
+
/** Reads a valid numeric agents.max_depth value from Codex TOML content. */
|
|
32
|
+
export function readCodexMaxDepth(content) {
|
|
33
|
+
const parsed = parseConfig(content);
|
|
34
|
+
const agents = getObject(parsed.agents);
|
|
35
|
+
return getFiniteNumber(agents.max_depth);
|
|
36
|
+
}
|
|
37
|
+
/** Merges managed Codex roles and required shared agent configuration. */
|
|
38
|
+
export function mergeCodexConfig({ existingContent, desiredRoles, staleManagedRoles = [], inheritedMaxDepth, }) {
|
|
29
39
|
const parsed = parseConfig(existingContent);
|
|
30
40
|
const features = getObject(parsed.features);
|
|
31
41
|
const agents = getObject(parsed.agents);
|
|
42
|
+
const targetMaxDepth = getFiniteNumber(agents.max_depth);
|
|
43
|
+
const validInheritedMaxDepth = getFiniteNumber(inheritedMaxDepth);
|
|
44
|
+
agents.max_depth = Math.max(2, targetMaxDepth ?? 2, validInheritedMaxDepth ?? 2);
|
|
32
45
|
const nextConfig = {
|
|
33
46
|
...parsed,
|
|
34
47
|
features: {
|
|
@@ -59,10 +72,12 @@ export function mergeCodexConfig({ existingContent, desiredRoles, staleManagedRo
|
|
|
59
72
|
removedRoles,
|
|
60
73
|
};
|
|
61
74
|
}
|
|
62
|
-
|
|
75
|
+
/** Merges one managed Codex role using the shared configuration contract. */
|
|
76
|
+
export function mergeCodexConfigForRole({ existingContent, role, staleManagedRoles = [], inheritedMaxDepth, }) {
|
|
63
77
|
return mergeCodexConfig({
|
|
64
78
|
existingContent,
|
|
65
79
|
desiredRoles: [role],
|
|
66
80
|
staleManagedRoles,
|
|
81
|
+
inheritedMaxDepth,
|
|
67
82
|
});
|
|
68
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-extension.d.ts","sourceRoot":"","sources":["../../../../src/providers/codex/codec/sync-extension.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-extension.d.ts","sourceRoot":"","sources":["../../../../src/providers/codex/codec/sync-extension.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAyBpD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAC3E,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,4BAA6B,SAAQ,uBAAuB;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,4BAA4B,EAAE,CAAC;IAC3C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAgBD,UAAU,iCAAiC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAqiBD,wBAAsB,gCAAgC,CACpD,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,cAAc,EAAE,EAClC,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAChC,OAAO,GAAE,iCAAsC,GAC9C,OAAO,CAAC,kBAAkB,CAAC,CAqJ7B;AAED,wBAAsB,8BAA8B,CAClD,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,yBAAyB,CAAC,CA6BpC;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAE1E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,kBAAkB,GAAG;IACjE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB,CAaA;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,kBAAkB,GACvB,uBAAuB,EAAE,CAQ3B"}
|