@myerscarpenter/quest-dev 1.3.0 → 1.4.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0IH;;GAEG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,WAAW,GAAE,OAAe,EAC5B,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CAkEf"}
1
+ {"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2IH;;GAEG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,WAAW,GAAE,OAAe,EAC5B,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CAwEf"}
@@ -2,7 +2,7 @@
2
2
  * Quest open command
3
3
  * Opens a URL in Quest browser with proper ADB port forwarding
4
4
  */
5
- import { checkADBPath, checkADBDevices, ensurePortForwarding, ensureCDPForwarding, isBrowserRunning, launchBrowser, getCDPPort } from '../utils/adb.js';
5
+ import { checkADBPath, checkADBDevices, ensurePortForwarding, ensureCDPForwarding, refreshCDPForwarding, isBrowserRunning, launchBrowser, getCDPPort } from '../utils/adb.js';
6
6
  import { execCommandFull } from '../utils/exec.js';
7
7
  /**
8
8
  * Close all tabs except the one with the target URL
@@ -166,11 +166,16 @@ export async function openCommand(url, closeOthers = false, browser = 'com.oculu
166
166
  await launchBrowser(url, browser);
167
167
  }
168
168
  }
169
+ // Re-detect CDP socket now that browser is running.
170
+ // The initial forwarding may have used the generic socket before the browser
171
+ // had a PID, or may be stale from a previous browser process.
172
+ // Non-default browsers (e.g. org.chromium.chrome) often can't bind the generic
173
+ // chrome_devtools_remote socket and create a PID-specific one instead.
174
+ console.log('Waiting for browser to stabilize...');
175
+ await new Promise(resolve => setTimeout(resolve, browserRunning ? 2000 : 3000));
176
+ await refreshCDPForwarding(browser);
169
177
  // Close other tabs if requested
170
178
  if (closeOthers) {
171
- // Wait for browser to stabilize after launch/navigation
172
- console.log('Waiting for browser to stabilize...');
173
- await new Promise(resolve => setTimeout(resolve, 2000));
174
179
  await closeOtherTabs(url, browser);
175
180
  }
176
181
  console.log('\nDone!\n');
@@ -1 +1 @@
1
- {"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"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"}
package/build/index.js CHANGED
@@ -13,6 +13,8 @@ import { openCommand } from './commands/open.js';
13
13
  import { startCommand, stopCommand, statusCommand, tailCommand } from './commands/logcat.js';
14
14
  import { batteryCommand } from './commands/battery.js';
15
15
  import { stayAwakeCommand, stayAwakeWatchdog, stayAwakeStatus, stayAwakeDisable } from './commands/stay-awake.js';
16
+ import { saveConfig, loadConfig } from './utils/config.js';
17
+ import { setVerbose } from './utils/verbose.js';
16
18
  // Read version from package.json
17
19
  const __dirname = dirname(fileURLToPath(import.meta.url));
18
20
  const packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));
@@ -22,16 +24,18 @@ const cli = yargs(hideBin(process.argv))
22
24
  .scriptName('quest-dev')
23
25
  .version(version)
24
26
  .usage('Usage: $0 <command> [options]')
25
- .demandCommand(1, 'You must provide a command')
27
+ .demandCommand(1, '')
26
28
  .strict()
29
+ .option('verbose', {
30
+ describe: 'Show detailed debug output',
31
+ type: 'boolean',
32
+ default: false,
33
+ global: true,
34
+ })
27
35
  .fail((msg, err, yargs) => {
28
- if (msg) {
29
- console.error(`Error: ${msg}\n`);
30
- }
31
- if (err) {
36
+ yargs.showHelp();
37
+ if (err)
32
38
  console.error(err.message);
33
- }
34
- console.error('Run "quest-dev --help" for usage information.');
35
39
  process.exit(1);
36
40
  })
37
41
  .help()
@@ -117,16 +121,16 @@ cli.command('battery', 'Show Quest battery percentage and charging status', () =
117
121
  cli.command('stay-awake', 'Keep Quest awake (disables autosleep, guardian, dialogs)', (yargs) => {
118
122
  return yargs
119
123
  .option('pin', {
120
- describe: 'Meta Store PIN (or set in .quest-dev.json / ~/.config/quest-dev/config.json)',
124
+ describe: 'Meta Store PIN (or save with: quest-dev config --pin)',
121
125
  type: 'string',
122
126
  })
123
127
  .option('idle-timeout', {
124
- describe: 'Idle timeout in milliseconds (default: 300000 = 5 minutes, or set idleTimeout in config)',
128
+ describe: 'Idle timeout in milliseconds (default: 300000 = 5 minutes, or save with: quest-dev config)',
125
129
  type: 'number',
126
130
  alias: 'i',
127
131
  })
128
132
  .option('low-battery', {
129
- describe: 'Exit when battery drops to this percentage (default: 10, or set lowBattery in config)',
133
+ describe: 'Exit when battery drops to this percentage (default: 10, or save with: quest-dev config)',
130
134
  type: 'number',
131
135
  })
132
136
  .option('disable', {
@@ -156,6 +160,52 @@ cli.command('stay-awake', 'Keep Quest awake (disables autosleep, guardian, dialo
156
160
  await stayAwakeCommand(argv.pin, argv.idleTimeout, argv.lowBattery, argv.verbose);
157
161
  }
158
162
  });
163
+ // Config command
164
+ cli.command('config', 'Save default settings for quest-dev commands', (yargs) => {
165
+ return yargs
166
+ .option('pin', {
167
+ describe: 'Meta Store PIN',
168
+ type: 'string',
169
+ })
170
+ .option('idle-timeout', {
171
+ describe: 'Idle timeout in milliseconds for stay-awake',
172
+ type: 'number',
173
+ })
174
+ .option('low-battery', {
175
+ describe: 'Exit stay-awake when battery drops to this percentage',
176
+ type: 'number',
177
+ })
178
+ .option('show', {
179
+ describe: 'Show current config and exit',
180
+ type: 'boolean',
181
+ default: false,
182
+ });
183
+ }, (argv) => {
184
+ if (argv.show) {
185
+ const config = loadConfig();
186
+ if (Object.keys(config).length === 0) {
187
+ console.log('No config found.');
188
+ }
189
+ else {
190
+ console.log(JSON.stringify(config, null, 2));
191
+ }
192
+ return;
193
+ }
194
+ const values = {};
195
+ if (argv.pin !== undefined)
196
+ values.pin = argv.pin;
197
+ if (argv.idleTimeout !== undefined)
198
+ values.idleTimeout = argv.idleTimeout;
199
+ if (argv.lowBattery !== undefined)
200
+ values.lowBattery = argv.lowBattery;
201
+ if (Object.keys(values).length === 0) {
202
+ console.error('No config values provided. Use --pin, --idle-timeout, or --low-battery.');
203
+ process.exit(1);
204
+ }
205
+ saveConfig(values);
206
+ console.log('Config saved:');
207
+ console.log(JSON.stringify(values, null, 2));
208
+ });
159
209
  // Stay-awake watchdog (internal subcommand, spawned by stay-awake parent)
160
210
  cli.command('stay-awake-watchdog', false, // Hide from help
161
211
  (yargs) => {
@@ -171,6 +221,12 @@ cli.command('stay-awake-watchdog', false, // Hide from help
171
221
  }, async (argv) => {
172
222
  await stayAwakeWatchdog(argv.parentPid, argv.pin);
173
223
  });
224
+ // Set verbose flag before any command runs
225
+ cli.middleware((argv) => {
226
+ if (argv.verbose) {
227
+ setVerbose(true);
228
+ }
229
+ });
174
230
  // Parse and execute
175
231
  cli.parse();
176
232
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,12 @@ export declare function getCDPPort(browser?: string): Promise<number>;
33
33
  * Set up only CDP forwarding (for external URLs that don't need reverse forwarding)
34
34
  */
35
35
  export declare function ensureCDPForwarding(browser?: string): Promise<void>;
36
+ /**
37
+ * Re-detect CDP socket after browser launch and update forwarding if needed.
38
+ * This handles the case where the initial forwarding used the generic socket
39
+ * (before the browser had a PID), but the browser created a PID-specific socket.
40
+ */
41
+ export declare function refreshCDPForwarding(browser?: string): Promise<void>;
36
42
  /**
37
43
  * Check if USB file transfer is authorized on Quest
38
44
  * After reboot, user must click notification to allow file access
@@ -1 +1 @@
1
- {"version":3,"file":"adb.d.ts","sourceRoot":"","sources":["../../src/utils/adb.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiEH;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAiBrC;AAoBD;;GAEG;AACH,wBAAsB,eAAe,CAAC,UAAU,SAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAqCtE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAiB9D;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CA8Cf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,MAA6B,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/F;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAA6B,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBzG;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,GAAE,MAA6B,GAAG,OAAO,CAAC,MAAM,CAAC,CAGxF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CAkCf;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAe1D;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAUrD;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,eAAe,GAAG,UAAU,GAAG,cAAc,CAAC;CACtD;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAkC3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAE3D"}
1
+ {"version":3,"file":"adb.d.ts","sourceRoot":"","sources":["../../src/utils/adb.ts"],"names":[],"mappings":"AAAA;;GAEG;AAuFH;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAiBrC;AAoBD;;GAEG;AACH,wBAAsB,eAAe,CAAC,UAAU,SAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAqCtE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAiB9D;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CA8Cf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,MAA6B,GAAG,OAAO,CAAC,OAAO,CAAC,CAqB/F;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAA6B,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBzG;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,GAAE,MAA6B,GAAG,OAAO,CAAC,MAAM,CAAC,CAGxF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CAkCf;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAe1D;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAUrD;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,eAAe,GAAG,UAAU,GAAG,cAAc,CAAC;CACtD;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAkC3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAE3D"}
@@ -4,6 +4,7 @@
4
4
  import which from 'which';
5
5
  import net from 'net';
6
6
  import { execCommand, execCommandFull } from './exec.js';
7
+ import { verbose } from './verbose.js';
7
8
  const CDP_PORT = 9223; // Chrome DevTools Protocol port (Quest browser default)
8
9
  /**
9
10
  * Get browser process PID
@@ -11,20 +12,31 @@ const CDP_PORT = 9223; // Chrome DevTools Protocol port (Quest browser default)
11
12
  async function getBrowserPID(packageName) {
12
13
  try {
13
14
  const result = await execCommandFull('adb', ['shell', `ps | grep ${packageName}`]);
15
+ verbose('getBrowserPID ps output:', result.stdout?.trim());
14
16
  if (!result.stdout)
15
17
  return null;
16
18
  // Parse ps output: USER PID PPID ... NAME
19
+ // Only match the main process (exact package name at end of line), not
20
+ // child processes like :sandboxed_process0 or :privileged_process0
17
21
  const lines = result.stdout.trim().split('\n');
18
22
  for (const line of lines) {
19
23
  if (line.includes('grep'))
20
24
  continue; // Skip grep itself
21
25
  const parts = line.trim().split(/\s+/);
22
26
  if (parts.length >= 2) {
23
- return parseInt(parts[1], 10); // PID is second column
27
+ // Check that the process name is exactly the package (last column)
28
+ const processName = parts[parts.length - 1];
29
+ if (processName === packageName) {
30
+ const pid = parseInt(parts[1], 10);
31
+ verbose('getBrowserPID found PID:', pid, 'for', packageName);
32
+ return pid;
33
+ }
24
34
  }
25
35
  }
36
+ verbose('getBrowserPID: no exact match for', packageName);
26
37
  }
27
- catch {
38
+ catch (e) {
39
+ verbose('getBrowserPID error:', e);
28
40
  return null;
29
41
  }
30
42
  return null;
@@ -36,29 +48,39 @@ async function getBrowserPID(packageName) {
36
48
  async function detectCDPSocket(packageName) {
37
49
  const pid = await getBrowserPID(packageName);
38
50
  if (pid) {
39
- // Try PID-based socket first
40
- try {
41
- const result = await execCommandFull('adb', [
42
- 'shell',
43
- `cat /proc/net/unix | grep chrome_devtools_remote_${pid}`
44
- ]);
45
- if (result.stdout.includes(`chrome_devtools_remote_${pid}`)) {
46
- return `chrome_devtools_remote_${pid}`;
51
+ // Try PID-based socket, with retries (socket may take a moment to appear)
52
+ const socketName = `chrome_devtools_remote_${pid}`;
53
+ for (let attempt = 0; attempt < 5; attempt++) {
54
+ try {
55
+ const result = await execCommandFull('adb', [
56
+ 'shell',
57
+ `cat /proc/net/unix | grep ${socketName}`
58
+ ]);
59
+ if (result.stdout.includes(socketName)) {
60
+ verbose('detectCDPSocket: found PID-specific socket:', socketName, `(attempt ${attempt + 1})`);
61
+ return socketName;
62
+ }
63
+ }
64
+ catch {
65
+ // ignore
66
+ }
67
+ if (attempt < 4) {
68
+ verbose('detectCDPSocket: PID-specific socket not found yet, retrying in 1s...', `(attempt ${attempt + 1})`);
69
+ await new Promise(resolve => setTimeout(resolve, 1000));
47
70
  }
48
71
  }
49
- catch {
50
- // Fall through to default
51
- }
72
+ verbose('detectCDPSocket: PID-specific socket not found after retries:', socketName);
52
73
  }
53
74
  // Default: generic socket (Quest Browser)
75
+ verbose('detectCDPSocket: falling back to generic chrome_devtools_remote');
54
76
  return 'chrome_devtools_remote';
55
77
  }
56
78
  /**
57
- * Get CDP port for a socket
58
- * Generic socket uses 9223, PID-based uses 9222
79
+ * Get CDP port for a socket.
80
+ * Always use 9223 regardless of socket type for consistency.
59
81
  */
60
- function getCDPPortForSocket(socket) {
61
- return socket === 'chrome_devtools_remote' ? 9223 : 9222;
82
+ function getCDPPortForSocket(_socket) {
83
+ return CDP_PORT;
62
84
  }
63
85
  /**
64
86
  * Check if ADB is available on PATH
@@ -213,9 +235,24 @@ export async function ensurePortForwarding(port, browser = 'com.oculus.browser')
213
235
  export async function isBrowserRunning(browser = 'com.oculus.browser') {
214
236
  try {
215
237
  const result = await execCommandFull('adb', ['shell', `ps | grep ${browser}`]);
216
- return result.stdout.includes(browser);
238
+ verbose('isBrowserRunning ps output:', result.stdout?.trim());
239
+ // Check for exact process name match (not _zygote or :sandboxed_process)
240
+ const lines = result.stdout?.trim().split('\n') || [];
241
+ for (const line of lines) {
242
+ if (line.includes('grep'))
243
+ continue;
244
+ const parts = line.trim().split(/\s+/);
245
+ const processName = parts[parts.length - 1];
246
+ if (processName === browser) {
247
+ verbose('isBrowserRunning:', browser, 'YES (PID', parts[1] + ')');
248
+ return true;
249
+ }
250
+ }
251
+ verbose('isBrowserRunning:', browser, 'NO (zygote/child only)');
252
+ return false;
217
253
  }
218
254
  catch (error) {
255
+ verbose('isBrowserRunning error:', error);
219
256
  return false;
220
257
  }
221
258
  }
@@ -287,6 +324,38 @@ export async function ensureCDPForwarding(browser = 'com.oculus.browser') {
287
324
  process.exit(1);
288
325
  }
289
326
  }
327
+ /**
328
+ * Re-detect CDP socket after browser launch and update forwarding if needed.
329
+ * This handles the case where the initial forwarding used the generic socket
330
+ * (before the browser had a PID), but the browser created a PID-specific socket.
331
+ */
332
+ export async function refreshCDPForwarding(browser = 'com.oculus.browser') {
333
+ try {
334
+ const cdpSocket = await detectCDPSocket(browser);
335
+ const cdpPort = getCDPPortForSocket(cdpSocket);
336
+ // Check if forwarding already points to the correct socket
337
+ const forwardList = await execCommand('adb', ['forward', '--list']);
338
+ verbose('refreshCDPForwarding: detected socket:', cdpSocket, 'port:', cdpPort);
339
+ verbose('refreshCDPForwarding: current forwards:', forwardList.trim());
340
+ // Check exact match: the forward line must end with the exact socket name
341
+ const expectedForward = `tcp:${cdpPort} localabstract:${cdpSocket}`;
342
+ if (forwardList.includes(expectedForward)) {
343
+ verbose('refreshCDPForwarding: forwarding already correct');
344
+ return; // Already correct
345
+ }
346
+ // Remove existing forwarding on CDP port and re-create with correct socket
347
+ if (forwardList.includes(`tcp:${cdpPort}`)) {
348
+ verbose('refreshCDPForwarding: removing stale forwarding on port', cdpPort);
349
+ await execCommandFull('adb', ['forward', '--remove', `tcp:${cdpPort}`]);
350
+ }
351
+ await execCommand('adb', ['forward', `tcp:${cdpPort}`, `localabstract:${cdpSocket}`]);
352
+ console.log(`CDP forwarding updated: Host:${cdpPort} -> Quest:${cdpSocket}`);
353
+ }
354
+ catch (error) {
355
+ // Non-fatal: CDP may still work with existing forwarding
356
+ console.log('Warning: Could not refresh CDP forwarding:', error.message);
357
+ }
358
+ }
290
359
  /**
291
360
  * Check if USB file transfer is authorized on Quest
292
361
  * After reboot, user must click notification to allow file access
@@ -1 +1 @@
1
- {"version":3,"file":"adb.js","sourceRoot":"","sources":["../../src/utils/adb.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adb.js","sourceRoot":"","sources":["../../src/utils/adb.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,11 @@ export interface QuestDevConfig {
12
12
  * First file found wins for each field.
13
13
  */
14
14
  export declare function loadConfig(): QuestDevConfig;
15
+ /**
16
+ * Save config values to ~/.config/quest-dev/config.json
17
+ * Merges with existing config (doesn't overwrite unrelated fields).
18
+ */
19
+ export declare function saveConfig(values: QuestDevConfig): string;
15
20
  /**
16
21
  * Resolve PIN from CLI flag, then config files
17
22
  */
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAgBD;;;GAGG;AACH,wBAAgB,UAAU,IAAI,cAAc,CAY3C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAe/C"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAgBD;;;GAGG;AACH,wBAAgB,UAAU,IAAI,cAAc,CAY3C;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAiBzD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAc/C"}
@@ -2,8 +2,8 @@
2
2
  * Config file loading for quest-dev
3
3
  * Resolves settings from CLI flags → .quest-dev.json → ~/.config/quest-dev/config.json
4
4
  */
5
- import { readFileSync } from 'fs';
6
- import { join } from 'path';
5
+ import { readFileSync, writeFileSync, mkdirSync } from 'fs';
6
+ import { join, dirname } from 'path';
7
7
  import { homedir } from 'os';
8
8
  const CONFIG_LOCATIONS = [
9
9
  join(process.cwd(), '.quest-dev.json'),
@@ -37,6 +37,30 @@ export function loadConfig() {
37
37
  }
38
38
  return merged;
39
39
  }
40
+ /**
41
+ * Save config values to ~/.config/quest-dev/config.json
42
+ * Merges with existing config (doesn't overwrite unrelated fields).
43
+ */
44
+ export function saveConfig(values) {
45
+ const configPath = join(homedir(), '.config', 'quest-dev', 'config.json');
46
+ let existing = {};
47
+ try {
48
+ existing = JSON.parse(readFileSync(configPath, 'utf-8'));
49
+ }
50
+ catch {
51
+ // No existing config, start fresh
52
+ }
53
+ const merged = { ...existing };
54
+ if (values.pin !== undefined)
55
+ merged.pin = values.pin;
56
+ if (values.idleTimeout !== undefined)
57
+ merged.idleTimeout = values.idleTimeout;
58
+ if (values.lowBattery !== undefined)
59
+ merged.lowBattery = values.lowBattery;
60
+ mkdirSync(dirname(configPath), { recursive: true });
61
+ writeFileSync(configPath, JSON.stringify(merged, null, 2) + '\n');
62
+ return configPath;
63
+ }
40
64
  /**
41
65
  * Resolve PIN from CLI flag, then config files
42
66
  */
@@ -50,8 +74,7 @@ export function loadPin(cliPin) {
50
74
  console.error('');
51
75
  console.error('Provide a PIN via one of:');
52
76
  console.error(' --pin <pin> CLI flag');
53
- console.error(' .quest-dev.json { "pin": "1234" }');
54
- console.error(' ~/.config/quest-dev/config.json { "pin": "1234" }');
77
+ console.error(' quest-dev config --pin <pin> Save as default');
55
78
  console.error('');
56
79
  console.error('The PIN is your Meta Store PIN for the logged-in account.');
57
80
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAQ7B,MAAM,gBAAgB,GAAG;IACvB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,CAAC;CACvD,CAAC;AAEF,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAmB,EAAE,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG;YAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACpE,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS;YAAE,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAClH,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;YAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAChH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,MAAe;IACrC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,MAAM,CAAC,GAAG;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAElC,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACrC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC3C,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAClE,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC3E,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC3E,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAQ7B,MAAM,gBAAgB,GAAG;IACvB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,CAAC;CACvD,CAAC;AAEF,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAmB,EAAE,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG;YAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACpE,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS;YAAE,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAClH,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;YAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAChH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,MAAsB;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IAC1E,IAAI,QAAQ,GAAmB,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;IAED,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC/B,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS;QAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IACtD,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS;QAAE,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IAC9E,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;QAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAE3E,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAClE,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,MAAe;IACrC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,MAAM,CAAC,GAAG;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAElC,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACrC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC3C,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAClE,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;IACzE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function setVerbose(v: boolean): void;
2
+ export declare function verbose(...args: unknown[]): void;
3
+ //# sourceMappingURL=verbose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verbose.d.ts","sourceRoot":"","sources":["../../src/utils/verbose.ts"],"names":[],"mappings":"AAKA,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAE3C;AAED,wBAAgB,OAAO,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAIhD"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Global verbose flag for debug output
3
+ */
4
+ let _verbose = false;
5
+ export function setVerbose(v) {
6
+ _verbose = v;
7
+ }
8
+ export function verbose(...args) {
9
+ if (_verbose) {
10
+ console.log('[verbose]', ...args);
11
+ }
12
+ }
13
+ //# sourceMappingURL=verbose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verbose.js","sourceRoot":"","sources":["../../src/utils/verbose.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,IAAI,QAAQ,GAAG,KAAK,CAAC;AAErB,MAAM,UAAU,UAAU,CAAC,CAAU;IACnC,QAAQ,GAAG,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAG,IAAe;IACxC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC;IACpC,CAAC;AACH,CAAC"}
@@ -0,0 +1,128 @@
1
+ # Hardware Tests
2
+
3
+ Tests that require a physical Quest device connected via ADB.
4
+
5
+ ## stay-awake command
6
+
7
+ ### Prerequisites
8
+
9
+ - Quest 3 connected via USB, ADB authorized
10
+ - Quest OS v44+
11
+ - Meta Store PIN known
12
+ - `.quest-dev.json` in project root: `{ "pin": "<pin>", "idleTimeout": 60000, "lowBattery": 15 }`
13
+
14
+ ### Test 1: --status flag (read-only)
15
+
16
+ ```bash
17
+ node build/index.js stay-awake --status
18
+ ```
19
+
20
+ Expected: Shows all four properties (disable_guardian, disable_dialogs, disable_autosleep, set_proximity_close) as false.
21
+
22
+ ### Test 2: --status works without config file
23
+
24
+ ```bash
25
+ node build/index.js stay-awake --status
26
+ ```
27
+
28
+ Expected: No PIN needed for status — works without `.quest-dev.json`.
29
+
30
+ ### Test 3: Enable test mode — short run
31
+
32
+ ```bash
33
+ node build/index.js stay-awake --idle-timeout 30000
34
+ ```
35
+
36
+ Expected:
37
+ - Shows current properties (all false)
38
+ - Enables test mode (prints confirmation)
39
+ - Wakes screen
40
+ - Shows battery level
41
+ - Prints idle timeout and low battery threshold
42
+
43
+ Verify on device:
44
+ ```bash
45
+ adb shell content call --uri content://com.oculus.rc --method GET_PROPERTY
46
+ ```
47
+ Should show all true.
48
+
49
+ Then Ctrl-C. Should print "Restoring settings..." and "Test mode disabled". Verify properties restored to false.
50
+
51
+ ### Test 4: --disable manual restore
52
+
53
+ Enable manually first:
54
+ ```bash
55
+ adb shell content call --uri content://com.oculus.rc --method SET_PROPERTY \
56
+ --extra 'disable_guardian:b:true' --extra 'disable_dialogs:b:true' \
57
+ --extra 'disable_autosleep:b:true' --extra 'PIN:s:<pin>'
58
+ ```
59
+
60
+ Then restore via CLI:
61
+ ```bash
62
+ node build/index.js stay-awake --disable
63
+ ```
64
+
65
+ Expected: Reads PIN from config, restores all properties to false.
66
+
67
+ ### Test 5: Battery monitoring
68
+
69
+ ```bash
70
+ node build/index.js stay-awake --idle-timeout 120000
71
+ ```
72
+
73
+ Expected: Shows initial battery level. If charging, should log when battery crosses a 5% boundary (e.g. 85% → 90%). Monitor checks every 60s.
74
+
75
+ ### Test 6: --verbose battery output
76
+
77
+ ```bash
78
+ node build/index.js stay-awake --idle-timeout 120000 --verbose
79
+ ```
80
+
81
+ Expected: Prints battery level on every 60s check, not just at 5% boundaries.
82
+
83
+ ### Test 7: SIGUSR1 extends idle timeout
84
+
85
+ ```bash
86
+ node build/index.js stay-awake --pin <pin> --idle-timeout 20000 --verbose &
87
+ PID=$!
88
+ sleep 5
89
+ kill -USR1 $PID
90
+ sleep 5
91
+ kill -USR1 $PID
92
+ sleep 15
93
+ kill $PID
94
+ ```
95
+
96
+ Expected: Two timestamped `[HH:MM:SS] Activity detected, resetting idle timer` log lines. Process stays alive past the original 20s because signals keep resetting the timer.
97
+
98
+ ### Test 8: CLI flags override config
99
+
100
+ ```bash
101
+ node build/index.js stay-awake --idle-timeout 15000 --low-battery 20
102
+ ```
103
+
104
+ Expected: Should show "idle timeout: 15s, low battery exit: 20%" overriding the config values (60s / 15).
105
+
106
+ ### Test 9: Config file values used as defaults
107
+
108
+ ```bash
109
+ node build/index.js stay-awake
110
+ ```
111
+
112
+ Expected: Should show "idle timeout: 60s, low battery exit: 15%" (from `.quest-dev.json`).
113
+
114
+ ### Test 10: Watchdog cleanup after kill -9
115
+
116
+ ```bash
117
+ node build/index.js stay-awake --idle-timeout 120000 &
118
+ PARENT_PID=$!
119
+ sleep 3
120
+ adb shell content call --uri content://com.oculus.rc --method GET_PROPERTY
121
+ # Should show all true
122
+ kill -9 $PARENT_PID
123
+ sleep 8
124
+ adb shell content call --uri content://com.oculus.rc --method GET_PROPERTY
125
+ # Should show all false — watchdog restored them
126
+ ```
127
+
128
+ Expected: Watchdog detects parent death within ~5s and restores all properties to false.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@myerscarpenter/quest-dev",
3
- "version": "1.3.0",
3
+ "version": "1.4.1",
4
4
  "description": "CLI tools for Meta Quest development — stay awake, screenshots, URL opening, logcat, and battery via ADB",
5
5
  "type": "module",
6
6
  "bin": {
@@ -15,6 +15,7 @@
15
15
  "test:watch": "vitest",
16
16
  "test:ui": "vitest --ui",
17
17
  "test:coverage": "vitest run --coverage",
18
+ "install:global": "pnpm run build && pnpm pack && pnpm install -g $PWD/myerscarpenter-quest-dev-$(node -p \"require('./package.json').version\").tgz && rm myerscarpenter-quest-dev-$(node -p \"require('./package.json').version\").tgz",
18
19
  "version:patch": "pnpm version patch",
19
20
  "version:minor": "pnpm version minor",
20
21
  "version:major": "pnpm version major"
@@ -8,6 +8,7 @@ import {
8
8
  checkADBDevices,
9
9
  ensurePortForwarding,
10
10
  ensureCDPForwarding,
11
+ refreshCDPForwarding,
11
12
  isBrowserRunning,
12
13
  launchBrowser,
13
14
  getCDPPort
@@ -203,11 +204,17 @@ export async function openCommand(
203
204
  }
204
205
  }
205
206
 
207
+ // Re-detect CDP socket now that browser is running.
208
+ // The initial forwarding may have used the generic socket before the browser
209
+ // had a PID, or may be stale from a previous browser process.
210
+ // Non-default browsers (e.g. org.chromium.chrome) often can't bind the generic
211
+ // chrome_devtools_remote socket and create a PID-specific one instead.
212
+ console.log('Waiting for browser to stabilize...');
213
+ await new Promise(resolve => setTimeout(resolve, browserRunning ? 2000 : 3000));
214
+ await refreshCDPForwarding(browser);
215
+
206
216
  // Close other tabs if requested
207
217
  if (closeOthers) {
208
- // Wait for browser to stabilize after launch/navigation
209
- console.log('Waiting for browser to stabilize...');
210
- await new Promise(resolve => setTimeout(resolve, 2000));
211
218
  await closeOtherTabs(url, browser);
212
219
  }
213
220
 
package/src/index.ts CHANGED
@@ -15,6 +15,8 @@ import { openCommand } from './commands/open.js';
15
15
  import { startCommand, stopCommand, statusCommand, tailCommand } from './commands/logcat.js';
16
16
  import { batteryCommand } from './commands/battery.js';
17
17
  import { stayAwakeCommand, stayAwakeWatchdog, stayAwakeStatus, stayAwakeDisable } from './commands/stay-awake.js';
18
+ import { saveConfig, loadConfig } from './utils/config.js';
19
+ import { setVerbose } from './utils/verbose.js';
18
20
 
19
21
  // Read version from package.json
20
22
  const __dirname = dirname(fileURLToPath(import.meta.url));
@@ -28,16 +30,17 @@ const cli = yargs(hideBin(process.argv))
28
30
  .scriptName('quest-dev')
29
31
  .version(version)
30
32
  .usage('Usage: $0 <command> [options]')
31
- .demandCommand(1, 'You must provide a command')
33
+ .demandCommand(1, '')
32
34
  .strict()
35
+ .option('verbose', {
36
+ describe: 'Show detailed debug output',
37
+ type: 'boolean',
38
+ default: false,
39
+ global: true,
40
+ })
33
41
  .fail((msg, err, yargs) => {
34
- if (msg) {
35
- console.error(`Error: ${msg}\n`);
36
- }
37
- if (err) {
38
- console.error(err.message);
39
- }
40
- console.error('Run "quest-dev --help" for usage information.');
42
+ yargs.showHelp();
43
+ if (err) console.error(err.message);
41
44
  process.exit(1);
42
45
  })
43
46
  .help()
@@ -159,16 +162,16 @@ cli.command(
159
162
  (yargs) => {
160
163
  return yargs
161
164
  .option('pin', {
162
- describe: 'Meta Store PIN (or set in .quest-dev.json / ~/.config/quest-dev/config.json)',
165
+ describe: 'Meta Store PIN (or save with: quest-dev config --pin)',
163
166
  type: 'string',
164
167
  })
165
168
  .option('idle-timeout', {
166
- describe: 'Idle timeout in milliseconds (default: 300000 = 5 minutes, or set idleTimeout in config)',
169
+ describe: 'Idle timeout in milliseconds (default: 300000 = 5 minutes, or save with: quest-dev config)',
167
170
  type: 'number',
168
171
  alias: 'i',
169
172
  })
170
173
  .option('low-battery', {
171
- describe: 'Exit when battery drops to this percentage (default: 10, or set lowBattery in config)',
174
+ describe: 'Exit when battery drops to this percentage (default: 10, or save with: quest-dev config)',
172
175
  type: 'number',
173
176
  })
174
177
  .option('disable', {
@@ -204,6 +207,57 @@ cli.command(
204
207
  }
205
208
  );
206
209
 
210
+ // Config command
211
+ cli.command(
212
+ 'config',
213
+ 'Save default settings for quest-dev commands',
214
+ (yargs) => {
215
+ return yargs
216
+ .option('pin', {
217
+ describe: 'Meta Store PIN',
218
+ type: 'string',
219
+ })
220
+ .option('idle-timeout', {
221
+ describe: 'Idle timeout in milliseconds for stay-awake',
222
+ type: 'number',
223
+ })
224
+ .option('low-battery', {
225
+ describe: 'Exit stay-awake when battery drops to this percentage',
226
+ type: 'number',
227
+ })
228
+ .option('show', {
229
+ describe: 'Show current config and exit',
230
+ type: 'boolean',
231
+ default: false,
232
+ });
233
+ },
234
+ (argv) => {
235
+ if (argv.show) {
236
+ const config = loadConfig();
237
+ if (Object.keys(config).length === 0) {
238
+ console.log('No config found.');
239
+ } else {
240
+ console.log(JSON.stringify(config, null, 2));
241
+ }
242
+ return;
243
+ }
244
+
245
+ const values: Record<string, unknown> = {};
246
+ if (argv.pin !== undefined) values.pin = argv.pin;
247
+ if (argv.idleTimeout !== undefined) values.idleTimeout = argv.idleTimeout;
248
+ if (argv.lowBattery !== undefined) values.lowBattery = argv.lowBattery;
249
+
250
+ if (Object.keys(values).length === 0) {
251
+ console.error('No config values provided. Use --pin, --idle-timeout, or --low-battery.');
252
+ process.exit(1);
253
+ }
254
+
255
+ saveConfig(values as any);
256
+ console.log('Config saved:');
257
+ console.log(JSON.stringify(values, null, 2));
258
+ }
259
+ );
260
+
207
261
  // Stay-awake watchdog (internal subcommand, spawned by stay-awake parent)
208
262
  cli.command(
209
263
  'stay-awake-watchdog',
@@ -224,5 +278,12 @@ cli.command(
224
278
  }
225
279
  );
226
280
 
281
+ // Set verbose flag before any command runs
282
+ cli.middleware((argv) => {
283
+ if (argv.verbose) {
284
+ setVerbose(true);
285
+ }
286
+ });
287
+
227
288
  // Parse and execute
228
289
  cli.parse();
package/src/utils/adb.ts CHANGED
@@ -5,6 +5,7 @@
5
5
  import which from 'which';
6
6
  import net from 'net';
7
7
  import { execCommand, execCommandFull } from './exec.js';
8
+ import { verbose } from './verbose.js';
8
9
 
9
10
  const CDP_PORT = 9223; // Chrome DevTools Protocol port (Quest browser default)
10
11
 
@@ -14,18 +15,29 @@ const CDP_PORT = 9223; // Chrome DevTools Protocol port (Quest browser default)
14
15
  async function getBrowserPID(packageName: string): Promise<number | null> {
15
16
  try {
16
17
  const result = await execCommandFull('adb', ['shell', `ps | grep ${packageName}`]);
18
+ verbose('getBrowserPID ps output:', result.stdout?.trim());
17
19
  if (!result.stdout) return null;
18
20
 
19
21
  // Parse ps output: USER PID PPID ... NAME
22
+ // Only match the main process (exact package name at end of line), not
23
+ // child processes like :sandboxed_process0 or :privileged_process0
20
24
  const lines = result.stdout.trim().split('\n');
21
25
  for (const line of lines) {
22
26
  if (line.includes('grep')) continue; // Skip grep itself
23
27
  const parts = line.trim().split(/\s+/);
24
28
  if (parts.length >= 2) {
25
- return parseInt(parts[1], 10); // PID is second column
29
+ // Check that the process name is exactly the package (last column)
30
+ const processName = parts[parts.length - 1];
31
+ if (processName === packageName) {
32
+ const pid = parseInt(parts[1], 10);
33
+ verbose('getBrowserPID found PID:', pid, 'for', packageName);
34
+ return pid;
35
+ }
26
36
  }
27
37
  }
28
- } catch {
38
+ verbose('getBrowserPID: no exact match for', packageName);
39
+ } catch (e) {
40
+ verbose('getBrowserPID error:', e);
29
41
  return null;
30
42
  }
31
43
  return null;
@@ -39,30 +51,40 @@ async function detectCDPSocket(packageName: string): Promise<string> {
39
51
  const pid = await getBrowserPID(packageName);
40
52
 
41
53
  if (pid) {
42
- // Try PID-based socket first
43
- try {
44
- const result = await execCommandFull('adb', [
45
- 'shell',
46
- `cat /proc/net/unix | grep chrome_devtools_remote_${pid}`
47
- ]);
48
- if (result.stdout.includes(`chrome_devtools_remote_${pid}`)) {
49
- return `chrome_devtools_remote_${pid}`;
54
+ // Try PID-based socket, with retries (socket may take a moment to appear)
55
+ const socketName = `chrome_devtools_remote_${pid}`;
56
+ for (let attempt = 0; attempt < 5; attempt++) {
57
+ try {
58
+ const result = await execCommandFull('adb', [
59
+ 'shell',
60
+ `cat /proc/net/unix | grep ${socketName}`
61
+ ]);
62
+ if (result.stdout.includes(socketName)) {
63
+ verbose('detectCDPSocket: found PID-specific socket:', socketName, `(attempt ${attempt + 1})`);
64
+ return socketName;
65
+ }
66
+ } catch {
67
+ // ignore
68
+ }
69
+ if (attempt < 4) {
70
+ verbose('detectCDPSocket: PID-specific socket not found yet, retrying in 1s...', `(attempt ${attempt + 1})`);
71
+ await new Promise(resolve => setTimeout(resolve, 1000));
50
72
  }
51
- } catch {
52
- // Fall through to default
53
73
  }
74
+ verbose('detectCDPSocket: PID-specific socket not found after retries:', socketName);
54
75
  }
55
76
 
56
77
  // Default: generic socket (Quest Browser)
78
+ verbose('detectCDPSocket: falling back to generic chrome_devtools_remote');
57
79
  return 'chrome_devtools_remote';
58
80
  }
59
81
 
60
82
  /**
61
- * Get CDP port for a socket
62
- * Generic socket uses 9223, PID-based uses 9222
83
+ * Get CDP port for a socket.
84
+ * Always use 9223 regardless of socket type for consistency.
63
85
  */
64
- function getCDPPortForSocket(socket: string): number {
65
- return socket === 'chrome_devtools_remote' ? 9223 : 9222;
86
+ function getCDPPortForSocket(_socket: string): number {
87
+ return CDP_PORT;
66
88
  }
67
89
 
68
90
  /**
@@ -229,8 +251,22 @@ export async function ensurePortForwarding(
229
251
  export async function isBrowserRunning(browser: string = 'com.oculus.browser'): Promise<boolean> {
230
252
  try {
231
253
  const result = await execCommandFull('adb', ['shell', `ps | grep ${browser}`]);
232
- return result.stdout.includes(browser);
254
+ verbose('isBrowserRunning ps output:', result.stdout?.trim());
255
+ // Check for exact process name match (not _zygote or :sandboxed_process)
256
+ const lines = result.stdout?.trim().split('\n') || [];
257
+ for (const line of lines) {
258
+ if (line.includes('grep')) continue;
259
+ const parts = line.trim().split(/\s+/);
260
+ const processName = parts[parts.length - 1];
261
+ if (processName === browser) {
262
+ verbose('isBrowserRunning:', browser, 'YES (PID', parts[1] + ')');
263
+ return true;
264
+ }
265
+ }
266
+ verbose('isBrowserRunning:', browser, 'NO (zygote/child only)');
267
+ return false;
233
268
  } catch (error) {
269
+ verbose('isBrowserRunning error:', error);
234
270
  return false;
235
271
  }
236
272
  }
@@ -308,6 +344,44 @@ export async function ensureCDPForwarding(
308
344
  }
309
345
  }
310
346
 
347
+ /**
348
+ * Re-detect CDP socket after browser launch and update forwarding if needed.
349
+ * This handles the case where the initial forwarding used the generic socket
350
+ * (before the browser had a PID), but the browser created a PID-specific socket.
351
+ */
352
+ export async function refreshCDPForwarding(
353
+ browser: string = 'com.oculus.browser'
354
+ ): Promise<void> {
355
+ try {
356
+ const cdpSocket = await detectCDPSocket(browser);
357
+ const cdpPort = getCDPPortForSocket(cdpSocket);
358
+
359
+ // Check if forwarding already points to the correct socket
360
+ const forwardList = await execCommand('adb', ['forward', '--list']);
361
+ verbose('refreshCDPForwarding: detected socket:', cdpSocket, 'port:', cdpPort);
362
+ verbose('refreshCDPForwarding: current forwards:', forwardList.trim());
363
+
364
+ // Check exact match: the forward line must end with the exact socket name
365
+ const expectedForward = `tcp:${cdpPort} localabstract:${cdpSocket}`;
366
+ if (forwardList.includes(expectedForward)) {
367
+ verbose('refreshCDPForwarding: forwarding already correct');
368
+ return; // Already correct
369
+ }
370
+
371
+ // Remove existing forwarding on CDP port and re-create with correct socket
372
+ if (forwardList.includes(`tcp:${cdpPort}`)) {
373
+ verbose('refreshCDPForwarding: removing stale forwarding on port', cdpPort);
374
+ await execCommandFull('adb', ['forward', '--remove', `tcp:${cdpPort}`]);
375
+ }
376
+
377
+ await execCommand('adb', ['forward', `tcp:${cdpPort}`, `localabstract:${cdpSocket}`]);
378
+ console.log(`CDP forwarding updated: Host:${cdpPort} -> Quest:${cdpSocket}`);
379
+ } catch (error) {
380
+ // Non-fatal: CDP may still work with existing forwarding
381
+ console.log('Warning: Could not refresh CDP forwarding:', (error as Error).message);
382
+ }
383
+ }
384
+
311
385
  /**
312
386
  * Check if USB file transfer is authorized on Quest
313
387
  * After reboot, user must click notification to allow file access
@@ -3,8 +3,8 @@
3
3
  * Resolves settings from CLI flags → .quest-dev.json → ~/.config/quest-dev/config.json
4
4
  */
5
5
 
6
- import { readFileSync } from 'fs';
7
- import { join } from 'path';
6
+ import { readFileSync, writeFileSync, mkdirSync } from 'fs';
7
+ import { join, dirname } from 'path';
8
8
  import { homedir } from 'os';
9
9
 
10
10
  export interface QuestDevConfig {
@@ -45,6 +45,29 @@ export function loadConfig(): QuestDevConfig {
45
45
  return merged;
46
46
  }
47
47
 
48
+ /**
49
+ * Save config values to ~/.config/quest-dev/config.json
50
+ * Merges with existing config (doesn't overwrite unrelated fields).
51
+ */
52
+ export function saveConfig(values: QuestDevConfig): string {
53
+ const configPath = join(homedir(), '.config', 'quest-dev', 'config.json');
54
+ let existing: QuestDevConfig = {};
55
+ try {
56
+ existing = JSON.parse(readFileSync(configPath, 'utf-8'));
57
+ } catch {
58
+ // No existing config, start fresh
59
+ }
60
+
61
+ const merged = { ...existing };
62
+ if (values.pin !== undefined) merged.pin = values.pin;
63
+ if (values.idleTimeout !== undefined) merged.idleTimeout = values.idleTimeout;
64
+ if (values.lowBattery !== undefined) merged.lowBattery = values.lowBattery;
65
+
66
+ mkdirSync(dirname(configPath), { recursive: true });
67
+ writeFileSync(configPath, JSON.stringify(merged, null, 2) + '\n');
68
+ return configPath;
69
+ }
70
+
48
71
  /**
49
72
  * Resolve PIN from CLI flag, then config files
50
73
  */
@@ -58,8 +81,7 @@ export function loadPin(cliPin?: string): string {
58
81
  console.error('');
59
82
  console.error('Provide a PIN via one of:');
60
83
  console.error(' --pin <pin> CLI flag');
61
- console.error(' .quest-dev.json { "pin": "1234" }');
62
- console.error(' ~/.config/quest-dev/config.json { "pin": "1234" }');
84
+ console.error(' quest-dev config --pin <pin> Save as default');
63
85
  console.error('');
64
86
  console.error('The PIN is your Meta Store PIN for the logged-in account.');
65
87
  process.exit(1);
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Global verbose flag for debug output
3
+ */
4
+ let _verbose = false;
5
+
6
+ export function setVerbose(v: boolean): void {
7
+ _verbose = v;
8
+ }
9
+
10
+ export function verbose(...args: unknown[]): void {
11
+ if (_verbose) {
12
+ console.log('[verbose]', ...args);
13
+ }
14
+ }