@tantawowa/hosanna-tools 3.29.3 → 3.30.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/README.md CHANGED
@@ -325,6 +325,7 @@ The CLI commands are organized into logical groups using colon-separated namespa
325
325
 
326
326
  ### Development Commands
327
327
  - `run` - Canonical cross-platform app launcher. Bare interactive runs show one destination picker; explicit platform options include Browser, Samsung Tizen, LG webOS, Roku, Apple, and Android hosts.
328
+ - `launch` - Restart an already-installed Roku, iOS, Apple TV, Android, or Android TV app with launch arguments. No build, install, generated config, or development server is involved. See [launching installed apps](docs/launch-installed.md).
328
329
  - `build` - Build/package without device discovery, deployment, launch, browser opening, or log streaming. Successful Tizen/webOS builds print their absolute `.wgt`/`.ipk` path.
329
330
  - `device:setup <tizen|webos>` - Guided, dry-runnable vendor setup: connect/authorize Samsung with SDB and verify an external signing profile, or register an LG ares alias and optionally run the official interactive key flow. HST never stores keys, certificates, or passphrases.
330
331
  - `capture` - Record an Apple simulator, a physical-TV capture-card input, or a macOS screen/window. The default timeout is 180 seconds; use `--timeout` to override it.
@@ -1,6 +1,6 @@
1
1
  {
2
- "buildDate": "2026-09-17T07:51:43+00:00",
3
- "buildDateISO": "2026-09-17T07:51:43.771Z",
2
+ "buildDate": "2026-09-30T18:30:38+00:00",
3
+ "buildDateISO": "2026-09-30T18:30:38.044Z",
4
4
  "timeZone": "UTC",
5
- "gitHash": "8d45484"
5
+ "gitHash": "4d841e2"
6
6
  }
package/dist/cli.js CHANGED
@@ -1943,6 +1943,42 @@ async function runEnvironmentCommand(action, verbose) {
1943
1943
  console.error(`❌ device:terminate failed: ${error instanceof Error ? error.message : String(error)}`);
1944
1944
  process.exitCode = 1;
1945
1945
  }
1946
+ })
1947
+ .command('launch <platform>', 'Restart an installed app with launch arguments, without building or installing', yargs => yargs
1948
+ .positional('platform', { type: 'string', choices: ['roku', 'ios', 'apple-tv', 'android', 'android-tv'], demandOption: true })
1949
+ .option('app', { type: 'string', describe: 'Installed app selector from .hosanna-tools/run.json (env: HOSANNA_RUN_APP)' })
1950
+ .option('launch-arg', { type: 'array', string: true, describe: 'Android Intent string extra or Roku ECP parameter, KEY=value; repeat for more values' })
1951
+ .option('launch-env', { type: 'array', string: true, describe: 'Apple app process environment, KEY=value; repeat for more values' })
1952
+ .option('device', { type: 'string', describe: 'Connected device IP, serial/UDID, or name' })
1953
+ .option('target', { type: 'string', choices: ['device', 'sim', 'simulator'], describe: 'Physical device or an already-running native simulator' })
1954
+ .option('app-id', { type: 'string', describe: 'Installed channel, bundle, or package ID; overrides project configuration' })
1955
+ .option('dry-run', { type: 'boolean', default: false, describe: 'Resolve the launch and print its plan without stopping or launching the app' })
1956
+ .option('json', { type: 'boolean', default: false, describe: 'Print the resolved launch as JSON' })
1957
+ .example('$0 launch apple-tv --app demo --launch-env APP_MODE=preview --device "Demo TV"', 'Restart an installed app with a process environment value')
1958
+ .example('$0 launch roku --app-id dev --launch-arg contentId=123 --device 192.168.1.50', 'Return Home and launch the sideloaded Roku app with a content ID'), async (args) => {
1959
+ try {
1960
+ const launcher = await Promise.resolve().then(() => __importStar(require('./run/launch-installed.js')));
1961
+ const plan = await launcher.createInstalledLaunchPlan({
1962
+ cwd: process.cwd(),
1963
+ platform: args.platform,
1964
+ app: args.app,
1965
+ launchArgs: launcher.parseInstalledLaunchValues(args['launch-arg']),
1966
+ launchEnv: launcher.parseInstalledLaunchValues(args['launch-env'], '--launch-env'),
1967
+ appId: args['app-id'],
1968
+ device: args.device,
1969
+ target: args.target === 'simulator' ? 'sim' : args.target,
1970
+ });
1971
+ if (!args['dry-run'])
1972
+ await launcher.executeInstalledLaunch(plan);
1973
+ if (args.json || args['dry-run'])
1974
+ console.info(JSON.stringify(plan, null, 2));
1975
+ else
1976
+ console.info(`Launched installed ${plan.appId} on ${plan.deviceName}.`);
1977
+ }
1978
+ catch (error) {
1979
+ console.error(`hst launch failed: ${error instanceof Error ? error.message : String(error)}`);
1980
+ process.exit(1);
1981
+ }
1946
1982
  })
1947
1983
  .command('target:list [platform]', 'List run targets discovered by hst, including web emulators, sims, and physical devices', yargs => yargs
1948
1984
  .positional('platform', {