@paradigma-inc/flywheel 0.1.111 → 0.1.115

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 (33) hide show
  1. package/README.md +12 -3
  2. package/package.json +1 -1
  3. package/skills/flywheel/getting-started/flywheel-tutorial-overview.md +1 -1
  4. package/skills/flywheel/setting-up-flywheel/how-can-i-get-an-authorized-client_id-for-the-oauth-flow.md +12 -4
  5. package/skills/flywheel/setting-up-flywheel/other-hosts-installation.md +8 -1
  6. package/skills/flywheel-llm-proof-paper/scripts/__pycache__/check_paper.cpython-312.pyc +0 -0
  7. package/src/runtime/required-runtime-commands.json +3 -0
  8. package/src/runtime/vendor/flywheel-cli-dist/commands/_browser-handoff.d.ts +16 -2
  9. package/src/runtime/vendor/flywheel-cli-dist/commands/_browser-handoff.js +36 -14
  10. package/src/runtime/vendor/flywheel-cli-dist/commands/_browser-handoff.js.map +1 -1
  11. package/src/runtime/vendor/flywheel-cli-dist/commands/_open-url.d.ts +2 -2
  12. package/src/runtime/vendor/flywheel-cli-dist/commands/_open-url.js +15 -6
  13. package/src/runtime/vendor/flywheel-cli-dist/commands/_open-url.js.map +1 -1
  14. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-create.d.ts +2 -0
  15. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-create.js +9 -0
  16. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-create.js.map +1 -0
  17. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-delete.d.ts +2 -0
  18. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-delete.js +11 -0
  19. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-delete.js.map +1 -0
  20. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-login.d.ts +2 -0
  21. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-login.js +20 -0
  22. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-login.js.map +1 -0
  23. package/src/runtime/vendor/flywheel-cli-dist/commands/index.d.ts +21 -21
  24. package/src/runtime/vendor/flywheel-cli-dist/commands/index.js +268 -262
  25. package/src/runtime/vendor/flywheel-cli-dist/commands/index.js.map +1 -1
  26. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/admin.d.ts +1 -1
  27. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/admin.js +206 -66
  28. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/admin.js.map +1 -1
  29. package/src/runtime/vendor/flywheel-cli-dist/generatedProductTelemetryContract.js +2 -2
  30. package/src/runtime/vendor/flywheel-cli-dist/generatedProductTelemetryContract.js.map +1 -1
  31. package/src/runtime/vendor/flywheel-cli-dist/http/client.js +2 -0
  32. package/src/runtime/vendor/flywheel-cli-dist/http/client.js.map +1 -1
  33. package/src/runtime/vendor/manifest.json +10 -1
package/README.md CHANGED
@@ -339,9 +339,18 @@ Gemini CLI currently do). On the first MCP tool call the IDE hits
339
339
  `/mcp-server`, follows the `WWW-Authenticate` hint to
340
340
  `/.well-known/oauth-protected-resource`, reads the authorization-server
341
341
  metadata advertising `client_id_metadata_document_supported`, and presents
342
- its public HTTPS Client ID Metadata Document as `client_id`. There is no
343
- registration endpoint. The IDE then completes the browser flow and manages
344
- its own refresh tokens. No API key ever touches the user's filesystem.
342
+ its public HTTPS Client ID Metadata Document as `client_id`. There is no public
343
+ registration endpoint and no private enrollment step. Flywheel validates the
344
+ exact client identity, complete redirect set, selected redirect, PKCE, and
345
+ requested scopes before issuing credentials after authenticated consent.
346
+
347
+ The IDE manages and persists its own access and single-use refresh credentials.
348
+ It should reuse a valid access credential and rotate the refresh credential
349
+ without opening a browser. Flywheel can also skip repeat consent when the same
350
+ user, exact client identity and redirect, active grant, and equal-or-narrower
351
+ scopes still match. A new or changed identity or redirect, scope expansion,
352
+ expiry, revocation, or disconnect requires consent again. No API key ever
353
+ touches the user's filesystem.
345
354
 
346
355
  `--api-key` and `--oauth` are mutually exclusive; passing both produces a
347
356
  usage error (`exit 2`).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paradigma-inc/flywheel",
3
- "version": "0.1.111",
3
+ "version": "0.1.115",
4
4
  "description": "One-command setup for Flywheel MCP hosts",
5
5
  "type": "module",
6
6
  "files": [
@@ -26,6 +26,6 @@ While in SWE we use git to manage changes to code, in research we are interested
26
26
  - [Credits and billing](../compute/credits-and-billing.md)
27
27
  - [Using local hardware with Flywheel](../usage-and-workflows/using-local-hardware-with-flywheel.md)
28
28
  - [Participating in a Campaign](../campaigns/participating-in-a-campaign.md)
29
- - [OAuth client registration FAQ](../setting-up-flywheel/how-can-i-get-an-authorized-client_id-for-the-oauth-flow.md)
29
+ - [OAuth Client ID Metadata FAQ](../setting-up-flywheel/how-can-i-get-an-authorized-client_id-for-the-oauth-flow.md)
30
30
  - [Flywheel MCP tool map](../references/flywheel-mcp-tool-map.md)
31
31
  - [Example workflows](../example-workflows/)
@@ -1,8 +1,8 @@
1
- # FAQ: How Can I Get an Authorized `client_id` for the OAuth Flow?
1
+ # FAQ: How Can I Use a `client_id` for the OAuth Flow?
2
2
 
3
- Flywheel uses [OAuth Client ID Metadata Documents](https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization#client-id-metadata-documents).
4
- Your public HTTPS metadata-document URL is the OAuth `client_id`; there is no
5
- separate registration request.
3
+ Flywheel uses [OAuth Client ID Metadata Documents](https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization/client-registration).
4
+ Your public HTTPS metadata-document URL is the OAuth `client_id`. There is no
5
+ Dynamic Client Registration endpoint and no private enrollment or allowlist.
6
6
 
7
7
  First, query our OAuth authorization-server metadata:
8
8
 
@@ -31,3 +31,11 @@ and validates the document during authorization and token exchange. The requeste
31
31
  redirect URI must exactly match one listed value; it may be omitted only when the
32
32
  document lists exactly one redirect URI. Do not put a client secret in the
33
33
  document.
34
+
35
+ The first connection requires authenticated consent and PKCE. Persist the issued
36
+ access and single-use refresh credentials. Reuse the access credential while it
37
+ is valid and rotate the refresh credential instead of restarting authorization.
38
+ Flywheel skips repeat consent only for the same user, exact client identity and
39
+ selected redirect, active grant, and equal-or-narrower scopes. A new or changed
40
+ client identity or redirect, scope expansion, expiry, revocation, or disconnect
41
+ requires consent again.
@@ -37,4 +37,11 @@ Authorization = "Bearer <YOUR_MCP_API_KEY>"
37
37
 
38
38
  Different hosts use different field names (`mcpServers`, `mcp_servers`, `mcp.servers`, etc.), but the server URL and `Authorization` bearer header are the key pieces.
39
39
 
40
- Alternative: for any host that supports MCP OAuth, you can use its OAuth connector install flow and set the MCP URL to `https://flywheel.paradigma.inc/mcp-server`. Web connector hosts (for example ChatGPT.com, Claude.ai) commonly use this path. It can be convenient, but it may prompt re-authorization more often than the API key route depending on the host token lifecycle and refresh behavior.
40
+ Alternative: for any host that supports MCP OAuth, use its OAuth connector
41
+ install flow and set the MCP URL to
42
+ `https://flywheel.paradigma.inc/mcp-server`. Web connector hosts (for example
43
+ ChatGPT.com and Claude.ai) commonly use this path. A host that persists access
44
+ and refresh credentials should authorize once, reuse the access credential, and
45
+ rotate the refresh credential without another browser prompt. Reauthorization
46
+ is needed when the host loses its credentials or the grant expires, is revoked,
47
+ or requests changed authority.
@@ -80,6 +80,9 @@
80
80
  "export:summary:stream",
81
81
  "export:summary:pdf",
82
82
  "export:summary:render-pdf",
83
+ "admin:test-users:create",
84
+ "admin:test-users:delete",
85
+ "admin:test-users:login",
83
86
  "admin:graphs:list",
84
87
  "admin:graphs:export",
85
88
  "admin:graphs:export:stream",
@@ -1,17 +1,24 @@
1
- import type { CliGlobals } from '../grammar/globals.js';
1
+ import type { CliGlobals } from "../grammar/globals.js";
2
2
  export interface BrowserHandoffResult {
3
- status: 'browser_flow_required';
3
+ status: "browser_flow_required";
4
4
  command: string;
5
5
  url: string;
6
6
  opened: boolean;
7
7
  next_action: string;
8
8
  }
9
+ export interface PrivateBrowserHandoffResult {
10
+ status: "private_browser_handoff_started";
11
+ command: string;
12
+ opened: true;
13
+ next_action: string;
14
+ }
9
15
  /**
10
16
  * Normalizes route-specific browser URLs into the CLI's stable handoff result.
11
17
  * Billing routes expose Stripe-shaped checkout/portal fields, while OAuth and
12
18
  * generic handoffs use open_url/url.
13
19
  */
14
20
  export declare function extractOpenUrl(payload: Record<string, unknown>): string;
21
+ export declare function requirePrivateBrowserHandoff(globals: CliGlobals | undefined): void;
15
22
  export declare function buildBrowserHandoffResult({ command, url, globals, stderr, nextAction, }: {
16
23
  command: string;
17
24
  url: string;
@@ -19,3 +26,10 @@ export declare function buildBrowserHandoffResult({ command, url, globals, stder
19
26
  stderr?: (chunk: string) => void;
20
27
  nextAction: string;
21
28
  }): Promise<BrowserHandoffResult>;
29
+ export declare function buildPrivateBrowserHandoffResult({ command, url, globals, stderr, nextAction, }: {
30
+ command: string;
31
+ url: string;
32
+ globals: CliGlobals | undefined;
33
+ stderr?: (chunk: string) => void;
34
+ nextAction: string;
35
+ }): Promise<PrivateBrowserHandoffResult>;
@@ -1,11 +1,12 @@
1
- import { EXIT_TRANSPORT } from '../exit-codes.js';
2
- import { CliHttpError } from '../http/client.js';
3
- import { maybeOpenUrl } from './_open-url.js';
1
+ import { CliUsageError } from "../errors.js";
2
+ import { EXIT_TRANSPORT } from "../exit-codes.js";
3
+ import { CliHttpError } from "../http/client.js";
4
+ import { maybeOpenUrl } from "./_open-url.js";
4
5
  const BROWSER_HANDOFF_URL_KEYS = [
5
- 'open_url',
6
- 'url',
7
- 'checkout_url',
8
- 'portal_url',
6
+ "open_url",
7
+ "url",
8
+ "checkout_url",
9
+ "portal_url",
9
10
  ];
10
11
  /**
11
12
  * Normalizes route-specific browser URLs into the CLI's stable handoff result.
@@ -15,37 +16,58 @@ const BROWSER_HANDOFF_URL_KEYS = [
15
16
  export function extractOpenUrl(payload) {
16
17
  for (const key of BROWSER_HANDOFF_URL_KEYS) {
17
18
  const value = payload[key];
18
- if (typeof value === 'string')
19
+ if (typeof value === "string")
19
20
  return value;
20
21
  }
21
- return '';
22
+ return "";
22
23
  }
23
24
  function validatedBrowserHandoffUrl(url) {
24
25
  const trimmed = url.trim();
25
26
  if (!trimmed) {
26
- throw new CliHttpError('browser handoff response missing browser URL', EXIT_TRANSPORT);
27
+ throw new CliHttpError("browser handoff response missing browser URL", EXIT_TRANSPORT);
27
28
  }
28
29
  let parsed;
29
30
  try {
30
31
  parsed = new URL(trimmed);
31
32
  }
32
33
  catch {
33
- throw new CliHttpError('browser handoff response included an invalid browser URL', EXIT_TRANSPORT);
34
+ throw new CliHttpError("browser handoff response included an invalid browser URL", EXIT_TRANSPORT);
34
35
  }
35
- if (parsed.protocol !== 'https:' && parsed.protocol !== 'http:') {
36
- throw new CliHttpError('browser handoff response included a non-HTTP browser URL', EXIT_TRANSPORT);
36
+ if (parsed.protocol !== "https:" && parsed.protocol !== "http:") {
37
+ throw new CliHttpError("browser handoff response included a non-HTTP browser URL", EXIT_TRANSPORT);
37
38
  }
38
39
  return trimmed;
39
40
  }
41
+ export function requirePrivateBrowserHandoff(globals) {
42
+ if (!globals?.open) {
43
+ throw new CliUsageError("admin:test-users:login requires --open for private browser handoff");
44
+ }
45
+ if (!process.stdout.isTTY) {
46
+ throw new CliUsageError("admin:test-users:login requires an interactive terminal for private browser handoff");
47
+ }
48
+ }
40
49
  export async function buildBrowserHandoffResult({ command, url, globals, stderr, nextAction, }) {
41
50
  const handoffUrl = validatedBrowserHandoffUrl(url);
42
51
  const opened = await maybeOpenUrl(handoffUrl, globals, stderr);
43
52
  return {
44
- status: 'browser_flow_required',
53
+ status: "browser_flow_required",
45
54
  command,
46
55
  url: handoffUrl,
47
56
  opened,
48
57
  next_action: nextAction,
49
58
  };
50
59
  }
60
+ export async function buildPrivateBrowserHandoffResult({ command, url, globals, stderr, nextAction, }) {
61
+ requirePrivateBrowserHandoff(globals);
62
+ const opened = await maybeOpenUrl(validatedBrowserHandoffUrl(url), globals, stderr, true);
63
+ if (!opened) {
64
+ throw new CliHttpError("private browser handoff could not be opened", EXIT_TRANSPORT);
65
+ }
66
+ return {
67
+ status: "private_browser_handoff_started",
68
+ command,
69
+ opened: true,
70
+ next_action: nextAction,
71
+ };
72
+ }
51
73
  //# sourceMappingURL=_browser-handoff.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_browser-handoff.js","sourceRoot":"","sources":["../../src/commands/_browser-handoff.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAU9C,MAAM,wBAAwB,GAAG;IAC/B,UAAU;IACV,KAAK;IACL,cAAc;IACd,YAAY;CACJ,CAAC;AAEX;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgC;IAC7D,KAAK,MAAM,GAAG,IAAI,wBAAwB,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;IAC9C,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,0BAA0B,CAAC,GAAW;IAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,YAAY,CACpB,8CAA8C,EAC9C,cAAc,CACf,CAAC;IACJ,CAAC;IACD,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,YAAY,CACpB,0DAA0D,EAC1D,cAAc,CACf,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChE,MAAM,IAAI,YAAY,CACpB,0DAA0D,EAC1D,cAAc,CACf,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,EAC9C,OAAO,EACP,GAAG,EACH,OAAO,EACP,MAAM,EACN,UAAU,GAOX;IACC,MAAM,UAAU,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/D,OAAO;QACL,MAAM,EAAE,uBAAuB;QAC/B,OAAO;QACP,GAAG,EAAE,UAAU;QACf,MAAM;QACN,WAAW,EAAE,UAAU;KACxB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"_browser-handoff.js","sourceRoot":"","sources":["../../src/commands/_browser-handoff.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAiB9C,MAAM,wBAAwB,GAAG;IAC/B,UAAU;IACV,KAAK;IACL,cAAc;IACd,YAAY;CACJ,CAAC;AAEX;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgC;IAC7D,KAAK,MAAM,GAAG,IAAI,wBAAwB,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;IAC9C,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,0BAA0B,CAAC,GAAW;IAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,YAAY,CACpB,8CAA8C,EAC9C,cAAc,CACf,CAAC;IACJ,CAAC;IACD,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,YAAY,CACpB,0DAA0D,EAC1D,cAAc,CACf,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChE,MAAM,IAAI,YAAY,CACpB,0DAA0D,EAC1D,cAAc,CACf,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,OAA+B;IAE/B,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,aAAa,CACrB,oEAAoE,CACrE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,aAAa,CACrB,qFAAqF,CACtF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,EAC9C,OAAO,EACP,GAAG,EACH,OAAO,EACP,MAAM,EACN,UAAU,GAOX;IACC,MAAM,UAAU,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/D,OAAO;QACL,MAAM,EAAE,uBAAuB;QAC/B,OAAO;QACP,GAAG,EAAE,UAAU;QACf,MAAM;QACN,WAAW,EAAE,UAAU;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gCAAgC,CAAC,EACrD,OAAO,EACP,GAAG,EACH,OAAO,EACP,MAAM,EACN,UAAU,GAOX;IACC,4BAA4B,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,0BAA0B,CAAC,GAAG,CAAC,EAC/B,OAAO,EACP,MAAM,EACN,IAAI,CACL,CAAC;IACF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,YAAY,CACpB,6CAA6C,EAC7C,cAAc,CACf,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,iCAAiC;QACzC,OAAO;QACP,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,UAAU;KACxB,CAAC;AACJ,CAAC"}
@@ -1,2 +1,2 @@
1
- import type { CliGlobals } from '../grammar/globals.js';
2
- export declare function maybeOpenUrl(url: string | undefined, globals: CliGlobals | undefined, stderr?: (chunk: string) => void): Promise<boolean>;
1
+ import type { CliGlobals } from "../grammar/globals.js";
2
+ export declare function maybeOpenUrl(url: string | undefined, globals: CliGlobals | undefined, stderr?: (chunk: string) => void, privateBrowser?: boolean): Promise<boolean>;
@@ -1,24 +1,33 @@
1
- export async function maybeOpenUrl(url, globals, stderr) {
1
+ export async function maybeOpenUrl(url, globals, stderr, privateBrowser = false) {
2
2
  if (!url || !globals?.open)
3
3
  return false;
4
4
  if (!process.stdout.isTTY)
5
5
  return false;
6
6
  try {
7
- const mod = (await import('open'));
7
+ const mod = (await import("open"));
8
8
  let open;
9
- if (typeof mod === 'function') {
9
+ if (typeof mod === "function") {
10
10
  open = mod;
11
11
  }
12
- else if (mod && typeof mod.default === 'function') {
12
+ else if (mod &&
13
+ typeof mod.default === "function") {
13
14
  open = mod.default;
14
15
  }
15
16
  if (open) {
16
- await open(url);
17
+ if (privateBrowser) {
18
+ const browserPrivate = mod.apps?.browserPrivate;
19
+ if (!browserPrivate)
20
+ return false;
21
+ await open(url, { app: { name: browserPrivate } });
22
+ }
23
+ else {
24
+ await open(url);
25
+ }
17
26
  return true;
18
27
  }
19
28
  }
20
29
  catch {
21
- const msg = '--open skipped: install the `open` package to enable browser launch\n';
30
+ const msg = "--open skipped: install the `open` package to enable browser launch\n";
22
31
  if (stderr)
23
32
  stderr(msg);
24
33
  else
@@ -1 +1 @@
1
- {"version":3,"file":"_open-url.js","sourceRoot":"","sources":["../../src/commands/_open-url.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAuB,EACvB,OAA+B,EAC/B,MAAgC;IAEhC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,MAAgB,CAAC,CAAY,CAAC;QACxD,IAAI,IAAwB,CAAC;QAC7B,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;YAC9B,IAAI,GAAG,GAAa,CAAC;QACvB,CAAC;aAAM,IAAI,GAAG,IAAI,OAAQ,GAA6B,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YAC/E,IAAI,GAAI,GAA2B,CAAC,OAAO,CAAC;QAC9C,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,GAAG,uEAAuE,CAAC;QACpF,IAAI,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;YACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"_open-url.js","sourceRoot":"","sources":["../../src/commands/_open-url.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAuB,EACvB,OAA+B,EAC/B,MAAgC,EAChC,cAAc,GAAG,KAAK;IAEtB,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,MAAgB,CAAC,CAAY,CAAC;QACxD,IAAI,IAAwB,CAAC;QAC7B,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;YAC9B,IAAI,GAAG,GAAa,CAAC;QACvB,CAAC;aAAM,IACL,GAAG;YACH,OAAQ,GAA6B,CAAC,OAAO,KAAK,UAAU,EAC5D,CAAC;YACD,IAAI,GAAI,GAA2B,CAAC,OAAO,CAAC;QAC9C,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,cAAc,GAClB,GACD,CAAC,IAAI,EAAE,cAAc,CAAC;gBACvB,IAAI,CAAC,cAAc;oBAAE,OAAO,KAAK,CAAC;gBAClC,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,GACP,uEAAuE,CAAC;QAC1E,IAAI,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;YACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { CommandHandler } from "./types.js";
2
+ export declare const adminTestUsersCreateCommand: CommandHandler;
@@ -0,0 +1,9 @@
1
+ import { adminAuthRequestOptions, requireAdminCredential, } from "./_admin-auth.js";
2
+ export const adminTestUsersCreateCommand = async (context) => {
3
+ requireAdminCredential(context, "admin:test-users:create");
4
+ const options = {
5
+ ...adminAuthRequestOptions(context.apiKey),
6
+ };
7
+ return context.requestJson("POST", "/admin/test-users", options);
8
+ };
9
+ //# sourceMappingURL=admin-test-users-create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-test-users-create.js","sourceRoot":"","sources":["../../src/commands/admin-test-users-create.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,CAAC,MAAM,2BAA2B,GAAmB,KAAK,EAAE,OAAO,EAAE,EAAE;IAC3E,sBAAsB,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAmB;QAC9B,GAAG,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC;KAC3C,CAAC;IACF,OAAO,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;AACnE,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { CommandHandler } from "./types.js";
2
+ export declare const adminTestUsersDeleteCommand: CommandHandler;
@@ -0,0 +1,11 @@
1
+ import { adminAuthRequestOptions, requireAdminCredential, } from "./_admin-auth.js";
2
+ import { requiredString } from "./utils.js";
3
+ export const adminTestUsersDeleteCommand = async (context) => {
4
+ requireAdminCredential(context, "admin:test-users:delete");
5
+ const userId = requiredString(context.params, "user_id");
6
+ const options = {
7
+ ...adminAuthRequestOptions(context.apiKey),
8
+ };
9
+ return context.requestJson("DELETE", `/admin/test-users/${encodeURIComponent(userId)}`, options);
10
+ };
11
+ //# sourceMappingURL=admin-test-users-delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-test-users-delete.js","sourceRoot":"","sources":["../../src/commands/admin-test-users-delete.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,CAAC,MAAM,2BAA2B,GAAmB,KAAK,EAAE,OAAO,EAAE,EAAE;IAC3E,sBAAsB,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACzD,MAAM,OAAO,GAAmB;QAC9B,GAAG,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC;KAC3C,CAAC;IACF,OAAO,OAAO,CAAC,WAAW,CACxB,QAAQ,EACR,qBAAqB,kBAAkB,CAAC,MAAM,CAAC,EAAE,EACjD,OAAO,CACR,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { CommandHandler } from "./types.js";
2
+ export declare const adminTestUsersLoginCommand: CommandHandler;
@@ -0,0 +1,20 @@
1
+ import { adminAuthRequestOptions, requireAdminCredential, } from "./_admin-auth.js";
2
+ import { buildPrivateBrowserHandoffResult, requirePrivateBrowserHandoff, } from "./_browser-handoff.js";
3
+ import { requiredString } from "./utils.js";
4
+ export const adminTestUsersLoginCommand = async (context) => {
5
+ requireAdminCredential(context, "admin:test-users:login");
6
+ requirePrivateBrowserHandoff(context.globals);
7
+ const userId = requiredString(context.params, "user_id");
8
+ const options = {
9
+ ...adminAuthRequestOptions(context.apiKey),
10
+ };
11
+ const payload = (await context.requestJson("POST", `/admin/test-users/${encodeURIComponent(userId)}/login-link`, options)) ?? {};
12
+ return buildPrivateBrowserHandoffResult({
13
+ command: "admin:test-users:login",
14
+ url: typeof payload.action_link === "string" ? payload.action_link : "",
15
+ globals: context.globals,
16
+ stderr: context.stderr,
17
+ nextAction: "Test-user browser session opened.",
18
+ });
19
+ };
20
+ //# sourceMappingURL=admin-test-users-login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-test-users-login.js","sourceRoot":"","sources":["../../src/commands/admin-test-users-login.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,gCAAgC,EAChC,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,CAAC,MAAM,0BAA0B,GAAmB,KAAK,EAAE,OAAO,EAAE,EAAE;IAC1E,sBAAsB,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;IAC1D,4BAA4B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACzD,MAAM,OAAO,GAAmB;QAC9B,GAAG,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC;KAC3C,CAAC;IACF,MAAM,OAAO,GACX,CAAC,MAAM,OAAO,CAAC,WAAW,CACxB,MAAM,EACN,qBAAqB,kBAAkB,CAAC,MAAM,CAAC,aAAa,EAC5D,OAAO,CACR,CAAC,IAAI,EAAE,CAAC;IACX,OAAO,gCAAgC,CAAC;QACtC,OAAO,EAAE,wBAAwB;QACjC,GAAG,EAAE,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;QACvE,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,mCAAmC;KAChD,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -1,23 +1,23 @@
1
- import { artifactsGetCommand } from './artifacts-get.js';
2
- import { artifactsListCommand } from './artifacts-list.js';
3
- import { authLoginCommand } from './auth-login.js';
4
- import { authStatusCommand } from './auth-status.js';
5
- import { computeStatusCommand } from './compute-status.js';
6
- import { exportSubgraphCommand } from './export-subgraph.js';
7
- import { nodesChildrenCommand } from './nodes-children.js';
8
- import { nodesCommitCommand } from './nodes-commit.js';
9
- import { nodesCommitNewCommand } from './nodes-commit-new.js';
10
- import { nodesDeleteCommand } from './nodes-delete.js';
11
- import { nodesGetCommand } from './nodes-get.js';
12
- import { nodesListCommand } from './nodes-list.js';
13
- import { nodesParentsCommand } from './nodes-parents.js';
14
- import { nodesRenderTreeCommand } from './nodes-render-tree.js';
15
- import { nodesStageLeaseAcquireCommand } from './nodes-stage-lease-acquire.js';
16
- import { profileListCommand } from './profile-list.js';
17
- import { profileShowCommand } from './profile-show.js';
18
- import { profileSetCommand } from './profile-set.js';
19
- import { profileUnsetCommand } from './profile-unset.js';
20
- import { graphGetCommand } from './graph-get.js';
21
- import type { CommandHandler } from './types.js';
1
+ import { artifactsGetCommand } from "./artifacts-get.js";
2
+ import { artifactsListCommand } from "./artifacts-list.js";
3
+ import { authLoginCommand } from "./auth-login.js";
4
+ import { authStatusCommand } from "./auth-status.js";
5
+ import { computeStatusCommand } from "./compute-status.js";
6
+ import { exportSubgraphCommand } from "./export-subgraph.js";
7
+ import { nodesChildrenCommand } from "./nodes-children.js";
8
+ import { nodesCommitCommand } from "./nodes-commit.js";
9
+ import { nodesCommitNewCommand } from "./nodes-commit-new.js";
10
+ import { nodesDeleteCommand } from "./nodes-delete.js";
11
+ import { nodesGetCommand } from "./nodes-get.js";
12
+ import { nodesListCommand } from "./nodes-list.js";
13
+ import { nodesParentsCommand } from "./nodes-parents.js";
14
+ import { nodesRenderTreeCommand } from "./nodes-render-tree.js";
15
+ import { nodesStageLeaseAcquireCommand } from "./nodes-stage-lease-acquire.js";
16
+ import { profileListCommand } from "./profile-list.js";
17
+ import { profileShowCommand } from "./profile-show.js";
18
+ import { profileSetCommand } from "./profile-set.js";
19
+ import { profileUnsetCommand } from "./profile-unset.js";
20
+ import { graphGetCommand } from "./graph-get.js";
21
+ import type { CommandHandler } from "./types.js";
22
22
  export { artifactsGetCommand, artifactsListCommand, authLoginCommand, authStatusCommand, computeStatusCommand, exportSubgraphCommand, graphGetCommand, nodesChildrenCommand, nodesCommitCommand, nodesCommitNewCommand, nodesDeleteCommand, nodesGetCommand, nodesListCommand, nodesParentsCommand, nodesRenderTreeCommand, nodesStageLeaseAcquireCommand, profileListCommand, profileShowCommand, profileSetCommand, profileUnsetCommand, };
23
23
  export declare const MVP_COMMAND_HANDLERS: Record<string, CommandHandler>;