vibeview 0.48.0 → 0.50.0
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/{chunk-3LXR2YCS.js → chunk-42GZ4UEJ.js} +4 -1
- package/dist/{chunk-OMIZWILH.js → chunk-BPHIX73G.js} +39 -3
- package/dist/cli.js +6 -3
- package/dist/{server-3JZ2MN5N.js → server-Q2PYPAKB.js} +7 -5
- package/dist/{upload-app-TDR6PIWD.js → upload-app-DLBU3ZZY.js} +1 -1
- package/package.json +1 -1
|
@@ -960,7 +960,8 @@ async function uploadApp(filePath, options) {
|
|
|
960
960
|
url: `${baseUrl}/apps/${result.public_id}`,
|
|
961
961
|
warnings: result.warnings ?? [],
|
|
962
962
|
compat_status: result.compat_status ?? null,
|
|
963
|
-
findings: result.findings ?? []
|
|
963
|
+
findings: result.findings ?? [],
|
|
964
|
+
launch_warning: result.launch_warning ?? null
|
|
964
965
|
},
|
|
965
966
|
null,
|
|
966
967
|
2
|
|
@@ -986,6 +987,8 @@ async function uploadApp(filePath, options) {
|
|
|
986
987
|
for (const w of result.warnings ?? []) console.error(chalk.yellow(`
|
|
987
988
|
\u26A0 ${w}`));
|
|
988
989
|
}
|
|
990
|
+
if (result.launch_warning) console.error(chalk.yellow(`
|
|
991
|
+
\u26A0 ${result.launch_warning}`));
|
|
989
992
|
} catch (err) {
|
|
990
993
|
if (err instanceof ApiStatusError && err.status === 422 && err.data?.error === "build_refused") {
|
|
991
994
|
const findings = Array.isArray(err.data.findings) ? err.data.findings : [];
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
resolveArtifact,
|
|
14
14
|
resolveAuth,
|
|
15
15
|
uploadAppBuild
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-42GZ4UEJ.js";
|
|
17
17
|
|
|
18
18
|
// src/lib/formatters/not-checked.ts
|
|
19
19
|
function notCheckedSteps(steps) {
|
|
@@ -205,6 +205,22 @@ function validateBuildXcode(xcode, platformKey) {
|
|
|
205
205
|
);
|
|
206
206
|
}
|
|
207
207
|
}
|
|
208
|
+
function normalizeNodeVersion(value) {
|
|
209
|
+
if (typeof value === "number") {
|
|
210
|
+
return Number.isInteger(value) && value > 0 && value < 1e3 ? String(value) : null;
|
|
211
|
+
}
|
|
212
|
+
if (typeof value !== "string") return null;
|
|
213
|
+
const m = /^v?(\d{1,3})(?:\.x)?$/.exec(value.trim());
|
|
214
|
+
return m ? String(Number(m[1])) : null;
|
|
215
|
+
}
|
|
216
|
+
function validateBuildNode(node, platformKey) {
|
|
217
|
+
if (node === void 0) return;
|
|
218
|
+
if (normalizeNodeVersion(node) === null) {
|
|
219
|
+
throw new Error(
|
|
220
|
+
`vibeview.json: platforms.${platformKey}.build.node must be a Node.js major version like "24"`
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
208
224
|
function platformUsesXcode(platformKey) {
|
|
209
225
|
return XCODE_PLATFORMS.includes(platformKey);
|
|
210
226
|
}
|
|
@@ -2167,6 +2183,13 @@ async function buildCommand(opts, cloudDeps) {
|
|
|
2167
2183
|
"usage"
|
|
2168
2184
|
);
|
|
2169
2185
|
}
|
|
2186
|
+
if (opts.node !== void 0) {
|
|
2187
|
+
fail(
|
|
2188
|
+
opts,
|
|
2189
|
+
"--node requires --cloud: a local build uses the Node.js on this machine",
|
|
2190
|
+
"usage"
|
|
2191
|
+
);
|
|
2192
|
+
}
|
|
2170
2193
|
const platform = await resolveBarePlatform(cwd, cfgRef.current, opts);
|
|
2171
2194
|
const build = await resolveBuildConfig(cwd, cfgRef, platform, opts);
|
|
2172
2195
|
const result = await runBuildForPlatform(
|
|
@@ -2177,6 +2200,7 @@ async function buildCommand(opts, cloudDeps) {
|
|
|
2177
2200
|
(l) => console.error(chalk3.dim(l))
|
|
2178
2201
|
);
|
|
2179
2202
|
for (const w of result.warnings ?? []) console.error(chalk3.yellow(`\u26A0 ${w}`));
|
|
2203
|
+
if (result.launch_warning) console.error(chalk3.yellow(`\u26A0 ${result.launch_warning}`));
|
|
2180
2204
|
persistUploadedAppId(cwd, platform, build, result.public_id);
|
|
2181
2205
|
if (opts.json) {
|
|
2182
2206
|
console.log(
|
|
@@ -2436,6 +2460,10 @@ async function runCloudBuildCommand(cwd, cfgRef, opts, deps) {
|
|
|
2436
2460
|
if (opts.xcode !== void 0 && !XCODE_VERSION_RE.test(opts.xcode)) {
|
|
2437
2461
|
fail(opts, `--xcode must be a version like 27.1, got "${opts.xcode}"`, "usage");
|
|
2438
2462
|
}
|
|
2463
|
+
const nodeFlag = opts.node === void 0 ? void 0 : normalizeNodeVersion(opts.node);
|
|
2464
|
+
if (nodeFlag === null) {
|
|
2465
|
+
fail(opts, `--node must be a Node.js major version like 24, got "${opts.node}"`, "usage");
|
|
2466
|
+
}
|
|
2439
2467
|
const platforms = await resolveCloudPlatforms(cwd, cfgRef, opts);
|
|
2440
2468
|
if (opts.xcode !== void 0 && !platforms.some(platformUsesXcode)) {
|
|
2441
2469
|
fail(
|
|
@@ -2459,6 +2487,7 @@ async function runCloudBuildCommand(cwd, cfgRef, opts, deps) {
|
|
|
2459
2487
|
try {
|
|
2460
2488
|
validateBuildEnv(cfg?.platforms?.[p]?.build?.env, p);
|
|
2461
2489
|
validateBuildXcode(cfg?.platforms?.[p]?.build?.xcode, p);
|
|
2490
|
+
validateBuildNode(cfg?.platforms?.[p]?.build?.node, p);
|
|
2462
2491
|
if (cfg?.platforms?.[p]?.build?.autoIncrement === true && opts.production && createFromArtifact.has(p)) {
|
|
2463
2492
|
throw new UsageError(
|
|
2464
2493
|
`platforms.${p}.build.autoIncrement needs the build linked to an app \u2014 set appId in vibeview.json (a brand-new app's first build can't auto-increment)`
|
|
@@ -2536,6 +2565,7 @@ ${offenders}`);
|
|
|
2536
2565
|
);
|
|
2537
2566
|
}
|
|
2538
2567
|
const xcode = platformUsesXcode(p) ? opts.xcode ?? build.xcode : void 0;
|
|
2568
|
+
const node = nodeFlag ?? (build.node === void 0 ? void 0 : normalizeNodeVersion(build.node));
|
|
2539
2569
|
return {
|
|
2540
2570
|
platform: p,
|
|
2541
2571
|
// OMITTED, never invented, for a platform whose app the artifact will
|
|
@@ -2549,7 +2579,8 @@ ${offenders}`);
|
|
|
2549
2579
|
distribution: production ? "production" : "simulator",
|
|
2550
2580
|
...build.env ? { env: build.env } : {},
|
|
2551
2581
|
...autoIncrement && production ? { auto_increment: true } : {},
|
|
2552
|
-
...xcode ? { xcode } : {}
|
|
2582
|
+
...xcode ? { xcode } : {},
|
|
2583
|
+
...node ? { node } : {}
|
|
2553
2584
|
};
|
|
2554
2585
|
});
|
|
2555
2586
|
const uploadSpinner = !opts.json ? createSpinner("uploading source...") : null;
|
|
@@ -2687,8 +2718,12 @@ async function waitForCloudBuilds(builds, opts, deps) {
|
|
|
2687
2718
|
if (BUILD_TERMINAL_STATUSES.has(logs.status)) {
|
|
2688
2719
|
const final = await fetchFinalSummary(build.id, updated, deps);
|
|
2689
2720
|
state.set(build.id, final);
|
|
2721
|
+
const launchWarning = final.app_build?.launch_warning ?? null;
|
|
2690
2722
|
if (!opts.json) {
|
|
2691
2723
|
printOutcomeLine(final, multi);
|
|
2724
|
+
if (launchWarning) {
|
|
2725
|
+
console.error(chalk3.yellow(`${multi ? `[${final.platform}] ` : ""}\u26A0 ${launchWarning}`));
|
|
2726
|
+
}
|
|
2692
2727
|
}
|
|
2693
2728
|
emitCloud(opts.json, {
|
|
2694
2729
|
event: "build_finished",
|
|
@@ -2697,7 +2732,8 @@ async function waitForCloudBuilds(builds, opts, deps) {
|
|
|
2697
2732
|
cost_micro: final.cost_micro,
|
|
2698
2733
|
error_summary: final.error_summary,
|
|
2699
2734
|
app_build_id: final.app_build_id ?? null,
|
|
2700
|
-
app_public_id: final.app_public_id ?? null
|
|
2735
|
+
app_public_id: final.app_public_id ?? null,
|
|
2736
|
+
launch_warning: launchWarning
|
|
2701
2737
|
});
|
|
2702
2738
|
finalized.add(build.id);
|
|
2703
2739
|
}
|
package/dist/cli.js
CHANGED
|
@@ -34,7 +34,7 @@ import {
|
|
|
34
34
|
runAgentVerb,
|
|
35
35
|
runStepsNotChecked,
|
|
36
36
|
stepsNotCheckedLabel
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-BPHIX73G.js";
|
|
38
38
|
import {
|
|
39
39
|
ApiClient,
|
|
40
40
|
ApiStatusError,
|
|
@@ -57,7 +57,7 @@ import {
|
|
|
57
57
|
runCommandParseExitCode,
|
|
58
58
|
saveConfig,
|
|
59
59
|
uploadApp
|
|
60
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-42GZ4UEJ.js";
|
|
61
61
|
|
|
62
62
|
// src/cli.ts
|
|
63
63
|
import { createRequire } from "module";
|
|
@@ -4376,6 +4376,9 @@ program.command("build").description("Run your configured build command and uplo
|
|
|
4376
4376
|
).option(
|
|
4377
4377
|
"--xcode <version>",
|
|
4378
4378
|
"--cloud only, ios/tvos: the Xcode version to build with (e.g. 27.1), overriding vibeview.json build.xcode for this run"
|
|
4379
|
+
).option(
|
|
4380
|
+
"--node <major>",
|
|
4381
|
+
"--cloud only: the Node.js major to build with (e.g. 24), overriding vibeview.json build.node and the project .nvmrc for this run"
|
|
4379
4382
|
).option("--json", "Print the result as one JSON line (NDJSON events with --cloud)", false).action((opts) => buildCommand(opts));
|
|
4380
4383
|
program.command("submit").description(
|
|
4381
4384
|
"Submit a succeeded production cloud build's artifact to TestFlight (ios/tvos) or a Google Play track (android/androidtv) \u2014 binary upload only; store listing and review stay in the store consoles"
|
|
@@ -4508,7 +4511,7 @@ program.command("dev-reload").description(
|
|
|
4508
4511
|
program.command("mcp").description(
|
|
4509
4512
|
"Run an MCP stdio server exposing the agent verbs (tap, swipe, type, ...) plus dev_start/dev_stop/dev_reload as tools"
|
|
4510
4513
|
).option("--token <token>", "API token (or set VIBEVIEW_API_TOKEN)").action(async (opts) => {
|
|
4511
|
-
const { runMcpServer } = await import("./server-
|
|
4514
|
+
const { runMcpServer } = await import("./server-Q2PYPAKB.js");
|
|
4512
4515
|
await runMcpServer({ ...opts, version: pkg.version });
|
|
4513
4516
|
});
|
|
4514
4517
|
program.command("agent-setup").description(
|
|
@@ -34,12 +34,12 @@ import {
|
|
|
34
34
|
renderEnvelope,
|
|
35
35
|
resolveMetro,
|
|
36
36
|
startDevSession
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-BPHIX73G.js";
|
|
38
38
|
import {
|
|
39
39
|
ApiClient,
|
|
40
40
|
NotFoundError,
|
|
41
41
|
resolveAuth
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-42GZ4UEJ.js";
|
|
43
43
|
|
|
44
44
|
// src/mcp/server.ts
|
|
45
45
|
import { writeFileSync } from "fs";
|
|
@@ -998,7 +998,7 @@ async function handleUploadApp(args, deps) {
|
|
|
998
998
|
}
|
|
999
999
|
const name = typeof args.name === "string" && args.name ? args.name : void 0;
|
|
1000
1000
|
const upload = deps.uploadApp ?? (async (f, n) => {
|
|
1001
|
-
const { uploadAppBuild } = await import("./upload-app-
|
|
1001
|
+
const { uploadAppBuild } = await import("./upload-app-DLBU3ZZY.js");
|
|
1002
1002
|
const { result: result2 } = await uploadAppBuild(f, { ...deps.auth, name: n });
|
|
1003
1003
|
return result2;
|
|
1004
1004
|
});
|
|
@@ -1019,7 +1019,8 @@ async function handleUploadApp(args, deps) {
|
|
|
1019
1019
|
build_id: result.build_id ?? null,
|
|
1020
1020
|
version: result.version ?? null,
|
|
1021
1021
|
build_number: result.build_number ?? null,
|
|
1022
|
-
warnings
|
|
1022
|
+
warnings,
|
|
1023
|
+
launch_warning: result.launch_warning ?? null
|
|
1023
1024
|
};
|
|
1024
1025
|
const lines = [
|
|
1025
1026
|
`${isNew ? "New app created" : "Build added to existing app"}: ${result.name}`,
|
|
@@ -1027,7 +1028,8 @@ async function handleUploadApp(args, deps) {
|
|
|
1027
1028
|
...result.build_id != null ? [
|
|
1028
1029
|
`build_id: ${result.build_id}${result.version ? ` version ${result.version}${result.build_number ? ` (${result.build_number})` : ""}` : ""}`
|
|
1029
1030
|
] : [],
|
|
1030
|
-
...warnings.map((w) => `warning: ${w}`)
|
|
1031
|
+
...warnings.map((w) => `warning: ${w}`),
|
|
1032
|
+
...result.launch_warning ? [`warning: ${result.launch_warning}`] : []
|
|
1031
1033
|
];
|
|
1032
1034
|
return textResult(lines.join("\n"), payload);
|
|
1033
1035
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibeview",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.50.0",
|
|
4
4
|
"description": "VibeView CLI -- run your app on cloud iOS simulators, Android emulators, Apple TV, Android TV and Roku devices: a React Native dev loop, device control for you or your coding agent (CLI or MCP), and tests from CI",
|
|
5
5
|
"mcpName": "io.github.vibeview/vibeview",
|
|
6
6
|
"type": "module",
|