vibeview 0.14.2 → 0.15.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.
@@ -421,7 +421,7 @@ var ANDROID_PRODUCTION_ARTIFACT = "android/app/build/outputs/bundle/release/*.aa
421
421
  var ANDROID_PRODUCTION_COMMAND = "yarn install --immutable && cd android && ./gradlew bundleRelease";
422
422
  var IOS_PRODUCTION_ARTIFACT = "ios/build/*.ipa";
423
423
  function productionDefaultsFor(cwd, platform) {
424
- if (platform === "android") {
424
+ if (platform === "android" || platform === "androidtv") {
425
425
  return { buildCommand: ANDROID_PRODUCTION_COMMAND, artifact: ANDROID_PRODUCTION_ARTIFACT };
426
426
  }
427
427
  if (platform === "ios") {
@@ -711,7 +711,13 @@ function runTar(args) {
711
711
 
712
712
  // src/commands/build.ts
713
713
  var CLOUD_PLATFORMS = ["ios", "android", "tvos", "androidtv"];
714
- var PRODUCTION_SIGNING_PLATFORMS = ["ios", "android"];
714
+ var PRODUCTION_SIGNING_PLATFORMS = ["ios", "android", "androidtv"];
715
+ function productionUnsupportedReason(platform) {
716
+ if (platform === "tvos") {
717
+ return "--production doesn't support tvos yet \u2014 tvOS production builds are not yet enabled";
718
+ }
719
+ return `--production doesn't support ${platform} \u2014 production signing supports ${PRODUCTION_SIGNING_PLATFORMS.join(", ")}`;
720
+ }
715
721
  function isCloudPlatform(p) {
716
722
  return CLOUD_PLATFORMS.includes(p);
717
723
  }
@@ -921,7 +927,7 @@ async function resolveCloudPlatforms(cwd, cfgRef, opts) {
921
927
  );
922
928
  if (unsupported.length > 0) {
923
929
  for (const p of unsupported) {
924
- const reason = `--production doesn't support ${p} \u2014 production signing supports ${PRODUCTION_SIGNING_PLATFORMS.join(" and ")}`;
930
+ const reason = productionUnsupportedReason(p);
925
931
  emitCloud(opts.json, { event: "skipped", platform: p, reason });
926
932
  if (!opts.json) console.error(chalk2.yellow(`\u26A0 skipping ${p}: ${reason}`));
927
933
  }
@@ -932,7 +938,7 @@ async function resolveCloudPlatforms(cwd, cfgRef, opts) {
932
938
  const prefix = exclusions ? `${exclusions}; ` : "";
933
939
  fail(
934
940
  opts,
935
- `--platform all --production: ${prefix}none of the configured platforms support production signing (${PRODUCTION_SIGNING_PLATFORMS.join(" and ")} only)`,
941
+ `--platform all --production: ${prefix}none of the configured platforms support production signing (${PRODUCTION_SIGNING_PLATFORMS.join(", ")} only)`,
936
942
  "config_required"
937
943
  );
938
944
  }
@@ -980,10 +986,7 @@ function requireCloudCapable(opts, platform) {
980
986
  }
981
987
  function requireProductionCapable(opts, platform) {
982
988
  if (opts.production && !PRODUCTION_SIGNING_PLATFORMS.includes(platform)) {
983
- fail(
984
- opts,
985
- `--production doesn't support ${platform} \u2014 production signing supports ${PRODUCTION_SIGNING_PLATFORMS.join(" and ")}`
986
- );
989
+ fail(opts, productionUnsupportedReason(platform));
987
990
  }
988
991
  }
989
992
  function persistPickedAppId(cwd, cfg, platform, appId) {
package/dist/cli.js CHANGED
@@ -13,7 +13,7 @@ import {
13
13
  readDevState,
14
14
  readMetroState,
15
15
  runAgentVerb
16
- } from "./chunk-S3ANKSHB.js";
16
+ } from "./chunk-B7GWF2BT.js";
17
17
  import {
18
18
  ApiClient,
19
19
  EXIT_INFRA_ERROR,
@@ -1711,16 +1711,24 @@ function defaultDeps4(client) {
1711
1711
  }
1712
1712
  var ANDROID_KIND = "android_keystore";
1713
1713
  var IOS_KIND = "ios_distribution";
1714
+ var CREDENTIAL_PLATFORMS = ["ios", "android", "tvos"];
1715
+ function isCredentialPlatform(p) {
1716
+ return CREDENTIAL_PLATFORMS.includes(p);
1717
+ }
1714
1718
  async function credentialsAdd(opts, deps) {
1715
1719
  const d = deps ?? defaultDeps4(clientFor2(opts));
1716
- if (!opts.platform || opts.platform !== "ios" && opts.platform !== "android") {
1717
- throw new UsageError('--platform is required and must be "ios" or "android"');
1720
+ if (!opts.platform || !isCredentialPlatform(opts.platform)) {
1721
+ throw new UsageError('--platform is required and must be "ios", "android", or "tvos"');
1718
1722
  }
1723
+ const platform = opts.platform;
1719
1724
  if (!opts.file) {
1720
1725
  throw new UsageError("--file is required");
1721
1726
  }
1722
- if (opts.platform === "ios" && !opts.profile) {
1723
- throw new UsageError("--profile is required for ios credentials (a .mobileprovision file)");
1727
+ const needsProfile = platform === "ios" || platform === "tvos";
1728
+ if (needsProfile && !opts.profile) {
1729
+ throw new UsageError(
1730
+ `--profile is required for ${platform} credentials (a .mobileprovision file)`
1731
+ );
1724
1732
  }
1725
1733
  const canPrompt = !opts.json && d.isTTY;
1726
1734
  if (!canPrompt) {
@@ -1733,7 +1741,7 @@ async function credentialsAdd(opts, deps) {
1733
1741
  const file = await d.readFile(opts.file);
1734
1742
  const filename = basename2(opts.file);
1735
1743
  let body;
1736
- if (opts.platform === "android") {
1744
+ if (platform === "android") {
1737
1745
  const storePassword = await d.prompt({ message: "Keystore (store) password", hidden: true });
1738
1746
  const keyPassword = await d.prompt({ message: "Key password", hidden: true });
1739
1747
  const keyAlias = await d.prompt({ message: "Key alias", hidden: false });
@@ -1752,7 +1760,7 @@ async function credentialsAdd(opts, deps) {
1752
1760
  const p12Password = await d.prompt({ message: ".p12 password", hidden: true });
1753
1761
  const profile = await d.readFile(opts.profile);
1754
1762
  body = {
1755
- platform: "ios",
1763
+ platform,
1756
1764
  kind: IOS_KIND,
1757
1765
  name,
1758
1766
  app: opts.app,
@@ -2227,7 +2235,10 @@ env.command("pull").description(
2227
2235
  var credentials = program.command("credentials").description("Manage app-signing credentials for production cloud builds");
2228
2236
  credentials.command("add").description(
2229
2237
  "Add a signing credential. Prompts for passwords with hidden input \u2014 they are never accepted as flags (a flag lands in shell history and in `ps`)."
2230
- ).option("--token <token>", "API token (or set VIBEVIEW_API_TOKEN)").option("--platform <platform>", "ios or android").option("--file <path>", "The keystore (.jks) or certificate (.p12) file").option("--profile <path>", "ios only: the .mobileprovision file (required for ios)").option("--app <id>", "Scope to a single app (default: org-wide)").option("--name <name>", "Credential name (default: the file basename without extension)").action((opts) => credentialsAdd(opts));
2238
+ ).option("--token <token>", "API token (or set VIBEVIEW_API_TOKEN)").option("--platform <platform>", "ios, android, or tvos").option("--file <path>", "The keystore (.jks) or certificate (.p12) file").option(
2239
+ "--profile <path>",
2240
+ "ios/tvos: the .mobileprovision file (required; tvOS profiles are distinct from iOS ones)"
2241
+ ).option("--app <id>", "Scope to a single app (default: org-wide)").option("--name <name>", "Credential name (default: the file basename without extension)").action((opts) => credentialsAdd(opts));
2231
2242
  credentials.command("list").description("List signing credentials (never prints key material)").option("--token <token>", "API token (or set VIBEVIEW_API_TOKEN)").option("--app <id>", "Scope to a single app (default: org-wide credentials only)").option("--json", "Print the raw credential list as a JSON array", false).action((opts) => credentialsList(opts));
2232
2243
  credentials.command("rm <name>").description("Remove a signing credential (replace by rm then add)").option("--token <token>", "API token (or set VIBEVIEW_API_TOKEN)").option("--app <id>", "Scope to a single app (default: org-wide)").option("--json", "Print the result as one JSON line", false).action((name, opts) => credentialsRm(name, opts));
2233
2244
  program.command("dev-status").description("Show the status of a `vibeview dev --detach` session in this project").option("--token <token>", "API token (or set VIBEVIEW_API_TOKEN)").option("--json", "Print as one JSON line", false).action((opts) => devStatus(opts));
@@ -2235,7 +2246,7 @@ program.command("dev-stop").description("Stop a `vibeview dev --detach` session
2235
2246
  program.command("mcp").description(
2236
2247
  "Run an MCP stdio server exposing the agent verbs (tap, swipe, type, ...) plus dev_start/dev_stop as tools"
2237
2248
  ).option("--token <token>", "API token (or set VIBEVIEW_API_TOKEN)").action(async (opts) => {
2238
- const { runMcpServer } = await import("./server-LTJ4F4DC.js");
2249
+ const { runMcpServer } = await import("./server-CSXGGDJL.js");
2239
2250
  await runMcpServer(opts);
2240
2251
  });
2241
2252
  program.command("agent-setup").description(
@@ -11,7 +11,7 @@ import {
11
11
  readDevState,
12
12
  renderEnvelope,
13
13
  startDevSession
14
- } from "./chunk-S3ANKSHB.js";
14
+ } from "./chunk-B7GWF2BT.js";
15
15
  import {
16
16
  ApiClient,
17
17
  resolveAuth
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibeview",
3
- "version": "0.14.2",
3
+ "version": "0.15.0",
4
4
  "description": "VibeView CLI -- run mobile tests from CI/CD pipelines",
5
5
  "type": "module",
6
6
  "bin": {