opencastle 0.31.0 → 0.31.1
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/README.md +3 -3
- package/bin/cli.mjs +4 -2
- package/dist/cli/convoy/spec-builder.d.ts +68 -0
- package/dist/cli/convoy/spec-builder.d.ts.map +1 -0
- package/dist/cli/convoy/spec-builder.js +179 -0
- package/dist/cli/convoy/spec-builder.js.map +1 -0
- package/dist/cli/convoy/spec-builder.test.d.ts +2 -0
- package/dist/cli/convoy/spec-builder.test.d.ts.map +1 -0
- package/dist/cli/convoy/spec-builder.test.js +443 -0
- package/dist/cli/convoy/spec-builder.test.js.map +1 -0
- package/dist/cli/pipeline.d.ts +1 -0
- package/dist/cli/pipeline.d.ts.map +1 -1
- package/dist/cli/pipeline.js +234 -185
- package/dist/cli/pipeline.js.map +1 -1
- package/dist/cli/pipeline.test.js +15 -1
- package/dist/cli/pipeline.test.js.map +1 -1
- package/dist/cli/plan.d.ts +1 -1
- package/dist/cli/plan.js +1 -1
- package/dist/cli/prompt.js +2 -1
- package/dist/cli/prompt.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/convoy/spec-builder.test.ts +511 -0
- package/src/cli/convoy/spec-builder.ts +221 -0
- package/src/cli/pipeline.test.ts +21 -1
- package/src/cli/pipeline.ts +253 -224
- package/src/cli/plan.ts +1 -1
- package/src/cli/prompt.ts +1 -1
- package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
- package/src/orchestrator/prompts/fix-convoy.prompt.md +47 -56
- package/src/orchestrator/prompts/generate-convoy.prompt.md +85 -295
- package/src/orchestrator/prompts/validate-convoy.prompt.md +31 -42
package/README.md
CHANGED
|
@@ -71,7 +71,7 @@ MCP servers are auto-configured for your stack in each IDE's native format.
|
|
|
71
71
|
| `opencastle update` | Update framework files (keeps your customizations) |
|
|
72
72
|
| `opencastle eject` | Remove the dependency, keep all files |
|
|
73
73
|
| `opencastle destroy` | Remove ALL OpenCastle files (reverse of init) |
|
|
74
|
-
| `opencastle
|
|
74
|
+
| `opencastle start` | Go from idea to convoy spec in one command (PRD → validate → convoy → validate → fix) |
|
|
75
75
|
| `opencastle plan` | Run a single prompt template step (generate PRD, convoy spec, or validate) |
|
|
76
76
|
| `opencastle validate` | Validate a convoy YAML spec file without executing it |
|
|
77
77
|
| `opencastle run` | Run the Convoy Engine (deterministic, crash-recoverable orchestrator) |
|
|
@@ -177,10 +177,10 @@ gates:
|
|
|
177
177
|
Generate a validated convoy spec from a plain text description — no YAML by hand:
|
|
178
178
|
|
|
179
179
|
```bash
|
|
180
|
-
npx opencastle
|
|
180
|
+
npx opencastle start --text "Add user reviews to the place detail page"
|
|
181
181
|
```
|
|
182
182
|
|
|
183
|
-
The
|
|
183
|
+
The start command runs 7 steps automatically: generate PRD → validate PRD → auto-fix PRD if needed → assess complexity → generate convoy spec → validate spec → auto-fix spec if needed. For lower-level control, use `opencastle plan` to run individual steps.
|
|
184
184
|
|
|
185
185
|
📖 [Full Convoy Engine documentation →](https://www.opencastle.dev/docs/cli#run)
|
|
186
186
|
|
package/bin/cli.mjs
CHANGED
|
@@ -25,7 +25,9 @@ const HELP = `
|
|
|
25
25
|
doctor Validate your OpenCastle setup
|
|
26
26
|
|
|
27
27
|
Convoy Commands:
|
|
28
|
-
|
|
28
|
+
start Run the full generate PRD → validate PRD → auto-fix PRD
|
|
29
|
+
→ assess complexity → generate convoy spec → validate spec
|
|
30
|
+
→ auto-fix spec
|
|
29
31
|
plan Generate a convoy spec (or PRD) from a task description
|
|
30
32
|
validate Validate a convoy YAML spec file
|
|
31
33
|
run Process a task queue from a spec file autonomously
|
|
@@ -64,7 +66,7 @@ const commands = {
|
|
|
64
66
|
destroy: () => import('../dist/cli/destroy.js'),
|
|
65
67
|
run: () => import('../dist/cli/run.js'),
|
|
66
68
|
plan: () => import('../dist/cli/plan.js'),
|
|
67
|
-
|
|
69
|
+
start: () => import('../dist/cli/pipeline.js'),
|
|
68
70
|
dashboard: () => import('../dist/cli/dashboard.js'),
|
|
69
71
|
doctor: () => import('../dist/cli/doctor.js'),
|
|
70
72
|
log: () => import('../dist/cli/log.js'),
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/** The task plan generated by the LLM — just the creative decomposition, no YAML concerns */
|
|
2
|
+
export interface TaskPlanTask {
|
|
3
|
+
id: string;
|
|
4
|
+
agent?: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
files?: string[];
|
|
7
|
+
depends_on?: string[];
|
|
8
|
+
timeout?: string;
|
|
9
|
+
max_retries?: number;
|
|
10
|
+
review?: string;
|
|
11
|
+
prompt: string;
|
|
12
|
+
gates?: string[];
|
|
13
|
+
built_in_gates?: Record<string, boolean | string>;
|
|
14
|
+
}
|
|
15
|
+
export interface TaskPlan {
|
|
16
|
+
name: string;
|
|
17
|
+
branch?: string;
|
|
18
|
+
concurrency?: number | 'auto';
|
|
19
|
+
on_failure?: 'continue' | 'stop';
|
|
20
|
+
tasks: TaskPlanTask[];
|
|
21
|
+
gates?: string[];
|
|
22
|
+
gate_retries?: number;
|
|
23
|
+
}
|
|
24
|
+
/** A patch to apply to a task plan — output of the fix-convoy prompt */
|
|
25
|
+
export interface TaskPatch {
|
|
26
|
+
task_id: string;
|
|
27
|
+
field: string;
|
|
28
|
+
value: unknown;
|
|
29
|
+
}
|
|
30
|
+
/** Advanced spec properties derived programmatically from complexity assessment */
|
|
31
|
+
export interface SpecEnrichment {
|
|
32
|
+
guard?: {
|
|
33
|
+
enabled: boolean;
|
|
34
|
+
};
|
|
35
|
+
circuit_breaker?: {
|
|
36
|
+
threshold: number;
|
|
37
|
+
cooldown_ms: number;
|
|
38
|
+
};
|
|
39
|
+
detect_drift?: boolean;
|
|
40
|
+
built_in_gates?: Record<string, boolean | string>;
|
|
41
|
+
max_concurrent_reviews?: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Derives advanced convoy spec properties from a complexity assessment.
|
|
45
|
+
* These are infrastructure concerns the LLM shouldn't generate — they're computed from signals.
|
|
46
|
+
*/
|
|
47
|
+
export declare function deriveSpecEnrichment(complexity: {
|
|
48
|
+
complexity: 'low' | 'medium' | 'high';
|
|
49
|
+
total_tasks: number;
|
|
50
|
+
domains: string[];
|
|
51
|
+
}): SpecEnrichment;
|
|
52
|
+
/**
|
|
53
|
+
* Converts a TaskPlan into a valid convoy YAML string with a comment header.
|
|
54
|
+
*/
|
|
55
|
+
export declare function buildConvoyYaml(plan: TaskPlan, enrichment?: SpecEnrichment): string;
|
|
56
|
+
/**
|
|
57
|
+
* Applies an array of patches to a task plan. Returns a new TaskPlan (immutable).
|
|
58
|
+
*/
|
|
59
|
+
export declare function applyPatches(plan: TaskPlan, patches: TaskPatch[]): TaskPlan;
|
|
60
|
+
/**
|
|
61
|
+
* Parses a JSON string into a TaskPlan. Returns null if parsing fails or required fields are missing.
|
|
62
|
+
*/
|
|
63
|
+
export declare function parseTaskPlan(jsonText: string): TaskPlan | null;
|
|
64
|
+
/**
|
|
65
|
+
* Parses a JSON string into a TaskPatch[]. Returns null if parsing fails.
|
|
66
|
+
*/
|
|
67
|
+
export declare function parsePatches(jsonText: string): TaskPatch[] | null;
|
|
68
|
+
//# sourceMappingURL=spec-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-builder.d.ts","sourceRoot":"","sources":["../../../src/cli/convoy/spec-builder.ts"],"names":[],"mappings":"AAEA,6FAA6F;AAC7F,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAA;CAClD;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC7B,UAAU,CAAC,EAAE,UAAU,GAAG,MAAM,CAAA;IAChC,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wEAAwE;AACxE,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,CAAA;CACf;AASD,mFAAmF;AACnF,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAA;IAC5B,eAAe,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAA;IACjD,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE;IAC/C,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;IACrC,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB,GAAG,cAAc,CA2CjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,cAAc,GAAG,MAAM,CA0DnF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,QAAQ,CAc3E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAa/D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,IAAI,CAcjE"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { stringify } from 'yaml';
|
|
2
|
+
function toKebabCase(name) {
|
|
3
|
+
return name
|
|
4
|
+
.toLowerCase()
|
|
5
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
6
|
+
.replace(/^-+|-+$/g, '');
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Derives advanced convoy spec properties from a complexity assessment.
|
|
10
|
+
* These are infrastructure concerns the LLM shouldn't generate — they're computed from signals.
|
|
11
|
+
*/
|
|
12
|
+
export function deriveSpecEnrichment(complexity) {
|
|
13
|
+
const enrichment = {};
|
|
14
|
+
// Circuit breaker: higher complexity → lower threshold (trip faster)
|
|
15
|
+
if (complexity.complexity === 'high') {
|
|
16
|
+
enrichment.circuit_breaker = { threshold: 2, cooldown_ms: 300_000 };
|
|
17
|
+
}
|
|
18
|
+
else if (complexity.complexity === 'medium') {
|
|
19
|
+
enrichment.circuit_breaker = { threshold: 3, cooldown_ms: 300_000 };
|
|
20
|
+
}
|
|
21
|
+
// Drift detection for medium/high
|
|
22
|
+
if (complexity.complexity !== 'low') {
|
|
23
|
+
enrichment.detect_drift = true;
|
|
24
|
+
}
|
|
25
|
+
// Guard: enabled for medium/high
|
|
26
|
+
if (complexity.complexity !== 'low') {
|
|
27
|
+
enrichment.guard = { enabled: true };
|
|
28
|
+
}
|
|
29
|
+
// Built-in gates based on domains
|
|
30
|
+
const domains = new Set(complexity.domains.map(d => d.toLowerCase()));
|
|
31
|
+
const gates = {
|
|
32
|
+
secret_scan: true,
|
|
33
|
+
blast_radius: true,
|
|
34
|
+
};
|
|
35
|
+
if (domains.has('frontend') || domains.has('ui')) {
|
|
36
|
+
gates.browser_test = 'auto';
|
|
37
|
+
}
|
|
38
|
+
if (domains.has('testing') || complexity.total_tasks > 5) {
|
|
39
|
+
gates.regression_test = 'auto';
|
|
40
|
+
}
|
|
41
|
+
if (domains.has('database') || domains.has('api') || domains.has('backend')) {
|
|
42
|
+
gates.dependency_audit = 'auto';
|
|
43
|
+
}
|
|
44
|
+
enrichment.built_in_gates = gates;
|
|
45
|
+
// Review concurrency scales with task count
|
|
46
|
+
enrichment.max_concurrent_reviews = complexity.total_tasks > 6 ? 3 : 2;
|
|
47
|
+
return enrichment;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Converts a TaskPlan into a valid convoy YAML string with a comment header.
|
|
51
|
+
*/
|
|
52
|
+
export function buildConvoyYaml(plan, enrichment) {
|
|
53
|
+
const tasks = plan.tasks.map((task) => {
|
|
54
|
+
const t = {};
|
|
55
|
+
t.id = task.id;
|
|
56
|
+
t.agent = task.agent ?? 'developer';
|
|
57
|
+
t.description = task.description ?? task.id;
|
|
58
|
+
if (task.timeout !== undefined)
|
|
59
|
+
t.timeout = task.timeout;
|
|
60
|
+
if (task.files && task.files.length > 0)
|
|
61
|
+
t.files = task.files;
|
|
62
|
+
if (task.depends_on && task.depends_on.length > 0)
|
|
63
|
+
t.depends_on = task.depends_on;
|
|
64
|
+
if (task.max_retries !== undefined)
|
|
65
|
+
t.max_retries = task.max_retries;
|
|
66
|
+
if (task.review !== undefined)
|
|
67
|
+
t.review = task.review;
|
|
68
|
+
if (task.gates !== undefined)
|
|
69
|
+
t.gates = task.gates;
|
|
70
|
+
if (task.built_in_gates !== undefined)
|
|
71
|
+
t.built_in_gates = task.built_in_gates;
|
|
72
|
+
// prompt last — keeps the long text at the end of each task block
|
|
73
|
+
t.prompt = task.prompt;
|
|
74
|
+
return t;
|
|
75
|
+
});
|
|
76
|
+
const spec = {
|
|
77
|
+
name: plan.name,
|
|
78
|
+
version: 1,
|
|
79
|
+
concurrency: plan.concurrency ?? 2,
|
|
80
|
+
on_failure: plan.on_failure ?? 'stop',
|
|
81
|
+
};
|
|
82
|
+
if (plan.branch !== undefined)
|
|
83
|
+
spec.branch = plan.branch;
|
|
84
|
+
const defaults = {
|
|
85
|
+
timeout: '30m',
|
|
86
|
+
max_retries: 1,
|
|
87
|
+
review: 'fast',
|
|
88
|
+
inject_lessons: true,
|
|
89
|
+
track_discovered_issues: true,
|
|
90
|
+
avoid_weak_agents: true,
|
|
91
|
+
};
|
|
92
|
+
if (enrichment?.circuit_breaker)
|
|
93
|
+
defaults.circuit_breaker = enrichment.circuit_breaker;
|
|
94
|
+
if (enrichment?.detect_drift)
|
|
95
|
+
defaults.detect_drift = enrichment.detect_drift;
|
|
96
|
+
if (enrichment?.built_in_gates)
|
|
97
|
+
defaults.built_in_gates = enrichment.built_in_gates;
|
|
98
|
+
if (enrichment?.max_concurrent_reviews)
|
|
99
|
+
defaults.max_concurrent_reviews = enrichment.max_concurrent_reviews;
|
|
100
|
+
spec.defaults = defaults;
|
|
101
|
+
// guard is spec-level (not inside defaults)
|
|
102
|
+
if (enrichment?.guard)
|
|
103
|
+
spec.guard = enrichment.guard;
|
|
104
|
+
spec.tasks = tasks;
|
|
105
|
+
if (plan.gates !== undefined)
|
|
106
|
+
spec.gates = plan.gates;
|
|
107
|
+
if (plan.gate_retries !== undefined)
|
|
108
|
+
spec.gate_retries = plan.gate_retries;
|
|
109
|
+
const header = `# .opencastle/convoys/${toKebabCase(plan.name)}.convoy.yml\n`;
|
|
110
|
+
const yaml = stringify(spec, {
|
|
111
|
+
lineWidth: 120,
|
|
112
|
+
defaultKeyType: 'PLAIN',
|
|
113
|
+
defaultStringType: 'PLAIN',
|
|
114
|
+
});
|
|
115
|
+
return header + yaml;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Applies an array of patches to a task plan. Returns a new TaskPlan (immutable).
|
|
119
|
+
*/
|
|
120
|
+
export function applyPatches(plan, patches) {
|
|
121
|
+
const clone = structuredClone(plan);
|
|
122
|
+
for (const patch of patches) {
|
|
123
|
+
if (patch.task_id === '_plan') {
|
|
124
|
+
;
|
|
125
|
+
clone[patch.field] = patch.value;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
const task = clone.tasks.find((t) => t.id === patch.task_id);
|
|
129
|
+
if (task) {
|
|
130
|
+
;
|
|
131
|
+
task[patch.field] = patch.value;
|
|
132
|
+
}
|
|
133
|
+
// task not found: skip silently
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return clone;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Parses a JSON string into a TaskPlan. Returns null if parsing fails or required fields are missing.
|
|
140
|
+
*/
|
|
141
|
+
export function parseTaskPlan(jsonText) {
|
|
142
|
+
try {
|
|
143
|
+
const parsed = JSON.parse(jsonText.trim());
|
|
144
|
+
if (!parsed || typeof parsed.name !== 'string')
|
|
145
|
+
return null;
|
|
146
|
+
if (!Array.isArray(parsed.tasks) || parsed.tasks.length === 0)
|
|
147
|
+
return null;
|
|
148
|
+
for (const task of parsed.tasks) {
|
|
149
|
+
const t = task;
|
|
150
|
+
if (typeof t.id !== 'string' || typeof t.prompt !== 'string')
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
return parsed;
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Parses a JSON string into a TaskPatch[]. Returns null if parsing fails.
|
|
161
|
+
*/
|
|
162
|
+
export function parsePatches(jsonText) {
|
|
163
|
+
try {
|
|
164
|
+
const parsed = JSON.parse(jsonText.trim());
|
|
165
|
+
if (!Array.isArray(parsed))
|
|
166
|
+
return null;
|
|
167
|
+
for (const item of parsed) {
|
|
168
|
+
const p = item;
|
|
169
|
+
if (typeof p.task_id !== 'string' || typeof p.field !== 'string' || p.value === undefined) {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return parsed;
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=spec-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-builder.js","sourceRoot":"","sources":["../../../src/cli/convoy/spec-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAkChC,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;AAC5B,CAAC;AAWD;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAIpC;IACC,MAAM,UAAU,GAAmB,EAAE,CAAA;IAErC,qEAAqE;IACrE,IAAI,UAAU,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QACrC,UAAU,CAAC,eAAe,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,CAAA;IACrE,CAAC;SAAM,IAAI,UAAU,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC9C,UAAU,CAAC,eAAe,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,CAAA;IACrE,CAAC;IAED,kCAAkC;IAClC,IAAI,UAAU,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QACpC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAA;IAChC,CAAC;IAED,iCAAiC;IACjC,IAAI,UAAU,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QACpC,UAAU,CAAC,KAAK,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IACtC,CAAC;IAED,kCAAkC;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;IACrE,MAAM,KAAK,GAAqC;QAC9C,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,IAAI;KACnB,CAAA;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,KAAK,CAAC,YAAY,GAAG,MAAM,CAAA;IAC7B,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QACzD,KAAK,CAAC,eAAe,GAAG,MAAM,CAAA;IAChC,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5E,KAAK,CAAC,gBAAgB,GAAG,MAAM,CAAA;IACjC,CAAC;IAED,UAAU,CAAC,cAAc,GAAG,KAAK,CAAA;IAEjC,4CAA4C;IAC5C,UAAU,CAAC,sBAAsB,GAAG,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAEtE,OAAO,UAAU,CAAA;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAc,EAAE,UAA2B;IACzE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACpC,MAAM,CAAC,GAA4B,EAAE,CAAA;QACrC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;QACd,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,WAAW,CAAA;QACnC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE,CAAA;QAC3C,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QACxD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QAC7D,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QACjF,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;YAAE,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACpE,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QACrD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QAClD,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;YAAE,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAA;QAC7E,kEAAkE;QAClE,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QACtB,OAAO,CAAC,CAAA;IACV,CAAC,CAAC,CAAA;IAEF,MAAM,IAAI,GAA4B;QACpC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC;QAClC,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,MAAM;KACtC,CAAA;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAExD,MAAM,QAAQ,GAA4B;QACxC,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,CAAC;QACd,MAAM,EAAE,MAAM;QACd,cAAc,EAAE,IAAI;QACpB,uBAAuB,EAAE,IAAI;QAC7B,iBAAiB,EAAE,IAAI;KACxB,CAAA;IAED,IAAI,UAAU,EAAE,eAAe;QAAE,QAAQ,CAAC,eAAe,GAAG,UAAU,CAAC,eAAe,CAAA;IACtF,IAAI,UAAU,EAAE,YAAY;QAAE,QAAQ,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAA;IAC7E,IAAI,UAAU,EAAE,cAAc;QAAE,QAAQ,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc,CAAA;IACnF,IAAI,UAAU,EAAE,sBAAsB;QAAE,QAAQ,CAAC,sBAAsB,GAAG,UAAU,CAAC,sBAAsB,CAAA;IAE3G,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAExB,4CAA4C;IAC5C,IAAI,UAAU,EAAE,KAAK;QAAE,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAA;IAEpD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IAElB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IACrD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;QAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;IAE1E,MAAM,MAAM,GAAG,yBAAyB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAA;IAC7E,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE;QAC3B,SAAS,EAAE,GAAG;QACd,cAAc,EAAE,OAAO;QACvB,iBAAiB,EAAE,OAAO;KAC3B,CAAC,CAAA;IACF,OAAO,MAAM,GAAG,IAAI,CAAA;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAc,EAAE,OAAoB;IAC/D,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;IACnC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC9B,CAAC;YAAC,KAA4C,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAA;QAC3E,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,CAAA;YAC5D,IAAI,IAAI,EAAE,CAAC;gBACT,CAAC;gBAAC,IAA2C,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAA;YAC1E,CAAC;YACD,gCAAgC;QAClC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAA;QACrE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAA;QAC3D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAK,MAAM,CAAC,KAAmB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QACzF,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAkB,EAAE,CAAC;YAC7C,MAAM,CAAC,GAAG,IAA+B,CAAA;YACzC,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAA;QAC3E,CAAC;QACD,OAAO,MAA6B,CAAA;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;QAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAA;QACvC,KAAK,MAAM,IAAI,IAAI,MAAmB,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,IAA+B,CAAA;YACzC,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC1F,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QACD,OAAO,MAAqB,CAAA;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-builder.test.d.ts","sourceRoot":"","sources":["../../../src/cli/convoy/spec-builder.test.ts"],"names":[],"mappings":""}
|