@superdesign/cli 0.2.1 → 0.2.2
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/dist/api/drafts.d.ts +3 -0
- package/dist/config/constants.d.ts +3 -1
- package/dist/index.cjs +36 -10
- package/dist/index.js +36 -10
- package/dist/utils/job-runner.d.ts +4 -0
- package/package.json +1 -1
package/dist/api/drafts.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export interface CreateDraftRequest {
|
|
|
10
10
|
prompt: string;
|
|
11
11
|
deviceMode?: 'mobile' | 'tablet' | 'desktop';
|
|
12
12
|
contextFiles?: ContextFile[];
|
|
13
|
+
model?: string;
|
|
13
14
|
}
|
|
14
15
|
export interface IterateDraftRequest {
|
|
15
16
|
prompts?: string[];
|
|
@@ -17,6 +18,7 @@ export interface IterateDraftRequest {
|
|
|
17
18
|
count?: 1 | 2 | 3 | 4;
|
|
18
19
|
mode: 'replace' | 'branch';
|
|
19
20
|
contextFiles?: ContextFile[];
|
|
21
|
+
model?: string;
|
|
20
22
|
}
|
|
21
23
|
export interface PlanFlowRequest {
|
|
22
24
|
flowContext?: string;
|
|
@@ -29,6 +31,7 @@ export interface ExecuteFlowRequest {
|
|
|
29
31
|
flowContext?: string;
|
|
30
32
|
pages: FlowPage[];
|
|
31
33
|
contextFiles?: ContextFile[];
|
|
34
|
+
model?: string;
|
|
32
35
|
}
|
|
33
36
|
export interface JobCreatedResponse {
|
|
34
37
|
jobId: string;
|
|
@@ -12,7 +12,7 @@ export declare const POLL_TIMEOUT_MS: number;
|
|
|
12
12
|
export declare const AUTH_POLL_INTERVAL_MS = 2000;
|
|
13
13
|
export declare const AUTH_POLL_TIMEOUT_MS: number;
|
|
14
14
|
/** CLI version - should match package.json */
|
|
15
|
-
export declare const CLI_VERSION = "0.2.
|
|
15
|
+
export declare const CLI_VERSION = "0.2.2";
|
|
16
16
|
/** PostHog analytics configuration */
|
|
17
17
|
export declare const POSTHOG_KEY: string;
|
|
18
18
|
export declare const POSTHOG_HOST: string;
|
|
@@ -30,6 +30,8 @@ export declare const EXIT_CODES: {
|
|
|
30
30
|
readonly VALIDATION_ERROR: 5;
|
|
31
31
|
readonly TIMEOUT: 6;
|
|
32
32
|
};
|
|
33
|
+
/** Supported model IDs for --model option */
|
|
34
|
+
export declare const SUPPORTED_MODELS: readonly ["gemini-3-flash", "gemini-3-pro", "gemini-3.1-pro", "claude-haiku-4-5", "claude-sonnet-4-5", "claude-opus-4-5", "claude-opus-4-6", "gpt-5.2", "gpt-5.2-thinking", "gpt-5-mini", "kimi-k2.5"];
|
|
33
35
|
/** Skill files directory relative to project root */
|
|
34
36
|
export declare const SKILLS_DIR = ".claude/skills/superdesign";
|
|
35
37
|
/** SKILL.md file name */
|
package/dist/index.cjs
CHANGED
|
@@ -104,6 +104,19 @@ var __webpack_exports__ = {};
|
|
|
104
104
|
VALIDATION_ERROR: 5,
|
|
105
105
|
TIMEOUT: 6
|
|
106
106
|
};
|
|
107
|
+
const SUPPORTED_MODELS = [
|
|
108
|
+
'gemini-3-flash',
|
|
109
|
+
'gemini-3-pro',
|
|
110
|
+
'gemini-3.1-pro',
|
|
111
|
+
'claude-haiku-4-5',
|
|
112
|
+
'claude-sonnet-4-5',
|
|
113
|
+
'claude-opus-4-5',
|
|
114
|
+
'claude-opus-4-6',
|
|
115
|
+
'gpt-5.2',
|
|
116
|
+
'gpt-5.2-thinking',
|
|
117
|
+
'gpt-5-mini',
|
|
118
|
+
'kimi-k2.5'
|
|
119
|
+
];
|
|
107
120
|
const SKILLS_DIR = '.claude/skills/superdesign';
|
|
108
121
|
const SKILL_FILE_NAME = 'SKILL.md';
|
|
109
122
|
const external_fs_namespaceObject = require("fs");
|
|
@@ -316,7 +329,7 @@ var __webpack_exports__ = {};
|
|
|
316
329
|
try {
|
|
317
330
|
startSpinner('Creating auth session...');
|
|
318
331
|
const session = await createSession({
|
|
319
|
-
cliVersion: "0.2.
|
|
332
|
+
cliVersion: "0.2.2",
|
|
320
333
|
os: `${external_os_namespaceObject.platform()} ${external_os_namespaceObject.release()}`,
|
|
321
334
|
hostname: external_os_namespaceObject.hostname()
|
|
322
335
|
});
|
|
@@ -724,6 +737,12 @@ superdesign --help
|
|
|
724
737
|
process.exit(EXIT_CODES.VALIDATION_ERROR);
|
|
725
738
|
}
|
|
726
739
|
}
|
|
740
|
+
function validateModel(model) {
|
|
741
|
+
if (model && !SUPPORTED_MODELS.includes(model)) {
|
|
742
|
+
output_error(`Invalid model "${model}". Supported models: ${SUPPORTED_MODELS.join(', ')}`);
|
|
743
|
+
process.exit(EXIT_CODES.VALIDATION_ERROR);
|
|
744
|
+
}
|
|
745
|
+
}
|
|
727
746
|
function readFileIfExists(filePath) {
|
|
728
747
|
if ((0, external_fs_namespaceObject.existsSync)(filePath)) return (0, external_fs_namespaceObject.readFileSync)(filePath, 'utf-8');
|
|
729
748
|
}
|
|
@@ -928,10 +947,11 @@ superdesign --help
|
|
|
928
947
|
return results;
|
|
929
948
|
}
|
|
930
949
|
function createCreateDesignDraftCommand() {
|
|
931
|
-
const command = new external_commander_namespaceObject.Command('create-design-draft').description('Create a design draft from scratch without any reference, Default dont use this, use iterate-design-draft instead').requiredOption('--project-id <id>', 'Project ID').requiredOption('--title <title>', 'Draft title').requiredOption('-p, --prompt <prompt>', 'Design prompt for AI generation').option('--device <mode>', 'Device mode (mobile, tablet, desktop)', 'desktop').option('--context-file <paths...>', 'UI source files to include as context for AI generation').option('--json', 'Output in JSON format').action(async (options)=>{
|
|
950
|
+
const command = new external_commander_namespaceObject.Command('create-design-draft').description('Create a design draft from scratch without any reference, Default dont use this, use iterate-design-draft instead').requiredOption('--project-id <id>', 'Project ID').requiredOption('--title <title>', 'Draft title').requiredOption('-p, --prompt <prompt>', 'Design prompt for AI generation').option('--device <mode>', 'Device mode (mobile, tablet, desktop)', 'desktop').option('--context-file <paths...>', 'UI source files to include as context for AI generation').option('--model <modelId>', 'Model ID to use for generation (e.g. claude-sonnet-4-5)').option('--json', 'Output in JSON format').action(async (options)=>{
|
|
932
951
|
if (options.json) setJsonMode(true);
|
|
933
952
|
job_runner_requireAuth(manager_isAuthenticated);
|
|
934
953
|
validateDeviceMode(options.device);
|
|
954
|
+
validateModel(options.model);
|
|
935
955
|
const contextFiles = options.contextFile ? readContextFiles(options.contextFile) : void 0;
|
|
936
956
|
await runJob({
|
|
937
957
|
startLabel: 'Creating design draft...',
|
|
@@ -943,7 +963,8 @@ superdesign --help
|
|
|
943
963
|
title: options.title,
|
|
944
964
|
prompt: options.prompt,
|
|
945
965
|
deviceMode: options.device,
|
|
946
|
-
contextFiles
|
|
966
|
+
contextFiles,
|
|
967
|
+
model: options.model
|
|
947
968
|
}),
|
|
948
969
|
transformResult: (job)=>({
|
|
949
970
|
draftId: job.result.draftId,
|
|
@@ -1015,20 +1036,23 @@ Usage Examples:
|
|
|
1015
1036
|
superdesign iterate-design-draft --draft-id <id> -p "dark theme" -p "minimal" -p "bold" --mode branch --json
|
|
1016
1037
|
|
|
1017
1038
|
# Iterate: Auto explore (only give exploration direction, and let Superdesign fill in details, e.g. explore different styles; Default do NOT use auto explore mode)
|
|
1018
|
-
superdesign iterate-design-draft --draft-id <id> -p "..." --mode branch --count 3 --json`).requiredOption('--draft-id <id>', 'Draft ID to iterate on').requiredOption('-p, --prompt <prompt...>', 'Iteration prompt(s). Use multiple -p for specific prompts per variation.').requiredOption('--mode <mode>', 'Iteration mode (replace or branch)').option('--count <count>', 'Number of variations (1-4). Only used when single prompt provided.').option('--context-file <paths...>', 'UI source files to include as context for AI generation').option('--json', 'Output in JSON format').addOption(new external_commander_namespaceObject.Option('--project-id <id>').hideHelp()).action(async (options)=>{
|
|
1039
|
+
superdesign iterate-design-draft --draft-id <id> -p "..." --mode branch --count 3 --json`).requiredOption('--draft-id <id>', 'Draft ID to iterate on').requiredOption('-p, --prompt <prompt...>', 'Iteration prompt(s). Use multiple -p for specific prompts per variation.').requiredOption('--mode <mode>', 'Iteration mode (replace or branch)').option('--count <count>', 'Number of variations (1-4). Only used when single prompt provided.').option('--context-file <paths...>', 'UI source files to include as context for AI generation').option('--model <modelId>', 'Model ID to use for generation (e.g. claude-sonnet-4-5)').option('--json', 'Output in JSON format').addOption(new external_commander_namespaceObject.Option('--project-id <id>').hideHelp()).action(async (options)=>{
|
|
1019
1040
|
if (options.json) setJsonMode(true);
|
|
1020
1041
|
job_runner_requireAuth(manager_isAuthenticated);
|
|
1042
|
+
validateModel(options.model);
|
|
1021
1043
|
const { prompts, count, mode } = validateOptions(options);
|
|
1022
1044
|
const contextFiles = options.contextFile ? readContextFiles(options.contextFile) : void 0;
|
|
1023
1045
|
const requestData = prompts.length > 1 ? {
|
|
1024
1046
|
prompts,
|
|
1025
1047
|
mode,
|
|
1026
|
-
contextFiles
|
|
1048
|
+
contextFiles,
|
|
1049
|
+
model: options.model
|
|
1027
1050
|
} : {
|
|
1028
1051
|
prompt: prompts[0],
|
|
1029
1052
|
count: count,
|
|
1030
1053
|
mode,
|
|
1031
|
-
contextFiles
|
|
1054
|
+
contextFiles,
|
|
1055
|
+
model: options.model
|
|
1032
1056
|
};
|
|
1033
1057
|
await runJob({
|
|
1034
1058
|
startLabel: 'Starting iteration...',
|
|
@@ -1099,9 +1123,10 @@ Usage Examples:
|
|
|
1099
1123
|
return parsed;
|
|
1100
1124
|
}
|
|
1101
1125
|
function createExecuteFlowPagesCommand() {
|
|
1102
|
-
const command = new external_commander_namespaceObject.Command('execute-flow-pages').description('Generate flow pages using AI').requiredOption('--draft-id <id>', 'Source draft ID').requiredOption('--pages <json>', 'JSON array of pages to generate [{title, prompt}]').option('--context <context>', 'Additional context for flow generation').option('--context-file <paths...>', 'UI source files to include as context for AI generation').option('--json', 'Output in JSON format').action(async (options)=>{
|
|
1126
|
+
const command = new external_commander_namespaceObject.Command('execute-flow-pages').description('Generate flow pages using AI').requiredOption('--draft-id <id>', 'Source draft ID').requiredOption('--pages <json>', 'JSON array of pages to generate [{title, prompt}]').option('--context <context>', 'Additional context for flow generation').option('--context-file <paths...>', 'UI source files to include as context for AI generation').option('--model <modelId>', 'Model ID to use for generation (e.g. claude-sonnet-4-5)').option('--json', 'Output in JSON format').action(async (options)=>{
|
|
1103
1127
|
if (options.json) setJsonMode(true);
|
|
1104
1128
|
job_runner_requireAuth(manager_isAuthenticated);
|
|
1129
|
+
validateModel(options.model);
|
|
1105
1130
|
let pages;
|
|
1106
1131
|
try {
|
|
1107
1132
|
pages = parsePages(options.pages);
|
|
@@ -1131,7 +1156,8 @@ Usage Examples:
|
|
|
1131
1156
|
startJob: ()=>executeFlowPages(options.draftId, {
|
|
1132
1157
|
flowContext: options.context,
|
|
1133
1158
|
pages,
|
|
1134
|
-
contextFiles
|
|
1159
|
+
contextFiles,
|
|
1160
|
+
model: options.model
|
|
1135
1161
|
}),
|
|
1136
1162
|
transformResult: (job)=>({
|
|
1137
1163
|
drafts: job.result.drafts,
|
|
@@ -1446,7 +1472,7 @@ Usage Examples:
|
|
|
1446
1472
|
durationMs: opts.durationMs,
|
|
1447
1473
|
errorCode: opts.errorCode,
|
|
1448
1474
|
options: opts.options,
|
|
1449
|
-
cliVersion: "0.2.
|
|
1475
|
+
cliVersion: "0.2.2",
|
|
1450
1476
|
os: `${external_os_default().platform()} ${external_os_default().release()}`
|
|
1451
1477
|
};
|
|
1452
1478
|
const posthog = getPostHog();
|
|
@@ -1514,7 +1540,7 @@ Usage Examples:
|
|
|
1514
1540
|
}
|
|
1515
1541
|
function createProgram() {
|
|
1516
1542
|
const program = new external_commander_namespaceObject.Command();
|
|
1517
|
-
program.name('superdesign').description('SuperDesign CLI - AI product designer for coding agents').version("0.2.
|
|
1543
|
+
program.name('superdesign').description('SuperDesign CLI - AI product designer for coding agents').version("0.2.2");
|
|
1518
1544
|
program.configureOutput({
|
|
1519
1545
|
writeErr: (str)=>{
|
|
1520
1546
|
if (!process.argv.includes('--json')) process.stderr.write(str);
|
package/dist/index.js
CHANGED
|
@@ -21,6 +21,19 @@ const EXIT_CODES = {
|
|
|
21
21
|
VALIDATION_ERROR: 5,
|
|
22
22
|
TIMEOUT: 6
|
|
23
23
|
};
|
|
24
|
+
const SUPPORTED_MODELS = [
|
|
25
|
+
'gemini-3-flash',
|
|
26
|
+
'gemini-3-pro',
|
|
27
|
+
'gemini-3.1-pro',
|
|
28
|
+
'claude-haiku-4-5',
|
|
29
|
+
'claude-sonnet-4-5',
|
|
30
|
+
'claude-opus-4-5',
|
|
31
|
+
'claude-opus-4-6',
|
|
32
|
+
'gpt-5.2',
|
|
33
|
+
'gpt-5.2-thinking',
|
|
34
|
+
'gpt-5-mini',
|
|
35
|
+
'kimi-k2.5'
|
|
36
|
+
];
|
|
24
37
|
const SKILLS_DIR = '.claude/skills/superdesign';
|
|
25
38
|
const SKILL_FILE_NAME = 'SKILL.md';
|
|
26
39
|
function getConfigDir() {
|
|
@@ -226,7 +239,7 @@ async function runAuthFlow(options = {}) {
|
|
|
226
239
|
try {
|
|
227
240
|
startSpinner('Creating auth session...');
|
|
228
241
|
const session = await createSession({
|
|
229
|
-
cliVersion: "0.2.
|
|
242
|
+
cliVersion: "0.2.2",
|
|
230
243
|
os: `${platform()} ${release()}`,
|
|
231
244
|
hostname: hostname()
|
|
232
245
|
});
|
|
@@ -634,6 +647,12 @@ function validateDeviceMode(device) {
|
|
|
634
647
|
process.exit(EXIT_CODES.VALIDATION_ERROR);
|
|
635
648
|
}
|
|
636
649
|
}
|
|
650
|
+
function validateModel(model) {
|
|
651
|
+
if (model && !SUPPORTED_MODELS.includes(model)) {
|
|
652
|
+
output_error(`Invalid model "${model}". Supported models: ${SUPPORTED_MODELS.join(', ')}`);
|
|
653
|
+
process.exit(EXIT_CODES.VALIDATION_ERROR);
|
|
654
|
+
}
|
|
655
|
+
}
|
|
637
656
|
function readFileIfExists(filePath) {
|
|
638
657
|
if (existsSync(filePath)) return readFileSync(filePath, 'utf-8');
|
|
639
658
|
}
|
|
@@ -838,10 +857,11 @@ function readContextFiles(filePaths) {
|
|
|
838
857
|
return results;
|
|
839
858
|
}
|
|
840
859
|
function createCreateDesignDraftCommand() {
|
|
841
|
-
const command = new Command('create-design-draft').description('Create a design draft from scratch without any reference, Default dont use this, use iterate-design-draft instead').requiredOption('--project-id <id>', 'Project ID').requiredOption('--title <title>', 'Draft title').requiredOption('-p, --prompt <prompt>', 'Design prompt for AI generation').option('--device <mode>', 'Device mode (mobile, tablet, desktop)', 'desktop').option('--context-file <paths...>', 'UI source files to include as context for AI generation').option('--json', 'Output in JSON format').action(async (options)=>{
|
|
860
|
+
const command = new Command('create-design-draft').description('Create a design draft from scratch without any reference, Default dont use this, use iterate-design-draft instead').requiredOption('--project-id <id>', 'Project ID').requiredOption('--title <title>', 'Draft title').requiredOption('-p, --prompt <prompt>', 'Design prompt for AI generation').option('--device <mode>', 'Device mode (mobile, tablet, desktop)', 'desktop').option('--context-file <paths...>', 'UI source files to include as context for AI generation').option('--model <modelId>', 'Model ID to use for generation (e.g. claude-sonnet-4-5)').option('--json', 'Output in JSON format').action(async (options)=>{
|
|
842
861
|
if (options.json) setJsonMode(true);
|
|
843
862
|
job_runner_requireAuth(manager_isAuthenticated);
|
|
844
863
|
validateDeviceMode(options.device);
|
|
864
|
+
validateModel(options.model);
|
|
845
865
|
const contextFiles = options.contextFile ? readContextFiles(options.contextFile) : void 0;
|
|
846
866
|
await runJob({
|
|
847
867
|
startLabel: 'Creating design draft...',
|
|
@@ -853,7 +873,8 @@ function createCreateDesignDraftCommand() {
|
|
|
853
873
|
title: options.title,
|
|
854
874
|
prompt: options.prompt,
|
|
855
875
|
deviceMode: options.device,
|
|
856
|
-
contextFiles
|
|
876
|
+
contextFiles,
|
|
877
|
+
model: options.model
|
|
857
878
|
}),
|
|
858
879
|
transformResult: (job)=>({
|
|
859
880
|
draftId: job.result.draftId,
|
|
@@ -925,20 +946,23 @@ Usage Examples:
|
|
|
925
946
|
superdesign iterate-design-draft --draft-id <id> -p "dark theme" -p "minimal" -p "bold" --mode branch --json
|
|
926
947
|
|
|
927
948
|
# Iterate: Auto explore (only give exploration direction, and let Superdesign fill in details, e.g. explore different styles; Default do NOT use auto explore mode)
|
|
928
|
-
superdesign iterate-design-draft --draft-id <id> -p "..." --mode branch --count 3 --json`).requiredOption('--draft-id <id>', 'Draft ID to iterate on').requiredOption('-p, --prompt <prompt...>', 'Iteration prompt(s). Use multiple -p for specific prompts per variation.').requiredOption('--mode <mode>', 'Iteration mode (replace or branch)').option('--count <count>', 'Number of variations (1-4). Only used when single prompt provided.').option('--context-file <paths...>', 'UI source files to include as context for AI generation').option('--json', 'Output in JSON format').addOption(new Option('--project-id <id>').hideHelp()).action(async (options)=>{
|
|
949
|
+
superdesign iterate-design-draft --draft-id <id> -p "..." --mode branch --count 3 --json`).requiredOption('--draft-id <id>', 'Draft ID to iterate on').requiredOption('-p, --prompt <prompt...>', 'Iteration prompt(s). Use multiple -p for specific prompts per variation.').requiredOption('--mode <mode>', 'Iteration mode (replace or branch)').option('--count <count>', 'Number of variations (1-4). Only used when single prompt provided.').option('--context-file <paths...>', 'UI source files to include as context for AI generation').option('--model <modelId>', 'Model ID to use for generation (e.g. claude-sonnet-4-5)').option('--json', 'Output in JSON format').addOption(new Option('--project-id <id>').hideHelp()).action(async (options)=>{
|
|
929
950
|
if (options.json) setJsonMode(true);
|
|
930
951
|
job_runner_requireAuth(manager_isAuthenticated);
|
|
952
|
+
validateModel(options.model);
|
|
931
953
|
const { prompts, count, mode } = validateOptions(options);
|
|
932
954
|
const contextFiles = options.contextFile ? readContextFiles(options.contextFile) : void 0;
|
|
933
955
|
const requestData = prompts.length > 1 ? {
|
|
934
956
|
prompts,
|
|
935
957
|
mode,
|
|
936
|
-
contextFiles
|
|
958
|
+
contextFiles,
|
|
959
|
+
model: options.model
|
|
937
960
|
} : {
|
|
938
961
|
prompt: prompts[0],
|
|
939
962
|
count: count,
|
|
940
963
|
mode,
|
|
941
|
-
contextFiles
|
|
964
|
+
contextFiles,
|
|
965
|
+
model: options.model
|
|
942
966
|
};
|
|
943
967
|
await runJob({
|
|
944
968
|
startLabel: 'Starting iteration...',
|
|
@@ -1009,9 +1033,10 @@ function parsePages(pagesJson) {
|
|
|
1009
1033
|
return parsed;
|
|
1010
1034
|
}
|
|
1011
1035
|
function createExecuteFlowPagesCommand() {
|
|
1012
|
-
const command = new Command('execute-flow-pages').description('Generate flow pages using AI').requiredOption('--draft-id <id>', 'Source draft ID').requiredOption('--pages <json>', 'JSON array of pages to generate [{title, prompt}]').option('--context <context>', 'Additional context for flow generation').option('--context-file <paths...>', 'UI source files to include as context for AI generation').option('--json', 'Output in JSON format').action(async (options)=>{
|
|
1036
|
+
const command = new Command('execute-flow-pages').description('Generate flow pages using AI').requiredOption('--draft-id <id>', 'Source draft ID').requiredOption('--pages <json>', 'JSON array of pages to generate [{title, prompt}]').option('--context <context>', 'Additional context for flow generation').option('--context-file <paths...>', 'UI source files to include as context for AI generation').option('--model <modelId>', 'Model ID to use for generation (e.g. claude-sonnet-4-5)').option('--json', 'Output in JSON format').action(async (options)=>{
|
|
1013
1037
|
if (options.json) setJsonMode(true);
|
|
1014
1038
|
job_runner_requireAuth(manager_isAuthenticated);
|
|
1039
|
+
validateModel(options.model);
|
|
1015
1040
|
let pages;
|
|
1016
1041
|
try {
|
|
1017
1042
|
pages = parsePages(options.pages);
|
|
@@ -1041,7 +1066,8 @@ function createExecuteFlowPagesCommand() {
|
|
|
1041
1066
|
startJob: ()=>executeFlowPages(options.draftId, {
|
|
1042
1067
|
flowContext: options.context,
|
|
1043
1068
|
pages,
|
|
1044
|
-
contextFiles
|
|
1069
|
+
contextFiles,
|
|
1070
|
+
model: options.model
|
|
1045
1071
|
}),
|
|
1046
1072
|
transformResult: (job)=>({
|
|
1047
1073
|
drafts: job.result.drafts,
|
|
@@ -1354,7 +1380,7 @@ async function trackCommand(opts) {
|
|
|
1354
1380
|
durationMs: opts.durationMs,
|
|
1355
1381
|
errorCode: opts.errorCode,
|
|
1356
1382
|
options: opts.options,
|
|
1357
|
-
cliVersion: "0.2.
|
|
1383
|
+
cliVersion: "0.2.2",
|
|
1358
1384
|
os: `${os.platform()} ${os.release()}`
|
|
1359
1385
|
};
|
|
1360
1386
|
const posthog = getPostHog();
|
|
@@ -1422,7 +1448,7 @@ function findFailedCommand(program) {
|
|
|
1422
1448
|
}
|
|
1423
1449
|
function createProgram() {
|
|
1424
1450
|
const program = new Command();
|
|
1425
|
-
program.name('superdesign').description('SuperDesign CLI - AI product designer for coding agents').version("0.2.
|
|
1451
|
+
program.name('superdesign').description('SuperDesign CLI - AI product designer for coding agents').version("0.2.2");
|
|
1426
1452
|
program.configureOutput({
|
|
1427
1453
|
writeErr: (str)=>{
|
|
1428
1454
|
if (!process.argv.includes('--json')) process.stderr.write(str);
|
|
@@ -51,3 +51,7 @@ export type DeviceMode = (typeof VALID_DEVICES)[number];
|
|
|
51
51
|
* Validate device mode option and exit with error if invalid
|
|
52
52
|
*/
|
|
53
53
|
export declare function validateDeviceMode(device: string | undefined): void;
|
|
54
|
+
/**
|
|
55
|
+
* Validate model option and exit with error if invalid
|
|
56
|
+
*/
|
|
57
|
+
export declare function validateModel(model: string | undefined): void;
|