faces-cli 1.5.14 → 1.5.15

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.
@@ -537,6 +537,59 @@
537
537
  "usage.js"
538
538
  ]
539
539
  },
540
+ "catalog:backup": {
541
+ "aliases": [],
542
+ "args": {},
543
+ "description": "Snapshot all faces and source material for migration",
544
+ "flags": {
545
+ "json": {
546
+ "description": "Format output as json.",
547
+ "helpGroup": "GLOBAL",
548
+ "name": "json",
549
+ "allowNo": false,
550
+ "type": "boolean"
551
+ },
552
+ "base-url": {
553
+ "description": "API base URL",
554
+ "env": "FACES_BASE_URL",
555
+ "name": "base-url",
556
+ "hasDynamicHelp": false,
557
+ "multiple": false,
558
+ "type": "option"
559
+ },
560
+ "token": {
561
+ "description": "JWT bearer token",
562
+ "env": "FACES_TOKEN",
563
+ "name": "token",
564
+ "hasDynamicHelp": false,
565
+ "multiple": false,
566
+ "type": "option"
567
+ },
568
+ "api-key": {
569
+ "description": "API key",
570
+ "env": "FACES_API_KEY",
571
+ "name": "api-key",
572
+ "hasDynamicHelp": false,
573
+ "multiple": false,
574
+ "type": "option"
575
+ }
576
+ },
577
+ "hasDynamicHelp": false,
578
+ "hiddenAliases": [],
579
+ "id": "catalog:backup",
580
+ "pluginAlias": "faces-cli",
581
+ "pluginName": "faces-cli",
582
+ "pluginType": "core",
583
+ "strict": true,
584
+ "enableJsonFlag": true,
585
+ "isESM": true,
586
+ "relativePath": [
587
+ "dist",
588
+ "commands",
589
+ "catalog",
590
+ "backup.js"
591
+ ]
592
+ },
540
593
  "catalog:doctor": {
541
594
  "aliases": [],
542
595
  "args": {},
@@ -735,6 +788,70 @@
735
788
  "manyfaced.js"
736
789
  ]
737
790
  },
791
+ "catalog:restore": {
792
+ "aliases": [],
793
+ "args": {
794
+ "file": {
795
+ "description": "Backup file path (default: most recent in ~/.faces/backups/)",
796
+ "name": "file"
797
+ }
798
+ },
799
+ "description": "Restore faces and source material from a backup snapshot",
800
+ "flags": {
801
+ "json": {
802
+ "description": "Format output as json.",
803
+ "helpGroup": "GLOBAL",
804
+ "name": "json",
805
+ "allowNo": false,
806
+ "type": "boolean"
807
+ },
808
+ "base-url": {
809
+ "description": "API base URL",
810
+ "env": "FACES_BASE_URL",
811
+ "name": "base-url",
812
+ "hasDynamicHelp": false,
813
+ "multiple": false,
814
+ "type": "option"
815
+ },
816
+ "token": {
817
+ "description": "JWT bearer token",
818
+ "env": "FACES_TOKEN",
819
+ "name": "token",
820
+ "hasDynamicHelp": false,
821
+ "multiple": false,
822
+ "type": "option"
823
+ },
824
+ "api-key": {
825
+ "description": "API key",
826
+ "env": "FACES_API_KEY",
827
+ "name": "api-key",
828
+ "hasDynamicHelp": false,
829
+ "multiple": false,
830
+ "type": "option"
831
+ },
832
+ "compile": {
833
+ "description": "Run compile:all after restoring",
834
+ "name": "compile",
835
+ "allowNo": false,
836
+ "type": "boolean"
837
+ }
838
+ },
839
+ "hasDynamicHelp": false,
840
+ "hiddenAliases": [],
841
+ "id": "catalog:restore",
842
+ "pluginAlias": "faces-cli",
843
+ "pluginName": "faces-cli",
844
+ "pluginType": "core",
845
+ "strict": true,
846
+ "enableJsonFlag": true,
847
+ "isESM": true,
848
+ "relativePath": [
849
+ "dist",
850
+ "commands",
851
+ "catalog",
852
+ "restore.js"
853
+ ]
854
+ },
738
855
  "auth:connect": {
739
856
  "aliases": [],
740
857
  "args": {
@@ -1260,16 +1377,16 @@
1260
1377
  "whoami.js"
1261
1378
  ]
1262
1379
  },
1263
- "compile:import": {
1380
+ "chat:chat": {
1264
1381
  "aliases": [],
1265
1382
  "args": {
1266
- "face_id": {
1267
- "description": "Face alias",
1268
- "name": "face_id",
1383
+ "face_username": {
1384
+ "description": "Face alias (or alias@model)",
1385
+ "name": "face_username",
1269
1386
  "required": true
1270
1387
  }
1271
1388
  },
1272
- "description": "Import a YouTube video into a face via server-side download and transcription",
1389
+ "description": "Chat via a face. Auto-routes to the correct API endpoint based on model provider.",
1273
1390
  "flags": {
1274
1391
  "json": {
1275
1392
  "description": "Format output as json.",
@@ -1302,55 +1419,66 @@
1302
1419
  "multiple": false,
1303
1420
  "type": "option"
1304
1421
  },
1305
- "url": {
1306
- "description": "YouTube URL (youtube.com/watch?v=... or youtu.be/...)",
1307
- "name": "url",
1308
- "required": true,
1422
+ "message": {
1423
+ "char": "m",
1424
+ "description": "User message (repeatable)",
1425
+ "name": "message",
1426
+ "required": false,
1427
+ "hasDynamicHelp": false,
1428
+ "multiple": true,
1429
+ "type": "option"
1430
+ },
1431
+ "llm": {
1432
+ "description": "LLM override (e.g. gpt-4o-mini, claude-sonnet-4-6)",
1433
+ "name": "llm",
1309
1434
  "hasDynamicHelp": false,
1310
1435
  "multiple": false,
1311
1436
  "type": "option"
1312
1437
  },
1313
- "type": {
1314
- "description": "\"document\" for solo talks, lectures, monologues; \"thread\" for interviews or multi-speaker conversations",
1315
- "name": "type",
1316
- "default": "document",
1438
+ "system": {
1439
+ "description": "System prompt / instructions",
1440
+ "name": "system",
1317
1441
  "hasDynamicHelp": false,
1318
1442
  "multiple": false,
1319
- "options": [
1320
- "document",
1321
- "thread"
1322
- ],
1323
1443
  "type": "option"
1324
1444
  },
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",
1445
+ "stream": {
1446
+ "description": "Stream the response",
1447
+ "name": "stream",
1448
+ "allowNo": false,
1449
+ "type": "boolean"
1450
+ },
1451
+ "max-tokens": {
1452
+ "description": "Max tokens",
1453
+ "name": "max-tokens",
1329
1454
  "hasDynamicHelp": false,
1330
1455
  "multiple": false,
1331
- "options": [
1332
- "first-person",
1333
- "third-person"
1334
- ],
1335
1456
  "type": "option"
1336
1457
  },
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",
1458
+ "temperature": {
1459
+ "description": "Temperature (0.0-2.0)",
1460
+ "name": "temperature",
1340
1461
  "hasDynamicHelp": false,
1341
1462
  "multiple": false,
1342
1463
  "type": "option"
1343
1464
  },
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",
1465
+ "file": {
1466
+ "description": "Read message from file",
1467
+ "name": "file",
1468
+ "hasDynamicHelp": false,
1469
+ "multiple": false,
1470
+ "type": "option"
1471
+ },
1472
+ "responses": {
1473
+ "description": "Use OpenAI Responses API instead of Chat Completions",
1474
+ "name": "responses",
1347
1475
  "allowNo": false,
1348
1476
  "type": "boolean"
1349
1477
  }
1350
1478
  },
1351
1479
  "hasDynamicHelp": false,
1352
1480
  "hiddenAliases": [],
1353
- "id": "compile:import",
1481
+ "id": "chat:chat",
1354
1482
  "pluginAlias": "faces-cli",
1355
1483
  "pluginName": "faces-cli",
1356
1484
  "pluginType": "core",
@@ -1360,20 +1488,20 @@
1360
1488
  "relativePath": [
1361
1489
  "dist",
1362
1490
  "commands",
1363
- "compile",
1364
- "import.js"
1491
+ "chat",
1492
+ "chat.js"
1365
1493
  ]
1366
1494
  },
1367
- "compile:upload": {
1495
+ "chat:messages": {
1368
1496
  "aliases": [],
1369
1497
  "args": {
1370
- "alias": {
1371
- "description": "Face alias",
1372
- "name": "alias",
1498
+ "face_model": {
1499
+ "description": "Face model (e.g. myface or myface@claude-sonnet-4-6)",
1500
+ "name": "face_model",
1373
1501
  "required": true
1374
1502
  }
1375
1503
  },
1376
- "description": "Upload a file (text/PDF/audio/video) to compile into a face",
1504
+ "description": "Anthropic Messages API proxy via a face (alias: chat:chat auto-routes Anthropic models here)",
1377
1505
  "flags": {
1378
1506
  "json": {
1379
1507
  "description": "Format output as json.",
@@ -1406,55 +1534,40 @@
1406
1534
  "multiple": false,
1407
1535
  "type": "option"
1408
1536
  },
1409
- "file": {
1410
- "description": "File to upload",
1411
- "name": "file",
1537
+ "message": {
1538
+ "char": "m",
1539
+ "description": "User message (repeatable)",
1540
+ "name": "message",
1412
1541
  "required": true,
1413
1542
  "hasDynamicHelp": false,
1414
- "multiple": false,
1543
+ "multiple": true,
1415
1544
  "type": "option"
1416
1545
  },
1417
- "kind": {
1418
- "description": "Upload kind: document or thread",
1419
- "name": "kind",
1420
- "default": "document",
1546
+ "system": {
1547
+ "description": "System prompt",
1548
+ "name": "system",
1421
1549
  "hasDynamicHelp": false,
1422
1550
  "multiple": false,
1423
- "options": [
1424
- "document",
1425
- "thread"
1426
- ],
1427
1551
  "type": "option"
1428
1552
  },
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"
1553
+ "stream": {
1554
+ "description": "Stream the response",
1555
+ "name": "stream",
1556
+ "allowNo": false,
1557
+ "type": "boolean"
1440
1558
  },
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",
1559
+ "max-tokens": {
1560
+ "description": "Max tokens",
1561
+ "name": "max-tokens",
1562
+ "default": 1024,
1444
1563
  "hasDynamicHelp": false,
1445
1564
  "multiple": false,
1446
1565
  "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
1566
  }
1454
1567
  },
1455
1568
  "hasDynamicHelp": false,
1456
1569
  "hiddenAliases": [],
1457
- "id": "compile:upload",
1570
+ "id": "chat:messages",
1458
1571
  "pluginAlias": "faces-cli",
1459
1572
  "pluginName": "faces-cli",
1460
1573
  "pluginType": "core",
@@ -1464,20 +1577,20 @@
1464
1577
  "relativePath": [
1465
1578
  "dist",
1466
1579
  "commands",
1467
- "compile",
1468
- "upload.js"
1580
+ "chat",
1581
+ "messages.js"
1469
1582
  ]
1470
1583
  },
1471
- "chat:chat": {
1584
+ "chat:responses": {
1472
1585
  "aliases": [],
1473
1586
  "args": {
1474
- "face_username": {
1475
- "description": "Face alias (or alias@model)",
1476
- "name": "face_username",
1587
+ "face_model": {
1588
+ "description": "Face model (e.g. myface or myface@gpt-4o)",
1589
+ "name": "face_model",
1477
1590
  "required": true
1478
1591
  }
1479
1592
  },
1480
- "description": "Chat via a face. Auto-routes to the correct API endpoint based on model provider.",
1593
+ "description": "OpenAI Responses API proxy via a face (alias: chat:chat --responses)",
1481
1594
  "flags": {
1482
1595
  "json": {
1483
1596
  "description": "Format output as json.",
@@ -1512,23 +1625,16 @@
1512
1625
  },
1513
1626
  "message": {
1514
1627
  "char": "m",
1515
- "description": "User message (repeatable)",
1628
+ "description": "User input message",
1516
1629
  "name": "message",
1517
- "required": false,
1518
- "hasDynamicHelp": false,
1519
- "multiple": true,
1520
- "type": "option"
1521
- },
1522
- "llm": {
1523
- "description": "LLM override (e.g. gpt-4o-mini, claude-sonnet-4-6)",
1524
- "name": "llm",
1630
+ "required": true,
1525
1631
  "hasDynamicHelp": false,
1526
1632
  "multiple": false,
1527
1633
  "type": "option"
1528
1634
  },
1529
- "system": {
1530
- "description": "System prompt / instructions",
1531
- "name": "system",
1635
+ "instructions": {
1636
+ "description": "System instructions",
1637
+ "name": "instructions",
1532
1638
  "hasDynamicHelp": false,
1533
1639
  "multiple": false,
1534
1640
  "type": "option"
@@ -1538,38 +1644,72 @@
1538
1644
  "name": "stream",
1539
1645
  "allowNo": false,
1540
1646
  "type": "boolean"
1647
+ }
1648
+ },
1649
+ "hasDynamicHelp": false,
1650
+ "hiddenAliases": [],
1651
+ "id": "chat:responses",
1652
+ "pluginAlias": "faces-cli",
1653
+ "pluginName": "faces-cli",
1654
+ "pluginType": "core",
1655
+ "strict": true,
1656
+ "enableJsonFlag": true,
1657
+ "isESM": true,
1658
+ "relativePath": [
1659
+ "dist",
1660
+ "commands",
1661
+ "chat",
1662
+ "responses.js"
1663
+ ]
1664
+ },
1665
+ "compile:all": {
1666
+ "aliases": [],
1667
+ "args": {},
1668
+ "description": "Compile all uncompiled documents and threads across all faces",
1669
+ "flags": {
1670
+ "json": {
1671
+ "description": "Format output as json.",
1672
+ "helpGroup": "GLOBAL",
1673
+ "name": "json",
1674
+ "allowNo": false,
1675
+ "type": "boolean"
1541
1676
  },
1542
- "max-tokens": {
1543
- "description": "Max tokens",
1544
- "name": "max-tokens",
1677
+ "base-url": {
1678
+ "description": "API base URL",
1679
+ "env": "FACES_BASE_URL",
1680
+ "name": "base-url",
1545
1681
  "hasDynamicHelp": false,
1546
1682
  "multiple": false,
1547
1683
  "type": "option"
1548
1684
  },
1549
- "temperature": {
1550
- "description": "Temperature (0.0-2.0)",
1551
- "name": "temperature",
1685
+ "token": {
1686
+ "description": "JWT bearer token",
1687
+ "env": "FACES_TOKEN",
1688
+ "name": "token",
1552
1689
  "hasDynamicHelp": false,
1553
1690
  "multiple": false,
1554
1691
  "type": "option"
1555
1692
  },
1556
- "file": {
1557
- "description": "Read message from file",
1558
- "name": "file",
1693
+ "api-key": {
1694
+ "description": "API key",
1695
+ "env": "FACES_API_KEY",
1696
+ "name": "api-key",
1559
1697
  "hasDynamicHelp": false,
1560
1698
  "multiple": false,
1561
1699
  "type": "option"
1562
1700
  },
1563
- "responses": {
1564
- "description": "Use OpenAI Responses API instead of Chat Completions",
1565
- "name": "responses",
1566
- "allowNo": false,
1567
- "type": "boolean"
1701
+ "timeout": {
1702
+ "description": "Per-item compile timeout in seconds (default: 600)",
1703
+ "name": "timeout",
1704
+ "default": 600,
1705
+ "hasDynamicHelp": false,
1706
+ "multiple": false,
1707
+ "type": "option"
1568
1708
  }
1569
1709
  },
1570
1710
  "hasDynamicHelp": false,
1571
1711
  "hiddenAliases": [],
1572
- "id": "chat:chat",
1712
+ "id": "compile:all",
1573
1713
  "pluginAlias": "faces-cli",
1574
1714
  "pluginName": "faces-cli",
1575
1715
  "pluginType": "core",
@@ -1579,20 +1719,20 @@
1579
1719
  "relativePath": [
1580
1720
  "dist",
1581
1721
  "commands",
1582
- "chat",
1583
- "chat.js"
1722
+ "compile",
1723
+ "all.js"
1584
1724
  ]
1585
1725
  },
1586
- "chat:messages": {
1726
+ "compile:import": {
1587
1727
  "aliases": [],
1588
1728
  "args": {
1589
- "face_model": {
1590
- "description": "Face model (e.g. myface or myface@claude-sonnet-4-6)",
1591
- "name": "face_model",
1729
+ "face_id": {
1730
+ "description": "Face alias",
1731
+ "name": "face_id",
1592
1732
  "required": true
1593
1733
  }
1594
1734
  },
1595
- "description": "Anthropic Messages API proxy via a face (alias: chat:chat auto-routes Anthropic models here)",
1735
+ "description": "Import a YouTube video into a face via server-side download and transcription",
1596
1736
  "flags": {
1597
1737
  "json": {
1598
1738
  "description": "Format output as json.",
@@ -1625,40 +1765,55 @@
1625
1765
  "multiple": false,
1626
1766
  "type": "option"
1627
1767
  },
1628
- "message": {
1629
- "char": "m",
1630
- "description": "User message (repeatable)",
1631
- "name": "message",
1768
+ "url": {
1769
+ "description": "YouTube URL (youtube.com/watch?v=... or youtu.be/...)",
1770
+ "name": "url",
1632
1771
  "required": true,
1633
1772
  "hasDynamicHelp": false,
1634
- "multiple": true,
1773
+ "multiple": false,
1635
1774
  "type": "option"
1636
1775
  },
1637
- "system": {
1638
- "description": "System prompt",
1639
- "name": "system",
1776
+ "type": {
1777
+ "description": "\"document\" for solo talks, lectures, monologues; \"thread\" for interviews or multi-speaker conversations",
1778
+ "name": "type",
1779
+ "default": "document",
1640
1780
  "hasDynamicHelp": false,
1641
1781
  "multiple": false,
1782
+ "options": [
1783
+ "document",
1784
+ "thread"
1785
+ ],
1642
1786
  "type": "option"
1643
1787
  },
1644
- "stream": {
1645
- "description": "Stream the response",
1646
- "name": "stream",
1647
- "allowNo": false,
1648
- "type": "boolean"
1788
+ "perspective": {
1789
+ "description": "\"first-person\" if the face is the speaker; \"third-person\" if the video is about the face",
1790
+ "name": "perspective",
1791
+ "default": "third-person",
1792
+ "hasDynamicHelp": false,
1793
+ "multiple": false,
1794
+ "options": [
1795
+ "first-person",
1796
+ "third-person"
1797
+ ],
1798
+ "type": "option"
1649
1799
  },
1650
- "max-tokens": {
1651
- "description": "Max tokens",
1652
- "name": "max-tokens",
1653
- "default": 1024,
1800
+ "face-speaker": {
1801
+ "description": "For --type thread: AssemblyAI speaker label (e.g. \"A\") that corresponds to the face. Defaults to first detected speaker.",
1802
+ "name": "face-speaker",
1654
1803
  "hasDynamicHelp": false,
1655
1804
  "multiple": false,
1656
1805
  "type": "option"
1806
+ },
1807
+ "no-wait": {
1808
+ "description": "Return immediately after import starts (do not poll for transcription). Prints the ID for manual polling.",
1809
+ "name": "no-wait",
1810
+ "allowNo": false,
1811
+ "type": "boolean"
1657
1812
  }
1658
1813
  },
1659
1814
  "hasDynamicHelp": false,
1660
1815
  "hiddenAliases": [],
1661
- "id": "chat:messages",
1816
+ "id": "compile:import",
1662
1817
  "pluginAlias": "faces-cli",
1663
1818
  "pluginName": "faces-cli",
1664
1819
  "pluginType": "core",
@@ -1668,20 +1823,20 @@
1668
1823
  "relativePath": [
1669
1824
  "dist",
1670
1825
  "commands",
1671
- "chat",
1672
- "messages.js"
1826
+ "compile",
1827
+ "import.js"
1673
1828
  ]
1674
1829
  },
1675
- "chat:responses": {
1830
+ "compile:upload": {
1676
1831
  "aliases": [],
1677
1832
  "args": {
1678
- "face_model": {
1679
- "description": "Face model (e.g. myface or myface@gpt-4o)",
1680
- "name": "face_model",
1833
+ "alias": {
1834
+ "description": "Face alias",
1835
+ "name": "alias",
1681
1836
  "required": true
1682
1837
  }
1683
1838
  },
1684
- "description": "OpenAI Responses API proxy via a face (alias: chat:chat --responses)",
1839
+ "description": "Upload a file (text/PDF/audio/video) to compile into a face",
1685
1840
  "flags": {
1686
1841
  "json": {
1687
1842
  "description": "Format output as json.",
@@ -1714,32 +1869,55 @@
1714
1869
  "multiple": false,
1715
1870
  "type": "option"
1716
1871
  },
1717
- "message": {
1718
- "char": "m",
1719
- "description": "User input message",
1720
- "name": "message",
1872
+ "file": {
1873
+ "description": "File to upload",
1874
+ "name": "file",
1721
1875
  "required": true,
1722
1876
  "hasDynamicHelp": false,
1723
1877
  "multiple": false,
1724
1878
  "type": "option"
1725
1879
  },
1726
- "instructions": {
1727
- "description": "System instructions",
1728
- "name": "instructions",
1880
+ "kind": {
1881
+ "description": "Upload kind: document or thread",
1882
+ "name": "kind",
1883
+ "default": "document",
1729
1884
  "hasDynamicHelp": false,
1730
1885
  "multiple": false,
1886
+ "options": [
1887
+ "document",
1888
+ "thread"
1889
+ ],
1731
1890
  "type": "option"
1732
1891
  },
1733
- "stream": {
1734
- "description": "Stream the response",
1735
- "name": "stream",
1892
+ "perspective": {
1893
+ "description": "Perspective (document only)",
1894
+ "name": "perspective",
1895
+ "default": "third-person",
1896
+ "hasDynamicHelp": false,
1897
+ "multiple": false,
1898
+ "options": [
1899
+ "first-person",
1900
+ "third-person"
1901
+ ],
1902
+ "type": "option"
1903
+ },
1904
+ "face-speaker": {
1905
+ "description": "Speaker name to map to the face (thread only). If omitted, auto-detected from face name.",
1906
+ "name": "face-speaker",
1907
+ "hasDynamicHelp": false,
1908
+ "multiple": false,
1909
+ "type": "option"
1910
+ },
1911
+ "no-wait": {
1912
+ "description": "Return immediately after upload (do not poll for transcription). Prints the ID for manual polling.",
1913
+ "name": "no-wait",
1736
1914
  "allowNo": false,
1737
1915
  "type": "boolean"
1738
1916
  }
1739
1917
  },
1740
1918
  "hasDynamicHelp": false,
1741
1919
  "hiddenAliases": [],
1742
- "id": "chat:responses",
1920
+ "id": "compile:upload",
1743
1921
  "pluginAlias": "faces-cli",
1744
1922
  "pluginName": "faces-cli",
1745
1923
  "pluginType": "core",
@@ -1749,8 +1927,8 @@
1749
1927
  "relativePath": [
1750
1928
  "dist",
1751
1929
  "commands",
1752
- "chat",
1753
- "responses.js"
1930
+ "compile",
1931
+ "upload.js"
1754
1932
  ]
1755
1933
  },
1756
1934
  "config:clear": {
@@ -1929,10 +2107,10 @@
1929
2107
  "show.js"
1930
2108
  ]
1931
2109
  },
1932
- "keys:create": {
2110
+ "face:attributes": {
1933
2111
  "aliases": [],
1934
2112
  "args": {},
1935
- "description": "Create a new API key (JWT required)",
2113
+ "description": "List all supported attribute keys",
1936
2114
  "flags": {
1937
2115
  "json": {
1938
2116
  "description": "Format output as json.",
@@ -1964,47 +2142,11 @@
1964
2142
  "hasDynamicHelp": false,
1965
2143
  "multiple": false,
1966
2144
  "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"
2003
2145
  }
2004
2146
  },
2005
2147
  "hasDynamicHelp": false,
2006
2148
  "hiddenAliases": [],
2007
- "id": "keys:create",
2149
+ "id": "face:attributes",
2008
2150
  "pluginAlias": "faces-cli",
2009
2151
  "pluginName": "faces-cli",
2010
2152
  "pluginType": "core",
@@ -2014,264 +2156,14 @@
2014
2156
  "relativePath": [
2015
2157
  "dist",
2016
2158
  "commands",
2017
- "keys",
2018
- "create.js"
2159
+ "face",
2160
+ "attributes.js"
2019
2161
  ]
2020
2162
  },
2021
- "keys:list": {
2163
+ "face:create": {
2022
2164
  "aliases": [],
2023
2165
  "args": {},
2024
- "description": "List all API keys (JWT required)",
2025
- "flags": {
2026
- "json": {
2027
- "description": "Format output as json.",
2028
- "helpGroup": "GLOBAL",
2029
- "name": "json",
2030
- "allowNo": false,
2031
- "type": "boolean"
2032
- },
2033
- "base-url": {
2034
- "description": "API base URL",
2035
- "env": "FACES_BASE_URL",
2036
- "name": "base-url",
2037
- "hasDynamicHelp": false,
2038
- "multiple": false,
2039
- "type": "option"
2040
- },
2041
- "token": {
2042
- "description": "JWT bearer token",
2043
- "env": "FACES_TOKEN",
2044
- "name": "token",
2045
- "hasDynamicHelp": false,
2046
- "multiple": false,
2047
- "type": "option"
2048
- },
2049
- "api-key": {
2050
- "description": "API key",
2051
- "env": "FACES_API_KEY",
2052
- "name": "api-key",
2053
- "hasDynamicHelp": false,
2054
- "multiple": false,
2055
- "type": "option"
2056
- }
2057
- },
2058
- "hasDynamicHelp": false,
2059
- "hiddenAliases": [],
2060
- "id": "keys:list",
2061
- "pluginAlias": "faces-cli",
2062
- "pluginName": "faces-cli",
2063
- "pluginType": "core",
2064
- "strict": true,
2065
- "enableJsonFlag": true,
2066
- "isESM": true,
2067
- "relativePath": [
2068
- "dist",
2069
- "commands",
2070
- "keys",
2071
- "list.js"
2072
- ]
2073
- },
2074
- "keys:revoke": {
2075
- "aliases": [],
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)",
2084
- "flags": {
2085
- "json": {
2086
- "description": "Format output as json.",
2087
- "helpGroup": "GLOBAL",
2088
- "name": "json",
2089
- "allowNo": false,
2090
- "type": "boolean"
2091
- },
2092
- "base-url": {
2093
- "description": "API base URL",
2094
- "env": "FACES_BASE_URL",
2095
- "name": "base-url",
2096
- "hasDynamicHelp": false,
2097
- "multiple": false,
2098
- "type": "option"
2099
- },
2100
- "token": {
2101
- "description": "JWT bearer token",
2102
- "env": "FACES_TOKEN",
2103
- "name": "token",
2104
- "hasDynamicHelp": false,
2105
- "multiple": false,
2106
- "type": "option"
2107
- },
2108
- "api-key": {
2109
- "description": "API key",
2110
- "env": "FACES_API_KEY",
2111
- "name": "api-key",
2112
- "hasDynamicHelp": false,
2113
- "multiple": false,
2114
- "type": "option"
2115
- },
2116
- "yes": {
2117
- "description": "Skip confirmation",
2118
- "name": "yes",
2119
- "allowNo": false,
2120
- "type": "boolean"
2121
- }
2122
- },
2123
- "hasDynamicHelp": false,
2124
- "hiddenAliases": [],
2125
- "id": "keys:revoke",
2126
- "pluginAlias": "faces-cli",
2127
- "pluginName": "faces-cli",
2128
- "pluginType": "core",
2129
- "strict": true,
2130
- "enableJsonFlag": true,
2131
- "isESM": true,
2132
- "relativePath": [
2133
- "dist",
2134
- "commands",
2135
- "keys",
2136
- "revoke.js"
2137
- ]
2138
- },
2139
- "keys:update": {
2140
- "aliases": [],
2141
- "args": {
2142
- "key_id": {
2143
- "description": "Key ID",
2144
- "name": "key_id",
2145
- "required": true
2146
- }
2147
- },
2148
- "description": "Update API key metadata (JWT required)",
2149
- "flags": {
2150
- "json": {
2151
- "description": "Format output as json.",
2152
- "helpGroup": "GLOBAL",
2153
- "name": "json",
2154
- "allowNo": false,
2155
- "type": "boolean"
2156
- },
2157
- "base-url": {
2158
- "description": "API base URL",
2159
- "env": "FACES_BASE_URL",
2160
- "name": "base-url",
2161
- "hasDynamicHelp": false,
2162
- "multiple": false,
2163
- "type": "option"
2164
- },
2165
- "token": {
2166
- "description": "JWT bearer token",
2167
- "env": "FACES_TOKEN",
2168
- "name": "token",
2169
- "hasDynamicHelp": false,
2170
- "multiple": false,
2171
- "type": "option"
2172
- },
2173
- "api-key": {
2174
- "description": "API key",
2175
- "env": "FACES_API_KEY",
2176
- "name": "api-key",
2177
- "hasDynamicHelp": false,
2178
- "multiple": false,
2179
- "type": "option"
2180
- },
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:attributes": {
2219
- "aliases": [],
2220
- "args": {},
2221
- "description": "List all supported attribute keys",
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
- },
2255
- "hasDynamicHelp": false,
2256
- "hiddenAliases": [],
2257
- "id": "face:attributes",
2258
- "pluginAlias": "faces-cli",
2259
- "pluginName": "faces-cli",
2260
- "pluginType": "core",
2261
- "strict": true,
2262
- "enableJsonFlag": true,
2263
- "isESM": true,
2264
- "relativePath": [
2265
- "dist",
2266
- "commands",
2267
- "face",
2268
- "attributes.js"
2269
- ]
2270
- },
2271
- "face:create": {
2272
- "aliases": [],
2273
- "args": {},
2274
- "description": "Create a new face",
2166
+ "description": "Create a new face",
2275
2167
  "flags": {
2276
2168
  "json": {
2277
2169
  "description": "Format output as json.",
@@ -2955,16 +2847,10 @@
2955
2847
  "upload.js"
2956
2848
  ]
2957
2849
  },
2958
- "compile:thread:create": {
2850
+ "keys:create": {
2959
2851
  "aliases": [],
2960
- "args": {
2961
- "face_id": {
2962
- "description": "Face alias",
2963
- "name": "face_id",
2964
- "required": true
2965
- }
2966
- },
2967
- "description": "Start a new thread for a face",
2852
+ "args": {},
2853
+ "description": "Create a new API key (JWT required)",
2968
2854
  "flags": {
2969
2855
  "json": {
2970
2856
  "description": "Format output as json.",
@@ -2997,17 +2883,46 @@
2997
2883
  "multiple": false,
2998
2884
  "type": "option"
2999
2885
  },
3000
- "label": {
3001
- "description": "Thread label",
3002
- "name": "label",
2886
+ "name": {
2887
+ "description": "Key name/label",
2888
+ "name": "name",
2889
+ "required": true,
3003
2890
  "hasDynamicHelp": false,
3004
2891
  "multiple": false,
3005
2892
  "type": "option"
2893
+ },
2894
+ "expires-days": {
2895
+ "description": "Expiry in days (omit for no expiry)",
2896
+ "name": "expires-days",
2897
+ "hasDynamicHelp": false,
2898
+ "multiple": false,
2899
+ "type": "option"
2900
+ },
2901
+ "budget": {
2902
+ "description": "Spend budget in USD",
2903
+ "name": "budget",
2904
+ "hasDynamicHelp": false,
2905
+ "multiple": false,
2906
+ "type": "option"
2907
+ },
2908
+ "face": {
2909
+ "description": "Allowed face alias (repeatable)",
2910
+ "name": "face",
2911
+ "hasDynamicHelp": false,
2912
+ "multiple": true,
2913
+ "type": "option"
2914
+ },
2915
+ "model": {
2916
+ "description": "Allowed model name (repeatable)",
2917
+ "name": "model",
2918
+ "hasDynamicHelp": false,
2919
+ "multiple": true,
2920
+ "type": "option"
3006
2921
  }
3007
2922
  },
3008
2923
  "hasDynamicHelp": false,
3009
2924
  "hiddenAliases": [],
3010
- "id": "compile:thread:create",
2925
+ "id": "keys:create",
3011
2926
  "pluginAlias": "faces-cli",
3012
2927
  "pluginName": "faces-cli",
3013
2928
  "pluginType": "core",
@@ -3017,21 +2932,73 @@
3017
2932
  "relativePath": [
3018
2933
  "dist",
3019
2934
  "commands",
3020
- "compile",
3021
- "thread",
2935
+ "keys",
3022
2936
  "create.js"
3023
2937
  ]
3024
2938
  },
3025
- "compile:thread:delete": {
2939
+ "keys:list": {
2940
+ "aliases": [],
2941
+ "args": {},
2942
+ "description": "List all API keys (JWT required)",
2943
+ "flags": {
2944
+ "json": {
2945
+ "description": "Format output as json.",
2946
+ "helpGroup": "GLOBAL",
2947
+ "name": "json",
2948
+ "allowNo": false,
2949
+ "type": "boolean"
2950
+ },
2951
+ "base-url": {
2952
+ "description": "API base URL",
2953
+ "env": "FACES_BASE_URL",
2954
+ "name": "base-url",
2955
+ "hasDynamicHelp": false,
2956
+ "multiple": false,
2957
+ "type": "option"
2958
+ },
2959
+ "token": {
2960
+ "description": "JWT bearer token",
2961
+ "env": "FACES_TOKEN",
2962
+ "name": "token",
2963
+ "hasDynamicHelp": false,
2964
+ "multiple": false,
2965
+ "type": "option"
2966
+ },
2967
+ "api-key": {
2968
+ "description": "API key",
2969
+ "env": "FACES_API_KEY",
2970
+ "name": "api-key",
2971
+ "hasDynamicHelp": false,
2972
+ "multiple": false,
2973
+ "type": "option"
2974
+ }
2975
+ },
2976
+ "hasDynamicHelp": false,
2977
+ "hiddenAliases": [],
2978
+ "id": "keys:list",
2979
+ "pluginAlias": "faces-cli",
2980
+ "pluginName": "faces-cli",
2981
+ "pluginType": "core",
2982
+ "strict": true,
2983
+ "enableJsonFlag": true,
2984
+ "isESM": true,
2985
+ "relativePath": [
2986
+ "dist",
2987
+ "commands",
2988
+ "keys",
2989
+ "list.js"
2990
+ ]
2991
+ },
2992
+ "keys:revoke": {
3026
2993
  "aliases": [],
3027
2994
  "args": {
3028
- "thread_id": {
3029
- "description": "Thread ID",
3030
- "name": "thread_id",
2995
+ "key_id": {
2996
+ "description": "Key ID",
2997
+ "name": "key_id",
3031
2998
  "required": true
3032
2999
  }
3033
3000
  },
3034
- "description": "Delete a thread",
3001
+ "description": "Revoke an API key (JWT required)",
3035
3002
  "flags": {
3036
3003
  "json": {
3037
3004
  "description": "Format output as json.",
@@ -3073,7 +3040,7 @@
3073
3040
  },
3074
3041
  "hasDynamicHelp": false,
3075
3042
  "hiddenAliases": [],
3076
- "id": "compile:thread:delete",
3043
+ "id": "keys:revoke",
3077
3044
  "pluginAlias": "faces-cli",
3078
3045
  "pluginName": "faces-cli",
3079
3046
  "pluginType": "core",
@@ -3083,21 +3050,99 @@
3083
3050
  "relativePath": [
3084
3051
  "dist",
3085
3052
  "commands",
3086
- "compile",
3087
- "thread",
3088
- "delete.js"
3053
+ "keys",
3054
+ "revoke.js"
3089
3055
  ]
3090
3056
  },
3091
- "compile:thread:edit": {
3057
+ "keys:update": {
3092
3058
  "aliases": [],
3093
3059
  "args": {
3094
- "thread_id": {
3095
- "description": "Thread ID",
3096
- "name": "thread_id",
3060
+ "key_id": {
3061
+ "description": "Key ID",
3062
+ "name": "key_id",
3097
3063
  "required": true
3098
3064
  }
3099
3065
  },
3100
- "description": "Edit a thread (label and/or reassign face speaker)",
3066
+ "description": "Update API key metadata (JWT required)",
3067
+ "flags": {
3068
+ "json": {
3069
+ "description": "Format output as json.",
3070
+ "helpGroup": "GLOBAL",
3071
+ "name": "json",
3072
+ "allowNo": false,
3073
+ "type": "boolean"
3074
+ },
3075
+ "base-url": {
3076
+ "description": "API base URL",
3077
+ "env": "FACES_BASE_URL",
3078
+ "name": "base-url",
3079
+ "hasDynamicHelp": false,
3080
+ "multiple": false,
3081
+ "type": "option"
3082
+ },
3083
+ "token": {
3084
+ "description": "JWT bearer token",
3085
+ "env": "FACES_TOKEN",
3086
+ "name": "token",
3087
+ "hasDynamicHelp": false,
3088
+ "multiple": false,
3089
+ "type": "option"
3090
+ },
3091
+ "api-key": {
3092
+ "description": "API key",
3093
+ "env": "FACES_API_KEY",
3094
+ "name": "api-key",
3095
+ "hasDynamicHelp": false,
3096
+ "multiple": false,
3097
+ "type": "option"
3098
+ },
3099
+ "name": {
3100
+ "description": "New key name",
3101
+ "name": "name",
3102
+ "hasDynamicHelp": false,
3103
+ "multiple": false,
3104
+ "type": "option"
3105
+ },
3106
+ "budget": {
3107
+ "description": "New spend budget in USD",
3108
+ "name": "budget",
3109
+ "hasDynamicHelp": false,
3110
+ "multiple": false,
3111
+ "type": "option"
3112
+ },
3113
+ "reset-spent": {
3114
+ "description": "Reset spent amount to zero",
3115
+ "name": "reset-spent",
3116
+ "allowNo": false,
3117
+ "type": "boolean"
3118
+ }
3119
+ },
3120
+ "hasDynamicHelp": false,
3121
+ "hiddenAliases": [],
3122
+ "id": "keys:update",
3123
+ "pluginAlias": "faces-cli",
3124
+ "pluginName": "faces-cli",
3125
+ "pluginType": "core",
3126
+ "strict": true,
3127
+ "enableJsonFlag": true,
3128
+ "isESM": true,
3129
+ "relativePath": [
3130
+ "dist",
3131
+ "commands",
3132
+ "keys",
3133
+ "update.js"
3134
+ ]
3135
+ },
3136
+ "compile:doc:create": {
3137
+ "aliases": [],
3138
+ "args": {
3139
+ "face_id": {
3140
+ "description": "Face alias",
3141
+ "name": "face_id",
3142
+ "required": true
3143
+ }
3144
+ },
3145
+ "description": "Submit a document to a face",
3101
3146
  "flags": {
3102
3147
  "json": {
3103
3148
  "description": "Format output as json.",
@@ -3131,15 +3176,94 @@
3131
3176
  "type": "option"
3132
3177
  },
3133
3178
  "label": {
3134
- "description": "New thread label",
3179
+ "description": "Document label/title",
3135
3180
  "name": "label",
3136
3181
  "hasDynamicHelp": false,
3137
3182
  "multiple": false,
3138
3183
  "type": "option"
3139
3184
  },
3140
- "face-speaker": {
3141
- "description": "Reassign face speaker: set this speaker to role=user, all others to role=assistant",
3142
- "name": "face-speaker",
3185
+ "content": {
3186
+ "description": "Inline text content",
3187
+ "name": "content",
3188
+ "hasDynamicHelp": false,
3189
+ "multiple": false,
3190
+ "type": "option"
3191
+ },
3192
+ "file": {
3193
+ "description": "Read content from file",
3194
+ "name": "file",
3195
+ "hasDynamicHelp": false,
3196
+ "multiple": false,
3197
+ "type": "option"
3198
+ },
3199
+ "perspective": {
3200
+ "description": "Perspective (first-person or third-person)",
3201
+ "name": "perspective",
3202
+ "default": "first-person",
3203
+ "hasDynamicHelp": false,
3204
+ "multiple": false,
3205
+ "options": [
3206
+ "first-person",
3207
+ "third-person"
3208
+ ],
3209
+ "type": "option"
3210
+ }
3211
+ },
3212
+ "hasDynamicHelp": false,
3213
+ "hiddenAliases": [],
3214
+ "id": "compile:doc:create",
3215
+ "pluginAlias": "faces-cli",
3216
+ "pluginName": "faces-cli",
3217
+ "pluginType": "core",
3218
+ "strict": true,
3219
+ "enableJsonFlag": true,
3220
+ "isESM": true,
3221
+ "relativePath": [
3222
+ "dist",
3223
+ "commands",
3224
+ "compile",
3225
+ "doc",
3226
+ "create.js"
3227
+ ]
3228
+ },
3229
+ "compile:doc:delete": {
3230
+ "aliases": [],
3231
+ "args": {
3232
+ "doc_id": {
3233
+ "description": "Document ID",
3234
+ "name": "doc_id",
3235
+ "required": true
3236
+ }
3237
+ },
3238
+ "description": "Delete a document",
3239
+ "flags": {
3240
+ "json": {
3241
+ "description": "Format output as json.",
3242
+ "helpGroup": "GLOBAL",
3243
+ "name": "json",
3244
+ "allowNo": false,
3245
+ "type": "boolean"
3246
+ },
3247
+ "base-url": {
3248
+ "description": "API base URL",
3249
+ "env": "FACES_BASE_URL",
3250
+ "name": "base-url",
3251
+ "hasDynamicHelp": false,
3252
+ "multiple": false,
3253
+ "type": "option"
3254
+ },
3255
+ "token": {
3256
+ "description": "JWT bearer token",
3257
+ "env": "FACES_TOKEN",
3258
+ "name": "token",
3259
+ "hasDynamicHelp": false,
3260
+ "multiple": false,
3261
+ "type": "option"
3262
+ },
3263
+ "api-key": {
3264
+ "description": "API key",
3265
+ "env": "FACES_API_KEY",
3266
+ "name": "api-key",
3143
3267
  "hasDynamicHelp": false,
3144
3268
  "multiple": false,
3145
3269
  "type": "option"
@@ -3147,7 +3271,7 @@
3147
3271
  },
3148
3272
  "hasDynamicHelp": false,
3149
3273
  "hiddenAliases": [],
3150
- "id": "compile:thread:edit",
3274
+ "id": "compile:doc:delete",
3151
3275
  "pluginAlias": "faces-cli",
3152
3276
  "pluginName": "faces-cli",
3153
3277
  "pluginType": "core",
@@ -3158,20 +3282,20 @@
3158
3282
  "dist",
3159
3283
  "commands",
3160
3284
  "compile",
3161
- "thread",
3162
- "edit.js"
3285
+ "doc",
3286
+ "delete.js"
3163
3287
  ]
3164
3288
  },
3165
- "compile:thread:get": {
3289
+ "compile:doc:edit": {
3166
3290
  "aliases": [],
3167
3291
  "args": {
3168
- "thread_id": {
3169
- "description": "Thread ID",
3170
- "name": "thread_id",
3292
+ "doc_id": {
3293
+ "description": "Document ID",
3294
+ "name": "doc_id",
3171
3295
  "required": true
3172
3296
  }
3173
3297
  },
3174
- "description": "Get a thread by ID",
3298
+ "description": "Edit a document (label, content, or perspective)",
3175
3299
  "flags": {
3176
3300
  "json": {
3177
3301
  "description": "Format output as json.",
@@ -3203,11 +3327,43 @@
3203
3327
  "hasDynamicHelp": false,
3204
3328
  "multiple": false,
3205
3329
  "type": "option"
3330
+ },
3331
+ "label": {
3332
+ "description": "New label/title",
3333
+ "name": "label",
3334
+ "hasDynamicHelp": false,
3335
+ "multiple": false,
3336
+ "type": "option"
3337
+ },
3338
+ "content": {
3339
+ "description": "New inline text content",
3340
+ "name": "content",
3341
+ "hasDynamicHelp": false,
3342
+ "multiple": false,
3343
+ "type": "option"
3344
+ },
3345
+ "file": {
3346
+ "description": "Read new content from file",
3347
+ "name": "file",
3348
+ "hasDynamicHelp": false,
3349
+ "multiple": false,
3350
+ "type": "option"
3351
+ },
3352
+ "perspective": {
3353
+ "description": "Perspective (first-person or third-person)",
3354
+ "name": "perspective",
3355
+ "hasDynamicHelp": false,
3356
+ "multiple": false,
3357
+ "options": [
3358
+ "first-person",
3359
+ "third-person"
3360
+ ],
3361
+ "type": "option"
3206
3362
  }
3207
3363
  },
3208
3364
  "hasDynamicHelp": false,
3209
3365
  "hiddenAliases": [],
3210
- "id": "compile:thread:get",
3366
+ "id": "compile:doc:edit",
3211
3367
  "pluginAlias": "faces-cli",
3212
3368
  "pluginName": "faces-cli",
3213
3369
  "pluginType": "core",
@@ -3218,20 +3374,20 @@
3218
3374
  "dist",
3219
3375
  "commands",
3220
3376
  "compile",
3221
- "thread",
3222
- "get.js"
3377
+ "doc",
3378
+ "edit.js"
3223
3379
  ]
3224
3380
  },
3225
- "compile:thread:list": {
3381
+ "compile:doc:get": {
3226
3382
  "aliases": [],
3227
3383
  "args": {
3228
- "face_id": {
3229
- "description": "Face alias",
3230
- "name": "face_id",
3384
+ "doc_id": {
3385
+ "description": "Document ID",
3386
+ "name": "doc_id",
3231
3387
  "required": true
3232
3388
  }
3233
3389
  },
3234
- "description": "List threads for a face",
3390
+ "description": "Get a document by ID",
3235
3391
  "flags": {
3236
3392
  "json": {
3237
3393
  "description": "Format output as json.",
@@ -3267,7 +3423,7 @@
3267
3423
  },
3268
3424
  "hasDynamicHelp": false,
3269
3425
  "hiddenAliases": [],
3270
- "id": "compile:thread:list",
3426
+ "id": "compile:doc:get",
3271
3427
  "pluginAlias": "faces-cli",
3272
3428
  "pluginName": "faces-cli",
3273
3429
  "pluginType": "core",
@@ -3278,20 +3434,20 @@
3278
3434
  "dist",
3279
3435
  "commands",
3280
3436
  "compile",
3281
- "thread",
3282
- "list.js"
3437
+ "doc",
3438
+ "get.js"
3283
3439
  ]
3284
3440
  },
3285
- "compile:thread:make": {
3441
+ "compile:doc": {
3286
3442
  "aliases": [],
3287
3443
  "args": {
3288
- "thread_id": {
3289
- "description": "Thread ID",
3290
- "name": "thread_id",
3444
+ "face_id": {
3445
+ "description": "Face alias",
3446
+ "name": "face_id",
3291
3447
  "required": true
3292
3448
  }
3293
3449
  },
3294
- "description": "Compile an existing thread (prepare + sync in one step)",
3450
+ "description": "Compile a document into a face (create make in one step)",
3295
3451
  "flags": {
3296
3452
  "json": {
3297
3453
  "description": "Format output as json.",
@@ -3324,6 +3480,39 @@
3324
3480
  "multiple": false,
3325
3481
  "type": "option"
3326
3482
  },
3483
+ "label": {
3484
+ "description": "Document label/title",
3485
+ "name": "label",
3486
+ "hasDynamicHelp": false,
3487
+ "multiple": false,
3488
+ "type": "option"
3489
+ },
3490
+ "content": {
3491
+ "description": "Inline text content",
3492
+ "name": "content",
3493
+ "hasDynamicHelp": false,
3494
+ "multiple": false,
3495
+ "type": "option"
3496
+ },
3497
+ "file": {
3498
+ "description": "Read content from file",
3499
+ "name": "file",
3500
+ "hasDynamicHelp": false,
3501
+ "multiple": false,
3502
+ "type": "option"
3503
+ },
3504
+ "perspective": {
3505
+ "description": "Perspective",
3506
+ "name": "perspective",
3507
+ "default": "first-person",
3508
+ "hasDynamicHelp": false,
3509
+ "multiple": false,
3510
+ "options": [
3511
+ "first-person",
3512
+ "third-person"
3513
+ ],
3514
+ "type": "option"
3515
+ },
3327
3516
  "timeout": {
3328
3517
  "description": "Compile timeout in seconds (default: 600)",
3329
3518
  "name": "timeout",
@@ -3333,7 +3522,7 @@
3333
3522
  "type": "option"
3334
3523
  },
3335
3524
  "no-wait": {
3336
- "description": "Return immediately after triggering compilation. Prints the thread ID for manual polling.",
3525
+ "description": "Create and trigger compilation, then return immediately without polling.",
3337
3526
  "name": "no-wait",
3338
3527
  "allowNo": false,
3339
3528
  "type": "boolean"
@@ -3341,7 +3530,7 @@
3341
3530
  },
3342
3531
  "hasDynamicHelp": false,
3343
3532
  "hiddenAliases": [],
3344
- "id": "compile:thread:make",
3533
+ "id": "compile:doc",
3345
3534
  "pluginAlias": "faces-cli",
3346
3535
  "pluginName": "faces-cli",
3347
3536
  "pluginType": "core",
@@ -3352,20 +3541,20 @@
3352
3541
  "dist",
3353
3542
  "commands",
3354
3543
  "compile",
3355
- "thread",
3356
- "make.js"
3544
+ "doc",
3545
+ "index.js"
3357
3546
  ]
3358
3547
  },
3359
- "compile:thread:message": {
3548
+ "compile:doc:list": {
3360
3549
  "aliases": [],
3361
3550
  "args": {
3362
- "thread_id": {
3363
- "description": "Thread ID",
3364
- "name": "thread_id",
3551
+ "face_id": {
3552
+ "description": "Face alias",
3553
+ "name": "face_id",
3365
3554
  "required": true
3366
3555
  }
3367
3556
  },
3368
- "description": "Send a user message to a thread",
3557
+ "description": "List documents for a face",
3369
3558
  "flags": {
3370
3559
  "json": {
3371
3560
  "description": "Format output as json.",
@@ -3397,20 +3586,11 @@
3397
3586
  "hasDynamicHelp": false,
3398
3587
  "multiple": false,
3399
3588
  "type": "option"
3400
- },
3401
- "message": {
3402
- "char": "m",
3403
- "description": "User message to append",
3404
- "name": "message",
3405
- "required": true,
3406
- "hasDynamicHelp": false,
3407
- "multiple": false,
3408
- "type": "option"
3409
3589
  }
3410
3590
  },
3411
3591
  "hasDynamicHelp": false,
3412
3592
  "hiddenAliases": [],
3413
- "id": "compile:thread:message",
3593
+ "id": "compile:doc:list",
3414
3594
  "pluginAlias": "faces-cli",
3415
3595
  "pluginName": "faces-cli",
3416
3596
  "pluginType": "core",
@@ -3421,20 +3601,20 @@
3421
3601
  "dist",
3422
3602
  "commands",
3423
3603
  "compile",
3424
- "thread",
3425
- "message.js"
3604
+ "doc",
3605
+ "list.js"
3426
3606
  ]
3427
3607
  },
3428
- "compile:thread:pause": {
3608
+ "compile:doc:make": {
3429
3609
  "aliases": [],
3430
3610
  "args": {
3431
- "thread_id": {
3432
- "description": "Thread ID",
3433
- "name": "thread_id",
3611
+ "doc_id": {
3612
+ "description": "Document ID",
3613
+ "name": "doc_id",
3434
3614
  "required": true
3435
3615
  }
3436
3616
  },
3437
- "description": "Pause a running thread compilation (preserves progress, resume with make)",
3617
+ "description": "Compile an existing document (prepare + sync in one step)",
3438
3618
  "flags": {
3439
3619
  "json": {
3440
3620
  "description": "Format output as json.",
@@ -3466,11 +3646,25 @@
3466
3646
  "hasDynamicHelp": false,
3467
3647
  "multiple": false,
3468
3648
  "type": "option"
3649
+ },
3650
+ "timeout": {
3651
+ "description": "Compile timeout in seconds (default: 600)",
3652
+ "name": "timeout",
3653
+ "default": 600,
3654
+ "hasDynamicHelp": false,
3655
+ "multiple": false,
3656
+ "type": "option"
3657
+ },
3658
+ "no-wait": {
3659
+ "description": "Return immediately after triggering compilation. Prints the document ID for manual polling.",
3660
+ "name": "no-wait",
3661
+ "allowNo": false,
3662
+ "type": "boolean"
3469
3663
  }
3470
3664
  },
3471
3665
  "hasDynamicHelp": false,
3472
3666
  "hiddenAliases": [],
3473
- "id": "compile:thread:pause",
3667
+ "id": "compile:doc:make",
3474
3668
  "pluginAlias": "faces-cli",
3475
3669
  "pluginName": "faces-cli",
3476
3670
  "pluginType": "core",
@@ -3481,20 +3675,20 @@
3481
3675
  "dist",
3482
3676
  "commands",
3483
3677
  "compile",
3484
- "thread",
3485
- "pause.js"
3678
+ "doc",
3679
+ "make.js"
3486
3680
  ]
3487
3681
  },
3488
- "compile:thread:reset": {
3682
+ "compile:doc:pause": {
3489
3683
  "aliases": [],
3490
3684
  "args": {
3491
- "thread_id": {
3492
- "description": "Thread ID",
3493
- "name": "thread_id",
3685
+ "doc_id": {
3686
+ "description": "Document ID",
3687
+ "name": "doc_id",
3494
3688
  "required": true
3495
3689
  }
3496
3690
  },
3497
- "description": "Reset thread compilation progress (wipe extraction, keep source messages)",
3691
+ "description": "Pause a running document compilation (preserves progress, resume with make)",
3498
3692
  "flags": {
3499
3693
  "json": {
3500
3694
  "description": "Format output as json.",
@@ -3526,17 +3720,11 @@
3526
3720
  "hasDynamicHelp": false,
3527
3721
  "multiple": false,
3528
3722
  "type": "option"
3529
- },
3530
- "yes": {
3531
- "description": "Skip confirmation",
3532
- "name": "yes",
3533
- "allowNo": false,
3534
- "type": "boolean"
3535
3723
  }
3536
3724
  },
3537
3725
  "hasDynamicHelp": false,
3538
3726
  "hiddenAliases": [],
3539
- "id": "compile:thread:reset",
3727
+ "id": "compile:doc:pause",
3540
3728
  "pluginAlias": "faces-cli",
3541
3729
  "pluginName": "faces-cli",
3542
3730
  "pluginType": "core",
@@ -3547,20 +3735,20 @@
3547
3735
  "dist",
3548
3736
  "commands",
3549
3737
  "compile",
3550
- "thread",
3551
- "reset.js"
3738
+ "doc",
3739
+ "pause.js"
3552
3740
  ]
3553
3741
  },
3554
- "compile:thread:sync": {
3742
+ "compile:doc:reset": {
3555
3743
  "aliases": [],
3556
3744
  "args": {
3557
- "thread_id": {
3558
- "description": "Thread ID",
3559
- "name": "thread_id",
3745
+ "doc_id": {
3746
+ "description": "Document ID",
3747
+ "name": "doc_id",
3560
3748
  "required": true
3561
3749
  }
3562
3750
  },
3563
- "description": "Archive and sync a thread into a face",
3751
+ "description": "Reset document compilation progress (wipe extraction, keep content)",
3564
3752
  "flags": {
3565
3753
  "json": {
3566
3754
  "description": "Format output as json.",
@@ -3592,11 +3780,17 @@
3592
3780
  "hasDynamicHelp": false,
3593
3781
  "multiple": false,
3594
3782
  "type": "option"
3783
+ },
3784
+ "yes": {
3785
+ "description": "Skip confirmation",
3786
+ "name": "yes",
3787
+ "allowNo": false,
3788
+ "type": "boolean"
3595
3789
  }
3596
3790
  },
3597
3791
  "hasDynamicHelp": false,
3598
3792
  "hiddenAliases": [],
3599
- "id": "compile:thread:sync",
3793
+ "id": "compile:doc:reset",
3600
3794
  "pluginAlias": "faces-cli",
3601
3795
  "pluginName": "faces-cli",
3602
3796
  "pluginType": "core",
@@ -3607,11 +3801,11 @@
3607
3801
  "dist",
3608
3802
  "commands",
3609
3803
  "compile",
3610
- "thread",
3611
- "sync.js"
3804
+ "doc",
3805
+ "reset.js"
3612
3806
  ]
3613
3807
  },
3614
- "compile:doc:create": {
3808
+ "compile:thread:create": {
3615
3809
  "aliases": [],
3616
3810
  "args": {
3617
3811
  "face_id": {
@@ -3620,7 +3814,7 @@
3620
3814
  "required": true
3621
3815
  }
3622
3816
  },
3623
- "description": "Submit a document to a face",
3817
+ "description": "Start a new thread for a face",
3624
3818
  "flags": {
3625
3819
  "json": {
3626
3820
  "description": "Format output as json.",
@@ -3654,42 +3848,16 @@
3654
3848
  "type": "option"
3655
3849
  },
3656
3850
  "label": {
3657
- "description": "Document label/title",
3851
+ "description": "Thread label",
3658
3852
  "name": "label",
3659
3853
  "hasDynamicHelp": false,
3660
3854
  "multiple": false,
3661
3855
  "type": "option"
3662
- },
3663
- "content": {
3664
- "description": "Inline text content",
3665
- "name": "content",
3666
- "hasDynamicHelp": false,
3667
- "multiple": false,
3668
- "type": "option"
3669
- },
3670
- "file": {
3671
- "description": "Read content from file",
3672
- "name": "file",
3673
- "hasDynamicHelp": false,
3674
- "multiple": false,
3675
- "type": "option"
3676
- },
3677
- "perspective": {
3678
- "description": "Perspective (first-person or third-person)",
3679
- "name": "perspective",
3680
- "default": "first-person",
3681
- "hasDynamicHelp": false,
3682
- "multiple": false,
3683
- "options": [
3684
- "first-person",
3685
- "third-person"
3686
- ],
3687
- "type": "option"
3688
3856
  }
3689
3857
  },
3690
3858
  "hasDynamicHelp": false,
3691
3859
  "hiddenAliases": [],
3692
- "id": "compile:doc:create",
3860
+ "id": "compile:thread:create",
3693
3861
  "pluginAlias": "faces-cli",
3694
3862
  "pluginName": "faces-cli",
3695
3863
  "pluginType": "core",
@@ -3700,20 +3868,20 @@
3700
3868
  "dist",
3701
3869
  "commands",
3702
3870
  "compile",
3703
- "doc",
3871
+ "thread",
3704
3872
  "create.js"
3705
3873
  ]
3706
3874
  },
3707
- "compile:doc:delete": {
3875
+ "compile:thread:delete": {
3708
3876
  "aliases": [],
3709
3877
  "args": {
3710
- "doc_id": {
3711
- "description": "Document ID",
3712
- "name": "doc_id",
3878
+ "thread_id": {
3879
+ "description": "Thread ID",
3880
+ "name": "thread_id",
3713
3881
  "required": true
3714
3882
  }
3715
3883
  },
3716
- "description": "Delete a document",
3884
+ "description": "Delete a thread",
3717
3885
  "flags": {
3718
3886
  "json": {
3719
3887
  "description": "Format output as json.",
@@ -3745,11 +3913,17 @@
3745
3913
  "hasDynamicHelp": false,
3746
3914
  "multiple": false,
3747
3915
  "type": "option"
3916
+ },
3917
+ "yes": {
3918
+ "description": "Skip confirmation",
3919
+ "name": "yes",
3920
+ "allowNo": false,
3921
+ "type": "boolean"
3748
3922
  }
3749
3923
  },
3750
3924
  "hasDynamicHelp": false,
3751
3925
  "hiddenAliases": [],
3752
- "id": "compile:doc:delete",
3926
+ "id": "compile:thread:delete",
3753
3927
  "pluginAlias": "faces-cli",
3754
3928
  "pluginName": "faces-cli",
3755
3929
  "pluginType": "core",
@@ -3760,20 +3934,20 @@
3760
3934
  "dist",
3761
3935
  "commands",
3762
3936
  "compile",
3763
- "doc",
3937
+ "thread",
3764
3938
  "delete.js"
3765
3939
  ]
3766
3940
  },
3767
- "compile:doc:edit": {
3941
+ "compile:thread:edit": {
3768
3942
  "aliases": [],
3769
3943
  "args": {
3770
- "doc_id": {
3771
- "description": "Document ID",
3772
- "name": "doc_id",
3944
+ "thread_id": {
3945
+ "description": "Thread ID",
3946
+ "name": "thread_id",
3773
3947
  "required": true
3774
3948
  }
3775
3949
  },
3776
- "description": "Edit a document (label, content, or perspective)",
3950
+ "description": "Edit a thread (label and/or reassign face speaker)",
3777
3951
  "flags": {
3778
3952
  "json": {
3779
3953
  "description": "Format output as json.",
@@ -3807,41 +3981,23 @@
3807
3981
  "type": "option"
3808
3982
  },
3809
3983
  "label": {
3810
- "description": "New label/title",
3984
+ "description": "New thread label",
3811
3985
  "name": "label",
3812
3986
  "hasDynamicHelp": false,
3813
3987
  "multiple": false,
3814
3988
  "type": "option"
3815
3989
  },
3816
- "content": {
3817
- "description": "New inline text content",
3818
- "name": "content",
3819
- "hasDynamicHelp": false,
3820
- "multiple": false,
3821
- "type": "option"
3822
- },
3823
- "file": {
3824
- "description": "Read new content from file",
3825
- "name": "file",
3826
- "hasDynamicHelp": false,
3827
- "multiple": false,
3828
- "type": "option"
3829
- },
3830
- "perspective": {
3831
- "description": "Perspective (first-person or third-person)",
3832
- "name": "perspective",
3990
+ "face-speaker": {
3991
+ "description": "Reassign face speaker: set this speaker to role=user, all others to role=assistant",
3992
+ "name": "face-speaker",
3833
3993
  "hasDynamicHelp": false,
3834
3994
  "multiple": false,
3835
- "options": [
3836
- "first-person",
3837
- "third-person"
3838
- ],
3839
3995
  "type": "option"
3840
3996
  }
3841
3997
  },
3842
3998
  "hasDynamicHelp": false,
3843
3999
  "hiddenAliases": [],
3844
- "id": "compile:doc:edit",
4000
+ "id": "compile:thread:edit",
3845
4001
  "pluginAlias": "faces-cli",
3846
4002
  "pluginName": "faces-cli",
3847
4003
  "pluginType": "core",
@@ -3852,20 +4008,20 @@
3852
4008
  "dist",
3853
4009
  "commands",
3854
4010
  "compile",
3855
- "doc",
4011
+ "thread",
3856
4012
  "edit.js"
3857
4013
  ]
3858
4014
  },
3859
- "compile:doc:get": {
4015
+ "compile:thread:get": {
3860
4016
  "aliases": [],
3861
4017
  "args": {
3862
- "doc_id": {
3863
- "description": "Document ID",
3864
- "name": "doc_id",
4018
+ "thread_id": {
4019
+ "description": "Thread ID",
4020
+ "name": "thread_id",
3865
4021
  "required": true
3866
4022
  }
3867
4023
  },
3868
- "description": "Get a document by ID",
4024
+ "description": "Get a thread by ID",
3869
4025
  "flags": {
3870
4026
  "json": {
3871
4027
  "description": "Format output as json.",
@@ -3901,7 +4057,7 @@
3901
4057
  },
3902
4058
  "hasDynamicHelp": false,
3903
4059
  "hiddenAliases": [],
3904
- "id": "compile:doc:get",
4060
+ "id": "compile:thread:get",
3905
4061
  "pluginAlias": "faces-cli",
3906
4062
  "pluginName": "faces-cli",
3907
4063
  "pluginType": "core",
@@ -3912,11 +4068,11 @@
3912
4068
  "dist",
3913
4069
  "commands",
3914
4070
  "compile",
3915
- "doc",
4071
+ "thread",
3916
4072
  "get.js"
3917
4073
  ]
3918
4074
  },
3919
- "compile:doc": {
4075
+ "compile:thread:list": {
3920
4076
  "aliases": [],
3921
4077
  "args": {
3922
4078
  "face_id": {
@@ -3925,7 +4081,7 @@
3925
4081
  "required": true
3926
4082
  }
3927
4083
  },
3928
- "description": "Compile a document into a face (create → make in one step)",
4084
+ "description": "List threads for a face",
3929
4085
  "flags": {
3930
4086
  "json": {
3931
4087
  "description": "Format output as json.",
@@ -3957,38 +4113,65 @@
3957
4113
  "hasDynamicHelp": false,
3958
4114
  "multiple": false,
3959
4115
  "type": "option"
4116
+ }
4117
+ },
4118
+ "hasDynamicHelp": false,
4119
+ "hiddenAliases": [],
4120
+ "id": "compile:thread:list",
4121
+ "pluginAlias": "faces-cli",
4122
+ "pluginName": "faces-cli",
4123
+ "pluginType": "core",
4124
+ "strict": true,
4125
+ "enableJsonFlag": true,
4126
+ "isESM": true,
4127
+ "relativePath": [
4128
+ "dist",
4129
+ "commands",
4130
+ "compile",
4131
+ "thread",
4132
+ "list.js"
4133
+ ]
4134
+ },
4135
+ "compile:thread:make": {
4136
+ "aliases": [],
4137
+ "args": {
4138
+ "thread_id": {
4139
+ "description": "Thread ID",
4140
+ "name": "thread_id",
4141
+ "required": true
4142
+ }
4143
+ },
4144
+ "description": "Compile an existing thread (prepare + sync in one step)",
4145
+ "flags": {
4146
+ "json": {
4147
+ "description": "Format output as json.",
4148
+ "helpGroup": "GLOBAL",
4149
+ "name": "json",
4150
+ "allowNo": false,
4151
+ "type": "boolean"
3960
4152
  },
3961
- "label": {
3962
- "description": "Document label/title",
3963
- "name": "label",
3964
- "hasDynamicHelp": false,
3965
- "multiple": false,
3966
- "type": "option"
3967
- },
3968
- "content": {
3969
- "description": "Inline text content",
3970
- "name": "content",
4153
+ "base-url": {
4154
+ "description": "API base URL",
4155
+ "env": "FACES_BASE_URL",
4156
+ "name": "base-url",
3971
4157
  "hasDynamicHelp": false,
3972
4158
  "multiple": false,
3973
4159
  "type": "option"
3974
4160
  },
3975
- "file": {
3976
- "description": "Read content from file",
3977
- "name": "file",
4161
+ "token": {
4162
+ "description": "JWT bearer token",
4163
+ "env": "FACES_TOKEN",
4164
+ "name": "token",
3978
4165
  "hasDynamicHelp": false,
3979
4166
  "multiple": false,
3980
4167
  "type": "option"
3981
4168
  },
3982
- "perspective": {
3983
- "description": "Perspective",
3984
- "name": "perspective",
3985
- "default": "first-person",
4169
+ "api-key": {
4170
+ "description": "API key",
4171
+ "env": "FACES_API_KEY",
4172
+ "name": "api-key",
3986
4173
  "hasDynamicHelp": false,
3987
4174
  "multiple": false,
3988
- "options": [
3989
- "first-person",
3990
- "third-person"
3991
- ],
3992
4175
  "type": "option"
3993
4176
  },
3994
4177
  "timeout": {
@@ -4000,7 +4183,7 @@
4000
4183
  "type": "option"
4001
4184
  },
4002
4185
  "no-wait": {
4003
- "description": "Create and trigger compilation, then return immediately without polling.",
4186
+ "description": "Return immediately after triggering compilation. Prints the thread ID for manual polling.",
4004
4187
  "name": "no-wait",
4005
4188
  "allowNo": false,
4006
4189
  "type": "boolean"
@@ -4008,7 +4191,7 @@
4008
4191
  },
4009
4192
  "hasDynamicHelp": false,
4010
4193
  "hiddenAliases": [],
4011
- "id": "compile:doc",
4194
+ "id": "compile:thread:make",
4012
4195
  "pluginAlias": "faces-cli",
4013
4196
  "pluginName": "faces-cli",
4014
4197
  "pluginType": "core",
@@ -4019,20 +4202,20 @@
4019
4202
  "dist",
4020
4203
  "commands",
4021
4204
  "compile",
4022
- "doc",
4023
- "index.js"
4205
+ "thread",
4206
+ "make.js"
4024
4207
  ]
4025
4208
  },
4026
- "compile:doc:list": {
4209
+ "compile:thread:message": {
4027
4210
  "aliases": [],
4028
4211
  "args": {
4029
- "face_id": {
4030
- "description": "Face alias",
4031
- "name": "face_id",
4212
+ "thread_id": {
4213
+ "description": "Thread ID",
4214
+ "name": "thread_id",
4032
4215
  "required": true
4033
4216
  }
4034
4217
  },
4035
- "description": "List documents for a face",
4218
+ "description": "Send a user message to a thread",
4036
4219
  "flags": {
4037
4220
  "json": {
4038
4221
  "description": "Format output as json.",
@@ -4064,11 +4247,20 @@
4064
4247
  "hasDynamicHelp": false,
4065
4248
  "multiple": false,
4066
4249
  "type": "option"
4250
+ },
4251
+ "message": {
4252
+ "char": "m",
4253
+ "description": "User message to append",
4254
+ "name": "message",
4255
+ "required": true,
4256
+ "hasDynamicHelp": false,
4257
+ "multiple": false,
4258
+ "type": "option"
4067
4259
  }
4068
4260
  },
4069
4261
  "hasDynamicHelp": false,
4070
4262
  "hiddenAliases": [],
4071
- "id": "compile:doc:list",
4263
+ "id": "compile:thread:message",
4072
4264
  "pluginAlias": "faces-cli",
4073
4265
  "pluginName": "faces-cli",
4074
4266
  "pluginType": "core",
@@ -4079,20 +4271,20 @@
4079
4271
  "dist",
4080
4272
  "commands",
4081
4273
  "compile",
4082
- "doc",
4083
- "list.js"
4274
+ "thread",
4275
+ "message.js"
4084
4276
  ]
4085
4277
  },
4086
- "compile:doc:make": {
4278
+ "compile:thread:pause": {
4087
4279
  "aliases": [],
4088
4280
  "args": {
4089
- "doc_id": {
4090
- "description": "Document ID",
4091
- "name": "doc_id",
4281
+ "thread_id": {
4282
+ "description": "Thread ID",
4283
+ "name": "thread_id",
4092
4284
  "required": true
4093
4285
  }
4094
4286
  },
4095
- "description": "Compile an existing document (prepare + sync in one step)",
4287
+ "description": "Pause a running thread compilation (preserves progress, resume with make)",
4096
4288
  "flags": {
4097
4289
  "json": {
4098
4290
  "description": "Format output as json.",
@@ -4124,25 +4316,11 @@
4124
4316
  "hasDynamicHelp": false,
4125
4317
  "multiple": false,
4126
4318
  "type": "option"
4127
- },
4128
- "timeout": {
4129
- "description": "Compile timeout in seconds (default: 600)",
4130
- "name": "timeout",
4131
- "default": 600,
4132
- "hasDynamicHelp": false,
4133
- "multiple": false,
4134
- "type": "option"
4135
- },
4136
- "no-wait": {
4137
- "description": "Return immediately after triggering compilation. Prints the document ID for manual polling.",
4138
- "name": "no-wait",
4139
- "allowNo": false,
4140
- "type": "boolean"
4141
4319
  }
4142
4320
  },
4143
4321
  "hasDynamicHelp": false,
4144
4322
  "hiddenAliases": [],
4145
- "id": "compile:doc:make",
4323
+ "id": "compile:thread:pause",
4146
4324
  "pluginAlias": "faces-cli",
4147
4325
  "pluginName": "faces-cli",
4148
4326
  "pluginType": "core",
@@ -4153,20 +4331,20 @@
4153
4331
  "dist",
4154
4332
  "commands",
4155
4333
  "compile",
4156
- "doc",
4157
- "make.js"
4334
+ "thread",
4335
+ "pause.js"
4158
4336
  ]
4159
4337
  },
4160
- "compile:doc:pause": {
4338
+ "compile:thread:reset": {
4161
4339
  "aliases": [],
4162
4340
  "args": {
4163
- "doc_id": {
4164
- "description": "Document ID",
4165
- "name": "doc_id",
4341
+ "thread_id": {
4342
+ "description": "Thread ID",
4343
+ "name": "thread_id",
4166
4344
  "required": true
4167
4345
  }
4168
4346
  },
4169
- "description": "Pause a running document compilation (preserves progress, resume with make)",
4347
+ "description": "Reset thread compilation progress (wipe extraction, keep source messages)",
4170
4348
  "flags": {
4171
4349
  "json": {
4172
4350
  "description": "Format output as json.",
@@ -4198,11 +4376,17 @@
4198
4376
  "hasDynamicHelp": false,
4199
4377
  "multiple": false,
4200
4378
  "type": "option"
4379
+ },
4380
+ "yes": {
4381
+ "description": "Skip confirmation",
4382
+ "name": "yes",
4383
+ "allowNo": false,
4384
+ "type": "boolean"
4201
4385
  }
4202
4386
  },
4203
4387
  "hasDynamicHelp": false,
4204
4388
  "hiddenAliases": [],
4205
- "id": "compile:doc:pause",
4389
+ "id": "compile:thread:reset",
4206
4390
  "pluginAlias": "faces-cli",
4207
4391
  "pluginName": "faces-cli",
4208
4392
  "pluginType": "core",
@@ -4213,20 +4397,20 @@
4213
4397
  "dist",
4214
4398
  "commands",
4215
4399
  "compile",
4216
- "doc",
4217
- "pause.js"
4400
+ "thread",
4401
+ "reset.js"
4218
4402
  ]
4219
4403
  },
4220
- "compile:doc:reset": {
4404
+ "compile:thread:sync": {
4221
4405
  "aliases": [],
4222
4406
  "args": {
4223
- "doc_id": {
4224
- "description": "Document ID",
4225
- "name": "doc_id",
4407
+ "thread_id": {
4408
+ "description": "Thread ID",
4409
+ "name": "thread_id",
4226
4410
  "required": true
4227
4411
  }
4228
4412
  },
4229
- "description": "Reset document compilation progress (wipe extraction, keep content)",
4413
+ "description": "Archive and sync a thread into a face",
4230
4414
  "flags": {
4231
4415
  "json": {
4232
4416
  "description": "Format output as json.",
@@ -4258,17 +4442,11 @@
4258
4442
  "hasDynamicHelp": false,
4259
4443
  "multiple": false,
4260
4444
  "type": "option"
4261
- },
4262
- "yes": {
4263
- "description": "Skip confirmation",
4264
- "name": "yes",
4265
- "allowNo": false,
4266
- "type": "boolean"
4267
4445
  }
4268
4446
  },
4269
4447
  "hasDynamicHelp": false,
4270
4448
  "hiddenAliases": [],
4271
- "id": "compile:doc:reset",
4449
+ "id": "compile:thread:sync",
4272
4450
  "pluginAlias": "faces-cli",
4273
4451
  "pluginName": "faces-cli",
4274
4452
  "pluginType": "core",
@@ -4279,10 +4457,10 @@
4279
4457
  "dist",
4280
4458
  "commands",
4281
4459
  "compile",
4282
- "doc",
4283
- "reset.js"
4460
+ "thread",
4461
+ "sync.js"
4284
4462
  ]
4285
4463
  }
4286
4464
  },
4287
- "version": "1.5.14"
4465
+ "version": "1.5.15"
4288
4466
  }