faces-cli 1.5.10 → 1.5.11

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.
@@ -28,7 +28,9 @@ export default class AuthWhoami extends BaseCommand {
28
28
  process.stderr.write(` api_key: not configured\n`);
29
29
  process.stderr.write(` status: not authenticated\n`);
30
30
  }
31
- return diag;
31
+ if (json)
32
+ process.stdout.write(JSON.stringify(diag) + '\n');
33
+ process.exit(1);
32
34
  }
33
35
  // Try API key first (priority), then JWT. Always try both and report.
34
36
  let apiKeyResult = null;
@@ -95,6 +97,11 @@ export default class AuthWhoami extends BaseCommand {
95
97
  process.stderr.write(` name: ${winner.data.name}\n`);
96
98
  }
97
99
  }
100
+ if (!diag.authenticated) {
101
+ if (json)
102
+ process.stdout.write(JSON.stringify(diag) + '\n');
103
+ process.exit(1);
104
+ }
98
105
  return diag;
99
106
  }
100
107
  }
@@ -1260,6 +1260,214 @@
1260
1260
  "manyfaced.js"
1261
1261
  ]
1262
1262
  },
1263
+ "compile:import": {
1264
+ "aliases": [],
1265
+ "args": {
1266
+ "face_id": {
1267
+ "description": "Face alias",
1268
+ "name": "face_id",
1269
+ "required": true
1270
+ }
1271
+ },
1272
+ "description": "Import a YouTube video into a face via server-side download and transcription",
1273
+ "flags": {
1274
+ "json": {
1275
+ "description": "Format output as json.",
1276
+ "helpGroup": "GLOBAL",
1277
+ "name": "json",
1278
+ "allowNo": false,
1279
+ "type": "boolean"
1280
+ },
1281
+ "base-url": {
1282
+ "description": "API base URL",
1283
+ "env": "FACES_BASE_URL",
1284
+ "name": "base-url",
1285
+ "hasDynamicHelp": false,
1286
+ "multiple": false,
1287
+ "type": "option"
1288
+ },
1289
+ "token": {
1290
+ "description": "JWT bearer token",
1291
+ "env": "FACES_TOKEN",
1292
+ "name": "token",
1293
+ "hasDynamicHelp": false,
1294
+ "multiple": false,
1295
+ "type": "option"
1296
+ },
1297
+ "api-key": {
1298
+ "description": "API key",
1299
+ "env": "FACES_API_KEY",
1300
+ "name": "api-key",
1301
+ "hasDynamicHelp": false,
1302
+ "multiple": false,
1303
+ "type": "option"
1304
+ },
1305
+ "url": {
1306
+ "description": "YouTube URL (youtube.com/watch?v=... or youtu.be/...)",
1307
+ "name": "url",
1308
+ "required": true,
1309
+ "hasDynamicHelp": false,
1310
+ "multiple": false,
1311
+ "type": "option"
1312
+ },
1313
+ "type": {
1314
+ "description": "\"document\" for solo talks, lectures, monologues; \"thread\" for interviews or multi-speaker conversations",
1315
+ "name": "type",
1316
+ "default": "document",
1317
+ "hasDynamicHelp": false,
1318
+ "multiple": false,
1319
+ "options": [
1320
+ "document",
1321
+ "thread"
1322
+ ],
1323
+ "type": "option"
1324
+ },
1325
+ "perspective": {
1326
+ "description": "\"first-person\" if the face is the speaker; \"third-person\" if the video is about the face",
1327
+ "name": "perspective",
1328
+ "default": "third-person",
1329
+ "hasDynamicHelp": false,
1330
+ "multiple": false,
1331
+ "options": [
1332
+ "first-person",
1333
+ "third-person"
1334
+ ],
1335
+ "type": "option"
1336
+ },
1337
+ "face-speaker": {
1338
+ "description": "For --type thread: AssemblyAI speaker label (e.g. \"A\") that corresponds to the face. Defaults to first detected speaker.",
1339
+ "name": "face-speaker",
1340
+ "hasDynamicHelp": false,
1341
+ "multiple": false,
1342
+ "type": "option"
1343
+ },
1344
+ "no-wait": {
1345
+ "description": "Return immediately after import starts (do not poll for transcription). Prints the ID for manual polling.",
1346
+ "name": "no-wait",
1347
+ "allowNo": false,
1348
+ "type": "boolean"
1349
+ }
1350
+ },
1351
+ "hasDynamicHelp": false,
1352
+ "hiddenAliases": [],
1353
+ "id": "compile:import",
1354
+ "pluginAlias": "faces-cli",
1355
+ "pluginName": "faces-cli",
1356
+ "pluginType": "core",
1357
+ "strict": true,
1358
+ "enableJsonFlag": true,
1359
+ "isESM": true,
1360
+ "relativePath": [
1361
+ "dist",
1362
+ "commands",
1363
+ "compile",
1364
+ "import.js"
1365
+ ]
1366
+ },
1367
+ "compile:upload": {
1368
+ "aliases": [],
1369
+ "args": {
1370
+ "alias": {
1371
+ "description": "Face alias",
1372
+ "name": "alias",
1373
+ "required": true
1374
+ }
1375
+ },
1376
+ "description": "Upload a file (text/PDF/audio/video) to compile into a face",
1377
+ "flags": {
1378
+ "json": {
1379
+ "description": "Format output as json.",
1380
+ "helpGroup": "GLOBAL",
1381
+ "name": "json",
1382
+ "allowNo": false,
1383
+ "type": "boolean"
1384
+ },
1385
+ "base-url": {
1386
+ "description": "API base URL",
1387
+ "env": "FACES_BASE_URL",
1388
+ "name": "base-url",
1389
+ "hasDynamicHelp": false,
1390
+ "multiple": false,
1391
+ "type": "option"
1392
+ },
1393
+ "token": {
1394
+ "description": "JWT bearer token",
1395
+ "env": "FACES_TOKEN",
1396
+ "name": "token",
1397
+ "hasDynamicHelp": false,
1398
+ "multiple": false,
1399
+ "type": "option"
1400
+ },
1401
+ "api-key": {
1402
+ "description": "API key",
1403
+ "env": "FACES_API_KEY",
1404
+ "name": "api-key",
1405
+ "hasDynamicHelp": false,
1406
+ "multiple": false,
1407
+ "type": "option"
1408
+ },
1409
+ "file": {
1410
+ "description": "File to upload",
1411
+ "name": "file",
1412
+ "required": true,
1413
+ "hasDynamicHelp": false,
1414
+ "multiple": false,
1415
+ "type": "option"
1416
+ },
1417
+ "kind": {
1418
+ "description": "Upload kind: document or thread",
1419
+ "name": "kind",
1420
+ "default": "document",
1421
+ "hasDynamicHelp": false,
1422
+ "multiple": false,
1423
+ "options": [
1424
+ "document",
1425
+ "thread"
1426
+ ],
1427
+ "type": "option"
1428
+ },
1429
+ "perspective": {
1430
+ "description": "Perspective (document only)",
1431
+ "name": "perspective",
1432
+ "default": "third-person",
1433
+ "hasDynamicHelp": false,
1434
+ "multiple": false,
1435
+ "options": [
1436
+ "first-person",
1437
+ "third-person"
1438
+ ],
1439
+ "type": "option"
1440
+ },
1441
+ "face-speaker": {
1442
+ "description": "Speaker name to map to the face (thread only). If omitted, auto-detected from face name.",
1443
+ "name": "face-speaker",
1444
+ "hasDynamicHelp": false,
1445
+ "multiple": false,
1446
+ "type": "option"
1447
+ },
1448
+ "no-wait": {
1449
+ "description": "Return immediately after upload (do not poll for transcription). Prints the ID for manual polling.",
1450
+ "name": "no-wait",
1451
+ "allowNo": false,
1452
+ "type": "boolean"
1453
+ }
1454
+ },
1455
+ "hasDynamicHelp": false,
1456
+ "hiddenAliases": [],
1457
+ "id": "compile:upload",
1458
+ "pluginAlias": "faces-cli",
1459
+ "pluginName": "faces-cli",
1460
+ "pluginType": "core",
1461
+ "strict": true,
1462
+ "enableJsonFlag": true,
1463
+ "isESM": true,
1464
+ "relativePath": [
1465
+ "dist",
1466
+ "commands",
1467
+ "compile",
1468
+ "upload.js"
1469
+ ]
1470
+ },
1263
1471
  "chat:chat": {
1264
1472
  "aliases": [],
1265
1473
  "args": {
@@ -1545,16 +1753,10 @@
1545
1753
  "responses.js"
1546
1754
  ]
1547
1755
  },
1548
- "compile:import": {
1756
+ "config:clear": {
1549
1757
  "aliases": [],
1550
- "args": {
1551
- "face_id": {
1552
- "description": "Face alias",
1553
- "name": "face_id",
1554
- "required": true
1555
- }
1556
- },
1557
- "description": "Import a YouTube video into a face via server-side download and transcription",
1758
+ "args": {},
1759
+ "description": "Delete all saved credentials and config",
1558
1760
  "flags": {
1559
1761
  "json": {
1560
1762
  "description": "Format output as json.",
@@ -1587,55 +1789,16 @@
1587
1789
  "multiple": false,
1588
1790
  "type": "option"
1589
1791
  },
1590
- "url": {
1591
- "description": "YouTube URL (youtube.com/watch?v=... or youtu.be/...)",
1592
- "name": "url",
1593
- "required": true,
1594
- "hasDynamicHelp": false,
1595
- "multiple": false,
1596
- "type": "option"
1597
- },
1598
- "type": {
1599
- "description": "\"document\" for solo talks, lectures, monologues; \"thread\" for interviews or multi-speaker conversations",
1600
- "name": "type",
1601
- "default": "document",
1602
- "hasDynamicHelp": false,
1603
- "multiple": false,
1604
- "options": [
1605
- "document",
1606
- "thread"
1607
- ],
1608
- "type": "option"
1609
- },
1610
- "perspective": {
1611
- "description": "\"first-person\" if the face is the speaker; \"third-person\" if the video is about the face",
1612
- "name": "perspective",
1613
- "default": "third-person",
1614
- "hasDynamicHelp": false,
1615
- "multiple": false,
1616
- "options": [
1617
- "first-person",
1618
- "third-person"
1619
- ],
1620
- "type": "option"
1621
- },
1622
- "face-speaker": {
1623
- "description": "For --type thread: AssemblyAI speaker label (e.g. \"A\") that corresponds to the face. Defaults to first detected speaker.",
1624
- "name": "face-speaker",
1625
- "hasDynamicHelp": false,
1626
- "multiple": false,
1627
- "type": "option"
1628
- },
1629
- "no-wait": {
1630
- "description": "Return immediately after import starts (do not poll for transcription). Prints the ID for manual polling.",
1631
- "name": "no-wait",
1792
+ "yes": {
1793
+ "description": "Skip confirmation",
1794
+ "name": "yes",
1632
1795
  "allowNo": false,
1633
1796
  "type": "boolean"
1634
1797
  }
1635
1798
  },
1636
1799
  "hasDynamicHelp": false,
1637
1800
  "hiddenAliases": [],
1638
- "id": "compile:import",
1801
+ "id": "config:clear",
1639
1802
  "pluginAlias": "faces-cli",
1640
1803
  "pluginName": "faces-cli",
1641
1804
  "pluginType": "core",
@@ -1645,20 +1808,25 @@
1645
1808
  "relativePath": [
1646
1809
  "dist",
1647
1810
  "commands",
1648
- "compile",
1649
- "import.js"
1811
+ "config",
1812
+ "clear.js"
1650
1813
  ]
1651
1814
  },
1652
- "compile:upload": {
1815
+ "config:set": {
1653
1816
  "aliases": [],
1654
1817
  "args": {
1655
- "alias": {
1656
- "description": "Face alias",
1657
- "name": "alias",
1818
+ "key": {
1819
+ "description": "Config key",
1820
+ "name": "key",
1821
+ "required": true
1822
+ },
1823
+ "value": {
1824
+ "description": "Config value",
1825
+ "name": "value",
1658
1826
  "required": true
1659
1827
  }
1660
1828
  },
1661
- "description": "Upload a file (text/PDF/audio/video) to compile into a face",
1829
+ "description": "Set a config value (e.g. base_url, api_key, token)",
1662
1830
  "flags": {
1663
1831
  "json": {
1664
1832
  "description": "Format output as json.",
@@ -1690,56 +1858,11 @@
1690
1858
  "hasDynamicHelp": false,
1691
1859
  "multiple": false,
1692
1860
  "type": "option"
1693
- },
1694
- "file": {
1695
- "description": "File to upload",
1696
- "name": "file",
1697
- "required": true,
1698
- "hasDynamicHelp": false,
1699
- "multiple": false,
1700
- "type": "option"
1701
- },
1702
- "kind": {
1703
- "description": "Upload kind: document or thread",
1704
- "name": "kind",
1705
- "default": "document",
1706
- "hasDynamicHelp": false,
1707
- "multiple": false,
1708
- "options": [
1709
- "document",
1710
- "thread"
1711
- ],
1712
- "type": "option"
1713
- },
1714
- "perspective": {
1715
- "description": "Perspective (document only)",
1716
- "name": "perspective",
1717
- "default": "third-person",
1718
- "hasDynamicHelp": false,
1719
- "multiple": false,
1720
- "options": [
1721
- "first-person",
1722
- "third-person"
1723
- ],
1724
- "type": "option"
1725
- },
1726
- "face-speaker": {
1727
- "description": "Speaker name to map to the face (thread only). If omitted, auto-detected from face name.",
1728
- "name": "face-speaker",
1729
- "hasDynamicHelp": false,
1730
- "multiple": false,
1731
- "type": "option"
1732
- },
1733
- "no-wait": {
1734
- "description": "Return immediately after upload (do not poll for transcription). Prints the ID for manual polling.",
1735
- "name": "no-wait",
1736
- "allowNo": false,
1737
- "type": "boolean"
1738
1861
  }
1739
1862
  },
1740
1863
  "hasDynamicHelp": false,
1741
1864
  "hiddenAliases": [],
1742
- "id": "compile:upload",
1865
+ "id": "config:set",
1743
1866
  "pluginAlias": "faces-cli",
1744
1867
  "pluginName": "faces-cli",
1745
1868
  "pluginType": "core",
@@ -1749,14 +1872,14 @@
1749
1872
  "relativePath": [
1750
1873
  "dist",
1751
1874
  "commands",
1752
- "compile",
1753
- "upload.js"
1875
+ "config",
1876
+ "set.js"
1754
1877
  ]
1755
1878
  },
1756
- "config:clear": {
1879
+ "config:show": {
1757
1880
  "aliases": [],
1758
1881
  "args": {},
1759
- "description": "Delete all saved credentials and config",
1882
+ "description": "Print current config (credentials are masked)",
1760
1883
  "flags": {
1761
1884
  "json": {
1762
1885
  "description": "Format output as json.",
@@ -1788,17 +1911,11 @@
1788
1911
  "hasDynamicHelp": false,
1789
1912
  "multiple": false,
1790
1913
  "type": "option"
1791
- },
1792
- "yes": {
1793
- "description": "Skip confirmation",
1794
- "name": "yes",
1795
- "allowNo": false,
1796
- "type": "boolean"
1797
1914
  }
1798
1915
  },
1799
1916
  "hasDynamicHelp": false,
1800
1917
  "hiddenAliases": [],
1801
- "id": "config:clear",
1918
+ "id": "config:show",
1802
1919
  "pluginAlias": "faces-cli",
1803
1920
  "pluginName": "faces-cli",
1804
1921
  "pluginType": "core",
@@ -1809,24 +1926,13 @@
1809
1926
  "dist",
1810
1927
  "commands",
1811
1928
  "config",
1812
- "clear.js"
1929
+ "show.js"
1813
1930
  ]
1814
1931
  },
1815
- "config:set": {
1932
+ "keys:create": {
1816
1933
  "aliases": [],
1817
- "args": {
1818
- "key": {
1819
- "description": "Config key",
1820
- "name": "key",
1821
- "required": true
1822
- },
1823
- "value": {
1824
- "description": "Config value",
1825
- "name": "value",
1826
- "required": true
1827
- }
1828
- },
1829
- "description": "Set a config value (e.g. base_url, api_key, token)",
1934
+ "args": {},
1935
+ "description": "Create a new API key (JWT required)",
1830
1936
  "flags": {
1831
1937
  "json": {
1832
1938
  "description": "Format output as json.",
@@ -1858,11 +1964,47 @@
1858
1964
  "hasDynamicHelp": false,
1859
1965
  "multiple": false,
1860
1966
  "type": "option"
1967
+ },
1968
+ "name": {
1969
+ "description": "Key name/label",
1970
+ "name": "name",
1971
+ "required": true,
1972
+ "hasDynamicHelp": false,
1973
+ "multiple": false,
1974
+ "type": "option"
1975
+ },
1976
+ "expires-days": {
1977
+ "description": "Expiry in days (omit for no expiry)",
1978
+ "name": "expires-days",
1979
+ "hasDynamicHelp": false,
1980
+ "multiple": false,
1981
+ "type": "option"
1982
+ },
1983
+ "budget": {
1984
+ "description": "Spend budget in USD",
1985
+ "name": "budget",
1986
+ "hasDynamicHelp": false,
1987
+ "multiple": false,
1988
+ "type": "option"
1989
+ },
1990
+ "face": {
1991
+ "description": "Allowed face alias (repeatable)",
1992
+ "name": "face",
1993
+ "hasDynamicHelp": false,
1994
+ "multiple": true,
1995
+ "type": "option"
1996
+ },
1997
+ "model": {
1998
+ "description": "Allowed model name (repeatable)",
1999
+ "name": "model",
2000
+ "hasDynamicHelp": false,
2001
+ "multiple": true,
2002
+ "type": "option"
1861
2003
  }
1862
2004
  },
1863
2005
  "hasDynamicHelp": false,
1864
2006
  "hiddenAliases": [],
1865
- "id": "config:set",
2007
+ "id": "keys:create",
1866
2008
  "pluginAlias": "faces-cli",
1867
2009
  "pluginName": "faces-cli",
1868
2010
  "pluginType": "core",
@@ -1872,14 +2014,14 @@
1872
2014
  "relativePath": [
1873
2015
  "dist",
1874
2016
  "commands",
1875
- "config",
1876
- "set.js"
2017
+ "keys",
2018
+ "create.js"
1877
2019
  ]
1878
2020
  },
1879
- "config:show": {
2021
+ "keys:list": {
1880
2022
  "aliases": [],
1881
2023
  "args": {},
1882
- "description": "Print current config (credentials are masked)",
2024
+ "description": "List all API keys (JWT required)",
1883
2025
  "flags": {
1884
2026
  "json": {
1885
2027
  "description": "Format output as json.",
@@ -1915,7 +2057,7 @@
1915
2057
  },
1916
2058
  "hasDynamicHelp": false,
1917
2059
  "hiddenAliases": [],
1918
- "id": "config:show",
2060
+ "id": "keys:list",
1919
2061
  "pluginAlias": "faces-cli",
1920
2062
  "pluginName": "faces-cli",
1921
2063
  "pluginType": "core",
@@ -1925,14 +2067,20 @@
1925
2067
  "relativePath": [
1926
2068
  "dist",
1927
2069
  "commands",
1928
- "config",
1929
- "show.js"
2070
+ "keys",
2071
+ "list.js"
1930
2072
  ]
1931
2073
  },
1932
- "face:create": {
2074
+ "keys:revoke": {
1933
2075
  "aliases": [],
1934
- "args": {},
1935
- "description": "Create a new face",
2076
+ "args": {
2077
+ "key_id": {
2078
+ "description": "Key ID",
2079
+ "name": "key_id",
2080
+ "required": true
2081
+ }
2082
+ },
2083
+ "description": "Revoke an API key (JWT required)",
1936
2084
  "flags": {
1937
2085
  "json": {
1938
2086
  "description": "Format output as json.",
@@ -1965,61 +2113,16 @@
1965
2113
  "multiple": false,
1966
2114
  "type": "option"
1967
2115
  },
1968
- "name": {
1969
- "description": "Display name",
1970
- "name": "name",
1971
- "required": true,
1972
- "hasDynamicHelp": false,
1973
- "multiple": false,
1974
- "type": "option"
1975
- },
1976
- "alias": {
1977
- "description": "Unique alias slug",
1978
- "name": "alias",
1979
- "required": true,
1980
- "hasDynamicHelp": false,
1981
- "multiple": false,
1982
- "type": "option"
1983
- },
1984
- "description": {
1985
- "description": "Description for local catalog",
1986
- "name": "description",
1987
- "hasDynamicHelp": false,
1988
- "multiple": false,
1989
- "type": "option"
1990
- },
1991
- "default-model": {
1992
- "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
1993
- "name": "default-model",
1994
- "hasDynamicHelp": false,
1995
- "multiple": false,
1996
- "type": "option"
1997
- },
1998
- "formula": {
1999
- "description": "Boolean formula over owned concrete face aliases (e.g. \"a | b\", \"(a | b) - c\"). Creates a composite face.",
2000
- "name": "formula",
2001
- "hasDynamicHelp": false,
2002
- "multiple": false,
2003
- "type": "option"
2004
- },
2005
- "attr": {
2006
- "description": "Attribute KEY=VALUE (repeatable)",
2007
- "name": "attr",
2008
- "hasDynamicHelp": false,
2009
- "multiple": true,
2010
- "type": "option"
2011
- },
2012
- "tool": {
2013
- "description": "Tool name to enable (repeatable)",
2014
- "name": "tool",
2015
- "hasDynamicHelp": false,
2016
- "multiple": true,
2017
- "type": "option"
2116
+ "yes": {
2117
+ "description": "Skip confirmation",
2118
+ "name": "yes",
2119
+ "allowNo": false,
2120
+ "type": "boolean"
2018
2121
  }
2019
2122
  },
2020
2123
  "hasDynamicHelp": false,
2021
2124
  "hiddenAliases": [],
2022
- "id": "face:create",
2125
+ "id": "keys:revoke",
2023
2126
  "pluginAlias": "faces-cli",
2024
2127
  "pluginName": "faces-cli",
2025
2128
  "pluginType": "core",
@@ -2029,20 +2132,20 @@
2029
2132
  "relativePath": [
2030
2133
  "dist",
2031
2134
  "commands",
2032
- "face",
2033
- "create.js"
2135
+ "keys",
2136
+ "revoke.js"
2034
2137
  ]
2035
2138
  },
2036
- "face:delete": {
2139
+ "keys:update": {
2037
2140
  "aliases": [],
2038
2141
  "args": {
2039
- "face_id": {
2040
- "description": "Face alias",
2041
- "name": "face_id",
2142
+ "key_id": {
2143
+ "description": "Key ID",
2144
+ "name": "key_id",
2042
2145
  "required": true
2043
2146
  }
2044
2147
  },
2045
- "description": "Delete a face permanently",
2148
+ "description": "Update API key metadata (JWT required)",
2046
2149
  "flags": {
2047
2150
  "json": {
2048
2151
  "description": "Format output as json.",
@@ -2075,15 +2178,198 @@
2075
2178
  "multiple": false,
2076
2179
  "type": "option"
2077
2180
  },
2078
- "yes": {
2079
- "description": "Skip confirmation",
2080
- "name": "yes",
2081
- "allowNo": false,
2082
- "type": "boolean"
2083
- }
2084
- },
2085
- "hasDynamicHelp": false,
2086
- "hiddenAliases": [],
2181
+ "name": {
2182
+ "description": "New key name",
2183
+ "name": "name",
2184
+ "hasDynamicHelp": false,
2185
+ "multiple": false,
2186
+ "type": "option"
2187
+ },
2188
+ "budget": {
2189
+ "description": "New spend budget in USD",
2190
+ "name": "budget",
2191
+ "hasDynamicHelp": false,
2192
+ "multiple": false,
2193
+ "type": "option"
2194
+ },
2195
+ "reset-spent": {
2196
+ "description": "Reset spent amount to zero",
2197
+ "name": "reset-spent",
2198
+ "allowNo": false,
2199
+ "type": "boolean"
2200
+ }
2201
+ },
2202
+ "hasDynamicHelp": false,
2203
+ "hiddenAliases": [],
2204
+ "id": "keys:update",
2205
+ "pluginAlias": "faces-cli",
2206
+ "pluginName": "faces-cli",
2207
+ "pluginType": "core",
2208
+ "strict": true,
2209
+ "enableJsonFlag": true,
2210
+ "isESM": true,
2211
+ "relativePath": [
2212
+ "dist",
2213
+ "commands",
2214
+ "keys",
2215
+ "update.js"
2216
+ ]
2217
+ },
2218
+ "face:create": {
2219
+ "aliases": [],
2220
+ "args": {},
2221
+ "description": "Create a new face",
2222
+ "flags": {
2223
+ "json": {
2224
+ "description": "Format output as json.",
2225
+ "helpGroup": "GLOBAL",
2226
+ "name": "json",
2227
+ "allowNo": false,
2228
+ "type": "boolean"
2229
+ },
2230
+ "base-url": {
2231
+ "description": "API base URL",
2232
+ "env": "FACES_BASE_URL",
2233
+ "name": "base-url",
2234
+ "hasDynamicHelp": false,
2235
+ "multiple": false,
2236
+ "type": "option"
2237
+ },
2238
+ "token": {
2239
+ "description": "JWT bearer token",
2240
+ "env": "FACES_TOKEN",
2241
+ "name": "token",
2242
+ "hasDynamicHelp": false,
2243
+ "multiple": false,
2244
+ "type": "option"
2245
+ },
2246
+ "api-key": {
2247
+ "description": "API key",
2248
+ "env": "FACES_API_KEY",
2249
+ "name": "api-key",
2250
+ "hasDynamicHelp": false,
2251
+ "multiple": false,
2252
+ "type": "option"
2253
+ },
2254
+ "name": {
2255
+ "description": "Display name",
2256
+ "name": "name",
2257
+ "required": true,
2258
+ "hasDynamicHelp": false,
2259
+ "multiple": false,
2260
+ "type": "option"
2261
+ },
2262
+ "alias": {
2263
+ "description": "Unique alias slug",
2264
+ "name": "alias",
2265
+ "required": true,
2266
+ "hasDynamicHelp": false,
2267
+ "multiple": false,
2268
+ "type": "option"
2269
+ },
2270
+ "description": {
2271
+ "description": "Description for local catalog",
2272
+ "name": "description",
2273
+ "hasDynamicHelp": false,
2274
+ "multiple": false,
2275
+ "type": "option"
2276
+ },
2277
+ "default-model": {
2278
+ "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
2279
+ "name": "default-model",
2280
+ "hasDynamicHelp": false,
2281
+ "multiple": false,
2282
+ "type": "option"
2283
+ },
2284
+ "formula": {
2285
+ "description": "Boolean formula over owned concrete face aliases (e.g. \"a | b\", \"(a | b) - c\"). Creates a composite face.",
2286
+ "name": "formula",
2287
+ "hasDynamicHelp": false,
2288
+ "multiple": false,
2289
+ "type": "option"
2290
+ },
2291
+ "attr": {
2292
+ "description": "Attribute KEY=VALUE (repeatable)",
2293
+ "name": "attr",
2294
+ "hasDynamicHelp": false,
2295
+ "multiple": true,
2296
+ "type": "option"
2297
+ },
2298
+ "tool": {
2299
+ "description": "Tool name to enable (repeatable)",
2300
+ "name": "tool",
2301
+ "hasDynamicHelp": false,
2302
+ "multiple": true,
2303
+ "type": "option"
2304
+ }
2305
+ },
2306
+ "hasDynamicHelp": false,
2307
+ "hiddenAliases": [],
2308
+ "id": "face:create",
2309
+ "pluginAlias": "faces-cli",
2310
+ "pluginName": "faces-cli",
2311
+ "pluginType": "core",
2312
+ "strict": true,
2313
+ "enableJsonFlag": true,
2314
+ "isESM": true,
2315
+ "relativePath": [
2316
+ "dist",
2317
+ "commands",
2318
+ "face",
2319
+ "create.js"
2320
+ ]
2321
+ },
2322
+ "face:delete": {
2323
+ "aliases": [],
2324
+ "args": {
2325
+ "face_id": {
2326
+ "description": "Face alias",
2327
+ "name": "face_id",
2328
+ "required": true
2329
+ }
2330
+ },
2331
+ "description": "Delete a face permanently",
2332
+ "flags": {
2333
+ "json": {
2334
+ "description": "Format output as json.",
2335
+ "helpGroup": "GLOBAL",
2336
+ "name": "json",
2337
+ "allowNo": false,
2338
+ "type": "boolean"
2339
+ },
2340
+ "base-url": {
2341
+ "description": "API base URL",
2342
+ "env": "FACES_BASE_URL",
2343
+ "name": "base-url",
2344
+ "hasDynamicHelp": false,
2345
+ "multiple": false,
2346
+ "type": "option"
2347
+ },
2348
+ "token": {
2349
+ "description": "JWT bearer token",
2350
+ "env": "FACES_TOKEN",
2351
+ "name": "token",
2352
+ "hasDynamicHelp": false,
2353
+ "multiple": false,
2354
+ "type": "option"
2355
+ },
2356
+ "api-key": {
2357
+ "description": "API key",
2358
+ "env": "FACES_API_KEY",
2359
+ "name": "api-key",
2360
+ "hasDynamicHelp": false,
2361
+ "multiple": false,
2362
+ "type": "option"
2363
+ },
2364
+ "yes": {
2365
+ "description": "Skip confirmation",
2366
+ "name": "yes",
2367
+ "allowNo": false,
2368
+ "type": "boolean"
2369
+ }
2370
+ },
2371
+ "hasDynamicHelp": false,
2372
+ "hiddenAliases": [],
2087
2373
  "id": "face:delete",
2088
2374
  "pluginAlias": "faces-cli",
2089
2375
  "pluginName": "faces-cli",
@@ -2616,292 +2902,6 @@
2616
2902
  "upload.js"
2617
2903
  ]
2618
2904
  },
2619
- "keys:create": {
2620
- "aliases": [],
2621
- "args": {},
2622
- "description": "Create a new API key (JWT required)",
2623
- "flags": {
2624
- "json": {
2625
- "description": "Format output as json.",
2626
- "helpGroup": "GLOBAL",
2627
- "name": "json",
2628
- "allowNo": false,
2629
- "type": "boolean"
2630
- },
2631
- "base-url": {
2632
- "description": "API base URL",
2633
- "env": "FACES_BASE_URL",
2634
- "name": "base-url",
2635
- "hasDynamicHelp": false,
2636
- "multiple": false,
2637
- "type": "option"
2638
- },
2639
- "token": {
2640
- "description": "JWT bearer token",
2641
- "env": "FACES_TOKEN",
2642
- "name": "token",
2643
- "hasDynamicHelp": false,
2644
- "multiple": false,
2645
- "type": "option"
2646
- },
2647
- "api-key": {
2648
- "description": "API key",
2649
- "env": "FACES_API_KEY",
2650
- "name": "api-key",
2651
- "hasDynamicHelp": false,
2652
- "multiple": false,
2653
- "type": "option"
2654
- },
2655
- "name": {
2656
- "description": "Key name/label",
2657
- "name": "name",
2658
- "required": true,
2659
- "hasDynamicHelp": false,
2660
- "multiple": false,
2661
- "type": "option"
2662
- },
2663
- "expires-days": {
2664
- "description": "Expiry in days (omit for no expiry)",
2665
- "name": "expires-days",
2666
- "hasDynamicHelp": false,
2667
- "multiple": false,
2668
- "type": "option"
2669
- },
2670
- "budget": {
2671
- "description": "Spend budget in USD",
2672
- "name": "budget",
2673
- "hasDynamicHelp": false,
2674
- "multiple": false,
2675
- "type": "option"
2676
- },
2677
- "face": {
2678
- "description": "Allowed face alias (repeatable)",
2679
- "name": "face",
2680
- "hasDynamicHelp": false,
2681
- "multiple": true,
2682
- "type": "option"
2683
- },
2684
- "model": {
2685
- "description": "Allowed model name (repeatable)",
2686
- "name": "model",
2687
- "hasDynamicHelp": false,
2688
- "multiple": true,
2689
- "type": "option"
2690
- }
2691
- },
2692
- "hasDynamicHelp": false,
2693
- "hiddenAliases": [],
2694
- "id": "keys:create",
2695
- "pluginAlias": "faces-cli",
2696
- "pluginName": "faces-cli",
2697
- "pluginType": "core",
2698
- "strict": true,
2699
- "enableJsonFlag": true,
2700
- "isESM": true,
2701
- "relativePath": [
2702
- "dist",
2703
- "commands",
2704
- "keys",
2705
- "create.js"
2706
- ]
2707
- },
2708
- "keys:list": {
2709
- "aliases": [],
2710
- "args": {},
2711
- "description": "List all API keys (JWT required)",
2712
- "flags": {
2713
- "json": {
2714
- "description": "Format output as json.",
2715
- "helpGroup": "GLOBAL",
2716
- "name": "json",
2717
- "allowNo": false,
2718
- "type": "boolean"
2719
- },
2720
- "base-url": {
2721
- "description": "API base URL",
2722
- "env": "FACES_BASE_URL",
2723
- "name": "base-url",
2724
- "hasDynamicHelp": false,
2725
- "multiple": false,
2726
- "type": "option"
2727
- },
2728
- "token": {
2729
- "description": "JWT bearer token",
2730
- "env": "FACES_TOKEN",
2731
- "name": "token",
2732
- "hasDynamicHelp": false,
2733
- "multiple": false,
2734
- "type": "option"
2735
- },
2736
- "api-key": {
2737
- "description": "API key",
2738
- "env": "FACES_API_KEY",
2739
- "name": "api-key",
2740
- "hasDynamicHelp": false,
2741
- "multiple": false,
2742
- "type": "option"
2743
- }
2744
- },
2745
- "hasDynamicHelp": false,
2746
- "hiddenAliases": [],
2747
- "id": "keys:list",
2748
- "pluginAlias": "faces-cli",
2749
- "pluginName": "faces-cli",
2750
- "pluginType": "core",
2751
- "strict": true,
2752
- "enableJsonFlag": true,
2753
- "isESM": true,
2754
- "relativePath": [
2755
- "dist",
2756
- "commands",
2757
- "keys",
2758
- "list.js"
2759
- ]
2760
- },
2761
- "keys:revoke": {
2762
- "aliases": [],
2763
- "args": {
2764
- "key_id": {
2765
- "description": "Key ID",
2766
- "name": "key_id",
2767
- "required": true
2768
- }
2769
- },
2770
- "description": "Revoke an API key (JWT required)",
2771
- "flags": {
2772
- "json": {
2773
- "description": "Format output as json.",
2774
- "helpGroup": "GLOBAL",
2775
- "name": "json",
2776
- "allowNo": false,
2777
- "type": "boolean"
2778
- },
2779
- "base-url": {
2780
- "description": "API base URL",
2781
- "env": "FACES_BASE_URL",
2782
- "name": "base-url",
2783
- "hasDynamicHelp": false,
2784
- "multiple": false,
2785
- "type": "option"
2786
- },
2787
- "token": {
2788
- "description": "JWT bearer token",
2789
- "env": "FACES_TOKEN",
2790
- "name": "token",
2791
- "hasDynamicHelp": false,
2792
- "multiple": false,
2793
- "type": "option"
2794
- },
2795
- "api-key": {
2796
- "description": "API key",
2797
- "env": "FACES_API_KEY",
2798
- "name": "api-key",
2799
- "hasDynamicHelp": false,
2800
- "multiple": false,
2801
- "type": "option"
2802
- },
2803
- "yes": {
2804
- "description": "Skip confirmation",
2805
- "name": "yes",
2806
- "allowNo": false,
2807
- "type": "boolean"
2808
- }
2809
- },
2810
- "hasDynamicHelp": false,
2811
- "hiddenAliases": [],
2812
- "id": "keys:revoke",
2813
- "pluginAlias": "faces-cli",
2814
- "pluginName": "faces-cli",
2815
- "pluginType": "core",
2816
- "strict": true,
2817
- "enableJsonFlag": true,
2818
- "isESM": true,
2819
- "relativePath": [
2820
- "dist",
2821
- "commands",
2822
- "keys",
2823
- "revoke.js"
2824
- ]
2825
- },
2826
- "keys:update": {
2827
- "aliases": [],
2828
- "args": {
2829
- "key_id": {
2830
- "description": "Key ID",
2831
- "name": "key_id",
2832
- "required": true
2833
- }
2834
- },
2835
- "description": "Update API key metadata (JWT required)",
2836
- "flags": {
2837
- "json": {
2838
- "description": "Format output as json.",
2839
- "helpGroup": "GLOBAL",
2840
- "name": "json",
2841
- "allowNo": false,
2842
- "type": "boolean"
2843
- },
2844
- "base-url": {
2845
- "description": "API base URL",
2846
- "env": "FACES_BASE_URL",
2847
- "name": "base-url",
2848
- "hasDynamicHelp": false,
2849
- "multiple": false,
2850
- "type": "option"
2851
- },
2852
- "token": {
2853
- "description": "JWT bearer token",
2854
- "env": "FACES_TOKEN",
2855
- "name": "token",
2856
- "hasDynamicHelp": false,
2857
- "multiple": false,
2858
- "type": "option"
2859
- },
2860
- "api-key": {
2861
- "description": "API key",
2862
- "env": "FACES_API_KEY",
2863
- "name": "api-key",
2864
- "hasDynamicHelp": false,
2865
- "multiple": false,
2866
- "type": "option"
2867
- },
2868
- "name": {
2869
- "description": "New key name",
2870
- "name": "name",
2871
- "hasDynamicHelp": false,
2872
- "multiple": false,
2873
- "type": "option"
2874
- },
2875
- "budget": {
2876
- "description": "New spend budget in USD",
2877
- "name": "budget",
2878
- "hasDynamicHelp": false,
2879
- "multiple": false,
2880
- "type": "option"
2881
- },
2882
- "reset-spent": {
2883
- "description": "Reset spent amount to zero",
2884
- "name": "reset-spent",
2885
- "allowNo": false,
2886
- "type": "boolean"
2887
- }
2888
- },
2889
- "hasDynamicHelp": false,
2890
- "hiddenAliases": [],
2891
- "id": "keys:update",
2892
- "pluginAlias": "faces-cli",
2893
- "pluginName": "faces-cli",
2894
- "pluginType": "core",
2895
- "strict": true,
2896
- "enableJsonFlag": true,
2897
- "isESM": true,
2898
- "relativePath": [
2899
- "dist",
2900
- "commands",
2901
- "keys",
2902
- "update.js"
2903
- ]
2904
- },
2905
2905
  "compile:doc:create": {
2906
2906
  "aliases": [],
2907
2907
  "args": {
@@ -4231,5 +4231,5 @@
4231
4231
  ]
4232
4232
  }
4233
4233
  },
4234
- "version": "1.5.10"
4234
+ "version": "1.5.11"
4235
4235
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "faces-cli",
3
- "version": "1.5.10",
3
+ "version": "1.5.11",
4
4
  "description": "CLI for the Faces AI platform",
5
5
  "type": "module",
6
6
  "author": "sybileak <sybileak@proton.me>",