chrome-relay 0.5.7 → 0.5.8

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/cli.js CHANGED
@@ -4,6 +4,15 @@
4
4
  import { Command } from "commander";
5
5
  import { writeFileSync } from "fs";
6
6
 
7
+ // src/index.ts
8
+ var CHROME_RELAY_VERSION = true ? "0.5.8" : "0.0.0-dev";
9
+
10
+ // src/install/install.ts
11
+ import os from "os";
12
+ import path from "path";
13
+ import { chmod, mkdir, readFile, stat, writeFile } from "fs/promises";
14
+ import { fileURLToPath } from "url";
15
+
7
16
  // ../protocol/dist/index.js
8
17
  var NATIVE_HOST_NAME = "dev.chrome_relay.native_host";
9
18
  var DEFAULT_HTTP_PORT = 12122;
@@ -42,14 +51,7 @@ var RelayError = class extends Error {
42
51
  }
43
52
  };
44
53
 
45
- // src/index.ts
46
- var CHROME_RELAY_VERSION = true ? "0.5.7" : "0.0.0-dev";
47
-
48
54
  // src/install/install.ts
49
- import os from "os";
50
- import path from "path";
51
- import { chmod, mkdir, readFile, stat, writeFile } from "fs/promises";
52
- import { fileURLToPath } from "url";
53
55
  var APP_DIR = path.join(os.homedir(), ".chrome-relay");
54
56
  var KNOWN_EXTENSION_IDS = [
55
57
  ["Chrome Web Store", CHROME_WEB_STORE_EXTENSION_ID],
@@ -196,6 +198,11 @@ async function callTool(name, args) {
196
198
 
197
199
  // src/release-notes.ts
198
200
  var RELEASE_NOTES = {
201
+ "0.5.8": [
202
+ "Internal refactor (code-quality-hardening PR 6, first cut): shared CLI helpers moved out of program.ts into packages/cli/src/commands/shared.ts.",
203
+ "tabOpt(), makeBaseArgs(program), and runTool() are now importable from `./commands/shared.js`. program.ts dropped ~100 lines.",
204
+ "No behavior change \u2014 all 355 tests still pass. Future PRs can split per-domain command groups (navigation, input, capture, sessions) into their own modules without churning helpers."
205
+ ],
199
206
  "0.5.7": [
200
207
  "`chrome-relay update` returns structured verification metadata (code-quality-hardening PR 5). Output now has `install: { attempted, packageManager, status, command }`, `binary: { path, reexeced }`, `releaseNotes: { source: 'current_process' | 'updated_binary', changes }`, and a `warnings[]` array.",
201
208
  "Surfaces the 'install said success but binary didn't change' failure mode (PATH mismatch, stale shim, cross-package-manager confusion) as `warnings[].code === 'update_not_verified'`. Agents can branch on it.",
@@ -266,6 +273,81 @@ function listReleaseNotesSince(since) {
266
273
  return Object.keys(RELEASE_NOTES).filter((v) => compareSemver(v, since) > 0).sort((a, b) => compareSemver(a, b)).map((version) => ({ version, bullets: RELEASE_NOTES[version] }));
267
274
  }
268
275
 
276
+ // src/commands/shared.ts
277
+ function tabOpt(cmd) {
278
+ return cmd.option("-t, --tab <id>", "target tab ID", (v) => Number(v)).option("--workspace <name>", "target the active tab in a named workspace window (see `chrome-relay workspace`)").option("--group <name>", "target the active tab in a named tab-group (see `chrome-relay group`)");
279
+ }
280
+ function makeBaseArgs(program) {
281
+ return function baseArgs(opts) {
282
+ const parentOpts = program.opts();
283
+ rejectIntraScopeConflict("subcommand", {
284
+ tab: opts.tab,
285
+ workspace: opts.workspace,
286
+ group: opts.group
287
+ });
288
+ rejectIntraScopeConflict("program-level", {
289
+ workspace: parentOpts.workspace,
290
+ group: parentOpts.group
291
+ });
292
+ if (opts.workspace && parentOpts.workspace && opts.workspace !== parentOpts.workspace) {
293
+ emitTargetOverride("workspace", parentOpts.workspace, opts.workspace);
294
+ }
295
+ if (opts.group && parentOpts.group && opts.group !== parentOpts.group) {
296
+ emitTargetOverride("group", parentOpts.group, opts.group);
297
+ }
298
+ if (opts.tab !== void 0 && (parentOpts.workspace || parentOpts.group)) {
299
+ const prior = parentOpts.workspace ? `workspace=${parentOpts.workspace}` : `group=${parentOpts.group}`;
300
+ emitTargetOverride("tab", prior, String(opts.tab));
301
+ }
302
+ const args = {};
303
+ if (opts.tab !== void 0) args.tabId = opts.tab;
304
+ const effectiveWorkspace = opts.workspace ?? parentOpts.workspace;
305
+ const effectiveGroup = opts.group ?? parentOpts.group;
306
+ if (opts.tab === void 0 && effectiveWorkspace) args.workspaceName = effectiveWorkspace;
307
+ if (opts.tab === void 0 && effectiveGroup) args.groupName = effectiveGroup;
308
+ return args;
309
+ };
310
+ }
311
+ function rejectIntraScopeConflict(scope, fields) {
312
+ const present = [];
313
+ if (fields.tab !== void 0) present.push("--tab");
314
+ if (fields.workspace) present.push("--workspace");
315
+ if (fields.group) present.push("--group");
316
+ if (present.length > 1) {
317
+ process.stderr.write(
318
+ `[chrome-relay] target_conflict: ${scope} flags ${present.join(" + ")} are mutually exclusive. Pass exactly one of --tab, --workspace, or --group on the same ${scope}.
319
+ `
320
+ );
321
+ process.exit(2);
322
+ }
323
+ }
324
+ function emitTargetOverride(kind, from, to) {
325
+ process.stderr.write(
326
+ `[chrome-relay] target_overridden: ${kind} ${from} \u2192 ${to} (subcommand-level overrides program-level)
327
+ `
328
+ );
329
+ }
330
+ async function runTool(name, args) {
331
+ try {
332
+ const result = await callTool(name, args);
333
+ if (typeof result === "string") {
334
+ process.stdout.write(result + "\n");
335
+ } else {
336
+ process.stdout.write(JSON.stringify(result, null, 2) + "\n");
337
+ }
338
+ } catch (error) {
339
+ if (error instanceof RelayError) {
340
+ process.stderr.write(error.message + "\n");
341
+ process.stderr.write(JSON.stringify({ relayError: error.toBridgeError() }, null, 2) + "\n");
342
+ } else {
343
+ process.stderr.write(
344
+ (error instanceof Error ? error.message : String(error)) + "\n"
345
+ );
346
+ }
347
+ process.exit(1);
348
+ }
349
+ }
350
+
269
351
  // src/program.ts
270
352
  function buildProgram() {
271
353
  const program = new Command();
@@ -377,77 +459,8 @@ Notes:
377
459
  changes
378
460
  }, null, 2) + "\n");
379
461
  });
380
- async function run(name, args) {
381
- try {
382
- const result = await callTool(name, args);
383
- if (typeof result === "string") {
384
- process.stdout.write(result + "\n");
385
- } else {
386
- process.stdout.write(JSON.stringify(result, null, 2) + "\n");
387
- }
388
- } catch (error) {
389
- if (error instanceof RelayError) {
390
- process.stderr.write(error.message + "\n");
391
- process.stderr.write(JSON.stringify({ relayError: error.toBridgeError() }, null, 2) + "\n");
392
- } else {
393
- process.stderr.write(
394
- (error instanceof Error ? error.message : String(error)) + "\n"
395
- );
396
- }
397
- process.exit(1);
398
- }
399
- }
400
- function tabOpt(cmd) {
401
- return cmd.option("-t, --tab <id>", "target tab ID", (v) => Number(v)).option("--workspace <name>", "target the active tab in a named workspace window (see `chrome-relay workspace`)").option("--group <name>", "target the active tab in a named tab-group (see `chrome-relay group`)");
402
- }
403
- function baseArgs(opts) {
404
- const parentOpts = program.opts();
405
- rejectIntraScopeConflict("subcommand", {
406
- tab: opts.tab,
407
- workspace: opts.workspace,
408
- group: opts.group
409
- });
410
- rejectIntraScopeConflict("program-level", {
411
- workspace: parentOpts.workspace,
412
- group: parentOpts.group
413
- });
414
- if (opts.workspace && parentOpts.workspace && opts.workspace !== parentOpts.workspace) {
415
- emitTargetOverride("workspace", parentOpts.workspace, opts.workspace);
416
- }
417
- if (opts.group && parentOpts.group && opts.group !== parentOpts.group) {
418
- emitTargetOverride("group", parentOpts.group, opts.group);
419
- }
420
- if (opts.tab !== void 0 && (parentOpts.workspace || parentOpts.group)) {
421
- const prior = parentOpts.workspace ? `workspace=${parentOpts.workspace}` : `group=${parentOpts.group}`;
422
- emitTargetOverride("tab", prior, String(opts.tab));
423
- }
424
- const args = {};
425
- if (opts.tab !== void 0) args.tabId = opts.tab;
426
- const effectiveWorkspace = opts.workspace ?? parentOpts.workspace;
427
- const effectiveGroup = opts.group ?? parentOpts.group;
428
- if (opts.tab === void 0 && effectiveWorkspace) args.workspaceName = effectiveWorkspace;
429
- if (opts.tab === void 0 && effectiveGroup) args.groupName = effectiveGroup;
430
- return args;
431
- }
432
- function rejectIntraScopeConflict(scope, fields) {
433
- const present = [];
434
- if (fields.tab !== void 0) present.push("--tab");
435
- if (fields.workspace) present.push("--workspace");
436
- if (fields.group) present.push("--group");
437
- if (present.length > 1) {
438
- process.stderr.write(
439
- `[chrome-relay] target_conflict: ${scope} flags ${present.join(" + ")} are mutually exclusive. Pass exactly one of --tab, --workspace, or --group on the same ${scope}.
440
- `
441
- );
442
- process.exit(2);
443
- }
444
- }
445
- function emitTargetOverride(kind, from, to) {
446
- process.stderr.write(
447
- `[chrome-relay] target_overridden: ${kind} ${from} \u2192 ${to} (subcommand-level overrides program-level)
448
- `
449
- );
450
- }
462
+ const run = runTool;
463
+ const baseArgs = makeBaseArgs(program);
451
464
  program.command("tabs [verb]").description("List open Chrome windows and tabs. (verb 'list' is accepted as alias)").action(async (verb) => {
452
465
  if (verb && verb !== "list") {
453
466
  process.stderr.write(`unknown tabs verb: ${verb}. Use 'tabs' or 'tabs list'.
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // src/index.ts
2
- var CHROME_RELAY_VERSION = true ? "0.5.7" : "0.0.0-dev";
2
+ var CHROME_RELAY_VERSION = true ? "0.5.8" : "0.0.0-dev";
3
3
  export {
4
4
  CHROME_RELAY_VERSION
5
5
  };
@@ -48,7 +48,7 @@ function toBridgeError(unknownErr, fallbackTool) {
48
48
  }
49
49
 
50
50
  // src/index.ts
51
- var CHROME_RELAY_VERSION = true ? "0.5.7" : "0.0.0-dev";
51
+ var CHROME_RELAY_VERSION = true ? "0.5.8" : "0.0.0-dev";
52
52
 
53
53
  // src/release-notes.ts
54
54
  function compareSemver(a, b) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chrome-relay",
3
- "version": "0.5.7",
3
+ "version": "0.5.8",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",