vibeview 0.47.0 → 0.49.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-GA56B7WS.js → chunk-X5F4DA3S.js} +47 -3
- package/dist/cli.js +6 -3
- package/dist/{server-PSPIUL6A.js → server-NOJQ4XLR.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) {
|
|
@@ -190,6 +190,24 @@ function validateBuildEnv(env, platformKey) {
|
|
|
190
190
|
}
|
|
191
191
|
}
|
|
192
192
|
}
|
|
193
|
+
var XCODE_PLATFORMS = ["ios", "tvos"];
|
|
194
|
+
var XCODE_VERSION_RE = /^\d+\.\d+$/;
|
|
195
|
+
function validateBuildXcode(xcode, platformKey) {
|
|
196
|
+
if (xcode === void 0) return;
|
|
197
|
+
if (!XCODE_PLATFORMS.includes(platformKey)) {
|
|
198
|
+
throw new Error(
|
|
199
|
+
`vibeview.json: platforms.${platformKey}.build.xcode only applies to ios and tvos builds \u2014 remove it from the ${platformKey} block`
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
if (typeof xcode !== "string" || !XCODE_VERSION_RE.test(xcode)) {
|
|
203
|
+
throw new Error(
|
|
204
|
+
`vibeview.json: platforms.${platformKey}.build.xcode must be a version string like "27.1"`
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
function platformUsesXcode(platformKey) {
|
|
209
|
+
return XCODE_PLATFORMS.includes(platformKey);
|
|
210
|
+
}
|
|
193
211
|
function saveDevConfig(cwd, cfg) {
|
|
194
212
|
const target = join(cwd, FILE);
|
|
195
213
|
const tmp = join(cwd, `.${FILE}.${process.pid}.${Date.now()}.tmp`);
|
|
@@ -2142,6 +2160,13 @@ async function buildCommand(opts, cloudDeps) {
|
|
|
2142
2160
|
"usage"
|
|
2143
2161
|
);
|
|
2144
2162
|
}
|
|
2163
|
+
if (opts.xcode !== void 0) {
|
|
2164
|
+
fail(
|
|
2165
|
+
opts,
|
|
2166
|
+
"--xcode requires --cloud: a local build uses the Xcode selected on this machine",
|
|
2167
|
+
"usage"
|
|
2168
|
+
);
|
|
2169
|
+
}
|
|
2145
2170
|
const platform = await resolveBarePlatform(cwd, cfgRef.current, opts);
|
|
2146
2171
|
const build = await resolveBuildConfig(cwd, cfgRef, platform, opts);
|
|
2147
2172
|
const result = await runBuildForPlatform(
|
|
@@ -2152,6 +2177,7 @@ async function buildCommand(opts, cloudDeps) {
|
|
|
2152
2177
|
(l) => console.error(chalk3.dim(l))
|
|
2153
2178
|
);
|
|
2154
2179
|
for (const w of result.warnings ?? []) console.error(chalk3.yellow(`\u26A0 ${w}`));
|
|
2180
|
+
if (result.launch_warning) console.error(chalk3.yellow(`\u26A0 ${result.launch_warning}`));
|
|
2155
2181
|
persistUploadedAppId(cwd, platform, build, result.public_id);
|
|
2156
2182
|
if (opts.json) {
|
|
2157
2183
|
console.log(
|
|
@@ -2408,7 +2434,17 @@ function formatCost(costMicro) {
|
|
|
2408
2434
|
return `$${(costMicro / 1e6).toFixed(2)}`;
|
|
2409
2435
|
}
|
|
2410
2436
|
async function runCloudBuildCommand(cwd, cfgRef, opts, deps) {
|
|
2437
|
+
if (opts.xcode !== void 0 && !XCODE_VERSION_RE.test(opts.xcode)) {
|
|
2438
|
+
fail(opts, `--xcode must be a version like 27.1, got "${opts.xcode}"`, "usage");
|
|
2439
|
+
}
|
|
2411
2440
|
const platforms = await resolveCloudPlatforms(cwd, cfgRef, opts);
|
|
2441
|
+
if (opts.xcode !== void 0 && !platforms.some(platformUsesXcode)) {
|
|
2442
|
+
fail(
|
|
2443
|
+
opts,
|
|
2444
|
+
`--xcode only applies to ios and tvos builds \u2014 this run builds ${platforms.join(", ")}`,
|
|
2445
|
+
"usage"
|
|
2446
|
+
);
|
|
2447
|
+
}
|
|
2412
2448
|
const { token, baseUrl } = resolveAuth(opts);
|
|
2413
2449
|
const client = new ApiClient(baseUrl, token);
|
|
2414
2450
|
const d = deps ?? defaultCloudBuildDeps(client);
|
|
@@ -2423,6 +2459,7 @@ async function runCloudBuildCommand(cwd, cfgRef, opts, deps) {
|
|
|
2423
2459
|
for (const p of platforms) {
|
|
2424
2460
|
try {
|
|
2425
2461
|
validateBuildEnv(cfg?.platforms?.[p]?.build?.env, p);
|
|
2462
|
+
validateBuildXcode(cfg?.platforms?.[p]?.build?.xcode, p);
|
|
2426
2463
|
if (cfg?.platforms?.[p]?.build?.autoIncrement === true && opts.production && createFromArtifact.has(p)) {
|
|
2427
2464
|
throw new UsageError(
|
|
2428
2465
|
`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)`
|
|
@@ -2499,6 +2536,7 @@ ${offenders}`);
|
|
|
2499
2536
|
)
|
|
2500
2537
|
);
|
|
2501
2538
|
}
|
|
2539
|
+
const xcode = platformUsesXcode(p) ? opts.xcode ?? build.xcode : void 0;
|
|
2502
2540
|
return {
|
|
2503
2541
|
platform: p,
|
|
2504
2542
|
// OMITTED, never invented, for a platform whose app the artifact will
|
|
@@ -2511,7 +2549,8 @@ ${offenders}`);
|
|
|
2511
2549
|
artifact_path: artifactPath,
|
|
2512
2550
|
distribution: production ? "production" : "simulator",
|
|
2513
2551
|
...build.env ? { env: build.env } : {},
|
|
2514
|
-
...autoIncrement && production ? { auto_increment: true } : {}
|
|
2552
|
+
...autoIncrement && production ? { auto_increment: true } : {},
|
|
2553
|
+
...xcode ? { xcode } : {}
|
|
2515
2554
|
};
|
|
2516
2555
|
});
|
|
2517
2556
|
const uploadSpinner = !opts.json ? createSpinner("uploading source...") : null;
|
|
@@ -2649,8 +2688,12 @@ async function waitForCloudBuilds(builds, opts, deps) {
|
|
|
2649
2688
|
if (BUILD_TERMINAL_STATUSES.has(logs.status)) {
|
|
2650
2689
|
const final = await fetchFinalSummary(build.id, updated, deps);
|
|
2651
2690
|
state.set(build.id, final);
|
|
2691
|
+
const launchWarning = final.app_build?.launch_warning ?? null;
|
|
2652
2692
|
if (!opts.json) {
|
|
2653
2693
|
printOutcomeLine(final, multi);
|
|
2694
|
+
if (launchWarning) {
|
|
2695
|
+
console.error(chalk3.yellow(`${multi ? `[${final.platform}] ` : ""}\u26A0 ${launchWarning}`));
|
|
2696
|
+
}
|
|
2654
2697
|
}
|
|
2655
2698
|
emitCloud(opts.json, {
|
|
2656
2699
|
event: "build_finished",
|
|
@@ -2659,7 +2702,8 @@ async function waitForCloudBuilds(builds, opts, deps) {
|
|
|
2659
2702
|
cost_micro: final.cost_micro,
|
|
2660
2703
|
error_summary: final.error_summary,
|
|
2661
2704
|
app_build_id: final.app_build_id ?? null,
|
|
2662
|
-
app_public_id: final.app_public_id ?? null
|
|
2705
|
+
app_public_id: final.app_public_id ?? null,
|
|
2706
|
+
launch_warning: launchWarning
|
|
2663
2707
|
});
|
|
2664
2708
|
finalized.add(build.id);
|
|
2665
2709
|
}
|
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-X5F4DA3S.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";
|
|
@@ -4373,6 +4373,9 @@ program.command("build").description("Run your configured build command and uplo
|
|
|
4373
4373
|
"--production",
|
|
4374
4374
|
"--cloud only: build a signed, installable production artifact (.aab/.ipa) using uploaded signing credentials (see `vibeview credentials add`), instead of the default unsigned simulator build",
|
|
4375
4375
|
false
|
|
4376
|
+
).option(
|
|
4377
|
+
"--xcode <version>",
|
|
4378
|
+
"--cloud only, ios/tvos: the Xcode version to build with (e.g. 27.1), overriding vibeview.json build.xcode for this run"
|
|
4376
4379
|
).option("--json", "Print the result as one JSON line (NDJSON events with --cloud)", false).action((opts) => buildCommand(opts));
|
|
4377
4380
|
program.command("submit").description(
|
|
4378
4381
|
"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"
|
|
@@ -4505,7 +4508,7 @@ program.command("dev-reload").description(
|
|
|
4505
4508
|
program.command("mcp").description(
|
|
4506
4509
|
"Run an MCP stdio server exposing the agent verbs (tap, swipe, type, ...) plus dev_start/dev_stop/dev_reload as tools"
|
|
4507
4510
|
).option("--token <token>", "API token (or set VIBEVIEW_API_TOKEN)").action(async (opts) => {
|
|
4508
|
-
const { runMcpServer } = await import("./server-
|
|
4511
|
+
const { runMcpServer } = await import("./server-NOJQ4XLR.js");
|
|
4509
4512
|
await runMcpServer({ ...opts, version: pkg.version });
|
|
4510
4513
|
});
|
|
4511
4514
|
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-X5F4DA3S.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.49.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",
|