@getmagical/cli 0.1.3 → 0.1.5
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 +29 -0
- package/dist/index.js +320 -70
- package/dist/index.js.map +1 -1
- package/package.json +5 -2
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
|
|
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(
|
|
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
|
-
new Command().name("mgcl").description("Run Magical
|
|
2151
|
-
).addOption(new Option("--json", "Render JSON output.")).
|
|
2373
|
+
new Command().name("mgcl").description("Run Magical operations from the command line.")
|
|
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":"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","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 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
|
+
"version": "0.1.5",
|
|
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": [
|
|
16
|
+
"files": [
|
|
17
|
+
"dist",
|
|
18
|
+
"README.md"
|
|
19
|
+
],
|
|
17
20
|
"bin": {
|
|
18
21
|
"mgcl": "./dist/index.js",
|
|
19
22
|
"magical": "./dist/index.js"
|