faces-cli 1.7.5 → 1.7.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/commands/chat/chat.js +8 -0
  2. package/dist/commands/face/get.js +2 -0
  3. package/dist/commands/face/list.js +2 -0
  4. package/dist/commands/{voiceprint/get.d.ts → face/lock.d.ts} +2 -2
  5. package/dist/commands/face/lock.js +34 -0
  6. package/dist/commands/{voiceprint/revert.d.ts → face/unlock.d.ts} +2 -2
  7. package/dist/commands/face/unlock.js +34 -0
  8. package/dist/utils.d.ts +0 -15
  9. package/dist/utils.js +0 -75
  10. package/oclif.manifest.json +793 -1579
  11. package/package.json +1 -1
  12. package/dist/commands/billing/quota.d.ts +0 -10
  13. package/dist/commands/billing/quota.js +0 -12
  14. package/dist/commands/billing/subscription.d.ts +0 -10
  15. package/dist/commands/billing/subscription.js +0 -24
  16. package/dist/commands/face/upload.d.ts +0 -17
  17. package/dist/commands/face/upload.js +0 -66
  18. package/dist/commands/voiceprint/build-status.d.ts +0 -14
  19. package/dist/commands/voiceprint/build-status.js +0 -46
  20. package/dist/commands/voiceprint/build.d.ts +0 -23
  21. package/dist/commands/voiceprint/build.js +0 -109
  22. package/dist/commands/voiceprint/get.js +0 -47
  23. package/dist/commands/voiceprint/refine-status.d.ts +0 -14
  24. package/dist/commands/voiceprint/refine-status.js +0 -43
  25. package/dist/commands/voiceprint/refine.d.ts +0 -23
  26. package/dist/commands/voiceprint/refine.js +0 -88
  27. package/dist/commands/voiceprint/revert.js +0 -36
  28. package/dist/commands/voiceprint/score-status.d.ts +0 -14
  29. package/dist/commands/voiceprint/score-status.js +0 -46
  30. package/dist/commands/voiceprint/score.d.ts +0 -24
  31. package/dist/commands/voiceprint/score.js +0 -114
  32. package/dist/commands/voiceprint/upload.d.ts +0 -17
  33. package/dist/commands/voiceprint/upload.js +0 -66
  34. package/dist/commands/voiceprint/versions.d.ts +0 -14
  35. package/dist/commands/voiceprint/versions.js +0 -44
  36. package/dist/voiceprint.d.ts +0 -28
  37. package/dist/voiceprint.js +0 -55
@@ -632,10 +632,10 @@
632
632
  "whoami.js"
633
633
  ]
634
634
  },
635
- "billing:balance": {
635
+ "catalog:backup": {
636
636
  "aliases": [],
637
637
  "args": {},
638
- "description": "Show credit balance and payment method status",
638
+ "description": "Snapshot all faces, teams, and source material for migration",
639
639
  "flags": {
640
640
  "json": {
641
641
  "description": "Format output as json.",
@@ -671,7 +671,7 @@
671
671
  },
672
672
  "hasDynamicHelp": false,
673
673
  "hiddenAliases": [],
674
- "id": "billing:balance",
674
+ "id": "catalog:backup",
675
675
  "pluginAlias": "faces-cli",
676
676
  "pluginName": "faces-cli",
677
677
  "pluginType": "core",
@@ -681,14 +681,14 @@
681
681
  "relativePath": [
682
682
  "dist",
683
683
  "commands",
684
- "billing",
685
- "balance.js"
684
+ "catalog",
685
+ "backup.js"
686
686
  ]
687
687
  },
688
- "billing:card-setup": {
688
+ "catalog:doctor": {
689
689
  "aliases": [],
690
690
  "args": {},
691
- "description": "Get a Stripe card setup URL to save a payment method",
691
+ "description": "Diagnose and repair the local face and team catalog",
692
692
  "flags": {
693
693
  "json": {
694
694
  "description": "Format output as json.",
@@ -720,11 +720,23 @@
720
720
  "hasDynamicHelp": false,
721
721
  "multiple": false,
722
722
  "type": "option"
723
+ },
724
+ "fix": {
725
+ "description": "Rebuild missing or stale catalog entries from API",
726
+ "name": "fix",
727
+ "allowNo": false,
728
+ "type": "boolean"
729
+ },
730
+ "generate": {
731
+ "description": "Fix + generate missing descriptions via LLM",
732
+ "name": "generate",
733
+ "allowNo": false,
734
+ "type": "boolean"
723
735
  }
724
736
  },
725
737
  "hasDynamicHelp": false,
726
738
  "hiddenAliases": [],
727
- "id": "billing:card-setup",
739
+ "id": "catalog:doctor",
728
740
  "pluginAlias": "faces-cli",
729
741
  "pluginName": "faces-cli",
730
742
  "pluginType": "core",
@@ -734,14 +746,14 @@
734
746
  "relativePath": [
735
747
  "dist",
736
748
  "commands",
737
- "billing",
738
- "card-setup.js"
749
+ "catalog",
750
+ "doctor.js"
739
751
  ]
740
752
  },
741
- "billing:llm-costs": {
753
+ "catalog:list": {
742
754
  "aliases": [],
743
755
  "args": {},
744
- "description": "List available LLMs and their per-token costs",
756
+ "description": "List all faces in the local catalog",
745
757
  "flags": {
746
758
  "json": {
747
759
  "description": "Format output as json.",
@@ -773,18 +785,11 @@
773
785
  "hasDynamicHelp": false,
774
786
  "multiple": false,
775
787
  "type": "option"
776
- },
777
- "provider": {
778
- "description": "Filter by provider (e.g. openai, anthropic)",
779
- "name": "provider",
780
- "hasDynamicHelp": false,
781
- "multiple": false,
782
- "type": "option"
783
788
  }
784
789
  },
785
790
  "hasDynamicHelp": false,
786
791
  "hiddenAliases": [],
787
- "id": "billing:llm-costs",
792
+ "id": "catalog:list",
788
793
  "pluginAlias": "faces-cli",
789
794
  "pluginName": "faces-cli",
790
795
  "pluginType": "core",
@@ -794,14 +799,14 @@
794
799
  "relativePath": [
795
800
  "dist",
796
801
  "commands",
797
- "billing",
798
- "llm-costs.js"
802
+ "catalog",
803
+ "list.js"
799
804
  ]
800
805
  },
801
- "billing:quota": {
806
+ "catalog:manyfaced": {
802
807
  "aliases": [],
803
808
  "args": {},
804
- "description": "Show compilation stats per face (deprecated use compile:stats)",
809
+ "description": "Browse and install community manyfaced skills from github.com/facessh/manyfaced",
805
810
  "flags": {
806
811
  "json": {
807
812
  "description": "Format output as json.",
@@ -833,11 +838,38 @@
833
838
  "hasDynamicHelp": false,
834
839
  "multiple": false,
835
840
  "type": "option"
841
+ },
842
+ "skill": {
843
+ "description": "Show details for a specific skill",
844
+ "name": "skill",
845
+ "hasDynamicHelp": false,
846
+ "multiple": false,
847
+ "type": "option"
848
+ },
849
+ "install": {
850
+ "description": "Install a skill by name",
851
+ "name": "install",
852
+ "hasDynamicHelp": false,
853
+ "multiple": false,
854
+ "type": "option"
855
+ },
856
+ "skills-dir": {
857
+ "description": "Directory to install skills into (required for --install)",
858
+ "name": "skills-dir",
859
+ "hasDynamicHelp": false,
860
+ "multiple": false,
861
+ "type": "option"
862
+ },
863
+ "refresh": {
864
+ "description": "Force refresh the skill index (ignore cache)",
865
+ "name": "refresh",
866
+ "allowNo": false,
867
+ "type": "boolean"
836
868
  }
837
869
  },
838
870
  "hasDynamicHelp": false,
839
871
  "hiddenAliases": [],
840
- "id": "billing:quota",
872
+ "id": "catalog:manyfaced",
841
873
  "pluginAlias": "faces-cli",
842
874
  "pluginName": "faces-cli",
843
875
  "pluginType": "core",
@@ -847,14 +879,19 @@
847
879
  "relativePath": [
848
880
  "dist",
849
881
  "commands",
850
- "billing",
851
- "quota.js"
882
+ "catalog",
883
+ "manyfaced.js"
852
884
  ]
853
885
  },
854
- "billing:subscription": {
886
+ "catalog:restore": {
855
887
  "aliases": [],
856
- "args": {},
857
- "description": "Show current plan, face count, and renewal date",
888
+ "args": {
889
+ "file": {
890
+ "description": "Backup file path (default: most recent in ~/.faces/backups/)",
891
+ "name": "file"
892
+ }
893
+ },
894
+ "description": "Restore faces, teams, and source material from a backup snapshot",
858
895
  "flags": {
859
896
  "json": {
860
897
  "description": "Format output as json.",
@@ -886,11 +923,17 @@
886
923
  "hasDynamicHelp": false,
887
924
  "multiple": false,
888
925
  "type": "option"
926
+ },
927
+ "compile": {
928
+ "description": "Run compile:all after restoring",
929
+ "name": "compile",
930
+ "allowNo": false,
931
+ "type": "boolean"
889
932
  }
890
933
  },
891
934
  "hasDynamicHelp": false,
892
935
  "hiddenAliases": [],
893
- "id": "billing:subscription",
936
+ "id": "catalog:restore",
894
937
  "pluginAlias": "faces-cli",
895
938
  "pluginName": "faces-cli",
896
939
  "pluginType": "core",
@@ -900,14 +943,14 @@
900
943
  "relativePath": [
901
944
  "dist",
902
945
  "commands",
903
- "billing",
904
- "subscription.js"
946
+ "catalog",
947
+ "restore.js"
905
948
  ]
906
949
  },
907
- "billing:topup": {
950
+ "billing:balance": {
908
951
  "aliases": [],
909
952
  "args": {},
910
- "description": "Top up credit balance using saved payment method",
953
+ "description": "Show credit balance and payment method status",
911
954
  "flags": {
912
955
  "json": {
913
956
  "description": "Format output as json.",
@@ -939,26 +982,11 @@
939
982
  "hasDynamicHelp": false,
940
983
  "multiple": false,
941
984
  "type": "option"
942
- },
943
- "amount": {
944
- "description": "Top-up amount in USD (min $1)",
945
- "name": "amount",
946
- "required": true,
947
- "hasDynamicHelp": false,
948
- "multiple": false,
949
- "type": "option"
950
- },
951
- "payment-ref": {
952
- "description": "Payment reference (admin/test path)",
953
- "name": "payment-ref",
954
- "hasDynamicHelp": false,
955
- "multiple": false,
956
- "type": "option"
957
985
  }
958
986
  },
959
987
  "hasDynamicHelp": false,
960
988
  "hiddenAliases": [],
961
- "id": "billing:topup",
989
+ "id": "billing:balance",
962
990
  "pluginAlias": "faces-cli",
963
991
  "pluginName": "faces-cli",
964
992
  "pluginType": "core",
@@ -969,13 +997,13 @@
969
997
  "dist",
970
998
  "commands",
971
999
  "billing",
972
- "topup.js"
1000
+ "balance.js"
973
1001
  ]
974
1002
  },
975
- "billing:usage": {
1003
+ "billing:card-setup": {
976
1004
  "aliases": [],
977
1005
  "args": {},
978
- "description": "Aggregated usage analytics",
1006
+ "description": "Get a Stripe card setup URL to save a payment method",
979
1007
  "flags": {
980
1008
  "json": {
981
1009
  "description": "Format output as json.",
@@ -1007,38 +1035,11 @@
1007
1035
  "hasDynamicHelp": false,
1008
1036
  "multiple": false,
1009
1037
  "type": "option"
1010
- },
1011
- "group-by": {
1012
- "description": "Group results",
1013
- "name": "group-by",
1014
- "hasDynamicHelp": false,
1015
- "multiple": false,
1016
- "options": [
1017
- "api_key",
1018
- "model",
1019
- "llm",
1020
- "date"
1021
- ],
1022
- "type": "option"
1023
- },
1024
- "from": {
1025
- "description": "Start date (YYYY-MM-DD)",
1026
- "name": "from",
1027
- "hasDynamicHelp": false,
1028
- "multiple": false,
1029
- "type": "option"
1030
- },
1031
- "to": {
1032
- "description": "End date (YYYY-MM-DD)",
1033
- "name": "to",
1034
- "hasDynamicHelp": false,
1035
- "multiple": false,
1036
- "type": "option"
1037
1038
  }
1038
1039
  },
1039
1040
  "hasDynamicHelp": false,
1040
1041
  "hiddenAliases": [],
1041
- "id": "billing:usage",
1042
+ "id": "billing:card-setup",
1042
1043
  "pluginAlias": "faces-cli",
1043
1044
  "pluginName": "faces-cli",
1044
1045
  "pluginType": "core",
@@ -1049,13 +1050,13 @@
1049
1050
  "dist",
1050
1051
  "commands",
1051
1052
  "billing",
1052
- "usage.js"
1053
+ "card-setup.js"
1053
1054
  ]
1054
1055
  },
1055
- "catalog:backup": {
1056
+ "billing:llm-costs": {
1056
1057
  "aliases": [],
1057
1058
  "args": {},
1058
- "description": "Snapshot all faces, teams, and source material for migration",
1059
+ "description": "List available LLMs and their per-token costs",
1059
1060
  "flags": {
1060
1061
  "json": {
1061
1062
  "description": "Format output as json.",
@@ -1087,11 +1088,18 @@
1087
1088
  "hasDynamicHelp": false,
1088
1089
  "multiple": false,
1089
1090
  "type": "option"
1091
+ },
1092
+ "provider": {
1093
+ "description": "Filter by provider (e.g. openai, anthropic)",
1094
+ "name": "provider",
1095
+ "hasDynamicHelp": false,
1096
+ "multiple": false,
1097
+ "type": "option"
1090
1098
  }
1091
1099
  },
1092
1100
  "hasDynamicHelp": false,
1093
1101
  "hiddenAliases": [],
1094
- "id": "catalog:backup",
1102
+ "id": "billing:llm-costs",
1095
1103
  "pluginAlias": "faces-cli",
1096
1104
  "pluginName": "faces-cli",
1097
1105
  "pluginType": "core",
@@ -1101,14 +1109,14 @@
1101
1109
  "relativePath": [
1102
1110
  "dist",
1103
1111
  "commands",
1104
- "catalog",
1105
- "backup.js"
1112
+ "billing",
1113
+ "llm-costs.js"
1106
1114
  ]
1107
1115
  },
1108
- "catalog:doctor": {
1116
+ "billing:topup": {
1109
1117
  "aliases": [],
1110
1118
  "args": {},
1111
- "description": "Diagnose and repair the local face and team catalog",
1119
+ "description": "Top up credit balance using saved payment method",
1112
1120
  "flags": {
1113
1121
  "json": {
1114
1122
  "description": "Format output as json.",
@@ -1141,22 +1149,25 @@
1141
1149
  "multiple": false,
1142
1150
  "type": "option"
1143
1151
  },
1144
- "fix": {
1145
- "description": "Rebuild missing or stale catalog entries from API",
1146
- "name": "fix",
1147
- "allowNo": false,
1148
- "type": "boolean"
1152
+ "amount": {
1153
+ "description": "Top-up amount in USD (min $1)",
1154
+ "name": "amount",
1155
+ "required": true,
1156
+ "hasDynamicHelp": false,
1157
+ "multiple": false,
1158
+ "type": "option"
1149
1159
  },
1150
- "generate": {
1151
- "description": "Fix + generate missing descriptions via LLM",
1152
- "name": "generate",
1153
- "allowNo": false,
1154
- "type": "boolean"
1160
+ "payment-ref": {
1161
+ "description": "Payment reference (admin/test path)",
1162
+ "name": "payment-ref",
1163
+ "hasDynamicHelp": false,
1164
+ "multiple": false,
1165
+ "type": "option"
1155
1166
  }
1156
1167
  },
1157
1168
  "hasDynamicHelp": false,
1158
1169
  "hiddenAliases": [],
1159
- "id": "catalog:doctor",
1170
+ "id": "billing:topup",
1160
1171
  "pluginAlias": "faces-cli",
1161
1172
  "pluginName": "faces-cli",
1162
1173
  "pluginType": "core",
@@ -1166,14 +1177,14 @@
1166
1177
  "relativePath": [
1167
1178
  "dist",
1168
1179
  "commands",
1169
- "catalog",
1170
- "doctor.js"
1180
+ "billing",
1181
+ "topup.js"
1171
1182
  ]
1172
1183
  },
1173
- "catalog:list": {
1184
+ "billing:usage": {
1174
1185
  "aliases": [],
1175
1186
  "args": {},
1176
- "description": "List all faces in the local catalog",
1187
+ "description": "Aggregated usage analytics",
1177
1188
  "flags": {
1178
1189
  "json": {
1179
1190
  "description": "Format output as json.",
@@ -1205,11 +1216,38 @@
1205
1216
  "hasDynamicHelp": false,
1206
1217
  "multiple": false,
1207
1218
  "type": "option"
1219
+ },
1220
+ "group-by": {
1221
+ "description": "Group results",
1222
+ "name": "group-by",
1223
+ "hasDynamicHelp": false,
1224
+ "multiple": false,
1225
+ "options": [
1226
+ "api_key",
1227
+ "model",
1228
+ "llm",
1229
+ "date"
1230
+ ],
1231
+ "type": "option"
1232
+ },
1233
+ "from": {
1234
+ "description": "Start date (YYYY-MM-DD)",
1235
+ "name": "from",
1236
+ "hasDynamicHelp": false,
1237
+ "multiple": false,
1238
+ "type": "option"
1239
+ },
1240
+ "to": {
1241
+ "description": "End date (YYYY-MM-DD)",
1242
+ "name": "to",
1243
+ "hasDynamicHelp": false,
1244
+ "multiple": false,
1245
+ "type": "option"
1208
1246
  }
1209
1247
  },
1210
1248
  "hasDynamicHelp": false,
1211
1249
  "hiddenAliases": [],
1212
- "id": "catalog:list",
1250
+ "id": "billing:usage",
1213
1251
  "pluginAlias": "faces-cli",
1214
1252
  "pluginName": "faces-cli",
1215
1253
  "pluginType": "core",
@@ -1219,155 +1257,11 @@
1219
1257
  "relativePath": [
1220
1258
  "dist",
1221
1259
  "commands",
1222
- "catalog",
1223
- "list.js"
1260
+ "billing",
1261
+ "usage.js"
1224
1262
  ]
1225
1263
  },
1226
- "catalog:manyfaced": {
1227
- "aliases": [],
1228
- "args": {},
1229
- "description": "Browse and install community manyfaced skills from github.com/facessh/manyfaced",
1230
- "flags": {
1231
- "json": {
1232
- "description": "Format output as json.",
1233
- "helpGroup": "GLOBAL",
1234
- "name": "json",
1235
- "allowNo": false,
1236
- "type": "boolean"
1237
- },
1238
- "base-url": {
1239
- "description": "API base URL",
1240
- "env": "FACES_BASE_URL",
1241
- "name": "base-url",
1242
- "hasDynamicHelp": false,
1243
- "multiple": false,
1244
- "type": "option"
1245
- },
1246
- "token": {
1247
- "description": "JWT bearer token",
1248
- "env": "FACES_TOKEN",
1249
- "name": "token",
1250
- "hasDynamicHelp": false,
1251
- "multiple": false,
1252
- "type": "option"
1253
- },
1254
- "api-key": {
1255
- "description": "API key",
1256
- "env": "FACES_API_KEY",
1257
- "name": "api-key",
1258
- "hasDynamicHelp": false,
1259
- "multiple": false,
1260
- "type": "option"
1261
- },
1262
- "skill": {
1263
- "description": "Show details for a specific skill",
1264
- "name": "skill",
1265
- "hasDynamicHelp": false,
1266
- "multiple": false,
1267
- "type": "option"
1268
- },
1269
- "install": {
1270
- "description": "Install a skill by name",
1271
- "name": "install",
1272
- "hasDynamicHelp": false,
1273
- "multiple": false,
1274
- "type": "option"
1275
- },
1276
- "skills-dir": {
1277
- "description": "Directory to install skills into (required for --install)",
1278
- "name": "skills-dir",
1279
- "hasDynamicHelp": false,
1280
- "multiple": false,
1281
- "type": "option"
1282
- },
1283
- "refresh": {
1284
- "description": "Force refresh the skill index (ignore cache)",
1285
- "name": "refresh",
1286
- "allowNo": false,
1287
- "type": "boolean"
1288
- }
1289
- },
1290
- "hasDynamicHelp": false,
1291
- "hiddenAliases": [],
1292
- "id": "catalog:manyfaced",
1293
- "pluginAlias": "faces-cli",
1294
- "pluginName": "faces-cli",
1295
- "pluginType": "core",
1296
- "strict": true,
1297
- "enableJsonFlag": true,
1298
- "isESM": true,
1299
- "relativePath": [
1300
- "dist",
1301
- "commands",
1302
- "catalog",
1303
- "manyfaced.js"
1304
- ]
1305
- },
1306
- "catalog:restore": {
1307
- "aliases": [],
1308
- "args": {
1309
- "file": {
1310
- "description": "Backup file path (default: most recent in ~/.faces/backups/)",
1311
- "name": "file"
1312
- }
1313
- },
1314
- "description": "Restore faces, teams, and source material from a backup snapshot",
1315
- "flags": {
1316
- "json": {
1317
- "description": "Format output as json.",
1318
- "helpGroup": "GLOBAL",
1319
- "name": "json",
1320
- "allowNo": false,
1321
- "type": "boolean"
1322
- },
1323
- "base-url": {
1324
- "description": "API base URL",
1325
- "env": "FACES_BASE_URL",
1326
- "name": "base-url",
1327
- "hasDynamicHelp": false,
1328
- "multiple": false,
1329
- "type": "option"
1330
- },
1331
- "token": {
1332
- "description": "JWT bearer token",
1333
- "env": "FACES_TOKEN",
1334
- "name": "token",
1335
- "hasDynamicHelp": false,
1336
- "multiple": false,
1337
- "type": "option"
1338
- },
1339
- "api-key": {
1340
- "description": "API key",
1341
- "env": "FACES_API_KEY",
1342
- "name": "api-key",
1343
- "hasDynamicHelp": false,
1344
- "multiple": false,
1345
- "type": "option"
1346
- },
1347
- "compile": {
1348
- "description": "Run compile:all after restoring",
1349
- "name": "compile",
1350
- "allowNo": false,
1351
- "type": "boolean"
1352
- }
1353
- },
1354
- "hasDynamicHelp": false,
1355
- "hiddenAliases": [],
1356
- "id": "catalog:restore",
1357
- "pluginAlias": "faces-cli",
1358
- "pluginName": "faces-cli",
1359
- "pluginType": "core",
1360
- "strict": true,
1361
- "enableJsonFlag": true,
1362
- "isESM": true,
1363
- "relativePath": [
1364
- "dist",
1365
- "commands",
1366
- "catalog",
1367
- "restore.js"
1368
- ]
1369
- },
1370
- "chat:chat": {
1264
+ "chat:chat": {
1371
1265
  "aliases": [],
1372
1266
  "args": {
1373
1267
  "face_username": {
@@ -2326,10 +2220,10 @@
2326
2220
  "show.js"
2327
2221
  ]
2328
2222
  },
2329
- "keys:create": {
2223
+ "face:attributes": {
2330
2224
  "aliases": [],
2331
2225
  "args": {},
2332
- "description": "Create a new API key (JWT required). The new key is saved to ~/.faces/config.json as api_key by default; pass --no-save to skip.",
2226
+ "description": "List all supported attribute keys",
2333
2227
  "flags": {
2334
2228
  "json": {
2335
2229
  "description": "Format output as json.",
@@ -2361,53 +2255,11 @@
2361
2255
  "hasDynamicHelp": false,
2362
2256
  "multiple": false,
2363
2257
  "type": "option"
2364
- },
2365
- "name": {
2366
- "description": "Key name/label",
2367
- "name": "name",
2368
- "required": true,
2369
- "hasDynamicHelp": false,
2370
- "multiple": false,
2371
- "type": "option"
2372
- },
2373
- "expires-days": {
2374
- "description": "Expiry in days (omit for no expiry)",
2375
- "name": "expires-days",
2376
- "hasDynamicHelp": false,
2377
- "multiple": false,
2378
- "type": "option"
2379
- },
2380
- "budget": {
2381
- "description": "Spend budget in USD",
2382
- "name": "budget",
2383
- "hasDynamicHelp": false,
2384
- "multiple": false,
2385
- "type": "option"
2386
- },
2387
- "face": {
2388
- "description": "Allowed face alias (repeatable)",
2389
- "name": "face",
2390
- "hasDynamicHelp": false,
2391
- "multiple": true,
2392
- "type": "option"
2393
- },
2394
- "model": {
2395
- "description": "Allowed model name (repeatable)",
2396
- "name": "model",
2397
- "hasDynamicHelp": false,
2398
- "multiple": true,
2399
- "type": "option"
2400
- },
2401
- "save": {
2402
- "description": "Save the new key to ~/.faces/config.json as api_key (default: true; use --no-save to skip)",
2403
- "name": "save",
2404
- "allowNo": true,
2405
- "type": "boolean"
2406
2258
  }
2407
2259
  },
2408
2260
  "hasDynamicHelp": false,
2409
2261
  "hiddenAliases": [],
2410
- "id": "keys:create",
2262
+ "id": "face:attributes",
2411
2263
  "pluginAlias": "faces-cli",
2412
2264
  "pluginName": "faces-cli",
2413
2265
  "pluginType": "core",
@@ -2417,14 +2269,14 @@
2417
2269
  "relativePath": [
2418
2270
  "dist",
2419
2271
  "commands",
2420
- "keys",
2421
- "create.js"
2272
+ "face",
2273
+ "attributes.js"
2422
2274
  ]
2423
2275
  },
2424
- "keys:list": {
2276
+ "face:create": {
2425
2277
  "aliases": [],
2426
2278
  "args": {},
2427
- "description": "List all API keys (JWT required)",
2279
+ "description": "Create a new face",
2428
2280
  "flags": {
2429
2281
  "json": {
2430
2282
  "description": "Format output as json.",
@@ -2456,296 +2308,26 @@
2456
2308
  "hasDynamicHelp": false,
2457
2309
  "multiple": false,
2458
2310
  "type": "option"
2459
- }
2460
- },
2461
- "hasDynamicHelp": false,
2462
- "hiddenAliases": [],
2463
- "id": "keys:list",
2464
- "pluginAlias": "faces-cli",
2465
- "pluginName": "faces-cli",
2466
- "pluginType": "core",
2467
- "strict": true,
2468
- "enableJsonFlag": true,
2469
- "isESM": true,
2470
- "relativePath": [
2471
- "dist",
2472
- "commands",
2473
- "keys",
2474
- "list.js"
2475
- ]
2476
- },
2477
- "keys:revoke": {
2478
- "aliases": [],
2479
- "args": {
2480
- "key_id": {
2481
- "description": "Key ID",
2482
- "name": "key_id",
2483
- "required": true
2484
- }
2485
- },
2486
- "description": "Revoke an API key (JWT required)",
2487
- "flags": {
2488
- "json": {
2489
- "description": "Format output as json.",
2490
- "helpGroup": "GLOBAL",
2491
- "name": "json",
2492
- "allowNo": false,
2493
- "type": "boolean"
2494
2311
  },
2495
- "base-url": {
2496
- "description": "API base URL",
2497
- "env": "FACES_BASE_URL",
2498
- "name": "base-url",
2312
+ "name": {
2313
+ "description": "Display name",
2314
+ "name": "name",
2315
+ "required": true,
2499
2316
  "hasDynamicHelp": false,
2500
2317
  "multiple": false,
2501
2318
  "type": "option"
2502
2319
  },
2503
- "token": {
2504
- "description": "JWT bearer token",
2505
- "env": "FACES_TOKEN",
2506
- "name": "token",
2320
+ "alias": {
2321
+ "description": "Unique alias slug",
2322
+ "name": "alias",
2323
+ "required": true,
2507
2324
  "hasDynamicHelp": false,
2508
2325
  "multiple": false,
2509
2326
  "type": "option"
2510
2327
  },
2511
- "api-key": {
2512
- "description": "API key",
2513
- "env": "FACES_API_KEY",
2514
- "name": "api-key",
2515
- "hasDynamicHelp": false,
2516
- "multiple": false,
2517
- "type": "option"
2518
- },
2519
- "yes": {
2520
- "description": "Skip confirmation",
2521
- "name": "yes",
2522
- "allowNo": false,
2523
- "type": "boolean"
2524
- }
2525
- },
2526
- "hasDynamicHelp": false,
2527
- "hiddenAliases": [],
2528
- "id": "keys:revoke",
2529
- "pluginAlias": "faces-cli",
2530
- "pluginName": "faces-cli",
2531
- "pluginType": "core",
2532
- "strict": true,
2533
- "enableJsonFlag": true,
2534
- "isESM": true,
2535
- "relativePath": [
2536
- "dist",
2537
- "commands",
2538
- "keys",
2539
- "revoke.js"
2540
- ]
2541
- },
2542
- "keys:update": {
2543
- "aliases": [],
2544
- "args": {
2545
- "key_id": {
2546
- "description": "Key ID",
2547
- "name": "key_id",
2548
- "required": true
2549
- }
2550
- },
2551
- "description": "Update API key metadata (JWT required)",
2552
- "flags": {
2553
- "json": {
2554
- "description": "Format output as json.",
2555
- "helpGroup": "GLOBAL",
2556
- "name": "json",
2557
- "allowNo": false,
2558
- "type": "boolean"
2559
- },
2560
- "base-url": {
2561
- "description": "API base URL",
2562
- "env": "FACES_BASE_URL",
2563
- "name": "base-url",
2564
- "hasDynamicHelp": false,
2565
- "multiple": false,
2566
- "type": "option"
2567
- },
2568
- "token": {
2569
- "description": "JWT bearer token",
2570
- "env": "FACES_TOKEN",
2571
- "name": "token",
2572
- "hasDynamicHelp": false,
2573
- "multiple": false,
2574
- "type": "option"
2575
- },
2576
- "api-key": {
2577
- "description": "API key",
2578
- "env": "FACES_API_KEY",
2579
- "name": "api-key",
2580
- "hasDynamicHelp": false,
2581
- "multiple": false,
2582
- "type": "option"
2583
- },
2584
- "name": {
2585
- "description": "New key name",
2586
- "name": "name",
2587
- "hasDynamicHelp": false,
2588
- "multiple": false,
2589
- "type": "option"
2590
- },
2591
- "budget": {
2592
- "description": "New spend budget in USD",
2593
- "name": "budget",
2594
- "hasDynamicHelp": false,
2595
- "multiple": false,
2596
- "type": "option"
2597
- },
2598
- "reset-spent": {
2599
- "description": "Reset spent amount to zero",
2600
- "name": "reset-spent",
2601
- "allowNo": false,
2602
- "type": "boolean"
2603
- }
2604
- },
2605
- "hasDynamicHelp": false,
2606
- "hiddenAliases": [],
2607
- "id": "keys:update",
2608
- "pluginAlias": "faces-cli",
2609
- "pluginName": "faces-cli",
2610
- "pluginType": "core",
2611
- "strict": true,
2612
- "enableJsonFlag": true,
2613
- "isESM": true,
2614
- "relativePath": [
2615
- "dist",
2616
- "commands",
2617
- "keys",
2618
- "update.js"
2619
- ]
2620
- },
2621
- "team:add": {
2622
- "aliases": [],
2623
- "args": {
2624
- "team_id": {
2625
- "description": "Team ID",
2626
- "name": "team_id",
2627
- "required": true
2628
- }
2629
- },
2630
- "description": "Add face(s) to a team",
2631
- "flags": {
2632
- "json": {
2633
- "description": "Format output as json.",
2634
- "helpGroup": "GLOBAL",
2635
- "name": "json",
2636
- "allowNo": false,
2637
- "type": "boolean"
2638
- },
2639
- "base-url": {
2640
- "description": "API base URL",
2641
- "env": "FACES_BASE_URL",
2642
- "name": "base-url",
2643
- "hasDynamicHelp": false,
2644
- "multiple": false,
2645
- "type": "option"
2646
- },
2647
- "token": {
2648
- "description": "JWT bearer token",
2649
- "env": "FACES_TOKEN",
2650
- "name": "token",
2651
- "hasDynamicHelp": false,
2652
- "multiple": false,
2653
- "type": "option"
2654
- },
2655
- "api-key": {
2656
- "description": "API key",
2657
- "env": "FACES_API_KEY",
2658
- "name": "api-key",
2659
- "hasDynamicHelp": false,
2660
- "multiple": false,
2661
- "type": "option"
2662
- },
2663
- "face": {
2664
- "description": "Face alias to add (repeatable)",
2665
- "name": "face",
2666
- "required": true,
2667
- "hasDynamicHelp": false,
2668
- "multiple": true,
2669
- "type": "option"
2670
- }
2671
- },
2672
- "hasDynamicHelp": false,
2673
- "hiddenAliases": [],
2674
- "id": "team:add",
2675
- "pluginAlias": "faces-cli",
2676
- "pluginName": "faces-cli",
2677
- "pluginType": "core",
2678
- "strict": true,
2679
- "enableJsonFlag": true,
2680
- "isESM": true,
2681
- "relativePath": [
2682
- "dist",
2683
- "commands",
2684
- "team",
2685
- "add.js"
2686
- ]
2687
- },
2688
- "team:create": {
2689
- "aliases": [],
2690
- "args": {},
2691
- "description": "Create a new team",
2692
- "flags": {
2693
- "json": {
2694
- "description": "Format output as json.",
2695
- "helpGroup": "GLOBAL",
2696
- "name": "json",
2697
- "allowNo": false,
2698
- "type": "boolean"
2699
- },
2700
- "base-url": {
2701
- "description": "API base URL",
2702
- "env": "FACES_BASE_URL",
2703
- "name": "base-url",
2704
- "hasDynamicHelp": false,
2705
- "multiple": false,
2706
- "type": "option"
2707
- },
2708
- "token": {
2709
- "description": "JWT bearer token",
2710
- "env": "FACES_TOKEN",
2711
- "name": "token",
2712
- "hasDynamicHelp": false,
2713
- "multiple": false,
2714
- "type": "option"
2715
- },
2716
- "api-key": {
2717
- "description": "API key",
2718
- "env": "FACES_API_KEY",
2719
- "name": "api-key",
2720
- "hasDynamicHelp": false,
2721
- "multiple": false,
2722
- "type": "option"
2723
- },
2724
- "name": {
2725
- "description": "Team name",
2726
- "name": "name",
2727
- "required": true,
2728
- "hasDynamicHelp": false,
2729
- "multiple": false,
2730
- "type": "option"
2731
- },
2732
- "description": {
2733
- "description": "Plain-text team description (max 1500 chars)",
2734
- "name": "description",
2735
- "hasDynamicHelp": false,
2736
- "multiple": false,
2737
- "type": "option"
2738
- },
2739
- "protocol": {
2740
- "description": "Protocol content (mermaid diagram or markdown, max 1000 words)",
2741
- "name": "protocol",
2742
- "hasDynamicHelp": false,
2743
- "multiple": false,
2744
- "type": "option"
2745
- },
2746
- "protocol-file": {
2747
- "description": "Read protocol from file",
2748
- "name": "protocol-file",
2328
+ "description": {
2329
+ "description": "Plain-text description / bio (max 1500 chars)",
2330
+ "name": "description",
2749
2331
  "hasDynamicHelp": false,
2750
2332
  "multiple": false,
2751
2333
  "type": "option"
@@ -2756,267 +2338,48 @@
2756
2338
  "hasDynamicHelp": false,
2757
2339
  "multiple": true,
2758
2340
  "type": "option"
2759
- }
2760
- },
2761
- "hasDynamicHelp": false,
2762
- "hiddenAliases": [],
2763
- "id": "team:create",
2764
- "pluginAlias": "faces-cli",
2765
- "pluginName": "faces-cli",
2766
- "pluginType": "core",
2767
- "strict": true,
2768
- "enableJsonFlag": true,
2769
- "isESM": true,
2770
- "relativePath": [
2771
- "dist",
2772
- "commands",
2773
- "team",
2774
- "create.js"
2775
- ]
2776
- },
2777
- "team:delete": {
2778
- "aliases": [],
2779
- "args": {
2780
- "team_id": {
2781
- "description": "Team ID",
2782
- "name": "team_id",
2783
- "required": true
2784
- }
2785
- },
2786
- "description": "Delete a team",
2787
- "flags": {
2788
- "json": {
2789
- "description": "Format output as json.",
2790
- "helpGroup": "GLOBAL",
2791
- "name": "json",
2792
- "allowNo": false,
2793
- "type": "boolean"
2794
- },
2795
- "base-url": {
2796
- "description": "API base URL",
2797
- "env": "FACES_BASE_URL",
2798
- "name": "base-url",
2799
- "hasDynamicHelp": false,
2800
- "multiple": false,
2801
- "type": "option"
2802
2341
  },
2803
- "token": {
2804
- "description": "JWT bearer token",
2805
- "env": "FACES_TOKEN",
2806
- "name": "token",
2807
- "hasDynamicHelp": false,
2808
- "multiple": false,
2809
- "type": "option"
2810
- },
2811
- "api-key": {
2812
- "description": "API key",
2813
- "env": "FACES_API_KEY",
2814
- "name": "api-key",
2815
- "hasDynamicHelp": false,
2816
- "multiple": false,
2817
- "type": "option"
2818
- },
2819
- "yes": {
2820
- "description": "Skip confirmation",
2821
- "name": "yes",
2822
- "allowNo": false,
2823
- "type": "boolean"
2824
- }
2825
- },
2826
- "hasDynamicHelp": false,
2827
- "hiddenAliases": [],
2828
- "id": "team:delete",
2829
- "pluginAlias": "faces-cli",
2830
- "pluginName": "faces-cli",
2831
- "pluginType": "core",
2832
- "strict": true,
2833
- "enableJsonFlag": true,
2834
- "isESM": true,
2835
- "relativePath": [
2836
- "dist",
2837
- "commands",
2838
- "team",
2839
- "delete.js"
2840
- ]
2841
- },
2842
- "team:edit": {
2843
- "aliases": [],
2844
- "args": {
2845
- "team_id": {
2846
- "description": "Team ID",
2847
- "name": "team_id",
2848
- "required": true
2849
- }
2850
- },
2851
- "description": "Edit a team",
2852
- "flags": {
2853
- "json": {
2854
- "description": "Format output as json.",
2855
- "helpGroup": "GLOBAL",
2856
- "name": "json",
2857
- "allowNo": false,
2858
- "type": "boolean"
2859
- },
2860
- "base-url": {
2861
- "description": "API base URL",
2862
- "env": "FACES_BASE_URL",
2863
- "name": "base-url",
2864
- "hasDynamicHelp": false,
2865
- "multiple": false,
2866
- "type": "option"
2867
- },
2868
- "token": {
2869
- "description": "JWT bearer token",
2870
- "env": "FACES_TOKEN",
2871
- "name": "token",
2872
- "hasDynamicHelp": false,
2873
- "multiple": false,
2874
- "type": "option"
2875
- },
2876
- "api-key": {
2877
- "description": "API key",
2878
- "env": "FACES_API_KEY",
2879
- "name": "api-key",
2880
- "hasDynamicHelp": false,
2881
- "multiple": false,
2882
- "type": "option"
2883
- },
2884
- "name": {
2885
- "description": "New team name",
2886
- "name": "name",
2887
- "hasDynamicHelp": false,
2888
- "multiple": false,
2889
- "type": "option"
2890
- },
2891
- "description": {
2892
- "description": "New description (max 1500 chars)",
2893
- "name": "description",
2894
- "hasDynamicHelp": false,
2895
- "multiple": false,
2896
- "type": "option"
2897
- },
2898
- "protocol": {
2899
- "description": "New protocol content",
2900
- "name": "protocol",
2901
- "hasDynamicHelp": false,
2902
- "multiple": false,
2903
- "type": "option"
2904
- },
2905
- "protocol-file": {
2906
- "description": "Read protocol from file",
2907
- "name": "protocol-file",
2908
- "hasDynamicHelp": false,
2909
- "multiple": false,
2910
- "type": "option"
2911
- }
2912
- },
2913
- "hasDynamicHelp": false,
2914
- "hiddenAliases": [],
2915
- "id": "team:edit",
2916
- "pluginAlias": "faces-cli",
2917
- "pluginName": "faces-cli",
2918
- "pluginType": "core",
2919
- "strict": true,
2920
- "enableJsonFlag": true,
2921
- "isESM": true,
2922
- "relativePath": [
2923
- "dist",
2924
- "commands",
2925
- "team",
2926
- "edit.js"
2927
- ]
2928
- },
2929
- "team:get": {
2930
- "aliases": [],
2931
- "args": {
2932
- "team_id": {
2933
- "description": "Team ID",
2934
- "name": "team_id",
2935
- "required": true
2936
- }
2937
- },
2938
- "description": "Get a team by ID",
2939
- "flags": {
2940
- "json": {
2941
- "description": "Format output as json.",
2942
- "helpGroup": "GLOBAL",
2943
- "name": "json",
2944
- "allowNo": false,
2945
- "type": "boolean"
2946
- },
2947
- "base-url": {
2948
- "description": "API base URL",
2949
- "env": "FACES_BASE_URL",
2950
- "name": "base-url",
2342
+ "default-model": {
2343
+ "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
2344
+ "name": "default-model",
2951
2345
  "hasDynamicHelp": false,
2952
2346
  "multiple": false,
2953
2347
  "type": "option"
2954
2348
  },
2955
- "token": {
2956
- "description": "JWT bearer token",
2957
- "env": "FACES_TOKEN",
2958
- "name": "token",
2349
+ "formula": {
2350
+ "description": "Boolean formula over owned concrete face aliases (e.g. \"a | b\", \"(a | b) - c\"). Creates a composite face.",
2351
+ "name": "formula",
2959
2352
  "hasDynamicHelp": false,
2960
2353
  "multiple": false,
2961
2354
  "type": "option"
2962
2355
  },
2963
- "api-key": {
2964
- "description": "API key",
2965
- "env": "FACES_API_KEY",
2966
- "name": "api-key",
2356
+ "attr": {
2357
+ "description": "Attribute KEY=VALUE (repeatable)",
2358
+ "name": "attr",
2967
2359
  "hasDynamicHelp": false,
2968
- "multiple": false,
2360
+ "multiple": true,
2969
2361
  "type": "option"
2970
- }
2971
- },
2972
- "hasDynamicHelp": false,
2973
- "hiddenAliases": [],
2974
- "id": "team:get",
2975
- "pluginAlias": "faces-cli",
2976
- "pluginName": "faces-cli",
2977
- "pluginType": "core",
2978
- "strict": true,
2979
- "enableJsonFlag": true,
2980
- "isESM": true,
2981
- "relativePath": [
2982
- "dist",
2983
- "commands",
2984
- "team",
2985
- "get.js"
2986
- ]
2987
- },
2988
- "team:list": {
2989
- "aliases": [],
2990
- "args": {},
2991
- "description": "List your teams",
2992
- "flags": {
2993
- "json": {
2994
- "description": "Format output as json.",
2995
- "helpGroup": "GLOBAL",
2996
- "name": "json",
2997
- "allowNo": false,
2998
- "type": "boolean"
2999
2362
  },
3000
- "base-url": {
3001
- "description": "API base URL",
3002
- "env": "FACES_BASE_URL",
3003
- "name": "base-url",
2363
+ "tool": {
2364
+ "description": "Tool name to enable (repeatable)",
2365
+ "name": "tool",
3004
2366
  "hasDynamicHelp": false,
3005
- "multiple": false,
2367
+ "multiple": true,
3006
2368
  "type": "option"
3007
2369
  },
3008
- "token": {
3009
- "description": "JWT bearer token",
3010
- "env": "FACES_TOKEN",
3011
- "name": "token",
2370
+ "profile-addendum": {
2371
+ "description": "Per-face system prompt, injected after the persona profile and before any per-request system prompt (max 100,000 chars).",
2372
+ "name": "profile-addendum",
3012
2373
  "hasDynamicHelp": false,
3013
2374
  "multiple": false,
3014
2375
  "type": "option"
3015
2376
  },
3016
- "api-key": {
3017
- "description": "API key",
3018
- "env": "FACES_API_KEY",
3019
- "name": "api-key",
2377
+ "profile-addendum-file": {
2378
+ "description": "Read the per-face system prompt from a file (alternative to --profile-addendum).",
2379
+ "exclusive": [
2380
+ "profile-addendum"
2381
+ ],
2382
+ "name": "profile-addendum-file",
3020
2383
  "hasDynamicHelp": false,
3021
2384
  "multiple": false,
3022
2385
  "type": "option"
@@ -3024,7 +2387,7 @@
3024
2387
  },
3025
2388
  "hasDynamicHelp": false,
3026
2389
  "hiddenAliases": [],
3027
- "id": "team:list",
2390
+ "id": "face:create",
3028
2391
  "pluginAlias": "faces-cli",
3029
2392
  "pluginName": "faces-cli",
3030
2393
  "pluginType": "core",
@@ -3034,20 +2397,20 @@
3034
2397
  "relativePath": [
3035
2398
  "dist",
3036
2399
  "commands",
3037
- "team",
3038
- "list.js"
2400
+ "face",
2401
+ "create.js"
3039
2402
  ]
3040
2403
  },
3041
- "team:members": {
2404
+ "face:delete": {
3042
2405
  "aliases": [],
3043
2406
  "args": {
3044
- "team_id": {
3045
- "description": "Team ID",
3046
- "name": "team_id",
2407
+ "face_id": {
2408
+ "description": "Face alias",
2409
+ "name": "face_id",
3047
2410
  "required": true
3048
2411
  }
3049
2412
  },
3050
- "description": "List members of a team",
2413
+ "description": "Delete a face permanently",
3051
2414
  "flags": {
3052
2415
  "json": {
3053
2416
  "description": "Format output as json.",
@@ -3079,11 +2442,17 @@
3079
2442
  "hasDynamicHelp": false,
3080
2443
  "multiple": false,
3081
2444
  "type": "option"
2445
+ },
2446
+ "yes": {
2447
+ "description": "Skip confirmation",
2448
+ "name": "yes",
2449
+ "allowNo": false,
2450
+ "type": "boolean"
3082
2451
  }
3083
2452
  },
3084
2453
  "hasDynamicHelp": false,
3085
2454
  "hiddenAliases": [],
3086
- "id": "team:members",
2455
+ "id": "face:delete",
3087
2456
  "pluginAlias": "faces-cli",
3088
2457
  "pluginName": "faces-cli",
3089
2458
  "pluginType": "core",
@@ -3093,25 +2462,14 @@
3093
2462
  "relativePath": [
3094
2463
  "dist",
3095
2464
  "commands",
3096
- "team",
3097
- "members.js"
2465
+ "face",
2466
+ "delete.js"
3098
2467
  ]
3099
2468
  },
3100
- "team:remove": {
2469
+ "face:diff": {
3101
2470
  "aliases": [],
3102
- "args": {
3103
- "team_id": {
3104
- "description": "Team ID",
3105
- "name": "team_id",
3106
- "required": true
3107
- },
3108
- "alias": {
3109
- "description": "Face alias to remove",
3110
- "name": "alias",
3111
- "required": true
3112
- }
3113
- },
3114
- "description": "Remove a face from a team",
2471
+ "args": {},
2472
+ "description": "Compare owned faces pairwise across all centroid components",
3115
2473
  "flags": {
3116
2474
  "json": {
3117
2475
  "description": "Format output as json.",
@@ -3143,11 +2501,19 @@
3143
2501
  "hasDynamicHelp": false,
3144
2502
  "multiple": false,
3145
2503
  "type": "option"
2504
+ },
2505
+ "face": {
2506
+ "description": "Face alias to include (repeatable, min 2)",
2507
+ "name": "face",
2508
+ "required": true,
2509
+ "hasDynamicHelp": false,
2510
+ "multiple": true,
2511
+ "type": "option"
3146
2512
  }
3147
2513
  },
3148
2514
  "hasDynamicHelp": false,
3149
2515
  "hiddenAliases": [],
3150
- "id": "team:remove",
2516
+ "id": "face:diff",
3151
2517
  "pluginAlias": "faces-cli",
3152
2518
  "pluginName": "faces-cli",
3153
2519
  "pluginType": "core",
@@ -3157,23 +2523,20 @@
3157
2523
  "relativePath": [
3158
2524
  "dist",
3159
2525
  "commands",
3160
- "team",
3161
- "remove.js"
2526
+ "face",
2527
+ "diff.js"
3162
2528
  ]
3163
2529
  },
3164
- "voiceprint:build-status": {
2530
+ "face:edit": {
3165
2531
  "aliases": [],
3166
2532
  "args": {
3167
- "job_id": {
3168
- "description": "Build job id",
3169
- "name": "job_id",
2533
+ "face_id": {
2534
+ "description": "Face alias",
2535
+ "name": "face_id",
3170
2536
  "required": true
3171
2537
  }
3172
2538
  },
3173
- "description": "Get the status/result of a voiceprint build job (from voiceprint:build without --wait)",
3174
- "examples": [
3175
- "<%= config.bin %> <%= command.id %> 4e13bf03-fbc1-4ad0-92ae-16984e2f9a1d"
3176
- ],
2539
+ "description": "Edit a face's metadata",
3177
2540
  "flags": {
3178
2541
  "json": {
3179
2542
  "description": "Format output as json.",
@@ -3205,169 +2568,87 @@
3205
2568
  "hasDynamicHelp": false,
3206
2569
  "multiple": false,
3207
2570
  "type": "option"
3208
- }
3209
- },
3210
- "hasDynamicHelp": false,
3211
- "hiddenAliases": [],
3212
- "id": "voiceprint:build-status",
3213
- "pluginAlias": "faces-cli",
3214
- "pluginName": "faces-cli",
3215
- "pluginType": "core",
3216
- "strict": true,
3217
- "enableJsonFlag": true,
3218
- "isESM": true,
3219
- "relativePath": [
3220
- "dist",
3221
- "commands",
3222
- "voiceprint",
3223
- "build-status.js"
3224
- ]
3225
- },
3226
- "voiceprint:build": {
3227
- "aliases": [],
3228
- "args": {
3229
- "self_alias": {
3230
- "description": "Self face alias",
3231
- "name": "self_alias",
3232
- "required": true
3233
- }
3234
- },
3235
- "description": "Build a self face's voice map from its uploaded corpus. Auto-creates the hidden <self>-voiceprint face and installs the map. Async — use --wait to block.",
3236
- "examples": [
3237
- "<%= config.bin %> <%= command.id %> alice --wait",
3238
- "<%= config.bin %> <%= command.id %> alice --holdout-count 120 --oauth-only --wait"
3239
- ],
3240
- "flags": {
3241
- "json": {
3242
- "description": "Format output as json.",
3243
- "helpGroup": "GLOBAL",
3244
- "name": "json",
3245
- "allowNo": false,
3246
- "type": "boolean"
3247
2571
  },
3248
- "base-url": {
3249
- "description": "API base URL",
3250
- "env": "FACES_BASE_URL",
3251
- "name": "base-url",
2572
+ "name": {
2573
+ "description": "New display name",
2574
+ "name": "name",
3252
2575
  "hasDynamicHelp": false,
3253
2576
  "multiple": false,
3254
2577
  "type": "option"
3255
2578
  },
3256
- "token": {
3257
- "description": "JWT bearer token",
3258
- "env": "FACES_TOKEN",
3259
- "name": "token",
2579
+ "description": {
2580
+ "description": "Plain-text description / bio (max 1500 chars)",
2581
+ "name": "description",
3260
2582
  "hasDynamicHelp": false,
3261
2583
  "multiple": false,
3262
2584
  "type": "option"
3263
2585
  },
3264
- "api-key": {
3265
- "description": "API key",
3266
- "env": "FACES_API_KEY",
3267
- "name": "api-key",
2586
+ "tag": {
2587
+ "description": "Replace all tags (repeatable, lowercase)",
2588
+ "name": "tag",
3268
2589
  "hasDynamicHelp": false,
3269
- "multiple": false,
2590
+ "multiple": true,
3270
2591
  "type": "option"
3271
2592
  },
3272
- "model": {
3273
- "description": "Model that forges the voice map (default: gpt-5.4)",
3274
- "name": "model",
2593
+ "default-model": {
2594
+ "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
2595
+ "name": "default-model",
3275
2596
  "hasDynamicHelp": false,
3276
2597
  "multiple": false,
3277
2598
  "type": "option"
3278
2599
  },
3279
- "holdout-count": {
3280
- "description": "Stratified scoring holdout size (default: 120)",
3281
- "name": "holdout-count",
2600
+ "formula": {
2601
+ "description": "New boolean formula (synthetic faces only)",
2602
+ "name": "formula",
3282
2603
  "hasDynamicHelp": false,
3283
2604
  "multiple": false,
3284
2605
  "type": "option"
3285
2606
  },
3286
- "min-valid": {
3287
- "description": "Corpus floor below which no holdout is split — train on all (default: 550)",
3288
- "name": "min-valid",
2607
+ "attr": {
2608
+ "description": "Update attribute KEY=VALUE (repeatable)",
2609
+ "name": "attr",
3289
2610
  "hasDynamicHelp": false,
3290
- "multiple": false,
2611
+ "multiple": true,
3291
2612
  "type": "option"
3292
2613
  },
3293
- "oauth-only": {
3294
- "description": "Only run on a free (OAuth) route; never fall back to billed inference",
3295
- "name": "oauth-only",
3296
- "allowNo": false,
3297
- "type": "boolean"
3298
- },
3299
- "wait": {
3300
- "description": "Block and poll until the build finishes (default: print the job_id and return)",
3301
- "name": "wait",
3302
- "allowNo": false,
3303
- "type": "boolean"
3304
- }
3305
- },
3306
- "hasDynamicHelp": false,
3307
- "hiddenAliases": [],
3308
- "id": "voiceprint:build",
3309
- "pluginAlias": "faces-cli",
3310
- "pluginName": "faces-cli",
3311
- "pluginType": "core",
3312
- "strict": true,
3313
- "enableJsonFlag": true,
3314
- "isESM": true,
3315
- "relativePath": [
3316
- "dist",
3317
- "commands",
3318
- "voiceprint",
3319
- "build.js"
3320
- ]
3321
- },
3322
- "voiceprint:get": {
3323
- "aliases": [],
3324
- "args": {
3325
- "job_id": {
3326
- "description": "Scoring job id (from voiceprint:score --no-wait)",
3327
- "name": "job_id",
3328
- "required": true
3329
- }
3330
- },
3331
- "description": "Get the status/result of a voiceprint scoring job started with voiceprint:score --no-wait",
3332
- "examples": [
3333
- "<%= config.bin %> <%= command.id %> 4e13bf03-fbc1-4ad0-92ae-16984e2f9a1d"
3334
- ],
3335
- "flags": {
3336
- "json": {
3337
- "description": "Format output as json.",
3338
- "helpGroup": "GLOBAL",
3339
- "name": "json",
3340
- "allowNo": false,
3341
- "type": "boolean"
3342
- },
3343
- "base-url": {
3344
- "description": "API base URL",
3345
- "env": "FACES_BASE_URL",
3346
- "name": "base-url",
2614
+ "tool": {
2615
+ "description": "Tool names to set (replaces list, repeatable)",
2616
+ "name": "tool",
3347
2617
  "hasDynamicHelp": false,
3348
- "multiple": false,
3349
- "type": "option"
3350
- },
3351
- "token": {
3352
- "description": "JWT bearer token",
3353
- "env": "FACES_TOKEN",
3354
- "name": "token",
2618
+ "multiple": true,
2619
+ "type": "option"
2620
+ },
2621
+ "profile-addendum": {
2622
+ "description": "Replace the per-face system prompt (max 100,000 chars).",
2623
+ "name": "profile-addendum",
3355
2624
  "hasDynamicHelp": false,
3356
2625
  "multiple": false,
3357
2626
  "type": "option"
3358
2627
  },
3359
- "api-key": {
3360
- "description": "API key",
3361
- "env": "FACES_API_KEY",
3362
- "name": "api-key",
2628
+ "profile-addendum-file": {
2629
+ "description": "Replace the per-face system prompt from a file.",
2630
+ "exclusive": [
2631
+ "profile-addendum"
2632
+ ],
2633
+ "name": "profile-addendum-file",
3363
2634
  "hasDynamicHelp": false,
3364
2635
  "multiple": false,
3365
2636
  "type": "option"
2637
+ },
2638
+ "clear-profile-addendum": {
2639
+ "description": "Remove the per-face system prompt.",
2640
+ "exclusive": [
2641
+ "profile-addendum",
2642
+ "profile-addendum-file"
2643
+ ],
2644
+ "name": "clear-profile-addendum",
2645
+ "allowNo": false,
2646
+ "type": "boolean"
3366
2647
  }
3367
2648
  },
3368
2649
  "hasDynamicHelp": false,
3369
2650
  "hiddenAliases": [],
3370
- "id": "voiceprint:get",
2651
+ "id": "face:edit",
3371
2652
  "pluginAlias": "faces-cli",
3372
2653
  "pluginName": "faces-cli",
3373
2654
  "pluginType": "core",
@@ -3377,23 +2658,20 @@
3377
2658
  "relativePath": [
3378
2659
  "dist",
3379
2660
  "commands",
3380
- "voiceprint",
3381
- "get.js"
2661
+ "face",
2662
+ "edit.js"
3382
2663
  ]
3383
2664
  },
3384
- "voiceprint:refine-status": {
2665
+ "face:get": {
3385
2666
  "aliases": [],
3386
2667
  "args": {
3387
- "job_id": {
3388
- "description": "Refine job id",
3389
- "name": "job_id",
2668
+ "face_id": {
2669
+ "description": "Face alias",
2670
+ "name": "face_id",
3390
2671
  "required": true
3391
2672
  }
3392
2673
  },
3393
- "description": "Get the status/result of a voiceprint refine job (from voiceprint:refine without --wait)",
3394
- "examples": [
3395
- "<%= config.bin %> <%= command.id %> 4e13bf03-fbc1-4ad0-92ae-16984e2f9a1d"
3396
- ],
2674
+ "description": "Get details for a face by alias",
3397
2675
  "flags": {
3398
2676
  "json": {
3399
2677
  "description": "Format output as json.",
@@ -3425,11 +2703,24 @@
3425
2703
  "hasDynamicHelp": false,
3426
2704
  "multiple": false,
3427
2705
  "type": "option"
2706
+ },
2707
+ "include": {
2708
+ "description": "Include extra fields: tags, teams (comma-separated)",
2709
+ "name": "include",
2710
+ "hasDynamicHelp": false,
2711
+ "multiple": false,
2712
+ "type": "option"
2713
+ },
2714
+ "full": {
2715
+ "description": "Print the full profile_addendum instead of a truncated preview",
2716
+ "name": "full",
2717
+ "allowNo": false,
2718
+ "type": "boolean"
3428
2719
  }
3429
2720
  },
3430
2721
  "hasDynamicHelp": false,
3431
2722
  "hiddenAliases": [],
3432
- "id": "voiceprint:refine-status",
2723
+ "id": "face:get",
3433
2724
  "pluginAlias": "faces-cli",
3434
2725
  "pluginName": "faces-cli",
3435
2726
  "pluginType": "core",
@@ -3439,24 +2730,14 @@
3439
2730
  "relativePath": [
3440
2731
  "dist",
3441
2732
  "commands",
3442
- "voiceprint",
3443
- "refine-status.js"
2733
+ "face",
2734
+ "get.js"
3444
2735
  ]
3445
2736
  },
3446
- "voiceprint:refine": {
2737
+ "face:list": {
3447
2738
  "aliases": [],
3448
- "args": {
3449
- "self_alias": {
3450
- "description": "Self face alias",
3451
- "name": "self_alias",
3452
- "required": true
3453
- }
3454
- },
3455
- "description": "Tune the active version's post-processing recipe and promote it only if it beats the current one. Requires an existing build with a holdout ≥ 20. Undo with voiceprint:revert.",
3456
- "examples": [
3457
- "<%= config.bin %> <%= command.id %> alice --wait",
3458
- "<%= config.bin %> <%= command.id %> alice --temperature 0.4 --n-samples 6 --wait"
3459
- ],
2739
+ "args": {},
2740
+ "description": "List faces. By default lists owned faces; use --public to include published faces from other accounts.",
3460
2741
  "flags": {
3461
2742
  "json": {
3462
2743
  "description": "Format output as json.",
@@ -3489,105 +2770,57 @@
3489
2770
  "multiple": false,
3490
2771
  "type": "option"
3491
2772
  },
3492
- "model": {
3493
- "description": "Model used to forge candidate drafts (default: the active version's build model)",
3494
- "name": "model",
2773
+ "tag": {
2774
+ "description": "Filter by tag (repeatable, AND logic)",
2775
+ "name": "tag",
3495
2776
  "hasDynamicHelp": false,
3496
- "multiple": false,
2777
+ "multiple": true,
3497
2778
  "type": "option"
3498
2779
  },
3499
- "temperature": {
3500
- "description": "Sampling temperature for candidate drafts (default: 0.4)",
3501
- "name": "temperature",
2780
+ "team": {
2781
+ "description": "Filter by team ID (repeatable, OR logic)",
2782
+ "name": "team",
3502
2783
  "hasDynamicHelp": false,
3503
- "multiple": false,
2784
+ "multiple": true,
3504
2785
  "type": "option"
3505
2786
  },
3506
- "n-samples": {
3507
- "description": "Drafts forged per holdout pair (default: 6)",
3508
- "name": "n-samples",
2787
+ "include": {
2788
+ "description": "Include extra fields: tags, teams (comma-separated)",
2789
+ "name": "include",
3509
2790
  "hasDynamicHelp": false,
3510
2791
  "multiple": false,
3511
2792
  "type": "option"
3512
2793
  },
3513
- "oauth-only": {
3514
- "description": "Only run on a free (OAuth) route; never fall back to billed inference",
3515
- "name": "oauth-only",
2794
+ "public": {
2795
+ "description": "Include published faces from other accounts",
2796
+ "name": "public",
3516
2797
  "allowNo": false,
3517
2798
  "type": "boolean"
3518
2799
  },
3519
- "wait": {
3520
- "description": "Block and poll until refine finishes (default: print the job_id and return)",
3521
- "name": "wait",
3522
- "allowNo": false,
3523
- "type": "boolean"
3524
- }
3525
- },
3526
- "hasDynamicHelp": false,
3527
- "hiddenAliases": [],
3528
- "id": "voiceprint:refine",
3529
- "pluginAlias": "faces-cli",
3530
- "pluginName": "faces-cli",
3531
- "pluginType": "core",
3532
- "strict": true,
3533
- "enableJsonFlag": true,
3534
- "isESM": true,
3535
- "relativePath": [
3536
- "dist",
3537
- "commands",
3538
- "voiceprint",
3539
- "refine.js"
3540
- ]
3541
- },
3542
- "voiceprint:revert": {
3543
- "aliases": [],
3544
- "args": {
3545
- "self_alias": {
3546
- "description": "Self face alias",
3547
- "name": "self_alias",
3548
- "required": true
3549
- }
3550
- },
3551
- "description": "Revert a self face's voice map to its prior version (one-deep undo; re-running toggles back). Only changes which stored recipe/baseline is active — the map text is frozen.",
3552
- "examples": [
3553
- "<%= config.bin %> <%= command.id %> alice"
3554
- ],
3555
- "flags": {
3556
- "json": {
3557
- "description": "Format output as json.",
3558
- "helpGroup": "GLOBAL",
3559
- "name": "json",
2800
+ "system": {
2801
+ "description": "Show only the curated system faces (published faces owned by 'head')",
2802
+ "name": "system",
3560
2803
  "allowNo": false,
3561
2804
  "type": "boolean"
3562
2805
  },
3563
- "base-url": {
3564
- "description": "API base URL",
3565
- "env": "FACES_BASE_URL",
3566
- "name": "base-url",
3567
- "hasDynamicHelp": false,
3568
- "multiple": false,
3569
- "type": "option"
3570
- },
3571
- "token": {
3572
- "description": "JWT bearer token",
3573
- "env": "FACES_TOKEN",
3574
- "name": "token",
2806
+ "from-users": {
2807
+ "description": "Only published faces from these owners (repeatable/comma-separated)",
2808
+ "name": "from-users",
3575
2809
  "hasDynamicHelp": false,
3576
- "multiple": false,
2810
+ "multiple": true,
3577
2811
  "type": "option"
3578
2812
  },
3579
- "api-key": {
3580
- "description": "API key",
3581
- "env": "FACES_API_KEY",
3582
- "name": "api-key",
2813
+ "not-from-users": {
2814
+ "description": "Exclude published faces from these owners (repeatable/comma-separated)",
2815
+ "name": "not-from-users",
3583
2816
  "hasDynamicHelp": false,
3584
- "multiple": false,
2817
+ "multiple": true,
3585
2818
  "type": "option"
3586
2819
  }
3587
2820
  },
3588
2821
  "hasDynamicHelp": false,
3589
2822
  "hiddenAliases": [],
3590
- "id": "voiceprint:revert",
2823
+ "id": "face:list",
3591
2824
  "pluginAlias": "faces-cli",
3592
2825
  "pluginName": "faces-cli",
3593
2826
  "pluginType": "core",
@@ -3597,22 +2830,22 @@
3597
2830
  "relativePath": [
3598
2831
  "dist",
3599
2832
  "commands",
3600
- "voiceprint",
3601
- "revert.js"
2833
+ "face",
2834
+ "list.js"
3602
2835
  ]
3603
2836
  },
3604
- "voiceprint:score-status": {
2837
+ "face:lock": {
3605
2838
  "aliases": [],
3606
2839
  "args": {
3607
- "job_id": {
3608
- "description": "Scoring job id",
3609
- "name": "job_id",
2840
+ "face_id": {
2841
+ "description": "Face alias",
2842
+ "name": "face_id",
3610
2843
  "required": true
3611
2844
  }
3612
2845
  },
3613
- "description": "Get the status/result of a voiceprint scoring job (from voiceprint:score without --wait)",
2846
+ "description": "Lock a face (read-only). A locked face still reads and chats normally, but it — and everything it owns (documents, threads, voiceprint) cannot be changed until unlocked.",
3614
2847
  "examples": [
3615
- "<%= config.bin %> <%= command.id %> 4e13bf03-fbc1-4ad0-92ae-16984e2f9a1d"
2848
+ "<%= config.bin %> <%= command.id %> socrates"
3616
2849
  ],
3617
2850
  "flags": {
3618
2851
  "json": {
@@ -3649,7 +2882,7 @@
3649
2882
  },
3650
2883
  "hasDynamicHelp": false,
3651
2884
  "hiddenAliases": [],
3652
- "id": "voiceprint:score-status",
2885
+ "id": "face:lock",
3653
2886
  "pluginAlias": "faces-cli",
3654
2887
  "pluginName": "faces-cli",
3655
2888
  "pluginType": "core",
@@ -3659,25 +2892,20 @@
3659
2892
  "relativePath": [
3660
2893
  "dist",
3661
2894
  "commands",
3662
- "voiceprint",
3663
- "score-status.js"
2895
+ "face",
2896
+ "lock.js"
3664
2897
  ]
3665
2898
  },
3666
- "voiceprint:score": {
2899
+ "face:neighbors": {
3667
2900
  "aliases": [],
3668
2901
  "args": {
3669
- "face": {
3670
- "description": "Face to score (alias, owner:alias, or a union like \"(alice-voiceprint | alice)\")",
3671
- "name": "face",
2902
+ "face_id": {
2903
+ "description": "Face alias",
2904
+ "name": "face_id",
3672
2905
  "required": true
3673
2906
  }
3674
2907
  },
3675
- "description": "Score how closely a face writes like a specific person. Returns VCI (closeness, 0–100) and VFI (voice captured vs a generic baseline, 0–100). Deterministic — ideal for before/after tuning.",
3676
- "examples": [
3677
- "<%= config.bin %> <%= command.id %> \"(alice-voiceprint | alice)\" --emails ./sent.jsonl --wait",
3678
- "<%= config.bin %> <%= command.id %> alice --emails-dir ./sent-emails/ --wait",
3679
- "<%= config.bin %> <%= command.id %> alice --emails ./sent.json # prints job_id; poll with voiceprint:score-status"
3680
- ],
2908
+ "description": "Find the most similar or dissimilar owned faces to a given face",
3681
2909
  "flags": {
3682
2910
  "json": {
3683
2911
  "description": "Format output as json.",
@@ -3710,54 +2938,44 @@
3710
2938
  "multiple": false,
3711
2939
  "type": "option"
3712
2940
  },
3713
- "emails": {
3714
- "description": "JSON or JSONL file of the person's real writing — {id?, text} objects or plain strings (provide at least 20)",
3715
- "name": "emails",
3716
- "hasDynamicHelp": false,
3717
- "multiple": false,
3718
- "type": "option"
3719
- },
3720
- "emails-dir": {
3721
- "description": "Directory with one sample per file (id = filename). Alternative to --emails.",
3722
- "exclusive": [
3723
- "emails"
3724
- ],
3725
- "name": "emails-dir",
2941
+ "k": {
2942
+ "description": "Number of results (1–20)",
2943
+ "name": "k",
2944
+ "default": 5,
3726
2945
  "hasDynamicHelp": false,
3727
2946
  "multiple": false,
3728
2947
  "type": "option"
3729
2948
  },
3730
- "author-corpus": {
3731
- "description": "Optional larger reference of the person's writing (JSON/JSONL/dir) used to define their voice; defaults to --emails",
3732
- "name": "author-corpus",
2949
+ "component": {
2950
+ "description": "Centroid component to rank on (beta, delta, epsilon are the principal components of a face; face is their composite)",
2951
+ "name": "component",
2952
+ "default": "face",
3733
2953
  "hasDynamicHelp": false,
3734
2954
  "multiple": false,
2955
+ "options": [
2956
+ "face",
2957
+ "beta",
2958
+ "delta",
2959
+ "epsilon"
2960
+ ],
3735
2961
  "type": "option"
3736
2962
  },
3737
- "model": {
3738
- "description": "Model used to generate comparison drafts",
3739
- "name": "model",
3740
- "default": "gpt-5.4",
2963
+ "direction": {
2964
+ "description": "nearest (most similar) or furthest (most dissimilar)",
2965
+ "name": "direction",
2966
+ "default": "nearest",
3741
2967
  "hasDynamicHelp": false,
3742
2968
  "multiple": false,
2969
+ "options": [
2970
+ "nearest",
2971
+ "furthest"
2972
+ ],
3743
2973
  "type": "option"
3744
- },
3745
- "oauth-only": {
3746
- "description": "Only run when a free (OAuth) model route is available; never fall back to billed inference",
3747
- "name": "oauth-only",
3748
- "allowNo": false,
3749
- "type": "boolean"
3750
- },
3751
- "wait": {
3752
- "description": "Block and poll until the score is ready, then print it (default: print the job_id and return)",
3753
- "name": "wait",
3754
- "allowNo": false,
3755
- "type": "boolean"
3756
2974
  }
3757
2975
  },
3758
2976
  "hasDynamicHelp": false,
3759
2977
  "hiddenAliases": [],
3760
- "id": "voiceprint:score",
2978
+ "id": "face:neighbors",
3761
2979
  "pluginAlias": "faces-cli",
3762
2980
  "pluginName": "faces-cli",
3763
2981
  "pluginType": "core",
@@ -3767,29 +2985,14 @@
3767
2985
  "relativePath": [
3768
2986
  "dist",
3769
2987
  "commands",
3770
- "voiceprint",
3771
- "score.js"
2988
+ "face",
2989
+ "neighbors.js"
3772
2990
  ]
3773
2991
  },
3774
- "voiceprint:upload": {
2992
+ "face:stats": {
3775
2993
  "aliases": [],
3776
- "args": {
3777
- "self_alias": {
3778
- "description": "Self face alias",
3779
- "name": "self_alias",
3780
- "required": true
3781
- },
3782
- "file": {
3783
- "description": "Corpus file (JSON array for thread_json, JSONL for email_jsonl)",
3784
- "name": "file",
3785
- "required": true
3786
- }
3787
- },
3788
- "description": "Write a self face's email corpus as threads (the source for a voiceprint build). Pure data write — no compilation, no per-message billing.",
3789
- "examples": [
3790
- "<%= config.bin %> <%= command.id %> alice ./corpus.json",
3791
- "<%= config.bin %> <%= command.id %> alice ./mail.jsonl --type email_jsonl --emails-per-thread 50"
3792
- ],
2994
+ "args": {},
2995
+ "description": "Compile and chat stats for all owned faces",
3793
2996
  "flags": {
3794
2997
  "json": {
3795
2998
  "description": "Format output as json.",
@@ -3821,31 +3024,11 @@
3821
3024
  "hasDynamicHelp": false,
3822
3025
  "multiple": false,
3823
3026
  "type": "option"
3824
- },
3825
- "type": {
3826
- "description": "thread_json: a JSON array of canonical email objects → one room. email_jsonl: JSONL (one email/line) → chunked into several rooms.",
3827
- "name": "type",
3828
- "default": "thread_json",
3829
- "hasDynamicHelp": false,
3830
- "multiple": false,
3831
- "options": [
3832
- "thread_json",
3833
- "email_jsonl"
3834
- ],
3835
- "type": "option"
3836
- },
3837
- "emails-per-thread": {
3838
- "description": "For --type email_jsonl: emails per room (default 50)",
3839
- "name": "emails-per-thread",
3840
- "default": 50,
3841
- "hasDynamicHelp": false,
3842
- "multiple": false,
3843
- "type": "option"
3844
3027
  }
3845
3028
  },
3846
3029
  "hasDynamicHelp": false,
3847
3030
  "hiddenAliases": [],
3848
- "id": "voiceprint:upload",
3031
+ "id": "face:stats",
3849
3032
  "pluginAlias": "faces-cli",
3850
3033
  "pluginName": "faces-cli",
3851
3034
  "pluginType": "core",
@@ -3855,23 +3038,20 @@
3855
3038
  "relativePath": [
3856
3039
  "dist",
3857
3040
  "commands",
3858
- "voiceprint",
3859
- "upload.js"
3041
+ "face",
3042
+ "stats.js"
3860
3043
  ]
3861
3044
  },
3862
- "voiceprint:versions": {
3045
+ "face:teams": {
3863
3046
  "aliases": [],
3864
3047
  "args": {
3865
- "self_alias": {
3866
- "description": "Self face alias",
3867
- "name": "self_alias",
3048
+ "alias": {
3049
+ "description": "Face alias",
3050
+ "name": "alias",
3868
3051
  "required": true
3869
3052
  }
3870
3053
  },
3871
- "description": "List a self face's voice-map versions (active + one prior). Retention is one-deep; toggle with voiceprint:revert.",
3872
- "examples": [
3873
- "<%= config.bin %> <%= command.id %> alice"
3874
- ],
3054
+ "description": "Set a face's team memberships (replaces all)",
3875
3055
  "flags": {
3876
3056
  "json": {
3877
3057
  "description": "Format output as json.",
@@ -3903,11 +3083,19 @@
3903
3083
  "hasDynamicHelp": false,
3904
3084
  "multiple": false,
3905
3085
  "type": "option"
3086
+ },
3087
+ "team": {
3088
+ "description": "Team ID (repeatable, replaces all memberships)",
3089
+ "name": "team",
3090
+ "required": true,
3091
+ "hasDynamicHelp": false,
3092
+ "multiple": true,
3093
+ "type": "option"
3906
3094
  }
3907
3095
  },
3908
3096
  "hasDynamicHelp": false,
3909
3097
  "hiddenAliases": [],
3910
- "id": "voiceprint:versions",
3098
+ "id": "face:teams",
3911
3099
  "pluginAlias": "faces-cli",
3912
3100
  "pluginName": "faces-cli",
3913
3101
  "pluginType": "core",
@@ -3917,14 +3105,23 @@
3917
3105
  "relativePath": [
3918
3106
  "dist",
3919
3107
  "commands",
3920
- "voiceprint",
3921
- "versions.js"
3108
+ "face",
3109
+ "teams.js"
3922
3110
  ]
3923
3111
  },
3924
- "face:attributes": {
3112
+ "face:unlock": {
3925
3113
  "aliases": [],
3926
- "args": {},
3927
- "description": "List all supported attribute keys",
3114
+ "args": {
3115
+ "face_id": {
3116
+ "description": "Face alias",
3117
+ "name": "face_id",
3118
+ "required": true
3119
+ }
3120
+ },
3121
+ "description": "Unlock a face (make it writable again). Thaws the face and everything it owns (documents, threads, voiceprint).",
3122
+ "examples": [
3123
+ "<%= config.bin %> <%= command.id %> socrates"
3124
+ ],
3928
3125
  "flags": {
3929
3126
  "json": {
3930
3127
  "description": "Format output as json.",
@@ -3960,7 +3157,7 @@
3960
3157
  },
3961
3158
  "hasDynamicHelp": false,
3962
3159
  "hiddenAliases": [],
3963
- "id": "face:attributes",
3160
+ "id": "face:unlock",
3964
3161
  "pluginAlias": "faces-cli",
3965
3162
  "pluginName": "faces-cli",
3966
3163
  "pluginType": "core",
@@ -3971,13 +3168,13 @@
3971
3168
  "dist",
3972
3169
  "commands",
3973
3170
  "face",
3974
- "attributes.js"
3171
+ "unlock.js"
3975
3172
  ]
3976
3173
  },
3977
- "face:create": {
3174
+ "keys:create": {
3978
3175
  "aliases": [],
3979
3176
  "args": {},
3980
- "description": "Create a new face",
3177
+ "description": "Create a new API key (JWT required). The new key is saved to ~/.faces/config.json as api_key by default; pass --no-save to skip.",
3981
3178
  "flags": {
3982
3179
  "json": {
3983
3180
  "description": "Format output as json.",
@@ -4011,76 +3208,96 @@
4011
3208
  "type": "option"
4012
3209
  },
4013
3210
  "name": {
4014
- "description": "Display name",
3211
+ "description": "Key name/label",
4015
3212
  "name": "name",
4016
3213
  "required": true,
4017
3214
  "hasDynamicHelp": false,
4018
3215
  "multiple": false,
4019
3216
  "type": "option"
4020
3217
  },
4021
- "alias": {
4022
- "description": "Unique alias slug",
4023
- "name": "alias",
4024
- "required": true,
3218
+ "expires-days": {
3219
+ "description": "Expiry in days (omit for no expiry)",
3220
+ "name": "expires-days",
4025
3221
  "hasDynamicHelp": false,
4026
3222
  "multiple": false,
4027
3223
  "type": "option"
4028
3224
  },
4029
- "description": {
4030
- "description": "Plain-text description / bio (max 1500 chars)",
4031
- "name": "description",
3225
+ "budget": {
3226
+ "description": "Spend budget in USD",
3227
+ "name": "budget",
4032
3228
  "hasDynamicHelp": false,
4033
3229
  "multiple": false,
4034
3230
  "type": "option"
4035
3231
  },
4036
- "tag": {
4037
- "description": "Tag label (repeatable, lowercase)",
4038
- "name": "tag",
3232
+ "face": {
3233
+ "description": "Allowed face alias (repeatable)",
3234
+ "name": "face",
4039
3235
  "hasDynamicHelp": false,
4040
3236
  "multiple": true,
4041
3237
  "type": "option"
4042
3238
  },
4043
- "default-model": {
4044
- "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
4045
- "name": "default-model",
4046
- "hasDynamicHelp": false,
4047
- "multiple": false,
4048
- "type": "option"
4049
- },
4050
- "formula": {
4051
- "description": "Boolean formula over owned concrete face aliases (e.g. \"a | b\", \"(a | b) - c\"). Creates a composite face.",
4052
- "name": "formula",
4053
- "hasDynamicHelp": false,
4054
- "multiple": false,
4055
- "type": "option"
4056
- },
4057
- "attr": {
4058
- "description": "Attribute KEY=VALUE (repeatable)",
4059
- "name": "attr",
3239
+ "model": {
3240
+ "description": "Allowed model name (repeatable)",
3241
+ "name": "model",
4060
3242
  "hasDynamicHelp": false,
4061
3243
  "multiple": true,
4062
3244
  "type": "option"
4063
3245
  },
4064
- "tool": {
4065
- "description": "Tool name to enable (repeatable)",
4066
- "name": "tool",
3246
+ "save": {
3247
+ "description": "Save the new key to ~/.faces/config.json as api_key (default: true; use --no-save to skip)",
3248
+ "name": "save",
3249
+ "allowNo": true,
3250
+ "type": "boolean"
3251
+ }
3252
+ },
3253
+ "hasDynamicHelp": false,
3254
+ "hiddenAliases": [],
3255
+ "id": "keys:create",
3256
+ "pluginAlias": "faces-cli",
3257
+ "pluginName": "faces-cli",
3258
+ "pluginType": "core",
3259
+ "strict": true,
3260
+ "enableJsonFlag": true,
3261
+ "isESM": true,
3262
+ "relativePath": [
3263
+ "dist",
3264
+ "commands",
3265
+ "keys",
3266
+ "create.js"
3267
+ ]
3268
+ },
3269
+ "keys:list": {
3270
+ "aliases": [],
3271
+ "args": {},
3272
+ "description": "List all API keys (JWT required)",
3273
+ "flags": {
3274
+ "json": {
3275
+ "description": "Format output as json.",
3276
+ "helpGroup": "GLOBAL",
3277
+ "name": "json",
3278
+ "allowNo": false,
3279
+ "type": "boolean"
3280
+ },
3281
+ "base-url": {
3282
+ "description": "API base URL",
3283
+ "env": "FACES_BASE_URL",
3284
+ "name": "base-url",
4067
3285
  "hasDynamicHelp": false,
4068
- "multiple": true,
3286
+ "multiple": false,
4069
3287
  "type": "option"
4070
3288
  },
4071
- "profile-addendum": {
4072
- "description": "Per-face system prompt, injected after the persona profile and before any per-request system prompt (max 100,000 chars).",
4073
- "name": "profile-addendum",
3289
+ "token": {
3290
+ "description": "JWT bearer token",
3291
+ "env": "FACES_TOKEN",
3292
+ "name": "token",
4074
3293
  "hasDynamicHelp": false,
4075
3294
  "multiple": false,
4076
3295
  "type": "option"
4077
3296
  },
4078
- "profile-addendum-file": {
4079
- "description": "Read the per-face system prompt from a file (alternative to --profile-addendum).",
4080
- "exclusive": [
4081
- "profile-addendum"
4082
- ],
4083
- "name": "profile-addendum-file",
3297
+ "api-key": {
3298
+ "description": "API key",
3299
+ "env": "FACES_API_KEY",
3300
+ "name": "api-key",
4084
3301
  "hasDynamicHelp": false,
4085
3302
  "multiple": false,
4086
3303
  "type": "option"
@@ -4088,7 +3305,7 @@
4088
3305
  },
4089
3306
  "hasDynamicHelp": false,
4090
3307
  "hiddenAliases": [],
4091
- "id": "face:create",
3308
+ "id": "keys:list",
4092
3309
  "pluginAlias": "faces-cli",
4093
3310
  "pluginName": "faces-cli",
4094
3311
  "pluginType": "core",
@@ -4098,20 +3315,20 @@
4098
3315
  "relativePath": [
4099
3316
  "dist",
4100
3317
  "commands",
4101
- "face",
4102
- "create.js"
3318
+ "keys",
3319
+ "list.js"
4103
3320
  ]
4104
3321
  },
4105
- "face:delete": {
3322
+ "keys:revoke": {
4106
3323
  "aliases": [],
4107
3324
  "args": {
4108
- "face_id": {
4109
- "description": "Face alias",
4110
- "name": "face_id",
3325
+ "key_id": {
3326
+ "description": "Key ID",
3327
+ "name": "key_id",
4111
3328
  "required": true
4112
3329
  }
4113
3330
  },
4114
- "description": "Delete a face permanently",
3331
+ "description": "Revoke an API key (JWT required)",
4115
3332
  "flags": {
4116
3333
  "json": {
4117
3334
  "description": "Format output as json.",
@@ -4153,7 +3370,7 @@
4153
3370
  },
4154
3371
  "hasDynamicHelp": false,
4155
3372
  "hiddenAliases": [],
4156
- "id": "face:delete",
3373
+ "id": "keys:revoke",
4157
3374
  "pluginAlias": "faces-cli",
4158
3375
  "pluginName": "faces-cli",
4159
3376
  "pluginType": "core",
@@ -4163,14 +3380,20 @@
4163
3380
  "relativePath": [
4164
3381
  "dist",
4165
3382
  "commands",
4166
- "face",
4167
- "delete.js"
3383
+ "keys",
3384
+ "revoke.js"
4168
3385
  ]
4169
3386
  },
4170
- "face:diff": {
3387
+ "keys:update": {
4171
3388
  "aliases": [],
4172
- "args": {},
4173
- "description": "Compare owned faces pairwise across all centroid components",
3389
+ "args": {
3390
+ "key_id": {
3391
+ "description": "Key ID",
3392
+ "name": "key_id",
3393
+ "required": true
3394
+ }
3395
+ },
3396
+ "description": "Update API key metadata (JWT required)",
4174
3397
  "flags": {
4175
3398
  "json": {
4176
3399
  "description": "Format output as json.",
@@ -4203,18 +3426,30 @@
4203
3426
  "multiple": false,
4204
3427
  "type": "option"
4205
3428
  },
4206
- "face": {
4207
- "description": "Face alias to include (repeatable, min 2)",
4208
- "name": "face",
4209
- "required": true,
3429
+ "name": {
3430
+ "description": "New key name",
3431
+ "name": "name",
4210
3432
  "hasDynamicHelp": false,
4211
- "multiple": true,
3433
+ "multiple": false,
4212
3434
  "type": "option"
3435
+ },
3436
+ "budget": {
3437
+ "description": "New spend budget in USD",
3438
+ "name": "budget",
3439
+ "hasDynamicHelp": false,
3440
+ "multiple": false,
3441
+ "type": "option"
3442
+ },
3443
+ "reset-spent": {
3444
+ "description": "Reset spent amount to zero",
3445
+ "name": "reset-spent",
3446
+ "allowNo": false,
3447
+ "type": "boolean"
4213
3448
  }
4214
3449
  },
4215
3450
  "hasDynamicHelp": false,
4216
3451
  "hiddenAliases": [],
4217
- "id": "face:diff",
3452
+ "id": "keys:update",
4218
3453
  "pluginAlias": "faces-cli",
4219
3454
  "pluginName": "faces-cli",
4220
3455
  "pluginType": "core",
@@ -4224,20 +3459,20 @@
4224
3459
  "relativePath": [
4225
3460
  "dist",
4226
3461
  "commands",
4227
- "face",
4228
- "diff.js"
3462
+ "keys",
3463
+ "update.js"
4229
3464
  ]
4230
3465
  },
4231
- "face:edit": {
3466
+ "team:add": {
4232
3467
  "aliases": [],
4233
3468
  "args": {
4234
- "face_id": {
4235
- "description": "Face alias",
4236
- "name": "face_id",
3469
+ "team_id": {
3470
+ "description": "Team ID",
3471
+ "name": "team_id",
4237
3472
  "required": true
4238
3473
  }
4239
3474
  },
4240
- "description": "Edit a face's metadata",
3475
+ "description": "Add face(s) to a team",
4241
3476
  "flags": {
4242
3477
  "json": {
4243
3478
  "description": "Format output as json.",
@@ -4270,86 +3505,107 @@
4270
3505
  "multiple": false,
4271
3506
  "type": "option"
4272
3507
  },
4273
- "name": {
4274
- "description": "New display name",
4275
- "name": "name",
3508
+ "face": {
3509
+ "description": "Face alias to add (repeatable)",
3510
+ "name": "face",
3511
+ "required": true,
4276
3512
  "hasDynamicHelp": false,
4277
- "multiple": false,
3513
+ "multiple": true,
4278
3514
  "type": "option"
3515
+ }
3516
+ },
3517
+ "hasDynamicHelp": false,
3518
+ "hiddenAliases": [],
3519
+ "id": "team:add",
3520
+ "pluginAlias": "faces-cli",
3521
+ "pluginName": "faces-cli",
3522
+ "pluginType": "core",
3523
+ "strict": true,
3524
+ "enableJsonFlag": true,
3525
+ "isESM": true,
3526
+ "relativePath": [
3527
+ "dist",
3528
+ "commands",
3529
+ "team",
3530
+ "add.js"
3531
+ ]
3532
+ },
3533
+ "team:create": {
3534
+ "aliases": [],
3535
+ "args": {},
3536
+ "description": "Create a new team",
3537
+ "flags": {
3538
+ "json": {
3539
+ "description": "Format output as json.",
3540
+ "helpGroup": "GLOBAL",
3541
+ "name": "json",
3542
+ "allowNo": false,
3543
+ "type": "boolean"
4279
3544
  },
4280
- "description": {
4281
- "description": "Plain-text description / bio (max 1500 chars)",
4282
- "name": "description",
3545
+ "base-url": {
3546
+ "description": "API base URL",
3547
+ "env": "FACES_BASE_URL",
3548
+ "name": "base-url",
4283
3549
  "hasDynamicHelp": false,
4284
3550
  "multiple": false,
4285
3551
  "type": "option"
4286
3552
  },
4287
- "tag": {
4288
- "description": "Replace all tags (repeatable, lowercase)",
4289
- "name": "tag",
4290
- "hasDynamicHelp": false,
4291
- "multiple": true,
4292
- "type": "option"
4293
- },
4294
- "default-model": {
4295
- "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
4296
- "name": "default-model",
3553
+ "token": {
3554
+ "description": "JWT bearer token",
3555
+ "env": "FACES_TOKEN",
3556
+ "name": "token",
4297
3557
  "hasDynamicHelp": false,
4298
3558
  "multiple": false,
4299
3559
  "type": "option"
4300
3560
  },
4301
- "formula": {
4302
- "description": "New boolean formula (synthetic faces only)",
4303
- "name": "formula",
3561
+ "api-key": {
3562
+ "description": "API key",
3563
+ "env": "FACES_API_KEY",
3564
+ "name": "api-key",
4304
3565
  "hasDynamicHelp": false,
4305
3566
  "multiple": false,
4306
3567
  "type": "option"
4307
3568
  },
4308
- "attr": {
4309
- "description": "Update attribute KEY=VALUE (repeatable)",
4310
- "name": "attr",
3569
+ "name": {
3570
+ "description": "Team name",
3571
+ "name": "name",
3572
+ "required": true,
4311
3573
  "hasDynamicHelp": false,
4312
- "multiple": true,
3574
+ "multiple": false,
4313
3575
  "type": "option"
4314
3576
  },
4315
- "tool": {
4316
- "description": "Tool names to set (replaces list, repeatable)",
4317
- "name": "tool",
3577
+ "description": {
3578
+ "description": "Plain-text team description (max 1500 chars)",
3579
+ "name": "description",
4318
3580
  "hasDynamicHelp": false,
4319
- "multiple": true,
3581
+ "multiple": false,
4320
3582
  "type": "option"
4321
3583
  },
4322
- "profile-addendum": {
4323
- "description": "Replace the per-face system prompt (max 100,000 chars).",
4324
- "name": "profile-addendum",
3584
+ "protocol": {
3585
+ "description": "Protocol content (mermaid diagram or markdown, max 1000 words)",
3586
+ "name": "protocol",
4325
3587
  "hasDynamicHelp": false,
4326
3588
  "multiple": false,
4327
3589
  "type": "option"
4328
3590
  },
4329
- "profile-addendum-file": {
4330
- "description": "Replace the per-face system prompt from a file.",
4331
- "exclusive": [
4332
- "profile-addendum"
4333
- ],
4334
- "name": "profile-addendum-file",
3591
+ "protocol-file": {
3592
+ "description": "Read protocol from file",
3593
+ "name": "protocol-file",
4335
3594
  "hasDynamicHelp": false,
4336
3595
  "multiple": false,
4337
3596
  "type": "option"
4338
3597
  },
4339
- "clear-profile-addendum": {
4340
- "description": "Remove the per-face system prompt.",
4341
- "exclusive": [
4342
- "profile-addendum",
4343
- "profile-addendum-file"
4344
- ],
4345
- "name": "clear-profile-addendum",
4346
- "allowNo": false,
4347
- "type": "boolean"
3598
+ "tag": {
3599
+ "description": "Tag label (repeatable, lowercase)",
3600
+ "name": "tag",
3601
+ "hasDynamicHelp": false,
3602
+ "multiple": true,
3603
+ "type": "option"
4348
3604
  }
4349
3605
  },
4350
3606
  "hasDynamicHelp": false,
4351
3607
  "hiddenAliases": [],
4352
- "id": "face:edit",
3608
+ "id": "team:create",
4353
3609
  "pluginAlias": "faces-cli",
4354
3610
  "pluginName": "faces-cli",
4355
3611
  "pluginType": "core",
@@ -4359,20 +3615,20 @@
4359
3615
  "relativePath": [
4360
3616
  "dist",
4361
3617
  "commands",
4362
- "face",
4363
- "edit.js"
3618
+ "team",
3619
+ "create.js"
4364
3620
  ]
4365
3621
  },
4366
- "face:get": {
3622
+ "team:delete": {
4367
3623
  "aliases": [],
4368
3624
  "args": {
4369
- "face_id": {
4370
- "description": "Face alias",
4371
- "name": "face_id",
3625
+ "team_id": {
3626
+ "description": "Team ID",
3627
+ "name": "team_id",
4372
3628
  "required": true
4373
3629
  }
4374
3630
  },
4375
- "description": "Get details for a face by alias",
3631
+ "description": "Delete a team",
4376
3632
  "flags": {
4377
3633
  "json": {
4378
3634
  "description": "Format output as json.",
@@ -4405,23 +3661,16 @@
4405
3661
  "multiple": false,
4406
3662
  "type": "option"
4407
3663
  },
4408
- "include": {
4409
- "description": "Include extra fields: tags, teams (comma-separated)",
4410
- "name": "include",
4411
- "hasDynamicHelp": false,
4412
- "multiple": false,
4413
- "type": "option"
4414
- },
4415
- "full": {
4416
- "description": "Print the full profile_addendum instead of a truncated preview",
4417
- "name": "full",
3664
+ "yes": {
3665
+ "description": "Skip confirmation",
3666
+ "name": "yes",
4418
3667
  "allowNo": false,
4419
3668
  "type": "boolean"
4420
3669
  }
4421
3670
  },
4422
3671
  "hasDynamicHelp": false,
4423
3672
  "hiddenAliases": [],
4424
- "id": "face:get",
3673
+ "id": "team:delete",
4425
3674
  "pluginAlias": "faces-cli",
4426
3675
  "pluginName": "faces-cli",
4427
3676
  "pluginType": "core",
@@ -4431,14 +3680,20 @@
4431
3680
  "relativePath": [
4432
3681
  "dist",
4433
3682
  "commands",
4434
- "face",
4435
- "get.js"
3683
+ "team",
3684
+ "delete.js"
4436
3685
  ]
4437
3686
  },
4438
- "face:list": {
3687
+ "team:edit": {
4439
3688
  "aliases": [],
4440
- "args": {},
4441
- "description": "List faces. By default lists owned faces; use --public to include published faces from other accounts.",
3689
+ "args": {
3690
+ "team_id": {
3691
+ "description": "Team ID",
3692
+ "name": "team_id",
3693
+ "required": true
3694
+ }
3695
+ },
3696
+ "description": "Edit a team",
4442
3697
  "flags": {
4443
3698
  "json": {
4444
3699
  "description": "Format output as json.",
@@ -4471,57 +3726,38 @@
4471
3726
  "multiple": false,
4472
3727
  "type": "option"
4473
3728
  },
4474
- "tag": {
4475
- "description": "Filter by tag (repeatable, AND logic)",
4476
- "name": "tag",
4477
- "hasDynamicHelp": false,
4478
- "multiple": true,
4479
- "type": "option"
4480
- },
4481
- "team": {
4482
- "description": "Filter by team ID (repeatable, OR logic)",
4483
- "name": "team",
3729
+ "name": {
3730
+ "description": "New team name",
3731
+ "name": "name",
4484
3732
  "hasDynamicHelp": false,
4485
- "multiple": true,
3733
+ "multiple": false,
4486
3734
  "type": "option"
4487
3735
  },
4488
- "include": {
4489
- "description": "Include extra fields: tags, teams (comma-separated)",
4490
- "name": "include",
3736
+ "description": {
3737
+ "description": "New description (max 1500 chars)",
3738
+ "name": "description",
4491
3739
  "hasDynamicHelp": false,
4492
3740
  "multiple": false,
4493
3741
  "type": "option"
4494
3742
  },
4495
- "public": {
4496
- "description": "Include published faces from other accounts",
4497
- "name": "public",
4498
- "allowNo": false,
4499
- "type": "boolean"
4500
- },
4501
- "system": {
4502
- "description": "Show only the curated system faces (published faces owned by 'head')",
4503
- "name": "system",
4504
- "allowNo": false,
4505
- "type": "boolean"
4506
- },
4507
- "from-users": {
4508
- "description": "Only published faces from these owners (repeatable/comma-separated)",
4509
- "name": "from-users",
3743
+ "protocol": {
3744
+ "description": "New protocol content",
3745
+ "name": "protocol",
4510
3746
  "hasDynamicHelp": false,
4511
- "multiple": true,
3747
+ "multiple": false,
4512
3748
  "type": "option"
4513
3749
  },
4514
- "not-from-users": {
4515
- "description": "Exclude published faces from these owners (repeatable/comma-separated)",
4516
- "name": "not-from-users",
3750
+ "protocol-file": {
3751
+ "description": "Read protocol from file",
3752
+ "name": "protocol-file",
4517
3753
  "hasDynamicHelp": false,
4518
- "multiple": true,
3754
+ "multiple": false,
4519
3755
  "type": "option"
4520
3756
  }
4521
3757
  },
4522
3758
  "hasDynamicHelp": false,
4523
3759
  "hiddenAliases": [],
4524
- "id": "face:list",
3760
+ "id": "team:edit",
4525
3761
  "pluginAlias": "faces-cli",
4526
3762
  "pluginName": "faces-cli",
4527
3763
  "pluginType": "core",
@@ -4531,20 +3767,20 @@
4531
3767
  "relativePath": [
4532
3768
  "dist",
4533
3769
  "commands",
4534
- "face",
4535
- "list.js"
3770
+ "team",
3771
+ "edit.js"
4536
3772
  ]
4537
3773
  },
4538
- "face:neighbors": {
3774
+ "team:get": {
4539
3775
  "aliases": [],
4540
3776
  "args": {
4541
- "face_id": {
4542
- "description": "Face alias",
4543
- "name": "face_id",
3777
+ "team_id": {
3778
+ "description": "Team ID",
3779
+ "name": "team_id",
4544
3780
  "required": true
4545
3781
  }
4546
3782
  },
4547
- "description": "Find the most similar or dissimilar owned faces to a given face",
3783
+ "description": "Get a team by ID",
4548
3784
  "flags": {
4549
3785
  "json": {
4550
3786
  "description": "Format output as json.",
@@ -4576,45 +3812,64 @@
4576
3812
  "hasDynamicHelp": false,
4577
3813
  "multiple": false,
4578
3814
  "type": "option"
3815
+ }
3816
+ },
3817
+ "hasDynamicHelp": false,
3818
+ "hiddenAliases": [],
3819
+ "id": "team:get",
3820
+ "pluginAlias": "faces-cli",
3821
+ "pluginName": "faces-cli",
3822
+ "pluginType": "core",
3823
+ "strict": true,
3824
+ "enableJsonFlag": true,
3825
+ "isESM": true,
3826
+ "relativePath": [
3827
+ "dist",
3828
+ "commands",
3829
+ "team",
3830
+ "get.js"
3831
+ ]
3832
+ },
3833
+ "team:list": {
3834
+ "aliases": [],
3835
+ "args": {},
3836
+ "description": "List your teams",
3837
+ "flags": {
3838
+ "json": {
3839
+ "description": "Format output as json.",
3840
+ "helpGroup": "GLOBAL",
3841
+ "name": "json",
3842
+ "allowNo": false,
3843
+ "type": "boolean"
4579
3844
  },
4580
- "k": {
4581
- "description": "Number of results (1–20)",
4582
- "name": "k",
4583
- "default": 5,
3845
+ "base-url": {
3846
+ "description": "API base URL",
3847
+ "env": "FACES_BASE_URL",
3848
+ "name": "base-url",
4584
3849
  "hasDynamicHelp": false,
4585
3850
  "multiple": false,
4586
3851
  "type": "option"
4587
3852
  },
4588
- "component": {
4589
- "description": "Centroid component to rank on (beta, delta, epsilon are the principal components of a face; face is their composite)",
4590
- "name": "component",
4591
- "default": "face",
3853
+ "token": {
3854
+ "description": "JWT bearer token",
3855
+ "env": "FACES_TOKEN",
3856
+ "name": "token",
4592
3857
  "hasDynamicHelp": false,
4593
3858
  "multiple": false,
4594
- "options": [
4595
- "face",
4596
- "beta",
4597
- "delta",
4598
- "epsilon"
4599
- ],
4600
3859
  "type": "option"
4601
3860
  },
4602
- "direction": {
4603
- "description": "nearest (most similar) or furthest (most dissimilar)",
4604
- "name": "direction",
4605
- "default": "nearest",
3861
+ "api-key": {
3862
+ "description": "API key",
3863
+ "env": "FACES_API_KEY",
3864
+ "name": "api-key",
4606
3865
  "hasDynamicHelp": false,
4607
3866
  "multiple": false,
4608
- "options": [
4609
- "nearest",
4610
- "furthest"
4611
- ],
4612
3867
  "type": "option"
4613
3868
  }
4614
3869
  },
4615
3870
  "hasDynamicHelp": false,
4616
3871
  "hiddenAliases": [],
4617
- "id": "face:neighbors",
3872
+ "id": "team:list",
4618
3873
  "pluginAlias": "faces-cli",
4619
3874
  "pluginName": "faces-cli",
4620
3875
  "pluginType": "core",
@@ -4624,14 +3879,20 @@
4624
3879
  "relativePath": [
4625
3880
  "dist",
4626
3881
  "commands",
4627
- "face",
4628
- "neighbors.js"
3882
+ "team",
3883
+ "list.js"
4629
3884
  ]
4630
3885
  },
4631
- "face:stats": {
3886
+ "team:members": {
4632
3887
  "aliases": [],
4633
- "args": {},
4634
- "description": "Compile and chat stats for all owned faces",
3888
+ "args": {
3889
+ "team_id": {
3890
+ "description": "Team ID",
3891
+ "name": "team_id",
3892
+ "required": true
3893
+ }
3894
+ },
3895
+ "description": "List members of a team",
4635
3896
  "flags": {
4636
3897
  "json": {
4637
3898
  "description": "Format output as json.",
@@ -4667,7 +3928,7 @@
4667
3928
  },
4668
3929
  "hasDynamicHelp": false,
4669
3930
  "hiddenAliases": [],
4670
- "id": "face:stats",
3931
+ "id": "team:members",
4671
3932
  "pluginAlias": "faces-cli",
4672
3933
  "pluginName": "faces-cli",
4673
3934
  "pluginType": "core",
@@ -4677,20 +3938,25 @@
4677
3938
  "relativePath": [
4678
3939
  "dist",
4679
3940
  "commands",
4680
- "face",
4681
- "stats.js"
3941
+ "team",
3942
+ "members.js"
4682
3943
  ]
4683
3944
  },
4684
- "face:teams": {
3945
+ "team:remove": {
4685
3946
  "aliases": [],
4686
3947
  "args": {
3948
+ "team_id": {
3949
+ "description": "Team ID",
3950
+ "name": "team_id",
3951
+ "required": true
3952
+ },
4687
3953
  "alias": {
4688
- "description": "Face alias",
3954
+ "description": "Face alias to remove",
4689
3955
  "name": "alias",
4690
3956
  "required": true
4691
3957
  }
4692
3958
  },
4693
- "description": "Set a face's team memberships (replaces all)",
3959
+ "description": "Remove a face from a team",
4694
3960
  "flags": {
4695
3961
  "json": {
4696
3962
  "description": "Format output as json.",
@@ -4722,19 +3988,11 @@
4722
3988
  "hasDynamicHelp": false,
4723
3989
  "multiple": false,
4724
3990
  "type": "option"
4725
- },
4726
- "team": {
4727
- "description": "Team ID (repeatable, replaces all memberships)",
4728
- "name": "team",
4729
- "required": true,
4730
- "hasDynamicHelp": false,
4731
- "multiple": true,
4732
- "type": "option"
4733
3991
  }
4734
3992
  },
4735
3993
  "hasDynamicHelp": false,
4736
3994
  "hiddenAliases": [],
4737
- "id": "face:teams",
3995
+ "id": "team:remove",
4738
3996
  "pluginAlias": "faces-cli",
4739
3997
  "pluginName": "faces-cli",
4740
3998
  "pluginType": "core",
@@ -4744,20 +4002,14 @@
4744
4002
  "relativePath": [
4745
4003
  "dist",
4746
4004
  "commands",
4747
- "face",
4748
- "teams.js"
4005
+ "team",
4006
+ "remove.js"
4749
4007
  ]
4750
4008
  },
4751
- "face:upload": {
4009
+ "billing:subscription:activate": {
4752
4010
  "aliases": [],
4753
- "args": {
4754
- "face_id": {
4755
- "description": "Face alias",
4756
- "name": "face_id",
4757
- "required": true
4758
- }
4759
- },
4760
- "description": "Upload a file (text/PDF/audio/video) to a face",
4011
+ "args": {},
4012
+ "description": "Activate or reactivate a subscription plan",
4761
4013
  "flags": {
4762
4014
  "json": {
4763
4015
  "description": "Format output as json.",
@@ -4790,49 +4042,21 @@
4790
4042
  "multiple": false,
4791
4043
  "type": "option"
4792
4044
  },
4793
- "file": {
4794
- "description": "File to upload",
4795
- "name": "file",
4796
- "required": true,
4797
- "hasDynamicHelp": false,
4798
- "multiple": false,
4799
- "type": "option"
4800
- },
4801
- "kind": {
4802
- "description": "Upload kind: document or thread",
4803
- "name": "kind",
4804
- "default": "document",
4805
- "hasDynamicHelp": false,
4806
- "multiple": false,
4807
- "options": [
4808
- "document",
4809
- "thread"
4810
- ],
4811
- "type": "option"
4812
- },
4813
- "perspective": {
4814
- "description": "Perspective (document only)",
4815
- "name": "perspective",
4816
- "default": "third-person",
4045
+ "plan": {
4046
+ "description": "Plan to activate",
4047
+ "name": "plan",
4048
+ "default": "connect",
4817
4049
  "hasDynamicHelp": false,
4818
4050
  "multiple": false,
4819
4051
  "options": [
4820
- "first-person",
4821
- "third-person"
4052
+ "connect"
4822
4053
  ],
4823
4054
  "type": "option"
4824
- },
4825
- "face-speaker": {
4826
- "description": "Speaker name to map to the face (thread only). If omitted, first speaker is used.",
4827
- "name": "face-speaker",
4828
- "hasDynamicHelp": false,
4829
- "multiple": false,
4830
- "type": "option"
4831
4055
  }
4832
4056
  },
4833
4057
  "hasDynamicHelp": false,
4834
4058
  "hiddenAliases": [],
4835
- "id": "face:upload",
4059
+ "id": "billing:subscription:activate",
4836
4060
  "pluginAlias": "faces-cli",
4837
4061
  "pluginName": "faces-cli",
4838
4062
  "pluginType": "core",
@@ -4842,14 +4066,15 @@
4842
4066
  "relativePath": [
4843
4067
  "dist",
4844
4068
  "commands",
4845
- "face",
4846
- "upload.js"
4069
+ "billing",
4070
+ "subscription",
4071
+ "activate.js"
4847
4072
  ]
4848
4073
  },
4849
- "billing:subscription:activate": {
4074
+ "billing:subscription:cancel": {
4850
4075
  "aliases": [],
4851
4076
  "args": {},
4852
- "description": "Activate or reactivate a subscription plan",
4077
+ "description": "Cancel your subscription (keeps access until period end)",
4853
4078
  "flags": {
4854
4079
  "json": {
4855
4080
  "description": "Format output as json.",
@@ -4882,21 +4107,16 @@
4882
4107
  "multiple": false,
4883
4108
  "type": "option"
4884
4109
  },
4885
- "plan": {
4886
- "description": "Plan to activate",
4887
- "name": "plan",
4888
- "default": "connect",
4889
- "hasDynamicHelp": false,
4890
- "multiple": false,
4891
- "options": [
4892
- "connect"
4893
- ],
4894
- "type": "option"
4110
+ "yes": {
4111
+ "description": "Skip confirmation",
4112
+ "name": "yes",
4113
+ "allowNo": false,
4114
+ "type": "boolean"
4895
4115
  }
4896
4116
  },
4897
4117
  "hasDynamicHelp": false,
4898
4118
  "hiddenAliases": [],
4899
- "id": "billing:subscription:activate",
4119
+ "id": "billing:subscription:cancel",
4900
4120
  "pluginAlias": "faces-cli",
4901
4121
  "pluginName": "faces-cli",
4902
4122
  "pluginType": "core",
@@ -4908,13 +4128,13 @@
4908
4128
  "commands",
4909
4129
  "billing",
4910
4130
  "subscription",
4911
- "activate.js"
4131
+ "cancel.js"
4912
4132
  ]
4913
4133
  },
4914
- "billing:subscription:cancel": {
4134
+ "billing:subscription": {
4915
4135
  "aliases": [],
4916
4136
  "args": {},
4917
- "description": "Cancel your subscription (keeps access until period end)",
4137
+ "description": "Show current plan, face count, and renewal date",
4918
4138
  "flags": {
4919
4139
  "json": {
4920
4140
  "description": "Format output as json.",
@@ -4946,17 +4166,11 @@
4946
4166
  "hasDynamicHelp": false,
4947
4167
  "multiple": false,
4948
4168
  "type": "option"
4949
- },
4950
- "yes": {
4951
- "description": "Skip confirmation",
4952
- "name": "yes",
4953
- "allowNo": false,
4954
- "type": "boolean"
4955
4169
  }
4956
4170
  },
4957
4171
  "hasDynamicHelp": false,
4958
4172
  "hiddenAliases": [],
4959
- "id": "billing:subscription:cancel",
4173
+ "id": "billing:subscription",
4960
4174
  "pluginAlias": "faces-cli",
4961
4175
  "pluginName": "faces-cli",
4962
4176
  "pluginType": "core",
@@ -4968,7 +4182,7 @@
4968
4182
  "commands",
4969
4183
  "billing",
4970
4184
  "subscription",
4971
- "cancel.js"
4185
+ "index.js"
4972
4186
  ]
4973
4187
  },
4974
4188
  "compile:doc:create": {
@@ -6311,16 +5525,16 @@
6311
5525
  "sync.js"
6312
5526
  ]
6313
5527
  },
6314
- "team:tag:add": {
5528
+ "face:tag:add": {
6315
5529
  "aliases": [],
6316
5530
  "args": {
6317
- "team_id": {
6318
- "description": "Team ID",
6319
- "name": "team_id",
5531
+ "alias": {
5532
+ "description": "Face alias",
5533
+ "name": "alias",
6320
5534
  "required": true
6321
5535
  }
6322
5536
  },
6323
- "description": "Add tags to a team (appends, idempotent)",
5537
+ "description": "Add tags to a face (appends, idempotent)",
6324
5538
  "flags": {
6325
5539
  "json": {
6326
5540
  "description": "Format output as json.",
@@ -6364,7 +5578,7 @@
6364
5578
  },
6365
5579
  "hasDynamicHelp": false,
6366
5580
  "hiddenAliases": [],
6367
- "id": "team:tag:add",
5581
+ "id": "face:tag:add",
6368
5582
  "pluginAlias": "faces-cli",
6369
5583
  "pluginName": "faces-cli",
6370
5584
  "pluginType": "core",
@@ -6374,21 +5588,15 @@
6374
5588
  "relativePath": [
6375
5589
  "dist",
6376
5590
  "commands",
6377
- "team",
5591
+ "face",
6378
5592
  "tag",
6379
5593
  "add.js"
6380
5594
  ]
6381
5595
  },
6382
- "team:tag:list": {
5596
+ "face:tag:all": {
6383
5597
  "aliases": [],
6384
- "args": {
6385
- "team_id": {
6386
- "description": "Team ID",
6387
- "name": "team_id",
6388
- "required": true
6389
- }
6390
- },
6391
- "description": "List tags on a team",
5598
+ "args": {},
5599
+ "description": "List all tags across all your faces",
6392
5600
  "flags": {
6393
5601
  "json": {
6394
5602
  "description": "Format output as json.",
@@ -6424,7 +5632,7 @@
6424
5632
  },
6425
5633
  "hasDynamicHelp": false,
6426
5634
  "hiddenAliases": [],
6427
- "id": "team:tag:list",
5635
+ "id": "face:tag:all",
6428
5636
  "pluginAlias": "faces-cli",
6429
5637
  "pluginName": "faces-cli",
6430
5638
  "pluginType": "core",
@@ -6434,26 +5642,21 @@
6434
5642
  "relativePath": [
6435
5643
  "dist",
6436
5644
  "commands",
6437
- "team",
5645
+ "face",
6438
5646
  "tag",
6439
- "list.js"
5647
+ "all.js"
6440
5648
  ]
6441
5649
  },
6442
- "team:tag:remove": {
5650
+ "face:tag:list": {
6443
5651
  "aliases": [],
6444
5652
  "args": {
6445
- "team_id": {
6446
- "description": "Team ID",
6447
- "name": "team_id",
6448
- "required": true
6449
- },
6450
- "tag": {
6451
- "description": "Tag to remove",
6452
- "name": "tag",
5653
+ "alias": {
5654
+ "description": "Face alias",
5655
+ "name": "alias",
6453
5656
  "required": true
6454
5657
  }
6455
5658
  },
6456
- "description": "Remove a tag from a team",
5659
+ "description": "List tags on a face",
6457
5660
  "flags": {
6458
5661
  "json": {
6459
5662
  "description": "Format output as json.",
@@ -6489,7 +5692,7 @@
6489
5692
  },
6490
5693
  "hasDynamicHelp": false,
6491
5694
  "hiddenAliases": [],
6492
- "id": "team:tag:remove",
5695
+ "id": "face:tag:list",
6493
5696
  "pluginAlias": "faces-cli",
6494
5697
  "pluginName": "faces-cli",
6495
5698
  "pluginType": "core",
@@ -6499,21 +5702,26 @@
6499
5702
  "relativePath": [
6500
5703
  "dist",
6501
5704
  "commands",
6502
- "team",
5705
+ "face",
6503
5706
  "tag",
6504
- "remove.js"
5707
+ "list.js"
6505
5708
  ]
6506
5709
  },
6507
- "team:tag:set": {
5710
+ "face:tag:remove": {
6508
5711
  "aliases": [],
6509
5712
  "args": {
6510
- "team_id": {
6511
- "description": "Team ID",
6512
- "name": "team_id",
5713
+ "alias": {
5714
+ "description": "Face alias",
5715
+ "name": "alias",
5716
+ "required": true
5717
+ },
5718
+ "tag": {
5719
+ "description": "Tag to remove",
5720
+ "name": "tag",
6513
5721
  "required": true
6514
5722
  }
6515
5723
  },
6516
- "description": "Replace all tags on a team",
5724
+ "description": "Remove a tag from a face",
6517
5725
  "flags": {
6518
5726
  "json": {
6519
5727
  "description": "Format output as json.",
@@ -6545,19 +5753,11 @@
6545
5753
  "hasDynamicHelp": false,
6546
5754
  "multiple": false,
6547
5755
  "type": "option"
6548
- },
6549
- "tag": {
6550
- "description": "Tag to set (repeatable, replaces all)",
6551
- "name": "tag",
6552
- "required": true,
6553
- "hasDynamicHelp": false,
6554
- "multiple": true,
6555
- "type": "option"
6556
5756
  }
6557
5757
  },
6558
5758
  "hasDynamicHelp": false,
6559
5759
  "hiddenAliases": [],
6560
- "id": "team:tag:set",
5760
+ "id": "face:tag:remove",
6561
5761
  "pluginAlias": "faces-cli",
6562
5762
  "pluginName": "faces-cli",
6563
5763
  "pluginType": "core",
@@ -6567,12 +5767,12 @@
6567
5767
  "relativePath": [
6568
5768
  "dist",
6569
5769
  "commands",
6570
- "team",
5770
+ "face",
6571
5771
  "tag",
6572
- "set.js"
5772
+ "remove.js"
6573
5773
  ]
6574
5774
  },
6575
- "face:tag:add": {
5775
+ "face:tag:set": {
6576
5776
  "aliases": [],
6577
5777
  "args": {
6578
5778
  "alias": {
@@ -6581,7 +5781,7 @@
6581
5781
  "required": true
6582
5782
  }
6583
5783
  },
6584
- "description": "Add tags to a face (appends, idempotent)",
5784
+ "description": "Replace all tags on a face",
6585
5785
  "flags": {
6586
5786
  "json": {
6587
5787
  "description": "Format output as json.",
@@ -6615,7 +5815,7 @@
6615
5815
  "type": "option"
6616
5816
  },
6617
5817
  "tag": {
6618
- "description": "Tag to add (repeatable)",
5818
+ "description": "Tag to set (repeatable, replaces all)",
6619
5819
  "name": "tag",
6620
5820
  "required": true,
6621
5821
  "hasDynamicHelp": false,
@@ -6625,7 +5825,7 @@
6625
5825
  },
6626
5826
  "hasDynamicHelp": false,
6627
5827
  "hiddenAliases": [],
6628
- "id": "face:tag:add",
5828
+ "id": "face:tag:set",
6629
5829
  "pluginAlias": "faces-cli",
6630
5830
  "pluginName": "faces-cli",
6631
5831
  "pluginType": "core",
@@ -6637,13 +5837,19 @@
6637
5837
  "commands",
6638
5838
  "face",
6639
5839
  "tag",
6640
- "add.js"
5840
+ "set.js"
6641
5841
  ]
6642
5842
  },
6643
- "face:tag:all": {
5843
+ "team:tag:add": {
6644
5844
  "aliases": [],
6645
- "args": {},
6646
- "description": "List all tags across all your faces",
5845
+ "args": {
5846
+ "team_id": {
5847
+ "description": "Team ID",
5848
+ "name": "team_id",
5849
+ "required": true
5850
+ }
5851
+ },
5852
+ "description": "Add tags to a team (appends, idempotent)",
6647
5853
  "flags": {
6648
5854
  "json": {
6649
5855
  "description": "Format output as json.",
@@ -6675,11 +5881,19 @@
6675
5881
  "hasDynamicHelp": false,
6676
5882
  "multiple": false,
6677
5883
  "type": "option"
5884
+ },
5885
+ "tag": {
5886
+ "description": "Tag to add (repeatable)",
5887
+ "name": "tag",
5888
+ "required": true,
5889
+ "hasDynamicHelp": false,
5890
+ "multiple": true,
5891
+ "type": "option"
6678
5892
  }
6679
5893
  },
6680
5894
  "hasDynamicHelp": false,
6681
5895
  "hiddenAliases": [],
6682
- "id": "face:tag:all",
5896
+ "id": "team:tag:add",
6683
5897
  "pluginAlias": "faces-cli",
6684
5898
  "pluginName": "faces-cli",
6685
5899
  "pluginType": "core",
@@ -6689,21 +5903,21 @@
6689
5903
  "relativePath": [
6690
5904
  "dist",
6691
5905
  "commands",
6692
- "face",
5906
+ "team",
6693
5907
  "tag",
6694
- "all.js"
5908
+ "add.js"
6695
5909
  ]
6696
5910
  },
6697
- "face:tag:list": {
5911
+ "team:tag:list": {
6698
5912
  "aliases": [],
6699
5913
  "args": {
6700
- "alias": {
6701
- "description": "Face alias",
6702
- "name": "alias",
5914
+ "team_id": {
5915
+ "description": "Team ID",
5916
+ "name": "team_id",
6703
5917
  "required": true
6704
5918
  }
6705
5919
  },
6706
- "description": "List tags on a face",
5920
+ "description": "List tags on a team",
6707
5921
  "flags": {
6708
5922
  "json": {
6709
5923
  "description": "Format output as json.",
@@ -6739,7 +5953,7 @@
6739
5953
  },
6740
5954
  "hasDynamicHelp": false,
6741
5955
  "hiddenAliases": [],
6742
- "id": "face:tag:list",
5956
+ "id": "team:tag:list",
6743
5957
  "pluginAlias": "faces-cli",
6744
5958
  "pluginName": "faces-cli",
6745
5959
  "pluginType": "core",
@@ -6749,17 +5963,17 @@
6749
5963
  "relativePath": [
6750
5964
  "dist",
6751
5965
  "commands",
6752
- "face",
5966
+ "team",
6753
5967
  "tag",
6754
5968
  "list.js"
6755
5969
  ]
6756
5970
  },
6757
- "face:tag:remove": {
5971
+ "team:tag:remove": {
6758
5972
  "aliases": [],
6759
5973
  "args": {
6760
- "alias": {
6761
- "description": "Face alias",
6762
- "name": "alias",
5974
+ "team_id": {
5975
+ "description": "Team ID",
5976
+ "name": "team_id",
6763
5977
  "required": true
6764
5978
  },
6765
5979
  "tag": {
@@ -6768,7 +5982,7 @@
6768
5982
  "required": true
6769
5983
  }
6770
5984
  },
6771
- "description": "Remove a tag from a face",
5985
+ "description": "Remove a tag from a team",
6772
5986
  "flags": {
6773
5987
  "json": {
6774
5988
  "description": "Format output as json.",
@@ -6804,7 +6018,7 @@
6804
6018
  },
6805
6019
  "hasDynamicHelp": false,
6806
6020
  "hiddenAliases": [],
6807
- "id": "face:tag:remove",
6021
+ "id": "team:tag:remove",
6808
6022
  "pluginAlias": "faces-cli",
6809
6023
  "pluginName": "faces-cli",
6810
6024
  "pluginType": "core",
@@ -6814,21 +6028,21 @@
6814
6028
  "relativePath": [
6815
6029
  "dist",
6816
6030
  "commands",
6817
- "face",
6031
+ "team",
6818
6032
  "tag",
6819
6033
  "remove.js"
6820
6034
  ]
6821
6035
  },
6822
- "face:tag:set": {
6036
+ "team:tag:set": {
6823
6037
  "aliases": [],
6824
6038
  "args": {
6825
- "alias": {
6826
- "description": "Face alias",
6827
- "name": "alias",
6039
+ "team_id": {
6040
+ "description": "Team ID",
6041
+ "name": "team_id",
6828
6042
  "required": true
6829
6043
  }
6830
6044
  },
6831
- "description": "Replace all tags on a face",
6045
+ "description": "Replace all tags on a team",
6832
6046
  "flags": {
6833
6047
  "json": {
6834
6048
  "description": "Format output as json.",
@@ -6872,7 +6086,7 @@
6872
6086
  },
6873
6087
  "hasDynamicHelp": false,
6874
6088
  "hiddenAliases": [],
6875
- "id": "face:tag:set",
6089
+ "id": "team:tag:set",
6876
6090
  "pluginAlias": "faces-cli",
6877
6091
  "pluginName": "faces-cli",
6878
6092
  "pluginType": "core",
@@ -6882,11 +6096,11 @@
6882
6096
  "relativePath": [
6883
6097
  "dist",
6884
6098
  "commands",
6885
- "face",
6099
+ "team",
6886
6100
  "tag",
6887
6101
  "set.js"
6888
6102
  ]
6889
6103
  }
6890
6104
  },
6891
- "version": "1.7.5"
6105
+ "version": "1.7.7"
6892
6106
  }