@getmagical/cli 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,6 +10,7 @@ Magical CLI for the shared MCP operation surface.
10
10
  ## Usage
11
11
 
12
12
  ```bash
13
+ mgcl update
13
14
  mgcl auth login
14
15
  mgcl org list
15
16
  mgcl automations list --limit 10
@@ -44,3 +45,31 @@ npm run cli -- auth login
44
45
  Production installs use the bundled WorkOS client ID by default. Set
45
46
  `WORKOS_CLIENT_ID` only when you need to override it for local or staging
46
47
  environments.
48
+
49
+ ## Install Script
50
+
51
+ Host [install-mgcl.sh](/Users/parker/.codex/worktrees/9649/magical/scripts/install-mgcl.sh)
52
+ at your preferred URL, then users can install with a single command:
53
+
54
+ ```bash
55
+ curl -fsSL https://your-host.example/install-mgcl.sh | bash
56
+ curl -fsSL https://your-host.example/install-mgcl.sh | bash -s -- --uninstall
57
+ ```
58
+
59
+ The installer uses a user-local npm prefix, so it does not require `sudo`.
60
+ It installs a managed Node.js runtime, then installs `@getmagical/cli` from
61
+ npm into a user-local prefix. It creates `mgcl` and `magical` wrappers and
62
+ defaults to the npm `latest` tag. If the requested version is already present,
63
+ the installer skips the reinstall.
64
+
65
+ Once installed, users can update from the same channel with:
66
+
67
+ ```bash
68
+ mgcl --update
69
+ ```
70
+
71
+ To remove the managed install:
72
+
73
+ ```bash
74
+ curl -fsSL https://your-host.example/install-mgcl.sh | bash -s -- --uninstall
75
+ ```
package/dist/index.js CHANGED
@@ -300,9 +300,6 @@ function getErrorMessage(error) {
300
300
  return "Unknown CLI error";
301
301
  }
302
302
 
303
- // src/program.ts
304
- import { spawn } from "child_process";
305
-
306
303
  // ../mcp-registry/src/operation-specs.ts
307
304
  import { z } from "zod";
308
305
 
@@ -1305,6 +1302,27 @@ var graphQlResponseSchema = z2.object({
1305
1302
  })
1306
1303
  ).optional()
1307
1304
  });
1305
+ var apiErrorResponseSchema = z2.object({
1306
+ errors: z2.array(
1307
+ z2.object({
1308
+ message: z2.string().min(1)
1309
+ })
1310
+ ).optional(),
1311
+ message: z2.string().min(1).optional()
1312
+ });
1313
+ function getApiErrorDetail(responseBody) {
1314
+ const parsedResponse = apiErrorResponseSchema.safeParse(responseBody);
1315
+ if (!parsedResponse.success) {
1316
+ return null;
1317
+ }
1318
+ if (parsedResponse.data.message) {
1319
+ return parsedResponse.data.message;
1320
+ }
1321
+ if (!parsedResponse.data.errors || parsedResponse.data.errors.length === 0) {
1322
+ return null;
1323
+ }
1324
+ return parsedResponse.data.errors.map((error) => error.message).join("\n");
1325
+ }
1308
1326
  function createMagicalApiClient({
1309
1327
  apiBaseUrl,
1310
1328
  fetchFn = fetch
@@ -1326,6 +1344,14 @@ function createMagicalApiClient({
1326
1344
  );
1327
1345
  });
1328
1346
  const responseBody = await response.json().catch((error) => {
1347
+ if (!response.ok) {
1348
+ throw new CliError(
1349
+ `Magical API request to ${url} failed with status ${response.status}.`,
1350
+ {
1351
+ cause: error
1352
+ }
1353
+ );
1354
+ }
1329
1355
  throw new CliError(
1330
1356
  `Magical API returned a non-JSON response for ${url}.`,
1331
1357
  {
@@ -1334,8 +1360,9 @@ function createMagicalApiClient({
1334
1360
  );
1335
1361
  });
1336
1362
  if (!response.ok) {
1363
+ const errorDetail = getApiErrorDetail(responseBody);
1337
1364
  throw new CliError(
1338
- `Magical API request to ${url} failed with status ${response.status}.`
1365
+ `Magical API request to ${url} failed with status ${response.status}${errorDetail ? `: ${errorDetail}` : "."}`
1339
1366
  );
1340
1367
  }
1341
1368
  return responseBody;
@@ -1407,6 +1434,46 @@ function createMagicalApiClient({
1407
1434
  };
1408
1435
  }
1409
1436
 
1437
+ // src/command-presentation.ts
1438
+ var rootOperationalGroupDescriptions = /* @__PURE__ */ new Map([
1439
+ ["agents", "Query agents."],
1440
+ ["agent-runs", "Query agent runs."],
1441
+ ["automations", "Manage automations."],
1442
+ ["automation-runs", "Inspect and control automation runs."],
1443
+ ["catalog", "Inspect available commands, models, and tools."],
1444
+ ["graphql", "Inspect GraphQL metadata."]
1445
+ ]);
1446
+ function configureCommandPresentation(command) {
1447
+ const originalCreateCommand = command.createCommand.bind(command);
1448
+ command.createCommand = (name) => configureCommandPresentation(originalCreateCommand(name));
1449
+ command.createHelp = () => new MagicalHelp();
1450
+ return command;
1451
+ }
1452
+ function createOperationHelpExamples(operationSpec) {
1453
+ const baseCommand = `mgcl ${operationSpec.cli.path.join(" ")}`;
1454
+ const requiredOptions = operationSpec.cli.options.filter((optionSpec) => optionSpec.required).map((optionSpec) => {
1455
+ if (optionSpec.valueType === "boolean") {
1456
+ return `--${optionSpec.flagName}`;
1457
+ }
1458
+ if (optionSpec.valueType === "number") {
1459
+ return `--${optionSpec.flagName} 10`;
1460
+ }
1461
+ if (optionSpec.valueType === "json") {
1462
+ return `--${optionSpec.flagName} '{...}'`;
1463
+ }
1464
+ if (optionSpec.valueType === "string-array") {
1465
+ return `--${optionSpec.flagName} value-a,value-b`;
1466
+ }
1467
+ return `--${optionSpec.flagName} <${optionSpec.flagName}>`;
1468
+ });
1469
+ const baseInvocation = [baseCommand, ...requiredOptions].join(" ");
1470
+ return [
1471
+ baseInvocation,
1472
+ `${baseInvocation} --org <org>`,
1473
+ `${baseInvocation} --json`
1474
+ ];
1475
+ }
1476
+
1410
1477
  // src/config.ts
1411
1478
  import os from "os";
1412
1479
  import path from "path";
@@ -1414,6 +1481,8 @@ var DEFAULT_MAGICAL_API_URL = "https://api-agt.getmagical.io";
1414
1481
  var DEFAULT_WORKOS_API_URL = "https://api.workos.com";
1415
1482
  var DEFAULT_WORKOS_CLIENT_ID = "client_01JJZ6XJ1RF248P20WF63M4VAM";
1416
1483
  var DEFAULT_KEYCHAIN_SERVICE_NAME = "@getmagical/mcp-cli";
1484
+ var DEFAULT_CLI_DIST_TAG = "latest";
1485
+ var DEFAULT_CLI_NPM_REGISTRY_URL = "https://registry.npmjs.org/";
1417
1486
  var CLI_CONFIG_DIRECTORY_NAME = "magical-mcp-cli";
1418
1487
  var CLI_STATE_FILE_NAME = "state.json";
1419
1488
  function resolvePlatformConfigDirectory() {
@@ -1436,7 +1505,9 @@ function getRuntimeConfig() {
1436
1505
  CLI_CONFIG_DIRECTORY_NAME
1437
1506
  );
1438
1507
  return {
1508
+ cliDistTag: process.env["MAGICAL_CLI_DIST_TAG"] ?? DEFAULT_CLI_DIST_TAG,
1439
1509
  magicalApiUrl: process.env["MAGICAL_API_URL"] ?? DEFAULT_MAGICAL_API_URL,
1510
+ npmRegistryUrl: process.env["MAGICAL_CLI_NPM_REGISTRY_URL"] ?? DEFAULT_CLI_NPM_REGISTRY_URL,
1440
1511
  stateFilePath: path.join(configDirectory, CLI_STATE_FILE_NAME),
1441
1512
  workosApiUrl: DEFAULT_WORKOS_API_URL,
1442
1513
  workosClientId: process.env["WORKOS_CLIENT_ID"] ?? DEFAULT_WORKOS_CLIENT_ID,
@@ -1474,9 +1545,198 @@ function createKeytarRefreshTokenStore(serviceName) {
1474
1545
  };
1475
1546
  }
1476
1547
 
1548
+ // src/open-url.ts
1549
+ import { spawn } from "child_process";
1550
+ async function openExternalUrl(url) {
1551
+ const command = resolveOpenCommand(url);
1552
+ const childProcess = spawn(command.executable, command.args, {
1553
+ detached: true,
1554
+ stdio: "ignore"
1555
+ });
1556
+ await new Promise((resolve, reject) => {
1557
+ childProcess.on("error", reject);
1558
+ childProcess.on("spawn", () => {
1559
+ childProcess.unref();
1560
+ resolve();
1561
+ });
1562
+ });
1563
+ }
1564
+ function resolveOpenCommand(url) {
1565
+ if (process.platform === "darwin") {
1566
+ return { executable: "open", args: [url] };
1567
+ }
1568
+ if (process.platform === "win32") {
1569
+ return { executable: "cmd", args: ["/c", "start", "", url] };
1570
+ }
1571
+ return { executable: "xdg-open", args: [url] };
1572
+ }
1573
+
1574
+ // src/self-update.ts
1575
+ import { spawn as spawn2 } from "child_process";
1576
+ import fs from "fs";
1577
+ import path2 from "path";
1578
+ import { fileURLToPath } from "url";
1579
+ var CLI_PACKAGE_NAME = "@getmagical/cli";
1580
+ var DEFAULT_CLI_DIST_TAG2 = "latest";
1581
+ var DEFAULT_NPM_REGISTRY_URL = "https://registry.npmjs.org/";
1582
+ var MANAGED_NODE_SUBPATH = "runtime/node";
1583
+ function resolveInstalledPackageRoot({
1584
+ entryFilePath,
1585
+ packageName
1586
+ }) {
1587
+ const packagePathSegments = packageName.split("/");
1588
+ let currentPath = path2.dirname(entryFilePath);
1589
+ for (; ; ) {
1590
+ const currentPathSegments = currentPath.split(path2.sep).filter(Boolean);
1591
+ const currentPackageSegments = currentPathSegments.slice(
1592
+ -packagePathSegments.length
1593
+ );
1594
+ if (currentPackageSegments.length === packagePathSegments.length && currentPackageSegments.every(
1595
+ (segment, index) => segment === packagePathSegments[index]
1596
+ )) {
1597
+ return currentPath;
1598
+ }
1599
+ const parentPath = path2.dirname(currentPath);
1600
+ if (parentPath === currentPath) {
1601
+ return null;
1602
+ }
1603
+ currentPath = parentPath;
1604
+ }
1605
+ }
1606
+ function resolveInstallPrefixFromPackageRoot(packageRootPath) {
1607
+ let currentPath = packageRootPath;
1608
+ for (; ; ) {
1609
+ if (path2.basename(currentPath) === "node_modules") {
1610
+ const nodeModulesParentPath = path2.dirname(currentPath);
1611
+ if (path2.basename(nodeModulesParentPath) === "lib") {
1612
+ return path2.dirname(nodeModulesParentPath);
1613
+ }
1614
+ return nodeModulesParentPath;
1615
+ }
1616
+ const parentPath = path2.dirname(currentPath);
1617
+ if (parentPath === currentPath) {
1618
+ return null;
1619
+ }
1620
+ currentPath = parentPath;
1621
+ }
1622
+ }
1623
+ function resolveNpmCommandFromPath() {
1624
+ return {
1625
+ argsPrefix: [],
1626
+ executable: process.platform === "win32" ? "npm.cmd" : "npm"
1627
+ };
1628
+ }
1629
+ function resolveManagedNpmCommand(installPrefix) {
1630
+ if (process.platform === "win32") {
1631
+ return null;
1632
+ }
1633
+ const managedNodeExecutable = path2.join(
1634
+ installPrefix,
1635
+ MANAGED_NODE_SUBPATH,
1636
+ "bin",
1637
+ "node"
1638
+ );
1639
+ const managedNpmCli = path2.join(
1640
+ installPrefix,
1641
+ MANAGED_NODE_SUBPATH,
1642
+ "lib",
1643
+ "node_modules",
1644
+ "npm",
1645
+ "bin",
1646
+ "npm-cli.js"
1647
+ );
1648
+ if (!fs.existsSync(managedNodeExecutable) || !fs.existsSync(managedNpmCli)) {
1649
+ return null;
1650
+ }
1651
+ return {
1652
+ argsPrefix: [managedNpmCli],
1653
+ executable: managedNodeExecutable
1654
+ };
1655
+ }
1656
+ async function installPublishedCli({
1657
+ distTag,
1658
+ installPrefix,
1659
+ packageName,
1660
+ registryUrl
1661
+ }) {
1662
+ const npmCommand = resolveManagedNpmCommand(installPrefix) ?? resolveNpmCommandFromPath();
1663
+ const packageSpecifier = `${packageName}@${distTag}`;
1664
+ const npmArguments = [
1665
+ ...npmCommand.argsPrefix,
1666
+ "install",
1667
+ "--global",
1668
+ packageSpecifier,
1669
+ "--prefix",
1670
+ installPrefix,
1671
+ "--registry",
1672
+ registryUrl
1673
+ ];
1674
+ await new Promise((resolve, reject) => {
1675
+ const childProcess = spawn2(npmCommand.executable, npmArguments, {
1676
+ stdio: "inherit"
1677
+ });
1678
+ childProcess.on("error", (error) => {
1679
+ if (error.code === "ENOENT") {
1680
+ reject(
1681
+ new CliError(
1682
+ "npm is required to update mgcl. Install npm and rerun the command.",
1683
+ { cause: error }
1684
+ )
1685
+ );
1686
+ return;
1687
+ }
1688
+ reject(error);
1689
+ });
1690
+ childProcess.on("exit", (exitCode) => {
1691
+ if (exitCode === 0) {
1692
+ resolve();
1693
+ return;
1694
+ }
1695
+ reject(
1696
+ new CliError(
1697
+ `npm install exited with status ${String(exitCode ?? "unknown")}.`
1698
+ )
1699
+ );
1700
+ });
1701
+ });
1702
+ return {
1703
+ installPrefix,
1704
+ packageSpecifier,
1705
+ registryUrl
1706
+ };
1707
+ }
1708
+ async function selfUpdateInstalledCli({
1709
+ distTag = DEFAULT_CLI_DIST_TAG2,
1710
+ entryFilePath = fileURLToPath(import.meta.url),
1711
+ packageName = CLI_PACKAGE_NAME,
1712
+ registryUrl = DEFAULT_NPM_REGISTRY_URL
1713
+ } = {}) {
1714
+ const packageRootPath = resolveInstalledPackageRoot({
1715
+ entryFilePath,
1716
+ packageName
1717
+ });
1718
+ if (!packageRootPath) {
1719
+ throw new CliError(
1720
+ 'Self-update is only available for installed CLIs. Use the install script or "npm install -g @getmagical/cli".'
1721
+ );
1722
+ }
1723
+ const installPrefix = resolveInstallPrefixFromPackageRoot(packageRootPath);
1724
+ if (!installPrefix) {
1725
+ throw new CliError(
1726
+ "Could not determine the installed npm prefix for this CLI. Reinstall with the install script and try again."
1727
+ );
1728
+ }
1729
+ return installPublishedCli({
1730
+ distTag,
1731
+ installPrefix,
1732
+ packageName,
1733
+ registryUrl
1734
+ });
1735
+ }
1736
+
1477
1737
  // src/state.ts
1478
1738
  import { mkdir, readFile, rm, writeFile } from "fs/promises";
1479
- import path2 from "path";
1739
+ import path3 from "path";
1480
1740
  import { z as z3 } from "zod";
1481
1741
  var cliAccountSchema = z3.object({
1482
1742
  clientId: z3.string().min(1),
@@ -1518,7 +1778,7 @@ function createFileStateStore(stateFilePath) {
1518
1778
  }
1519
1779
  },
1520
1780
  async save(state) {
1521
- await mkdir(path2.dirname(stateFilePath), { recursive: true });
1781
+ await mkdir(path3.dirname(stateFilePath), { recursive: true });
1522
1782
  await writeFile(stateFilePath, `${JSON.stringify(state, null, 2)}
1523
1783
  `);
1524
1784
  }
@@ -1697,44 +1957,6 @@ function createWorkosAuthClient({
1697
1957
  }
1698
1958
 
1699
1959
  // src/program.ts
1700
- var rootOperationalGroupDescriptions = /* @__PURE__ */ new Map([
1701
- ["agents", "Query agents."],
1702
- ["agent-runs", "Query agent runs."],
1703
- ["automations", "Manage automations."],
1704
- ["automation-runs", "Inspect and control automation runs."],
1705
- ["catalog", "Inspect available commands, models, and tools."],
1706
- ["graphql", "Inspect GraphQL metadata."]
1707
- ]);
1708
- function configureCommandPresentation(command) {
1709
- const originalCreateCommand = command.createCommand.bind(command);
1710
- command.createCommand = (name) => configureCommandPresentation(originalCreateCommand(name));
1711
- command.createHelp = () => new MagicalHelp();
1712
- return command;
1713
- }
1714
- function createOperationHelpExamples(operationSpec) {
1715
- const baseCommand = `mgcl ${operationSpec.cli.path.join(" ")}`;
1716
- const requiredOptions = operationSpec.cli.options.filter((optionSpec) => optionSpec.required).map((optionSpec) => {
1717
- if (optionSpec.valueType === "boolean") {
1718
- return `--${optionSpec.flagName}`;
1719
- }
1720
- if (optionSpec.valueType === "number") {
1721
- return `--${optionSpec.flagName} 10`;
1722
- }
1723
- if (optionSpec.valueType === "json") {
1724
- return `--${optionSpec.flagName} '{...}'`;
1725
- }
1726
- if (optionSpec.valueType === "string-array") {
1727
- return `--${optionSpec.flagName} value-a,value-b`;
1728
- }
1729
- return `--${optionSpec.flagName} <${optionSpec.flagName}>`;
1730
- });
1731
- const baseInvocation = [baseCommand, ...requiredOptions].join(" ");
1732
- return [
1733
- baseInvocation,
1734
- `${baseInvocation} --org <org>`,
1735
- `${baseInvocation} --json`
1736
- ];
1737
- }
1738
1960
  function buildCommandOptionProperty(flagName) {
1739
1961
  const [firstSegment, ...remainingSegments] = flagName.split("-");
1740
1962
  return [
@@ -1982,6 +2204,25 @@ async function handleOrgUse(dependencies, organizationSelector, options) {
1982
2204
  }
1983
2205
  dependencies.io.info(formatDefaultOrganizationSelection(organization));
1984
2206
  }
2207
+ async function handleSelfUpdate(dependencies, options) {
2208
+ const { selfUpdateCli } = dependencies;
2209
+ if (!selfUpdateCli) {
2210
+ throw new CliError("Self-update is not configured for this CLI instance.");
2211
+ }
2212
+ const updateResult = await selfUpdateCli();
2213
+ if (options.json) {
2214
+ writeJsonOutput(dependencies.io, {
2215
+ installPrefix: updateResult.installPrefix,
2216
+ packageSpecifier: updateResult.packageSpecifier,
2217
+ registryUrl: updateResult.registryUrl,
2218
+ updated: true
2219
+ });
2220
+ return;
2221
+ }
2222
+ dependencies.io.info(
2223
+ `Updated mgcl via npm (${updateResult.packageSpecifier}) in ${updateResult.installPrefix}.`
2224
+ );
2225
+ }
1985
2226
  async function handleOperationCommand(dependencies, operationSpec, commandOptions) {
1986
2227
  const state = requireLoggedInState(await dependencies.stateStore.load());
1987
2228
  const organization = resolveSelectedOrganization({
@@ -2104,31 +2345,12 @@ function createConsoleIo() {
2104
2345
  }
2105
2346
  };
2106
2347
  }
2107
- async function openExternalUrl(url) {
2108
- const command = resolveOpenCommand(url);
2109
- const childProcess = spawn(command.executable, command.args, {
2110
- detached: true,
2111
- stdio: "ignore"
2112
- });
2113
- await new Promise((resolve, reject) => {
2114
- childProcess.on("error", reject);
2115
- childProcess.on("spawn", () => {
2116
- childProcess.unref();
2117
- resolve();
2118
- });
2119
- });
2120
- }
2121
- function resolveOpenCommand(url) {
2122
- if (process.platform === "darwin") {
2123
- return { executable: "open", args: [url] };
2124
- }
2125
- if (process.platform === "win32") {
2126
- return { executable: "cmd", args: ["/c", "start", "", url] };
2127
- }
2128
- return { executable: "xdg-open", args: [url] };
2129
- }
2130
2348
  function createDefaultDependencies() {
2131
2349
  const runtimeConfig = getRuntimeConfig();
2350
+ const selfUpdateOptions = {
2351
+ ...runtimeConfig.cliDistTag ? { distTag: runtimeConfig.cliDistTag } : {},
2352
+ ...runtimeConfig.npmRegistryUrl ? { registryUrl: runtimeConfig.npmRegistryUrl } : {}
2353
+ };
2132
2354
  return {
2133
2355
  apiClient: createMagicalApiClient({
2134
2356
  apiBaseUrl: runtimeConfig.magicalApiUrl
@@ -2142,24 +2364,39 @@ function createDefaultDependencies() {
2142
2364
  runtimeConfig.keychainServiceName
2143
2365
  ),
2144
2366
  runtimeConfig,
2367
+ selfUpdateCli: async () => selfUpdateInstalledCli(selfUpdateOptions),
2145
2368
  stateStore: createFileStateStore(runtimeConfig.stateFilePath)
2146
2369
  };
2147
2370
  }
2148
2371
  function buildProgram(dependencies) {
2149
2372
  const program2 = configureCommandPresentation(
2150
2373
  new Command().name("mgcl").description("Run Magical shared MCP operations from the command line.")
2151
- ).addOption(new Option("--json", "Render JSON output.")).showHelpAfterError().showSuggestionAfterError().addHelpText(
2374
+ ).addOption(new Option("--json", "Render JSON output.")).addOption(
2375
+ new Option(
2376
+ "--update",
2377
+ "Update mgcl to the latest published npm release."
2378
+ )
2379
+ ).showHelpAfterError().showSuggestionAfterError().addHelpText(
2152
2380
  "after",
2153
2381
  `
2154
2382
  ${formatExamples("Quick start", [
2155
2383
  "mgcl auth login",
2156
2384
  "mgcl org list",
2157
2385
  "mgcl automations list --limit 10",
2158
- "mgcl automation-runs get --id <run-id>"
2386
+ "mgcl automation-runs get --id <run-id>",
2387
+ "mgcl update"
2159
2388
  ])}
2160
2389
 
2161
2390
  ${formatOutputModesNote()}`
2162
2391
  );
2392
+ program2.action(async function() {
2393
+ const options = this.optsWithGlobals();
2394
+ if (options.update) {
2395
+ await handleSelfUpdate(dependencies, options);
2396
+ return;
2397
+ }
2398
+ this.outputHelp();
2399
+ });
2163
2400
  const authCommand = configureCommandPresentation(
2164
2401
  new Command("auth").description("Manage CLI authentication.")
2165
2402
  ).helpGroup("Workspace:").addHelpText(
@@ -2198,6 +2435,19 @@ ${formatExamples("Examples", [
2198
2435
  );
2199
2436
  });
2200
2437
  program2.addCommand(orgCommand);
2438
+ const updateCommand = configureCommandPresentation(
2439
+ new Command("update").description(
2440
+ "Update mgcl to the latest published npm release."
2441
+ )
2442
+ ).helpGroup("Workspace:").addHelpText(
2443
+ "after",
2444
+ `
2445
+ ${formatExamples("Examples", ["mgcl update", "mgcl --update"])}`
2446
+ );
2447
+ updateCommand.action(async function() {
2448
+ await handleSelfUpdate(dependencies, this.optsWithGlobals());
2449
+ });
2450
+ program2.addCommand(updateCommand);
2201
2451
  const operationalCommandGroups = /* @__PURE__ */ new Map();
2202
2452
  for (const operationSpec of operationSpecs) {
2203
2453
  addRegistryOperationCommand({
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli-formatting.ts","../src/errors.ts","../src/program.ts","../../mcp-registry/src/operation-specs.ts","../../mcp-registry/src/operation-spec.ts","../src/api.ts","../src/config.ts","../src/keychain.ts","../src/state.ts","../src/workos-auth.ts","../src/index.ts"],"sourcesContent":["import { inspect, stripVTControlCharacters, styleText } from 'node:util';\nimport { Help } from 'commander';\nimport type { CliAccount, CliOrganization } from './state';\n\nconst EMPTY_VALUE = '-';\nconst TABLE_GAP = ' ';\ntype TerminalStyle = Parameters<typeof styleText>[0];\n\nfunction applyStyle(\n value: string,\n style: TerminalStyle,\n enabled = true,\n): string {\n if (!enabled) {\n return value;\n }\n\n return styleText(style, value);\n}\n\nfunction indent(text: string, level = 2): string {\n const padding = ' '.repeat(level);\n return text\n .split('\\n')\n .map((line) => `${padding}${line}`)\n .join('\\n');\n}\n\nfunction stripAnsi(value: string): string {\n return stripVTControlCharacters(value);\n}\n\nfunction displayWidth(value: string): number {\n return stripAnsi(value).length;\n}\n\nfunction padCell(value: string, width: number): string {\n return value.padEnd(width + value.length - displayWidth(value));\n}\n\nfunction formatHeading(title: string): string {\n return applyStyle(title, ['bold', 'cyan']);\n}\n\nfunction formatLabel(label: string): string {\n return applyStyle(label, 'dim');\n}\n\nfunction formatCommandSnippet(command: string): string {\n return applyStyle(command, ['bold', 'cyan']);\n}\n\nfunction formatFlag(flag: string): string {\n return applyStyle(flag, ['bold', 'yellow']);\n}\n\nfunction formatErrorLabel(label: string): string {\n return applyStyle(label, ['bold', 'red'], process.stderr.isTTY);\n}\n\nfunction splitWords(value: string): string[] {\n const tokens: string[] = [];\n\n for (const word of value\n .replaceAll('_', ' ')\n .replaceAll('-', ' ')\n .split(' ')) {\n if (word.length === 0) {\n continue;\n }\n\n let currentToken = word[0] ?? '';\n for (const character of word.slice(1)) {\n const previousCharacter = currentToken.at(-1) ?? '';\n const shouldBreak =\n character >= 'A' &&\n character <= 'Z' &&\n ((previousCharacter >= 'a' && previousCharacter <= 'z') ||\n (previousCharacter >= '0' && previousCharacter <= '9'));\n\n if (shouldBreak) {\n tokens.push(currentToken);\n currentToken = character;\n continue;\n }\n\n currentToken += character;\n }\n\n tokens.push(currentToken);\n }\n\n return tokens;\n}\n\nfunction startCase(value: string): string {\n return splitWords(value)\n .map((segment) => {\n const lowerSegment = segment.toLowerCase();\n if (lowerSegment === 'id') {\n return 'ID';\n }\n\n if (lowerSegment === 'url') {\n return 'URL';\n }\n\n if (lowerSegment === 'api') {\n return 'API';\n }\n\n return segment.charAt(0).toUpperCase() + segment.slice(1);\n })\n .join(' ');\n}\n\nfunction formatScalar(value: unknown): string {\n if (value === null || value === undefined) {\n return EMPTY_VALUE;\n }\n\n if (typeof value === 'string') {\n return value.length === 0 ? EMPTY_VALUE : value;\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n\n return inspect(value, {\n breakLength: Infinity,\n colors: false,\n compact: true,\n depth: 2,\n });\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isPrimitiveLike(value: unknown): boolean {\n return (\n value === null ||\n value === undefined ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n );\n}\n\nfunction formatTable(options: {\n columns: readonly string[];\n rows: readonly (readonly string[])[];\n}): string {\n const widths = options.columns.map((column, columnIndex) =>\n Math.max(\n displayWidth(column),\n ...options.rows.map((row) => displayWidth(row[columnIndex] ?? '')),\n ),\n );\n\n const renderRow = (cells: readonly string[]): string =>\n cells\n .map((cell, columnIndex) => padCell(cell, widths[columnIndex] ?? 0))\n .join(TABLE_GAP)\n .trimEnd();\n\n const divider = widths.map((width) => '-'.repeat(width)).join(TABLE_GAP);\n\n return [\n renderRow(options.columns.map((column) => applyStyle(column, 'bold'))),\n divider,\n ...options.rows.map(renderRow),\n ].join('\\n');\n}\n\nfunction canRenderRecordArrayAsTable(\n items: readonly unknown[],\n): items is readonly Record<string, unknown>[] {\n if (items.length === 0 || !items.every(isRecord)) {\n return false;\n }\n\n const keys = [...new Set(items.flatMap((item) => Object.keys(item)))];\n\n if (keys.length === 0 || keys.length > 8) {\n return false;\n }\n\n return items.every((item) => keys.every((key) => isPrimitiveLike(item[key])));\n}\n\nfunction formatRecord(record: Record<string, unknown>): string {\n const entries = Object.entries(record);\n if (entries.length === 0) {\n return EMPTY_VALUE;\n }\n\n const labelWidth = Math.max(\n ...entries.map(([key]) => displayWidth(startCase(key))),\n );\n\n return entries\n .map(([key, value]) => {\n const label = `${startCase(key)}:`;\n if (isPrimitiveLike(value)) {\n return `${padCell(formatLabel(label), labelWidth + 1)} ${formatScalar(value)}`;\n }\n\n return `${formatLabel(label)}\\n${indent(formatHumanReadableOutput(value))}`;\n })\n .join('\\n');\n}\n\nfunction formatArray(items: readonly unknown[]): string {\n if (items.length === 0) {\n return 'No results.';\n }\n\n if (items.every(isPrimitiveLike)) {\n return items.map((item) => `- ${formatScalar(item)}`).join('\\n');\n }\n\n if (canRenderRecordArrayAsTable(items)) {\n const keys = [...new Set(items.flatMap((item) => Object.keys(item)))];\n\n return formatTable({\n columns: keys.map((key) => startCase(key)),\n rows: items.map((item) => keys.map((key) => formatScalar(item[key]))),\n });\n }\n\n return items\n .map((item, index) => {\n const title = formatHeading(`Item ${index + 1}`);\n return `${title}\\n${indent(formatHumanReadableOutput(item))}`;\n })\n .join('\\n\\n');\n}\n\nfunction renderKeyValueBlock(entries: readonly [string, string][]): string {\n const labelWidth = Math.max(...entries.map(([label]) => displayWidth(label)));\n return entries\n .map(\n ([label, value]) =>\n `${padCell(formatLabel(`${label}:`), labelWidth + 1)} ${value}`,\n )\n .join('\\n');\n}\n\nfunction renderSection(title: string, bodyLines: readonly string[]): string {\n return [formatHeading(title), '', ...bodyLines].join('\\n');\n}\n\nexport class MagicalHelp extends Help {\n private outputHasColors = process.stdout.isTTY;\n\n public constructor() {\n super();\n this.helpWidth = 96;\n this.showGlobalOptions = true;\n this.sortSubcommands = true;\n }\n\n public override prepareContext(contextOptions: {\n error?: boolean;\n helpWidth?: number;\n outputHasColors?: boolean;\n }): void {\n super.prepareContext(contextOptions);\n this.outputHasColors =\n contextOptions.outputHasColors ?? process.stdout.isTTY;\n }\n\n public override styleTitle(str: string): string {\n return applyStyle(str, ['bold', 'cyan'], this.outputHasColors);\n }\n\n public override styleCommandText(str: string): string {\n return applyStyle(str, ['bold', 'cyan'], this.outputHasColors);\n }\n\n public override styleSubcommandText(str: string): string {\n return applyStyle(str, ['bold', 'cyan'], this.outputHasColors);\n }\n\n public override styleOptionText(str: string): string {\n return applyStyle(str, ['bold', 'yellow'], this.outputHasColors);\n }\n\n public override styleArgumentText(str: string): string {\n return applyStyle(str, ['bold', 'green'], this.outputHasColors);\n }\n\n public override styleDescriptionText(str: string): string {\n return applyStyle(str, 'dim', this.outputHasColors);\n }\n}\n\nexport function formatAuthLoginPrompt(options: {\n userCode: string;\n verificationUrl: string;\n}): string {\n return renderSection('Sign In With Your Browser', [\n renderKeyValueBlock([\n ['Open', options.verificationUrl],\n ['Code', options.userCode],\n ]),\n ]);\n}\n\nexport function formatAuthLoginSuccess(options: {\n account: CliAccount;\n defaultOrganization: CliOrganization | null;\n organizationCount: number;\n}): string {\n return renderSection('Signed In', [\n renderKeyValueBlock([\n ['Account', options.account.email ?? options.account.userId],\n ['Organizations', String(options.organizationCount)],\n [\n 'Default org',\n options.defaultOrganization\n ? `${options.defaultOrganization.name} (${options.defaultOrganization.id})`\n : 'None selected',\n ],\n ]),\n ]);\n}\n\nexport function formatBrowserOpenFallback(): string {\n return 'Browser auto-open failed. Paste the URL above into any browser.';\n}\n\nexport function formatLogoutSuccess(): string {\n return renderSection('Signed Out', ['Saved CLI auth state was cleared.']);\n}\n\nexport function formatOrganizationList(options: {\n defaultOrgId: string | null;\n lastUsedOrgId: string | null;\n organizations: readonly CliOrganization[];\n}): string {\n if (options.organizations.length === 0) {\n return renderSection('Organizations', ['No organizations are available.']);\n }\n\n const rows = options.organizations.map((organization) => {\n const status = [\n options.defaultOrgId === organization.id ? 'default' : null,\n options.lastUsedOrgId === organization.id ? 'last used' : null,\n ]\n .filter((value) => value !== null)\n .join(', ');\n\n return [\n status || EMPTY_VALUE,\n organization.name,\n organization.id,\n organization.primaryDomain ?? EMPTY_VALUE,\n ];\n });\n\n return renderSection('Organizations', [\n formatTable({\n columns: ['Status', 'Name', 'ID', 'Primary domain'],\n rows,\n }),\n ]);\n}\n\nexport function formatDefaultOrganizationSelection(\n organization: CliOrganization,\n): string {\n return renderSection('Default Organization Updated', [\n `${organization.name} (${organization.id})`,\n ]);\n}\n\nexport function formatHumanReadableOutput(value: unknown): string {\n if (isPrimitiveLike(value)) {\n return formatScalar(value);\n }\n\n if (Array.isArray(value)) {\n return formatArray(value);\n }\n\n if (isRecord(value)) {\n return formatRecord(value);\n }\n\n return inspect(value, {\n colors: false,\n depth: null,\n });\n}\n\nexport function formatCliError(message: string): string {\n return `${formatErrorLabel('Error:')} ${message}`;\n}\n\nexport function formatExamples(\n title: string,\n examples: readonly string[],\n): string {\n return [\n formatHeading(title),\n '',\n ...examples.map((example) => ` ${formatCommandSnippet(example)}`),\n ].join('\\n');\n}\n\nexport function formatOutputModesNote(): string {\n return renderSection('Output', [\n `Human-readable by default.`,\n `Add ${formatFlag('--json')} before or after a command for stable machine-readable output.`,\n ]);\n}\n","export class CliError extends Error {\n public constructor(\n message: string,\n options?: {\n cause?: unknown;\n },\n ) {\n super(message, options);\n this.name = 'CliError';\n }\n}\n\nexport function getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n\n return 'Unknown CLI error';\n}\n","import { spawn } from 'node:child_process';\nimport { operationSpecs } from '@magical/mcp-registry';\nimport type { CliOptionSpec, OperationSpec } from '@magical/mcp-registry';\nimport { Command, InvalidArgumentError, Option } from 'commander';\nimport { createMagicalApiClient } from './api';\nimport type { ApiClient } from './api';\nimport {\n formatAuthLoginPrompt,\n formatAuthLoginSuccess,\n formatBrowserOpenFallback,\n formatDefaultOrganizationSelection,\n formatExamples,\n formatHumanReadableOutput,\n formatLogoutSuccess,\n formatOrganizationList,\n formatOutputModesNote,\n MagicalHelp,\n} from './cli-formatting';\nimport { getRuntimeConfig, requireWorkosClientId } from './config';\nimport type { RuntimeConfig } from './config';\nimport { CliError } from './errors';\nimport { createKeytarRefreshTokenStore } from './keychain';\nimport { createFileStateStore } from './state';\nimport type {\n CliOrganization,\n CliState,\n RefreshTokenStore,\n StateStore,\n} from './state';\nimport { createWorkosAuthClient } from './workos-auth';\nimport type { AuthClient } from './workos-auth';\n\nexport interface CliIo {\n error: (message: string) => void;\n info: (message: string) => void;\n}\n\nexport interface CliDependencies {\n apiClient: ApiClient;\n authClient: AuthClient;\n io: CliIo;\n openExternalUrl: (url: string) => Promise<void>;\n refreshTokenStore: RefreshTokenStore;\n runtimeConfig: RuntimeConfig;\n stateStore: StateStore;\n}\n\ntype JsonCommandOptions = Record<string, unknown> & {\n json?: boolean;\n};\n\ninterface OperationalCommandOptions {\n json?: boolean;\n org?: string;\n}\n\nconst rootOperationalGroupDescriptions = new Map<string, string>([\n ['agents', 'Query agents.'],\n ['agent-runs', 'Query agent runs.'],\n ['automations', 'Manage automations.'],\n ['automation-runs', 'Inspect and control automation runs.'],\n ['catalog', 'Inspect available commands, models, and tools.'],\n ['graphql', 'Inspect GraphQL metadata.'],\n]);\n\nfunction configureCommandPresentation(command: Command): Command {\n const originalCreateCommand = command.createCommand.bind(command);\n command.createCommand = (name: string) =>\n configureCommandPresentation(originalCreateCommand(name));\n command.createHelp = () => new MagicalHelp();\n\n return command;\n}\n\nfunction createOperationHelpExamples(operationSpec: OperationSpec): string[] {\n const baseCommand = `mgcl ${operationSpec.cli.path.join(' ')}`;\n const requiredOptions = operationSpec.cli.options\n .filter((optionSpec) => optionSpec.required)\n .map((optionSpec) => {\n if (optionSpec.valueType === 'boolean') {\n return `--${optionSpec.flagName}`;\n }\n\n if (optionSpec.valueType === 'number') {\n return `--${optionSpec.flagName} 10`;\n }\n\n if (optionSpec.valueType === 'json') {\n return `--${optionSpec.flagName} '{...}'`;\n }\n\n if (optionSpec.valueType === 'string-array') {\n return `--${optionSpec.flagName} value-a,value-b`;\n }\n\n return `--${optionSpec.flagName} <${optionSpec.flagName}>`;\n });\n const baseInvocation = [baseCommand, ...requiredOptions].join(' ');\n\n return [\n baseInvocation,\n `${baseInvocation} --org <org>`,\n `${baseInvocation} --json`,\n ];\n}\n\nfunction buildCommandOptionProperty(flagName: string): string {\n const [firstSegment, ...remainingSegments] = flagName.split('-');\n return [\n firstSegment ?? '',\n ...remainingSegments.map(\n (segment) => `${segment[0]?.toUpperCase() ?? ''}${segment.slice(1)}`,\n ),\n ].join('');\n}\n\nfunction parseCommandOptionValue(\n rawValue: string,\n optionSpec: CliOptionSpec,\n): unknown {\n switch (optionSpec.valueType) {\n case 'number': {\n const parsedNumber = Number(rawValue);\n if (Number.isNaN(parsedNumber)) {\n throw new InvalidArgumentError(\n `Expected a number for --${optionSpec.flagName}.`,\n );\n }\n\n return parsedNumber;\n }\n\n case 'string-array': {\n return rawValue\n .split(',')\n .map((value) => value.trim())\n .filter((value) => value.length > 0);\n }\n\n case 'json': {\n try {\n return JSON.parse(rawValue) as unknown;\n } catch {\n throw new InvalidArgumentError(\n `Expected valid JSON for --${optionSpec.flagName}.`,\n );\n }\n }\n\n case 'boolean': {\n return rawValue;\n }\n\n case 'string': {\n return rawValue;\n }\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction resolveOrganizationBySelector({\n organizations,\n selector,\n}: {\n organizations: CliOrganization[];\n selector: string;\n}): CliOrganization {\n const matchedOrganization = organizations.find(\n (organization) =>\n organization.id === selector || organization.name === selector,\n );\n\n if (!matchedOrganization) {\n throw new CliError(`Unknown organization \"${selector}\".`);\n }\n\n return matchedOrganization;\n}\n\nfunction resolveSelectedOrganization({\n organizationSelector,\n state,\n}: {\n organizationSelector?: string;\n state: CliState;\n}): CliOrganization {\n if (organizationSelector) {\n return resolveOrganizationBySelector({\n organizations: state.organizations,\n selector: organizationSelector,\n });\n }\n\n if (!state.defaultOrgId) {\n throw new CliError(\n 'No default organization is configured. Use \"mgcl org use <org>\" or pass --org.',\n );\n }\n\n return resolveOrganizationBySelector({\n organizations: state.organizations,\n selector: state.defaultOrgId,\n });\n}\n\nfunction requireLoggedInState(state: CliState | null): CliState {\n if (!state) {\n throw new CliError('You are not logged in. Run \"mgcl auth login\" first.');\n }\n\n return state;\n}\n\nfunction writeJsonOutput(io: CliIo, value: unknown): void {\n io.info(JSON.stringify(value, null, 2));\n}\n\nfunction collectOperationVariables(\n operationSpec: OperationSpec,\n options: Record<string, unknown>,\n): Record<string, unknown> {\n const variables = Object.fromEntries(\n operationSpec.cli.options.flatMap((optionSpec: CliOptionSpec) => {\n const optionValue =\n options[buildCommandOptionProperty(optionSpec.flagName)];\n if (optionValue === undefined) {\n return [];\n }\n\n return [[optionSpec.inputKey, optionValue]];\n }),\n );\n\n const parsedVariables = operationSpec.inputSchema.safeParse(variables);\n if (!parsedVariables.success) {\n throw new CliError(\n parsedVariables.error.issues[0]?.message ?? 'Invalid command input.',\n );\n }\n\n if (!isRecord(parsedVariables.data)) {\n throw new CliError('Invalid command input.');\n }\n\n return parsedVariables.data;\n}\n\nasync function withOrgScopedAccessToken({\n dependencies,\n organizationId,\n state,\n}: {\n dependencies: CliDependencies;\n organizationId: string;\n state: CliState;\n}): Promise<{ accessToken: string }> {\n const refreshToken = await dependencies.refreshTokenStore.load(state.account);\n if (!refreshToken) {\n throw new CliError(\n 'No refresh token was found. Run \"mgcl auth login\" again.',\n );\n }\n\n const tokenResponse = await dependencies.authClient\n .refreshTokens({\n clientId: state.account.clientId,\n organizationId,\n refreshToken,\n })\n .catch((error: unknown) => {\n if (\n error instanceof CliError &&\n error.message === 'Refresh token already exchanged.'\n ) {\n throw new CliError(\n 'Refresh token already exchanged. Run \"mgcl auth login\" again.',\n { cause: error },\n );\n }\n\n throw error;\n });\n\n await dependencies.refreshTokenStore.save(\n state.account,\n tokenResponse.refresh_token,\n );\n\n return {\n accessToken: tokenResponse.access_token,\n };\n}\n\nasync function handleAuthLogin(\n dependencies: CliDependencies,\n options: JsonCommandOptions,\n): Promise<void> {\n const clientId = requireWorkosClientId(dependencies.runtimeConfig);\n const deviceAuthorization =\n await dependencies.authClient.startDeviceAuthorization({ clientId });\n const verificationUrl =\n deviceAuthorization.verification_uri_complete ??\n deviceAuthorization.verification_uri;\n const promptWriter = options.json\n ? dependencies.io.error\n : dependencies.io.info;\n\n promptWriter(\n formatAuthLoginPrompt({\n userCode: deviceAuthorization.user_code,\n verificationUrl,\n }),\n );\n\n await dependencies.openExternalUrl(verificationUrl).catch(() => {\n promptWriter(formatBrowserOpenFallback());\n });\n\n const tokenResponse = await dependencies.authClient.pollForDeviceTokens({\n clientId,\n deviceCode: deviceAuthorization.device_code,\n ...(deviceAuthorization.expires_in\n ? { expiresInSeconds: deviceAuthorization.expires_in }\n : {}),\n ...(deviceAuthorization.interval\n ? { intervalSeconds: deviceAuthorization.interval }\n : {}),\n });\n const accessTokenClaims = dependencies.authClient.decodeAccessTokenClaims(\n tokenResponse.access_token,\n );\n const [user, organizations] = await Promise.all([\n dependencies.apiClient.fetchUser({\n accessToken: tokenResponse.access_token,\n userId: accessTokenClaims.sub,\n }),\n dependencies.apiClient.fetchOrganizations({\n accessToken: tokenResponse.access_token,\n }),\n ]);\n\n const defaultOrgId = accessTokenClaims.org_id ?? organizations[0]?.id ?? null;\n const nextState: CliState = {\n account: {\n clientId,\n email: user.email,\n userId: user.id,\n },\n defaultOrgId,\n lastUsedOrgId: defaultOrgId,\n organizations,\n };\n\n await Promise.all([\n dependencies.refreshTokenStore.save(\n nextState.account,\n tokenResponse.refresh_token,\n ),\n dependencies.stateStore.save(nextState),\n ]);\n\n const defaultOrganization =\n organizations.find((organization) => organization.id === defaultOrgId) ??\n null;\n\n if (options.json) {\n writeJsonOutput(dependencies.io, nextState);\n return;\n }\n\n dependencies.io.info(\n formatAuthLoginSuccess({\n account: nextState.account,\n defaultOrganization,\n organizationCount: organizations.length,\n }),\n );\n}\n\nasync function handleAuthLogout(\n dependencies: CliDependencies,\n options: JsonCommandOptions,\n): Promise<void> {\n const state = await dependencies.stateStore.load();\n if (state) {\n await dependencies.refreshTokenStore.clear(state.account);\n }\n\n await dependencies.stateStore.clear();\n\n if (options.json) {\n writeJsonOutput(dependencies.io, { loggedOut: true });\n return;\n }\n\n dependencies.io.info(formatLogoutSuccess());\n}\n\nasync function handleOrgList(\n dependencies: CliDependencies,\n options: JsonCommandOptions,\n): Promise<void> {\n const state = requireLoggedInState(await dependencies.stateStore.load());\n if (options.json) {\n writeJsonOutput(dependencies.io, state.organizations);\n return;\n }\n\n dependencies.io.info(\n formatOrganizationList({\n defaultOrgId: state.defaultOrgId,\n lastUsedOrgId: state.lastUsedOrgId,\n organizations: state.organizations,\n }),\n );\n}\n\nasync function handleOrgUse(\n dependencies: CliDependencies,\n organizationSelector: string,\n options: JsonCommandOptions,\n): Promise<void> {\n const state = requireLoggedInState(await dependencies.stateStore.load());\n const organization = resolveOrganizationBySelector({\n organizations: state.organizations,\n selector: organizationSelector,\n });\n\n const nextState: CliState = {\n ...state,\n defaultOrgId: organization.id,\n lastUsedOrgId: organization.id,\n };\n await dependencies.stateStore.save(nextState);\n\n if (options.json) {\n writeJsonOutput(dependencies.io, {\n defaultOrgId: organization.id,\n organization,\n });\n return;\n }\n\n dependencies.io.info(formatDefaultOrganizationSelection(organization));\n}\n\nasync function handleOperationCommand(\n dependencies: CliDependencies,\n operationSpec: OperationSpec,\n commandOptions: Record<string, unknown> & OperationalCommandOptions,\n): Promise<void> {\n const state = requireLoggedInState(await dependencies.stateStore.load());\n const organization = resolveSelectedOrganization({\n state,\n ...(commandOptions.org ? { organizationSelector: commandOptions.org } : {}),\n });\n const variables = collectOperationVariables(operationSpec, commandOptions);\n const { accessToken } = await withOrgScopedAccessToken({\n dependencies,\n organizationId: organization.id,\n state,\n });\n\n const result = await dependencies.apiClient.executeGraphQl({\n accessToken,\n query: operationSpec.document,\n resultKey: operationSpec.cli.resultKey,\n variables,\n });\n\n await dependencies.stateStore.save({\n ...state,\n lastUsedOrgId: organization.id,\n });\n\n if (commandOptions.json) {\n writeJsonOutput(dependencies.io, result);\n return;\n }\n\n dependencies.io.info(formatHumanReadableOutput(result));\n}\n\nfunction addRegistryOperationCommand({\n program,\n commandGroups,\n dependencies,\n operationSpec,\n}: {\n program: Command;\n commandGroups: Map<string, Command>;\n dependencies: CliDependencies;\n operationSpec: OperationSpec;\n}): void {\n const commandPath = [...operationSpec.cli.path];\n const leafCommandName = commandPath.pop();\n if (!leafCommandName) {\n throw new CliError(\n `CLI path is missing a leaf command for ${operationSpec.operationName}.`,\n );\n }\n\n let parentCommand = program;\n const currentGroupPath: string[] = [];\n\n for (const groupSegment of commandPath) {\n currentGroupPath.push(groupSegment);\n const groupPathKey = currentGroupPath.join(' ');\n const existingGroup = commandGroups.get(groupPathKey);\n if (existingGroup) {\n parentCommand = existingGroup;\n continue;\n }\n\n const nextGroup = parentCommand.command(groupSegment);\n if (currentGroupPath.length === 1) {\n nextGroup.helpGroup('Operation groups:');\n }\n const rootGroupDescription =\n currentGroupPath.length === 1\n ? rootOperationalGroupDescriptions.get(groupSegment)\n : undefined;\n if (rootGroupDescription) {\n nextGroup.description(rootGroupDescription);\n }\n\n commandGroups.set(groupPathKey, nextGroup);\n parentCommand = nextGroup;\n }\n\n const command = parentCommand.command(leafCommandName);\n configureOperationalCommand(command, dependencies, operationSpec);\n const legacyAliasCommand = program.command(operationSpec.cli.name, {\n hidden: true,\n });\n configureOperationalCommand(legacyAliasCommand, dependencies, operationSpec);\n}\nfunction configureOperationalCommand(\n command: Command,\n dependencies: CliDependencies,\n operationSpec: OperationSpec,\n): void {\n command\n .description(operationSpec.cli.description)\n .addOption(\n new Option(\n '--org <org>',\n 'Organization ID or exact organization name to use.',\n ).helpGroup('Shared options:'),\n )\n .addHelpText(\n 'after',\n `\\n${formatExamples(\n 'Examples',\n createOperationHelpExamples(operationSpec),\n )}`,\n );\n\n for (const optionSpec of operationSpec.cli.options) {\n const optionFlags =\n optionSpec.valueType === 'boolean'\n ? `--${optionSpec.flagName}`\n : `--${optionSpec.flagName} <value>`;\n const optionDescription = optionSpec.valueHint\n ? `${optionSpec.description} (${optionSpec.valueHint})`\n : optionSpec.description;\n const nextOption = new Option(optionFlags, optionDescription).helpGroup(\n operationSpec.kind === 'query' ? 'Query options:' : 'Mutation options:',\n );\n\n if (optionSpec.valueType === 'boolean') {\n command.addOption(nextOption);\n continue;\n }\n\n const parser = (rawValue: string): unknown =>\n parseCommandOptionValue(rawValue, optionSpec);\n nextOption.argParser(parser);\n\n if (optionSpec.required) {\n nextOption.makeOptionMandatory(true);\n command.addOption(nextOption);\n continue;\n }\n\n command.addOption(nextOption);\n }\n\n command.action(async function (this: Command) {\n await handleOperationCommand(\n dependencies,\n operationSpec,\n this.optsWithGlobals(),\n );\n });\n}\n\nexport function createConsoleIo(): CliIo {\n return {\n error(message) {\n process.stderr.write(`${message}\\n`);\n },\n info(message) {\n process.stdout.write(`${message}\\n`);\n },\n };\n}\n\nexport async function openExternalUrl(url: string): Promise<void> {\n const command = resolveOpenCommand(url);\n\n const childProcess = spawn(command.executable, command.args, {\n detached: true,\n stdio: 'ignore',\n });\n\n await new Promise<void>((resolve, reject) => {\n childProcess.on('error', reject);\n childProcess.on('spawn', () => {\n childProcess.unref();\n resolve();\n });\n });\n}\n\nfunction resolveOpenCommand(url: string): {\n args: string[];\n executable: string;\n} {\n if (process.platform === 'darwin') {\n return { executable: 'open', args: [url] };\n }\n\n if (process.platform === 'win32') {\n return { executable: 'cmd', args: ['/c', 'start', '', url] };\n }\n\n return { executable: 'xdg-open', args: [url] };\n}\n\nexport function createDefaultDependencies(): CliDependencies {\n const runtimeConfig = getRuntimeConfig();\n\n return {\n apiClient: createMagicalApiClient({\n apiBaseUrl: runtimeConfig.magicalApiUrl,\n }),\n authClient: createWorkosAuthClient({\n workosApiUrl: runtimeConfig.workosApiUrl,\n }),\n io: createConsoleIo(),\n openExternalUrl,\n refreshTokenStore: createKeytarRefreshTokenStore(\n runtimeConfig.keychainServiceName,\n ),\n runtimeConfig,\n stateStore: createFileStateStore(runtimeConfig.stateFilePath),\n };\n}\n\nexport function buildProgram(dependencies: CliDependencies): Command {\n const program = configureCommandPresentation(\n new Command()\n .name('mgcl')\n .description('Run Magical shared MCP operations from the command line.'),\n )\n .addOption(new Option('--json', 'Render JSON output.'))\n .showHelpAfterError()\n .showSuggestionAfterError()\n .addHelpText(\n 'after',\n `\\n${formatExamples('Quick start', [\n 'mgcl auth login',\n 'mgcl org list',\n 'mgcl automations list --limit 10',\n 'mgcl automation-runs get --id <run-id>',\n ])}\\n\\n${formatOutputModesNote()}`,\n );\n\n const authCommand = configureCommandPresentation(\n new Command('auth').description('Manage CLI authentication.'),\n )\n .helpGroup('Workspace:')\n .addHelpText(\n 'after',\n `\\n${formatExamples('Examples', [\n 'mgcl auth login',\n 'mgcl auth logout',\n ])}`,\n );\n authCommand\n .command('login')\n .description('Authenticate with Magical and load organization memberships.')\n .action(async function (this: Command) {\n await handleAuthLogin(dependencies, this.optsWithGlobals());\n });\n authCommand\n .command('logout')\n .description('Remove local CLI auth state.')\n .action(async function (this: Command) {\n await handleAuthLogout(dependencies, this.optsWithGlobals());\n });\n program.addCommand(authCommand);\n\n const orgCommand = configureCommandPresentation(\n new Command('org').description('Manage organization selection.'),\n )\n .helpGroup('Workspace:')\n .addHelpText(\n 'after',\n `\\n${formatExamples('Examples', [\n 'mgcl org list',\n 'mgcl org use <org>',\n ])}`,\n );\n orgCommand\n .command('list')\n .description('List organizations available to the saved identity.')\n .action(async function (this: Command) {\n await handleOrgList(dependencies, this.optsWithGlobals());\n });\n orgCommand\n .command('use <org>')\n .description('Set the default organization by ID or exact name.')\n .action(async function (this: Command, organizationSelector: string) {\n await handleOrgUse(\n dependencies,\n organizationSelector,\n this.optsWithGlobals(),\n );\n });\n program.addCommand(orgCommand);\n\n const operationalCommandGroups = new Map<string, Command>();\n for (const operationSpec of operationSpecs) {\n addRegistryOperationCommand({\n program,\n commandGroups: operationalCommandGroups,\n dependencies,\n operationSpec,\n });\n }\n\n return program;\n}\n","import { z } from 'zod';\nimport { createOperationSpec } from './operation-spec';\nimport type { CliOptionSpec, OperationSpec } from './operation-types';\n\nfunction stringOption({\n description,\n flagName,\n inputKey,\n required = false,\n}: {\n description: string;\n flagName: string;\n inputKey: string;\n required?: boolean;\n}): CliOptionSpec {\n return {\n description,\n flagName,\n inputKey,\n required,\n valueType: 'string',\n };\n}\n\nfunction numberOption({\n description,\n flagName,\n inputKey,\n required = false,\n}: {\n description: string;\n flagName: string;\n inputKey: string;\n required?: boolean;\n}): CliOptionSpec {\n return {\n description,\n flagName,\n inputKey,\n required,\n valueType: 'number',\n };\n}\n\nfunction booleanOption({\n description,\n flagName,\n inputKey,\n}: {\n description: string;\n flagName: string;\n inputKey: string;\n}): CliOptionSpec {\n return {\n description,\n flagName,\n inputKey,\n valueType: 'boolean',\n };\n}\n\nfunction stringArrayOption({\n description,\n flagName,\n inputKey,\n}: {\n description: string;\n flagName: string;\n inputKey: string;\n}): CliOptionSpec {\n return {\n description,\n flagName,\n inputKey,\n valueHint: 'comma-separated',\n valueType: 'string-array',\n };\n}\n\nfunction jsonOption({\n description,\n flagName,\n inputKey,\n required = false,\n}: {\n description: string;\n flagName: string;\n inputKey: string;\n required?: boolean;\n}): CliOptionSpec {\n return {\n description,\n flagName,\n inputKey,\n required,\n valueHint: 'JSON',\n valueType: 'json',\n };\n}\n\nconst jsonObjectSchema = z.record(z.string(), z.unknown());\n\nexport const operationSpecs = [\n createOperationSpec({\n operationName: 'GetAgent',\n kind: 'query',\n inputSchema: z.object({\n id: z.string().min(1),\n }),\n cli: {\n name: 'get-agent',\n path: ['agents', 'get'],\n description: 'Fetch a single agent with config and schema fields.',\n resultKey: 'agent',\n options: [\n stringOption({\n inputKey: 'id',\n flagName: 'id',\n description: 'Agent ID.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'agent.graphql' },\n document: `# Query to fetch a single agent with all fields\n# Config selection is limited to scalar/JSON fields to keep responses flat\nquery GetAgent($id: ID!) {\n agent(id: $id) {\n id\n name\n description\n instructions\n organizationId\n createdAt\n updatedAt\n sourceAgentId\n inputSchema\n outputSchema\n config {\n type\n language\n model\n tools\n maxSessionMessages\n commonParametersSchema\n taskQueue\n waitUponQueueing\n queueableAgentIds\n additionalSystemPrompt\n ignoreUnstableSessionState\n }\n childAgentIds\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAgentRun',\n kind: 'query',\n inputSchema: z.object({\n id: z.string().min(1),\n }),\n cli: {\n name: 'get-agent-run',\n path: ['agent-runs', 'get'],\n description: 'Fetch a single agent run.',\n resultKey: 'agentRun',\n options: [\n stringOption({\n inputKey: 'id',\n flagName: 'id',\n description: 'Agent run ID.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'agentRun.graphql' },\n document: `# Query a single agent run\nquery GetAgentRun($id: ID!) {\n agentRun(id: $id) {\n id\n agentVersionId\n agentName\n status\n statusDetail\n isChildAgent\n input\n startedAt\n finishedAt\n parentAgentRunId\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAutomationAgents',\n kind: 'query',\n inputSchema: z.object({\n id: z.string().min(1),\n }),\n cli: {\n name: 'get-automation-agents',\n path: ['automations', 'agents'],\n description: 'Fetch the agents attached to an automation.',\n resultKey: 'automation',\n options: [\n stringOption({\n inputKey: 'id',\n flagName: 'id',\n description: 'Automation ID.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'automationAgents.graphql' },\n document: `# Query to fetch automation agents with flat fields only\n# Excludes nested agent config and schemas for MCP tool simplicity\nquery GetAutomationAgents($id: ID!) {\n automation(id: $id) {\n id\n name\n agents {\n automationId\n agentId\n isTrigger\n agent {\n id\n name\n description\n instructions\n organizationId\n createdAt\n updatedAt\n sourceAgentId\n childAgentIds\n }\n }\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAutomationRun',\n kind: 'query',\n inputSchema: z.object({\n id: z.string().min(1),\n }),\n cli: {\n name: 'get-automation-run',\n path: ['automation-runs', 'get'],\n description: 'Fetch a single automation run.',\n resultKey: 'automationRun',\n options: [\n stringOption({\n inputKey: 'id',\n flagName: 'id',\n description: 'Automation run ID.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'automationRun.graphql' },\n document: `# Query a full automation run details payload\nquery GetAutomationRun($id: ID!) {\n automationRun(id: $id) {\n id\n automationId\n status\n statusDetail\n summary\n invocationType\n input\n additionalPrompt\n debugUrl\n createdAt\n startedAt\n pausedAt\n finishedAt\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAutomationRunAgentRuns',\n kind: 'query',\n inputSchema: z.object({\n automationRunId: z.string().min(1),\n }),\n cli: {\n name: 'get-automation-run-agent-runs',\n path: ['automation-runs', 'agent-runs'],\n description: 'Fetch ordered agent runs for an automation run.',\n resultKey: 'automationRunAgentRuns',\n options: [\n stringOption({\n inputKey: 'automationRunId',\n flagName: 'automation-run-id',\n description: 'Automation run ID.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'automationRunAgentRuns.graphql' },\n document: `# Query ordered agent runs for an automation run\nquery GetAutomationRunAgentRuns($automationRunId: ID!) {\n automationRunAgentRuns(automationRunId: $automationRunId) {\n id\n agentVersionId\n agentName\n status\n statusDetail\n isChildAgent\n input\n startedAt\n finishedAt\n parentAgentRunId\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAutomationRunIterations',\n kind: 'query',\n inputSchema: z.object({\n automationRunId: z.string().min(1),\n agentRunId: z.string().min(1).optional(),\n limit: z.number().int().positive().optional(),\n reverse: z.boolean().optional(),\n }),\n cli: {\n name: 'get-automation-run-iterations',\n path: ['automation-runs', 'iterations'],\n description: 'Fetch ordered iterations for an automation run.',\n resultKey: 'automationRunIterations',\n options: [\n stringOption({\n inputKey: 'automationRunId',\n flagName: 'automation-run-id',\n description: 'Automation run ID.',\n required: true,\n }),\n stringOption({\n inputKey: 'agentRunId',\n flagName: 'agent-run-id',\n description: 'Optional agent run ID to filter by.',\n }),\n numberOption({\n inputKey: 'limit',\n flagName: 'limit',\n description: 'Maximum number of iterations to return.',\n }),\n booleanOption({\n inputKey: 'reverse',\n flagName: 'reverse',\n description: 'Return newest iterations first.',\n }),\n ],\n },\n mcp: { fileName: 'automationRunIterations.graphql' },\n document: `# Query iterations for an automation run with optional filtering by agent run\nquery GetAutomationRunIterations(\n $automationRunId: ID!\n $agentRunId: ID\n $limit: Int\n $reverse: Boolean\n) {\n automationRunIterations(\n automationRunId: $automationRunId\n agentRunId: $agentRunId\n limit: $limit\n reverse: $reverse\n ) {\n id\n sequence\n agentRunId\n metadata\n startedAt\n finishedAt\n totalDurationMs\n llmResponseDurationMs\n withMarksScreenshotUrl\n withMarksMimeType\n memories {\n id\n type\n value\n sequence\n screenshotUrl\n screenshotMimeType\n }\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAutomationRuns',\n kind: 'query',\n inputSchema: z.object({\n automationId: z.string().min(1),\n status: z.array(z.string().min(1)).optional(),\n invocationType: z.array(z.string().min(1)).optional(),\n limit: z.number().int().positive().optional(),\n page: z.number().int().positive().optional(),\n }),\n cli: {\n name: 'get-automation-runs',\n path: ['automation-runs', 'list'],\n description: 'Fetch automation run history.',\n resultKey: 'automationRuns',\n options: [\n stringOption({\n inputKey: 'automationId',\n flagName: 'automation-id',\n description: 'Automation ID.',\n required: true,\n }),\n stringArrayOption({\n inputKey: 'status',\n flagName: 'status',\n description: 'Optional run statuses.',\n }),\n stringArrayOption({\n inputKey: 'invocationType',\n flagName: 'invocation-type',\n description: 'Optional invocation types.',\n }),\n numberOption({\n inputKey: 'limit',\n flagName: 'limit',\n description: 'Maximum number of runs to return.',\n }),\n numberOption({\n inputKey: 'page',\n flagName: 'page',\n description: 'Page number.',\n }),\n ],\n },\n mcp: { fileName: 'automationRuns.graphql' },\n document: `# Query automation run history for a specific automation with optional filters\nquery GetAutomationRuns(\n $automationId: ID!\n $status: [RunStatus!]\n $invocationType: [InvocationType!]\n $limit: Int\n $page: Int\n) {\n automationRuns(\n automationId: $automationId\n status: $status\n invocationType: $invocationType\n limit: $limit\n page: $page\n ) {\n id\n automationId\n status\n statusDetail\n invocationType\n summary\n createdAt\n startedAt\n pausedAt\n finishedAt\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAutomations',\n kind: 'query',\n inputSchema: z.object({\n limit: z.number().positive().optional(),\n order: jsonObjectSchema.optional(),\n where: jsonObjectSchema.optional(),\n }),\n cli: {\n name: 'get-automations',\n path: ['automations', 'list'],\n description: 'Fetch automations with optional list filters.',\n resultKey: 'automations',\n options: [\n numberOption({\n inputKey: 'limit',\n flagName: 'limit',\n description: 'Maximum number of automations to return.',\n }),\n jsonOption({\n inputKey: 'order',\n flagName: 'order-json',\n description: 'GraphQL order object.',\n }),\n jsonOption({\n inputKey: 'where',\n flagName: 'where-json',\n description: 'GraphQL filter object.',\n }),\n ],\n },\n mcp: { fileName: 'automations.graphql' },\n document: `# Query to fetch automations with flat fields only (no nested objects)\n# Excludes config and agents for MCP tool simplicity\nquery GetAutomations(\n $limit: Float\n $order: AutomationsOrder\n $where: AutomationsWhereInput\n) {\n automations(limit: $limit, order: $order, where: $where) {\n id\n name\n organizationId\n createdAt\n updatedAt\n environment\n lastSavedAt\n publishedVersionId\n draftVersionId\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAutomationWithConfigs',\n kind: 'query',\n inputSchema: z.object({\n id: z.string().min(1),\n }),\n cli: {\n name: 'get-automation-with-configs',\n path: ['automations', 'get'],\n description: 'Fetch a single automation with config fields.',\n resultKey: 'automation',\n options: [\n stringOption({\n inputKey: 'id',\n flagName: 'id',\n description: 'Automation ID.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'automationWithConfigs.graphql' },\n document: `# Query to fetch a single automation with config but excluding agents\n# Config selection is limited to scalar/JSON fields to keep responses flat\nquery GetAutomationWithConfigs($id: ID!) {\n automation(id: $id) {\n id\n name\n organizationId\n createdAt\n updatedAt\n environment\n lastSavedAt\n publishedVersionId\n draftVersionId\n config {\n cronExpression\n calendars\n interval\n enableVisualChangeChecks\n isCDPforSOM\n humanInterventionTimeoutSeconds\n availableSlots\n additionalSystemPrompt\n ignoreUnstableSessionState\n }\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAvailableCommands',\n kind: 'query',\n inputSchema: z.object({\n env: z.string().min(1),\n }),\n cli: {\n name: 'get-available-commands',\n path: ['catalog', 'commands'],\n description: 'Fetch available command definitions by environment.',\n resultKey: 'availableCommands',\n options: [\n stringOption({\n inputKey: 'env',\n flagName: 'env',\n description: 'Environment name.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'availableCommands.graphql' },\n document: `# Query to fetch available command definitions by environment\nquery GetAvailableCommands($env: AvailableCommandsEnv!) {\n availableCommands(env: $env) {\n id\n description\n inputSchema\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAvailableModels',\n kind: 'query',\n inputSchema: z.object({\n agentId: z.string().min(1),\n }),\n cli: {\n name: 'get-available-models',\n path: ['catalog', 'models'],\n description: 'Fetch available model definitions for an agent.',\n resultKey: 'availableModels',\n options: [\n stringOption({\n inputKey: 'agentId',\n flagName: 'agent-id',\n description: 'Agent ID.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'availableModels.graphql' },\n document: `# Query to fetch available model definitions and pools for a specific agent\nquery GetAvailableModels($agentId: String!) {\n availableModels(agentId: $agentId) {\n availableModelPools {\n name\n poolId\n models {\n id\n name\n description\n status\n provider\n }\n }\n allAvailableModels {\n id\n name\n description\n status\n provider\n }\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAvailableTools',\n kind: 'query',\n inputSchema: z.object({\n env: z.string().min(1),\n automationId: z.string().min(1).optional(),\n }),\n cli: {\n name: 'get-available-tools',\n path: ['catalog', 'tools'],\n description: 'Fetch available tool definitions by environment.',\n resultKey: 'availableTools',\n options: [\n stringOption({\n inputKey: 'env',\n flagName: 'env',\n description: 'Environment name.',\n required: true,\n }),\n stringOption({\n inputKey: 'automationId',\n flagName: 'automation-id',\n description: 'Optional automation ID.',\n }),\n ],\n },\n mcp: { fileName: 'availableTools.graphql' },\n document: `# Query to fetch available tool definitions by environment\nquery GetAvailableTools($env: AvailableCommandsEnv!, $automationId: String) {\n availableTools(env: $env, automationId: $automationId) {\n id\n description\n inputSchema\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'CreateAutomation',\n kind: 'mutation',\n inputSchema: z.object({\n input: jsonObjectSchema,\n }),\n cli: {\n name: 'create-automation',\n path: ['automations', 'create'],\n description: 'Create a draft automation.',\n resultKey: 'createAutomation',\n options: [\n jsonOption({\n inputKey: 'input',\n flagName: 'input-json',\n description: 'CreateAutomationInput payload.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'createAutomation.graphql' },\n document: `# Mutation to create a draft automation with optional initial values\n# Returns flat fields only for MCP tool simplicity\nmutation CreateAutomation($input: CreateAutomationInput!) {\n createAutomation(input: $input) {\n id\n name\n organizationId\n createdAt\n updatedAt\n environment\n lastSavedAt\n publishedVersionId\n draftVersionId\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetGraphqlSchema',\n kind: 'query',\n inputSchema: z.object({}),\n cli: {\n name: 'get-graphql-schema',\n path: ['graphql', 'schema'],\n description: 'Fetch GraphQL schema metadata.',\n resultKey: 'graphqlSchema',\n options: [],\n },\n mcp: { fileName: 'graphqlSchema.graphql' },\n document: `# Query to fetch full GraphQL schema metadata.\n# Uses the first-class graphqlSchema query field to avoid __schema validation\n# issues in MCP tool-load paths while still returning introspection JSON.\n# Response can be large: call sparingly (typically once per task/session) and\n# reuse cached results.\nquery GetGraphqlSchema {\n graphqlSchema\n}`,\n }),\n createOperationSpec({\n operationName: 'PauseAutomationRun',\n kind: 'mutation',\n inputSchema: z.object({\n automationRunId: z.string().min(1),\n }),\n cli: {\n name: 'pause-automation-run',\n path: ['automation-runs', 'pause'],\n description: 'Pause an automation run.',\n resultKey: 'pauseAutomationRun',\n options: [\n stringOption({\n inputKey: 'automationRunId',\n flagName: 'automation-run-id',\n description: 'Automation run ID.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'pauseAutomationRun.graphql' },\n document: `# Mutation to pause an automation run\nmutation PauseAutomationRun($automationRunId: ID!) {\n pauseAutomationRun(automationRunId: $automationRunId)\n}`,\n }),\n createOperationSpec({\n operationName: 'RerunAutomation',\n kind: 'mutation',\n inputSchema: z.object({\n automationRunId: z.string().min(1),\n additionalPrompt: z.string().min(1).optional(),\n idempotencyKey: z.string().min(1),\n }),\n cli: {\n name: 'rerun-automation',\n path: ['automation-runs', 'rerun'],\n description: 'Rerun an existing automation run.',\n resultKey: 'rerunAutomation',\n options: [\n stringOption({\n inputKey: 'automationRunId',\n flagName: 'automation-run-id',\n description: 'Automation run ID.',\n required: true,\n }),\n stringOption({\n inputKey: 'additionalPrompt',\n flagName: 'additional-prompt',\n description: 'Optional prompt appended to the rerun.',\n }),\n stringOption({\n inputKey: 'idempotencyKey',\n flagName: 'idempotency-key',\n description: 'Idempotency key for the rerun request.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'rerunAutomation.graphql' },\n document: `# Mutation to rerun an existing automation run\nmutation RerunAutomation(\n $automationRunId: ID!\n $additionalPrompt: String\n $idempotencyKey: String!\n) {\n rerunAutomation(\n automationRunId: $automationRunId\n additionalPrompt: $additionalPrompt\n idempotencyKey: $idempotencyKey\n ) {\n automationRunId\n workflowId\n workflowRunId\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'ResumeAutomationRun',\n kind: 'mutation',\n inputSchema: z.object({\n automationRunId: z.string().min(1),\n message: z.string().min(1).optional(),\n }),\n cli: {\n name: 'resume-automation-run',\n path: ['automation-runs', 'resume'],\n description: 'Resume a paused automation run.',\n resultKey: 'resumeAutomationRun',\n options: [\n stringOption({\n inputKey: 'automationRunId',\n flagName: 'automation-run-id',\n description: 'Automation run ID.',\n required: true,\n }),\n stringOption({\n inputKey: 'message',\n flagName: 'message',\n description: 'Optional resume message.',\n }),\n ],\n },\n mcp: { fileName: 'resumeAutomationRun.graphql' },\n document: `# Mutation to resume an automation run\nmutation ResumeAutomationRun($automationRunId: ID!, $message: String) {\n resumeAutomationRun(automationRunId: $automationRunId, message: $message)\n}`,\n }),\n createOperationSpec({\n operationName: 'RunDraftAutomation',\n kind: 'mutation',\n inputSchema: z.object({\n draftAutomationId: z.string().min(1),\n agentId: z.string().min(1),\n idempotencyKey: z.string().min(1),\n input: z.unknown().optional(),\n additionalPrompt: z.string().min(1).optional(),\n }),\n cli: {\n name: 'run-draft-automation',\n path: ['automations', 'run-draft'],\n description: 'Run a draft automation with an explicit trigger agent.',\n resultKey: 'runDraftAutomation',\n options: [\n stringOption({\n inputKey: 'draftAutomationId',\n flagName: 'draft-automation-id',\n description: 'Draft automation ID.',\n required: true,\n }),\n stringOption({\n inputKey: 'agentId',\n flagName: 'agent-id',\n description: 'Trigger agent ID.',\n required: true,\n }),\n stringOption({\n inputKey: 'idempotencyKey',\n flagName: 'idempotency-key',\n description: 'Idempotency key for the run request.',\n required: true,\n }),\n jsonOption({\n inputKey: 'input',\n flagName: 'input-json',\n description: 'Optional JSON input payload.',\n }),\n stringOption({\n inputKey: 'additionalPrompt',\n flagName: 'additional-prompt',\n description: 'Optional prompt appended to the run.',\n }),\n ],\n },\n mcp: { fileName: 'runDraftAutomation.graphql' },\n document: `# Mutation to run a draft automation with an explicit agent.\n# \\`draftAutomationId\\` is the draft automation entity ID (\\`Automation.id\\`), not \\`draftVersionId\\`.\nmutation RunDraftAutomation(\n $draftAutomationId: ID!\n $agentId: ID!\n $idempotencyKey: String!\n $input: JSON\n $additionalPrompt: String\n) {\n runDraftAutomation(\n draftAutomationId: $draftAutomationId\n agentId: $agentId\n idempotencyKey: $idempotencyKey\n input: $input\n additionalPrompt: $additionalPrompt\n ) {\n automationRunId\n workflowId\n workflowRunId\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'StopAutomationRun',\n kind: 'mutation',\n inputSchema: z.object({\n automationRunId: z.string().min(1),\n }),\n cli: {\n name: 'stop-automation-run',\n path: ['automation-runs', 'stop'],\n description: 'Stop an automation run.',\n resultKey: 'stopAutomationRun',\n options: [\n stringOption({\n inputKey: 'automationRunId',\n flagName: 'automation-run-id',\n description: 'Automation run ID.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'stopAutomationRun.graphql' },\n document: `# Mutation to stop an automation run\nmutation StopAutomationRun($automationRunId: ID!) {\n stopAutomationRun(automationRunId: $automationRunId)\n}`,\n }),\n createOperationSpec({\n operationName: 'UpdateAutomationById',\n kind: 'mutation',\n inputSchema: z.object({\n id: z.string().min(1),\n input: jsonObjectSchema,\n }),\n cli: {\n name: 'update-automation-by-id',\n path: ['automations', 'update'],\n description: 'Update an automation.',\n resultKey: 'updateAutomation',\n options: [\n stringOption({\n inputKey: 'id',\n flagName: 'id',\n description: 'Automation ID.',\n required: true,\n }),\n jsonOption({\n inputKey: 'input',\n flagName: 'input-json',\n description: 'UpdateAutomationInput payload.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'updateAutomation.graphql' },\n document: `# Mutation to update an automation\n# Returns only id and lastSavedAt for MCP tool simplicity\nmutation UpdateAutomationById($id: ID!, $input: UpdateAutomationInput!) {\n updateAutomation(id: $id, input: $input) {\n id\n lastSavedAt\n }\n}`,\n }),\n] as const satisfies readonly OperationSpec[];\n","import type { z } from 'zod';\nimport type { OperationSpec } from './operation-types';\n\nfunction stripLeadingGraphqlComments(document: string): string {\n return document.replace(/^(?:\\s*#.*\\n)+/u, '').trimStart();\n}\n\nfunction assertDocumentMatchesOperation({\n document,\n kind,\n operationName,\n}: {\n document: string;\n kind: OperationSpec['kind'];\n operationName: string;\n}): void {\n const normalizedDocument = stripLeadingGraphqlComments(document);\n const match =\n /^(?<actualKind>query|mutation)\\s+(?<actualOperationName>[_A-Za-z][_0-9A-Za-z]*)/u.exec(\n normalizedDocument,\n );\n\n const actualKind = match?.groups?.['actualKind'];\n const actualOperationName = match?.groups?.['actualOperationName'];\n if (!actualKind || !actualOperationName) {\n throw new Error(\n `Operation \"${operationName}\" is missing a top-level GraphQL ${kind} definition.`,\n );\n }\n\n if (actualKind !== kind || actualOperationName !== operationName) {\n throw new Error(\n `Operation \"${operationName}\" does not match its GraphQL document (${actualKind} ${actualOperationName}).`,\n );\n }\n}\n\nexport function createOperationSpec<TInputSchema extends z.ZodTypeAny>(\n spec: OperationSpec<TInputSchema>,\n): OperationSpec<TInputSchema> {\n assertDocumentMatchesOperation(spec);\n return spec;\n}\n","import { z } from 'zod';\nimport { CliError } from './errors';\nimport type { CliOrganization } from './state';\n\nconst workosOrganizationsResponseSchema = z.object({\n organizations: z.array(\n z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n primaryDomain: z.string().nullable().optional(),\n }),\n ),\n success: z.boolean(),\n});\n\nconst workosUserSchema = z.object({\n email: z.string().nullable(),\n id: z.string().min(1),\n});\n\nconst graphQlResponseSchema = z.object({\n data: z.record(z.string(), z.unknown()).optional(),\n errors: z\n .array(\n z.object({\n message: z.string().min(1),\n }),\n )\n .optional(),\n});\n\nexport interface ApiClient {\n executeGraphQl: (input: {\n accessToken: string;\n query: string;\n resultKey: string;\n variables: Record<string, unknown>;\n }) => Promise<unknown>;\n fetchOrganizations: (input: {\n accessToken: string;\n }) => Promise<CliOrganization[]>;\n fetchUser: (input: {\n accessToken: string;\n userId: string;\n }) => Promise<z.infer<typeof workosUserSchema>>;\n}\n\nexport function createMagicalApiClient({\n apiBaseUrl,\n fetchFn = fetch,\n}: {\n apiBaseUrl: string;\n fetchFn?: typeof fetch;\n}): ApiClient {\n async function fetchJson({\n accessToken,\n url,\n init,\n }: {\n accessToken: string;\n init?: RequestInit;\n url: string;\n }): Promise<unknown> {\n const headers = new Headers(init?.headers);\n headers.set('authorization', `Bearer ${accessToken}`);\n\n const response = await fetchFn(url, {\n ...init,\n headers,\n }).catch((error: unknown) => {\n throw new CliError(\n `Failed to reach Magical API at ${url}. Check MAGICAL_API_URL and make sure service-main is running.`,\n { cause: error },\n );\n });\n\n const responseBody = await response.json().catch((error: unknown) => {\n throw new CliError(\n `Magical API returned a non-JSON response for ${url}.`,\n {\n cause: error,\n },\n );\n });\n if (!response.ok) {\n throw new CliError(\n `Magical API request to ${url} failed with status ${response.status}.`,\n );\n }\n\n return responseBody;\n }\n\n return {\n async executeGraphQl({\n accessToken,\n query,\n resultKey,\n variables,\n }): Promise<unknown> {\n const headers = new Headers();\n headers.set('content-type', 'application/json');\n\n const parsedResponse = graphQlResponseSchema.safeParse(\n await fetchJson({\n accessToken,\n url: `${apiBaseUrl}/graphql`,\n init: {\n method: 'POST',\n headers,\n body: JSON.stringify({\n query,\n variables,\n }),\n },\n }),\n );\n\n if (!parsedResponse.success) {\n throw new CliError('GraphQL response payload was invalid.');\n }\n\n if (parsedResponse.data.errors && parsedResponse.data.errors.length > 0) {\n throw new CliError(\n parsedResponse.data.errors.map((error) => error.message).join('\\n'),\n );\n }\n\n return parsedResponse.data.data?.[resultKey] ?? null;\n },\n\n async fetchOrganizations({ accessToken }): Promise<CliOrganization[]> {\n const parsedResponse = workosOrganizationsResponseSchema.safeParse(\n await fetchJson({\n accessToken,\n url: `${apiBaseUrl}/workos/organizations`,\n }),\n );\n\n if (!parsedResponse.success) {\n throw new CliError('Organization list payload was invalid.');\n }\n\n return parsedResponse.data.organizations.map((organization) => ({\n id: organization.id,\n name: organization.name,\n primaryDomain: organization.primaryDomain ?? null,\n }));\n },\n\n async fetchUser({\n accessToken,\n userId,\n }): Promise<z.infer<typeof workosUserSchema>> {\n const parsedResponse = workosUserSchema.safeParse(\n await fetchJson({\n accessToken,\n url: `${apiBaseUrl}/workos/user/${userId}`,\n }),\n );\n\n if (!parsedResponse.success) {\n throw new CliError('User payload was invalid.');\n }\n\n return parsedResponse.data;\n },\n };\n}\n","import os from 'node:os';\nimport path from 'node:path';\n\nexport const DEFAULT_MAGICAL_API_URL = 'https://api-agt.getmagical.io';\nexport const DEFAULT_WORKOS_API_URL = 'https://api.workos.com';\nexport const DEFAULT_WORKOS_CLIENT_ID = 'client_01JJZ6XJ1RF248P20WF63M4VAM';\nexport const DEFAULT_KEYCHAIN_SERVICE_NAME = '@getmagical/mcp-cli';\nexport const CLI_CONFIG_DIRECTORY_NAME = 'magical-mcp-cli';\nexport const CLI_STATE_FILE_NAME = 'state.json';\n\nexport interface RuntimeConfig {\n keychainServiceName: string;\n magicalApiUrl: string;\n stateFilePath: string;\n workosApiUrl: string;\n workosClientId: string;\n workosAuthkitDomain?: string;\n}\n\nfunction resolvePlatformConfigDirectory(): string {\n const customConfigDirectory = process.env['MAGICAL_CLI_CONFIG_DIR'];\n if (customConfigDirectory) {\n return customConfigDirectory;\n }\n\n if (process.platform === 'darwin') {\n return path.join(os.homedir(), 'Library', 'Application Support');\n }\n\n if (process.platform === 'win32') {\n const appDataDirectory = process.env['APPDATA'];\n return appDataDirectory ?? path.join(os.homedir(), 'AppData', 'Roaming');\n }\n\n return process.env['XDG_CONFIG_HOME'] ?? path.join(os.homedir(), '.config');\n}\n\nexport function getRuntimeConfig(): RuntimeConfig {\n const configDirectory = path.join(\n resolvePlatformConfigDirectory(),\n CLI_CONFIG_DIRECTORY_NAME,\n );\n\n return {\n magicalApiUrl: process.env['MAGICAL_API_URL'] ?? DEFAULT_MAGICAL_API_URL,\n stateFilePath: path.join(configDirectory, CLI_STATE_FILE_NAME),\n workosApiUrl: DEFAULT_WORKOS_API_URL,\n workosClientId: process.env['WORKOS_CLIENT_ID'] ?? DEFAULT_WORKOS_CLIENT_ID,\n keychainServiceName: DEFAULT_KEYCHAIN_SERVICE_NAME,\n ...(process.env['WORKOS_AUTHKIT_DOMAIN']\n ? { workosAuthkitDomain: process.env['WORKOS_AUTHKIT_DOMAIN'] }\n : {}),\n };\n}\n\nexport function requireWorkosClientId(config: RuntimeConfig): string {\n return config.workosClientId;\n}\n","import keytar from 'keytar';\nimport type { CliAccount, RefreshTokenStore } from './state';\n\nfunction buildKeychainAccountName(account: CliAccount): string {\n return `${account.clientId}:${account.userId}`;\n}\n\nexport function createKeytarRefreshTokenStore(\n serviceName: string,\n): RefreshTokenStore {\n return {\n async clear(account) {\n await keytar.deletePassword(\n serviceName,\n buildKeychainAccountName(account),\n );\n },\n async load(account) {\n return keytar.getPassword(serviceName, buildKeychainAccountName(account));\n },\n async save(account, refreshToken) {\n await keytar.setPassword(\n serviceName,\n buildKeychainAccountName(account),\n refreshToken,\n );\n },\n };\n}\n","import { mkdir, readFile, rm, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { z } from 'zod';\nimport { CliError } from './errors';\n\nexport const cliAccountSchema = z.object({\n clientId: z.string().min(1),\n email: z.string().nullable(),\n userId: z.string().min(1),\n});\n\nexport const cliOrganizationSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n primaryDomain: z.string().nullable().default(null),\n});\n\nexport const cliStateSchema = z.object({\n account: cliAccountSchema,\n defaultOrgId: z.string().nullable(),\n lastUsedOrgId: z.string().nullable(),\n organizations: z.array(cliOrganizationSchema),\n});\n\nexport type CliAccount = z.infer<typeof cliAccountSchema>;\nexport type CliOrganization = z.infer<typeof cliOrganizationSchema>;\nexport type CliState = z.infer<typeof cliStateSchema>;\n\nexport interface StateStore {\n clear: () => Promise<void>;\n load: () => Promise<CliState | null>;\n save: (state: CliState) => Promise<void>;\n}\n\nexport interface RefreshTokenStore {\n clear: (account: CliAccount) => Promise<void>;\n load: (account: CliAccount) => Promise<string | null>;\n save: (account: CliAccount, refreshToken: string) => Promise<void>;\n}\n\nexport function createFileStateStore(stateFilePath: string): StateStore {\n return {\n async clear() {\n await rm(stateFilePath, { force: true });\n },\n async load() {\n try {\n const fileContents = await readFile(stateFilePath, 'utf8');\n const parsed = cliStateSchema.safeParse(JSON.parse(fileContents));\n if (!parsed.success) {\n throw new CliError('Stored CLI state is invalid.');\n }\n\n return parsed.data;\n } catch (error: unknown) {\n if (\n error instanceof Error &&\n 'code' in error &&\n error.code === 'ENOENT'\n ) {\n return null;\n }\n\n if (error instanceof CliError) {\n throw error;\n }\n\n throw new CliError('Failed to load CLI state.', { cause: error });\n }\n },\n async save(state) {\n await mkdir(path.dirname(stateFilePath), { recursive: true });\n await writeFile(stateFilePath, `${JSON.stringify(state, null, 2)}\\n`);\n },\n };\n}\n\nexport function createMemoryRefreshTokenStore(): RefreshTokenStore {\n const values = new Map<string, string>();\n\n return {\n async clear(account) {\n values.delete(buildRefreshTokenKey(account));\n },\n async load(account) {\n return values.get(buildRefreshTokenKey(account)) ?? null;\n },\n async save(account, refreshToken) {\n values.set(buildRefreshTokenKey(account), refreshToken);\n },\n };\n}\n\nfunction buildRefreshTokenKey(account: CliAccount): string {\n return `${account.clientId}:${account.userId}`;\n}\n","import { z } from 'zod';\nimport { CliError } from './errors';\n\nconst DEFAULT_DEVICE_POLL_INTERVAL_SECONDS = 5;\n\nfunction buildFormHeaders(): Headers {\n const headers = new Headers();\n headers.set('content-type', 'application/x-www-form-urlencoded');\n return headers;\n}\n\nconst deviceAuthorizationSchema = z.object({\n device_code: z.string().min(1),\n expires_in: z.number().int().positive().optional(),\n interval: z.number().int().positive().optional(),\n user_code: z.string().min(1),\n verification_uri: z.url(),\n verification_uri_complete: z.url().optional(),\n});\n\nconst tokenResponseSchema = z.object({\n access_token: z.string().min(1),\n expires_in: z.number().int().positive().optional(),\n refresh_token: z.string().min(1),\n token_type: z.string().optional(),\n});\n\nconst tokenErrorSchema = z.object({\n error: z.string().min(1),\n error_description: z.string().optional(),\n});\n\nconst accessTokenClaimsSchema = z.object({\n org_id: z.string().min(1).optional(),\n sid: z.string().min(1).optional(),\n sub: z.string().min(1),\n});\n\nexport type DeviceAuthorization = z.infer<typeof deviceAuthorizationSchema>;\nexport type TokenResponse = z.infer<typeof tokenResponseSchema>;\nexport type AccessTokenClaims = z.infer<typeof accessTokenClaimsSchema>;\n\nexport interface AuthClient {\n decodeAccessTokenClaims: (accessToken: string) => AccessTokenClaims;\n pollForDeviceTokens: (input: {\n clientId: string;\n deviceCode: string;\n expiresInSeconds?: number;\n intervalSeconds?: number;\n }) => Promise<TokenResponse>;\n refreshTokens: (input: {\n clientId: string;\n organizationId?: string;\n refreshToken: string;\n }) => Promise<TokenResponse>;\n startDeviceAuthorization: (input: {\n clientId: string;\n }) => Promise<DeviceAuthorization>;\n}\n\nexport function createWorkosAuthClient({\n fetchFn = fetch,\n sleep = async (milliseconds): Promise<void> => {\n await new Promise((resolve) => {\n setTimeout(resolve, milliseconds);\n });\n },\n workosApiUrl,\n}: {\n fetchFn?: typeof fetch;\n sleep?: (milliseconds: number) => Promise<void>;\n workosApiUrl: string;\n}): AuthClient {\n async function postForm<TSchema extends z.ZodTypeAny>({\n endpointPath,\n formData,\n responseSchema,\n }: {\n endpointPath: string;\n formData: URLSearchParams;\n responseSchema: TSchema;\n }): Promise<z.infer<TSchema>> {\n const response = await fetchFn(`${workosApiUrl}${endpointPath}`, {\n method: 'POST',\n headers: buildFormHeaders(),\n body: formData,\n });\n\n const responseBody = await response.json();\n if (!response.ok) {\n const parsedError = tokenErrorSchema.safeParse(responseBody);\n if (parsedError.success) {\n throw new CliError(\n parsedError.data.error_description ?? parsedError.data.error,\n );\n }\n\n throw new CliError(\n `WorkOS request failed with status ${response.status}.`,\n );\n }\n\n const parsedResponse = responseSchema.safeParse(responseBody);\n if (!parsedResponse.success) {\n throw new CliError('WorkOS returned an unexpected response payload.');\n }\n\n return parsedResponse.data;\n }\n\n return {\n decodeAccessTokenClaims(accessToken) {\n const [, payloadSegment] = accessToken.split('.');\n if (!payloadSegment) {\n throw new CliError('WorkOS access token is malformed.');\n }\n\n const payload: unknown = JSON.parse(\n Buffer.from(payloadSegment, 'base64url').toString('utf8'),\n );\n const parsedClaims = accessTokenClaimsSchema.safeParse(payload);\n if (!parsedClaims.success) {\n throw new CliError('WorkOS access token is missing required claims.');\n }\n\n return parsedClaims.data;\n },\n\n async pollForDeviceTokens({\n clientId,\n deviceCode,\n expiresInSeconds,\n intervalSeconds,\n }): Promise<TokenResponse> {\n const timeoutAt = Date.now() + (expiresInSeconds ?? 15 * 60) * 1000;\n const initialIntervalMilliseconds =\n (intervalSeconds ?? DEFAULT_DEVICE_POLL_INTERVAL_SECONDS) * 1000;\n\n async function poll(\n nextIntervalMilliseconds: number,\n ): Promise<TokenResponse> {\n if (Date.now() >= timeoutAt) {\n throw new CliError(\n 'WorkOS device authorization expired before completion.',\n );\n }\n\n const formData = new URLSearchParams();\n formData.set('client_id', clientId);\n formData.set('device_code', deviceCode);\n formData.set(\n 'grant_type',\n 'urn:ietf:params:oauth:grant-type:device_code',\n );\n\n const response = await fetchFn(\n `${workosApiUrl}/user_management/authenticate`,\n {\n method: 'POST',\n headers: buildFormHeaders(),\n body: formData,\n },\n );\n\n const responseBody = await response.json();\n if (response.ok) {\n const parsedTokens = tokenResponseSchema.safeParse(responseBody);\n if (!parsedTokens.success) {\n throw new CliError('WorkOS returned an unexpected token response.');\n }\n\n return parsedTokens.data;\n }\n\n const parsedError = tokenErrorSchema.safeParse(responseBody);\n if (!parsedError.success) {\n throw new CliError(\n `WorkOS device authorization failed with status ${response.status}.`,\n );\n }\n\n if (parsedError.data.error === 'authorization_pending') {\n await sleep(nextIntervalMilliseconds);\n return poll(nextIntervalMilliseconds);\n }\n\n if (parsedError.data.error === 'slow_down') {\n const slowedIntervalMilliseconds = nextIntervalMilliseconds + 5000;\n await sleep(slowedIntervalMilliseconds);\n return poll(slowedIntervalMilliseconds);\n }\n\n throw new CliError(\n parsedError.data.error_description ?? parsedError.data.error,\n );\n }\n\n return poll(initialIntervalMilliseconds);\n },\n\n async refreshTokens({\n clientId,\n organizationId,\n refreshToken,\n }): Promise<TokenResponse> {\n const formData = new URLSearchParams();\n formData.set('client_id', clientId);\n formData.set('grant_type', 'refresh_token');\n formData.set('refresh_token', refreshToken);\n\n if (organizationId) {\n formData.set('organization_id', organizationId);\n }\n\n return postForm({\n endpointPath: '/user_management/authenticate',\n formData,\n responseSchema: tokenResponseSchema,\n });\n },\n\n async startDeviceAuthorization({ clientId }): Promise<DeviceAuthorization> {\n const formData = new URLSearchParams();\n formData.set('client_id', clientId);\n\n return postForm({\n endpointPath: '/user_management/authorize/device',\n formData,\n responseSchema: deviceAuthorizationSchema,\n });\n },\n };\n}\n","#!/usr/bin/env node\n\nimport { formatCliError } from './cli-formatting';\nimport { getErrorMessage } from './errors';\nimport { buildProgram, createDefaultDependencies } from './program';\n\nconst program = buildProgram(createDefaultDependencies());\n\nprogram.parseAsync(process.argv).catch((error: unknown) => {\n process.stderr.write(`${formatCliError(getErrorMessage(error))}\\n`);\n process.exitCode = 1;\n});\n"],"mappings":";;;AAAA,SAAS,SAAS,0BAA0B,iBAAiB;AAC7D,SAAS,YAAY;AAGrB,IAAM,cAAc;AACpB,IAAM,YAAY;AAGlB,SAAS,WACP,OACA,OACA,UAAU,MACF;AACR,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,SAAO,UAAU,OAAO,KAAK;AAC/B;AAEA,SAAS,OAAO,MAAc,QAAQ,GAAW;AAC/C,QAAM,UAAU,IAAI,OAAO,KAAK;AAChC,SAAO,KACJ,MAAM,IAAI,EACV,IAAI,CAAC,SAAS,GAAG,OAAO,GAAG,IAAI,EAAE,EACjC,KAAK,IAAI;AACd;AAEA,SAAS,UAAU,OAAuB;AACxC,SAAO,yBAAyB,KAAK;AACvC;AAEA,SAAS,aAAa,OAAuB;AAC3C,SAAO,UAAU,KAAK,EAAE;AAC1B;AAEA,SAAS,QAAQ,OAAe,OAAuB;AACrD,SAAO,MAAM,OAAO,QAAQ,MAAM,SAAS,aAAa,KAAK,CAAC;AAChE;AAEA,SAAS,cAAc,OAAuB;AAC5C,SAAO,WAAW,OAAO,CAAC,QAAQ,MAAM,CAAC;AAC3C;AAEA,SAAS,YAAY,OAAuB;AAC1C,SAAO,WAAW,OAAO,KAAK;AAChC;AAEA,SAAS,qBAAqB,SAAyB;AACrD,SAAO,WAAW,SAAS,CAAC,QAAQ,MAAM,CAAC;AAC7C;AAEA,SAAS,WAAW,MAAsB;AACxC,SAAO,WAAW,MAAM,CAAC,QAAQ,QAAQ,CAAC;AAC5C;AAEA,SAAS,iBAAiB,OAAuB;AAC/C,SAAO,WAAW,OAAO,CAAC,QAAQ,KAAK,GAAG,QAAQ,OAAO,KAAK;AAChE;AAEA,SAAS,WAAW,OAAyB;AAC3C,QAAM,SAAmB,CAAC;AAE1B,aAAW,QAAQ,MAChB,WAAW,KAAK,GAAG,EACnB,WAAW,KAAK,GAAG,EACnB,MAAM,GAAG,GAAG;AACb,QAAI,KAAK,WAAW,GAAG;AACrB;AAAA,IACF;AAEA,QAAI,eAAe,KAAK,CAAC,KAAK;AAC9B,eAAW,aAAa,KAAK,MAAM,CAAC,GAAG;AACrC,YAAM,oBAAoB,aAAa,GAAG,EAAE,KAAK;AACjD,YAAM,cACJ,aAAa,OACb,aAAa,QACX,qBAAqB,OAAO,qBAAqB,OAChD,qBAAqB,OAAO,qBAAqB;AAEtD,UAAI,aAAa;AACf,eAAO,KAAK,YAAY;AACxB,uBAAe;AACf;AAAA,MACF;AAEA,sBAAgB;AAAA,IAClB;AAEA,WAAO,KAAK,YAAY;AAAA,EAC1B;AAEA,SAAO;AACT;AAEA,SAAS,UAAU,OAAuB;AACxC,SAAO,WAAW,KAAK,EACpB,IAAI,CAAC,YAAY;AAChB,UAAM,eAAe,QAAQ,YAAY;AACzC,QAAI,iBAAiB,MAAM;AACzB,aAAO;AAAA,IACT;AAEA,QAAI,iBAAiB,OAAO;AAC1B,aAAO;AAAA,IACT;AAEA,QAAI,iBAAiB,OAAO;AAC1B,aAAO;AAAA,IACT;AAEA,WAAO,QAAQ,OAAO,CAAC,EAAE,YAAY,IAAI,QAAQ,MAAM,CAAC;AAAA,EAC1D,CAAC,EACA,KAAK,GAAG;AACb;AAEA,SAAS,aAAa,OAAwB;AAC5C,MAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,MAAM,WAAW,IAAI,cAAc;AAAA,EAC5C;AAEA,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW;AAC3D,WAAO,OAAO,KAAK;AAAA,EACrB;AAEA,SAAO,QAAQ,OAAO;AAAA,IACpB,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,EACT,CAAC;AACH;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,gBAAgB,OAAyB;AAChD,SACE,UAAU,QACV,UAAU,UACV,OAAO,UAAU,YACjB,OAAO,UAAU,YACjB,OAAO,UAAU;AAErB;AAEA,SAAS,YAAY,SAGV;AACT,QAAM,SAAS,QAAQ,QAAQ;AAAA,IAAI,CAAC,QAAQ,gBAC1C,KAAK;AAAA,MACH,aAAa,MAAM;AAAA,MACnB,GAAG,QAAQ,KAAK,IAAI,CAAC,QAAQ,aAAa,IAAI,WAAW,KAAK,EAAE,CAAC;AAAA,IACnE;AAAA,EACF;AAEA,QAAM,YAAY,CAAC,UACjB,MACG,IAAI,CAAC,MAAM,gBAAgB,QAAQ,MAAM,OAAO,WAAW,KAAK,CAAC,CAAC,EAClE,KAAK,SAAS,EACd,QAAQ;AAEb,QAAM,UAAU,OAAO,IAAI,CAAC,UAAU,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,SAAS;AAEvE,SAAO;AAAA,IACL,UAAU,QAAQ,QAAQ,IAAI,CAAC,WAAW,WAAW,QAAQ,MAAM,CAAC,CAAC;AAAA,IACrE;AAAA,IACA,GAAG,QAAQ,KAAK,IAAI,SAAS;AAAA,EAC/B,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,4BACP,OAC6C;AAC7C,MAAI,MAAM,WAAW,KAAK,CAAC,MAAM,MAAM,QAAQ,GAAG;AAChD,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,CAAC,GAAG,IAAI,IAAI,MAAM,QAAQ,CAAC,SAAS,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC;AAEpE,MAAI,KAAK,WAAW,KAAK,KAAK,SAAS,GAAG;AACxC,WAAO;AAAA,EACT;AAEA,SAAO,MAAM,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,QAAQ,gBAAgB,KAAK,GAAG,CAAC,CAAC,CAAC;AAC9E;AAEA,SAAS,aAAa,QAAyC;AAC7D,QAAM,UAAU,OAAO,QAAQ,MAAM;AACrC,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,KAAK;AAAA,IACtB,GAAG,QAAQ,IAAI,CAAC,CAAC,GAAG,MAAM,aAAa,UAAU,GAAG,CAAC,CAAC;AAAA,EACxD;AAEA,SAAO,QACJ,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACrB,UAAM,QAAQ,GAAG,UAAU,GAAG,CAAC;AAC/B,QAAI,gBAAgB,KAAK,GAAG;AAC1B,aAAO,GAAG,QAAQ,YAAY,KAAK,GAAG,aAAa,CAAC,CAAC,IAAI,aAAa,KAAK,CAAC;AAAA,IAC9E;AAEA,WAAO,GAAG,YAAY,KAAK,CAAC;AAAA,EAAK,OAAO,0BAA0B,KAAK,CAAC,CAAC;AAAA,EAC3E,CAAC,EACA,KAAK,IAAI;AACd;AAEA,SAAS,YAAY,OAAmC;AACtD,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,MAAM,eAAe,GAAG;AAChC,WAAO,MAAM,IAAI,CAAC,SAAS,KAAK,aAAa,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI;AAAA,EACjE;AAEA,MAAI,4BAA4B,KAAK,GAAG;AACtC,UAAM,OAAO,CAAC,GAAG,IAAI,IAAI,MAAM,QAAQ,CAAC,SAAS,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC;AAEpE,WAAO,YAAY;AAAA,MACjB,SAAS,KAAK,IAAI,CAAC,QAAQ,UAAU,GAAG,CAAC;AAAA,MACzC,MAAM,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,aAAa,KAAK,GAAG,CAAC,CAAC,CAAC;AAAA,IACtE,CAAC;AAAA,EACH;AAEA,SAAO,MACJ,IAAI,CAAC,MAAM,UAAU;AACpB,UAAM,QAAQ,cAAc,QAAQ,QAAQ,CAAC,EAAE;AAC/C,WAAO,GAAG,KAAK;AAAA,EAAK,OAAO,0BAA0B,IAAI,CAAC,CAAC;AAAA,EAC7D,CAAC,EACA,KAAK,MAAM;AAChB;AAEA,SAAS,oBAAoB,SAA8C;AACzE,QAAM,aAAa,KAAK,IAAI,GAAG,QAAQ,IAAI,CAAC,CAAC,KAAK,MAAM,aAAa,KAAK,CAAC,CAAC;AAC5E,SAAO,QACJ;AAAA,IACC,CAAC,CAAC,OAAO,KAAK,MACZ,GAAG,QAAQ,YAAY,GAAG,KAAK,GAAG,GAAG,aAAa,CAAC,CAAC,IAAI,KAAK;AAAA,EACjE,EACC,KAAK,IAAI;AACd;AAEA,SAAS,cAAc,OAAe,WAAsC;AAC1E,SAAO,CAAC,cAAc,KAAK,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,IAAI;AAC3D;AAEO,IAAM,cAAN,cAA0B,KAAK;AAAA,EAC5B,kBAAkB,QAAQ,OAAO;AAAA,EAElC,cAAc;AACnB,UAAM;AACN,SAAK,YAAY;AACjB,SAAK,oBAAoB;AACzB,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAEgB,eAAe,gBAItB;AACP,UAAM,eAAe,cAAc;AACnC,SAAK,kBACH,eAAe,mBAAmB,QAAQ,OAAO;AAAA,EACrD;AAAA,EAEgB,WAAW,KAAqB;AAC9C,WAAO,WAAW,KAAK,CAAC,QAAQ,MAAM,GAAG,KAAK,eAAe;AAAA,EAC/D;AAAA,EAEgB,iBAAiB,KAAqB;AACpD,WAAO,WAAW,KAAK,CAAC,QAAQ,MAAM,GAAG,KAAK,eAAe;AAAA,EAC/D;AAAA,EAEgB,oBAAoB,KAAqB;AACvD,WAAO,WAAW,KAAK,CAAC,QAAQ,MAAM,GAAG,KAAK,eAAe;AAAA,EAC/D;AAAA,EAEgB,gBAAgB,KAAqB;AACnD,WAAO,WAAW,KAAK,CAAC,QAAQ,QAAQ,GAAG,KAAK,eAAe;AAAA,EACjE;AAAA,EAEgB,kBAAkB,KAAqB;AACrD,WAAO,WAAW,KAAK,CAAC,QAAQ,OAAO,GAAG,KAAK,eAAe;AAAA,EAChE;AAAA,EAEgB,qBAAqB,KAAqB;AACxD,WAAO,WAAW,KAAK,OAAO,KAAK,eAAe;AAAA,EACpD;AACF;AAEO,SAAS,sBAAsB,SAG3B;AACT,SAAO,cAAc,6BAA6B;AAAA,IAChD,oBAAoB;AAAA,MAClB,CAAC,QAAQ,QAAQ,eAAe;AAAA,MAChC,CAAC,QAAQ,QAAQ,QAAQ;AAAA,IAC3B,CAAC;AAAA,EACH,CAAC;AACH;AAEO,SAAS,uBAAuB,SAI5B;AACT,SAAO,cAAc,aAAa;AAAA,IAChC,oBAAoB;AAAA,MAClB,CAAC,WAAW,QAAQ,QAAQ,SAAS,QAAQ,QAAQ,MAAM;AAAA,MAC3D,CAAC,iBAAiB,OAAO,QAAQ,iBAAiB,CAAC;AAAA,MACnD;AAAA,QACE;AAAA,QACA,QAAQ,sBACJ,GAAG,QAAQ,oBAAoB,IAAI,KAAK,QAAQ,oBAAoB,EAAE,MACtE;AAAA,MACN;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AAEO,SAAS,4BAAoC;AAClD,SAAO;AACT;AAEO,SAAS,sBAA8B;AAC5C,SAAO,cAAc,cAAc,CAAC,mCAAmC,CAAC;AAC1E;AAEO,SAAS,uBAAuB,SAI5B;AACT,MAAI,QAAQ,cAAc,WAAW,GAAG;AACtC,WAAO,cAAc,iBAAiB,CAAC,iCAAiC,CAAC;AAAA,EAC3E;AAEA,QAAM,OAAO,QAAQ,cAAc,IAAI,CAAC,iBAAiB;AACvD,UAAM,SAAS;AAAA,MACb,QAAQ,iBAAiB,aAAa,KAAK,YAAY;AAAA,MACvD,QAAQ,kBAAkB,aAAa,KAAK,cAAc;AAAA,IAC5D,EACG,OAAO,CAAC,UAAU,UAAU,IAAI,EAChC,KAAK,IAAI;AAEZ,WAAO;AAAA,MACL,UAAU;AAAA,MACV,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa,iBAAiB;AAAA,IAChC;AAAA,EACF,CAAC;AAED,SAAO,cAAc,iBAAiB;AAAA,IACpC,YAAY;AAAA,MACV,SAAS,CAAC,UAAU,QAAQ,MAAM,gBAAgB;AAAA,MAClD;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AAEO,SAAS,mCACd,cACQ;AACR,SAAO,cAAc,gCAAgC;AAAA,IACnD,GAAG,aAAa,IAAI,KAAK,aAAa,EAAE;AAAA,EAC1C,CAAC;AACH;AAEO,SAAS,0BAA0B,OAAwB;AAChE,MAAI,gBAAgB,KAAK,GAAG;AAC1B,WAAO,aAAa,KAAK;AAAA,EAC3B;AAEA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,YAAY,KAAK;AAAA,EAC1B;AAEA,MAAI,SAAS,KAAK,GAAG;AACnB,WAAO,aAAa,KAAK;AAAA,EAC3B;AAEA,SAAO,QAAQ,OAAO;AAAA,IACpB,QAAQ;AAAA,IACR,OAAO;AAAA,EACT,CAAC;AACH;AAEO,SAAS,eAAe,SAAyB;AACtD,SAAO,GAAG,iBAAiB,QAAQ,CAAC,IAAI,OAAO;AACjD;AAEO,SAAS,eACd,OACA,UACQ;AACR,SAAO;AAAA,IACL,cAAc,KAAK;AAAA,IACnB;AAAA,IACA,GAAG,SAAS,IAAI,CAAC,YAAY,KAAK,qBAAqB,OAAO,CAAC,EAAE;AAAA,EACnE,EAAE,KAAK,IAAI;AACb;AAEO,SAAS,wBAAgC;AAC9C,SAAO,cAAc,UAAU;AAAA,IAC7B;AAAA,IACA,OAAO,WAAW,QAAQ,CAAC;AAAA,EAC7B,CAAC;AACH;;;ACnaO,IAAM,WAAN,cAAuB,MAAM;AAAA,EAC3B,YACL,SACA,SAGA;AACA,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,SAAS,gBAAgB,OAAwB;AACtD,MAAI,iBAAiB,OAAO;AAC1B,WAAO,MAAM;AAAA,EACf;AAEA,SAAO;AACT;;;AClBA,SAAS,aAAa;;;ACAtB,SAAS,SAAS;;;ACGlB,SAAS,4BAA4B,UAA0B;AAC7D,SAAO,SAAS,QAAQ,mBAAmB,EAAE,EAAE,UAAU;AAC3D;AAEA,SAAS,+BAA+B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACF,GAIS;AACP,QAAM,qBAAqB,4BAA4B,QAAQ;AAC/D,QAAM,QACJ,mFAAmF;AAAA,IACjF;AAAA,EACF;AAEF,QAAM,aAAa,OAAO,SAAS,YAAY;AAC/C,QAAM,sBAAsB,OAAO,SAAS,qBAAqB;AACjE,MAAI,CAAC,cAAc,CAAC,qBAAqB;AACvC,UAAM,IAAI;AAAA,MACR,cAAc,aAAa,oCAAoC,IAAI;AAAA,IACrE;AAAA,EACF;AAEA,MAAI,eAAe,QAAQ,wBAAwB,eAAe;AAChE,UAAM,IAAI;AAAA,MACR,cAAc,aAAa,0CAA0C,UAAU,IAAI,mBAAmB;AAAA,IACxG;AAAA,EACF;AACF;AAEO,SAAS,oBACd,MAC6B;AAC7B,iCAA+B,IAAI;AACnC,SAAO;AACT;;;ADtCA,SAAS,aAAa;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAKkB;AAChB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACb;AACF;AAEA,SAAS,aAAa;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAKkB;AAChB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACb;AACF;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AACF,GAIkB;AAChB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACb;AACF;AAEA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF,GAIkB;AAChB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,EACb;AACF;AAEA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAKkB;AAChB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,EACb;AACF;AAEA,IAAM,mBAAmB,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC;AAElD,IAAM,iBAAiB;AAAA,EAC5B,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACtB,CAAC;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,UAAU,KAAK;AAAA,MACtB,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,QACP,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,EAAE,UAAU,gBAAgB;AAAA,IACjC,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8BZ,CAAC;AAAA,EACD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACtB,CAAC;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,cAAc,KAAK;AAAA,MAC1B,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,QACP,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,EAAE,UAAU,mBAAmB;AAAA,IACpC,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeZ,CAAC;AAAA,EACD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACtB,CAAC;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,eAAe,QAAQ;AAAA,MAC9B,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,QACP,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,EAAE,UAAU,2BAA2B;AAAA,IAC5C,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBZ,CAAC;AAAA,EACD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACtB,CAAC;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,mBAAmB,KAAK;AAAA,MAC/B,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,QACP,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,EAAE,UAAU,wBAAwB;AAAA,IACzC,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBZ,CAAC;AAAA,EACD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACnC,CAAC;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,mBAAmB,YAAY;AAAA,MACtC,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,QACP,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,EAAE,UAAU,iCAAiC;AAAA,IAClD,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeZ,CAAC;AAAA,EACD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACjC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,MACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,MAC5C,SAAS,EAAE,QAAQ,EAAE,SAAS;AAAA,IAChC,CAAC;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,mBAAmB,YAAY;AAAA,MACtC,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,QACP,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,QACD,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,QACf,CAAC;AAAA,QACD,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,QACf,CAAC;AAAA,QACD,cAAc;AAAA,UACZ,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,EAAE,UAAU,kCAAkC;AAAA,IACnD,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiCZ,CAAC;AAAA,EACD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MAC9B,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;AAAA,MAC5C,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;AAAA,MACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,MAC5C,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,IAC7C,CAAC;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,mBAAmB,MAAM;AAAA,MAChC,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,QACP,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,QACD,kBAAkB;AAAA,UAChB,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,QACf,CAAC;AAAA,QACD,kBAAkB;AAAA,UAChB,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,QACf,CAAC;AAAA,QACD,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,QACf,CAAC;AAAA,QACD,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,EAAE,UAAU,yBAAyB;AAAA,IAC1C,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BZ,CAAC;AAAA,EACD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,MACtC,OAAO,iBAAiB,SAAS;AAAA,MACjC,OAAO,iBAAiB,SAAS;AAAA,IACnC,CAAC;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,eAAe,MAAM;AAAA,MAC5B,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,QACP,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,QACf,CAAC;AAAA,QACD,WAAW;AAAA,UACT,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,QACf,CAAC;AAAA,QACD,WAAW;AAAA,UACT,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,EAAE,UAAU,sBAAsB;AAAA,IACvC,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBZ,CAAC;AAAA,EACD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACtB,CAAC;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,eAAe,KAAK;AAAA,MAC3B,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,QACP,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,EAAE,UAAU,gCAAgC;AAAA,IACjD,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0BZ,CAAC;AAAA,EACD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACvB,CAAC;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,WAAW,UAAU;AAAA,MAC5B,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,QACP,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,EAAE,UAAU,4BAA4B;AAAA,IAC7C,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQZ,CAAC;AAAA,EACD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IAC3B,CAAC;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,WAAW,QAAQ;AAAA,MAC1B,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,QACP,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,EAAE,UAAU,0BAA0B;AAAA,IAC3C,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBZ,CAAC;AAAA,EACD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACrB,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IAC3C,CAAC;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,WAAW,OAAO;AAAA,MACzB,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,QACP,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,QACD,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,EAAE,UAAU,yBAAyB;AAAA,IAC1C,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQZ,CAAC;AAAA,EACD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,OAAO;AAAA,IACT,CAAC;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,eAAe,QAAQ;AAAA,MAC9B,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,QACP,WAAW;AAAA,UACT,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,EAAE,UAAU,2BAA2B;AAAA,IAC5C,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeZ,CAAC;AAAA,EACD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO,CAAC,CAAC;AAAA,IACxB,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,WAAW,QAAQ;AAAA,MAC1B,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS,CAAC;AAAA,IACZ;AAAA,IACA,KAAK,EAAE,UAAU,wBAAwB;AAAA,IACzC,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQZ,CAAC;AAAA,EACD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACnC,CAAC;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,mBAAmB,OAAO;AAAA,MACjC,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,QACP,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,EAAE,UAAU,6BAA6B;AAAA,IAC9C,UAAU;AAAA;AAAA;AAAA;AAAA,EAIZ,CAAC;AAAA,EACD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACjC,kBAAkB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,MAC7C,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IAClC,CAAC;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,mBAAmB,OAAO;AAAA,MACjC,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,QACP,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,QACD,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,QACf,CAAC;AAAA,QACD,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,EAAE,UAAU,0BAA0B;AAAA,IAC3C,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBZ,CAAC;AAAA,EACD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACjC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IACtC,CAAC;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,mBAAmB,QAAQ;AAAA,MAClC,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,QACP,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,QACD,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,EAAE,UAAU,8BAA8B;AAAA,IAC/C,UAAU;AAAA;AAAA;AAAA;AAAA,EAIZ,CAAC;AAAA,EACD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,mBAAmB,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACnC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACzB,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MAChC,OAAO,EAAE,QAAQ,EAAE,SAAS;AAAA,MAC5B,kBAAkB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IAC/C,CAAC;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,eAAe,WAAW;AAAA,MACjC,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,QACP,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,QACD,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,QACD,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,QACD,WAAW;AAAA,UACT,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,QACf,CAAC;AAAA,QACD,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,EAAE,UAAU,6BAA6B;AAAA,IAC9C,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBZ,CAAC;AAAA,EACD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACnC,CAAC;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,mBAAmB,MAAM;AAAA,MAChC,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,QACP,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,EAAE,UAAU,4BAA4B;AAAA,IAC7C,UAAU;AAAA;AAAA;AAAA;AAAA,EAIZ,CAAC;AAAA,EACD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACpB,OAAO;AAAA,IACT,CAAC;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM,CAAC,eAAe,QAAQ;AAAA,MAC9B,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,QACP,aAAa;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,QACD,WAAW;AAAA,UACT,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,EAAE,UAAU,2BAA2B;AAAA,IAC5C,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQZ,CAAC;AACH;;;ADx8BA,SAAS,SAAS,sBAAsB,cAAc;;;AGHtD,SAAS,KAAAA,UAAS;AAIlB,IAAM,oCAAoCC,GAAE,OAAO;AAAA,EACjD,eAAeA,GAAE;AAAA,IACfA,GAAE,OAAO;AAAA,MACP,IAAIA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACpB,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACtB,eAAeA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAChD,CAAC;AAAA,EACH;AAAA,EACA,SAASA,GAAE,QAAQ;AACrB,CAAC;AAED,IAAM,mBAAmBA,GAAE,OAAO;AAAA,EAChC,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,IAAIA,GAAE,OAAO,EAAE,IAAI,CAAC;AACtB,CAAC;AAED,IAAM,wBAAwBA,GAAE,OAAO;AAAA,EACrC,MAAMA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,EACjD,QAAQA,GACL;AAAA,IACCA,GAAE,OAAO;AAAA,MACP,SAASA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IAC3B,CAAC;AAAA,EACH,EACC,SAAS;AACd,CAAC;AAkBM,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA,UAAU;AACZ,GAGc;AACZ,iBAAe,UAAU;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIqB;AACnB,UAAM,UAAU,IAAI,QAAQ,MAAM,OAAO;AACzC,YAAQ,IAAI,iBAAiB,UAAU,WAAW,EAAE;AAEpD,UAAM,WAAW,MAAM,QAAQ,KAAK;AAAA,MAClC,GAAG;AAAA,MACH;AAAA,IACF,CAAC,EAAE,MAAM,CAAC,UAAmB;AAC3B,YAAM,IAAI;AAAA,QACR,kCAAkC,GAAG;AAAA,QACrC,EAAE,OAAO,MAAM;AAAA,MACjB;AAAA,IACF,CAAC;AAED,UAAM,eAAe,MAAM,SAAS,KAAK,EAAE,MAAM,CAAC,UAAmB;AACnE,YAAM,IAAI;AAAA,QACR,gDAAgD,GAAG;AAAA,QACnD;AAAA,UACE,OAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF,CAAC;AACD,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR,0BAA0B,GAAG,uBAAuB,SAAS,MAAM;AAAA,MACrE;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,MAAM,eAAe;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAAqB;AACnB,YAAM,UAAU,IAAI,QAAQ;AAC5B,cAAQ,IAAI,gBAAgB,kBAAkB;AAE9C,YAAM,iBAAiB,sBAAsB;AAAA,QAC3C,MAAM,UAAU;AAAA,UACd;AAAA,UACA,KAAK,GAAG,UAAU;AAAA,UAClB,MAAM;AAAA,YACJ,QAAQ;AAAA,YACR;AAAA,YACA,MAAM,KAAK,UAAU;AAAA,cACnB;AAAA,cACA;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAEA,UAAI,CAAC,eAAe,SAAS;AAC3B,cAAM,IAAI,SAAS,uCAAuC;AAAA,MAC5D;AAEA,UAAI,eAAe,KAAK,UAAU,eAAe,KAAK,OAAO,SAAS,GAAG;AACvE,cAAM,IAAI;AAAA,UACR,eAAe,KAAK,OAAO,IAAI,CAAC,UAAU,MAAM,OAAO,EAAE,KAAK,IAAI;AAAA,QACpE;AAAA,MACF;AAEA,aAAO,eAAe,KAAK,OAAO,SAAS,KAAK;AAAA,IAClD;AAAA,IAEA,MAAM,mBAAmB,EAAE,YAAY,GAA+B;AACpE,YAAM,iBAAiB,kCAAkC;AAAA,QACvD,MAAM,UAAU;AAAA,UACd;AAAA,UACA,KAAK,GAAG,UAAU;AAAA,QACpB,CAAC;AAAA,MACH;AAEA,UAAI,CAAC,eAAe,SAAS;AAC3B,cAAM,IAAI,SAAS,wCAAwC;AAAA,MAC7D;AAEA,aAAO,eAAe,KAAK,cAAc,IAAI,CAAC,kBAAkB;AAAA,QAC9D,IAAI,aAAa;AAAA,QACjB,MAAM,aAAa;AAAA,QACnB,eAAe,aAAa,iBAAiB;AAAA,MAC/C,EAAE;AAAA,IACJ;AAAA,IAEA,MAAM,UAAU;AAAA,MACd;AAAA,MACA;AAAA,IACF,GAA8C;AAC5C,YAAM,iBAAiB,iBAAiB;AAAA,QACtC,MAAM,UAAU;AAAA,UACd;AAAA,UACA,KAAK,GAAG,UAAU,gBAAgB,MAAM;AAAA,QAC1C,CAAC;AAAA,MACH;AAEA,UAAI,CAAC,eAAe,SAAS;AAC3B,cAAM,IAAI,SAAS,2BAA2B;AAAA,MAChD;AAEA,aAAO,eAAe;AAAA,IACxB;AAAA,EACF;AACF;;;ACxKA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEV,IAAM,0BAA0B;AAChC,IAAM,yBAAyB;AAC/B,IAAM,2BAA2B;AACjC,IAAM,gCAAgC;AACtC,IAAM,4BAA4B;AAClC,IAAM,sBAAsB;AAWnC,SAAS,iCAAyC;AAChD,QAAM,wBAAwB,QAAQ,IAAI,wBAAwB;AAClE,MAAI,uBAAuB;AACzB,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,aAAa,UAAU;AACjC,WAAO,KAAK,KAAK,GAAG,QAAQ,GAAG,WAAW,qBAAqB;AAAA,EACjE;AAEA,MAAI,QAAQ,aAAa,SAAS;AAChC,UAAM,mBAAmB,QAAQ,IAAI,SAAS;AAC9C,WAAO,oBAAoB,KAAK,KAAK,GAAG,QAAQ,GAAG,WAAW,SAAS;AAAA,EACzE;AAEA,SAAO,QAAQ,IAAI,iBAAiB,KAAK,KAAK,KAAK,GAAG,QAAQ,GAAG,SAAS;AAC5E;AAEO,SAAS,mBAAkC;AAChD,QAAM,kBAAkB,KAAK;AAAA,IAC3B,+BAA+B;AAAA,IAC/B;AAAA,EACF;AAEA,SAAO;AAAA,IACL,eAAe,QAAQ,IAAI,iBAAiB,KAAK;AAAA,IACjD,eAAe,KAAK,KAAK,iBAAiB,mBAAmB;AAAA,IAC7D,cAAc;AAAA,IACd,gBAAgB,QAAQ,IAAI,kBAAkB,KAAK;AAAA,IACnD,qBAAqB;AAAA,IACrB,GAAI,QAAQ,IAAI,uBAAuB,IACnC,EAAE,qBAAqB,QAAQ,IAAI,uBAAuB,EAAE,IAC5D,CAAC;AAAA,EACP;AACF;AAEO,SAAS,sBAAsB,QAA+B;AACnE,SAAO,OAAO;AAChB;;;ACzDA,OAAO,YAAY;AAGnB,SAAS,yBAAyB,SAA6B;AAC7D,SAAO,GAAG,QAAQ,QAAQ,IAAI,QAAQ,MAAM;AAC9C;AAEO,SAAS,8BACd,aACmB;AACnB,SAAO;AAAA,IACL,MAAM,MAAM,SAAS;AACnB,YAAM,OAAO;AAAA,QACX;AAAA,QACA,yBAAyB,OAAO;AAAA,MAClC;AAAA,IACF;AAAA,IACA,MAAM,KAAK,SAAS;AAClB,aAAO,OAAO,YAAY,aAAa,yBAAyB,OAAO,CAAC;AAAA,IAC1E;AAAA,IACA,MAAM,KAAK,SAAS,cAAc;AAChC,YAAM,OAAO;AAAA,QACX;AAAA,QACA,yBAAyB,OAAO;AAAA,QAChC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AC5BA,SAAS,OAAO,UAAU,IAAI,iBAAiB;AAC/C,OAAOC,WAAU;AACjB,SAAS,KAAAC,UAAS;AAGX,IAAM,mBAAmBC,GAAE,OAAO;AAAA,EACvC,UAAUA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC1B,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,QAAQA,GAAE,OAAO,EAAE,IAAI,CAAC;AAC1B,CAAC;AAEM,IAAM,wBAAwBA,GAAE,OAAO;AAAA,EAC5C,IAAIA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACpB,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,eAAeA,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AACnD,CAAC;AAEM,IAAM,iBAAiBA,GAAE,OAAO;AAAA,EACrC,SAAS;AAAA,EACT,cAAcA,GAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAeA,GAAE,OAAO,EAAE,SAAS;AAAA,EACnC,eAAeA,GAAE,MAAM,qBAAqB;AAC9C,CAAC;AAkBM,SAAS,qBAAqB,eAAmC;AACtE,SAAO;AAAA,IACL,MAAM,QAAQ;AACZ,YAAM,GAAG,eAAe,EAAE,OAAO,KAAK,CAAC;AAAA,IACzC;AAAA,IACA,MAAM,OAAO;AACX,UAAI;AACF,cAAM,eAAe,MAAM,SAAS,eAAe,MAAM;AACzD,cAAM,SAAS,eAAe,UAAU,KAAK,MAAM,YAAY,CAAC;AAChE,YAAI,CAAC,OAAO,SAAS;AACnB,gBAAM,IAAI,SAAS,8BAA8B;AAAA,QACnD;AAEA,eAAO,OAAO;AAAA,MAChB,SAAS,OAAgB;AACvB,YACE,iBAAiB,SACjB,UAAU,SACV,MAAM,SAAS,UACf;AACA,iBAAO;AAAA,QACT;AAEA,YAAI,iBAAiB,UAAU;AAC7B,gBAAM;AAAA,QACR;AAEA,cAAM,IAAI,SAAS,6BAA6B,EAAE,OAAO,MAAM,CAAC;AAAA,MAClE;AAAA,IACF;AAAA,IACA,MAAM,KAAK,OAAO;AAChB,YAAM,MAAMC,MAAK,QAAQ,aAAa,GAAG,EAAE,WAAW,KAAK,CAAC;AAC5D,YAAM,UAAU,eAAe,GAAG,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,CAAI;AAAA,IACtE;AAAA,EACF;AACF;;;AC3EA,SAAS,KAAAC,UAAS;AAGlB,IAAM,uCAAuC;AAE7C,SAAS,mBAA4B;AACnC,QAAM,UAAU,IAAI,QAAQ;AAC5B,UAAQ,IAAI,gBAAgB,mCAAmC;AAC/D,SAAO;AACT;AAEA,IAAM,4BAA4BC,GAAE,OAAO;AAAA,EACzC,aAAaA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,YAAYA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACjD,UAAUA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,WAAWA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,kBAAkBA,GAAE,IAAI;AAAA,EACxB,2BAA2BA,GAAE,IAAI,EAAE,SAAS;AAC9C,CAAC;AAED,IAAM,sBAAsBA,GAAE,OAAO;AAAA,EACnC,cAAcA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC9B,YAAYA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACjD,eAAeA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC/B,YAAYA,GAAE,OAAO,EAAE,SAAS;AAClC,CAAC;AAED,IAAM,mBAAmBA,GAAE,OAAO;AAAA,EAChC,OAAOA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,mBAAmBA,GAAE,OAAO,EAAE,SAAS;AACzC,CAAC;AAED,IAAM,0BAA0BA,GAAE,OAAO;AAAA,EACvC,QAAQA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACnC,KAAKA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAChC,KAAKA,GAAE,OAAO,EAAE,IAAI,CAAC;AACvB,CAAC;AAwBM,SAAS,uBAAuB;AAAA,EACrC,UAAU;AAAA,EACV,QAAQ,OAAO,iBAAgC;AAC7C,UAAM,IAAI,QAAQ,CAAC,YAAY;AAC7B,iBAAW,SAAS,YAAY;AAAA,IAClC,CAAC;AAAA,EACH;AAAA,EACA;AACF,GAIe;AACb,iBAAe,SAAuC;AAAA,IACpD;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAI8B;AAC5B,UAAM,WAAW,MAAM,QAAQ,GAAG,YAAY,GAAG,YAAY,IAAI;AAAA,MAC/D,QAAQ;AAAA,MACR,SAAS,iBAAiB;AAAA,MAC1B,MAAM;AAAA,IACR,CAAC;AAED,UAAM,eAAe,MAAM,SAAS,KAAK;AACzC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,cAAc,iBAAiB,UAAU,YAAY;AAC3D,UAAI,YAAY,SAAS;AACvB,cAAM,IAAI;AAAA,UACR,YAAY,KAAK,qBAAqB,YAAY,KAAK;AAAA,QACzD;AAAA,MACF;AAEA,YAAM,IAAI;AAAA,QACR,qCAAqC,SAAS,MAAM;AAAA,MACtD;AAAA,IACF;AAEA,UAAM,iBAAiB,eAAe,UAAU,YAAY;AAC5D,QAAI,CAAC,eAAe,SAAS;AAC3B,YAAM,IAAI,SAAS,iDAAiD;AAAA,IACtE;AAEA,WAAO,eAAe;AAAA,EACxB;AAEA,SAAO;AAAA,IACL,wBAAwB,aAAa;AACnC,YAAM,CAAC,EAAE,cAAc,IAAI,YAAY,MAAM,GAAG;AAChD,UAAI,CAAC,gBAAgB;AACnB,cAAM,IAAI,SAAS,mCAAmC;AAAA,MACxD;AAEA,YAAM,UAAmB,KAAK;AAAA,QAC5B,OAAO,KAAK,gBAAgB,WAAW,EAAE,SAAS,MAAM;AAAA,MAC1D;AACA,YAAM,eAAe,wBAAwB,UAAU,OAAO;AAC9D,UAAI,CAAC,aAAa,SAAS;AACzB,cAAM,IAAI,SAAS,iDAAiD;AAAA,MACtE;AAEA,aAAO,aAAa;AAAA,IACtB;AAAA,IAEA,MAAM,oBAAoB;AAAA,MACxB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAA2B;AACzB,YAAM,YAAY,KAAK,IAAI,KAAK,oBAAoB,KAAK,MAAM;AAC/D,YAAM,+BACH,mBAAmB,wCAAwC;AAE9D,qBAAe,KACb,0BACwB;AACxB,YAAI,KAAK,IAAI,KAAK,WAAW;AAC3B,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,cAAM,WAAW,IAAI,gBAAgB;AACrC,iBAAS,IAAI,aAAa,QAAQ;AAClC,iBAAS,IAAI,eAAe,UAAU;AACtC,iBAAS;AAAA,UACP;AAAA,UACA;AAAA,QACF;AAEA,cAAM,WAAW,MAAM;AAAA,UACrB,GAAG,YAAY;AAAA,UACf;AAAA,YACE,QAAQ;AAAA,YACR,SAAS,iBAAiB;AAAA,YAC1B,MAAM;AAAA,UACR;AAAA,QACF;AAEA,cAAM,eAAe,MAAM,SAAS,KAAK;AACzC,YAAI,SAAS,IAAI;AACf,gBAAM,eAAe,oBAAoB,UAAU,YAAY;AAC/D,cAAI,CAAC,aAAa,SAAS;AACzB,kBAAM,IAAI,SAAS,+CAA+C;AAAA,UACpE;AAEA,iBAAO,aAAa;AAAA,QACtB;AAEA,cAAM,cAAc,iBAAiB,UAAU,YAAY;AAC3D,YAAI,CAAC,YAAY,SAAS;AACxB,gBAAM,IAAI;AAAA,YACR,kDAAkD,SAAS,MAAM;AAAA,UACnE;AAAA,QACF;AAEA,YAAI,YAAY,KAAK,UAAU,yBAAyB;AACtD,gBAAM,MAAM,wBAAwB;AACpC,iBAAO,KAAK,wBAAwB;AAAA,QACtC;AAEA,YAAI,YAAY,KAAK,UAAU,aAAa;AAC1C,gBAAM,6BAA6B,2BAA2B;AAC9D,gBAAM,MAAM,0BAA0B;AACtC,iBAAO,KAAK,0BAA0B;AAAA,QACxC;AAEA,cAAM,IAAI;AAAA,UACR,YAAY,KAAK,qBAAqB,YAAY,KAAK;AAAA,QACzD;AAAA,MACF;AAEA,aAAO,KAAK,2BAA2B;AAAA,IACzC;AAAA,IAEA,MAAM,cAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAA2B;AACzB,YAAM,WAAW,IAAI,gBAAgB;AACrC,eAAS,IAAI,aAAa,QAAQ;AAClC,eAAS,IAAI,cAAc,eAAe;AAC1C,eAAS,IAAI,iBAAiB,YAAY;AAE1C,UAAI,gBAAgB;AAClB,iBAAS,IAAI,mBAAmB,cAAc;AAAA,MAChD;AAEA,aAAO,SAAS;AAAA,QACd,cAAc;AAAA,QACd;AAAA,QACA,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,yBAAyB,EAAE,SAAS,GAAiC;AACzE,YAAM,WAAW,IAAI,gBAAgB;AACrC,eAAS,IAAI,aAAa,QAAQ;AAElC,aAAO,SAAS;AAAA,QACd,cAAc;AAAA,QACd;AAAA,QACA,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;APhLA,IAAM,mCAAmC,oBAAI,IAAoB;AAAA,EAC/D,CAAC,UAAU,eAAe;AAAA,EAC1B,CAAC,cAAc,mBAAmB;AAAA,EAClC,CAAC,eAAe,qBAAqB;AAAA,EACrC,CAAC,mBAAmB,sCAAsC;AAAA,EAC1D,CAAC,WAAW,gDAAgD;AAAA,EAC5D,CAAC,WAAW,2BAA2B;AACzC,CAAC;AAED,SAAS,6BAA6B,SAA2B;AAC/D,QAAM,wBAAwB,QAAQ,cAAc,KAAK,OAAO;AAChE,UAAQ,gBAAgB,CAAC,SACvB,6BAA6B,sBAAsB,IAAI,CAAC;AAC1D,UAAQ,aAAa,MAAM,IAAI,YAAY;AAE3C,SAAO;AACT;AAEA,SAAS,4BAA4B,eAAwC;AAC3E,QAAM,cAAc,QAAQ,cAAc,IAAI,KAAK,KAAK,GAAG,CAAC;AAC5D,QAAM,kBAAkB,cAAc,IAAI,QACvC,OAAO,CAAC,eAAe,WAAW,QAAQ,EAC1C,IAAI,CAAC,eAAe;AACnB,QAAI,WAAW,cAAc,WAAW;AACtC,aAAO,KAAK,WAAW,QAAQ;AAAA,IACjC;AAEA,QAAI,WAAW,cAAc,UAAU;AACrC,aAAO,KAAK,WAAW,QAAQ;AAAA,IACjC;AAEA,QAAI,WAAW,cAAc,QAAQ;AACnC,aAAO,KAAK,WAAW,QAAQ;AAAA,IACjC;AAEA,QAAI,WAAW,cAAc,gBAAgB;AAC3C,aAAO,KAAK,WAAW,QAAQ;AAAA,IACjC;AAEA,WAAO,KAAK,WAAW,QAAQ,KAAK,WAAW,QAAQ;AAAA,EACzD,CAAC;AACH,QAAM,iBAAiB,CAAC,aAAa,GAAG,eAAe,EAAE,KAAK,GAAG;AAEjE,SAAO;AAAA,IACL;AAAA,IACA,GAAG,cAAc;AAAA,IACjB,GAAG,cAAc;AAAA,EACnB;AACF;AAEA,SAAS,2BAA2B,UAA0B;AAC5D,QAAM,CAAC,cAAc,GAAG,iBAAiB,IAAI,SAAS,MAAM,GAAG;AAC/D,SAAO;AAAA,IACL,gBAAgB;AAAA,IAChB,GAAG,kBAAkB;AAAA,MACnB,CAAC,YAAY,GAAG,QAAQ,CAAC,GAAG,YAAY,KAAK,EAAE,GAAG,QAAQ,MAAM,CAAC,CAAC;AAAA,IACpE;AAAA,EACF,EAAE,KAAK,EAAE;AACX;AAEA,SAAS,wBACP,UACA,YACS;AACT,UAAQ,WAAW,WAAW;AAAA,IAC5B,KAAK,UAAU;AACb,YAAM,eAAe,OAAO,QAAQ;AACpC,UAAI,OAAO,MAAM,YAAY,GAAG;AAC9B,cAAM,IAAI;AAAA,UACR,2BAA2B,WAAW,QAAQ;AAAA,QAChD;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,KAAK,gBAAgB;AACnB,aAAO,SACJ,MAAM,GAAG,EACT,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,CAAC,UAAU,MAAM,SAAS,CAAC;AAAA,IACvC;AAAA,IAEA,KAAK,QAAQ;AACX,UAAI;AACF,eAAO,KAAK,MAAM,QAAQ;AAAA,MAC5B,QAAQ;AACN,cAAM,IAAI;AAAA,UACR,6BAA6B,WAAW,QAAQ;AAAA,QAClD;AAAA,MACF;AAAA,IACF;AAAA,IAEA,KAAK,WAAW;AACd,aAAO;AAAA,IACT;AAAA,IAEA,KAAK,UAAU;AACb,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAASC,UAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,8BAA8B;AAAA,EACrC;AAAA,EACA;AACF,GAGoB;AAClB,QAAM,sBAAsB,cAAc;AAAA,IACxC,CAAC,iBACC,aAAa,OAAO,YAAY,aAAa,SAAS;AAAA,EAC1D;AAEA,MAAI,CAAC,qBAAqB;AACxB,UAAM,IAAI,SAAS,yBAAyB,QAAQ,IAAI;AAAA,EAC1D;AAEA,SAAO;AACT;AAEA,SAAS,4BAA4B;AAAA,EACnC;AAAA,EACA;AACF,GAGoB;AAClB,MAAI,sBAAsB;AACxB,WAAO,8BAA8B;AAAA,MACnC,eAAe,MAAM;AAAA,MACrB,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,MAAM,cAAc;AACvB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO,8BAA8B;AAAA,IACnC,eAAe,MAAM;AAAA,IACrB,UAAU,MAAM;AAAA,EAClB,CAAC;AACH;AAEA,SAAS,qBAAqB,OAAkC;AAC9D,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,SAAS,qDAAqD;AAAA,EAC1E;AAEA,SAAO;AACT;AAEA,SAAS,gBAAgB,IAAW,OAAsB;AACxD,KAAG,KAAK,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AACxC;AAEA,SAAS,0BACP,eACA,SACyB;AACzB,QAAM,YAAY,OAAO;AAAA,IACvB,cAAc,IAAI,QAAQ,QAAQ,CAAC,eAA8B;AAC/D,YAAM,cACJ,QAAQ,2BAA2B,WAAW,QAAQ,CAAC;AACzD,UAAI,gBAAgB,QAAW;AAC7B,eAAO,CAAC;AAAA,MACV;AAEA,aAAO,CAAC,CAAC,WAAW,UAAU,WAAW,CAAC;AAAA,IAC5C,CAAC;AAAA,EACH;AAEA,QAAM,kBAAkB,cAAc,YAAY,UAAU,SAAS;AACrE,MAAI,CAAC,gBAAgB,SAAS;AAC5B,UAAM,IAAI;AAAA,MACR,gBAAgB,MAAM,OAAO,CAAC,GAAG,WAAW;AAAA,IAC9C;AAAA,EACF;AAEA,MAAI,CAACA,UAAS,gBAAgB,IAAI,GAAG;AACnC,UAAM,IAAI,SAAS,wBAAwB;AAAA,EAC7C;AAEA,SAAO,gBAAgB;AACzB;AAEA,eAAe,yBAAyB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACF,GAIqC;AACnC,QAAM,eAAe,MAAM,aAAa,kBAAkB,KAAK,MAAM,OAAO;AAC5E,MAAI,CAAC,cAAc;AACjB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,gBAAgB,MAAM,aAAa,WACtC,cAAc;AAAA,IACb,UAAU,MAAM,QAAQ;AAAA,IACxB;AAAA,IACA;AAAA,EACF,CAAC,EACA,MAAM,CAAC,UAAmB;AACzB,QACE,iBAAiB,YACjB,MAAM,YAAY,oCAClB;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA,EAAE,OAAO,MAAM;AAAA,MACjB;AAAA,IACF;AAEA,UAAM;AAAA,EACR,CAAC;AAEH,QAAM,aAAa,kBAAkB;AAAA,IACnC,MAAM;AAAA,IACN,cAAc;AAAA,EAChB;AAEA,SAAO;AAAA,IACL,aAAa,cAAc;AAAA,EAC7B;AACF;AAEA,eAAe,gBACb,cACA,SACe;AACf,QAAM,WAAW,sBAAsB,aAAa,aAAa;AACjE,QAAM,sBACJ,MAAM,aAAa,WAAW,yBAAyB,EAAE,SAAS,CAAC;AACrE,QAAM,kBACJ,oBAAoB,6BACpB,oBAAoB;AACtB,QAAM,eAAe,QAAQ,OACzB,aAAa,GAAG,QAChB,aAAa,GAAG;AAEpB;AAAA,IACE,sBAAsB;AAAA,MACpB,UAAU,oBAAoB;AAAA,MAC9B;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,aAAa,gBAAgB,eAAe,EAAE,MAAM,MAAM;AAC9D,iBAAa,0BAA0B,CAAC;AAAA,EAC1C,CAAC;AAED,QAAM,gBAAgB,MAAM,aAAa,WAAW,oBAAoB;AAAA,IACtE;AAAA,IACA,YAAY,oBAAoB;AAAA,IAChC,GAAI,oBAAoB,aACpB,EAAE,kBAAkB,oBAAoB,WAAW,IACnD,CAAC;AAAA,IACL,GAAI,oBAAoB,WACpB,EAAE,iBAAiB,oBAAoB,SAAS,IAChD,CAAC;AAAA,EACP,CAAC;AACD,QAAM,oBAAoB,aAAa,WAAW;AAAA,IAChD,cAAc;AAAA,EAChB;AACA,QAAM,CAAC,MAAM,aAAa,IAAI,MAAM,QAAQ,IAAI;AAAA,IAC9C,aAAa,UAAU,UAAU;AAAA,MAC/B,aAAa,cAAc;AAAA,MAC3B,QAAQ,kBAAkB;AAAA,IAC5B,CAAC;AAAA,IACD,aAAa,UAAU,mBAAmB;AAAA,MACxC,aAAa,cAAc;AAAA,IAC7B,CAAC;AAAA,EACH,CAAC;AAED,QAAM,eAAe,kBAAkB,UAAU,cAAc,CAAC,GAAG,MAAM;AACzE,QAAM,YAAsB;AAAA,IAC1B,SAAS;AAAA,MACP;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,IACf;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,EACF;AAEA,QAAM,QAAQ,IAAI;AAAA,IAChB,aAAa,kBAAkB;AAAA,MAC7B,UAAU;AAAA,MACV,cAAc;AAAA,IAChB;AAAA,IACA,aAAa,WAAW,KAAK,SAAS;AAAA,EACxC,CAAC;AAED,QAAM,sBACJ,cAAc,KAAK,CAAC,iBAAiB,aAAa,OAAO,YAAY,KACrE;AAEF,MAAI,QAAQ,MAAM;AAChB,oBAAgB,aAAa,IAAI,SAAS;AAC1C;AAAA,EACF;AAEA,eAAa,GAAG;AAAA,IACd,uBAAuB;AAAA,MACrB,SAAS,UAAU;AAAA,MACnB;AAAA,MACA,mBAAmB,cAAc;AAAA,IACnC,CAAC;AAAA,EACH;AACF;AAEA,eAAe,iBACb,cACA,SACe;AACf,QAAM,QAAQ,MAAM,aAAa,WAAW,KAAK;AACjD,MAAI,OAAO;AACT,UAAM,aAAa,kBAAkB,MAAM,MAAM,OAAO;AAAA,EAC1D;AAEA,QAAM,aAAa,WAAW,MAAM;AAEpC,MAAI,QAAQ,MAAM;AAChB,oBAAgB,aAAa,IAAI,EAAE,WAAW,KAAK,CAAC;AACpD;AAAA,EACF;AAEA,eAAa,GAAG,KAAK,oBAAoB,CAAC;AAC5C;AAEA,eAAe,cACb,cACA,SACe;AACf,QAAM,QAAQ,qBAAqB,MAAM,aAAa,WAAW,KAAK,CAAC;AACvE,MAAI,QAAQ,MAAM;AAChB,oBAAgB,aAAa,IAAI,MAAM,aAAa;AACpD;AAAA,EACF;AAEA,eAAa,GAAG;AAAA,IACd,uBAAuB;AAAA,MACrB,cAAc,MAAM;AAAA,MACpB,eAAe,MAAM;AAAA,MACrB,eAAe,MAAM;AAAA,IACvB,CAAC;AAAA,EACH;AACF;AAEA,eAAe,aACb,cACA,sBACA,SACe;AACf,QAAM,QAAQ,qBAAqB,MAAM,aAAa,WAAW,KAAK,CAAC;AACvE,QAAM,eAAe,8BAA8B;AAAA,IACjD,eAAe,MAAM;AAAA,IACrB,UAAU;AAAA,EACZ,CAAC;AAED,QAAM,YAAsB;AAAA,IAC1B,GAAG;AAAA,IACH,cAAc,aAAa;AAAA,IAC3B,eAAe,aAAa;AAAA,EAC9B;AACA,QAAM,aAAa,WAAW,KAAK,SAAS;AAE5C,MAAI,QAAQ,MAAM;AAChB,oBAAgB,aAAa,IAAI;AAAA,MAC/B,cAAc,aAAa;AAAA,MAC3B;AAAA,IACF,CAAC;AACD;AAAA,EACF;AAEA,eAAa,GAAG,KAAK,mCAAmC,YAAY,CAAC;AACvE;AAEA,eAAe,uBACb,cACA,eACA,gBACe;AACf,QAAM,QAAQ,qBAAqB,MAAM,aAAa,WAAW,KAAK,CAAC;AACvE,QAAM,eAAe,4BAA4B;AAAA,IAC/C;AAAA,IACA,GAAI,eAAe,MAAM,EAAE,sBAAsB,eAAe,IAAI,IAAI,CAAC;AAAA,EAC3E,CAAC;AACD,QAAM,YAAY,0BAA0B,eAAe,cAAc;AACzE,QAAM,EAAE,YAAY,IAAI,MAAM,yBAAyB;AAAA,IACrD;AAAA,IACA,gBAAgB,aAAa;AAAA,IAC7B;AAAA,EACF,CAAC;AAED,QAAM,SAAS,MAAM,aAAa,UAAU,eAAe;AAAA,IACzD;AAAA,IACA,OAAO,cAAc;AAAA,IACrB,WAAW,cAAc,IAAI;AAAA,IAC7B;AAAA,EACF,CAAC;AAED,QAAM,aAAa,WAAW,KAAK;AAAA,IACjC,GAAG;AAAA,IACH,eAAe,aAAa;AAAA,EAC9B,CAAC;AAED,MAAI,eAAe,MAAM;AACvB,oBAAgB,aAAa,IAAI,MAAM;AACvC;AAAA,EACF;AAEA,eAAa,GAAG,KAAK,0BAA0B,MAAM,CAAC;AACxD;AAEA,SAAS,4BAA4B;AAAA,EACnC,SAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKS;AACP,QAAM,cAAc,CAAC,GAAG,cAAc,IAAI,IAAI;AAC9C,QAAM,kBAAkB,YAAY,IAAI;AACxC,MAAI,CAAC,iBAAiB;AACpB,UAAM,IAAI;AAAA,MACR,0CAA0C,cAAc,aAAa;AAAA,IACvE;AAAA,EACF;AAEA,MAAI,gBAAgBA;AACpB,QAAM,mBAA6B,CAAC;AAEpC,aAAW,gBAAgB,aAAa;AACtC,qBAAiB,KAAK,YAAY;AAClC,UAAM,eAAe,iBAAiB,KAAK,GAAG;AAC9C,UAAM,gBAAgB,cAAc,IAAI,YAAY;AACpD,QAAI,eAAe;AACjB,sBAAgB;AAChB;AAAA,IACF;AAEA,UAAM,YAAY,cAAc,QAAQ,YAAY;AACpD,QAAI,iBAAiB,WAAW,GAAG;AACjC,gBAAU,UAAU,mBAAmB;AAAA,IACzC;AACA,UAAM,uBACJ,iBAAiB,WAAW,IACxB,iCAAiC,IAAI,YAAY,IACjD;AACN,QAAI,sBAAsB;AACxB,gBAAU,YAAY,oBAAoB;AAAA,IAC5C;AAEA,kBAAc,IAAI,cAAc,SAAS;AACzC,oBAAgB;AAAA,EAClB;AAEA,QAAM,UAAU,cAAc,QAAQ,eAAe;AACrD,8BAA4B,SAAS,cAAc,aAAa;AAChE,QAAM,qBAAqBA,SAAQ,QAAQ,cAAc,IAAI,MAAM;AAAA,IACjE,QAAQ;AAAA,EACV,CAAC;AACD,8BAA4B,oBAAoB,cAAc,aAAa;AAC7E;AACA,SAAS,4BACP,SACA,cACA,eACM;AACN,UACG,YAAY,cAAc,IAAI,WAAW,EACzC;AAAA,IACC,IAAI;AAAA,MACF;AAAA,MACA;AAAA,IACF,EAAE,UAAU,iBAAiB;AAAA,EAC/B,EACC;AAAA,IACC;AAAA,IACA;AAAA,EAAK;AAAA,MACH;AAAA,MACA,4BAA4B,aAAa;AAAA,IAC3C,CAAC;AAAA,EACH;AAEF,aAAW,cAAc,cAAc,IAAI,SAAS;AAClD,UAAM,cACJ,WAAW,cAAc,YACrB,KAAK,WAAW,QAAQ,KACxB,KAAK,WAAW,QAAQ;AAC9B,UAAM,oBAAoB,WAAW,YACjC,GAAG,WAAW,WAAW,KAAK,WAAW,SAAS,MAClD,WAAW;AACf,UAAM,aAAa,IAAI,OAAO,aAAa,iBAAiB,EAAE;AAAA,MAC5D,cAAc,SAAS,UAAU,mBAAmB;AAAA,IACtD;AAEA,QAAI,WAAW,cAAc,WAAW;AACtC,cAAQ,UAAU,UAAU;AAC5B;AAAA,IACF;AAEA,UAAM,SAAS,CAAC,aACd,wBAAwB,UAAU,UAAU;AAC9C,eAAW,UAAU,MAAM;AAE3B,QAAI,WAAW,UAAU;AACvB,iBAAW,oBAAoB,IAAI;AACnC,cAAQ,UAAU,UAAU;AAC5B;AAAA,IACF;AAEA,YAAQ,UAAU,UAAU;AAAA,EAC9B;AAEA,UAAQ,OAAO,iBAA+B;AAC5C,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA,KAAK,gBAAgB;AAAA,IACvB;AAAA,EACF,CAAC;AACH;AAEO,SAAS,kBAAyB;AACvC,SAAO;AAAA,IACL,MAAM,SAAS;AACb,cAAQ,OAAO,MAAM,GAAG,OAAO;AAAA,CAAI;AAAA,IACrC;AAAA,IACA,KAAK,SAAS;AACZ,cAAQ,OAAO,MAAM,GAAG,OAAO;AAAA,CAAI;AAAA,IACrC;AAAA,EACF;AACF;AAEA,eAAsB,gBAAgB,KAA4B;AAChE,QAAM,UAAU,mBAAmB,GAAG;AAEtC,QAAM,eAAe,MAAM,QAAQ,YAAY,QAAQ,MAAM;AAAA,IAC3D,UAAU;AAAA,IACV,OAAO;AAAA,EACT,CAAC;AAED,QAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,iBAAa,GAAG,SAAS,MAAM;AAC/B,iBAAa,GAAG,SAAS,MAAM;AAC7B,mBAAa,MAAM;AACnB,cAAQ;AAAA,IACV,CAAC;AAAA,EACH,CAAC;AACH;AAEA,SAAS,mBAAmB,KAG1B;AACA,MAAI,QAAQ,aAAa,UAAU;AACjC,WAAO,EAAE,YAAY,QAAQ,MAAM,CAAC,GAAG,EAAE;AAAA,EAC3C;AAEA,MAAI,QAAQ,aAAa,SAAS;AAChC,WAAO,EAAE,YAAY,OAAO,MAAM,CAAC,MAAM,SAAS,IAAI,GAAG,EAAE;AAAA,EAC7D;AAEA,SAAO,EAAE,YAAY,YAAY,MAAM,CAAC,GAAG,EAAE;AAC/C;AAEO,SAAS,4BAA6C;AAC3D,QAAM,gBAAgB,iBAAiB;AAEvC,SAAO;AAAA,IACL,WAAW,uBAAuB;AAAA,MAChC,YAAY,cAAc;AAAA,IAC5B,CAAC;AAAA,IACD,YAAY,uBAAuB;AAAA,MACjC,cAAc,cAAc;AAAA,IAC9B,CAAC;AAAA,IACD,IAAI,gBAAgB;AAAA,IACpB;AAAA,IACA,mBAAmB;AAAA,MACjB,cAAc;AAAA,IAChB;AAAA,IACA;AAAA,IACA,YAAY,qBAAqB,cAAc,aAAa;AAAA,EAC9D;AACF;AAEO,SAAS,aAAa,cAAwC;AACnE,QAAMA,WAAU;AAAA,IACd,IAAI,QAAQ,EACT,KAAK,MAAM,EACX,YAAY,0DAA0D;AAAA,EAC3E,EACG,UAAU,IAAI,OAAO,UAAU,qBAAqB,CAAC,EACrD,mBAAmB,EACnB,yBAAyB,EACzB;AAAA,IACC;AAAA,IACA;AAAA,EAAK,eAAe,eAAe;AAAA,MACjC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC,CAAC;AAAA;AAAA,EAAO,sBAAsB,CAAC;AAAA,EAClC;AAEF,QAAM,cAAc;AAAA,IAClB,IAAI,QAAQ,MAAM,EAAE,YAAY,4BAA4B;AAAA,EAC9D,EACG,UAAU,YAAY,EACtB;AAAA,IACC;AAAA,IACA;AAAA,EAAK,eAAe,YAAY;AAAA,MAC9B;AAAA,MACA;AAAA,IACF,CAAC,CAAC;AAAA,EACJ;AACF,cACG,QAAQ,OAAO,EACf,YAAY,8DAA8D,EAC1E,OAAO,iBAA+B;AACrC,UAAM,gBAAgB,cAAc,KAAK,gBAAgB,CAAC;AAAA,EAC5D,CAAC;AACH,cACG,QAAQ,QAAQ,EAChB,YAAY,8BAA8B,EAC1C,OAAO,iBAA+B;AACrC,UAAM,iBAAiB,cAAc,KAAK,gBAAgB,CAAC;AAAA,EAC7D,CAAC;AACH,EAAAA,SAAQ,WAAW,WAAW;AAE9B,QAAM,aAAa;AAAA,IACjB,IAAI,QAAQ,KAAK,EAAE,YAAY,gCAAgC;AAAA,EACjE,EACG,UAAU,YAAY,EACtB;AAAA,IACC;AAAA,IACA;AAAA,EAAK,eAAe,YAAY;AAAA,MAC9B;AAAA,MACA;AAAA,IACF,CAAC,CAAC;AAAA,EACJ;AACF,aACG,QAAQ,MAAM,EACd,YAAY,qDAAqD,EACjE,OAAO,iBAA+B;AACrC,UAAM,cAAc,cAAc,KAAK,gBAAgB,CAAC;AAAA,EAC1D,CAAC;AACH,aACG,QAAQ,WAAW,EACnB,YAAY,mDAAmD,EAC/D,OAAO,eAA+B,sBAA8B;AACnE,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA,KAAK,gBAAgB;AAAA,IACvB;AAAA,EACF,CAAC;AACH,EAAAA,SAAQ,WAAW,UAAU;AAE7B,QAAM,2BAA2B,oBAAI,IAAqB;AAC1D,aAAW,iBAAiB,gBAAgB;AAC1C,gCAA4B;AAAA,MAC1B,SAAAA;AAAA,MACA,eAAe;AAAA,MACf;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAOA;AACT;;;AQruBA,IAAM,UAAU,aAAa,0BAA0B,CAAC;AAExD,QAAQ,WAAW,QAAQ,IAAI,EAAE,MAAM,CAAC,UAAmB;AACzD,UAAQ,OAAO,MAAM,GAAG,eAAe,gBAAgB,KAAK,CAAC,CAAC;AAAA,CAAI;AAClE,UAAQ,WAAW;AACrB,CAAC;","names":["z","z","path","z","z","path","z","z","isRecord","program"]}
1
+ {"version":3,"sources":["../src/cli-formatting.ts","../src/errors.ts","../../mcp-registry/src/operation-specs.ts","../../mcp-registry/src/operation-spec.ts","../src/program.ts","../src/api.ts","../src/command-presentation.ts","../src/config.ts","../src/keychain.ts","../src/open-url.ts","../src/self-update.ts","../src/state.ts","../src/workos-auth.ts","../src/index.ts"],"sourcesContent":["import { inspect, stripVTControlCharacters, styleText } from 'node:util';\nimport { Help } from 'commander';\nimport type { CliAccount, CliOrganization } from './state';\n\nconst EMPTY_VALUE = '-';\nconst TABLE_GAP = ' ';\ntype TerminalStyle = Parameters<typeof styleText>[0];\n\nfunction applyStyle(\n value: string,\n style: TerminalStyle,\n enabled = true,\n): string {\n if (!enabled) {\n return value;\n }\n\n return styleText(style, value);\n}\n\nfunction indent(text: string, level = 2): string {\n const padding = ' '.repeat(level);\n return text\n .split('\\n')\n .map((line) => `${padding}${line}`)\n .join('\\n');\n}\n\nfunction stripAnsi(value: string): string {\n return stripVTControlCharacters(value);\n}\n\nfunction displayWidth(value: string): number {\n return stripAnsi(value).length;\n}\n\nfunction padCell(value: string, width: number): string {\n return value.padEnd(width + value.length - displayWidth(value));\n}\n\nfunction formatHeading(title: string): string {\n return applyStyle(title, ['bold', 'cyan']);\n}\n\nfunction formatLabel(label: string): string {\n return applyStyle(label, 'dim');\n}\n\nfunction formatCommandSnippet(command: string): string {\n return applyStyle(command, ['bold', 'cyan']);\n}\n\nfunction formatFlag(flag: string): string {\n return applyStyle(flag, ['bold', 'yellow']);\n}\n\nfunction formatErrorLabel(label: string): string {\n return applyStyle(label, ['bold', 'red'], process.stderr.isTTY);\n}\n\nfunction splitWords(value: string): string[] {\n const tokens: string[] = [];\n\n for (const word of value\n .replaceAll('_', ' ')\n .replaceAll('-', ' ')\n .split(' ')) {\n if (word.length === 0) {\n continue;\n }\n\n let currentToken = word[0] ?? '';\n for (const character of word.slice(1)) {\n const previousCharacter = currentToken.at(-1) ?? '';\n const shouldBreak =\n character >= 'A' &&\n character <= 'Z' &&\n ((previousCharacter >= 'a' && previousCharacter <= 'z') ||\n (previousCharacter >= '0' && previousCharacter <= '9'));\n\n if (shouldBreak) {\n tokens.push(currentToken);\n currentToken = character;\n continue;\n }\n\n currentToken += character;\n }\n\n tokens.push(currentToken);\n }\n\n return tokens;\n}\n\nfunction startCase(value: string): string {\n return splitWords(value)\n .map((segment) => {\n const lowerSegment = segment.toLowerCase();\n if (lowerSegment === 'id') {\n return 'ID';\n }\n\n if (lowerSegment === 'url') {\n return 'URL';\n }\n\n if (lowerSegment === 'api') {\n return 'API';\n }\n\n return segment.charAt(0).toUpperCase() + segment.slice(1);\n })\n .join(' ');\n}\n\nfunction formatScalar(value: unknown): string {\n if (value === null || value === undefined) {\n return EMPTY_VALUE;\n }\n\n if (typeof value === 'string') {\n return value.length === 0 ? EMPTY_VALUE : value;\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n\n return inspect(value, {\n breakLength: Infinity,\n colors: false,\n compact: true,\n depth: 2,\n });\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isPrimitiveLike(value: unknown): boolean {\n return (\n value === null ||\n value === undefined ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n );\n}\n\nfunction formatTable(options: {\n columns: readonly string[];\n rows: readonly (readonly string[])[];\n}): string {\n const widths = options.columns.map((column, columnIndex) =>\n Math.max(\n displayWidth(column),\n ...options.rows.map((row) => displayWidth(row[columnIndex] ?? '')),\n ),\n );\n\n const renderRow = (cells: readonly string[]): string =>\n cells\n .map((cell, columnIndex) => padCell(cell, widths[columnIndex] ?? 0))\n .join(TABLE_GAP)\n .trimEnd();\n\n const divider = widths.map((width) => '-'.repeat(width)).join(TABLE_GAP);\n\n return [\n renderRow(options.columns.map((column) => applyStyle(column, 'bold'))),\n divider,\n ...options.rows.map(renderRow),\n ].join('\\n');\n}\n\nfunction canRenderRecordArrayAsTable(\n items: readonly unknown[],\n): items is readonly Record<string, unknown>[] {\n if (items.length === 0 || !items.every(isRecord)) {\n return false;\n }\n\n const keys = [...new Set(items.flatMap((item) => Object.keys(item)))];\n\n if (keys.length === 0 || keys.length > 8) {\n return false;\n }\n\n return items.every((item) => keys.every((key) => isPrimitiveLike(item[key])));\n}\n\nfunction formatRecord(record: Record<string, unknown>): string {\n const entries = Object.entries(record);\n if (entries.length === 0) {\n return EMPTY_VALUE;\n }\n\n const labelWidth = Math.max(\n ...entries.map(([key]) => displayWidth(startCase(key))),\n );\n\n return entries\n .map(([key, value]) => {\n const label = `${startCase(key)}:`;\n if (isPrimitiveLike(value)) {\n return `${padCell(formatLabel(label), labelWidth + 1)} ${formatScalar(value)}`;\n }\n\n return `${formatLabel(label)}\\n${indent(formatHumanReadableOutput(value))}`;\n })\n .join('\\n');\n}\n\nfunction formatArray(items: readonly unknown[]): string {\n if (items.length === 0) {\n return 'No results.';\n }\n\n if (items.every(isPrimitiveLike)) {\n return items.map((item) => `- ${formatScalar(item)}`).join('\\n');\n }\n\n if (canRenderRecordArrayAsTable(items)) {\n const keys = [...new Set(items.flatMap((item) => Object.keys(item)))];\n\n return formatTable({\n columns: keys.map((key) => startCase(key)),\n rows: items.map((item) => keys.map((key) => formatScalar(item[key]))),\n });\n }\n\n return items\n .map((item, index) => {\n const title = formatHeading(`Item ${index + 1}`);\n return `${title}\\n${indent(formatHumanReadableOutput(item))}`;\n })\n .join('\\n\\n');\n}\n\nfunction renderKeyValueBlock(entries: readonly [string, string][]): string {\n const labelWidth = Math.max(...entries.map(([label]) => displayWidth(label)));\n return entries\n .map(\n ([label, value]) =>\n `${padCell(formatLabel(`${label}:`), labelWidth + 1)} ${value}`,\n )\n .join('\\n');\n}\n\nfunction renderSection(title: string, bodyLines: readonly string[]): string {\n return [formatHeading(title), '', ...bodyLines].join('\\n');\n}\n\nexport class MagicalHelp extends Help {\n private outputHasColors = process.stdout.isTTY;\n\n public constructor() {\n super();\n this.helpWidth = 96;\n this.showGlobalOptions = true;\n this.sortSubcommands = true;\n }\n\n public override prepareContext(contextOptions: {\n error?: boolean;\n helpWidth?: number;\n outputHasColors?: boolean;\n }): void {\n super.prepareContext(contextOptions);\n this.outputHasColors =\n contextOptions.outputHasColors ?? process.stdout.isTTY;\n }\n\n public override styleTitle(str: string): string {\n return applyStyle(str, ['bold', 'cyan'], this.outputHasColors);\n }\n\n public override styleCommandText(str: string): string {\n return applyStyle(str, ['bold', 'cyan'], this.outputHasColors);\n }\n\n public override styleSubcommandText(str: string): string {\n return applyStyle(str, ['bold', 'cyan'], this.outputHasColors);\n }\n\n public override styleOptionText(str: string): string {\n return applyStyle(str, ['bold', 'yellow'], this.outputHasColors);\n }\n\n public override styleArgumentText(str: string): string {\n return applyStyle(str, ['bold', 'green'], this.outputHasColors);\n }\n\n public override styleDescriptionText(str: string): string {\n return applyStyle(str, 'dim', this.outputHasColors);\n }\n}\n\nexport function formatAuthLoginPrompt(options: {\n userCode: string;\n verificationUrl: string;\n}): string {\n return renderSection('Sign In With Your Browser', [\n renderKeyValueBlock([\n ['Open', options.verificationUrl],\n ['Code', options.userCode],\n ]),\n ]);\n}\n\nexport function formatAuthLoginSuccess(options: {\n account: CliAccount;\n defaultOrganization: CliOrganization | null;\n organizationCount: number;\n}): string {\n return renderSection('Signed In', [\n renderKeyValueBlock([\n ['Account', options.account.email ?? options.account.userId],\n ['Organizations', String(options.organizationCount)],\n [\n 'Default org',\n options.defaultOrganization\n ? `${options.defaultOrganization.name} (${options.defaultOrganization.id})`\n : 'None selected',\n ],\n ]),\n ]);\n}\n\nexport function formatBrowserOpenFallback(): string {\n return 'Browser auto-open failed. Paste the URL above into any browser.';\n}\n\nexport function formatLogoutSuccess(): string {\n return renderSection('Signed Out', ['Saved CLI auth state was cleared.']);\n}\n\nexport function formatOrganizationList(options: {\n defaultOrgId: string | null;\n lastUsedOrgId: string | null;\n organizations: readonly CliOrganization[];\n}): string {\n if (options.organizations.length === 0) {\n return renderSection('Organizations', ['No organizations are available.']);\n }\n\n const rows = options.organizations.map((organization) => {\n const status = [\n options.defaultOrgId === organization.id ? 'default' : null,\n options.lastUsedOrgId === organization.id ? 'last used' : null,\n ]\n .filter((value) => value !== null)\n .join(', ');\n\n return [\n status || EMPTY_VALUE,\n organization.name,\n organization.id,\n organization.primaryDomain ?? EMPTY_VALUE,\n ];\n });\n\n return renderSection('Organizations', [\n formatTable({\n columns: ['Status', 'Name', 'ID', 'Primary domain'],\n rows,\n }),\n ]);\n}\n\nexport function formatDefaultOrganizationSelection(\n organization: CliOrganization,\n): string {\n return renderSection('Default Organization Updated', [\n `${organization.name} (${organization.id})`,\n ]);\n}\n\nexport function formatHumanReadableOutput(value: unknown): string {\n if (isPrimitiveLike(value)) {\n return formatScalar(value);\n }\n\n if (Array.isArray(value)) {\n return formatArray(value);\n }\n\n if (isRecord(value)) {\n return formatRecord(value);\n }\n\n return inspect(value, {\n colors: false,\n depth: null,\n });\n}\n\nexport function formatCliError(message: string): string {\n return `${formatErrorLabel('Error:')} ${message}`;\n}\n\nexport function formatExamples(\n title: string,\n examples: readonly string[],\n): string {\n return [\n formatHeading(title),\n '',\n ...examples.map((example) => ` ${formatCommandSnippet(example)}`),\n ].join('\\n');\n}\n\nexport function formatOutputModesNote(): string {\n return renderSection('Output', [\n `Human-readable by default.`,\n `Add ${formatFlag('--json')} before or after a command for stable machine-readable output.`,\n ]);\n}\n","export class CliError extends Error {\n public constructor(\n message: string,\n options?: {\n cause?: unknown;\n },\n ) {\n super(message, options);\n this.name = 'CliError';\n }\n}\n\nexport function getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n\n return 'Unknown CLI error';\n}\n","import { z } from 'zod';\nimport { createOperationSpec } from './operation-spec';\nimport type { CliOptionSpec, OperationSpec } from './operation-types';\n\nfunction stringOption({\n description,\n flagName,\n inputKey,\n required = false,\n}: {\n description: string;\n flagName: string;\n inputKey: string;\n required?: boolean;\n}): CliOptionSpec {\n return {\n description,\n flagName,\n inputKey,\n required,\n valueType: 'string',\n };\n}\n\nfunction numberOption({\n description,\n flagName,\n inputKey,\n required = false,\n}: {\n description: string;\n flagName: string;\n inputKey: string;\n required?: boolean;\n}): CliOptionSpec {\n return {\n description,\n flagName,\n inputKey,\n required,\n valueType: 'number',\n };\n}\n\nfunction booleanOption({\n description,\n flagName,\n inputKey,\n}: {\n description: string;\n flagName: string;\n inputKey: string;\n}): CliOptionSpec {\n return {\n description,\n flagName,\n inputKey,\n valueType: 'boolean',\n };\n}\n\nfunction stringArrayOption({\n description,\n flagName,\n inputKey,\n}: {\n description: string;\n flagName: string;\n inputKey: string;\n}): CliOptionSpec {\n return {\n description,\n flagName,\n inputKey,\n valueHint: 'comma-separated',\n valueType: 'string-array',\n };\n}\n\nfunction jsonOption({\n description,\n flagName,\n inputKey,\n required = false,\n}: {\n description: string;\n flagName: string;\n inputKey: string;\n required?: boolean;\n}): CliOptionSpec {\n return {\n description,\n flagName,\n inputKey,\n required,\n valueHint: 'JSON',\n valueType: 'json',\n };\n}\n\nconst jsonObjectSchema = z.record(z.string(), z.unknown());\n\nexport const operationSpecs = [\n createOperationSpec({\n operationName: 'GetAgent',\n kind: 'query',\n inputSchema: z.object({\n id: z.string().min(1),\n }),\n cli: {\n name: 'get-agent',\n path: ['agents', 'get'],\n description: 'Fetch a single agent with config and schema fields.',\n resultKey: 'agent',\n options: [\n stringOption({\n inputKey: 'id',\n flagName: 'id',\n description: 'Agent ID.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'agent.graphql' },\n document: `# Query to fetch a single agent with all fields\n# Config selection is limited to scalar/JSON fields to keep responses flat\nquery GetAgent($id: ID!) {\n agent(id: $id) {\n id\n name\n description\n instructions\n organizationId\n createdAt\n updatedAt\n sourceAgentId\n inputSchema\n outputSchema\n config {\n type\n language\n model\n tools\n maxSessionMessages\n commonParametersSchema\n taskQueue\n waitUponQueueing\n queueableAgentIds\n additionalSystemPrompt\n ignoreUnstableSessionState\n }\n childAgentIds\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAgentRun',\n kind: 'query',\n inputSchema: z.object({\n id: z.string().min(1),\n }),\n cli: {\n name: 'get-agent-run',\n path: ['agent-runs', 'get'],\n description: 'Fetch a single agent run.',\n resultKey: 'agentRun',\n options: [\n stringOption({\n inputKey: 'id',\n flagName: 'id',\n description: 'Agent run ID.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'agentRun.graphql' },\n document: `# Query a single agent run\nquery GetAgentRun($id: ID!) {\n agentRun(id: $id) {\n id\n agentVersionId\n agentName\n status\n statusDetail\n isChildAgent\n input\n startedAt\n finishedAt\n parentAgentRunId\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAutomationAgents',\n kind: 'query',\n inputSchema: z.object({\n id: z.string().min(1),\n }),\n cli: {\n name: 'get-automation-agents',\n path: ['automations', 'agents'],\n description: 'Fetch the agents attached to an automation.',\n resultKey: 'automation',\n options: [\n stringOption({\n inputKey: 'id',\n flagName: 'id',\n description: 'Automation ID.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'automationAgents.graphql' },\n document: `# Query to fetch automation agents with flat fields only\n# Excludes nested agent config and schemas for MCP tool simplicity\nquery GetAutomationAgents($id: ID!) {\n automation(id: $id) {\n id\n name\n agents {\n automationId\n agentId\n isTrigger\n agent {\n id\n name\n description\n instructions\n organizationId\n createdAt\n updatedAt\n sourceAgentId\n childAgentIds\n }\n }\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAutomationRun',\n kind: 'query',\n inputSchema: z.object({\n id: z.string().min(1),\n }),\n cli: {\n name: 'get-automation-run',\n path: ['automation-runs', 'get'],\n description: 'Fetch a single automation run.',\n resultKey: 'automationRun',\n options: [\n stringOption({\n inputKey: 'id',\n flagName: 'id',\n description: 'Automation run ID.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'automationRun.graphql' },\n document: `# Query a full automation run details payload\nquery GetAutomationRun($id: ID!) {\n automationRun(id: $id) {\n id\n automationId\n status\n statusDetail\n summary\n invocationType\n input\n additionalPrompt\n debugUrl\n createdAt\n startedAt\n pausedAt\n finishedAt\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAutomationRunAgentRuns',\n kind: 'query',\n inputSchema: z.object({\n automationRunId: z.string().min(1),\n }),\n cli: {\n name: 'get-automation-run-agent-runs',\n path: ['automation-runs', 'agent-runs'],\n description: 'Fetch ordered agent runs for an automation run.',\n resultKey: 'automationRunAgentRuns',\n options: [\n stringOption({\n inputKey: 'automationRunId',\n flagName: 'automation-run-id',\n description: 'Automation run ID.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'automationRunAgentRuns.graphql' },\n document: `# Query ordered agent runs for an automation run\nquery GetAutomationRunAgentRuns($automationRunId: ID!) {\n automationRunAgentRuns(automationRunId: $automationRunId) {\n id\n agentVersionId\n agentName\n status\n statusDetail\n isChildAgent\n input\n startedAt\n finishedAt\n parentAgentRunId\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAutomationRunIterations',\n kind: 'query',\n inputSchema: z.object({\n automationRunId: z.string().min(1),\n agentRunId: z.string().min(1).optional(),\n limit: z.number().int().positive().optional(),\n reverse: z.boolean().optional(),\n }),\n cli: {\n name: 'get-automation-run-iterations',\n path: ['automation-runs', 'iterations'],\n description: 'Fetch ordered iterations for an automation run.',\n resultKey: 'automationRunIterations',\n options: [\n stringOption({\n inputKey: 'automationRunId',\n flagName: 'automation-run-id',\n description: 'Automation run ID.',\n required: true,\n }),\n stringOption({\n inputKey: 'agentRunId',\n flagName: 'agent-run-id',\n description: 'Optional agent run ID to filter by.',\n }),\n numberOption({\n inputKey: 'limit',\n flagName: 'limit',\n description: 'Maximum number of iterations to return.',\n }),\n booleanOption({\n inputKey: 'reverse',\n flagName: 'reverse',\n description: 'Return newest iterations first.',\n }),\n ],\n },\n mcp: { fileName: 'automationRunIterations.graphql' },\n document: `# Query iterations for an automation run with optional filtering by agent run\nquery GetAutomationRunIterations(\n $automationRunId: ID!\n $agentRunId: ID\n $limit: Int\n $reverse: Boolean\n) {\n automationRunIterations(\n automationRunId: $automationRunId\n agentRunId: $agentRunId\n limit: $limit\n reverse: $reverse\n ) {\n id\n sequence\n agentRunId\n metadata\n startedAt\n finishedAt\n totalDurationMs\n llmResponseDurationMs\n withMarksScreenshotUrl\n withMarksMimeType\n memories {\n id\n type\n value\n sequence\n screenshotUrl\n screenshotMimeType\n }\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAutomationRuns',\n kind: 'query',\n inputSchema: z.object({\n automationId: z.string().min(1),\n status: z.array(z.string().min(1)).optional(),\n invocationType: z.array(z.string().min(1)).optional(),\n limit: z.number().int().positive().optional(),\n page: z.number().int().positive().optional(),\n }),\n cli: {\n name: 'get-automation-runs',\n path: ['automation-runs', 'list'],\n description: 'Fetch automation run history.',\n resultKey: 'automationRuns',\n options: [\n stringOption({\n inputKey: 'automationId',\n flagName: 'automation-id',\n description: 'Automation ID.',\n required: true,\n }),\n stringArrayOption({\n inputKey: 'status',\n flagName: 'status',\n description: 'Optional run statuses.',\n }),\n stringArrayOption({\n inputKey: 'invocationType',\n flagName: 'invocation-type',\n description: 'Optional invocation types.',\n }),\n numberOption({\n inputKey: 'limit',\n flagName: 'limit',\n description: 'Maximum number of runs to return.',\n }),\n numberOption({\n inputKey: 'page',\n flagName: 'page',\n description: 'Page number.',\n }),\n ],\n },\n mcp: { fileName: 'automationRuns.graphql' },\n document: `# Query automation run history for a specific automation with optional filters\nquery GetAutomationRuns(\n $automationId: ID!\n $status: [RunStatus!]\n $invocationType: [InvocationType!]\n $limit: Int\n $page: Int\n) {\n automationRuns(\n automationId: $automationId\n status: $status\n invocationType: $invocationType\n limit: $limit\n page: $page\n ) {\n id\n automationId\n status\n statusDetail\n invocationType\n summary\n createdAt\n startedAt\n pausedAt\n finishedAt\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAutomations',\n kind: 'query',\n inputSchema: z.object({\n limit: z.number().positive().optional(),\n order: jsonObjectSchema.optional(),\n where: jsonObjectSchema.optional(),\n }),\n cli: {\n name: 'get-automations',\n path: ['automations', 'list'],\n description: 'Fetch automations with optional list filters.',\n resultKey: 'automations',\n options: [\n numberOption({\n inputKey: 'limit',\n flagName: 'limit',\n description: 'Maximum number of automations to return.',\n }),\n jsonOption({\n inputKey: 'order',\n flagName: 'order-json',\n description: 'GraphQL order object.',\n }),\n jsonOption({\n inputKey: 'where',\n flagName: 'where-json',\n description: 'GraphQL filter object.',\n }),\n ],\n },\n mcp: { fileName: 'automations.graphql' },\n document: `# Query to fetch automations with flat fields only (no nested objects)\n# Excludes config and agents for MCP tool simplicity\nquery GetAutomations(\n $limit: Float\n $order: AutomationsOrder\n $where: AutomationsWhereInput\n) {\n automations(limit: $limit, order: $order, where: $where) {\n id\n name\n organizationId\n createdAt\n updatedAt\n environment\n lastSavedAt\n publishedVersionId\n draftVersionId\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAutomationWithConfigs',\n kind: 'query',\n inputSchema: z.object({\n id: z.string().min(1),\n }),\n cli: {\n name: 'get-automation-with-configs',\n path: ['automations', 'get'],\n description: 'Fetch a single automation with config fields.',\n resultKey: 'automation',\n options: [\n stringOption({\n inputKey: 'id',\n flagName: 'id',\n description: 'Automation ID.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'automationWithConfigs.graphql' },\n document: `# Query to fetch a single automation with config but excluding agents\n# Config selection is limited to scalar/JSON fields to keep responses flat\nquery GetAutomationWithConfigs($id: ID!) {\n automation(id: $id) {\n id\n name\n organizationId\n createdAt\n updatedAt\n environment\n lastSavedAt\n publishedVersionId\n draftVersionId\n config {\n cronExpression\n calendars\n interval\n enableVisualChangeChecks\n isCDPforSOM\n humanInterventionTimeoutSeconds\n availableSlots\n additionalSystemPrompt\n ignoreUnstableSessionState\n }\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAvailableCommands',\n kind: 'query',\n inputSchema: z.object({\n env: z.string().min(1),\n }),\n cli: {\n name: 'get-available-commands',\n path: ['catalog', 'commands'],\n description: 'Fetch available command definitions by environment.',\n resultKey: 'availableCommands',\n options: [\n stringOption({\n inputKey: 'env',\n flagName: 'env',\n description: 'Environment name.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'availableCommands.graphql' },\n document: `# Query to fetch available command definitions by environment\nquery GetAvailableCommands($env: AvailableCommandsEnv!) {\n availableCommands(env: $env) {\n id\n description\n inputSchema\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAvailableModels',\n kind: 'query',\n inputSchema: z.object({\n agentId: z.string().min(1),\n }),\n cli: {\n name: 'get-available-models',\n path: ['catalog', 'models'],\n description: 'Fetch available model definitions for an agent.',\n resultKey: 'availableModels',\n options: [\n stringOption({\n inputKey: 'agentId',\n flagName: 'agent-id',\n description: 'Agent ID.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'availableModels.graphql' },\n document: `# Query to fetch available model definitions and pools for a specific agent\nquery GetAvailableModels($agentId: String!) {\n availableModels(agentId: $agentId) {\n availableModelPools {\n name\n poolId\n models {\n id\n name\n description\n status\n provider\n }\n }\n allAvailableModels {\n id\n name\n description\n status\n provider\n }\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetAvailableTools',\n kind: 'query',\n inputSchema: z.object({\n env: z.string().min(1),\n automationId: z.string().min(1).optional(),\n }),\n cli: {\n name: 'get-available-tools',\n path: ['catalog', 'tools'],\n description: 'Fetch available tool definitions by environment.',\n resultKey: 'availableTools',\n options: [\n stringOption({\n inputKey: 'env',\n flagName: 'env',\n description: 'Environment name.',\n required: true,\n }),\n stringOption({\n inputKey: 'automationId',\n flagName: 'automation-id',\n description: 'Optional automation ID.',\n }),\n ],\n },\n mcp: { fileName: 'availableTools.graphql' },\n document: `# Query to fetch available tool definitions by environment\nquery GetAvailableTools($env: AvailableCommandsEnv!, $automationId: String) {\n availableTools(env: $env, automationId: $automationId) {\n id\n description\n inputSchema\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'CreateAutomation',\n kind: 'mutation',\n inputSchema: z.object({\n input: jsonObjectSchema,\n }),\n cli: {\n name: 'create-automation',\n path: ['automations', 'create'],\n description: 'Create a draft automation.',\n resultKey: 'createAutomation',\n options: [\n jsonOption({\n inputKey: 'input',\n flagName: 'input-json',\n description: 'CreateAutomationInput payload.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'createAutomation.graphql' },\n document: `# Mutation to create a draft automation with optional initial values\n# Returns flat fields only for MCP tool simplicity\nmutation CreateAutomation($input: CreateAutomationInput!) {\n createAutomation(input: $input) {\n id\n name\n organizationId\n createdAt\n updatedAt\n environment\n lastSavedAt\n publishedVersionId\n draftVersionId\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'GetGraphqlSchema',\n kind: 'query',\n inputSchema: z.object({}),\n cli: {\n name: 'get-graphql-schema',\n path: ['graphql', 'schema'],\n description: 'Fetch GraphQL schema metadata.',\n resultKey: 'graphqlSchema',\n options: [],\n },\n mcp: { fileName: 'graphqlSchema.graphql' },\n document: `# Query to fetch full GraphQL schema metadata.\n# Uses the first-class graphqlSchema query field to avoid __schema validation\n# issues in MCP tool-load paths while still returning introspection JSON.\n# Response can be large: call sparingly (typically once per task/session) and\n# reuse cached results.\nquery GetGraphqlSchema {\n graphqlSchema\n}`,\n }),\n createOperationSpec({\n operationName: 'PauseAutomationRun',\n kind: 'mutation',\n inputSchema: z.object({\n automationRunId: z.string().min(1),\n }),\n cli: {\n name: 'pause-automation-run',\n path: ['automation-runs', 'pause'],\n description: 'Pause an automation run.',\n resultKey: 'pauseAutomationRun',\n options: [\n stringOption({\n inputKey: 'automationRunId',\n flagName: 'automation-run-id',\n description: 'Automation run ID.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'pauseAutomationRun.graphql' },\n document: `# Mutation to pause an automation run\nmutation PauseAutomationRun($automationRunId: ID!) {\n pauseAutomationRun(automationRunId: $automationRunId)\n}`,\n }),\n createOperationSpec({\n operationName: 'RerunAutomation',\n kind: 'mutation',\n inputSchema: z.object({\n automationRunId: z.string().min(1),\n additionalPrompt: z.string().min(1).optional(),\n idempotencyKey: z.string().min(1),\n }),\n cli: {\n name: 'rerun-automation',\n path: ['automation-runs', 'rerun'],\n description: 'Rerun an existing automation run.',\n resultKey: 'rerunAutomation',\n options: [\n stringOption({\n inputKey: 'automationRunId',\n flagName: 'automation-run-id',\n description: 'Automation run ID.',\n required: true,\n }),\n stringOption({\n inputKey: 'additionalPrompt',\n flagName: 'additional-prompt',\n description: 'Optional prompt appended to the rerun.',\n }),\n stringOption({\n inputKey: 'idempotencyKey',\n flagName: 'idempotency-key',\n description: 'Idempotency key for the rerun request.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'rerunAutomation.graphql' },\n document: `# Mutation to rerun an existing automation run\nmutation RerunAutomation(\n $automationRunId: ID!\n $additionalPrompt: String\n $idempotencyKey: String!\n) {\n rerunAutomation(\n automationRunId: $automationRunId\n additionalPrompt: $additionalPrompt\n idempotencyKey: $idempotencyKey\n ) {\n automationRunId\n workflowId\n workflowRunId\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'ResumeAutomationRun',\n kind: 'mutation',\n inputSchema: z.object({\n automationRunId: z.string().min(1),\n message: z.string().min(1).optional(),\n }),\n cli: {\n name: 'resume-automation-run',\n path: ['automation-runs', 'resume'],\n description: 'Resume a paused automation run.',\n resultKey: 'resumeAutomationRun',\n options: [\n stringOption({\n inputKey: 'automationRunId',\n flagName: 'automation-run-id',\n description: 'Automation run ID.',\n required: true,\n }),\n stringOption({\n inputKey: 'message',\n flagName: 'message',\n description: 'Optional resume message.',\n }),\n ],\n },\n mcp: { fileName: 'resumeAutomationRun.graphql' },\n document: `# Mutation to resume an automation run\nmutation ResumeAutomationRun($automationRunId: ID!, $message: String) {\n resumeAutomationRun(automationRunId: $automationRunId, message: $message)\n}`,\n }),\n createOperationSpec({\n operationName: 'RunDraftAutomation',\n kind: 'mutation',\n inputSchema: z.object({\n draftAutomationId: z.string().min(1),\n agentId: z.string().min(1),\n idempotencyKey: z.string().min(1),\n input: z.unknown().optional(),\n additionalPrompt: z.string().min(1).optional(),\n }),\n cli: {\n name: 'run-draft-automation',\n path: ['automations', 'run-draft'],\n description: 'Run a draft automation with an explicit trigger agent.',\n resultKey: 'runDraftAutomation',\n options: [\n stringOption({\n inputKey: 'draftAutomationId',\n flagName: 'draft-automation-id',\n description: 'Draft automation ID.',\n required: true,\n }),\n stringOption({\n inputKey: 'agentId',\n flagName: 'agent-id',\n description: 'Trigger agent ID.',\n required: true,\n }),\n stringOption({\n inputKey: 'idempotencyKey',\n flagName: 'idempotency-key',\n description: 'Idempotency key for the run request.',\n required: true,\n }),\n jsonOption({\n inputKey: 'input',\n flagName: 'input-json',\n description: 'Optional JSON input payload.',\n }),\n stringOption({\n inputKey: 'additionalPrompt',\n flagName: 'additional-prompt',\n description: 'Optional prompt appended to the run.',\n }),\n ],\n },\n mcp: { fileName: 'runDraftAutomation.graphql' },\n document: `# Mutation to run a draft automation with an explicit agent.\n# \\`draftAutomationId\\` is the draft automation entity ID (\\`Automation.id\\`), not \\`draftVersionId\\`.\nmutation RunDraftAutomation(\n $draftAutomationId: ID!\n $agentId: ID!\n $idempotencyKey: String!\n $input: JSON\n $additionalPrompt: String\n) {\n runDraftAutomation(\n draftAutomationId: $draftAutomationId\n agentId: $agentId\n idempotencyKey: $idempotencyKey\n input: $input\n additionalPrompt: $additionalPrompt\n ) {\n automationRunId\n workflowId\n workflowRunId\n }\n}`,\n }),\n createOperationSpec({\n operationName: 'StopAutomationRun',\n kind: 'mutation',\n inputSchema: z.object({\n automationRunId: z.string().min(1),\n }),\n cli: {\n name: 'stop-automation-run',\n path: ['automation-runs', 'stop'],\n description: 'Stop an automation run.',\n resultKey: 'stopAutomationRun',\n options: [\n stringOption({\n inputKey: 'automationRunId',\n flagName: 'automation-run-id',\n description: 'Automation run ID.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'stopAutomationRun.graphql' },\n document: `# Mutation to stop an automation run\nmutation StopAutomationRun($automationRunId: ID!) {\n stopAutomationRun(automationRunId: $automationRunId)\n}`,\n }),\n createOperationSpec({\n operationName: 'UpdateAutomationById',\n kind: 'mutation',\n inputSchema: z.object({\n id: z.string().min(1),\n input: jsonObjectSchema,\n }),\n cli: {\n name: 'update-automation-by-id',\n path: ['automations', 'update'],\n description: 'Update an automation.',\n resultKey: 'updateAutomation',\n options: [\n stringOption({\n inputKey: 'id',\n flagName: 'id',\n description: 'Automation ID.',\n required: true,\n }),\n jsonOption({\n inputKey: 'input',\n flagName: 'input-json',\n description: 'UpdateAutomationInput payload.',\n required: true,\n }),\n ],\n },\n mcp: { fileName: 'updateAutomation.graphql' },\n document: `# Mutation to update an automation\n# Returns only id and lastSavedAt for MCP tool simplicity\nmutation UpdateAutomationById($id: ID!, $input: UpdateAutomationInput!) {\n updateAutomation(id: $id, input: $input) {\n id\n lastSavedAt\n }\n}`,\n }),\n] as const satisfies readonly OperationSpec[];\n","import type { z } from 'zod';\nimport type { OperationSpec } from './operation-types';\n\nfunction stripLeadingGraphqlComments(document: string): string {\n return document.replace(/^(?:\\s*#.*\\n)+/u, '').trimStart();\n}\n\nfunction assertDocumentMatchesOperation({\n document,\n kind,\n operationName,\n}: {\n document: string;\n kind: OperationSpec['kind'];\n operationName: string;\n}): void {\n const normalizedDocument = stripLeadingGraphqlComments(document);\n const match =\n /^(?<actualKind>query|mutation)\\s+(?<actualOperationName>[_A-Za-z][_0-9A-Za-z]*)/u.exec(\n normalizedDocument,\n );\n\n const actualKind = match?.groups?.['actualKind'];\n const actualOperationName = match?.groups?.['actualOperationName'];\n if (!actualKind || !actualOperationName) {\n throw new Error(\n `Operation \"${operationName}\" is missing a top-level GraphQL ${kind} definition.`,\n );\n }\n\n if (actualKind !== kind || actualOperationName !== operationName) {\n throw new Error(\n `Operation \"${operationName}\" does not match its GraphQL document (${actualKind} ${actualOperationName}).`,\n );\n }\n}\n\nexport function createOperationSpec<TInputSchema extends z.ZodTypeAny>(\n spec: OperationSpec<TInputSchema>,\n): OperationSpec<TInputSchema> {\n assertDocumentMatchesOperation(spec);\n return spec;\n}\n","import { operationSpecs } from '@magical/mcp-registry';\nimport type { CliOptionSpec, OperationSpec } from '@magical/mcp-registry';\nimport { Command, InvalidArgumentError, Option } from 'commander';\nimport { createMagicalApiClient } from './api';\nimport type { ApiClient } from './api';\nimport {\n formatAuthLoginPrompt,\n formatAuthLoginSuccess,\n formatBrowserOpenFallback,\n formatDefaultOrganizationSelection,\n formatExamples,\n formatHumanReadableOutput,\n formatLogoutSuccess,\n formatOrganizationList,\n formatOutputModesNote,\n} from './cli-formatting';\nimport {\n configureCommandPresentation,\n createOperationHelpExamples,\n rootOperationalGroupDescriptions,\n} from './command-presentation';\nimport { getRuntimeConfig, requireWorkosClientId } from './config';\nimport type { RuntimeConfig } from './config';\nimport { CliError } from './errors';\nimport { createKeytarRefreshTokenStore } from './keychain';\nimport { openExternalUrl } from './open-url';\nimport { selfUpdateInstalledCli } from './self-update';\nimport { createFileStateStore } from './state';\nimport type {\n CliOrganization,\n CliState,\n RefreshTokenStore,\n StateStore,\n} from './state';\nimport { createWorkosAuthClient } from './workos-auth';\nimport type { AuthClient } from './workos-auth';\n\nexport interface CliIo {\n error: (message: string) => void;\n info: (message: string) => void;\n}\n\nexport interface CliDependencies {\n apiClient: ApiClient;\n authClient: AuthClient;\n io: CliIo;\n openExternalUrl: (url: string) => Promise<void>;\n refreshTokenStore: RefreshTokenStore;\n runtimeConfig: RuntimeConfig;\n selfUpdateCli?: () => Promise<{\n installPrefix: string;\n packageSpecifier: string;\n registryUrl: string;\n }>;\n stateStore: StateStore;\n}\n\ntype JsonCommandOptions = Record<string, unknown> & {\n json?: boolean;\n};\n\ninterface OperationalCommandOptions {\n json?: boolean;\n org?: string;\n}\n\nfunction buildCommandOptionProperty(flagName: string): string {\n const [firstSegment, ...remainingSegments] = flagName.split('-');\n return [\n firstSegment ?? '',\n ...remainingSegments.map(\n (segment) => `${segment[0]?.toUpperCase() ?? ''}${segment.slice(1)}`,\n ),\n ].join('');\n}\n\nfunction parseCommandOptionValue(\n rawValue: string,\n optionSpec: CliOptionSpec,\n): unknown {\n switch (optionSpec.valueType) {\n case 'number': {\n const parsedNumber = Number(rawValue);\n if (Number.isNaN(parsedNumber)) {\n throw new InvalidArgumentError(\n `Expected a number for --${optionSpec.flagName}.`,\n );\n }\n\n return parsedNumber;\n }\n\n case 'string-array': {\n return rawValue\n .split(',')\n .map((value) => value.trim())\n .filter((value) => value.length > 0);\n }\n\n case 'json': {\n try {\n return JSON.parse(rawValue) as unknown;\n } catch {\n throw new InvalidArgumentError(\n `Expected valid JSON for --${optionSpec.flagName}.`,\n );\n }\n }\n\n case 'boolean': {\n return rawValue;\n }\n\n case 'string': {\n return rawValue;\n }\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction resolveOrganizationBySelector({\n organizations,\n selector,\n}: {\n organizations: CliOrganization[];\n selector: string;\n}): CliOrganization {\n const matchedOrganization = organizations.find(\n (organization) =>\n organization.id === selector || organization.name === selector,\n );\n\n if (!matchedOrganization) {\n throw new CliError(`Unknown organization \"${selector}\".`);\n }\n\n return matchedOrganization;\n}\n\nfunction resolveSelectedOrganization({\n organizationSelector,\n state,\n}: {\n organizationSelector?: string;\n state: CliState;\n}): CliOrganization {\n if (organizationSelector) {\n return resolveOrganizationBySelector({\n organizations: state.organizations,\n selector: organizationSelector,\n });\n }\n\n if (!state.defaultOrgId) {\n throw new CliError(\n 'No default organization is configured. Use \"mgcl org use <org>\" or pass --org.',\n );\n }\n\n return resolveOrganizationBySelector({\n organizations: state.organizations,\n selector: state.defaultOrgId,\n });\n}\n\nfunction requireLoggedInState(state: CliState | null): CliState {\n if (!state) {\n throw new CliError('You are not logged in. Run \"mgcl auth login\" first.');\n }\n\n return state;\n}\n\nfunction writeJsonOutput(io: CliIo, value: unknown): void {\n io.info(JSON.stringify(value, null, 2));\n}\n\nfunction collectOperationVariables(\n operationSpec: OperationSpec,\n options: Record<string, unknown>,\n): Record<string, unknown> {\n const variables = Object.fromEntries(\n operationSpec.cli.options.flatMap((optionSpec: CliOptionSpec) => {\n const optionValue =\n options[buildCommandOptionProperty(optionSpec.flagName)];\n if (optionValue === undefined) {\n return [];\n }\n\n return [[optionSpec.inputKey, optionValue]];\n }),\n );\n\n const parsedVariables = operationSpec.inputSchema.safeParse(variables);\n if (!parsedVariables.success) {\n throw new CliError(\n parsedVariables.error.issues[0]?.message ?? 'Invalid command input.',\n );\n }\n\n if (!isRecord(parsedVariables.data)) {\n throw new CliError('Invalid command input.');\n }\n\n return parsedVariables.data;\n}\n\nasync function withOrgScopedAccessToken({\n dependencies,\n organizationId,\n state,\n}: {\n dependencies: CliDependencies;\n organizationId: string;\n state: CliState;\n}): Promise<{ accessToken: string }> {\n const refreshToken = await dependencies.refreshTokenStore.load(state.account);\n if (!refreshToken) {\n throw new CliError(\n 'No refresh token was found. Run \"mgcl auth login\" again.',\n );\n }\n\n const tokenResponse = await dependencies.authClient\n .refreshTokens({\n clientId: state.account.clientId,\n organizationId,\n refreshToken,\n })\n .catch((error: unknown) => {\n if (\n error instanceof CliError &&\n error.message === 'Refresh token already exchanged.'\n ) {\n throw new CliError(\n 'Refresh token already exchanged. Run \"mgcl auth login\" again.',\n { cause: error },\n );\n }\n\n throw error;\n });\n\n await dependencies.refreshTokenStore.save(\n state.account,\n tokenResponse.refresh_token,\n );\n\n return {\n accessToken: tokenResponse.access_token,\n };\n}\n\nasync function handleAuthLogin(\n dependencies: CliDependencies,\n options: JsonCommandOptions,\n): Promise<void> {\n const clientId = requireWorkosClientId(dependencies.runtimeConfig);\n const deviceAuthorization =\n await dependencies.authClient.startDeviceAuthorization({ clientId });\n const verificationUrl =\n deviceAuthorization.verification_uri_complete ??\n deviceAuthorization.verification_uri;\n const promptWriter = options.json\n ? dependencies.io.error\n : dependencies.io.info;\n\n promptWriter(\n formatAuthLoginPrompt({\n userCode: deviceAuthorization.user_code,\n verificationUrl,\n }),\n );\n\n await dependencies.openExternalUrl(verificationUrl).catch(() => {\n promptWriter(formatBrowserOpenFallback());\n });\n\n const tokenResponse = await dependencies.authClient.pollForDeviceTokens({\n clientId,\n deviceCode: deviceAuthorization.device_code,\n ...(deviceAuthorization.expires_in\n ? { expiresInSeconds: deviceAuthorization.expires_in }\n : {}),\n ...(deviceAuthorization.interval\n ? { intervalSeconds: deviceAuthorization.interval }\n : {}),\n });\n const accessTokenClaims = dependencies.authClient.decodeAccessTokenClaims(\n tokenResponse.access_token,\n );\n const [user, organizations] = await Promise.all([\n dependencies.apiClient.fetchUser({\n accessToken: tokenResponse.access_token,\n userId: accessTokenClaims.sub,\n }),\n dependencies.apiClient.fetchOrganizations({\n accessToken: tokenResponse.access_token,\n }),\n ]);\n\n const defaultOrgId = accessTokenClaims.org_id ?? organizations[0]?.id ?? null;\n const nextState: CliState = {\n account: {\n clientId,\n email: user.email,\n userId: user.id,\n },\n defaultOrgId,\n lastUsedOrgId: defaultOrgId,\n organizations,\n };\n\n await Promise.all([\n dependencies.refreshTokenStore.save(\n nextState.account,\n tokenResponse.refresh_token,\n ),\n dependencies.stateStore.save(nextState),\n ]);\n\n const defaultOrganization =\n organizations.find((organization) => organization.id === defaultOrgId) ??\n null;\n\n if (options.json) {\n writeJsonOutput(dependencies.io, nextState);\n return;\n }\n\n dependencies.io.info(\n formatAuthLoginSuccess({\n account: nextState.account,\n defaultOrganization,\n organizationCount: organizations.length,\n }),\n );\n}\n\nasync function handleAuthLogout(\n dependencies: CliDependencies,\n options: JsonCommandOptions,\n): Promise<void> {\n const state = await dependencies.stateStore.load();\n if (state) {\n await dependencies.refreshTokenStore.clear(state.account);\n }\n\n await dependencies.stateStore.clear();\n\n if (options.json) {\n writeJsonOutput(dependencies.io, { loggedOut: true });\n return;\n }\n\n dependencies.io.info(formatLogoutSuccess());\n}\n\nasync function handleOrgList(\n dependencies: CliDependencies,\n options: JsonCommandOptions,\n): Promise<void> {\n const state = requireLoggedInState(await dependencies.stateStore.load());\n if (options.json) {\n writeJsonOutput(dependencies.io, state.organizations);\n return;\n }\n\n dependencies.io.info(\n formatOrganizationList({\n defaultOrgId: state.defaultOrgId,\n lastUsedOrgId: state.lastUsedOrgId,\n organizations: state.organizations,\n }),\n );\n}\n\nasync function handleOrgUse(\n dependencies: CliDependencies,\n organizationSelector: string,\n options: JsonCommandOptions,\n): Promise<void> {\n const state = requireLoggedInState(await dependencies.stateStore.load());\n const organization = resolveOrganizationBySelector({\n organizations: state.organizations,\n selector: organizationSelector,\n });\n\n const nextState: CliState = {\n ...state,\n defaultOrgId: organization.id,\n lastUsedOrgId: organization.id,\n };\n await dependencies.stateStore.save(nextState);\n\n if (options.json) {\n writeJsonOutput(dependencies.io, {\n defaultOrgId: organization.id,\n organization,\n });\n return;\n }\n\n dependencies.io.info(formatDefaultOrganizationSelection(organization));\n}\n\nasync function handleSelfUpdate(\n dependencies: CliDependencies,\n options: JsonCommandOptions,\n): Promise<void> {\n const { selfUpdateCli } = dependencies;\n if (!selfUpdateCli) {\n throw new CliError('Self-update is not configured for this CLI instance.');\n }\n\n const updateResult = await selfUpdateCli();\n\n if (options.json) {\n writeJsonOutput(dependencies.io, {\n installPrefix: updateResult.installPrefix,\n packageSpecifier: updateResult.packageSpecifier,\n registryUrl: updateResult.registryUrl,\n updated: true,\n });\n return;\n }\n\n dependencies.io.info(\n `Updated mgcl via npm (${updateResult.packageSpecifier}) in ${updateResult.installPrefix}.`,\n );\n}\n\nasync function handleOperationCommand(\n dependencies: CliDependencies,\n operationSpec: OperationSpec,\n commandOptions: Record<string, unknown> & OperationalCommandOptions,\n): Promise<void> {\n const state = requireLoggedInState(await dependencies.stateStore.load());\n const organization = resolveSelectedOrganization({\n state,\n ...(commandOptions.org ? { organizationSelector: commandOptions.org } : {}),\n });\n const variables = collectOperationVariables(operationSpec, commandOptions);\n const { accessToken } = await withOrgScopedAccessToken({\n dependencies,\n organizationId: organization.id,\n state,\n });\n\n const result = await dependencies.apiClient.executeGraphQl({\n accessToken,\n query: operationSpec.document,\n resultKey: operationSpec.cli.resultKey,\n variables,\n });\n\n await dependencies.stateStore.save({\n ...state,\n lastUsedOrgId: organization.id,\n });\n\n if (commandOptions.json) {\n writeJsonOutput(dependencies.io, result);\n return;\n }\n\n dependencies.io.info(formatHumanReadableOutput(result));\n}\n\nfunction addRegistryOperationCommand({\n program,\n commandGroups,\n dependencies,\n operationSpec,\n}: {\n program: Command;\n commandGroups: Map<string, Command>;\n dependencies: CliDependencies;\n operationSpec: OperationSpec;\n}): void {\n const commandPath = [...operationSpec.cli.path];\n const leafCommandName = commandPath.pop();\n if (!leafCommandName) {\n throw new CliError(\n `CLI path is missing a leaf command for ${operationSpec.operationName}.`,\n );\n }\n\n let parentCommand = program;\n const currentGroupPath: string[] = [];\n\n for (const groupSegment of commandPath) {\n currentGroupPath.push(groupSegment);\n const groupPathKey = currentGroupPath.join(' ');\n const existingGroup = commandGroups.get(groupPathKey);\n if (existingGroup) {\n parentCommand = existingGroup;\n continue;\n }\n\n const nextGroup = parentCommand.command(groupSegment);\n if (currentGroupPath.length === 1) {\n nextGroup.helpGroup('Operation groups:');\n }\n const rootGroupDescription =\n currentGroupPath.length === 1\n ? rootOperationalGroupDescriptions.get(groupSegment)\n : undefined;\n if (rootGroupDescription) {\n nextGroup.description(rootGroupDescription);\n }\n\n commandGroups.set(groupPathKey, nextGroup);\n parentCommand = nextGroup;\n }\n\n const command = parentCommand.command(leafCommandName);\n configureOperationalCommand(command, dependencies, operationSpec);\n const legacyAliasCommand = program.command(operationSpec.cli.name, {\n hidden: true,\n });\n configureOperationalCommand(legacyAliasCommand, dependencies, operationSpec);\n}\nfunction configureOperationalCommand(\n command: Command,\n dependencies: CliDependencies,\n operationSpec: OperationSpec,\n): void {\n command\n .description(operationSpec.cli.description)\n .addOption(\n new Option(\n '--org <org>',\n 'Organization ID or exact organization name to use.',\n ).helpGroup('Shared options:'),\n )\n .addHelpText(\n 'after',\n `\\n${formatExamples(\n 'Examples',\n createOperationHelpExamples(operationSpec),\n )}`,\n );\n\n for (const optionSpec of operationSpec.cli.options) {\n const optionFlags =\n optionSpec.valueType === 'boolean'\n ? `--${optionSpec.flagName}`\n : `--${optionSpec.flagName} <value>`;\n const optionDescription = optionSpec.valueHint\n ? `${optionSpec.description} (${optionSpec.valueHint})`\n : optionSpec.description;\n const nextOption = new Option(optionFlags, optionDescription).helpGroup(\n operationSpec.kind === 'query' ? 'Query options:' : 'Mutation options:',\n );\n\n if (optionSpec.valueType === 'boolean') {\n command.addOption(nextOption);\n continue;\n }\n\n const parser = (rawValue: string): unknown =>\n parseCommandOptionValue(rawValue, optionSpec);\n nextOption.argParser(parser);\n\n if (optionSpec.required) {\n nextOption.makeOptionMandatory(true);\n command.addOption(nextOption);\n continue;\n }\n\n command.addOption(nextOption);\n }\n\n command.action(async function (this: Command) {\n await handleOperationCommand(\n dependencies,\n operationSpec,\n this.optsWithGlobals(),\n );\n });\n}\n\nexport function createConsoleIo(): CliIo {\n return {\n error(message) {\n process.stderr.write(`${message}\\n`);\n },\n info(message) {\n process.stdout.write(`${message}\\n`);\n },\n };\n}\n\nexport function createDefaultDependencies(): CliDependencies {\n const runtimeConfig = getRuntimeConfig();\n const selfUpdateOptions = {\n ...(runtimeConfig.cliDistTag ? { distTag: runtimeConfig.cliDistTag } : {}),\n ...(runtimeConfig.npmRegistryUrl\n ? { registryUrl: runtimeConfig.npmRegistryUrl }\n : {}),\n };\n\n return {\n apiClient: createMagicalApiClient({\n apiBaseUrl: runtimeConfig.magicalApiUrl,\n }),\n authClient: createWorkosAuthClient({\n workosApiUrl: runtimeConfig.workosApiUrl,\n }),\n io: createConsoleIo(),\n openExternalUrl,\n refreshTokenStore: createKeytarRefreshTokenStore(\n runtimeConfig.keychainServiceName,\n ),\n runtimeConfig,\n selfUpdateCli: async () => selfUpdateInstalledCli(selfUpdateOptions),\n stateStore: createFileStateStore(runtimeConfig.stateFilePath),\n };\n}\n\nexport function buildProgram(dependencies: CliDependencies): Command {\n const program = configureCommandPresentation(\n new Command()\n .name('mgcl')\n .description('Run Magical shared MCP operations from the command line.'),\n )\n .addOption(new Option('--json', 'Render JSON output.'))\n .addOption(\n new Option(\n '--update',\n 'Update mgcl to the latest published npm release.',\n ),\n )\n .showHelpAfterError()\n .showSuggestionAfterError()\n .addHelpText(\n 'after',\n `\\n${formatExamples('Quick start', [\n 'mgcl auth login',\n 'mgcl org list',\n 'mgcl automations list --limit 10',\n 'mgcl automation-runs get --id <run-id>',\n 'mgcl update',\n ])}\\n\\n${formatOutputModesNote()}`,\n );\n program.action(async function (this: Command) {\n const options = this.optsWithGlobals<\n JsonCommandOptions & {\n update?: boolean;\n }\n >();\n\n if (options.update) {\n await handleSelfUpdate(dependencies, options);\n return;\n }\n\n this.outputHelp();\n });\n\n const authCommand = configureCommandPresentation(\n new Command('auth').description('Manage CLI authentication.'),\n )\n .helpGroup('Workspace:')\n .addHelpText(\n 'after',\n `\\n${formatExamples('Examples', [\n 'mgcl auth login',\n 'mgcl auth logout',\n ])}`,\n );\n authCommand\n .command('login')\n .description('Authenticate with Magical and load organization memberships.')\n .action(async function (this: Command) {\n await handleAuthLogin(dependencies, this.optsWithGlobals());\n });\n authCommand\n .command('logout')\n .description('Remove local CLI auth state.')\n .action(async function (this: Command) {\n await handleAuthLogout(dependencies, this.optsWithGlobals());\n });\n program.addCommand(authCommand);\n\n const orgCommand = configureCommandPresentation(\n new Command('org').description('Manage organization selection.'),\n )\n .helpGroup('Workspace:')\n .addHelpText(\n 'after',\n `\\n${formatExamples('Examples', [\n 'mgcl org list',\n 'mgcl org use <org>',\n ])}`,\n );\n orgCommand\n .command('list')\n .description('List organizations available to the saved identity.')\n .action(async function (this: Command) {\n await handleOrgList(dependencies, this.optsWithGlobals());\n });\n orgCommand\n .command('use <org>')\n .description('Set the default organization by ID or exact name.')\n .action(async function (this: Command, organizationSelector: string) {\n await handleOrgUse(\n dependencies,\n organizationSelector,\n this.optsWithGlobals(),\n );\n });\n program.addCommand(orgCommand);\n\n const updateCommand = configureCommandPresentation(\n new Command('update').description(\n 'Update mgcl to the latest published npm release.',\n ),\n )\n .helpGroup('Workspace:')\n .addHelpText(\n 'after',\n `\\n${formatExamples('Examples', ['mgcl update', 'mgcl --update'])}`,\n );\n updateCommand.action(async function (this: Command) {\n await handleSelfUpdate(dependencies, this.optsWithGlobals());\n });\n program.addCommand(updateCommand);\n\n const operationalCommandGroups = new Map<string, Command>();\n for (const operationSpec of operationSpecs) {\n addRegistryOperationCommand({\n program,\n commandGroups: operationalCommandGroups,\n dependencies,\n operationSpec,\n });\n }\n\n return program;\n}\n","import { z } from 'zod';\nimport { CliError } from './errors';\nimport type { CliOrganization } from './state';\n\nconst workosOrganizationsResponseSchema = z.object({\n organizations: z.array(\n z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n primaryDomain: z.string().nullable().optional(),\n }),\n ),\n success: z.boolean(),\n});\n\nconst workosUserSchema = z.object({\n email: z.string().nullable(),\n id: z.string().min(1),\n});\n\nconst graphQlResponseSchema = z.object({\n data: z.record(z.string(), z.unknown()).optional(),\n errors: z\n .array(\n z.object({\n message: z.string().min(1),\n }),\n )\n .optional(),\n});\nconst apiErrorResponseSchema = z.object({\n errors: z\n .array(\n z.object({\n message: z.string().min(1),\n }),\n )\n .optional(),\n message: z.string().min(1).optional(),\n});\n\nfunction getApiErrorDetail(responseBody: unknown): string | null {\n const parsedResponse = apiErrorResponseSchema.safeParse(responseBody);\n if (!parsedResponse.success) {\n return null;\n }\n\n if (parsedResponse.data.message) {\n return parsedResponse.data.message;\n }\n\n if (!parsedResponse.data.errors || parsedResponse.data.errors.length === 0) {\n return null;\n }\n\n return parsedResponse.data.errors.map((error) => error.message).join('\\n');\n}\n\nexport interface ApiClient {\n executeGraphQl: (input: {\n accessToken: string;\n query: string;\n resultKey: string;\n variables: Record<string, unknown>;\n }) => Promise<unknown>;\n fetchOrganizations: (input: {\n accessToken: string;\n }) => Promise<CliOrganization[]>;\n fetchUser: (input: {\n accessToken: string;\n userId: string;\n }) => Promise<z.infer<typeof workosUserSchema>>;\n}\n\nexport function createMagicalApiClient({\n apiBaseUrl,\n fetchFn = fetch,\n}: {\n apiBaseUrl: string;\n fetchFn?: typeof fetch;\n}): ApiClient {\n async function fetchJson({\n accessToken,\n url,\n init,\n }: {\n accessToken: string;\n init?: RequestInit;\n url: string;\n }): Promise<unknown> {\n const headers = new Headers(init?.headers);\n headers.set('authorization', `Bearer ${accessToken}`);\n\n const response = await fetchFn(url, {\n ...init,\n headers,\n }).catch((error: unknown) => {\n throw new CliError(\n `Failed to reach Magical API at ${url}. Check MAGICAL_API_URL and make sure service-main is running.`,\n { cause: error },\n );\n });\n\n const responseBody = await response.json().catch((error: unknown) => {\n if (!response.ok) {\n throw new CliError(\n `Magical API request to ${url} failed with status ${response.status}.`,\n {\n cause: error,\n },\n );\n }\n\n throw new CliError(\n `Magical API returned a non-JSON response for ${url}.`,\n {\n cause: error,\n },\n );\n });\n if (!response.ok) {\n const errorDetail = getApiErrorDetail(responseBody);\n\n throw new CliError(\n `Magical API request to ${url} failed with status ${response.status}${errorDetail ? `: ${errorDetail}` : '.'}`,\n );\n }\n\n return responseBody;\n }\n\n return {\n async executeGraphQl({\n accessToken,\n query,\n resultKey,\n variables,\n }): Promise<unknown> {\n const headers = new Headers();\n headers.set('content-type', 'application/json');\n\n const parsedResponse = graphQlResponseSchema.safeParse(\n await fetchJson({\n accessToken,\n url: `${apiBaseUrl}/graphql`,\n init: {\n method: 'POST',\n headers,\n body: JSON.stringify({\n query,\n variables,\n }),\n },\n }),\n );\n\n if (!parsedResponse.success) {\n throw new CliError('GraphQL response payload was invalid.');\n }\n\n if (parsedResponse.data.errors && parsedResponse.data.errors.length > 0) {\n throw new CliError(\n parsedResponse.data.errors.map((error) => error.message).join('\\n'),\n );\n }\n\n return parsedResponse.data.data?.[resultKey] ?? null;\n },\n\n async fetchOrganizations({ accessToken }): Promise<CliOrganization[]> {\n const parsedResponse = workosOrganizationsResponseSchema.safeParse(\n await fetchJson({\n accessToken,\n url: `${apiBaseUrl}/workos/organizations`,\n }),\n );\n\n if (!parsedResponse.success) {\n throw new CliError('Organization list payload was invalid.');\n }\n\n return parsedResponse.data.organizations.map((organization) => ({\n id: organization.id,\n name: organization.name,\n primaryDomain: organization.primaryDomain ?? null,\n }));\n },\n\n async fetchUser({\n accessToken,\n userId,\n }): Promise<z.infer<typeof workosUserSchema>> {\n const parsedResponse = workosUserSchema.safeParse(\n await fetchJson({\n accessToken,\n url: `${apiBaseUrl}/workos/user/${userId}`,\n }),\n );\n\n if (!parsedResponse.success) {\n throw new CliError('User payload was invalid.');\n }\n\n return parsedResponse.data;\n },\n };\n}\n","import type { OperationSpec } from '@magical/mcp-registry';\nimport type { Command } from 'commander';\nimport { MagicalHelp } from './cli-formatting';\n\nexport const rootOperationalGroupDescriptions = new Map<string, string>([\n ['agents', 'Query agents.'],\n ['agent-runs', 'Query agent runs.'],\n ['automations', 'Manage automations.'],\n ['automation-runs', 'Inspect and control automation runs.'],\n ['catalog', 'Inspect available commands, models, and tools.'],\n ['graphql', 'Inspect GraphQL metadata.'],\n]);\n\nexport function configureCommandPresentation(command: Command): Command {\n const originalCreateCommand = command.createCommand.bind(command);\n command.createCommand = (name: string) =>\n configureCommandPresentation(originalCreateCommand(name));\n command.createHelp = () => new MagicalHelp();\n\n return command;\n}\n\nexport function createOperationHelpExamples(\n operationSpec: OperationSpec,\n): string[] {\n const baseCommand = `mgcl ${operationSpec.cli.path.join(' ')}`;\n const requiredOptions = operationSpec.cli.options\n .filter((optionSpec) => optionSpec.required)\n .map((optionSpec) => {\n if (optionSpec.valueType === 'boolean') {\n return `--${optionSpec.flagName}`;\n }\n\n if (optionSpec.valueType === 'number') {\n return `--${optionSpec.flagName} 10`;\n }\n\n if (optionSpec.valueType === 'json') {\n return `--${optionSpec.flagName} '{...}'`;\n }\n\n if (optionSpec.valueType === 'string-array') {\n return `--${optionSpec.flagName} value-a,value-b`;\n }\n\n return `--${optionSpec.flagName} <${optionSpec.flagName}>`;\n });\n const baseInvocation = [baseCommand, ...requiredOptions].join(' ');\n\n return [\n baseInvocation,\n `${baseInvocation} --org <org>`,\n `${baseInvocation} --json`,\n ];\n}\n","import os from 'node:os';\nimport path from 'node:path';\n\nexport const DEFAULT_MAGICAL_API_URL = 'https://api-agt.getmagical.io';\nexport const DEFAULT_WORKOS_API_URL = 'https://api.workos.com';\nexport const DEFAULT_WORKOS_CLIENT_ID = 'client_01JJZ6XJ1RF248P20WF63M4VAM';\nexport const DEFAULT_KEYCHAIN_SERVICE_NAME = '@getmagical/mcp-cli';\nexport const DEFAULT_CLI_DIST_TAG = 'latest';\nexport const DEFAULT_CLI_NPM_REGISTRY_URL = 'https://registry.npmjs.org/';\nexport const CLI_CONFIG_DIRECTORY_NAME = 'magical-mcp-cli';\nexport const CLI_STATE_FILE_NAME = 'state.json';\n\nexport interface RuntimeConfig {\n cliDistTag?: string;\n keychainServiceName: string;\n magicalApiUrl: string;\n npmRegistryUrl?: string;\n stateFilePath: string;\n workosApiUrl: string;\n workosClientId: string;\n workosAuthkitDomain?: string;\n}\n\nfunction resolvePlatformConfigDirectory(): string {\n const customConfigDirectory = process.env['MAGICAL_CLI_CONFIG_DIR'];\n if (customConfigDirectory) {\n return customConfigDirectory;\n }\n\n if (process.platform === 'darwin') {\n return path.join(os.homedir(), 'Library', 'Application Support');\n }\n\n if (process.platform === 'win32') {\n const appDataDirectory = process.env['APPDATA'];\n return appDataDirectory ?? path.join(os.homedir(), 'AppData', 'Roaming');\n }\n\n return process.env['XDG_CONFIG_HOME'] ?? path.join(os.homedir(), '.config');\n}\n\nexport function getRuntimeConfig(): RuntimeConfig {\n const configDirectory = path.join(\n resolvePlatformConfigDirectory(),\n CLI_CONFIG_DIRECTORY_NAME,\n );\n\n return {\n cliDistTag: process.env['MAGICAL_CLI_DIST_TAG'] ?? DEFAULT_CLI_DIST_TAG,\n magicalApiUrl: process.env['MAGICAL_API_URL'] ?? DEFAULT_MAGICAL_API_URL,\n npmRegistryUrl:\n process.env['MAGICAL_CLI_NPM_REGISTRY_URL'] ??\n DEFAULT_CLI_NPM_REGISTRY_URL,\n stateFilePath: path.join(configDirectory, CLI_STATE_FILE_NAME),\n workosApiUrl: DEFAULT_WORKOS_API_URL,\n workosClientId: process.env['WORKOS_CLIENT_ID'] ?? DEFAULT_WORKOS_CLIENT_ID,\n keychainServiceName: DEFAULT_KEYCHAIN_SERVICE_NAME,\n ...(process.env['WORKOS_AUTHKIT_DOMAIN']\n ? { workosAuthkitDomain: process.env['WORKOS_AUTHKIT_DOMAIN'] }\n : {}),\n };\n}\n\nexport function requireWorkosClientId(config: RuntimeConfig): string {\n return config.workosClientId;\n}\n","import keytar from 'keytar';\nimport type { CliAccount, RefreshTokenStore } from './state';\n\nfunction buildKeychainAccountName(account: CliAccount): string {\n return `${account.clientId}:${account.userId}`;\n}\n\nexport function createKeytarRefreshTokenStore(\n serviceName: string,\n): RefreshTokenStore {\n return {\n async clear(account) {\n await keytar.deletePassword(\n serviceName,\n buildKeychainAccountName(account),\n );\n },\n async load(account) {\n return keytar.getPassword(serviceName, buildKeychainAccountName(account));\n },\n async save(account, refreshToken) {\n await keytar.setPassword(\n serviceName,\n buildKeychainAccountName(account),\n refreshToken,\n );\n },\n };\n}\n","import { spawn } from 'node:child_process';\n\nexport async function openExternalUrl(url: string): Promise<void> {\n const command = resolveOpenCommand(url);\n\n const childProcess = spawn(command.executable, command.args, {\n detached: true,\n stdio: 'ignore',\n });\n\n await new Promise<void>((resolve, reject) => {\n childProcess.on('error', reject);\n childProcess.on('spawn', () => {\n childProcess.unref();\n resolve();\n });\n });\n}\n\nfunction resolveOpenCommand(url: string): {\n args: string[];\n executable: string;\n} {\n if (process.platform === 'darwin') {\n return { executable: 'open', args: [url] };\n }\n\n if (process.platform === 'win32') {\n return { executable: 'cmd', args: ['/c', 'start', '', url] };\n }\n\n return { executable: 'xdg-open', args: [url] };\n}\n","import { spawn } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { CliError } from './errors';\n\nexport const CLI_PACKAGE_NAME = '@getmagical/cli';\nexport const DEFAULT_CLI_DIST_TAG = 'latest';\nexport const DEFAULT_NPM_REGISTRY_URL = 'https://registry.npmjs.org/';\nexport const MANAGED_NODE_SUBPATH = 'runtime/node';\n\nexport interface SelfUpdateResult {\n installPrefix: string;\n packageSpecifier: string;\n registryUrl: string;\n}\n\ninterface NpmCommand {\n argsPrefix: string[];\n executable: string;\n}\n\nexport function resolveInstalledPackageRoot({\n entryFilePath,\n packageName,\n}: {\n entryFilePath: string;\n packageName: string;\n}): string | null {\n const packagePathSegments = packageName.split('/');\n let currentPath = path.dirname(entryFilePath);\n\n for (;;) {\n const currentPathSegments = currentPath.split(path.sep).filter(Boolean);\n const currentPackageSegments = currentPathSegments.slice(\n -packagePathSegments.length,\n );\n\n if (\n currentPackageSegments.length === packagePathSegments.length &&\n currentPackageSegments.every(\n (segment, index) => segment === packagePathSegments[index],\n )\n ) {\n return currentPath;\n }\n\n const parentPath = path.dirname(currentPath);\n if (parentPath === currentPath) {\n return null;\n }\n\n currentPath = parentPath;\n }\n}\n\nexport function resolveInstallPrefixFromPackageRoot(\n packageRootPath: string,\n): string | null {\n let currentPath = packageRootPath;\n\n for (;;) {\n if (path.basename(currentPath) === 'node_modules') {\n const nodeModulesParentPath = path.dirname(currentPath);\n if (path.basename(nodeModulesParentPath) === 'lib') {\n return path.dirname(nodeModulesParentPath);\n }\n\n return nodeModulesParentPath;\n }\n\n const parentPath = path.dirname(currentPath);\n if (parentPath === currentPath) {\n return null;\n }\n\n currentPath = parentPath;\n }\n}\n\nfunction resolveNpmCommandFromPath(): NpmCommand {\n return {\n argsPrefix: [],\n executable: process.platform === 'win32' ? 'npm.cmd' : 'npm',\n };\n}\n\nfunction resolveManagedNpmCommand(installPrefix: string): NpmCommand | null {\n if (process.platform === 'win32') {\n return null;\n }\n\n const managedNodeExecutable = path.join(\n installPrefix,\n MANAGED_NODE_SUBPATH,\n 'bin',\n 'node',\n );\n const managedNpmCli = path.join(\n installPrefix,\n MANAGED_NODE_SUBPATH,\n 'lib',\n 'node_modules',\n 'npm',\n 'bin',\n 'npm-cli.js',\n );\n\n if (!fs.existsSync(managedNodeExecutable) || !fs.existsSync(managedNpmCli)) {\n return null;\n }\n\n return {\n argsPrefix: [managedNpmCli],\n executable: managedNodeExecutable,\n };\n}\n\nexport async function installPublishedCli({\n distTag,\n installPrefix,\n packageName,\n registryUrl,\n}: {\n distTag: string;\n installPrefix: string;\n packageName: string;\n registryUrl: string;\n}): Promise<SelfUpdateResult> {\n const npmCommand =\n resolveManagedNpmCommand(installPrefix) ?? resolveNpmCommandFromPath();\n const packageSpecifier = `${packageName}@${distTag}`;\n const npmArguments = [\n ...npmCommand.argsPrefix,\n 'install',\n '--global',\n packageSpecifier,\n '--prefix',\n installPrefix,\n '--registry',\n registryUrl,\n ];\n\n await new Promise<void>((resolve, reject) => {\n const childProcess = spawn(npmCommand.executable, npmArguments, {\n stdio: 'inherit',\n });\n\n childProcess.on('error', (error: Error & { code?: string }) => {\n if (error.code === 'ENOENT') {\n reject(\n new CliError(\n 'npm is required to update mgcl. Install npm and rerun the command.',\n { cause: error },\n ),\n );\n return;\n }\n\n reject(error);\n });\n\n childProcess.on('exit', (exitCode) => {\n if (exitCode === 0) {\n resolve();\n return;\n }\n\n reject(\n new CliError(\n `npm install exited with status ${String(exitCode ?? 'unknown')}.`,\n ),\n );\n });\n });\n\n return {\n installPrefix,\n packageSpecifier,\n registryUrl,\n };\n}\n\nexport async function selfUpdateInstalledCli({\n distTag = DEFAULT_CLI_DIST_TAG,\n entryFilePath = fileURLToPath(import.meta.url),\n packageName = CLI_PACKAGE_NAME,\n registryUrl = DEFAULT_NPM_REGISTRY_URL,\n}: {\n distTag?: string;\n entryFilePath?: string;\n packageName?: string;\n registryUrl?: string;\n} = {}): Promise<SelfUpdateResult> {\n const packageRootPath = resolveInstalledPackageRoot({\n entryFilePath,\n packageName,\n });\n if (!packageRootPath) {\n throw new CliError(\n 'Self-update is only available for installed CLIs. Use the install script or \"npm install -g @getmagical/cli\".',\n );\n }\n\n const installPrefix = resolveInstallPrefixFromPackageRoot(packageRootPath);\n if (!installPrefix) {\n throw new CliError(\n 'Could not determine the installed npm prefix for this CLI. Reinstall with the install script and try again.',\n );\n }\n\n return installPublishedCli({\n distTag,\n installPrefix,\n packageName,\n registryUrl,\n });\n}\n","import { mkdir, readFile, rm, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { z } from 'zod';\nimport { CliError } from './errors';\n\nexport const cliAccountSchema = z.object({\n clientId: z.string().min(1),\n email: z.string().nullable(),\n userId: z.string().min(1),\n});\n\nexport const cliOrganizationSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n primaryDomain: z.string().nullable().default(null),\n});\n\nexport const cliStateSchema = z.object({\n account: cliAccountSchema,\n defaultOrgId: z.string().nullable(),\n lastUsedOrgId: z.string().nullable(),\n organizations: z.array(cliOrganizationSchema),\n});\n\nexport type CliAccount = z.infer<typeof cliAccountSchema>;\nexport type CliOrganization = z.infer<typeof cliOrganizationSchema>;\nexport type CliState = z.infer<typeof cliStateSchema>;\n\nexport interface StateStore {\n clear: () => Promise<void>;\n load: () => Promise<CliState | null>;\n save: (state: CliState) => Promise<void>;\n}\n\nexport interface RefreshTokenStore {\n clear: (account: CliAccount) => Promise<void>;\n load: (account: CliAccount) => Promise<string | null>;\n save: (account: CliAccount, refreshToken: string) => Promise<void>;\n}\n\nexport function createFileStateStore(stateFilePath: string): StateStore {\n return {\n async clear() {\n await rm(stateFilePath, { force: true });\n },\n async load() {\n try {\n const fileContents = await readFile(stateFilePath, 'utf8');\n const parsed = cliStateSchema.safeParse(JSON.parse(fileContents));\n if (!parsed.success) {\n throw new CliError('Stored CLI state is invalid.');\n }\n\n return parsed.data;\n } catch (error: unknown) {\n if (\n error instanceof Error &&\n 'code' in error &&\n error.code === 'ENOENT'\n ) {\n return null;\n }\n\n if (error instanceof CliError) {\n throw error;\n }\n\n throw new CliError('Failed to load CLI state.', { cause: error });\n }\n },\n async save(state) {\n await mkdir(path.dirname(stateFilePath), { recursive: true });\n await writeFile(stateFilePath, `${JSON.stringify(state, null, 2)}\\n`);\n },\n };\n}\n\nexport function createMemoryRefreshTokenStore(): RefreshTokenStore {\n const values = new Map<string, string>();\n\n return {\n async clear(account) {\n values.delete(buildRefreshTokenKey(account));\n },\n async load(account) {\n return values.get(buildRefreshTokenKey(account)) ?? null;\n },\n async save(account, refreshToken) {\n values.set(buildRefreshTokenKey(account), refreshToken);\n },\n };\n}\n\nfunction buildRefreshTokenKey(account: CliAccount): string {\n return `${account.clientId}:${account.userId}`;\n}\n","import { z } from 'zod';\nimport { CliError } from './errors';\n\nconst DEFAULT_DEVICE_POLL_INTERVAL_SECONDS = 5;\n\nfunction buildFormHeaders(): Headers {\n const headers = new Headers();\n headers.set('content-type', 'application/x-www-form-urlencoded');\n return headers;\n}\n\nconst deviceAuthorizationSchema = z.object({\n device_code: z.string().min(1),\n expires_in: z.number().int().positive().optional(),\n interval: z.number().int().positive().optional(),\n user_code: z.string().min(1),\n verification_uri: z.url(),\n verification_uri_complete: z.url().optional(),\n});\n\nconst tokenResponseSchema = z.object({\n access_token: z.string().min(1),\n expires_in: z.number().int().positive().optional(),\n refresh_token: z.string().min(1),\n token_type: z.string().optional(),\n});\n\nconst tokenErrorSchema = z.object({\n error: z.string().min(1),\n error_description: z.string().optional(),\n});\n\nconst accessTokenClaimsSchema = z.object({\n org_id: z.string().min(1).optional(),\n sid: z.string().min(1).optional(),\n sub: z.string().min(1),\n});\n\nexport type DeviceAuthorization = z.infer<typeof deviceAuthorizationSchema>;\nexport type TokenResponse = z.infer<typeof tokenResponseSchema>;\nexport type AccessTokenClaims = z.infer<typeof accessTokenClaimsSchema>;\n\nexport interface AuthClient {\n decodeAccessTokenClaims: (accessToken: string) => AccessTokenClaims;\n pollForDeviceTokens: (input: {\n clientId: string;\n deviceCode: string;\n expiresInSeconds?: number;\n intervalSeconds?: number;\n }) => Promise<TokenResponse>;\n refreshTokens: (input: {\n clientId: string;\n organizationId?: string;\n refreshToken: string;\n }) => Promise<TokenResponse>;\n startDeviceAuthorization: (input: {\n clientId: string;\n }) => Promise<DeviceAuthorization>;\n}\n\nexport function createWorkosAuthClient({\n fetchFn = fetch,\n sleep = async (milliseconds): Promise<void> => {\n await new Promise((resolve) => {\n setTimeout(resolve, milliseconds);\n });\n },\n workosApiUrl,\n}: {\n fetchFn?: typeof fetch;\n sleep?: (milliseconds: number) => Promise<void>;\n workosApiUrl: string;\n}): AuthClient {\n async function postForm<TSchema extends z.ZodTypeAny>({\n endpointPath,\n formData,\n responseSchema,\n }: {\n endpointPath: string;\n formData: URLSearchParams;\n responseSchema: TSchema;\n }): Promise<z.infer<TSchema>> {\n const response = await fetchFn(`${workosApiUrl}${endpointPath}`, {\n method: 'POST',\n headers: buildFormHeaders(),\n body: formData,\n });\n\n const responseBody = await response.json();\n if (!response.ok) {\n const parsedError = tokenErrorSchema.safeParse(responseBody);\n if (parsedError.success) {\n throw new CliError(\n parsedError.data.error_description ?? parsedError.data.error,\n );\n }\n\n throw new CliError(\n `WorkOS request failed with status ${response.status}.`,\n );\n }\n\n const parsedResponse = responseSchema.safeParse(responseBody);\n if (!parsedResponse.success) {\n throw new CliError('WorkOS returned an unexpected response payload.');\n }\n\n return parsedResponse.data;\n }\n\n return {\n decodeAccessTokenClaims(accessToken) {\n const [, payloadSegment] = accessToken.split('.');\n if (!payloadSegment) {\n throw new CliError('WorkOS access token is malformed.');\n }\n\n const payload: unknown = JSON.parse(\n Buffer.from(payloadSegment, 'base64url').toString('utf8'),\n );\n const parsedClaims = accessTokenClaimsSchema.safeParse(payload);\n if (!parsedClaims.success) {\n throw new CliError('WorkOS access token is missing required claims.');\n }\n\n return parsedClaims.data;\n },\n\n async pollForDeviceTokens({\n clientId,\n deviceCode,\n expiresInSeconds,\n intervalSeconds,\n }): Promise<TokenResponse> {\n const timeoutAt = Date.now() + (expiresInSeconds ?? 15 * 60) * 1000;\n const initialIntervalMilliseconds =\n (intervalSeconds ?? DEFAULT_DEVICE_POLL_INTERVAL_SECONDS) * 1000;\n\n async function poll(\n nextIntervalMilliseconds: number,\n ): Promise<TokenResponse> {\n if (Date.now() >= timeoutAt) {\n throw new CliError(\n 'WorkOS device authorization expired before completion.',\n );\n }\n\n const formData = new URLSearchParams();\n formData.set('client_id', clientId);\n formData.set('device_code', deviceCode);\n formData.set(\n 'grant_type',\n 'urn:ietf:params:oauth:grant-type:device_code',\n );\n\n const response = await fetchFn(\n `${workosApiUrl}/user_management/authenticate`,\n {\n method: 'POST',\n headers: buildFormHeaders(),\n body: formData,\n },\n );\n\n const responseBody = await response.json();\n if (response.ok) {\n const parsedTokens = tokenResponseSchema.safeParse(responseBody);\n if (!parsedTokens.success) {\n throw new CliError('WorkOS returned an unexpected token response.');\n }\n\n return parsedTokens.data;\n }\n\n const parsedError = tokenErrorSchema.safeParse(responseBody);\n if (!parsedError.success) {\n throw new CliError(\n `WorkOS device authorization failed with status ${response.status}.`,\n );\n }\n\n if (parsedError.data.error === 'authorization_pending') {\n await sleep(nextIntervalMilliseconds);\n return poll(nextIntervalMilliseconds);\n }\n\n if (parsedError.data.error === 'slow_down') {\n const slowedIntervalMilliseconds = nextIntervalMilliseconds + 5000;\n await sleep(slowedIntervalMilliseconds);\n return poll(slowedIntervalMilliseconds);\n }\n\n throw new CliError(\n parsedError.data.error_description ?? parsedError.data.error,\n );\n }\n\n return poll(initialIntervalMilliseconds);\n },\n\n async refreshTokens({\n clientId,\n organizationId,\n refreshToken,\n }): Promise<TokenResponse> {\n const formData = new URLSearchParams();\n formData.set('client_id', clientId);\n formData.set('grant_type', 'refresh_token');\n formData.set('refresh_token', refreshToken);\n\n if (organizationId) {\n formData.set('organization_id', organizationId);\n }\n\n return postForm({\n endpointPath: '/user_management/authenticate',\n formData,\n responseSchema: tokenResponseSchema,\n });\n },\n\n async startDeviceAuthorization({ clientId }): Promise<DeviceAuthorization> {\n const formData = new URLSearchParams();\n formData.set('client_id', clientId);\n\n return postForm({\n endpointPath: '/user_management/authorize/device',\n formData,\n responseSchema: deviceAuthorizationSchema,\n });\n },\n };\n}\n","#!/usr/bin/env node\n\nimport { formatCliError } from './cli-formatting';\nimport { getErrorMessage } from './errors';\nimport { buildProgram, createDefaultDependencies } from './program';\n\nconst program = buildProgram(createDefaultDependencies());\n\nprogram.parseAsync(process.argv).catch((error: unknown) => {\n process.stderr.write(`${formatCliError(getErrorMessage(error))}\\n`);\n process.exitCode = 1;\n});\n"],"mappings":"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","names":["z","z","spawn","path","DEFAULT_CLI_DIST_TAG","path","spawn","path","z","z","path","z","z","isRecord","program"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getmagical/cli",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Magical CLI for shared MCP operations",
@@ -13,7 +13,10 @@
13
13
  "registry": "https://registry.npmjs.org/",
14
14
  "access": "public"
15
15
  },
16
- "files": ["dist", "README.md"],
16
+ "files": [
17
+ "dist",
18
+ "README.md"
19
+ ],
17
20
  "bin": {
18
21
  "mgcl": "./dist/index.js",
19
22
  "magical": "./dist/index.js"