@msn-control/liftoff 0.1.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 +48 -0
- package/dist/args.d.ts +5 -0
- package/dist/args.js +74 -0
- package/dist/args.js.map +1 -0
- package/dist/catalogs.d.ts +29 -0
- package/dist/catalogs.js +262 -0
- package/dist/catalogs.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +11 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.d.ts +8 -0
- package/dist/commands.js +228 -0
- package/dist/commands.js.map +1 -0
- package/dist/file-system.d.ts +10 -0
- package/dist/file-system.js +65 -0
- package/dist/file-system.js.map +1 -0
- package/dist/interactive.d.ts +4 -0
- package/dist/interactive.js +140 -0
- package/dist/interactive.js.map +1 -0
- package/dist/planner.d.ts +14 -0
- package/dist/planner.js +118 -0
- package/dist/planner.js.map +1 -0
- package/dist/templates.d.ts +3 -0
- package/dist/templates.js +1148 -0
- package/dist/templates.js.map +1 -0
- package/dist/types.d.ts +96 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +51 -0
package/README.md
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Liftoff CLI
|
|
2
|
+
|
|
3
|
+
Status: implemented.
|
|
4
|
+
|
|
5
|
+
Liftoff is the Mission Control Launchpad Engine package. It exposes the `liftoff` command and scaffolds enterprise GenAI applications with FastAPI, PydanticAI, Docker Compose, OpenTofu, and spec-driven governance assets.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
Install the latest stable CLI globally:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install -g @msn-control/liftoff@latest
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
After installation, run:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
liftoff help
|
|
19
|
+
liftoff create
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Development
|
|
23
|
+
|
|
24
|
+
Repository-local commands are for contributors working from a Mission Control checkout. Run package commands from the repository root:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npm run build
|
|
28
|
+
npm test
|
|
29
|
+
npm run check
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Or run them directly in this workspace package:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm run check --workspace @msn-control/liftoff
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Run the package smoke test before publishing:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm run smoke:package --workspace @msn-control/liftoff
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Release
|
|
45
|
+
|
|
46
|
+
The `Release Liftoff` workflow builds, tests, packs, smoke-installs, and publishes only the `@msn-control/liftoff` workspace package. Stable versions publish with the `latest` npm dist-tag; prerelease versions publish with `next`.
|
|
47
|
+
|
|
48
|
+
Prefer npm trusted publishing with provenance for release authentication. If trusted publishing is not configured for the repository and npm organization, create a scoped npm automation token and store it as the repository secret `NPM_TOKEN`.
|
package/dist/args.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ParsedArgs } from './types.js';
|
|
2
|
+
export declare function parseArgs(argv: string[]): ParsedArgs;
|
|
3
|
+
export declare function readStringFlag(flags: ParsedArgs['flags'], name: string): string | undefined;
|
|
4
|
+
export declare function readBooleanFlag(flags: ParsedArgs['flags'], name: string): boolean | undefined;
|
|
5
|
+
export declare function readListFlag(flags: ParsedArgs['flags'], name: string): string[] | undefined;
|
package/dist/args.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
const commandsWithSubcommands = new Set(['regions', 'dev', 'infra']);
|
|
2
|
+
const booleanFlags = new Set(['yes', 'frontend', 'help', 'json', 'print']);
|
|
3
|
+
const valueFlags = new Set(['pattern', 'cloud', 'region', 'spec', 'environments', 'config', 'project', 'env', 'profile']);
|
|
4
|
+
export function parseArgs(argv) {
|
|
5
|
+
const [command, maybeSubcommand, ...rest] = argv;
|
|
6
|
+
const positional = [];
|
|
7
|
+
const flags = {};
|
|
8
|
+
const hasSubcommand = Boolean(command && maybeSubcommand && !maybeSubcommand.startsWith('-') && commandsWithSubcommands.has(command));
|
|
9
|
+
const tokens = hasSubcommand ? rest : argv.slice(1);
|
|
10
|
+
const subcommand = hasSubcommand ? maybeSubcommand : undefined;
|
|
11
|
+
for (let index = 0; index < tokens.length; index += 1) {
|
|
12
|
+
const token = tokens[index];
|
|
13
|
+
if (!token.startsWith('--')) {
|
|
14
|
+
positional.push(token);
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
const withoutPrefix = token.slice(2);
|
|
18
|
+
if (withoutPrefix.startsWith('no-')) {
|
|
19
|
+
flags[withoutPrefix.slice(3)] = false;
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
const equalsIndex = withoutPrefix.indexOf('=');
|
|
23
|
+
if (equalsIndex >= 0) {
|
|
24
|
+
const key = withoutPrefix.slice(0, equalsIndex);
|
|
25
|
+
flags[key] = withoutPrefix.slice(equalsIndex + 1);
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (booleanFlags.has(withoutPrefix)) {
|
|
29
|
+
flags[withoutPrefix] = true;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (valueFlags.has(withoutPrefix)) {
|
|
33
|
+
const next = tokens[index + 1];
|
|
34
|
+
if (!next || next.startsWith('--')) {
|
|
35
|
+
throw new Error(`Missing value for --${withoutPrefix}.`);
|
|
36
|
+
}
|
|
37
|
+
flags[withoutPrefix] = next;
|
|
38
|
+
index += 1;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
flags[withoutPrefix] = true;
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
command,
|
|
45
|
+
subcommand,
|
|
46
|
+
positional,
|
|
47
|
+
flags
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export function readStringFlag(flags, name) {
|
|
51
|
+
const value = flags[name];
|
|
52
|
+
if (typeof value === 'string') {
|
|
53
|
+
return value;
|
|
54
|
+
}
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
export function readBooleanFlag(flags, name) {
|
|
58
|
+
const value = flags[name];
|
|
59
|
+
if (typeof value === 'boolean') {
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
export function readListFlag(flags, name) {
|
|
65
|
+
const value = flags[name];
|
|
66
|
+
if (typeof value === 'string') {
|
|
67
|
+
return value.split(',').map((item) => item.trim()).filter(Boolean);
|
|
68
|
+
}
|
|
69
|
+
if (Array.isArray(value)) {
|
|
70
|
+
return value;
|
|
71
|
+
}
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=args.js.map
|
package/dist/args.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { EnvironmentDefinition, EnvironmentId, PatternDefinition, PatternId, ProviderDefinition, ProviderId, RegionDefinition, SpecWorkflowDefinition, SpecWorkflowId } from './types.js';
|
|
2
|
+
export declare const approvedStack: string[];
|
|
3
|
+
export declare const patterns: PatternDefinition[];
|
|
4
|
+
export declare const providers: ProviderDefinition[];
|
|
5
|
+
export declare const azureRegions: RegionDefinition[];
|
|
6
|
+
export declare const environments: EnvironmentDefinition[];
|
|
7
|
+
export declare const specWorkflows: SpecWorkflowDefinition[];
|
|
8
|
+
export declare function getPattern(value: string): PatternDefinition | undefined;
|
|
9
|
+
export declare function getProvider(value: string): ProviderDefinition | undefined;
|
|
10
|
+
export declare function getSpecWorkflow(value: string): SpecWorkflowDefinition | undefined;
|
|
11
|
+
export declare function getEnvironment(value: string): EnvironmentDefinition | undefined;
|
|
12
|
+
export declare function getDefaultRegion(provider: ProviderId): RegionDefinition;
|
|
13
|
+
export declare function listRegions(provider: ProviderId): RegionDefinition[];
|
|
14
|
+
export declare function searchRegions(provider: ProviderId, input: string): RegionDefinition[];
|
|
15
|
+
export type RegionResolution = {
|
|
16
|
+
status: 'resolved';
|
|
17
|
+
region: RegionDefinition;
|
|
18
|
+
} | {
|
|
19
|
+
status: 'ambiguous';
|
|
20
|
+
matches: RegionDefinition[];
|
|
21
|
+
} | {
|
|
22
|
+
status: 'unknown';
|
|
23
|
+
input: string;
|
|
24
|
+
};
|
|
25
|
+
export declare function resolveRegion(provider: ProviderId, input?: string): RegionResolution;
|
|
26
|
+
export declare function isPatternId(value: string): value is PatternId;
|
|
27
|
+
export declare function isProviderId(value: string): value is ProviderId;
|
|
28
|
+
export declare function isEnvironmentId(value: string): value is EnvironmentId;
|
|
29
|
+
export declare function isSpecWorkflowId(value: string): value is SpecWorkflowId;
|
package/dist/catalogs.js
ADDED
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
const normalize = (value) => value.toLowerCase().replace(/[^a-z0-9]/g, '');
|
|
2
|
+
export const approvedStack = [
|
|
3
|
+
'FastAPI',
|
|
4
|
+
'PydanticAI',
|
|
5
|
+
'Pydantic settings',
|
|
6
|
+
'Scalar',
|
|
7
|
+
'PostgreSQL',
|
|
8
|
+
'Alembic',
|
|
9
|
+
'Redis',
|
|
10
|
+
'Azure Service Bus',
|
|
11
|
+
'Azure Blob Storage',
|
|
12
|
+
'Azure Communication Services',
|
|
13
|
+
'Langfuse',
|
|
14
|
+
'Docker Compose',
|
|
15
|
+
'OpenTofu'
|
|
16
|
+
];
|
|
17
|
+
export const patterns = [
|
|
18
|
+
{
|
|
19
|
+
id: 'rag',
|
|
20
|
+
label: 'RAG (Knowledge Retrieval)',
|
|
21
|
+
aliases: ['rag', 'retrieval', 'knowledge', 'knowledge-retrieval'],
|
|
22
|
+
description: 'Retrieval augmented generation with ingestion, embeddings, pgvector retrieval, and answer synthesis.',
|
|
23
|
+
scaffoldStatus: 'full',
|
|
24
|
+
frontendStarter: 'Retrieval/search interface',
|
|
25
|
+
routePrefix: '/api/rag',
|
|
26
|
+
worker: true
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: 'chatbot',
|
|
30
|
+
label: 'Chatbot / Conversational AI',
|
|
31
|
+
aliases: ['chatbot', 'chat', 'conversational', 'conversational-ai'],
|
|
32
|
+
description: 'Conversation APIs, message persistence, prompt templates, and PydanticAI chat orchestration.',
|
|
33
|
+
scaffoldStatus: 'full',
|
|
34
|
+
frontendStarter: 'Chat interface',
|
|
35
|
+
routePrefix: '/api/chat',
|
|
36
|
+
worker: false
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: 'agent',
|
|
40
|
+
label: 'Agent-based (Task Automation)',
|
|
41
|
+
aliases: ['agent', 'agent-based', 'automation', 'task-automation'],
|
|
42
|
+
description: 'Agent orchestration, tool boundaries, task execution routes, and background worker structure.',
|
|
43
|
+
scaffoldStatus: 'full',
|
|
44
|
+
frontendStarter: 'Task run console',
|
|
45
|
+
routePrefix: '/api/agent',
|
|
46
|
+
worker: true
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
id: 'prompt',
|
|
50
|
+
label: 'Prompt-based App (Simple LLM)',
|
|
51
|
+
aliases: ['prompt', 'prompt-based', 'simple-llm', 'llm'],
|
|
52
|
+
description: 'Named prompt templates, invocation API, and structured output validation examples.',
|
|
53
|
+
scaffoldStatus: 'full',
|
|
54
|
+
frontendStarter: 'Prompt playground',
|
|
55
|
+
routePrefix: '/api/invoke',
|
|
56
|
+
worker: false
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: 'multi-agent',
|
|
60
|
+
label: 'Multi-Agent System',
|
|
61
|
+
aliases: ['multi-agent', 'multiagent', 'multi-agent-system'],
|
|
62
|
+
description: 'Supervisor/worker coordination structure, agent roles, shared state boundaries, and run orchestration.',
|
|
63
|
+
scaffoldStatus: 'foundation',
|
|
64
|
+
frontendStarter: 'Agent run console',
|
|
65
|
+
routePrefix: '/api/multi-agent',
|
|
66
|
+
worker: true
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
id: 'fine-tuned',
|
|
70
|
+
label: 'Fine-tuned Model App',
|
|
71
|
+
aliases: ['fine-tuned', 'finetuned', 'fine-tune', 'fine-tuning'],
|
|
72
|
+
description: 'Endpoint configuration, invocation API, and evaluation dataset structure for deployed fine-tuned models.',
|
|
73
|
+
scaffoldStatus: 'integration-shell',
|
|
74
|
+
frontendStarter: 'Model invocation playground',
|
|
75
|
+
routePrefix: '/api/fine-tuned',
|
|
76
|
+
worker: false
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
id: 'streaming',
|
|
80
|
+
label: 'Real-time / Streaming AI',
|
|
81
|
+
aliases: ['streaming', 'real-time', 'realtime', 'sse', 'websocket'],
|
|
82
|
+
description: 'Streaming response routes and frontend-compatible streaming configuration.',
|
|
83
|
+
scaffoldStatus: 'full',
|
|
84
|
+
frontendStarter: 'Live response interface',
|
|
85
|
+
routePrefix: '/api/stream',
|
|
86
|
+
worker: false
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
id: 'workflow',
|
|
90
|
+
label: 'AI Workflow / Pipeline',
|
|
91
|
+
aliases: ['workflow', 'pipeline', 'ai-workflow', 'ai-pipeline'],
|
|
92
|
+
description: 'Pipeline stage structure, run persistence, trigger configuration, and worker structure.',
|
|
93
|
+
scaffoldStatus: 'foundation',
|
|
94
|
+
frontendStarter: 'Workflow run dashboard',
|
|
95
|
+
routePrefix: '/api/workflows',
|
|
96
|
+
worker: true
|
|
97
|
+
}
|
|
98
|
+
];
|
|
99
|
+
export const providers = [
|
|
100
|
+
{
|
|
101
|
+
id: 'azure',
|
|
102
|
+
label: 'Azure',
|
|
103
|
+
status: 'available',
|
|
104
|
+
description: 'Complete V1 provider with Azure OpenTofu infrastructure.'
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: 'aws',
|
|
108
|
+
label: 'AWS',
|
|
109
|
+
status: 'planned',
|
|
110
|
+
description: 'Planned provider adapter; not available for V1 generation.'
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
id: 'gcp',
|
|
114
|
+
label: 'GCP',
|
|
115
|
+
status: 'planned',
|
|
116
|
+
description: 'Planned provider adapter; not available for V1 generation.'
|
|
117
|
+
}
|
|
118
|
+
];
|
|
119
|
+
export const azureRegions = [
|
|
120
|
+
{
|
|
121
|
+
provider: 'azure',
|
|
122
|
+
slug: 'eastus',
|
|
123
|
+
displayName: 'East US',
|
|
124
|
+
geography: 'United States',
|
|
125
|
+
aliases: ['east us', 'eastus', 'virginia', 'us east'],
|
|
126
|
+
default: true
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
provider: 'azure',
|
|
130
|
+
slug: 'eastus2',
|
|
131
|
+
displayName: 'East US 2',
|
|
132
|
+
geography: 'United States',
|
|
133
|
+
aliases: ['east us 2', 'eastus2', 'us east 2']
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
provider: 'azure',
|
|
137
|
+
slug: 'westus2',
|
|
138
|
+
displayName: 'West US 2',
|
|
139
|
+
geography: 'United States',
|
|
140
|
+
aliases: ['west us 2', 'westus2', 'us west 2']
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
provider: 'azure',
|
|
144
|
+
slug: 'westeurope',
|
|
145
|
+
displayName: 'West Europe',
|
|
146
|
+
geography: 'Europe',
|
|
147
|
+
aliases: ['west europe', 'westeurope', 'netherlands', 'amsterdam']
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
provider: 'azure',
|
|
151
|
+
slug: 'southeastasia',
|
|
152
|
+
displayName: 'Southeast Asia',
|
|
153
|
+
geography: 'Asia Pacific',
|
|
154
|
+
aliases: ['southeast asia', 'southeastasia', 'singapore']
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
provider: 'azure',
|
|
158
|
+
slug: 'koreacentral',
|
|
159
|
+
displayName: 'Korea Central',
|
|
160
|
+
geography: 'Korea',
|
|
161
|
+
aliases: ['korea', 'korea central', 'koreacentral', 'seoul']
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
provider: 'azure',
|
|
165
|
+
slug: 'koreasouth',
|
|
166
|
+
displayName: 'Korea South',
|
|
167
|
+
geography: 'Korea',
|
|
168
|
+
aliases: ['korea', 'korea south', 'koreasouth', 'busan']
|
|
169
|
+
}
|
|
170
|
+
];
|
|
171
|
+
export const environments = [
|
|
172
|
+
{ id: 'dev', label: 'Development', description: 'Low-cost local and Azure development defaults.' },
|
|
173
|
+
{ id: 'test', label: 'Test', description: 'Production-like validation configuration with modest scale.' },
|
|
174
|
+
{ id: 'prod', label: 'Production', description: 'Production-oriented settings and stricter security controls.' }
|
|
175
|
+
];
|
|
176
|
+
export const specWorkflows = [
|
|
177
|
+
{
|
|
178
|
+
id: 'openspec',
|
|
179
|
+
label: 'OpenSpec',
|
|
180
|
+
default: true,
|
|
181
|
+
description: 'Generate OpenSpec config, specs, changes, and a seed bootstrap change.'
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
id: 'spec-kit',
|
|
185
|
+
label: 'Spec Kit',
|
|
186
|
+
default: false,
|
|
187
|
+
description: 'Generate Spec Kit constitution and supporting templates.'
|
|
188
|
+
}
|
|
189
|
+
];
|
|
190
|
+
export function getPattern(value) {
|
|
191
|
+
const normalized = normalize(value);
|
|
192
|
+
return patterns.find((pattern) => normalize(pattern.id) === normalized || pattern.aliases.some((alias) => normalize(alias) === normalized));
|
|
193
|
+
}
|
|
194
|
+
export function getProvider(value) {
|
|
195
|
+
const normalized = normalize(value);
|
|
196
|
+
return providers.find((provider) => normalize(provider.id) === normalized || normalize(provider.label) === normalized);
|
|
197
|
+
}
|
|
198
|
+
export function getSpecWorkflow(value) {
|
|
199
|
+
const normalized = normalize(value);
|
|
200
|
+
return specWorkflows.find((workflow) => normalize(workflow.id) === normalized || normalize(workflow.label) === normalized);
|
|
201
|
+
}
|
|
202
|
+
export function getEnvironment(value) {
|
|
203
|
+
const normalized = normalize(value);
|
|
204
|
+
return environments.find((environment) => normalize(environment.id) === normalized || normalize(environment.label) === normalized);
|
|
205
|
+
}
|
|
206
|
+
export function getDefaultRegion(provider) {
|
|
207
|
+
if (provider !== 'azure') {
|
|
208
|
+
throw new Error(`No default region catalog is available for planned provider ${provider}.`);
|
|
209
|
+
}
|
|
210
|
+
const region = azureRegions.find((candidate) => candidate.default);
|
|
211
|
+
if (!region) {
|
|
212
|
+
throw new Error('Azure region catalog is missing a default region.');
|
|
213
|
+
}
|
|
214
|
+
return region;
|
|
215
|
+
}
|
|
216
|
+
export function listRegions(provider) {
|
|
217
|
+
if (provider === 'azure') {
|
|
218
|
+
return azureRegions;
|
|
219
|
+
}
|
|
220
|
+
return [];
|
|
221
|
+
}
|
|
222
|
+
export function searchRegions(provider, input) {
|
|
223
|
+
const normalized = normalize(input);
|
|
224
|
+
if (!normalized) {
|
|
225
|
+
return listRegions(provider);
|
|
226
|
+
}
|
|
227
|
+
return listRegions(provider).filter((region) => {
|
|
228
|
+
const searchable = [region.slug, region.displayName, region.geography, ...region.aliases].map(normalize);
|
|
229
|
+
return searchable.some((value) => value === normalized || value.includes(normalized));
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
export function resolveRegion(provider, input) {
|
|
233
|
+
if (!input || input.trim().length === 0) {
|
|
234
|
+
return { status: 'resolved', region: getDefaultRegion(provider) };
|
|
235
|
+
}
|
|
236
|
+
const normalized = normalize(input);
|
|
237
|
+
const exact = listRegions(provider).find((region) => normalize(region.slug) === normalized);
|
|
238
|
+
if (exact) {
|
|
239
|
+
return { status: 'resolved', region: exact };
|
|
240
|
+
}
|
|
241
|
+
const matches = searchRegions(provider, input);
|
|
242
|
+
if (matches.length === 1) {
|
|
243
|
+
return { status: 'resolved', region: matches[0] };
|
|
244
|
+
}
|
|
245
|
+
if (matches.length > 1) {
|
|
246
|
+
return { status: 'ambiguous', matches };
|
|
247
|
+
}
|
|
248
|
+
return { status: 'unknown', input };
|
|
249
|
+
}
|
|
250
|
+
export function isPatternId(value) {
|
|
251
|
+
return patterns.some((pattern) => pattern.id === value);
|
|
252
|
+
}
|
|
253
|
+
export function isProviderId(value) {
|
|
254
|
+
return providers.some((provider) => provider.id === value);
|
|
255
|
+
}
|
|
256
|
+
export function isEnvironmentId(value) {
|
|
257
|
+
return environments.some((environment) => environment.id === value);
|
|
258
|
+
}
|
|
259
|
+
export function isSpecWorkflowId(value) {
|
|
260
|
+
return specWorkflows.some((workflow) => workflow.id === value);
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=catalogs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalogs.js","sourceRoot":"","sources":["../src/catalogs.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
package/dist/cli.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { parseArgs } from './args.js';
|
|
3
|
+
import { runCommand } from './commands.js';
|
|
4
|
+
const parsed = parseArgs(process.argv.slice(2));
|
|
5
|
+
const exitCode = await runCommand(parsed, {
|
|
6
|
+
cwd: process.cwd(),
|
|
7
|
+
stdout: process.stdout,
|
|
8
|
+
stderr: process.stderr
|
|
9
|
+
});
|
|
10
|
+
process.exitCode = exitCode;
|
|
11
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE;IACxC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;IAClB,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,MAAM,EAAE,OAAO,CAAC,MAAM;CACvB,CAAC,CAAC;AAEH,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ParsedArgs, ProjectOptions } from './types.js';
|
|
2
|
+
export interface CommandContext {
|
|
3
|
+
cwd: string;
|
|
4
|
+
stdout: NodeJS.WritableStream;
|
|
5
|
+
stderr: NodeJS.WritableStream;
|
|
6
|
+
}
|
|
7
|
+
export declare function runCommand(parsed: ParsedArgs, context: CommandContext): Promise<number>;
|
|
8
|
+
export declare function createFixtureProject(options: ProjectOptions): Promise<string>;
|