faces-cli 1.7.14 → 1.8.0

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.
@@ -632,10 +632,10 @@
632
632
  "whoami.js"
633
633
  ]
634
634
  },
635
- "catalog:backup": {
635
+ "billing:balance": {
636
636
  "aliases": [],
637
637
  "args": {},
638
- "description": "Snapshot all faces, teams, and source material for migration",
638
+ "description": "Show credit balance and payment method status",
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": "catalog:backup",
674
+ "id": "billing:balance",
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
- "catalog",
685
- "backup.js"
684
+ "billing",
685
+ "balance.js"
686
686
  ]
687
687
  },
688
- "catalog:doctor": {
688
+ "billing:card-setup": {
689
689
  "aliases": [],
690
690
  "args": {},
691
- "description": "Diagnose and repair the local face and team catalog",
691
+ "description": "Get a Stripe card setup URL to save a payment method",
692
692
  "flags": {
693
693
  "json": {
694
694
  "description": "Format output as json.",
@@ -720,23 +720,11 @@
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"
735
723
  }
736
724
  },
737
725
  "hasDynamicHelp": false,
738
726
  "hiddenAliases": [],
739
- "id": "catalog:doctor",
727
+ "id": "billing:card-setup",
740
728
  "pluginAlias": "faces-cli",
741
729
  "pluginName": "faces-cli",
742
730
  "pluginType": "core",
@@ -746,14 +734,14 @@
746
734
  "relativePath": [
747
735
  "dist",
748
736
  "commands",
749
- "catalog",
750
- "doctor.js"
737
+ "billing",
738
+ "card-setup.js"
751
739
  ]
752
740
  },
753
- "catalog:list": {
741
+ "billing:llm-costs": {
754
742
  "aliases": [],
755
743
  "args": {},
756
- "description": "List all faces in the local catalog",
744
+ "description": "List available LLMs and their per-token costs",
757
745
  "flags": {
758
746
  "json": {
759
747
  "description": "Format output as json.",
@@ -785,11 +773,18 @@
785
773
  "hasDynamicHelp": false,
786
774
  "multiple": false,
787
775
  "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"
788
783
  }
789
784
  },
790
785
  "hasDynamicHelp": false,
791
786
  "hiddenAliases": [],
792
- "id": "catalog:list",
787
+ "id": "billing:llm-costs",
793
788
  "pluginAlias": "faces-cli",
794
789
  "pluginName": "faces-cli",
795
790
  "pluginType": "core",
@@ -799,14 +794,14 @@
799
794
  "relativePath": [
800
795
  "dist",
801
796
  "commands",
802
- "catalog",
803
- "list.js"
797
+ "billing",
798
+ "llm-costs.js"
804
799
  ]
805
800
  },
806
- "catalog:manyfaced": {
801
+ "billing:topup": {
807
802
  "aliases": [],
808
803
  "args": {},
809
- "description": "Browse and install community manyfaced skills from github.com/facessh/manyfaced",
804
+ "description": "Top up credit balance using saved payment method",
810
805
  "flags": {
811
806
  "json": {
812
807
  "description": "Format output as json.",
@@ -839,37 +834,25 @@
839
834
  "multiple": false,
840
835
  "type": "option"
841
836
  },
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",
837
+ "amount": {
838
+ "description": "Top-up amount in USD (min $1)",
839
+ "name": "amount",
840
+ "required": true,
852
841
  "hasDynamicHelp": false,
853
842
  "multiple": false,
854
843
  "type": "option"
855
844
  },
856
- "skills-dir": {
857
- "description": "Directory to install skills into (required for --install)",
858
- "name": "skills-dir",
845
+ "payment-ref": {
846
+ "description": "Payment reference (admin/test path)",
847
+ "name": "payment-ref",
859
848
  "hasDynamicHelp": false,
860
849
  "multiple": false,
861
850
  "type": "option"
862
- },
863
- "refresh": {
864
- "description": "Force refresh the skill index (ignore cache)",
865
- "name": "refresh",
866
- "allowNo": false,
867
- "type": "boolean"
868
851
  }
869
852
  },
870
853
  "hasDynamicHelp": false,
871
854
  "hiddenAliases": [],
872
- "id": "catalog:manyfaced",
855
+ "id": "billing:topup",
873
856
  "pluginAlias": "faces-cli",
874
857
  "pluginName": "faces-cli",
875
858
  "pluginType": "core",
@@ -879,19 +862,14 @@
879
862
  "relativePath": [
880
863
  "dist",
881
864
  "commands",
882
- "catalog",
883
- "manyfaced.js"
865
+ "billing",
866
+ "topup.js"
884
867
  ]
885
868
  },
886
- "catalog:restore": {
869
+ "billing:usage": {
887
870
  "aliases": [],
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",
871
+ "args": {},
872
+ "description": "Aggregated usage analytics",
895
873
  "flags": {
896
874
  "json": {
897
875
  "description": "Format output as json.",
@@ -924,16 +902,37 @@
924
902
  "multiple": false,
925
903
  "type": "option"
926
904
  },
927
- "compile": {
928
- "description": "Run compile:all after restoring",
929
- "name": "compile",
930
- "allowNo": false,
931
- "type": "boolean"
905
+ "group-by": {
906
+ "description": "Group results",
907
+ "name": "group-by",
908
+ "hasDynamicHelp": false,
909
+ "multiple": false,
910
+ "options": [
911
+ "api_key",
912
+ "model",
913
+ "llm",
914
+ "date"
915
+ ],
916
+ "type": "option"
917
+ },
918
+ "from": {
919
+ "description": "Start date (YYYY-MM-DD)",
920
+ "name": "from",
921
+ "hasDynamicHelp": false,
922
+ "multiple": false,
923
+ "type": "option"
924
+ },
925
+ "to": {
926
+ "description": "End date (YYYY-MM-DD)",
927
+ "name": "to",
928
+ "hasDynamicHelp": false,
929
+ "multiple": false,
930
+ "type": "option"
932
931
  }
933
932
  },
934
933
  "hasDynamicHelp": false,
935
934
  "hiddenAliases": [],
936
- "id": "catalog:restore",
935
+ "id": "billing:usage",
937
936
  "pluginAlias": "faces-cli",
938
937
  "pluginName": "faces-cli",
939
938
  "pluginType": "core",
@@ -943,14 +942,14 @@
943
942
  "relativePath": [
944
943
  "dist",
945
944
  "commands",
946
- "catalog",
947
- "restore.js"
945
+ "billing",
946
+ "usage.js"
948
947
  ]
949
948
  },
950
- "billing:balance": {
949
+ "catalog:backup": {
951
950
  "aliases": [],
952
951
  "args": {},
953
- "description": "Show credit balance and payment method status",
952
+ "description": "Snapshot all faces, teams, and source material for migration",
954
953
  "flags": {
955
954
  "json": {
956
955
  "description": "Format output as json.",
@@ -986,7 +985,7 @@
986
985
  },
987
986
  "hasDynamicHelp": false,
988
987
  "hiddenAliases": [],
989
- "id": "billing:balance",
988
+ "id": "catalog:backup",
990
989
  "pluginAlias": "faces-cli",
991
990
  "pluginName": "faces-cli",
992
991
  "pluginType": "core",
@@ -996,14 +995,14 @@
996
995
  "relativePath": [
997
996
  "dist",
998
997
  "commands",
999
- "billing",
1000
- "balance.js"
998
+ "catalog",
999
+ "backup.js"
1001
1000
  ]
1002
1001
  },
1003
- "billing:card-setup": {
1002
+ "catalog:doctor": {
1004
1003
  "aliases": [],
1005
1004
  "args": {},
1006
- "description": "Get a Stripe card setup URL to save a payment method",
1005
+ "description": "Diagnose and repair the local face and team catalog",
1007
1006
  "flags": {
1008
1007
  "json": {
1009
1008
  "description": "Format output as json.",
@@ -1035,11 +1034,23 @@
1035
1034
  "hasDynamicHelp": false,
1036
1035
  "multiple": false,
1037
1036
  "type": "option"
1037
+ },
1038
+ "fix": {
1039
+ "description": "Rebuild missing or stale catalog entries from API",
1040
+ "name": "fix",
1041
+ "allowNo": false,
1042
+ "type": "boolean"
1043
+ },
1044
+ "generate": {
1045
+ "description": "Fix + generate missing descriptions via LLM",
1046
+ "name": "generate",
1047
+ "allowNo": false,
1048
+ "type": "boolean"
1038
1049
  }
1039
1050
  },
1040
1051
  "hasDynamicHelp": false,
1041
1052
  "hiddenAliases": [],
1042
- "id": "billing:card-setup",
1053
+ "id": "catalog:doctor",
1043
1054
  "pluginAlias": "faces-cli",
1044
1055
  "pluginName": "faces-cli",
1045
1056
  "pluginType": "core",
@@ -1049,14 +1060,14 @@
1049
1060
  "relativePath": [
1050
1061
  "dist",
1051
1062
  "commands",
1052
- "billing",
1053
- "card-setup.js"
1063
+ "catalog",
1064
+ "doctor.js"
1054
1065
  ]
1055
1066
  },
1056
- "billing:llm-costs": {
1067
+ "catalog:list": {
1057
1068
  "aliases": [],
1058
1069
  "args": {},
1059
- "description": "List available LLMs and their per-token costs",
1070
+ "description": "List all faces in the local catalog",
1060
1071
  "flags": {
1061
1072
  "json": {
1062
1073
  "description": "Format output as json.",
@@ -1088,18 +1099,11 @@
1088
1099
  "hasDynamicHelp": false,
1089
1100
  "multiple": false,
1090
1101
  "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"
1098
1102
  }
1099
1103
  },
1100
1104
  "hasDynamicHelp": false,
1101
1105
  "hiddenAliases": [],
1102
- "id": "billing:llm-costs",
1106
+ "id": "catalog:list",
1103
1107
  "pluginAlias": "faces-cli",
1104
1108
  "pluginName": "faces-cli",
1105
1109
  "pluginType": "core",
@@ -1109,14 +1113,14 @@
1109
1113
  "relativePath": [
1110
1114
  "dist",
1111
1115
  "commands",
1112
- "billing",
1113
- "llm-costs.js"
1116
+ "catalog",
1117
+ "list.js"
1114
1118
  ]
1115
1119
  },
1116
- "billing:topup": {
1120
+ "catalog:manyfaced": {
1117
1121
  "aliases": [],
1118
1122
  "args": {},
1119
- "description": "Top up credit balance using saved payment method",
1123
+ "description": "Browse and install community manyfaced skills from github.com/facessh/manyfaced",
1120
1124
  "flags": {
1121
1125
  "json": {
1122
1126
  "description": "Format output as json.",
@@ -1149,25 +1153,37 @@
1149
1153
  "multiple": false,
1150
1154
  "type": "option"
1151
1155
  },
1152
- "amount": {
1153
- "description": "Top-up amount in USD (min $1)",
1154
- "name": "amount",
1155
- "required": true,
1156
+ "skill": {
1157
+ "description": "Show details for a specific skill",
1158
+ "name": "skill",
1156
1159
  "hasDynamicHelp": false,
1157
1160
  "multiple": false,
1158
1161
  "type": "option"
1159
1162
  },
1160
- "payment-ref": {
1161
- "description": "Payment reference (admin/test path)",
1162
- "name": "payment-ref",
1163
+ "install": {
1164
+ "description": "Install a skill by name",
1165
+ "name": "install",
1166
+ "hasDynamicHelp": false,
1167
+ "multiple": false,
1168
+ "type": "option"
1169
+ },
1170
+ "skills-dir": {
1171
+ "description": "Directory to install skills into (required for --install)",
1172
+ "name": "skills-dir",
1163
1173
  "hasDynamicHelp": false,
1164
1174
  "multiple": false,
1165
1175
  "type": "option"
1176
+ },
1177
+ "refresh": {
1178
+ "description": "Force refresh the skill index (ignore cache)",
1179
+ "name": "refresh",
1180
+ "allowNo": false,
1181
+ "type": "boolean"
1166
1182
  }
1167
1183
  },
1168
1184
  "hasDynamicHelp": false,
1169
1185
  "hiddenAliases": [],
1170
- "id": "billing:topup",
1186
+ "id": "catalog:manyfaced",
1171
1187
  "pluginAlias": "faces-cli",
1172
1188
  "pluginName": "faces-cli",
1173
1189
  "pluginType": "core",
@@ -1177,14 +1193,19 @@
1177
1193
  "relativePath": [
1178
1194
  "dist",
1179
1195
  "commands",
1180
- "billing",
1181
- "topup.js"
1196
+ "catalog",
1197
+ "manyfaced.js"
1182
1198
  ]
1183
1199
  },
1184
- "billing:usage": {
1200
+ "catalog:restore": {
1185
1201
  "aliases": [],
1186
- "args": {},
1187
- "description": "Aggregated usage analytics",
1202
+ "args": {
1203
+ "file": {
1204
+ "description": "Backup file path (default: most recent in ~/.faces/backups/)",
1205
+ "name": "file"
1206
+ }
1207
+ },
1208
+ "description": "Restore faces, teams, and source material from a backup snapshot",
1188
1209
  "flags": {
1189
1210
  "json": {
1190
1211
  "description": "Format output as json.",
@@ -1217,37 +1238,16 @@
1217
1238
  "multiple": false,
1218
1239
  "type": "option"
1219
1240
  },
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"
1246
- }
1241
+ "compile": {
1242
+ "description": "Run compile:all after restoring",
1243
+ "name": "compile",
1244
+ "allowNo": false,
1245
+ "type": "boolean"
1246
+ }
1247
1247
  },
1248
1248
  "hasDynamicHelp": false,
1249
1249
  "hiddenAliases": [],
1250
- "id": "billing:usage",
1250
+ "id": "catalog:restore",
1251
1251
  "pluginAlias": "faces-cli",
1252
1252
  "pluginName": "faces-cli",
1253
1253
  "pluginType": "core",
@@ -1257,8 +1257,8 @@
1257
1257
  "relativePath": [
1258
1258
  "dist",
1259
1259
  "commands",
1260
- "billing",
1261
- "usage.js"
1260
+ "catalog",
1261
+ "restore.js"
1262
1262
  ]
1263
1263
  },
1264
1264
  "chat:chat": {
@@ -3201,6 +3201,81 @@
3201
3201
  "share.js"
3202
3202
  ]
3203
3203
  },
3204
+ "face:sources": {
3205
+ "aliases": [],
3206
+ "args": {
3207
+ "alias": {
3208
+ "description": "Face alias",
3209
+ "name": "alias",
3210
+ "required": true
3211
+ }
3212
+ },
3213
+ "description": "List every source compiled into a face: documents and threads together, one row each. Exits 4 if the face does not exist, which is a different answer from a face that has no sources. Content is never printed; read a single source with compile:doc:get or compile:thread:get.",
3214
+ "examples": [
3215
+ "<%= config.bin %> <%= command.id %> alice",
3216
+ "<%= config.bin %> <%= command.id %> alice --type thread",
3217
+ "<%= config.bin %> <%= command.id %> alice --json"
3218
+ ],
3219
+ "flags": {
3220
+ "json": {
3221
+ "description": "Format output as json.",
3222
+ "helpGroup": "GLOBAL",
3223
+ "name": "json",
3224
+ "allowNo": false,
3225
+ "type": "boolean"
3226
+ },
3227
+ "base-url": {
3228
+ "description": "API base URL",
3229
+ "env": "FACES_BASE_URL",
3230
+ "name": "base-url",
3231
+ "hasDynamicHelp": false,
3232
+ "multiple": false,
3233
+ "type": "option"
3234
+ },
3235
+ "token": {
3236
+ "description": "JWT bearer token",
3237
+ "env": "FACES_TOKEN",
3238
+ "name": "token",
3239
+ "hasDynamicHelp": false,
3240
+ "multiple": false,
3241
+ "type": "option"
3242
+ },
3243
+ "api-key": {
3244
+ "description": "API key",
3245
+ "env": "FACES_API_KEY",
3246
+ "name": "api-key",
3247
+ "hasDynamicHelp": false,
3248
+ "multiple": false,
3249
+ "type": "option"
3250
+ },
3251
+ "type": {
3252
+ "description": "Show only one kind of source",
3253
+ "name": "type",
3254
+ "hasDynamicHelp": false,
3255
+ "multiple": false,
3256
+ "options": [
3257
+ "doc",
3258
+ "thread"
3259
+ ],
3260
+ "type": "option"
3261
+ }
3262
+ },
3263
+ "hasDynamicHelp": false,
3264
+ "hiddenAliases": [],
3265
+ "id": "face:sources",
3266
+ "pluginAlias": "faces-cli",
3267
+ "pluginName": "faces-cli",
3268
+ "pluginType": "core",
3269
+ "strict": true,
3270
+ "enableJsonFlag": true,
3271
+ "isESM": true,
3272
+ "relativePath": [
3273
+ "dist",
3274
+ "commands",
3275
+ "face",
3276
+ "sources.js"
3277
+ ]
3278
+ },
3204
3279
  "face:stats": {
3205
3280
  "aliases": [],
3206
3281
  "args": {},
@@ -3358,18 +3433,457 @@
3358
3433
  "multiple": false,
3359
3434
  "type": "option"
3360
3435
  },
3361
- "api-key": {
3362
- "description": "API key",
3363
- "env": "FACES_API_KEY",
3364
- "name": "api-key",
3436
+ "api-key": {
3437
+ "description": "API key",
3438
+ "env": "FACES_API_KEY",
3439
+ "name": "api-key",
3440
+ "hasDynamicHelp": false,
3441
+ "multiple": false,
3442
+ "type": "option"
3443
+ }
3444
+ },
3445
+ "hasDynamicHelp": false,
3446
+ "hiddenAliases": [],
3447
+ "id": "face:unlock",
3448
+ "pluginAlias": "faces-cli",
3449
+ "pluginName": "faces-cli",
3450
+ "pluginType": "core",
3451
+ "strict": true,
3452
+ "enableJsonFlag": true,
3453
+ "isESM": true,
3454
+ "relativePath": [
3455
+ "dist",
3456
+ "commands",
3457
+ "face",
3458
+ "unlock.js"
3459
+ ]
3460
+ },
3461
+ "face:unpublish": {
3462
+ "aliases": [],
3463
+ "args": {
3464
+ "alias": {
3465
+ "description": "Face alias",
3466
+ "name": "alias",
3467
+ "required": true
3468
+ }
3469
+ },
3470
+ "description": "Stop publishing a face. Anyone it is individually shared with keeps their access — publishing is an override on top of sharing, not a replacement for it.",
3471
+ "flags": {
3472
+ "json": {
3473
+ "description": "Format output as json.",
3474
+ "helpGroup": "GLOBAL",
3475
+ "name": "json",
3476
+ "allowNo": false,
3477
+ "type": "boolean"
3478
+ },
3479
+ "base-url": {
3480
+ "description": "API base URL",
3481
+ "env": "FACES_BASE_URL",
3482
+ "name": "base-url",
3483
+ "hasDynamicHelp": false,
3484
+ "multiple": false,
3485
+ "type": "option"
3486
+ },
3487
+ "token": {
3488
+ "description": "JWT bearer token",
3489
+ "env": "FACES_TOKEN",
3490
+ "name": "token",
3491
+ "hasDynamicHelp": false,
3492
+ "multiple": false,
3493
+ "type": "option"
3494
+ },
3495
+ "api-key": {
3496
+ "description": "API key",
3497
+ "env": "FACES_API_KEY",
3498
+ "name": "api-key",
3499
+ "hasDynamicHelp": false,
3500
+ "multiple": false,
3501
+ "type": "option"
3502
+ }
3503
+ },
3504
+ "hasDynamicHelp": false,
3505
+ "hiddenAliases": [],
3506
+ "id": "face:unpublish",
3507
+ "pluginAlias": "faces-cli",
3508
+ "pluginName": "faces-cli",
3509
+ "pluginType": "core",
3510
+ "strict": true,
3511
+ "enableJsonFlag": true,
3512
+ "isESM": true,
3513
+ "relativePath": [
3514
+ "dist",
3515
+ "commands",
3516
+ "face",
3517
+ "unpublish.js"
3518
+ ]
3519
+ },
3520
+ "face:unshare": {
3521
+ "aliases": [],
3522
+ "args": {
3523
+ "alias": {
3524
+ "description": "Face alias",
3525
+ "name": "alias",
3526
+ "required": true
3527
+ }
3528
+ },
3529
+ "description": "Revoke access to a shared face. Takes effect immediately — there is no grace period.",
3530
+ "examples": [
3531
+ "<%= config.bin %> <%= command.id %> alice --from dana --yes",
3532
+ "<%= config.bin %> <%= command.id %> alice --all --yes"
3533
+ ],
3534
+ "flags": {
3535
+ "json": {
3536
+ "description": "Format output as json.",
3537
+ "helpGroup": "GLOBAL",
3538
+ "name": "json",
3539
+ "allowNo": false,
3540
+ "type": "boolean"
3541
+ },
3542
+ "base-url": {
3543
+ "description": "API base URL",
3544
+ "env": "FACES_BASE_URL",
3545
+ "name": "base-url",
3546
+ "hasDynamicHelp": false,
3547
+ "multiple": false,
3548
+ "type": "option"
3549
+ },
3550
+ "token": {
3551
+ "description": "JWT bearer token",
3552
+ "env": "FACES_TOKEN",
3553
+ "name": "token",
3554
+ "hasDynamicHelp": false,
3555
+ "multiple": false,
3556
+ "type": "option"
3557
+ },
3558
+ "api-key": {
3559
+ "description": "API key",
3560
+ "env": "FACES_API_KEY",
3561
+ "name": "api-key",
3562
+ "hasDynamicHelp": false,
3563
+ "multiple": false,
3564
+ "type": "option"
3565
+ },
3566
+ "from": {
3567
+ "description": "Account to revoke (repeatable)",
3568
+ "exclusive": [
3569
+ "all"
3570
+ ],
3571
+ "name": "from",
3572
+ "hasDynamicHelp": false,
3573
+ "multiple": true,
3574
+ "type": "option"
3575
+ },
3576
+ "all": {
3577
+ "description": "Revoke everyone",
3578
+ "exclusive": [
3579
+ "from"
3580
+ ],
3581
+ "name": "all",
3582
+ "allowNo": false,
3583
+ "type": "boolean"
3584
+ },
3585
+ "yes": {
3586
+ "description": "Skip confirmation",
3587
+ "name": "yes",
3588
+ "allowNo": false,
3589
+ "type": "boolean"
3590
+ }
3591
+ },
3592
+ "hasDynamicHelp": false,
3593
+ "hiddenAliases": [],
3594
+ "id": "face:unshare",
3595
+ "pluginAlias": "faces-cli",
3596
+ "pluginName": "faces-cli",
3597
+ "pluginType": "core",
3598
+ "strict": true,
3599
+ "enableJsonFlag": true,
3600
+ "isESM": true,
3601
+ "relativePath": [
3602
+ "dist",
3603
+ "commands",
3604
+ "face",
3605
+ "unshare.js"
3606
+ ]
3607
+ },
3608
+ "keys:create": {
3609
+ "aliases": [],
3610
+ "args": {},
3611
+ "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.",
3612
+ "flags": {
3613
+ "json": {
3614
+ "description": "Format output as json.",
3615
+ "helpGroup": "GLOBAL",
3616
+ "name": "json",
3617
+ "allowNo": false,
3618
+ "type": "boolean"
3619
+ },
3620
+ "base-url": {
3621
+ "description": "API base URL",
3622
+ "env": "FACES_BASE_URL",
3623
+ "name": "base-url",
3624
+ "hasDynamicHelp": false,
3625
+ "multiple": false,
3626
+ "type": "option"
3627
+ },
3628
+ "token": {
3629
+ "description": "JWT bearer token",
3630
+ "env": "FACES_TOKEN",
3631
+ "name": "token",
3632
+ "hasDynamicHelp": false,
3633
+ "multiple": false,
3634
+ "type": "option"
3635
+ },
3636
+ "api-key": {
3637
+ "description": "API key",
3638
+ "env": "FACES_API_KEY",
3639
+ "name": "api-key",
3640
+ "hasDynamicHelp": false,
3641
+ "multiple": false,
3642
+ "type": "option"
3643
+ },
3644
+ "name": {
3645
+ "description": "Key name/label",
3646
+ "name": "name",
3647
+ "required": true,
3648
+ "hasDynamicHelp": false,
3649
+ "multiple": false,
3650
+ "type": "option"
3651
+ },
3652
+ "expires-days": {
3653
+ "description": "Expiry in days (omit for no expiry)",
3654
+ "name": "expires-days",
3655
+ "hasDynamicHelp": false,
3656
+ "multiple": false,
3657
+ "type": "option"
3658
+ },
3659
+ "budget": {
3660
+ "description": "Spend budget in USD",
3661
+ "name": "budget",
3662
+ "hasDynamicHelp": false,
3663
+ "multiple": false,
3664
+ "type": "option"
3665
+ },
3666
+ "face": {
3667
+ "description": "Allowed face alias (repeatable)",
3668
+ "name": "face",
3669
+ "hasDynamicHelp": false,
3670
+ "multiple": true,
3671
+ "type": "option"
3672
+ },
3673
+ "model": {
3674
+ "description": "Allowed model name (repeatable)",
3675
+ "name": "model",
3676
+ "hasDynamicHelp": false,
3677
+ "multiple": true,
3678
+ "type": "option"
3679
+ },
3680
+ "save": {
3681
+ "description": "Save the new key to ~/.faces/config.json as api_key (default: true; use --no-save to skip)",
3682
+ "name": "save",
3683
+ "allowNo": true,
3684
+ "type": "boolean"
3685
+ }
3686
+ },
3687
+ "hasDynamicHelp": false,
3688
+ "hiddenAliases": [],
3689
+ "id": "keys:create",
3690
+ "pluginAlias": "faces-cli",
3691
+ "pluginName": "faces-cli",
3692
+ "pluginType": "core",
3693
+ "strict": true,
3694
+ "enableJsonFlag": true,
3695
+ "isESM": true,
3696
+ "relativePath": [
3697
+ "dist",
3698
+ "commands",
3699
+ "keys",
3700
+ "create.js"
3701
+ ]
3702
+ },
3703
+ "keys:list": {
3704
+ "aliases": [],
3705
+ "args": {},
3706
+ "description": "List all API keys (JWT required)",
3707
+ "flags": {
3708
+ "json": {
3709
+ "description": "Format output as json.",
3710
+ "helpGroup": "GLOBAL",
3711
+ "name": "json",
3712
+ "allowNo": false,
3713
+ "type": "boolean"
3714
+ },
3715
+ "base-url": {
3716
+ "description": "API base URL",
3717
+ "env": "FACES_BASE_URL",
3718
+ "name": "base-url",
3719
+ "hasDynamicHelp": false,
3720
+ "multiple": false,
3721
+ "type": "option"
3722
+ },
3723
+ "token": {
3724
+ "description": "JWT bearer token",
3725
+ "env": "FACES_TOKEN",
3726
+ "name": "token",
3727
+ "hasDynamicHelp": false,
3728
+ "multiple": false,
3729
+ "type": "option"
3730
+ },
3731
+ "api-key": {
3732
+ "description": "API key",
3733
+ "env": "FACES_API_KEY",
3734
+ "name": "api-key",
3735
+ "hasDynamicHelp": false,
3736
+ "multiple": false,
3737
+ "type": "option"
3738
+ }
3739
+ },
3740
+ "hasDynamicHelp": false,
3741
+ "hiddenAliases": [],
3742
+ "id": "keys:list",
3743
+ "pluginAlias": "faces-cli",
3744
+ "pluginName": "faces-cli",
3745
+ "pluginType": "core",
3746
+ "strict": true,
3747
+ "enableJsonFlag": true,
3748
+ "isESM": true,
3749
+ "relativePath": [
3750
+ "dist",
3751
+ "commands",
3752
+ "keys",
3753
+ "list.js"
3754
+ ]
3755
+ },
3756
+ "keys:revoke": {
3757
+ "aliases": [],
3758
+ "args": {
3759
+ "key_id": {
3760
+ "description": "Key ID",
3761
+ "name": "key_id",
3762
+ "required": true
3763
+ }
3764
+ },
3765
+ "description": "Revoke an API key (JWT required)",
3766
+ "flags": {
3767
+ "json": {
3768
+ "description": "Format output as json.",
3769
+ "helpGroup": "GLOBAL",
3770
+ "name": "json",
3771
+ "allowNo": false,
3772
+ "type": "boolean"
3773
+ },
3774
+ "base-url": {
3775
+ "description": "API base URL",
3776
+ "env": "FACES_BASE_URL",
3777
+ "name": "base-url",
3778
+ "hasDynamicHelp": false,
3779
+ "multiple": false,
3780
+ "type": "option"
3781
+ },
3782
+ "token": {
3783
+ "description": "JWT bearer token",
3784
+ "env": "FACES_TOKEN",
3785
+ "name": "token",
3786
+ "hasDynamicHelp": false,
3787
+ "multiple": false,
3788
+ "type": "option"
3789
+ },
3790
+ "api-key": {
3791
+ "description": "API key",
3792
+ "env": "FACES_API_KEY",
3793
+ "name": "api-key",
3794
+ "hasDynamicHelp": false,
3795
+ "multiple": false,
3796
+ "type": "option"
3797
+ },
3798
+ "yes": {
3799
+ "description": "Skip confirmation",
3800
+ "name": "yes",
3801
+ "allowNo": false,
3802
+ "type": "boolean"
3803
+ }
3804
+ },
3805
+ "hasDynamicHelp": false,
3806
+ "hiddenAliases": [],
3807
+ "id": "keys:revoke",
3808
+ "pluginAlias": "faces-cli",
3809
+ "pluginName": "faces-cli",
3810
+ "pluginType": "core",
3811
+ "strict": true,
3812
+ "enableJsonFlag": true,
3813
+ "isESM": true,
3814
+ "relativePath": [
3815
+ "dist",
3816
+ "commands",
3817
+ "keys",
3818
+ "revoke.js"
3819
+ ]
3820
+ },
3821
+ "keys:update": {
3822
+ "aliases": [],
3823
+ "args": {
3824
+ "key_id": {
3825
+ "description": "Key ID",
3826
+ "name": "key_id",
3827
+ "required": true
3828
+ }
3829
+ },
3830
+ "description": "Update API key metadata (JWT required)",
3831
+ "flags": {
3832
+ "json": {
3833
+ "description": "Format output as json.",
3834
+ "helpGroup": "GLOBAL",
3835
+ "name": "json",
3836
+ "allowNo": false,
3837
+ "type": "boolean"
3838
+ },
3839
+ "base-url": {
3840
+ "description": "API base URL",
3841
+ "env": "FACES_BASE_URL",
3842
+ "name": "base-url",
3843
+ "hasDynamicHelp": false,
3844
+ "multiple": false,
3845
+ "type": "option"
3846
+ },
3847
+ "token": {
3848
+ "description": "JWT bearer token",
3849
+ "env": "FACES_TOKEN",
3850
+ "name": "token",
3851
+ "hasDynamicHelp": false,
3852
+ "multiple": false,
3853
+ "type": "option"
3854
+ },
3855
+ "api-key": {
3856
+ "description": "API key",
3857
+ "env": "FACES_API_KEY",
3858
+ "name": "api-key",
3859
+ "hasDynamicHelp": false,
3860
+ "multiple": false,
3861
+ "type": "option"
3862
+ },
3863
+ "name": {
3864
+ "description": "New key name",
3865
+ "name": "name",
3866
+ "hasDynamicHelp": false,
3867
+ "multiple": false,
3868
+ "type": "option"
3869
+ },
3870
+ "budget": {
3871
+ "description": "New spend budget in USD",
3872
+ "name": "budget",
3365
3873
  "hasDynamicHelp": false,
3366
3874
  "multiple": false,
3367
3875
  "type": "option"
3876
+ },
3877
+ "reset-spent": {
3878
+ "description": "Reset spent amount to zero",
3879
+ "name": "reset-spent",
3880
+ "allowNo": false,
3881
+ "type": "boolean"
3368
3882
  }
3369
3883
  },
3370
3884
  "hasDynamicHelp": false,
3371
3885
  "hiddenAliases": [],
3372
- "id": "face:unlock",
3886
+ "id": "keys:update",
3373
3887
  "pluginAlias": "faces-cli",
3374
3888
  "pluginName": "faces-cli",
3375
3889
  "pluginType": "core",
@@ -3379,11 +3893,11 @@
3379
3893
  "relativePath": [
3380
3894
  "dist",
3381
3895
  "commands",
3382
- "face",
3383
- "unlock.js"
3896
+ "keys",
3897
+ "update.js"
3384
3898
  ]
3385
3899
  },
3386
- "face:unpublish": {
3900
+ "style:delete": {
3387
3901
  "aliases": [],
3388
3902
  "args": {
3389
3903
  "alias": {
@@ -3392,7 +3906,11 @@
3392
3906
  "required": true
3393
3907
  }
3394
3908
  },
3395
- "description": "Stop publishing a face. Anyone it is individually shared with keeps their access publishing is an override on top of sharing, not a replacement for it.",
3909
+ "description": "Delete a face's captured style. --scope map forgets the style and keeps the material it came from. --scope all deletes the uploaded material too, permanently. There is no default because the two differ by whether your material survives.",
3910
+ "examples": [
3911
+ "<%= config.bin %> <%= command.id %> alice --scope map",
3912
+ "<%= config.bin %> <%= command.id %> alice --scope all --yes"
3913
+ ],
3396
3914
  "flags": {
3397
3915
  "json": {
3398
3916
  "description": "Format output as json.",
@@ -3424,11 +3942,29 @@
3424
3942
  "hasDynamicHelp": false,
3425
3943
  "multiple": false,
3426
3944
  "type": "option"
3945
+ },
3946
+ "scope": {
3947
+ "description": "map: forget the style, keep the material. all: delete the material with it, permanently.",
3948
+ "name": "scope",
3949
+ "required": true,
3950
+ "hasDynamicHelp": false,
3951
+ "multiple": false,
3952
+ "options": [
3953
+ "map",
3954
+ "all"
3955
+ ],
3956
+ "type": "option"
3957
+ },
3958
+ "yes": {
3959
+ "description": "Skip confirmation",
3960
+ "name": "yes",
3961
+ "allowNo": false,
3962
+ "type": "boolean"
3427
3963
  }
3428
3964
  },
3429
3965
  "hasDynamicHelp": false,
3430
3966
  "hiddenAliases": [],
3431
- "id": "face:unpublish",
3967
+ "id": "style:delete",
3432
3968
  "pluginAlias": "faces-cli",
3433
3969
  "pluginName": "faces-cli",
3434
3970
  "pluginType": "core",
@@ -3438,11 +3974,11 @@
3438
3974
  "relativePath": [
3439
3975
  "dist",
3440
3976
  "commands",
3441
- "face",
3442
- "unpublish.js"
3977
+ "style",
3978
+ "delete.js"
3443
3979
  ]
3444
3980
  },
3445
- "face:unshare": {
3981
+ "style:make": {
3446
3982
  "aliases": [],
3447
3983
  "args": {
3448
3984
  "alias": {
@@ -3451,10 +3987,12 @@
3451
3987
  "required": true
3452
3988
  }
3453
3989
  },
3454
- "description": "Revoke access to a shared face. Takes effect immediately there is no grace period.",
3990
+ "description": "Capture how a face writes, from its own material, and install it. This is style, not knowledge: compile teaches a face what it knows, style teaches it how it sounds. Name the sources to learn from with --source, or take everything ready with --all.",
3455
3991
  "examples": [
3456
- "<%= config.bin %> <%= command.id %> alice --from dana --yes",
3457
- "<%= config.bin %> <%= command.id %> alice --all --yes"
3992
+ "<%= config.bin %> <%= command.id %> alice --all",
3993
+ "<%= config.bin %> <%= command.id %> alice --source 1a2b3c4d --source 5e6f7a8b",
3994
+ "<%= config.bin %> <%= command.id %> alice --source 1a2b3c4d:essay",
3995
+ "<%= config.bin %> <%= command.id %> alice --all --medium essay --no-wait"
3458
3996
  ],
3459
3997
  "flags": {
3460
3998
  "json": {
@@ -3488,35 +4026,70 @@
3488
4026
  "multiple": false,
3489
4027
  "type": "option"
3490
4028
  },
3491
- "from": {
3492
- "description": "Account to revoke (repeatable)",
3493
- "exclusive": [
3494
- "all"
3495
- ],
3496
- "name": "from",
4029
+ "source": {
4030
+ "description": "A document or thread to learn from, by id (repeatable). Append :<medium> to declare what it is, e.g. --source 1a2b3c4d:essay, when the source does not already say.",
4031
+ "name": "source",
3497
4032
  "hasDynamicHelp": false,
3498
4033
  "multiple": true,
3499
4034
  "type": "option"
3500
4035
  },
3501
4036
  "all": {
3502
- "description": "Revoke everyone",
3503
- "exclusive": [
3504
- "from"
3505
- ],
4037
+ "description": "Use every source on the face that is ready. Anything skipped is listed.",
3506
4038
  "name": "all",
3507
4039
  "allowNo": false,
3508
4040
  "type": "boolean"
3509
4041
  },
3510
- "yes": {
3511
- "description": "Skip confirmation",
3512
- "name": "yes",
4042
+ "medium": {
4043
+ "description": "Medium for any selected source that does not declare one. Each medium is analysed on its own, so an essay never teaches a rule about email.",
4044
+ "name": "medium",
4045
+ "hasDynamicHelp": false,
4046
+ "multiple": false,
4047
+ "type": "option"
4048
+ },
4049
+ "model": {
4050
+ "description": "Analyst model (default: gpt-5.6-terra)",
4051
+ "name": "model",
4052
+ "hasDynamicHelp": false,
4053
+ "multiple": false,
4054
+ "type": "option"
4055
+ },
4056
+ "allow-paid": {
4057
+ "description": "Permit a build that bills. Without this a build is free or it does not run. Needed for any model outside the free tier, and to allow the paid route when a free quota is exhausted.",
4058
+ "name": "allow-paid",
4059
+ "allowNo": false,
4060
+ "type": "boolean"
4061
+ },
4062
+ "compile": {
4063
+ "description": "Compile any named source that is not compiled yet, before capturing style. On by default. --no-compile captures style from what is already compiled and never bills for compilation.",
4064
+ "name": "compile",
4065
+ "allowNo": true,
4066
+ "type": "boolean"
4067
+ },
4068
+ "best-of": {
4069
+ "description": "Generate N candidates and keep the best (1-5, default 1)",
4070
+ "name": "best-of",
4071
+ "hasDynamicHelp": false,
4072
+ "multiple": false,
4073
+ "type": "option"
4074
+ },
4075
+ "no-wait": {
4076
+ "description": "Start the build and return the job id without polling.",
4077
+ "name": "no-wait",
3513
4078
  "allowNo": false,
3514
4079
  "type": "boolean"
4080
+ },
4081
+ "timeout": {
4082
+ "description": "How long to wait, in seconds (default: 3600)",
4083
+ "name": "timeout",
4084
+ "default": 3600,
4085
+ "hasDynamicHelp": false,
4086
+ "multiple": false,
4087
+ "type": "option"
3515
4088
  }
3516
4089
  },
3517
4090
  "hasDynamicHelp": false,
3518
4091
  "hiddenAliases": [],
3519
- "id": "face:unshare",
4092
+ "id": "style:make",
3520
4093
  "pluginAlias": "faces-cli",
3521
4094
  "pluginName": "faces-cli",
3522
4095
  "pluginType": "core",
@@ -3526,14 +4099,23 @@
3526
4099
  "relativePath": [
3527
4100
  "dist",
3528
4101
  "commands",
3529
- "face",
3530
- "unshare.js"
4102
+ "style",
4103
+ "make.js"
3531
4104
  ]
3532
4105
  },
3533
- "keys:create": {
4106
+ "style:revert": {
3534
4107
  "aliases": [],
3535
- "args": {},
3536
- "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.",
4108
+ "args": {
4109
+ "alias": {
4110
+ "description": "Face alias",
4111
+ "name": "alias",
4112
+ "required": true
4113
+ }
4114
+ },
4115
+ "description": "Go back to the style a face had before the last style:make. It steps backwards through the kept versions and there is no step forward, so the way to undo a revert is to capture the style again. It changes how the face writes immediately, so it asks first.",
4116
+ "examples": [
4117
+ "<%= config.bin %> <%= command.id %> alice --yes"
4118
+ ],
3537
4119
  "flags": {
3538
4120
  "json": {
3539
4121
  "description": "Format output as json.",
@@ -3566,52 +4148,16 @@
3566
4148
  "multiple": false,
3567
4149
  "type": "option"
3568
4150
  },
3569
- "name": {
3570
- "description": "Key name/label",
3571
- "name": "name",
3572
- "required": true,
3573
- "hasDynamicHelp": false,
3574
- "multiple": false,
3575
- "type": "option"
3576
- },
3577
- "expires-days": {
3578
- "description": "Expiry in days (omit for no expiry)",
3579
- "name": "expires-days",
3580
- "hasDynamicHelp": false,
3581
- "multiple": false,
3582
- "type": "option"
3583
- },
3584
- "budget": {
3585
- "description": "Spend budget in USD",
3586
- "name": "budget",
3587
- "hasDynamicHelp": false,
3588
- "multiple": false,
3589
- "type": "option"
3590
- },
3591
- "face": {
3592
- "description": "Allowed face alias (repeatable)",
3593
- "name": "face",
3594
- "hasDynamicHelp": false,
3595
- "multiple": true,
3596
- "type": "option"
3597
- },
3598
- "model": {
3599
- "description": "Allowed model name (repeatable)",
3600
- "name": "model",
3601
- "hasDynamicHelp": false,
3602
- "multiple": true,
3603
- "type": "option"
3604
- },
3605
- "save": {
3606
- "description": "Save the new key to ~/.faces/config.json as api_key (default: true; use --no-save to skip)",
3607
- "name": "save",
3608
- "allowNo": true,
4151
+ "yes": {
4152
+ "description": "Skip confirmation",
4153
+ "name": "yes",
4154
+ "allowNo": false,
3609
4155
  "type": "boolean"
3610
4156
  }
3611
4157
  },
3612
4158
  "hasDynamicHelp": false,
3613
4159
  "hiddenAliases": [],
3614
- "id": "keys:create",
4160
+ "id": "style:revert",
3615
4161
  "pluginAlias": "faces-cli",
3616
4162
  "pluginName": "faces-cli",
3617
4163
  "pluginType": "core",
@@ -3621,14 +4167,25 @@
3621
4167
  "relativePath": [
3622
4168
  "dist",
3623
4169
  "commands",
3624
- "keys",
3625
- "create.js"
4170
+ "style",
4171
+ "revert.js"
3626
4172
  ]
3627
4173
  },
3628
- "keys:list": {
4174
+ "style:status": {
3629
4175
  "aliases": [],
3630
- "args": {},
3631
- "description": "List all API keys (JWT required)",
4176
+ "args": {
4177
+ "job_id": {
4178
+ "description": "Build job id",
4179
+ "name": "job_id",
4180
+ "required": false
4181
+ }
4182
+ },
4183
+ "description": "Read a style build. Give a job id for one build, or --face to list a face's recent builds. Listing is how you find a job id you no longer have.",
4184
+ "examples": [
4185
+ "<%= config.bin %> <%= command.id %> 7a8b9c0d",
4186
+ "<%= config.bin %> <%= command.id %> --face alice",
4187
+ "<%= config.bin %> <%= command.id %> 7a8b9c0d --wait"
4188
+ ],
3632
4189
  "flags": {
3633
4190
  "json": {
3634
4191
  "description": "Format output as json.",
@@ -3660,11 +4217,40 @@
3660
4217
  "hasDynamicHelp": false,
3661
4218
  "multiple": false,
3662
4219
  "type": "option"
4220
+ },
4221
+ "face": {
4222
+ "description": "List recent builds for this face instead of reading one job",
4223
+ "name": "face",
4224
+ "hasDynamicHelp": false,
4225
+ "multiple": false,
4226
+ "type": "option"
4227
+ },
4228
+ "limit": {
4229
+ "description": "How many builds to list with --face (default: 10)",
4230
+ "name": "limit",
4231
+ "default": 10,
4232
+ "hasDynamicHelp": false,
4233
+ "multiple": false,
4234
+ "type": "option"
4235
+ },
4236
+ "wait": {
4237
+ "description": "Block until the job finishes",
4238
+ "name": "wait",
4239
+ "allowNo": false,
4240
+ "type": "boolean"
4241
+ },
4242
+ "timeout": {
4243
+ "description": "How long to wait with --wait, in seconds (default: 3600)",
4244
+ "name": "timeout",
4245
+ "default": 3600,
4246
+ "hasDynamicHelp": false,
4247
+ "multiple": false,
4248
+ "type": "option"
3663
4249
  }
3664
4250
  },
3665
4251
  "hasDynamicHelp": false,
3666
4252
  "hiddenAliases": [],
3667
- "id": "keys:list",
4253
+ "id": "style:status",
3668
4254
  "pluginAlias": "faces-cli",
3669
4255
  "pluginName": "faces-cli",
3670
4256
  "pluginType": "core",
@@ -3674,20 +4260,30 @@
3674
4260
  "relativePath": [
3675
4261
  "dist",
3676
4262
  "commands",
3677
- "keys",
3678
- "list.js"
4263
+ "style",
4264
+ "status.js"
3679
4265
  ]
3680
4266
  },
3681
- "keys:revoke": {
4267
+ "style:upload": {
3682
4268
  "aliases": [],
3683
4269
  "args": {
3684
- "key_id": {
3685
- "description": "Key ID",
3686
- "name": "key_id",
4270
+ "alias": {
4271
+ "description": "Face alias",
4272
+ "name": "alias",
4273
+ "required": true
4274
+ },
4275
+ "file": {
4276
+ "description": "Corpus file",
4277
+ "name": "file",
3687
4278
  "required": true
3688
4279
  }
3689
4280
  },
3690
- "description": "Revoke an API key (JWT required)",
4281
+ "description": "Load a corpus of a person's own writing (a mail export, a message archive) as source material for style capture. This only stores the material: nothing is compiled and nothing is billed. Capture the style afterwards with style:make.",
4282
+ "examples": [
4283
+ "<%= config.bin %> <%= command.id %> alice ./mail.jsonl",
4284
+ "<%= config.bin %> <%= command.id %> alice ./thread.json --type thread_json",
4285
+ "<%= config.bin %> <%= command.id %> alice ./mail.jsonl --messages-per-room 100 --strict"
4286
+ ],
3691
4287
  "flags": {
3692
4288
  "json": {
3693
4289
  "description": "Format output as json.",
@@ -3720,16 +4316,36 @@
3720
4316
  "multiple": false,
3721
4317
  "type": "option"
3722
4318
  },
3723
- "yes": {
3724
- "description": "Skip confirmation",
3725
- "name": "yes",
4319
+ "type": {
4320
+ "description": "email_jsonl: one message per line, split across several rooms. thread_json: a JSON array that becomes a single room.",
4321
+ "name": "type",
4322
+ "default": "email_jsonl",
4323
+ "hasDynamicHelp": false,
4324
+ "multiple": false,
4325
+ "options": [
4326
+ "email_jsonl",
4327
+ "thread_json"
4328
+ ],
4329
+ "type": "option"
4330
+ },
4331
+ "messages-per-room": {
4332
+ "description": "How many messages per room when the type is email_jsonl (1-1000, default: 50)",
4333
+ "name": "messages-per-room",
4334
+ "default": 50,
4335
+ "hasDynamicHelp": false,
4336
+ "multiple": false,
4337
+ "type": "option"
4338
+ },
4339
+ "strict": {
4340
+ "description": "Reject the whole upload if any message is invalid. By default invalid messages are skipped and reported, because a corpus is statistical and a few bad lines are not worth losing the rest.",
4341
+ "name": "strict",
3726
4342
  "allowNo": false,
3727
4343
  "type": "boolean"
3728
4344
  }
3729
4345
  },
3730
4346
  "hasDynamicHelp": false,
3731
4347
  "hiddenAliases": [],
3732
- "id": "keys:revoke",
4348
+ "id": "style:upload",
3733
4349
  "pluginAlias": "faces-cli",
3734
4350
  "pluginName": "faces-cli",
3735
4351
  "pluginType": "core",
@@ -3739,20 +4355,24 @@
3739
4355
  "relativePath": [
3740
4356
  "dist",
3741
4357
  "commands",
3742
- "keys",
3743
- "revoke.js"
4358
+ "style",
4359
+ "upload.js"
3744
4360
  ]
3745
4361
  },
3746
- "keys:update": {
4362
+ "style:versions": {
3747
4363
  "aliases": [],
3748
4364
  "args": {
3749
- "key_id": {
3750
- "description": "Key ID",
3751
- "name": "key_id",
4365
+ "alias": {
4366
+ "description": "Face alias",
4367
+ "name": "alias",
3752
4368
  "required": true
3753
4369
  }
3754
4370
  },
3755
- "description": "Update API key metadata (JWT required)",
4371
+ "description": "List the styles captured for a face, and which one it is writing in now. Each style:make keeps the previous one, so this is what style:revert has to go back to.",
4372
+ "examples": [
4373
+ "<%= config.bin %> <%= command.id %> alice",
4374
+ "<%= config.bin %> <%= command.id %> alice --json"
4375
+ ],
3756
4376
  "flags": {
3757
4377
  "json": {
3758
4378
  "description": "Format output as json.",
@@ -3784,31 +4404,11 @@
3784
4404
  "hasDynamicHelp": false,
3785
4405
  "multiple": false,
3786
4406
  "type": "option"
3787
- },
3788
- "name": {
3789
- "description": "New key name",
3790
- "name": "name",
3791
- "hasDynamicHelp": false,
3792
- "multiple": false,
3793
- "type": "option"
3794
- },
3795
- "budget": {
3796
- "description": "New spend budget in USD",
3797
- "name": "budget",
3798
- "hasDynamicHelp": false,
3799
- "multiple": false,
3800
- "type": "option"
3801
- },
3802
- "reset-spent": {
3803
- "description": "Reset spent amount to zero",
3804
- "name": "reset-spent",
3805
- "allowNo": false,
3806
- "type": "boolean"
3807
4407
  }
3808
4408
  },
3809
4409
  "hasDynamicHelp": false,
3810
4410
  "hiddenAliases": [],
3811
- "id": "keys:update",
4411
+ "id": "style:versions",
3812
4412
  "pluginAlias": "faces-cli",
3813
4413
  "pluginName": "faces-cli",
3814
4414
  "pluginType": "core",
@@ -3818,8 +4418,8 @@
3818
4418
  "relativePath": [
3819
4419
  "dist",
3820
4420
  "commands",
3821
- "keys",
3822
- "update.js"
4421
+ "style",
4422
+ "versions.js"
3823
4423
  ]
3824
4424
  },
3825
4425
  "team:add": {
@@ -4993,7 +5593,7 @@
4993
5593
  "required": true
4994
5594
  }
4995
5595
  },
4996
- "description": "List documents for a face",
5596
+ "description": "List documents for a face. Each document's full text is omitted unless --verbose, so a face with a real corpus stays readable. For a table of every source, documents and threads together, use face:sources.",
4997
5597
  "flags": {
4998
5598
  "json": {
4999
5599
  "description": "Format output as json.",
@@ -5025,6 +5625,12 @@
5025
5625
  "hasDynamicHelp": false,
5026
5626
  "multiple": false,
5027
5627
  "type": "option"
5628
+ },
5629
+ "verbose": {
5630
+ "description": "Include each document's full text",
5631
+ "name": "verbose",
5632
+ "allowNo": false,
5633
+ "type": "boolean"
5028
5634
  }
5029
5635
  },
5030
5636
  "hasDynamicHelp": false,
@@ -6517,5 +7123,5 @@
6517
7123
  ]
6518
7124
  }
6519
7125
  },
6520
- "version": "1.7.14"
7126
+ "version": "1.8.0"
6521
7127
  }