@moxt-ai/mobius 0.0.415 → 0.0.417

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,6 +1,8 @@
1
+ import { type Readable } from "node:stream";
1
2
  import type { Command } from "commander";
2
3
  export interface ParsedPairOptions {
3
4
  readonly code?: string;
5
+ readonly codeStdin?: boolean;
4
6
  readonly pairing?: string;
5
7
  readonly url?: string;
6
8
  readonly workspace?: string;
@@ -15,6 +17,6 @@ export interface ConnectionOptions {
15
17
  export interface PairListOptions {
16
18
  readonly outputJson?: string;
17
19
  }
18
- export declare function requirePairOptions(options: ParsedPairOptions, command: Command): PairOptions;
20
+ export declare function requirePairOptions(options: ParsedPairOptions, command: Command, input: Readable, signal: AbortSignal): Promise<PairOptions>;
19
21
  export declare function pairArguments(options: PairOptions): readonly string[];
20
22
  //# sourceMappingURL=options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../../../src/cli/handler/pair/logic/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,WAAY,SAAQ,iBAAiB;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAChC;AAWD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,GAAG,WAAW,CAM5F;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,MAAM,EAAE,CASrE"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../../../src/cli/handler/pair/logic/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,WAAY,SAAQ,iBAAiB;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAChC;AAsCD,wBAAsB,kBAAkB,CACpC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,WAAW,GACpB,OAAO,CAAC,WAAW,CAAC,CAStB;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,MAAM,EAAE,CASrE"}
@@ -1,3 +1,4 @@
1
+ import { addAbortSignal } from "node:stream";
1
2
  function requireOption(value, flags, command) {
2
3
  if (value === undefined) {
3
4
  command.error(`required option '${flags}' not specified`, {
@@ -6,10 +7,37 @@ function requireOption(value, flags, command) {
6
7
  }
7
8
  return value;
8
9
  }
9
- export function requirePairOptions(options, command) {
10
+ /** A pairing code is a few dozen characters; anything longer is not one. */
11
+ const MAX_PIPED_CODE_BYTES = 1024;
12
+ /**
13
+ * Reads the pairing code piped to the command. A code given this way never appears in the process list, where other
14
+ * users of the same computer could read and redeem it.
15
+ */
16
+ async function readPipedCode(input, command, signal) {
17
+ const chunks = [];
18
+ let size = 0;
19
+ for await (const chunk of addAbortSignal(signal, input)) {
20
+ const bytes = Buffer.from(chunk);
21
+ size += bytes.length;
22
+ if (size > MAX_PIPED_CODE_BYTES) {
23
+ command.error("the pairing code read from standard input is too long", {
24
+ code: "commander.invalidArgument",
25
+ });
26
+ }
27
+ chunks.push(bytes);
28
+ }
29
+ const code = Buffer.concat(chunks).toString("utf8").trim();
30
+ if (code.length === 0) {
31
+ command.error("no pairing code was read from standard input", { code: "commander.invalidArgument" });
32
+ }
33
+ return code;
34
+ }
35
+ export async function requirePairOptions(options, command, input, signal) {
10
36
  return {
11
37
  ...options,
12
- code: requireOption(options.code, "--code <pairing-code>", command),
38
+ code: options.codeStdin === true
39
+ ? await readPipedCode(input, command, signal)
40
+ : requireOption(options.code, "--code <pairing-code>", command),
13
41
  url: requireOption(options.url, "--url <relay-url>", command),
14
42
  };
15
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../../../../../src/cli/handler/pair/logic/options.ts"],"names":[],"mappings":"AAsBA,SAAS,aAAa,CAAC,KAAyB,EAAE,KAAa,EAAE,OAAgB;IAC7E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,oBAAoB,KAAK,iBAAiB,EAAE;YACtD,IAAI,EAAE,uCAAuC;SAChD,CAAC,CAAC;IACP,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA0B,EAAE,OAAgB;IAC3E,OAAO;QACH,GAAG,OAAO;QACV,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,uBAAuB,EAAE,OAAO,CAAC;QACnE,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,mBAAmB,EAAE,OAAO,CAAC;KAChE,CAAC;AACN,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAoB;IAC9C,OAAO;QACH,OAAO;QACP,OAAO,CAAC,GAAG;QACX,QAAQ;QACR,OAAO,CAAC,IAAI;QACZ,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACxE,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;KACjF,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../../../../src/cli/handler/pair/logic/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAC;AAwB5D,SAAS,aAAa,CAAC,KAAyB,EAAE,KAAa,EAAE,OAAgB;IAC7E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,oBAAoB,KAAK,iBAAiB,EAAE;YACtD,IAAI,EAAE,uCAAuC;SAChD,CAAC,CAAC;IACP,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,4EAA4E;AAC5E,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAElC;;;GAGG;AACH,KAAK,UAAU,aAAa,CAAC,KAAe,EAAE,OAAgB,EAAE,MAAmB;IAC/E,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;QACrB,IAAI,IAAI,GAAG,oBAAoB,EAAE,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,uDAAuD,EAAE;gBACnE,IAAI,EAAE,2BAA2B;aACpC,CAAC,CAAC;QACP,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACpC,OAA0B,EAC1B,OAAgB,EAChB,KAAe,EACf,MAAmB;IAEnB,OAAO;QACH,GAAG,OAAO;QACV,IAAI,EACA,OAAO,CAAC,SAAS,KAAK,IAAI;YACtB,CAAC,CAAC,MAAM,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC;YAC7C,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,uBAAuB,EAAE,OAAO,CAAC;QACvE,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,mBAAmB,EAAE,OAAO,CAAC;KAChE,CAAC;AACN,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAoB;IAC9C,OAAO;QACH,OAAO;QACP,OAAO,CAAC,GAAG;QACX,QAAQ;QACR,OAAO,CAAC,IAAI;QACZ,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACxE,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;KACjF,CAAC;AACN,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { Command } from "commander";
1
+ import { type Command } from "commander";
2
2
  import type { CliContext } from "../../context.ts";
3
3
  export declare function registerPairAction(command: Command, context: CliContext): void;
4
4
  //# sourceMappingURL=pair.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pair.d.ts","sourceRoot":"","sources":["../../../../src/cli/handler/pair/pair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAInD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAwB9E"}
1
+ {"version":3,"file":"pair.d.ts","sourceRoot":"","sources":["../../../../src/cli/handler/pair/pair.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,WAAW,CAAC;AAQjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAInD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CA2B9E"}
@@ -1,3 +1,4 @@
1
+ import { Option } from "commander";
1
2
  import { reloadDaemon } from "../../../daemon/lifecycle/daemon.js";
2
3
  import { ensureDaemon } from "../../../daemon/lifecycle/daemon-client.js";
3
4
  import { openMobiusCliInstallation, openMobiusControlInstallation, pairLocalMachine, } from "../../../daemon/pairing/pair-local-machine.js";
@@ -7,10 +8,11 @@ export function registerPairAction(command, context) {
7
8
  command
8
9
  .addOption(valueOption("--url <relay-url>", "relay HTTP or HTTPS URL"))
9
10
  .addOption(valueOption("--code <pairing-code>", "pairing code shown in the browser"))
11
+ .addOption(new Option("--code-stdin", "read the pairing code from standard input instead of --code").conflicts("code"))
10
12
  .addOption(valueOption("--pairing <runtime-pairing-id>", "Runtime pairing identifier"))
11
13
  .addOption(valueOption("--workspace <directory>", "default workspace directory"))
12
14
  .action(async (options) => {
13
- const requested = requirePairOptions(options, command);
15
+ const requested = await requirePairOptions(options, command, process.stdin, context.shutdownSignal);
14
16
  const control = await openMobiusControlInstallation(context.shutdownSignal, process.env);
15
17
  await ensureDaemon(control.stateDirectory, context.version, context.shutdownSignal);
16
18
  const installation = await openMobiusCliInstallation(context.shutdownSignal, process.env);
@@ -1 +1 @@
1
- {"version":3,"file":"pair.js","sourceRoot":"","sources":["../../../../src/cli/handler/pair/pair.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EACH,yBAAyB,EACzB,6BAA6B,EAC7B,gBAAgB,GACnB,MAAM,+CAA+C,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAA0B,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE/F,MAAM,UAAU,kBAAkB,CAAC,OAAgB,EAAE,OAAmB;IACpE,OAAO;SACF,SAAS,CAAC,WAAW,CAAC,mBAAmB,EAAE,yBAAyB,CAAC,CAAC;SACtE,SAAS,CAAC,WAAW,CAAC,uBAAuB,EAAE,mCAAmC,CAAC,CAAC;SACpF,SAAS,CAAC,WAAW,CAAC,gCAAgC,EAAE,4BAA4B,CAAC,CAAC;SACtF,SAAS,CAAC,WAAW,CAAC,yBAAyB,EAAE,6BAA6B,CAAC,CAAC;SAChF,MAAM,CAAC,KAAK,EAAE,OAA0B,EAAE,EAAE;QACzC,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,MAAM,6BAA6B,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QACzF,MAAM,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QACpF,MAAM,YAAY,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QACxF,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,uBAAuB,CACzD,MAAM,CAAC,YAAY,EACnB,QAAQ,EACR,OAAO,CAAC,cAAc,CACzB,CAAC;QACF,MAAM,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAChB,oCAAoC,UAAU,CAAC,KAAK,oBAAoB,UAAU,CAAC,YAAY,IAAI,CACtG,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;AACX,CAAC"}
1
+ {"version":3,"file":"pair.js","sourceRoot":"","sources":["../../../../src/cli/handler/pair/pair.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EACH,yBAAyB,EACzB,6BAA6B,EAC7B,gBAAgB,GACnB,MAAM,+CAA+C,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAA0B,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE/F,MAAM,UAAU,kBAAkB,CAAC,OAAgB,EAAE,OAAmB;IACpE,OAAO;SACF,SAAS,CAAC,WAAW,CAAC,mBAAmB,EAAE,yBAAyB,CAAC,CAAC;SACtE,SAAS,CAAC,WAAW,CAAC,uBAAuB,EAAE,mCAAmC,CAAC,CAAC;SACpF,SAAS,CACN,IAAI,MAAM,CAAC,cAAc,EAAE,6DAA6D,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAC9G;SACA,SAAS,CAAC,WAAW,CAAC,gCAAgC,EAAE,4BAA4B,CAAC,CAAC;SACtF,SAAS,CAAC,WAAW,CAAC,yBAAyB,EAAE,6BAA6B,CAAC,CAAC;SAChF,MAAM,CAAC,KAAK,EAAE,OAA0B,EAAE,EAAE;QACzC,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QACpG,MAAM,OAAO,GAAG,MAAM,6BAA6B,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QACzF,MAAM,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QACpF,MAAM,YAAY,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QACxF,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,uBAAuB,CACzD,MAAM,CAAC,YAAY,EACnB,QAAQ,EACR,OAAO,CAAC,cAAc,CACzB,CAAC;QACF,MAAM,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAChB,oCAAoC,UAAU,CAAC,KAAK,oBAAoB,UAAU,CAAC,YAAY,IAAI,CACtG,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;AACX,CAAC"}
@@ -31,10 +31,10 @@ import {
31
31
  unhandledRejectionLogFilename,
32
32
  validateLocalPath,
33
33
  validatePairingId
34
- } from "./chunk-BV3LIKQU.js";
34
+ } from "./chunk-NYCOWKU2.js";
35
35
  import {
36
36
  package_default
37
- } from "./chunk-XLNNEHPR.js";
37
+ } from "./chunk-K3YAUS5L.js";
38
38
 
39
39
  // ../../node_modules/.pnpm/commander@15.0.0/node_modules/commander/lib/error.js
40
40
  var CommanderError = class extends Error {
@@ -5492,6 +5492,7 @@ function registerPairListCommand(command, context) {
5492
5492
  }
5493
5493
 
5494
5494
  // src/cli/handler/pair/logic/options.ts
5495
+ import { addAbortSignal } from "node:stream";
5495
5496
  function requireOption(value, flags, command) {
5496
5497
  if (value === void 0) {
5497
5498
  command.error(`required option '${flags}' not specified`, {
@@ -5500,10 +5501,30 @@ function requireOption(value, flags, command) {
5500
5501
  }
5501
5502
  return value;
5502
5503
  }
5503
- function requirePairOptions(options, command) {
5504
+ var MAX_PIPED_CODE_BYTES = 1024;
5505
+ async function readPipedCode(input, command, signal) {
5506
+ const chunks = [];
5507
+ let size = 0;
5508
+ for await (const chunk of addAbortSignal(signal, input)) {
5509
+ const bytes = Buffer.from(chunk);
5510
+ size += bytes.length;
5511
+ if (size > MAX_PIPED_CODE_BYTES) {
5512
+ command.error("the pairing code read from standard input is too long", {
5513
+ code: "commander.invalidArgument"
5514
+ });
5515
+ }
5516
+ chunks.push(bytes);
5517
+ }
5518
+ const code = Buffer.concat(chunks).toString("utf8").trim();
5519
+ if (code.length === 0) {
5520
+ command.error("no pairing code was read from standard input", { code: "commander.invalidArgument" });
5521
+ }
5522
+ return code;
5523
+ }
5524
+ async function requirePairOptions(options, command, input, signal) {
5504
5525
  return {
5505
5526
  ...options,
5506
- code: requireOption(options.code, "--code <pairing-code>", command),
5527
+ code: options.codeStdin === true ? await readPipedCode(input, command, signal) : requireOption(options.code, "--code <pairing-code>", command),
5507
5528
  url: requireOption(options.url, "--url <relay-url>", command)
5508
5529
  };
5509
5530
  }
@@ -5520,8 +5541,10 @@ function pairArguments(options) {
5520
5541
 
5521
5542
  // src/cli/handler/pair/pair.ts
5522
5543
  function registerPairAction(command, context) {
5523
- command.addOption(valueOption("--url <relay-url>", "relay HTTP or HTTPS URL")).addOption(valueOption("--code <pairing-code>", "pairing code shown in the browser")).addOption(valueOption("--pairing <runtime-pairing-id>", "Runtime pairing identifier")).addOption(valueOption("--workspace <directory>", "default workspace directory")).action(async (options) => {
5524
- const requested = requirePairOptions(options, command);
5544
+ command.addOption(valueOption("--url <relay-url>", "relay HTTP or HTTPS URL")).addOption(valueOption("--code <pairing-code>", "pairing code shown in the browser")).addOption(
5545
+ new Option("--code-stdin", "read the pairing code from standard input instead of --code").conflicts("code")
5546
+ ).addOption(valueOption("--pairing <runtime-pairing-id>", "Runtime pairing identifier")).addOption(valueOption("--workspace <directory>", "default workspace directory")).action(async (options) => {
5547
+ const requested = await requirePairOptions(options, command, process.stdin, context.shutdownSignal);
5525
5548
  const control = await openMobiusControlInstallation(context.shutdownSignal, process.env);
5526
5549
  await ensureDaemon(control.stateDirectory, context.version, context.shutdownSignal);
5527
5550
  const installation = await openMobiusCliInstallation(context.shutdownSignal, process.env);
@@ -5710,4 +5733,4 @@ async function runCLI() {
5710
5733
  export {
5711
5734
  runCLI
5712
5735
  };
5713
- //# sourceMappingURL=cli-I4VJRVRJ.js.map
5736
+ //# sourceMappingURL=cli-FLXN6UTM.js.map