@tantawowa/hosanna-tools 3.1.0 → 3.3.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.
Files changed (58) hide show
  1. package/README.md +26 -30
  2. package/dist/build-info.json +3 -3
  3. package/dist/cli.js +42 -30
  4. package/dist/cli.js.map +1 -1
  5. package/dist/index.d.ts +1 -1
  6. package/dist/lib/env-info.d.ts +2 -0
  7. package/dist/lib/env-info.js +53 -26
  8. package/dist/lib/env-info.js.map +1 -1
  9. package/dist/lib/spawn-env.d.ts +1 -0
  10. package/dist/lib/spawn-env.js +36 -0
  11. package/dist/lib/spawn-env.js.map +1 -0
  12. package/dist/native/native-project.js +2 -2
  13. package/dist/native/native-project.js.map +1 -1
  14. package/dist/run/android-emulator.js +23 -8
  15. package/dist/run/android-emulator.js.map +1 -1
  16. package/dist/run/apple-tv.js +1 -1
  17. package/dist/run/apple-tv.js.map +1 -1
  18. package/dist/run/executor.d.ts +6 -0
  19. package/dist/run/executor.js +49 -8
  20. package/dist/run/executor.js.map +1 -1
  21. package/dist/run/hsconfig-static-assets.d.ts +20 -0
  22. package/dist/run/hsconfig-static-assets.js +306 -0
  23. package/dist/run/hsconfig-static-assets.js.map +1 -0
  24. package/dist/run/ios-simulator.js +1 -1
  25. package/dist/run/ios-simulator.js.map +1 -1
  26. package/dist/run/planner.d.ts +3 -1
  27. package/dist/run/planner.js +180 -51
  28. package/dist/run/planner.js.map +1 -1
  29. package/dist/run/run-config.d.ts +10 -0
  30. package/dist/run/run-config.js +20 -4
  31. package/dist/run/run-config.js.map +1 -1
  32. package/dist/run/run-controller.js +44 -50
  33. package/dist/run/run-controller.js.map +1 -1
  34. package/dist/run/targets.d.ts +1 -1
  35. package/dist/run/targets.js +6 -14
  36. package/dist/run/targets.js.map +1 -1
  37. package/dist/run/types.d.ts +2 -2
  38. package/dist/run/types.js +6 -6
  39. package/dist/run/types.js.map +1 -1
  40. package/dist/support-tools/android-metro-build.d.ts +1 -0
  41. package/dist/support-tools/android-metro-build.js +2 -0
  42. package/dist/support-tools/android-metro-build.js.map +1 -1
  43. package/dist/support-tools/apple-bundler.d.ts +1 -0
  44. package/dist/support-tools/apple-bundler.js +20 -4
  45. package/dist/support-tools/apple-bundler.js.map +1 -1
  46. package/dist/support-tools/build-config-resolver.js +13 -4
  47. package/dist/support-tools/build-config-resolver.js.map +1 -1
  48. package/dist/support-tools/command-debugger.d.ts +8 -0
  49. package/dist/support-tools/command-debugger.js +86 -0
  50. package/dist/support-tools/command-debugger.js.map +1 -1
  51. package/dist/support-tools/mcp-server/client.d.ts +23 -0
  52. package/dist/support-tools/mcp-server/client.js +91 -11
  53. package/dist/support-tools/mcp-server/client.js.map +1 -1
  54. package/dist/support-tools/mcp-server/tools.js +400 -3
  55. package/dist/support-tools/mcp-server/tools.js.map +1 -1
  56. package/dist/updater/sdk-manager.js +28 -5
  57. package/dist/updater/sdk-manager.js.map +1 -1
  58. package/package.json +1 -1
package/README.md CHANGED
@@ -145,7 +145,7 @@ The CLI commands are organized into logical groups using colon-separated namespa
145
145
 
146
146
  ### Development Commands
147
147
  - `run` - Canonical cross-platform app launcher. Requires `--platform` and supports web, Roku, iOS, Apple TV, Android, and Android TV launch targets.
148
- - `target:list` - List launch targets for humans or agents, including web previews, simulators, and physical devices.
148
+ - `target:list` - List launch targets for humans or agents, including web emulators, sims, and physical devices.
149
149
  - `dev:start` - Run dev processes: vite, generator watch, and optional debugger
150
150
  - `debugger:start` - Start the command debugger WebSocket proxy (only one debugger is needed for multiple apps; if the port is already in use, a friendly message is shown instead of crashing)
151
151
 
@@ -153,29 +153,27 @@ Examples:
153
153
 
154
154
  ```bash
155
155
  hst run --platform web
156
- hst run --platform roku --target web
157
- hst run --platform ios --target web
158
- hst run --platform android --target web
159
- hst run --platform apple-tv --target web
160
- hst run --platform android-tv --target web
161
- hst run --platform roku --target simulated
162
- hst run --platform roku --target emulated
163
- hst run --platform ios --target simulator --device "iPhone 17 Pro"
156
+ hst run --platform roku --target emulator
157
+ hst run --platform ios --target emulator
158
+ hst run --platform android --target emulator
159
+ hst run --platform apple-tv --target emulator
160
+ hst run --platform android-tv --target emulator
161
+ hst run --platform ios --target sim --device "iPhone 17 Pro"
164
162
  hst run --platform ios --target device --device "George iPhone" --no-logs
165
- hst run --platform android --target emulator --device "Pixel_8" --no-logs
163
+ hst run --platform android --target sim --device "Pixel_8" --no-logs
166
164
  hst run --platform android --target device --device "RF8M62694QT" --no-logs
167
- hst run --platform android-tv --target emulator --device "Television_1080p" --no-logs
168
- hst run --platform apple-tv --target simulator --device "Apple TV 4K"
165
+ hst run --platform android-tv --target sim --device "Television_1080p" --no-logs
166
+ hst run --platform apple-tv --target sim --device "Apple TV 4K"
169
167
  hst run --platform roku --target device --device "Living Room"
170
168
  hst run --platform roku --target device --device "Living Room" --replace
171
169
  hst target:list --platform ios --target device --json
172
- hst target:list --platform android --target emulator --json
173
- hst target:list --platform android-tv --target emulator --json
174
- hst target:list --platform apple-tv --target simulator --json
170
+ hst target:list --platform android --target sim --json
171
+ hst target:list --platform android-tv --target sim --json
172
+ hst target:list --platform apple-tv --target sim --json
175
173
  hst target:list --form-factor tv --json
176
174
  ```
177
175
 
178
- `hst run` is platform-explicit by design, so non-interactive agents do not guess between iOS, Apple TV, Android, Android TV, Roku, or web. `--target web` starts or reuses the shared Vite/debugger dev services for any platform and opens a profiled DOM runtime URL for interactive runs; use `--device <preset-id>` to override defaults such as `iphone-15`, `pixel-8`, `apple-tv-4k`, `android-tv-1080p`, or `rokufhd`, and use `--no-open` for server-only launches. For Roku, `simulated` and `emulated` are accepted aliases for the web preview; `device` deploys to a physical Roku. For iOS and Apple TV, `simulator` launches an Apple simulator and `device` launches paired physical hardware. For Android and Android TV, `emulator` launches an Android emulator and `device` launches ADB-connected physical hardware. Device/emulator runs record the target and refuse to overwrite a recorded session or safe-to-kill occupied resource in non-interactive mode unless `--replace` is passed. Preferred run defaults live in `.hosanna-tools/run.json`, and preferred devices live in `.hosanna-tools/devices.json` or `~/.hosanna-tools/devices.json`. Legacy `.hs-devices.json` files are still read for compatibility.
176
+ `hst run` is platform-explicit by design, so non-interactive agents do not guess between iOS, Apple TV, Android, Android TV, Roku, or web. `--target emulator` starts or reuses the shared Vite/debugger dev services for any platform and opens a profiled DOM runtime URL for interactive runs; use `--device <preset-id>` to override defaults such as `iphone-15`, `pixel-8`, `apple-tv-4k`, `android-tv-1080p`, or `rokufhd`, and use `--no-open` for server-only launches. `--target sim` launches the vendor virtual device for platforms that have one: Apple Simulator for iOS and Apple TV, Android Emulator for Android and Android TV. `--target device` launches or deploys to physical local hardware. `web` and `browser` remain accepted aliases for the web emulator; `simulator` and `simulated` remain accepted aliases for `sim`; `emulated` remains an accepted alias for the web emulator. Device/sim runs record the target and refuse to overwrite a recorded session or safe-to-kill occupied resource in non-interactive mode unless `--replace` is passed. Preferred run defaults live in `.hosanna-tools/run.json`, and preferred devices live in `.hosanna-tools/devices.json` or `~/.hosanna-tools/devices.json`. Legacy `.hs-devices.json` files are still read for compatibility.
179
177
 
180
178
  ### Roku Commands (`roku:*`) - Roku Deployment & Packaging
181
179
  - `roku:run` - Deploy a Roku app to a device (supports .zip file or folder)
@@ -328,25 +326,23 @@ silently break an install.
328
326
  ```bash
329
327
  # Development workflow
330
328
  hst run --platform web # Start/reuse web dev services
331
- hst run --platform roku --target web
332
- hst run --platform ios --target web
333
- hst run --platform android --target web
334
- hst run --platform apple-tv --target web
335
- hst run --platform android-tv --target web
336
- hst run --platform roku --target simulated
337
- hst run --platform roku --target emulated
338
- hst run --platform ios --target simulator --device "iPhone 17 Pro"
329
+ hst run --platform roku --target emulator
330
+ hst run --platform ios --target emulator
331
+ hst run --platform android --target emulator
332
+ hst run --platform apple-tv --target emulator
333
+ hst run --platform android-tv --target emulator
334
+ hst run --platform ios --target sim --device "iPhone 17 Pro"
339
335
  hst run --platform ios --target device --device "George iPhone" --no-logs
340
- hst run --platform android --target emulator --device "Pixel_8" --no-logs
336
+ hst run --platform android --target sim --device "Pixel_8" --no-logs
341
337
  hst run --platform android --target device --device "RF8M62694QT" --no-logs
342
- hst run --platform android-tv --target emulator --device "Television_1080p" --no-logs
343
- hst run --platform apple-tv --target simulator --device "Apple TV 4K"
338
+ hst run --platform android-tv --target sim --device "Television_1080p" --no-logs
339
+ hst run --platform apple-tv --target sim --device "Apple TV 4K"
344
340
  hst run --platform roku --target device --device "Living Room"
345
341
  hst run --platform roku --target device --device "Living Room" --replace
346
342
  hst target:list --platform ios --target device --json
347
- hst target:list --platform android --target emulator --json
348
- hst target:list --platform android-tv --target emulator --json
349
- hst target:list --platform apple-tv --target simulator --json
343
+ hst target:list --platform android --target sim --json
344
+ hst target:list --platform android-tv --target sim --json
345
+ hst target:list --platform apple-tv --target sim --json
350
346
  hst target:list --form-factor tv --json
351
347
  hst generate:all --watch # Generate code with file watching
352
348
  hst dev:start # Lower-level dev server task used by hst run
@@ -1,6 +1,6 @@
1
1
  {
2
- "buildDate": "2026-06-22T22:01:33+01:00",
3
- "buildDateISO": "2026-06-22T21:01:33.521Z",
2
+ "buildDate": "2026-07-01T07:59:40+01:00",
3
+ "buildDateISO": "2026-07-01T06:59:40.421Z",
4
4
  "timeZone": "Europe/London",
5
- "gitHash": "03dcf25"
5
+ "gitHash": "fd78d71"
6
6
  }
package/dist/cli.js CHANGED
@@ -69,11 +69,20 @@ function formatRunPlanText(plan, explain, command = 'run') {
69
69
  if (explain) {
70
70
  lines.push('', 'Resolution sources:');
71
71
  for (const [key, value] of Object.entries(plan.sources)) {
72
- lines.push(` ${key}: ${value}`);
72
+ lines.push(` ${key}: ${value}${explainResolvedValue(plan, key)}`);
73
73
  }
74
74
  }
75
75
  return lines.join('\n');
76
76
  }
77
+ function explainResolvedValue(plan, key) {
78
+ if (key === 'hsconfig' && plan.resolved.hsconfig) {
79
+ return ` (${plan.resolved.hsconfig})`;
80
+ }
81
+ if (key === 'hscProject' && plan.resolved.hscProject) {
82
+ return ` (${plan.resolved.hscProject})`;
83
+ }
84
+ return '';
85
+ }
77
86
  function rawCommandPositionals(command) {
78
87
  const raw = (0, helpers_1.hideBin)(process.argv);
79
88
  const index = raw.indexOf(command);
@@ -110,6 +119,7 @@ function runPlanFlagsFromCliArgs(args, format) {
110
119
  appPackage: rawHasFlag('app-package') ? args['app-package'] : undefined,
111
120
  files: rawHasFlag('files') ? args.files : undefined,
112
121
  deployTimeoutMs: rawHasFlag('deploy-timeout-ms') ? args['deploy-timeout-ms'] : undefined,
122
+ hsconfig: rawHasFlag('hsconfig') ? args.hsconfig : undefined,
113
123
  config: rawHasFlag('config') ? args.config : undefined,
114
124
  hscProject: rawHasFlag('hsc-project') ? args.hscProject : undefined,
115
125
  vitePort: rawHasFlag('vitePort') ? args.vitePort : undefined,
@@ -1400,7 +1410,7 @@ catch (err) {
1400
1410
  process.exit(1);
1401
1411
  }
1402
1412
  })
1403
- .command('target:list [platform]', 'List run targets discovered by hst, including web previews, simulators, and physical devices', yargs => yargs
1413
+ .command('target:list [platform]', 'List run targets discovered by hst, including web emulators, sims, and physical devices', yargs => yargs
1404
1414
  .positional('platform', {
1405
1415
  type: 'string',
1406
1416
  choices: ['web', 'roku', 'ios', 'apple-tv', 'android', 'android-tv'],
@@ -1413,7 +1423,7 @@ catch (err) {
1413
1423
  })
1414
1424
  .option('target', {
1415
1425
  type: 'string',
1416
- choices: ['browser', 'web', 'device', 'simulator', 'emulator', 'simulated', 'emulated'],
1426
+ choices: ['emulator', 'web', 'browser', 'sim', 'simulator', 'device', 'simulated', 'emulated'],
1417
1427
  describe: 'Filter by target kind',
1418
1428
  })
1419
1429
  .option('form-factor', {
@@ -1432,14 +1442,14 @@ catch (err) {
1432
1442
  default: 'text',
1433
1443
  describe: 'Output format',
1434
1444
  })
1435
- .example('$0 target:list --platform roku', 'List Roku web/device targets')
1436
- .example('$0 target:list --platform ios --target browser --json', 'List the iOS browser target as JSON')
1437
- .example('$0 target:list --platform ios --target simulator --json', 'List iOS simulator targets as JSON')
1445
+ .example('$0 target:list --platform roku', 'List Roku web emulator and device targets')
1446
+ .example('$0 target:list --platform ios --target emulator --json', 'List the iOS web emulator target as JSON')
1447
+ .example('$0 target:list --platform ios --target sim --json', 'List iOS simulator targets as JSON')
1438
1448
  .example('$0 target:list --platform ios --target device --json', 'List physical iOS device targets as JSON')
1439
- .example('$0 target:list --platform android --target emulator --json', 'List Android phone emulator targets as JSON')
1449
+ .example('$0 target:list --platform android --target sim --json', 'List Android phone emulator targets as JSON')
1440
1450
  .example('$0 target:list --platform android --target device --json', 'List physical Android device targets as JSON')
1441
- .example('$0 target:list --platform android-tv --target emulator --json', 'List Android TV emulator targets as JSON')
1442
- .example('$0 target:list --platform apple-tv --target simulator --json', 'List Apple TV simulator targets as JSON')
1451
+ .example('$0 target:list --platform android-tv --target sim --json', 'List Android TV emulator targets as JSON')
1452
+ .example('$0 target:list --platform apple-tv --target sim --json', 'List Apple TV simulator targets as JSON')
1443
1453
  .example('$0 target:list --form-factor tv --json', 'List TV-class targets as JSON'), async (args) => {
1444
1454
  try {
1445
1455
  const mod = await Promise.resolve().then(() => __importStar(require('./run/targets.js')));
@@ -1475,11 +1485,11 @@ catch (err) {
1475
1485
  })
1476
1486
  .positional('target', {
1477
1487
  type: 'string',
1478
- describe: 'Target kind: browser, device, simulator, or emulator.',
1488
+ describe: 'Target kind: emulator, sim, or device.',
1479
1489
  })
1480
1490
  .positional('deviceSelector', {
1481
1491
  type: 'string',
1482
- describe: 'Device IP, serial/UDID, AVD name, simulator name, or case-insensitive name substring.',
1492
+ describe: 'Device IP, serial/UDID, AVD name, simulator name, web preset id, or case-insensitive name substring.',
1483
1493
  })
1484
1494
  .option('platform', {
1485
1495
  type: 'string',
@@ -1492,12 +1502,12 @@ catch (err) {
1492
1502
  })
1493
1503
  .option('target', {
1494
1504
  type: 'string',
1495
- choices: ['browser', 'web', 'device', 'simulator', 'emulator', 'simulated', 'emulated'],
1505
+ choices: ['emulator', 'web', 'browser', 'sim', 'simulator', 'device', 'simulated', 'emulated'],
1496
1506
  describe: 'Target kind. Defaults by platform.',
1497
1507
  })
1498
1508
  .option('device', {
1499
1509
  type: 'string',
1500
- describe: 'Device IP, serial/UDID, case-insensitive name substring, or web preset id for --target browser',
1510
+ describe: 'Device IP, serial/UDID, case-insensitive name substring, or web preset id for --target emulator',
1501
1511
  })
1502
1512
  .option('appName', {
1503
1513
  type: 'string',
@@ -1519,13 +1529,14 @@ catch (err) {
1519
1529
  .option('dry-run', { type: 'boolean', default: false, describe: 'Print the resolved build RunPlan without executing it' })
1520
1530
  .option('format', { type: 'string', choices: ['text', 'json'], default: 'text', describe: 'Output format for --dry-run and build result' })
1521
1531
  .option('explain', { type: 'boolean', default: false, describe: 'Include resolution source details in text dry-run output' })
1532
+ .option('hsconfig', { type: 'string', describe: 'Explicit hsconfig file for Roku/native build planning' })
1522
1533
  .option('hsc-project', { type: 'string', describe: 'Explicit Roku HSC project file for hst build planning' })
1523
- .option('config', { type: 'string', describe: 'Alias for --hsc-project' })
1534
+ .option('config', { type: 'string', describe: 'Back-compatible alias for --hsconfig / --hsc-project' })
1524
1535
  .option('source-root', { type: 'string', describe: 'Roku source root to preserve in build planning output' })
1525
1536
  .example('$0 build roku dev device', 'Build the dev Roku output without deploying or streaming logs')
1526
1537
  .example('$0 build roku prod device --hsc-project platforms/hsconfig-roku.prod.json', 'Build Roku with an explicit HSC project file')
1527
- .example('$0 build ios dev simulator --device "iPhone 17 Pro"', 'Build an iOS simulator target without install, launch, or logs')
1528
- .example('$0 build web dev browser', 'Resolve web runtime build config without opening a browser'), async (args) => {
1538
+ .example('$0 build ios dev sim --device "iPhone 17 Pro"', 'Build an iOS simulator target without install, launch, or logs')
1539
+ .example('$0 build web dev emulator', 'Resolve web runtime build config without opening a browser'), async (args) => {
1529
1540
  await runRunPlanCommand('build', args);
1530
1541
  })
1531
1542
  .command('run [platform] [env] [target] [deviceSelector]', 'Launch a Hosanna app on a platform target (web, Roku, iOS, Apple TV, Android, and Android TV targets are supported)', yargs => yargs
@@ -1540,11 +1551,11 @@ catch (err) {
1540
1551
  })
1541
1552
  .positional('target', {
1542
1553
  type: 'string',
1543
- describe: 'Target kind: browser, device, simulator, or emulator.',
1554
+ describe: 'Target kind: emulator, sim, or device.',
1544
1555
  })
1545
1556
  .positional('deviceSelector', {
1546
1557
  type: 'string',
1547
- describe: 'Device IP, serial/UDID, AVD name, simulator name, or case-insensitive name substring.',
1558
+ describe: 'Device IP, serial/UDID, AVD name, simulator name, web preset id, or case-insensitive name substring.',
1548
1559
  })
1549
1560
  .option('platform', {
1550
1561
  type: 'string',
@@ -1557,12 +1568,12 @@ catch (err) {
1557
1568
  })
1558
1569
  .option('target', {
1559
1570
  type: 'string',
1560
- choices: ['browser', 'web', 'device', 'simulator', 'emulator', 'simulated', 'emulated'],
1571
+ choices: ['emulator', 'web', 'browser', 'sim', 'simulator', 'device', 'simulated', 'emulated'],
1561
1572
  describe: 'Target kind. Defaults by platform.',
1562
1573
  })
1563
1574
  .option('device', {
1564
1575
  type: 'string',
1565
- describe: 'Device IP, serial/UDID, case-insensitive name substring, or web preset id for --target browser',
1576
+ describe: 'Device IP, serial/UDID, case-insensitive name substring, or web preset id for --target emulator',
1566
1577
  })
1567
1578
  .option('appName', {
1568
1579
  type: 'string',
@@ -1592,8 +1603,9 @@ catch (err) {
1592
1603
  .option('build-only', { type: 'boolean', default: false, describe: 'Plan or run build steps without opening browser/log streams where supported' })
1593
1604
  .option('no-logs', { type: 'boolean', default: false, describe: 'Do not stream device logs after launch where supported' })
1594
1605
  .option('build-cmd', { type: 'string', describe: 'Override the platform build command for device runs' })
1606
+ .option('hsconfig', { type: 'string', describe: 'Explicit hsconfig file for Roku/native run planning' })
1595
1607
  .option('hsc-project', { type: 'string', describe: 'Explicit Roku HSC project file for hst run planning' })
1596
- .option('config', { type: 'string', describe: 'Alias for --hsc-project' })
1608
+ .option('config', { type: 'string', describe: 'Back-compatible alias for --hsconfig / --hsc-project' })
1597
1609
  .option('app-package', { type: 'string', describe: 'Roku app .zip or folder to deploy for device runs' })
1598
1610
  .option('source-root', { type: 'string', describe: 'Roku source root to deploy for device runs' })
1599
1611
  .option('source-map-root', { type: 'string', describe: 'Roku source map root for log resolution' })
@@ -1603,17 +1615,17 @@ catch (err) {
1603
1615
  .option('logs', { type: 'boolean', default: false, describe: 'Enable verbose deploy logging where supported' })
1604
1616
  .option('applySourceMapToPaths', { type: 'boolean', default: true, describe: 'Resolve Roku stack trace paths with source maps during log streaming' })
1605
1617
  .example('$0 run --platform web', 'Start/reuse web dev services for this app')
1606
- .example('$0 run --platform roku --target browser', 'Start/reuse the Roku TV browser preview')
1607
- .example('$0 run --platform ios --target browser', 'Start/reuse the iPhone-shaped browser runtime profile')
1608
- .example('$0 run --platform android --target browser --device pixel-8', 'Start/reuse the Android-shaped browser runtime profile')
1609
- .example('$0 run --platform apple-tv --target browser --no-open', 'Start/reuse the Apple TV browser runtime profile without opening a browser')
1610
- .example('$0 run --platform android-tv --target browser', 'Start/reuse the Android TV browser runtime profile')
1611
- .example('$0 run --platform ios --target simulator --device "iPhone 17 Pro"', 'Build, install, and launch on an iOS simulator')
1618
+ .example('$0 run --platform roku --target emulator', 'Start/reuse the Roku TV web emulator')
1619
+ .example('$0 run --platform ios --target emulator', 'Start/reuse the iPhone-shaped web emulator profile')
1620
+ .example('$0 run --platform android --target emulator --device pixel-8', 'Start/reuse the Android-shaped web emulator profile')
1621
+ .example('$0 run --platform apple-tv --target emulator --no-open', 'Start/reuse the Apple TV web emulator profile without opening a browser')
1622
+ .example('$0 run --platform android-tv --target emulator', 'Start/reuse the Android TV web emulator profile')
1623
+ .example('$0 run --platform ios --target sim --device "iPhone 17 Pro"', 'Build, install, and launch on an iOS simulator')
1612
1624
  .example('$0 run --platform ios --target device --device "George iPhone" --no-logs', 'Build, install, and launch on a physical iPhone')
1613
- .example('$0 run --platform android --target emulator --device "Pixel_8" --no-logs', 'Build, install, and launch on an Android phone emulator')
1625
+ .example('$0 run --platform android --target sim --device "Pixel_8" --no-logs', 'Build, install, and launch on an Android phone emulator')
1614
1626
  .example('$0 run --platform android --target device --device "RF8M62694QT" --no-logs', 'Build, install, and launch on a physical Android device')
1615
- .example('$0 run --platform android-tv --target emulator --device "Television_1080p" --no-logs', 'Build, install, and launch on an Android TV emulator')
1616
- .example('$0 run --platform apple-tv --target simulator --device "Apple TV 4K"', 'Build, install, and launch on an Apple TV simulator')
1627
+ .example('$0 run --platform android-tv --target sim --device "Television_1080p" --no-logs', 'Build, install, and launch on an Android TV emulator')
1628
+ .example('$0 run --platform apple-tv --target sim --device "Apple TV 4K"', 'Build, install, and launch on an Apple TV simulator')
1617
1629
  .example('$0 run --platform roku --target device --device "living room"', 'Build, deploy, launch, and stream logs on a Roku device')
1618
1630
  .example('$0 run roku dev device --app criterion', 'Run a configured monorepo app/flavor')
1619
1631
  .example('$0 run roku prod device --hsc-project platforms/hsconfig.criterion.prod.json', 'Override the Roku HSC project file'), async (args) => {