faces-cli 1.6.18 → 1.7.1

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.
@@ -120,23 +120,10 @@
120
120
  "state.js"
121
121
  ]
122
122
  },
123
- "auth:connect": {
123
+ "billing:balance": {
124
124
  "aliases": [],
125
- "args": {
126
- "provider": {
127
- "description": "OAuth provider to connect",
128
- "name": "provider",
129
- "options": [
130
- "openai"
131
- ],
132
- "required": true
133
- }
134
- },
135
- "description": "Connect your ChatGPT account to Faces via device-code authorization (Subscription Connect plan)",
136
- "examples": [
137
- "<%= config.bin %> auth connect openai",
138
- "<%= config.bin %> auth connect openai --json"
139
- ],
125
+ "args": {},
126
+ "description": "Show credit balance and payment method status",
140
127
  "flags": {
141
128
  "json": {
142
129
  "description": "Format output as json.",
@@ -172,7 +159,7 @@
172
159
  },
173
160
  "hasDynamicHelp": false,
174
161
  "hiddenAliases": [],
175
- "id": "auth:connect",
162
+ "id": "billing:balance",
176
163
  "pluginAlias": "faces-cli",
177
164
  "pluginName": "faces-cli",
178
165
  "pluginType": "core",
@@ -182,18 +169,14 @@
182
169
  "relativePath": [
183
170
  "dist",
184
171
  "commands",
185
- "auth",
186
- "connect.js"
172
+ "billing",
173
+ "balance.js"
187
174
  ]
188
175
  },
189
- "auth:connections": {
176
+ "billing:card-setup": {
190
177
  "aliases": [],
191
178
  "args": {},
192
- "description": "List connected OAuth provider accounts",
193
- "examples": [
194
- "<%= config.bin %> auth connections",
195
- "<%= config.bin %> auth connections --json"
196
- ],
179
+ "description": "Get a Stripe card setup URL to save a payment method",
197
180
  "flags": {
198
181
  "json": {
199
182
  "description": "Format output as json.",
@@ -229,7 +212,7 @@
229
212
  },
230
213
  "hasDynamicHelp": false,
231
214
  "hiddenAliases": [],
232
- "id": "auth:connections",
215
+ "id": "billing:card-setup",
233
216
  "pluginAlias": "faces-cli",
234
217
  "pluginName": "faces-cli",
235
218
  "pluginType": "core",
@@ -239,26 +222,14 @@
239
222
  "relativePath": [
240
223
  "dist",
241
224
  "commands",
242
- "auth",
243
- "connections.js"
225
+ "billing",
226
+ "card-setup.js"
244
227
  ]
245
228
  },
246
- "auth:disconnect": {
229
+ "billing:llm-costs": {
247
230
  "aliases": [],
248
- "args": {
249
- "provider": {
250
- "description": "OAuth provider to disconnect",
251
- "name": "provider",
252
- "options": [
253
- "openai"
254
- ],
255
- "required": true
256
- }
257
- },
258
- "description": "Disconnect a linked OAuth provider account",
259
- "examples": [
260
- "<%= config.bin %> auth disconnect openai"
261
- ],
231
+ "args": {},
232
+ "description": "List available LLMs and their per-token costs",
262
233
  "flags": {
263
234
  "json": {
264
235
  "description": "Format output as json.",
@@ -290,11 +261,18 @@
290
261
  "hasDynamicHelp": false,
291
262
  "multiple": false,
292
263
  "type": "option"
264
+ },
265
+ "provider": {
266
+ "description": "Filter by provider (e.g. openai, anthropic)",
267
+ "name": "provider",
268
+ "hasDynamicHelp": false,
269
+ "multiple": false,
270
+ "type": "option"
293
271
  }
294
272
  },
295
273
  "hasDynamicHelp": false,
296
274
  "hiddenAliases": [],
297
- "id": "auth:disconnect",
275
+ "id": "billing:llm-costs",
298
276
  "pluginAlias": "faces-cli",
299
277
  "pluginName": "faces-cli",
300
278
  "pluginType": "core",
@@ -304,14 +282,14 @@
304
282
  "relativePath": [
305
283
  "dist",
306
284
  "commands",
307
- "auth",
308
- "disconnect.js"
285
+ "billing",
286
+ "llm-costs.js"
309
287
  ]
310
288
  },
311
- "auth:login": {
289
+ "billing:quota": {
312
290
  "aliases": [],
313
291
  "args": {},
314
- "description": "Login and save JWT credentials",
292
+ "description": "Show compilation stats per face (deprecated — use compile:stats)",
315
293
  "flags": {
316
294
  "json": {
317
295
  "description": "Format output as json.",
@@ -343,27 +321,11 @@
343
321
  "hasDynamicHelp": false,
344
322
  "multiple": false,
345
323
  "type": "option"
346
- },
347
- "email": {
348
- "description": "Account email",
349
- "name": "email",
350
- "required": true,
351
- "hasDynamicHelp": false,
352
- "multiple": false,
353
- "type": "option"
354
- },
355
- "password": {
356
- "description": "Account password",
357
- "name": "password",
358
- "required": true,
359
- "hasDynamicHelp": false,
360
- "multiple": false,
361
- "type": "option"
362
324
  }
363
325
  },
364
326
  "hasDynamicHelp": false,
365
327
  "hiddenAliases": [],
366
- "id": "auth:login",
328
+ "id": "billing:quota",
367
329
  "pluginAlias": "faces-cli",
368
330
  "pluginName": "faces-cli",
369
331
  "pluginType": "core",
@@ -373,14 +335,14 @@
373
335
  "relativePath": [
374
336
  "dist",
375
337
  "commands",
376
- "auth",
377
- "login.js"
338
+ "billing",
339
+ "quota.js"
378
340
  ]
379
341
  },
380
- "auth:logout": {
342
+ "billing:subscription": {
381
343
  "aliases": [],
382
344
  "args": {},
383
- "description": "Clear saved credentials",
345
+ "description": "Show current plan, face count, and renewal date",
384
346
  "flags": {
385
347
  "json": {
386
348
  "description": "Format output as json.",
@@ -416,7 +378,7 @@
416
378
  },
417
379
  "hasDynamicHelp": false,
418
380
  "hiddenAliases": [],
419
- "id": "auth:logout",
381
+ "id": "billing:subscription",
420
382
  "pluginAlias": "faces-cli",
421
383
  "pluginName": "faces-cli",
422
384
  "pluginType": "core",
@@ -426,14 +388,14 @@
426
388
  "relativePath": [
427
389
  "dist",
428
390
  "commands",
429
- "auth",
430
- "logout.js"
391
+ "billing",
392
+ "subscription.js"
431
393
  ]
432
394
  },
433
- "auth:refresh": {
395
+ "billing:topup": {
434
396
  "aliases": [],
435
397
  "args": {},
436
- "description": "Exchange current JWT for a fresh one",
398
+ "description": "Top up credit balance using saved payment method",
437
399
  "flags": {
438
400
  "json": {
439
401
  "description": "Format output as json.",
@@ -465,11 +427,26 @@
465
427
  "hasDynamicHelp": false,
466
428
  "multiple": false,
467
429
  "type": "option"
430
+ },
431
+ "amount": {
432
+ "description": "Top-up amount in USD (min $1)",
433
+ "name": "amount",
434
+ "required": true,
435
+ "hasDynamicHelp": false,
436
+ "multiple": false,
437
+ "type": "option"
438
+ },
439
+ "payment-ref": {
440
+ "description": "Payment reference (admin/test path)",
441
+ "name": "payment-ref",
442
+ "hasDynamicHelp": false,
443
+ "multiple": false,
444
+ "type": "option"
468
445
  }
469
446
  },
470
447
  "hasDynamicHelp": false,
471
448
  "hiddenAliases": [],
472
- "id": "auth:refresh",
449
+ "id": "billing:topup",
473
450
  "pluginAlias": "faces-cli",
474
451
  "pluginName": "faces-cli",
475
452
  "pluginType": "core",
@@ -479,14 +456,14 @@
479
456
  "relativePath": [
480
457
  "dist",
481
458
  "commands",
482
- "auth",
483
- "refresh.js"
459
+ "billing",
460
+ "topup.js"
484
461
  ]
485
462
  },
486
- "auth:register": {
463
+ "billing:usage": {
487
464
  "aliases": [],
488
465
  "args": {},
489
- "description": "Create a new Faces account",
466
+ "description": "Aggregated usage analytics",
490
467
  "flags": {
491
468
  "json": {
492
469
  "description": "Format output as json.",
@@ -519,53 +496,37 @@
519
496
  "multiple": false,
520
497
  "type": "option"
521
498
  },
522
- "email": {
523
- "description": "Email address",
524
- "name": "email",
525
- "required": true,
526
- "hasDynamicHelp": false,
527
- "multiple": false,
528
- "type": "option"
529
- },
530
- "password": {
531
- "description": "Password",
532
- "name": "password",
533
- "required": true,
534
- "hasDynamicHelp": false,
535
- "multiple": false,
536
- "type": "option"
537
- },
538
- "username": {
539
- "description": "Username (lowercase, dashes, numbers)",
540
- "name": "username",
541
- "required": true,
499
+ "group-by": {
500
+ "description": "Group results",
501
+ "name": "group-by",
542
502
  "hasDynamicHelp": false,
543
503
  "multiple": false,
504
+ "options": [
505
+ "api_key",
506
+ "model",
507
+ "llm",
508
+ "date"
509
+ ],
544
510
  "type": "option"
545
511
  },
546
- "invite-key": {
547
- "description": "Invite key (if required)",
548
- "name": "invite-key",
512
+ "from": {
513
+ "description": "Start date (YYYY-MM-DD)",
514
+ "name": "from",
549
515
  "hasDynamicHelp": false,
550
516
  "multiple": false,
551
517
  "type": "option"
552
518
  },
553
- "plan": {
554
- "description": "Plan to subscribe to: \"free\" ($5 activation) or \"connect\" ($17/mo, no activation fee)",
555
- "name": "plan",
556
- "default": "free",
519
+ "to": {
520
+ "description": "End date (YYYY-MM-DD)",
521
+ "name": "to",
557
522
  "hasDynamicHelp": false,
558
523
  "multiple": false,
559
- "options": [
560
- "free",
561
- "connect"
562
- ],
563
524
  "type": "option"
564
525
  }
565
526
  },
566
527
  "hasDynamicHelp": false,
567
528
  "hiddenAliases": [],
568
- "id": "auth:register",
529
+ "id": "billing:usage",
569
530
  "pluginAlias": "faces-cli",
570
531
  "pluginName": "faces-cli",
571
532
  "pluginType": "core",
@@ -575,14 +536,27 @@
575
536
  "relativePath": [
576
537
  "dist",
577
538
  "commands",
578
- "auth",
579
- "register.js"
539
+ "billing",
540
+ "usage.js"
580
541
  ]
581
542
  },
582
- "auth:whoami": {
543
+ "auth:connect": {
583
544
  "aliases": [],
584
- "args": {},
585
- "description": "Print current user profile and auth diagnostic",
545
+ "args": {
546
+ "provider": {
547
+ "description": "OAuth provider to connect",
548
+ "name": "provider",
549
+ "options": [
550
+ "openai"
551
+ ],
552
+ "required": true
553
+ }
554
+ },
555
+ "description": "Connect your ChatGPT account to Faces via device-code authorization (Subscription Connect plan)",
556
+ "examples": [
557
+ "<%= config.bin %> auth connect openai",
558
+ "<%= config.bin %> auth connect openai --json"
559
+ ],
586
560
  "flags": {
587
561
  "json": {
588
562
  "description": "Format output as json.",
@@ -618,7 +592,7 @@
618
592
  },
619
593
  "hasDynamicHelp": false,
620
594
  "hiddenAliases": [],
621
- "id": "auth:whoami",
595
+ "id": "auth:connect",
622
596
  "pluginAlias": "faces-cli",
623
597
  "pluginName": "faces-cli",
624
598
  "pluginType": "core",
@@ -629,13 +603,17 @@
629
603
  "dist",
630
604
  "commands",
631
605
  "auth",
632
- "whoami.js"
606
+ "connect.js"
633
607
  ]
634
608
  },
635
- "catalog:backup": {
609
+ "auth:connections": {
636
610
  "aliases": [],
637
611
  "args": {},
638
- "description": "Snapshot all faces, teams, and source material for migration",
612
+ "description": "List connected OAuth provider accounts",
613
+ "examples": [
614
+ "<%= config.bin %> auth connections",
615
+ "<%= config.bin %> auth connections --json"
616
+ ],
639
617
  "flags": {
640
618
  "json": {
641
619
  "description": "Format output as json.",
@@ -671,7 +649,7 @@
671
649
  },
672
650
  "hasDynamicHelp": false,
673
651
  "hiddenAliases": [],
674
- "id": "catalog:backup",
652
+ "id": "auth:connections",
675
653
  "pluginAlias": "faces-cli",
676
654
  "pluginName": "faces-cli",
677
655
  "pluginType": "core",
@@ -681,14 +659,26 @@
681
659
  "relativePath": [
682
660
  "dist",
683
661
  "commands",
684
- "catalog",
685
- "backup.js"
662
+ "auth",
663
+ "connections.js"
686
664
  ]
687
665
  },
688
- "catalog:doctor": {
666
+ "auth:disconnect": {
689
667
  "aliases": [],
690
- "args": {},
691
- "description": "Diagnose and repair the local face and team catalog",
668
+ "args": {
669
+ "provider": {
670
+ "description": "OAuth provider to disconnect",
671
+ "name": "provider",
672
+ "options": [
673
+ "openai"
674
+ ],
675
+ "required": true
676
+ }
677
+ },
678
+ "description": "Disconnect a linked OAuth provider account",
679
+ "examples": [
680
+ "<%= config.bin %> auth disconnect openai"
681
+ ],
692
682
  "flags": {
693
683
  "json": {
694
684
  "description": "Format output as json.",
@@ -720,23 +710,11 @@
720
710
  "hasDynamicHelp": false,
721
711
  "multiple": false,
722
712
  "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
713
  }
736
714
  },
737
715
  "hasDynamicHelp": false,
738
716
  "hiddenAliases": [],
739
- "id": "catalog:doctor",
717
+ "id": "auth:disconnect",
740
718
  "pluginAlias": "faces-cli",
741
719
  "pluginName": "faces-cli",
742
720
  "pluginType": "core",
@@ -746,14 +724,14 @@
746
724
  "relativePath": [
747
725
  "dist",
748
726
  "commands",
749
- "catalog",
750
- "doctor.js"
727
+ "auth",
728
+ "disconnect.js"
751
729
  ]
752
730
  },
753
- "catalog:list": {
731
+ "auth:login": {
754
732
  "aliases": [],
755
733
  "args": {},
756
- "description": "List all faces in the local catalog",
734
+ "description": "Login and save JWT credentials",
757
735
  "flags": {
758
736
  "json": {
759
737
  "description": "Format output as json.",
@@ -785,11 +763,27 @@
785
763
  "hasDynamicHelp": false,
786
764
  "multiple": false,
787
765
  "type": "option"
766
+ },
767
+ "email": {
768
+ "description": "Account email",
769
+ "name": "email",
770
+ "required": true,
771
+ "hasDynamicHelp": false,
772
+ "multiple": false,
773
+ "type": "option"
774
+ },
775
+ "password": {
776
+ "description": "Account password",
777
+ "name": "password",
778
+ "required": true,
779
+ "hasDynamicHelp": false,
780
+ "multiple": false,
781
+ "type": "option"
788
782
  }
789
783
  },
790
784
  "hasDynamicHelp": false,
791
785
  "hiddenAliases": [],
792
- "id": "catalog:list",
786
+ "id": "auth:login",
793
787
  "pluginAlias": "faces-cli",
794
788
  "pluginName": "faces-cli",
795
789
  "pluginType": "core",
@@ -799,14 +793,14 @@
799
793
  "relativePath": [
800
794
  "dist",
801
795
  "commands",
802
- "catalog",
803
- "list.js"
796
+ "auth",
797
+ "login.js"
804
798
  ]
805
799
  },
806
- "catalog:manyfaced": {
800
+ "auth:logout": {
807
801
  "aliases": [],
808
802
  "args": {},
809
- "description": "Browse and install community manyfaced skills from github.com/facessh/manyfaced",
803
+ "description": "Clear saved credentials",
810
804
  "flags": {
811
805
  "json": {
812
806
  "description": "Format output as json.",
@@ -838,38 +832,11 @@
838
832
  "hasDynamicHelp": false,
839
833
  "multiple": false,
840
834
  "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"
868
835
  }
869
836
  },
870
837
  "hasDynamicHelp": false,
871
838
  "hiddenAliases": [],
872
- "id": "catalog:manyfaced",
839
+ "id": "auth:logout",
873
840
  "pluginAlias": "faces-cli",
874
841
  "pluginName": "faces-cli",
875
842
  "pluginType": "core",
@@ -879,19 +846,14 @@
879
846
  "relativePath": [
880
847
  "dist",
881
848
  "commands",
882
- "catalog",
883
- "manyfaced.js"
849
+ "auth",
850
+ "logout.js"
884
851
  ]
885
852
  },
886
- "catalog:restore": {
853
+ "auth:refresh": {
887
854
  "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",
855
+ "args": {},
856
+ "description": "Exchange current JWT for a fresh one",
895
857
  "flags": {
896
858
  "json": {
897
859
  "description": "Format output as json.",
@@ -923,17 +885,11 @@
923
885
  "hasDynamicHelp": false,
924
886
  "multiple": false,
925
887
  "type": "option"
926
- },
927
- "compile": {
928
- "description": "Run compile:all after restoring",
929
- "name": "compile",
930
- "allowNo": false,
931
- "type": "boolean"
932
888
  }
933
889
  },
934
890
  "hasDynamicHelp": false,
935
891
  "hiddenAliases": [],
936
- "id": "catalog:restore",
892
+ "id": "auth:refresh",
937
893
  "pluginAlias": "faces-cli",
938
894
  "pluginName": "faces-cli",
939
895
  "pluginType": "core",
@@ -943,14 +899,14 @@
943
899
  "relativePath": [
944
900
  "dist",
945
901
  "commands",
946
- "catalog",
947
- "restore.js"
902
+ "auth",
903
+ "refresh.js"
948
904
  ]
949
905
  },
950
- "billing:balance": {
906
+ "auth:register": {
951
907
  "aliases": [],
952
908
  "args": {},
953
- "description": "Show credit balance and payment method status",
909
+ "description": "Create a new Faces account",
954
910
  "flags": {
955
911
  "json": {
956
912
  "description": "Format output as json.",
@@ -982,11 +938,54 @@
982
938
  "hasDynamicHelp": false,
983
939
  "multiple": false,
984
940
  "type": "option"
941
+ },
942
+ "email": {
943
+ "description": "Email address",
944
+ "name": "email",
945
+ "required": true,
946
+ "hasDynamicHelp": false,
947
+ "multiple": false,
948
+ "type": "option"
949
+ },
950
+ "password": {
951
+ "description": "Password",
952
+ "name": "password",
953
+ "required": true,
954
+ "hasDynamicHelp": false,
955
+ "multiple": false,
956
+ "type": "option"
957
+ },
958
+ "username": {
959
+ "description": "Username (lowercase, dashes, numbers)",
960
+ "name": "username",
961
+ "required": true,
962
+ "hasDynamicHelp": false,
963
+ "multiple": false,
964
+ "type": "option"
965
+ },
966
+ "invite-key": {
967
+ "description": "Invite key (if required)",
968
+ "name": "invite-key",
969
+ "hasDynamicHelp": false,
970
+ "multiple": false,
971
+ "type": "option"
972
+ },
973
+ "plan": {
974
+ "description": "Plan to subscribe to: \"free\" ($5 activation) or \"connect\" ($17/mo, no activation fee)",
975
+ "name": "plan",
976
+ "default": "free",
977
+ "hasDynamicHelp": false,
978
+ "multiple": false,
979
+ "options": [
980
+ "free",
981
+ "connect"
982
+ ],
983
+ "type": "option"
985
984
  }
986
985
  },
987
986
  "hasDynamicHelp": false,
988
987
  "hiddenAliases": [],
989
- "id": "billing:balance",
988
+ "id": "auth:register",
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
+ "auth",
999
+ "register.js"
1001
1000
  ]
1002
1001
  },
1003
- "billing:card-setup": {
1002
+ "auth:whoami": {
1004
1003
  "aliases": [],
1005
1004
  "args": {},
1006
- "description": "Get a Stripe card setup URL to save a payment method",
1005
+ "description": "Print current user profile and auth diagnostic",
1007
1006
  "flags": {
1008
1007
  "json": {
1009
1008
  "description": "Format output as json.",
@@ -1039,7 +1038,7 @@
1039
1038
  },
1040
1039
  "hasDynamicHelp": false,
1041
1040
  "hiddenAliases": [],
1042
- "id": "billing:card-setup",
1041
+ "id": "auth:whoami",
1043
1042
  "pluginAlias": "faces-cli",
1044
1043
  "pluginName": "faces-cli",
1045
1044
  "pluginType": "core",
@@ -1049,14 +1048,14 @@
1049
1048
  "relativePath": [
1050
1049
  "dist",
1051
1050
  "commands",
1052
- "billing",
1053
- "card-setup.js"
1051
+ "auth",
1052
+ "whoami.js"
1054
1053
  ]
1055
1054
  },
1056
- "billing:llm-costs": {
1055
+ "catalog:backup": {
1057
1056
  "aliases": [],
1058
1057
  "args": {},
1059
- "description": "List available LLMs and their per-token costs",
1058
+ "description": "Snapshot all faces, teams, and source material for migration",
1060
1059
  "flags": {
1061
1060
  "json": {
1062
1061
  "description": "Format output as json.",
@@ -1088,18 +1087,11 @@
1088
1087
  "hasDynamicHelp": false,
1089
1088
  "multiple": false,
1090
1089
  "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
1090
  }
1099
1091
  },
1100
1092
  "hasDynamicHelp": false,
1101
1093
  "hiddenAliases": [],
1102
- "id": "billing:llm-costs",
1094
+ "id": "catalog:backup",
1103
1095
  "pluginAlias": "faces-cli",
1104
1096
  "pluginName": "faces-cli",
1105
1097
  "pluginType": "core",
@@ -1109,14 +1101,14 @@
1109
1101
  "relativePath": [
1110
1102
  "dist",
1111
1103
  "commands",
1112
- "billing",
1113
- "llm-costs.js"
1104
+ "catalog",
1105
+ "backup.js"
1114
1106
  ]
1115
1107
  },
1116
- "billing:quota": {
1108
+ "catalog:doctor": {
1117
1109
  "aliases": [],
1118
1110
  "args": {},
1119
- "description": "Show compilation stats per face (deprecated use compile:stats)",
1111
+ "description": "Diagnose and repair the local face and team catalog",
1120
1112
  "flags": {
1121
1113
  "json": {
1122
1114
  "description": "Format output as json.",
@@ -1148,11 +1140,23 @@
1148
1140
  "hasDynamicHelp": false,
1149
1141
  "multiple": false,
1150
1142
  "type": "option"
1143
+ },
1144
+ "fix": {
1145
+ "description": "Rebuild missing or stale catalog entries from API",
1146
+ "name": "fix",
1147
+ "allowNo": false,
1148
+ "type": "boolean"
1149
+ },
1150
+ "generate": {
1151
+ "description": "Fix + generate missing descriptions via LLM",
1152
+ "name": "generate",
1153
+ "allowNo": false,
1154
+ "type": "boolean"
1151
1155
  }
1152
1156
  },
1153
1157
  "hasDynamicHelp": false,
1154
1158
  "hiddenAliases": [],
1155
- "id": "billing:quota",
1159
+ "id": "catalog:doctor",
1156
1160
  "pluginAlias": "faces-cli",
1157
1161
  "pluginName": "faces-cli",
1158
1162
  "pluginType": "core",
@@ -1162,14 +1166,14 @@
1162
1166
  "relativePath": [
1163
1167
  "dist",
1164
1168
  "commands",
1165
- "billing",
1166
- "quota.js"
1169
+ "catalog",
1170
+ "doctor.js"
1167
1171
  ]
1168
1172
  },
1169
- "billing:subscription": {
1173
+ "catalog:list": {
1170
1174
  "aliases": [],
1171
1175
  "args": {},
1172
- "description": "Show current plan, face count, and renewal date",
1176
+ "description": "List all faces in the local catalog",
1173
1177
  "flags": {
1174
1178
  "json": {
1175
1179
  "description": "Format output as json.",
@@ -1205,7 +1209,7 @@
1205
1209
  },
1206
1210
  "hasDynamicHelp": false,
1207
1211
  "hiddenAliases": [],
1208
- "id": "billing:subscription",
1212
+ "id": "catalog:list",
1209
1213
  "pluginAlias": "faces-cli",
1210
1214
  "pluginName": "faces-cli",
1211
1215
  "pluginType": "core",
@@ -1215,14 +1219,14 @@
1215
1219
  "relativePath": [
1216
1220
  "dist",
1217
1221
  "commands",
1218
- "billing",
1219
- "subscription.js"
1222
+ "catalog",
1223
+ "list.js"
1220
1224
  ]
1221
1225
  },
1222
- "billing:topup": {
1226
+ "catalog:manyfaced": {
1223
1227
  "aliases": [],
1224
1228
  "args": {},
1225
- "description": "Top up credit balance using saved payment method",
1229
+ "description": "Browse and install community manyfaced skills from github.com/facessh/manyfaced",
1226
1230
  "flags": {
1227
1231
  "json": {
1228
1232
  "description": "Format output as json.",
@@ -1255,25 +1259,37 @@
1255
1259
  "multiple": false,
1256
1260
  "type": "option"
1257
1261
  },
1258
- "amount": {
1259
- "description": "Top-up amount in USD (min $1)",
1260
- "name": "amount",
1261
- "required": true,
1262
+ "skill": {
1263
+ "description": "Show details for a specific skill",
1264
+ "name": "skill",
1262
1265
  "hasDynamicHelp": false,
1263
1266
  "multiple": false,
1264
1267
  "type": "option"
1265
1268
  },
1266
- "payment-ref": {
1267
- "description": "Payment reference (admin/test path)",
1268
- "name": "payment-ref",
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",
1269
1279
  "hasDynamicHelp": false,
1270
1280
  "multiple": false,
1271
1281
  "type": "option"
1282
+ },
1283
+ "refresh": {
1284
+ "description": "Force refresh the skill index (ignore cache)",
1285
+ "name": "refresh",
1286
+ "allowNo": false,
1287
+ "type": "boolean"
1272
1288
  }
1273
1289
  },
1274
1290
  "hasDynamicHelp": false,
1275
1291
  "hiddenAliases": [],
1276
- "id": "billing:topup",
1292
+ "id": "catalog:manyfaced",
1277
1293
  "pluginAlias": "faces-cli",
1278
1294
  "pluginName": "faces-cli",
1279
1295
  "pluginType": "core",
@@ -1283,14 +1299,19 @@
1283
1299
  "relativePath": [
1284
1300
  "dist",
1285
1301
  "commands",
1286
- "billing",
1287
- "topup.js"
1302
+ "catalog",
1303
+ "manyfaced.js"
1288
1304
  ]
1289
1305
  },
1290
- "billing:usage": {
1306
+ "catalog:restore": {
1291
1307
  "aliases": [],
1292
- "args": {},
1293
- "description": "Aggregated usage analytics",
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",
1294
1315
  "flags": {
1295
1316
  "json": {
1296
1317
  "description": "Format output as json.",
@@ -1323,37 +1344,16 @@
1323
1344
  "multiple": false,
1324
1345
  "type": "option"
1325
1346
  },
1326
- "group-by": {
1327
- "description": "Group results",
1328
- "name": "group-by",
1329
- "hasDynamicHelp": false,
1330
- "multiple": false,
1331
- "options": [
1332
- "api_key",
1333
- "model",
1334
- "llm",
1335
- "date"
1336
- ],
1337
- "type": "option"
1338
- },
1339
- "from": {
1340
- "description": "Start date (YYYY-MM-DD)",
1341
- "name": "from",
1342
- "hasDynamicHelp": false,
1343
- "multiple": false,
1344
- "type": "option"
1345
- },
1346
- "to": {
1347
- "description": "End date (YYYY-MM-DD)",
1348
- "name": "to",
1349
- "hasDynamicHelp": false,
1350
- "multiple": false,
1351
- "type": "option"
1347
+ "compile": {
1348
+ "description": "Run compile:all after restoring",
1349
+ "name": "compile",
1350
+ "allowNo": false,
1351
+ "type": "boolean"
1352
1352
  }
1353
1353
  },
1354
1354
  "hasDynamicHelp": false,
1355
1355
  "hiddenAliases": [],
1356
- "id": "billing:usage",
1356
+ "id": "catalog:restore",
1357
1357
  "pluginAlias": "faces-cli",
1358
1358
  "pluginName": "faces-cli",
1359
1359
  "pluginType": "core",
@@ -1363,20 +1363,20 @@
1363
1363
  "relativePath": [
1364
1364
  "dist",
1365
1365
  "commands",
1366
- "billing",
1367
- "usage.js"
1366
+ "catalog",
1367
+ "restore.js"
1368
1368
  ]
1369
1369
  },
1370
1370
  "chat:chat": {
1371
1371
  "aliases": [],
1372
1372
  "args": {
1373
1373
  "face_username": {
1374
- "description": "Face alias (or alias@model)",
1374
+ "description": "Face alias (alias@model, or owner:alias@model for a published face)",
1375
1375
  "name": "face_username",
1376
1376
  "required": true
1377
1377
  }
1378
1378
  },
1379
- "description": "Chat via a face. Auto-routes to the correct API endpoint based on model provider.",
1379
+ "description": "Chat via a face. Auto-routes to the correct API endpoint based on the model catalog.",
1380
1380
  "flags": {
1381
1381
  "json": {
1382
1382
  "description": "Format output as json.",
@@ -1460,7 +1460,7 @@
1460
1460
  "type": "option"
1461
1461
  },
1462
1462
  "responses": {
1463
- "description": "Use OpenAI Responses API instead of Chat Completions",
1463
+ "description": "Force the OpenAI Responses API endpoint (escape hatch; routing is automatic otherwise)",
1464
1464
  "name": "responses",
1465
1465
  "allowNo": false,
1466
1466
  "type": "boolean"
@@ -1492,7 +1492,7 @@
1492
1492
  "aliases": [],
1493
1493
  "args": {
1494
1494
  "face_model": {
1495
- "description": "Face model (e.g. myface or myface@claude-sonnet-4-6)",
1495
+ "description": "Face model (e.g. myface, myface@claude-sonnet-4-6, or head:judge@claude-sonnet-4-6)",
1496
1496
  "name": "face_model",
1497
1497
  "required": true
1498
1498
  }
@@ -1587,7 +1587,7 @@
1587
1587
  "aliases": [],
1588
1588
  "args": {
1589
1589
  "face_model": {
1590
- "description": "Face model (e.g. myface or myface@gpt-4o)",
1590
+ "description": "Face model (e.g. myface, myface@gpt-4o, or head:logician@gpt-5.4)",
1591
1591
  "name": "face_model",
1592
1592
  "required": true
1593
1593
  }
@@ -1674,7 +1674,7 @@
1674
1674
  "aliases": [],
1675
1675
  "args": {
1676
1676
  "face_username": {
1677
- "description": "Face alias (or alias@model) — required when starting a new thread",
1677
+ "description": "Face alias (alias@model, or owner:alias@model for a published face) — required when starting a new thread",
1678
1678
  "name": "face_username",
1679
1679
  "required": false
1680
1680
  }
@@ -1816,182 +1816,6 @@
1816
1816
  "thread.js"
1817
1817
  ]
1818
1818
  },
1819
- "config:clear": {
1820
- "aliases": [],
1821
- "args": {},
1822
- "description": "Delete all saved credentials and config",
1823
- "flags": {
1824
- "json": {
1825
- "description": "Format output as json.",
1826
- "helpGroup": "GLOBAL",
1827
- "name": "json",
1828
- "allowNo": false,
1829
- "type": "boolean"
1830
- },
1831
- "base-url": {
1832
- "description": "API base URL",
1833
- "env": "FACES_BASE_URL",
1834
- "name": "base-url",
1835
- "hasDynamicHelp": false,
1836
- "multiple": false,
1837
- "type": "option"
1838
- },
1839
- "token": {
1840
- "description": "JWT bearer token",
1841
- "env": "FACES_TOKEN",
1842
- "name": "token",
1843
- "hasDynamicHelp": false,
1844
- "multiple": false,
1845
- "type": "option"
1846
- },
1847
- "api-key": {
1848
- "description": "API key",
1849
- "env": "FACES_API_KEY",
1850
- "name": "api-key",
1851
- "hasDynamicHelp": false,
1852
- "multiple": false,
1853
- "type": "option"
1854
- },
1855
- "yes": {
1856
- "description": "Skip confirmation",
1857
- "name": "yes",
1858
- "allowNo": false,
1859
- "type": "boolean"
1860
- }
1861
- },
1862
- "hasDynamicHelp": false,
1863
- "hiddenAliases": [],
1864
- "id": "config:clear",
1865
- "pluginAlias": "faces-cli",
1866
- "pluginName": "faces-cli",
1867
- "pluginType": "core",
1868
- "strict": true,
1869
- "enableJsonFlag": true,
1870
- "isESM": true,
1871
- "relativePath": [
1872
- "dist",
1873
- "commands",
1874
- "config",
1875
- "clear.js"
1876
- ]
1877
- },
1878
- "config:set": {
1879
- "aliases": [],
1880
- "args": {
1881
- "key": {
1882
- "description": "Config key",
1883
- "name": "key",
1884
- "required": true
1885
- },
1886
- "value": {
1887
- "description": "Config value",
1888
- "name": "value",
1889
- "required": true
1890
- }
1891
- },
1892
- "description": "Set a config value (e.g. base_url, api_key, token)",
1893
- "flags": {
1894
- "json": {
1895
- "description": "Format output as json.",
1896
- "helpGroup": "GLOBAL",
1897
- "name": "json",
1898
- "allowNo": false,
1899
- "type": "boolean"
1900
- },
1901
- "base-url": {
1902
- "description": "API base URL",
1903
- "env": "FACES_BASE_URL",
1904
- "name": "base-url",
1905
- "hasDynamicHelp": false,
1906
- "multiple": false,
1907
- "type": "option"
1908
- },
1909
- "token": {
1910
- "description": "JWT bearer token",
1911
- "env": "FACES_TOKEN",
1912
- "name": "token",
1913
- "hasDynamicHelp": false,
1914
- "multiple": false,
1915
- "type": "option"
1916
- },
1917
- "api-key": {
1918
- "description": "API key",
1919
- "env": "FACES_API_KEY",
1920
- "name": "api-key",
1921
- "hasDynamicHelp": false,
1922
- "multiple": false,
1923
- "type": "option"
1924
- }
1925
- },
1926
- "hasDynamicHelp": false,
1927
- "hiddenAliases": [],
1928
- "id": "config:set",
1929
- "pluginAlias": "faces-cli",
1930
- "pluginName": "faces-cli",
1931
- "pluginType": "core",
1932
- "strict": true,
1933
- "enableJsonFlag": true,
1934
- "isESM": true,
1935
- "relativePath": [
1936
- "dist",
1937
- "commands",
1938
- "config",
1939
- "set.js"
1940
- ]
1941
- },
1942
- "config:show": {
1943
- "aliases": [],
1944
- "args": {},
1945
- "description": "Print current config (credentials are masked)",
1946
- "flags": {
1947
- "json": {
1948
- "description": "Format output as json.",
1949
- "helpGroup": "GLOBAL",
1950
- "name": "json",
1951
- "allowNo": false,
1952
- "type": "boolean"
1953
- },
1954
- "base-url": {
1955
- "description": "API base URL",
1956
- "env": "FACES_BASE_URL",
1957
- "name": "base-url",
1958
- "hasDynamicHelp": false,
1959
- "multiple": false,
1960
- "type": "option"
1961
- },
1962
- "token": {
1963
- "description": "JWT bearer token",
1964
- "env": "FACES_TOKEN",
1965
- "name": "token",
1966
- "hasDynamicHelp": false,
1967
- "multiple": false,
1968
- "type": "option"
1969
- },
1970
- "api-key": {
1971
- "description": "API key",
1972
- "env": "FACES_API_KEY",
1973
- "name": "api-key",
1974
- "hasDynamicHelp": false,
1975
- "multiple": false,
1976
- "type": "option"
1977
- }
1978
- },
1979
- "hasDynamicHelp": false,
1980
- "hiddenAliases": [],
1981
- "id": "config:show",
1982
- "pluginAlias": "faces-cli",
1983
- "pluginName": "faces-cli",
1984
- "pluginType": "core",
1985
- "strict": true,
1986
- "enableJsonFlag": true,
1987
- "isESM": true,
1988
- "relativePath": [
1989
- "dist",
1990
- "commands",
1991
- "config",
1992
- "show.js"
1993
- ]
1994
- },
1995
1819
  "compile:all": {
1996
1820
  "aliases": [],
1997
1821
  "args": {},
@@ -2314,10 +2138,10 @@
2314
2138
  "upload.js"
2315
2139
  ]
2316
2140
  },
2317
- "keys:create": {
2141
+ "config:clear": {
2318
2142
  "aliases": [],
2319
2143
  "args": {},
2320
- "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.",
2144
+ "description": "Delete all saved credentials and config",
2321
2145
  "flags": {
2322
2146
  "json": {
2323
2147
  "description": "Format output as json.",
@@ -2350,52 +2174,16 @@
2350
2174
  "multiple": false,
2351
2175
  "type": "option"
2352
2176
  },
2353
- "name": {
2354
- "description": "Key name/label",
2355
- "name": "name",
2356
- "required": true,
2357
- "hasDynamicHelp": false,
2358
- "multiple": false,
2359
- "type": "option"
2360
- },
2361
- "expires-days": {
2362
- "description": "Expiry in days (omit for no expiry)",
2363
- "name": "expires-days",
2364
- "hasDynamicHelp": false,
2365
- "multiple": false,
2366
- "type": "option"
2367
- },
2368
- "budget": {
2369
- "description": "Spend budget in USD",
2370
- "name": "budget",
2371
- "hasDynamicHelp": false,
2372
- "multiple": false,
2373
- "type": "option"
2374
- },
2375
- "face": {
2376
- "description": "Allowed face alias (repeatable)",
2377
- "name": "face",
2378
- "hasDynamicHelp": false,
2379
- "multiple": true,
2380
- "type": "option"
2381
- },
2382
- "model": {
2383
- "description": "Allowed model name (repeatable)",
2384
- "name": "model",
2385
- "hasDynamicHelp": false,
2386
- "multiple": true,
2387
- "type": "option"
2388
- },
2389
- "save": {
2390
- "description": "Save the new key to ~/.faces/config.json as api_key (default: true; use --no-save to skip)",
2391
- "name": "save",
2392
- "allowNo": true,
2177
+ "yes": {
2178
+ "description": "Skip confirmation",
2179
+ "name": "yes",
2180
+ "allowNo": false,
2393
2181
  "type": "boolean"
2394
2182
  }
2395
2183
  },
2396
2184
  "hasDynamicHelp": false,
2397
2185
  "hiddenAliases": [],
2398
- "id": "keys:create",
2186
+ "id": "config:clear",
2399
2187
  "pluginAlias": "faces-cli",
2400
2188
  "pluginName": "faces-cli",
2401
2189
  "pluginType": "core",
@@ -2405,14 +2193,25 @@
2405
2193
  "relativePath": [
2406
2194
  "dist",
2407
2195
  "commands",
2408
- "keys",
2409
- "create.js"
2196
+ "config",
2197
+ "clear.js"
2410
2198
  ]
2411
2199
  },
2412
- "keys:list": {
2200
+ "config:set": {
2413
2201
  "aliases": [],
2414
- "args": {},
2415
- "description": "List all API keys (JWT required)",
2202
+ "args": {
2203
+ "key": {
2204
+ "description": "Config key",
2205
+ "name": "key",
2206
+ "required": true
2207
+ },
2208
+ "value": {
2209
+ "description": "Config value",
2210
+ "name": "value",
2211
+ "required": true
2212
+ }
2213
+ },
2214
+ "description": "Set a config value (e.g. base_url, api_key, token)",
2416
2215
  "flags": {
2417
2216
  "json": {
2418
2217
  "description": "Format output as json.",
@@ -2448,7 +2247,7 @@
2448
2247
  },
2449
2248
  "hasDynamicHelp": false,
2450
2249
  "hiddenAliases": [],
2451
- "id": "keys:list",
2250
+ "id": "config:set",
2452
2251
  "pluginAlias": "faces-cli",
2453
2252
  "pluginName": "faces-cli",
2454
2253
  "pluginType": "core",
@@ -2458,20 +2257,14 @@
2458
2257
  "relativePath": [
2459
2258
  "dist",
2460
2259
  "commands",
2461
- "keys",
2462
- "list.js"
2260
+ "config",
2261
+ "set.js"
2463
2262
  ]
2464
2263
  },
2465
- "keys:revoke": {
2264
+ "config:show": {
2466
2265
  "aliases": [],
2467
- "args": {
2468
- "key_id": {
2469
- "description": "Key ID",
2470
- "name": "key_id",
2471
- "required": true
2472
- }
2473
- },
2474
- "description": "Revoke an API key (JWT required)",
2266
+ "args": {},
2267
+ "description": "Print current config (credentials are masked)",
2475
2268
  "flags": {
2476
2269
  "json": {
2477
2270
  "description": "Format output as json.",
@@ -2503,17 +2296,11 @@
2503
2296
  "hasDynamicHelp": false,
2504
2297
  "multiple": false,
2505
2298
  "type": "option"
2506
- },
2507
- "yes": {
2508
- "description": "Skip confirmation",
2509
- "name": "yes",
2510
- "allowNo": false,
2511
- "type": "boolean"
2512
2299
  }
2513
2300
  },
2514
2301
  "hasDynamicHelp": false,
2515
2302
  "hiddenAliases": [],
2516
- "id": "keys:revoke",
2303
+ "id": "config:show",
2517
2304
  "pluginAlias": "faces-cli",
2518
2305
  "pluginName": "faces-cli",
2519
2306
  "pluginType": "core",
@@ -2523,20 +2310,14 @@
2523
2310
  "relativePath": [
2524
2311
  "dist",
2525
2312
  "commands",
2526
- "keys",
2527
- "revoke.js"
2313
+ "config",
2314
+ "show.js"
2528
2315
  ]
2529
2316
  },
2530
- "keys:update": {
2317
+ "face:attributes": {
2531
2318
  "aliases": [],
2532
- "args": {
2533
- "key_id": {
2534
- "description": "Key ID",
2535
- "name": "key_id",
2536
- "required": true
2537
- }
2538
- },
2539
- "description": "Update API key metadata (JWT required)",
2319
+ "args": {},
2320
+ "description": "List all supported attribute keys",
2540
2321
  "flags": {
2541
2322
  "json": {
2542
2323
  "description": "Format output as json.",
@@ -2568,31 +2349,11 @@
2568
2349
  "hasDynamicHelp": false,
2569
2350
  "multiple": false,
2570
2351
  "type": "option"
2571
- },
2572
- "name": {
2573
- "description": "New key name",
2574
- "name": "name",
2575
- "hasDynamicHelp": false,
2576
- "multiple": false,
2577
- "type": "option"
2578
- },
2579
- "budget": {
2580
- "description": "New spend budget in USD",
2581
- "name": "budget",
2582
- "hasDynamicHelp": false,
2583
- "multiple": false,
2584
- "type": "option"
2585
- },
2586
- "reset-spent": {
2587
- "description": "Reset spent amount to zero",
2588
- "name": "reset-spent",
2589
- "allowNo": false,
2590
- "type": "boolean"
2591
2352
  }
2592
2353
  },
2593
2354
  "hasDynamicHelp": false,
2594
2355
  "hiddenAliases": [],
2595
- "id": "keys:update",
2356
+ "id": "face:attributes",
2596
2357
  "pluginAlias": "faces-cli",
2597
2358
  "pluginName": "faces-cli",
2598
2359
  "pluginType": "core",
@@ -2602,20 +2363,14 @@
2602
2363
  "relativePath": [
2603
2364
  "dist",
2604
2365
  "commands",
2605
- "keys",
2606
- "update.js"
2366
+ "face",
2367
+ "attributes.js"
2607
2368
  ]
2608
2369
  },
2609
- "team:add": {
2370
+ "face:create": {
2610
2371
  "aliases": [],
2611
- "args": {
2612
- "team_id": {
2613
- "description": "Team ID",
2614
- "name": "team_id",
2615
- "required": true
2616
- }
2617
- },
2618
- "description": "Add face(s) to a team",
2372
+ "args": {},
2373
+ "description": "Create a new face",
2619
2374
  "flags": {
2620
2375
  "json": {
2621
2376
  "description": "Format output as json.",
@@ -2648,99 +2403,60 @@
2648
2403
  "multiple": false,
2649
2404
  "type": "option"
2650
2405
  },
2651
- "face": {
2652
- "description": "Face alias to add (repeatable)",
2653
- "name": "face",
2406
+ "name": {
2407
+ "description": "Display name",
2408
+ "name": "name",
2654
2409
  "required": true,
2655
2410
  "hasDynamicHelp": false,
2656
- "multiple": true,
2657
- "type": "option"
2658
- }
2659
- },
2660
- "hasDynamicHelp": false,
2661
- "hiddenAliases": [],
2662
- "id": "team:add",
2663
- "pluginAlias": "faces-cli",
2664
- "pluginName": "faces-cli",
2665
- "pluginType": "core",
2666
- "strict": true,
2667
- "enableJsonFlag": true,
2668
- "isESM": true,
2669
- "relativePath": [
2670
- "dist",
2671
- "commands",
2672
- "team",
2673
- "add.js"
2674
- ]
2675
- },
2676
- "team:create": {
2677
- "aliases": [],
2678
- "args": {},
2679
- "description": "Create a new team",
2680
- "flags": {
2681
- "json": {
2682
- "description": "Format output as json.",
2683
- "helpGroup": "GLOBAL",
2684
- "name": "json",
2685
- "allowNo": false,
2686
- "type": "boolean"
2687
- },
2688
- "base-url": {
2689
- "description": "API base URL",
2690
- "env": "FACES_BASE_URL",
2691
- "name": "base-url",
2692
- "hasDynamicHelp": false,
2693
2411
  "multiple": false,
2694
2412
  "type": "option"
2695
2413
  },
2696
- "token": {
2697
- "description": "JWT bearer token",
2698
- "env": "FACES_TOKEN",
2699
- "name": "token",
2414
+ "alias": {
2415
+ "description": "Unique alias slug",
2416
+ "name": "alias",
2417
+ "required": true,
2700
2418
  "hasDynamicHelp": false,
2701
2419
  "multiple": false,
2702
2420
  "type": "option"
2703
2421
  },
2704
- "api-key": {
2705
- "description": "API key",
2706
- "env": "FACES_API_KEY",
2707
- "name": "api-key",
2422
+ "description": {
2423
+ "description": "Plain-text description / bio (max 1500 chars)",
2424
+ "name": "description",
2708
2425
  "hasDynamicHelp": false,
2709
2426
  "multiple": false,
2710
2427
  "type": "option"
2711
2428
  },
2712
- "name": {
2713
- "description": "Team name",
2714
- "name": "name",
2715
- "required": true,
2429
+ "tag": {
2430
+ "description": "Tag label (repeatable, lowercase)",
2431
+ "name": "tag",
2716
2432
  "hasDynamicHelp": false,
2717
- "multiple": false,
2433
+ "multiple": true,
2718
2434
  "type": "option"
2719
2435
  },
2720
- "description": {
2721
- "description": "Plain-text team description (max 1500 chars)",
2722
- "name": "description",
2436
+ "default-model": {
2437
+ "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
2438
+ "name": "default-model",
2723
2439
  "hasDynamicHelp": false,
2724
2440
  "multiple": false,
2725
2441
  "type": "option"
2726
2442
  },
2727
- "protocol": {
2728
- "description": "Protocol content (mermaid diagram or markdown, max 1000 words)",
2729
- "name": "protocol",
2443
+ "formula": {
2444
+ "description": "Boolean formula over owned concrete face aliases (e.g. \"a | b\", \"(a | b) - c\"). Creates a composite face.",
2445
+ "name": "formula",
2730
2446
  "hasDynamicHelp": false,
2731
2447
  "multiple": false,
2732
2448
  "type": "option"
2733
2449
  },
2734
- "protocol-file": {
2735
- "description": "Read protocol from file",
2736
- "name": "protocol-file",
2450
+ "attr": {
2451
+ "description": "Attribute KEY=VALUE (repeatable)",
2452
+ "name": "attr",
2737
2453
  "hasDynamicHelp": false,
2738
- "multiple": false,
2454
+ "multiple": true,
2739
2455
  "type": "option"
2740
2456
  },
2741
- "tag": {
2742
- "description": "Tag label (repeatable, lowercase)",
2743
- "name": "tag",
2457
+ "tool": {
2458
+ "description": "Tool name to enable (repeatable)",
2459
+ "name": "tool",
2744
2460
  "hasDynamicHelp": false,
2745
2461
  "multiple": true,
2746
2462
  "type": "option"
@@ -2748,7 +2464,7 @@
2748
2464
  },
2749
2465
  "hasDynamicHelp": false,
2750
2466
  "hiddenAliases": [],
2751
- "id": "team:create",
2467
+ "id": "face:create",
2752
2468
  "pluginAlias": "faces-cli",
2753
2469
  "pluginName": "faces-cli",
2754
2470
  "pluginType": "core",
@@ -2758,20 +2474,20 @@
2758
2474
  "relativePath": [
2759
2475
  "dist",
2760
2476
  "commands",
2761
- "team",
2477
+ "face",
2762
2478
  "create.js"
2763
2479
  ]
2764
2480
  },
2765
- "team:delete": {
2481
+ "face:delete": {
2766
2482
  "aliases": [],
2767
2483
  "args": {
2768
- "team_id": {
2769
- "description": "Team ID",
2770
- "name": "team_id",
2484
+ "face_id": {
2485
+ "description": "Face alias",
2486
+ "name": "face_id",
2771
2487
  "required": true
2772
2488
  }
2773
2489
  },
2774
- "description": "Delete a team",
2490
+ "description": "Delete a face permanently",
2775
2491
  "flags": {
2776
2492
  "json": {
2777
2493
  "description": "Format output as json.",
@@ -2813,7 +2529,7 @@
2813
2529
  },
2814
2530
  "hasDynamicHelp": false,
2815
2531
  "hiddenAliases": [],
2816
- "id": "team:delete",
2532
+ "id": "face:delete",
2817
2533
  "pluginAlias": "faces-cli",
2818
2534
  "pluginName": "faces-cli",
2819
2535
  "pluginType": "core",
@@ -2823,20 +2539,14 @@
2823
2539
  "relativePath": [
2824
2540
  "dist",
2825
2541
  "commands",
2826
- "team",
2542
+ "face",
2827
2543
  "delete.js"
2828
2544
  ]
2829
2545
  },
2830
- "team:edit": {
2546
+ "face:diff": {
2831
2547
  "aliases": [],
2832
- "args": {
2833
- "team_id": {
2834
- "description": "Team ID",
2835
- "name": "team_id",
2836
- "required": true
2837
- }
2838
- },
2839
- "description": "Edit a team",
2548
+ "args": {},
2549
+ "description": "Compare owned faces pairwise across all centroid components",
2840
2550
  "flags": {
2841
2551
  "json": {
2842
2552
  "description": "Format output as json.",
@@ -2869,38 +2579,18 @@
2869
2579
  "multiple": false,
2870
2580
  "type": "option"
2871
2581
  },
2872
- "name": {
2873
- "description": "New team name",
2874
- "name": "name",
2875
- "hasDynamicHelp": false,
2876
- "multiple": false,
2877
- "type": "option"
2878
- },
2879
- "description": {
2880
- "description": "New description (max 1500 chars)",
2881
- "name": "description",
2882
- "hasDynamicHelp": false,
2883
- "multiple": false,
2884
- "type": "option"
2885
- },
2886
- "protocol": {
2887
- "description": "New protocol content",
2888
- "name": "protocol",
2889
- "hasDynamicHelp": false,
2890
- "multiple": false,
2891
- "type": "option"
2892
- },
2893
- "protocol-file": {
2894
- "description": "Read protocol from file",
2895
- "name": "protocol-file",
2582
+ "face": {
2583
+ "description": "Face alias to include (repeatable, min 2)",
2584
+ "name": "face",
2585
+ "required": true,
2896
2586
  "hasDynamicHelp": false,
2897
- "multiple": false,
2587
+ "multiple": true,
2898
2588
  "type": "option"
2899
2589
  }
2900
2590
  },
2901
2591
  "hasDynamicHelp": false,
2902
2592
  "hiddenAliases": [],
2903
- "id": "team:edit",
2593
+ "id": "face:diff",
2904
2594
  "pluginAlias": "faces-cli",
2905
2595
  "pluginName": "faces-cli",
2906
2596
  "pluginType": "core",
@@ -2910,20 +2600,128 @@
2910
2600
  "relativePath": [
2911
2601
  "dist",
2912
2602
  "commands",
2913
- "team",
2603
+ "face",
2604
+ "diff.js"
2605
+ ]
2606
+ },
2607
+ "face:edit": {
2608
+ "aliases": [],
2609
+ "args": {
2610
+ "face_id": {
2611
+ "description": "Face alias",
2612
+ "name": "face_id",
2613
+ "required": true
2614
+ }
2615
+ },
2616
+ "description": "Edit a face's metadata",
2617
+ "flags": {
2618
+ "json": {
2619
+ "description": "Format output as json.",
2620
+ "helpGroup": "GLOBAL",
2621
+ "name": "json",
2622
+ "allowNo": false,
2623
+ "type": "boolean"
2624
+ },
2625
+ "base-url": {
2626
+ "description": "API base URL",
2627
+ "env": "FACES_BASE_URL",
2628
+ "name": "base-url",
2629
+ "hasDynamicHelp": false,
2630
+ "multiple": false,
2631
+ "type": "option"
2632
+ },
2633
+ "token": {
2634
+ "description": "JWT bearer token",
2635
+ "env": "FACES_TOKEN",
2636
+ "name": "token",
2637
+ "hasDynamicHelp": false,
2638
+ "multiple": false,
2639
+ "type": "option"
2640
+ },
2641
+ "api-key": {
2642
+ "description": "API key",
2643
+ "env": "FACES_API_KEY",
2644
+ "name": "api-key",
2645
+ "hasDynamicHelp": false,
2646
+ "multiple": false,
2647
+ "type": "option"
2648
+ },
2649
+ "name": {
2650
+ "description": "New display name",
2651
+ "name": "name",
2652
+ "hasDynamicHelp": false,
2653
+ "multiple": false,
2654
+ "type": "option"
2655
+ },
2656
+ "description": {
2657
+ "description": "Plain-text description / bio (max 1500 chars)",
2658
+ "name": "description",
2659
+ "hasDynamicHelp": false,
2660
+ "multiple": false,
2661
+ "type": "option"
2662
+ },
2663
+ "tag": {
2664
+ "description": "Replace all tags (repeatable, lowercase)",
2665
+ "name": "tag",
2666
+ "hasDynamicHelp": false,
2667
+ "multiple": true,
2668
+ "type": "option"
2669
+ },
2670
+ "default-model": {
2671
+ "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
2672
+ "name": "default-model",
2673
+ "hasDynamicHelp": false,
2674
+ "multiple": false,
2675
+ "type": "option"
2676
+ },
2677
+ "formula": {
2678
+ "description": "New boolean formula (synthetic faces only)",
2679
+ "name": "formula",
2680
+ "hasDynamicHelp": false,
2681
+ "multiple": false,
2682
+ "type": "option"
2683
+ },
2684
+ "attr": {
2685
+ "description": "Update attribute KEY=VALUE (repeatable)",
2686
+ "name": "attr",
2687
+ "hasDynamicHelp": false,
2688
+ "multiple": true,
2689
+ "type": "option"
2690
+ },
2691
+ "tool": {
2692
+ "description": "Tool names to set (replaces list, repeatable)",
2693
+ "name": "tool",
2694
+ "hasDynamicHelp": false,
2695
+ "multiple": true,
2696
+ "type": "option"
2697
+ }
2698
+ },
2699
+ "hasDynamicHelp": false,
2700
+ "hiddenAliases": [],
2701
+ "id": "face:edit",
2702
+ "pluginAlias": "faces-cli",
2703
+ "pluginName": "faces-cli",
2704
+ "pluginType": "core",
2705
+ "strict": true,
2706
+ "enableJsonFlag": true,
2707
+ "isESM": true,
2708
+ "relativePath": [
2709
+ "dist",
2710
+ "commands",
2711
+ "face",
2914
2712
  "edit.js"
2915
2713
  ]
2916
2714
  },
2917
- "team:get": {
2715
+ "face:get": {
2918
2716
  "aliases": [],
2919
2717
  "args": {
2920
- "team_id": {
2921
- "description": "Team ID",
2922
- "name": "team_id",
2718
+ "face_id": {
2719
+ "description": "Face alias",
2720
+ "name": "face_id",
2923
2721
  "required": true
2924
2722
  }
2925
2723
  },
2926
- "description": "Get a team by ID",
2724
+ "description": "Get details for a face by alias",
2927
2725
  "flags": {
2928
2726
  "json": {
2929
2727
  "description": "Format output as json.",
@@ -2955,11 +2753,18 @@
2955
2753
  "hasDynamicHelp": false,
2956
2754
  "multiple": false,
2957
2755
  "type": "option"
2756
+ },
2757
+ "include": {
2758
+ "description": "Include extra fields: tags, teams (comma-separated)",
2759
+ "name": "include",
2760
+ "hasDynamicHelp": false,
2761
+ "multiple": false,
2762
+ "type": "option"
2958
2763
  }
2959
2764
  },
2960
2765
  "hasDynamicHelp": false,
2961
2766
  "hiddenAliases": [],
2962
- "id": "team:get",
2767
+ "id": "face:get",
2963
2768
  "pluginAlias": "faces-cli",
2964
2769
  "pluginName": "faces-cli",
2965
2770
  "pluginType": "core",
@@ -2969,14 +2774,14 @@
2969
2774
  "relativePath": [
2970
2775
  "dist",
2971
2776
  "commands",
2972
- "team",
2777
+ "face",
2973
2778
  "get.js"
2974
2779
  ]
2975
2780
  },
2976
- "team:list": {
2781
+ "face:list": {
2977
2782
  "aliases": [],
2978
2783
  "args": {},
2979
- "description": "List your teams",
2784
+ "description": "List faces. By default lists owned faces; use --public to include published faces from other accounts.",
2980
2785
  "flags": {
2981
2786
  "json": {
2982
2787
  "description": "Format output as json.",
@@ -3008,11 +2813,58 @@
3008
2813
  "hasDynamicHelp": false,
3009
2814
  "multiple": false,
3010
2815
  "type": "option"
2816
+ },
2817
+ "tag": {
2818
+ "description": "Filter by tag (repeatable, AND logic)",
2819
+ "name": "tag",
2820
+ "hasDynamicHelp": false,
2821
+ "multiple": true,
2822
+ "type": "option"
2823
+ },
2824
+ "team": {
2825
+ "description": "Filter by team ID (repeatable, OR logic)",
2826
+ "name": "team",
2827
+ "hasDynamicHelp": false,
2828
+ "multiple": true,
2829
+ "type": "option"
2830
+ },
2831
+ "include": {
2832
+ "description": "Include extra fields: tags, teams (comma-separated)",
2833
+ "name": "include",
2834
+ "hasDynamicHelp": false,
2835
+ "multiple": false,
2836
+ "type": "option"
2837
+ },
2838
+ "public": {
2839
+ "description": "Include published faces from other accounts",
2840
+ "name": "public",
2841
+ "allowNo": false,
2842
+ "type": "boolean"
2843
+ },
2844
+ "system": {
2845
+ "description": "Show only the curated system faces (published faces owned by 'head')",
2846
+ "name": "system",
2847
+ "allowNo": false,
2848
+ "type": "boolean"
2849
+ },
2850
+ "from-users": {
2851
+ "description": "Only published faces from these owners (repeatable/comma-separated)",
2852
+ "name": "from-users",
2853
+ "hasDynamicHelp": false,
2854
+ "multiple": true,
2855
+ "type": "option"
2856
+ },
2857
+ "not-from-users": {
2858
+ "description": "Exclude published faces from these owners (repeatable/comma-separated)",
2859
+ "name": "not-from-users",
2860
+ "hasDynamicHelp": false,
2861
+ "multiple": true,
2862
+ "type": "option"
3011
2863
  }
3012
2864
  },
3013
2865
  "hasDynamicHelp": false,
3014
2866
  "hiddenAliases": [],
3015
- "id": "team:list",
2867
+ "id": "face:list",
3016
2868
  "pluginAlias": "faces-cli",
3017
2869
  "pluginName": "faces-cli",
3018
2870
  "pluginType": "core",
@@ -3022,20 +2874,20 @@
3022
2874
  "relativePath": [
3023
2875
  "dist",
3024
2876
  "commands",
3025
- "team",
2877
+ "face",
3026
2878
  "list.js"
3027
2879
  ]
3028
2880
  },
3029
- "team:members": {
2881
+ "face:neighbors": {
3030
2882
  "aliases": [],
3031
2883
  "args": {
3032
- "team_id": {
3033
- "description": "Team ID",
3034
- "name": "team_id",
2884
+ "face_id": {
2885
+ "description": "Face alias",
2886
+ "name": "face_id",
3035
2887
  "required": true
3036
2888
  }
3037
2889
  },
3038
- "description": "List members of a team",
2890
+ "description": "Find the most similar or dissimilar owned faces to a given face",
3039
2891
  "flags": {
3040
2892
  "json": {
3041
2893
  "description": "Format output as json.",
@@ -3067,11 +2919,45 @@
3067
2919
  "hasDynamicHelp": false,
3068
2920
  "multiple": false,
3069
2921
  "type": "option"
2922
+ },
2923
+ "k": {
2924
+ "description": "Number of results (1–20)",
2925
+ "name": "k",
2926
+ "default": 5,
2927
+ "hasDynamicHelp": false,
2928
+ "multiple": false,
2929
+ "type": "option"
2930
+ },
2931
+ "component": {
2932
+ "description": "Centroid component to rank on (beta, delta, epsilon are the principal components of a face; face is their composite)",
2933
+ "name": "component",
2934
+ "default": "face",
2935
+ "hasDynamicHelp": false,
2936
+ "multiple": false,
2937
+ "options": [
2938
+ "face",
2939
+ "beta",
2940
+ "delta",
2941
+ "epsilon"
2942
+ ],
2943
+ "type": "option"
2944
+ },
2945
+ "direction": {
2946
+ "description": "nearest (most similar) or furthest (most dissimilar)",
2947
+ "name": "direction",
2948
+ "default": "nearest",
2949
+ "hasDynamicHelp": false,
2950
+ "multiple": false,
2951
+ "options": [
2952
+ "nearest",
2953
+ "furthest"
2954
+ ],
2955
+ "type": "option"
3070
2956
  }
3071
2957
  },
3072
2958
  "hasDynamicHelp": false,
3073
2959
  "hiddenAliases": [],
3074
- "id": "team:members",
2960
+ "id": "face:neighbors",
3075
2961
  "pluginAlias": "faces-cli",
3076
2962
  "pluginName": "faces-cli",
3077
2963
  "pluginType": "core",
@@ -3081,25 +2967,73 @@
3081
2967
  "relativePath": [
3082
2968
  "dist",
3083
2969
  "commands",
3084
- "team",
3085
- "members.js"
2970
+ "face",
2971
+ "neighbors.js"
3086
2972
  ]
3087
2973
  },
3088
- "team:remove": {
2974
+ "face:stats": {
3089
2975
  "aliases": [],
3090
- "args": {
3091
- "team_id": {
3092
- "description": "Team ID",
3093
- "name": "team_id",
3094
- "required": true
2976
+ "args": {},
2977
+ "description": "Compile and chat stats for all owned faces",
2978
+ "flags": {
2979
+ "json": {
2980
+ "description": "Format output as json.",
2981
+ "helpGroup": "GLOBAL",
2982
+ "name": "json",
2983
+ "allowNo": false,
2984
+ "type": "boolean"
2985
+ },
2986
+ "base-url": {
2987
+ "description": "API base URL",
2988
+ "env": "FACES_BASE_URL",
2989
+ "name": "base-url",
2990
+ "hasDynamicHelp": false,
2991
+ "multiple": false,
2992
+ "type": "option"
2993
+ },
2994
+ "token": {
2995
+ "description": "JWT bearer token",
2996
+ "env": "FACES_TOKEN",
2997
+ "name": "token",
2998
+ "hasDynamicHelp": false,
2999
+ "multiple": false,
3000
+ "type": "option"
3095
3001
  },
3002
+ "api-key": {
3003
+ "description": "API key",
3004
+ "env": "FACES_API_KEY",
3005
+ "name": "api-key",
3006
+ "hasDynamicHelp": false,
3007
+ "multiple": false,
3008
+ "type": "option"
3009
+ }
3010
+ },
3011
+ "hasDynamicHelp": false,
3012
+ "hiddenAliases": [],
3013
+ "id": "face:stats",
3014
+ "pluginAlias": "faces-cli",
3015
+ "pluginName": "faces-cli",
3016
+ "pluginType": "core",
3017
+ "strict": true,
3018
+ "enableJsonFlag": true,
3019
+ "isESM": true,
3020
+ "relativePath": [
3021
+ "dist",
3022
+ "commands",
3023
+ "face",
3024
+ "stats.js"
3025
+ ]
3026
+ },
3027
+ "face:teams": {
3028
+ "aliases": [],
3029
+ "args": {
3096
3030
  "alias": {
3097
- "description": "Face alias to remove",
3031
+ "description": "Face alias",
3098
3032
  "name": "alias",
3099
3033
  "required": true
3100
3034
  }
3101
3035
  },
3102
- "description": "Remove a face from a team",
3036
+ "description": "Set a face's team memberships (replaces all)",
3103
3037
  "flags": {
3104
3038
  "json": {
3105
3039
  "description": "Format output as json.",
@@ -3131,11 +3065,19 @@
3131
3065
  "hasDynamicHelp": false,
3132
3066
  "multiple": false,
3133
3067
  "type": "option"
3068
+ },
3069
+ "team": {
3070
+ "description": "Team ID (repeatable, replaces all memberships)",
3071
+ "name": "team",
3072
+ "required": true,
3073
+ "hasDynamicHelp": false,
3074
+ "multiple": true,
3075
+ "type": "option"
3134
3076
  }
3135
3077
  },
3136
3078
  "hasDynamicHelp": false,
3137
3079
  "hiddenAliases": [],
3138
- "id": "team:remove",
3080
+ "id": "face:teams",
3139
3081
  "pluginAlias": "faces-cli",
3140
3082
  "pluginName": "faces-cli",
3141
3083
  "pluginType": "core",
@@ -3145,14 +3087,20 @@
3145
3087
  "relativePath": [
3146
3088
  "dist",
3147
3089
  "commands",
3148
- "team",
3149
- "remove.js"
3090
+ "face",
3091
+ "teams.js"
3150
3092
  ]
3151
3093
  },
3152
- "face:attributes": {
3094
+ "face:upload": {
3153
3095
  "aliases": [],
3154
- "args": {},
3155
- "description": "List all supported attribute keys",
3096
+ "args": {
3097
+ "face_id": {
3098
+ "description": "Face alias",
3099
+ "name": "face_id",
3100
+ "required": true
3101
+ }
3102
+ },
3103
+ "description": "Upload a file (text/PDF/audio/video) to a face",
3156
3104
  "flags": {
3157
3105
  "json": {
3158
3106
  "description": "Format output as json.",
@@ -3184,11 +3132,50 @@
3184
3132
  "hasDynamicHelp": false,
3185
3133
  "multiple": false,
3186
3134
  "type": "option"
3135
+ },
3136
+ "file": {
3137
+ "description": "File to upload",
3138
+ "name": "file",
3139
+ "required": true,
3140
+ "hasDynamicHelp": false,
3141
+ "multiple": false,
3142
+ "type": "option"
3143
+ },
3144
+ "kind": {
3145
+ "description": "Upload kind: document or thread",
3146
+ "name": "kind",
3147
+ "default": "document",
3148
+ "hasDynamicHelp": false,
3149
+ "multiple": false,
3150
+ "options": [
3151
+ "document",
3152
+ "thread"
3153
+ ],
3154
+ "type": "option"
3155
+ },
3156
+ "perspective": {
3157
+ "description": "Perspective (document only)",
3158
+ "name": "perspective",
3159
+ "default": "third-person",
3160
+ "hasDynamicHelp": false,
3161
+ "multiple": false,
3162
+ "options": [
3163
+ "first-person",
3164
+ "third-person"
3165
+ ],
3166
+ "type": "option"
3167
+ },
3168
+ "face-speaker": {
3169
+ "description": "Speaker name to map to the face (thread only). If omitted, first speaker is used.",
3170
+ "name": "face-speaker",
3171
+ "hasDynamicHelp": false,
3172
+ "multiple": false,
3173
+ "type": "option"
3187
3174
  }
3188
3175
  },
3189
3176
  "hasDynamicHelp": false,
3190
3177
  "hiddenAliases": [],
3191
- "id": "face:attributes",
3178
+ "id": "face:upload",
3192
3179
  "pluginAlias": "faces-cli",
3193
3180
  "pluginName": "faces-cli",
3194
3181
  "pluginType": "core",
@@ -3199,13 +3186,13 @@
3199
3186
  "dist",
3200
3187
  "commands",
3201
3188
  "face",
3202
- "attributes.js"
3189
+ "upload.js"
3203
3190
  ]
3204
3191
  },
3205
- "face:create": {
3192
+ "keys:create": {
3206
3193
  "aliases": [],
3207
3194
  "args": {},
3208
- "description": "Create a new face",
3195
+ "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.",
3209
3196
  "flags": {
3210
3197
  "json": {
3211
3198
  "description": "Format output as json.",
@@ -3239,67 +3226,169 @@
3239
3226
  "type": "option"
3240
3227
  },
3241
3228
  "name": {
3242
- "description": "Display name",
3229
+ "description": "Key name/label",
3243
3230
  "name": "name",
3244
3231
  "required": true,
3245
3232
  "hasDynamicHelp": false,
3246
3233
  "multiple": false,
3247
3234
  "type": "option"
3248
3235
  },
3249
- "alias": {
3250
- "description": "Unique alias slug",
3251
- "name": "alias",
3252
- "required": true,
3236
+ "expires-days": {
3237
+ "description": "Expiry in days (omit for no expiry)",
3238
+ "name": "expires-days",
3253
3239
  "hasDynamicHelp": false,
3254
3240
  "multiple": false,
3255
3241
  "type": "option"
3256
3242
  },
3257
- "description": {
3258
- "description": "Plain-text description / bio (max 1500 chars)",
3259
- "name": "description",
3243
+ "budget": {
3244
+ "description": "Spend budget in USD",
3245
+ "name": "budget",
3260
3246
  "hasDynamicHelp": false,
3261
3247
  "multiple": false,
3262
3248
  "type": "option"
3263
3249
  },
3264
- "tag": {
3265
- "description": "Tag label (repeatable, lowercase)",
3266
- "name": "tag",
3250
+ "face": {
3251
+ "description": "Allowed face alias (repeatable)",
3252
+ "name": "face",
3267
3253
  "hasDynamicHelp": false,
3268
3254
  "multiple": true,
3269
3255
  "type": "option"
3270
3256
  },
3271
- "default-model": {
3272
- "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
3273
- "name": "default-model",
3257
+ "model": {
3258
+ "description": "Allowed model name (repeatable)",
3259
+ "name": "model",
3260
+ "hasDynamicHelp": false,
3261
+ "multiple": true,
3262
+ "type": "option"
3263
+ },
3264
+ "save": {
3265
+ "description": "Save the new key to ~/.faces/config.json as api_key (default: true; use --no-save to skip)",
3266
+ "name": "save",
3267
+ "allowNo": true,
3268
+ "type": "boolean"
3269
+ }
3270
+ },
3271
+ "hasDynamicHelp": false,
3272
+ "hiddenAliases": [],
3273
+ "id": "keys:create",
3274
+ "pluginAlias": "faces-cli",
3275
+ "pluginName": "faces-cli",
3276
+ "pluginType": "core",
3277
+ "strict": true,
3278
+ "enableJsonFlag": true,
3279
+ "isESM": true,
3280
+ "relativePath": [
3281
+ "dist",
3282
+ "commands",
3283
+ "keys",
3284
+ "create.js"
3285
+ ]
3286
+ },
3287
+ "keys:list": {
3288
+ "aliases": [],
3289
+ "args": {},
3290
+ "description": "List all API keys (JWT required)",
3291
+ "flags": {
3292
+ "json": {
3293
+ "description": "Format output as json.",
3294
+ "helpGroup": "GLOBAL",
3295
+ "name": "json",
3296
+ "allowNo": false,
3297
+ "type": "boolean"
3298
+ },
3299
+ "base-url": {
3300
+ "description": "API base URL",
3301
+ "env": "FACES_BASE_URL",
3302
+ "name": "base-url",
3274
3303
  "hasDynamicHelp": false,
3275
3304
  "multiple": false,
3276
3305
  "type": "option"
3277
3306
  },
3278
- "formula": {
3279
- "description": "Boolean formula over owned concrete face aliases (e.g. \"a | b\", \"(a | b) - c\"). Creates a composite face.",
3280
- "name": "formula",
3307
+ "token": {
3308
+ "description": "JWT bearer token",
3309
+ "env": "FACES_TOKEN",
3310
+ "name": "token",
3281
3311
  "hasDynamicHelp": false,
3282
3312
  "multiple": false,
3283
3313
  "type": "option"
3284
3314
  },
3285
- "attr": {
3286
- "description": "Attribute KEY=VALUE (repeatable)",
3287
- "name": "attr",
3315
+ "api-key": {
3316
+ "description": "API key",
3317
+ "env": "FACES_API_KEY",
3318
+ "name": "api-key",
3319
+ "hasDynamicHelp": false,
3320
+ "multiple": false,
3321
+ "type": "option"
3322
+ }
3323
+ },
3324
+ "hasDynamicHelp": false,
3325
+ "hiddenAliases": [],
3326
+ "id": "keys:list",
3327
+ "pluginAlias": "faces-cli",
3328
+ "pluginName": "faces-cli",
3329
+ "pluginType": "core",
3330
+ "strict": true,
3331
+ "enableJsonFlag": true,
3332
+ "isESM": true,
3333
+ "relativePath": [
3334
+ "dist",
3335
+ "commands",
3336
+ "keys",
3337
+ "list.js"
3338
+ ]
3339
+ },
3340
+ "keys:revoke": {
3341
+ "aliases": [],
3342
+ "args": {
3343
+ "key_id": {
3344
+ "description": "Key ID",
3345
+ "name": "key_id",
3346
+ "required": true
3347
+ }
3348
+ },
3349
+ "description": "Revoke an API key (JWT required)",
3350
+ "flags": {
3351
+ "json": {
3352
+ "description": "Format output as json.",
3353
+ "helpGroup": "GLOBAL",
3354
+ "name": "json",
3355
+ "allowNo": false,
3356
+ "type": "boolean"
3357
+ },
3358
+ "base-url": {
3359
+ "description": "API base URL",
3360
+ "env": "FACES_BASE_URL",
3361
+ "name": "base-url",
3362
+ "hasDynamicHelp": false,
3363
+ "multiple": false,
3364
+ "type": "option"
3365
+ },
3366
+ "token": {
3367
+ "description": "JWT bearer token",
3368
+ "env": "FACES_TOKEN",
3369
+ "name": "token",
3288
3370
  "hasDynamicHelp": false,
3289
- "multiple": true,
3371
+ "multiple": false,
3290
3372
  "type": "option"
3291
3373
  },
3292
- "tool": {
3293
- "description": "Tool name to enable (repeatable)",
3294
- "name": "tool",
3374
+ "api-key": {
3375
+ "description": "API key",
3376
+ "env": "FACES_API_KEY",
3377
+ "name": "api-key",
3295
3378
  "hasDynamicHelp": false,
3296
- "multiple": true,
3379
+ "multiple": false,
3297
3380
  "type": "option"
3381
+ },
3382
+ "yes": {
3383
+ "description": "Skip confirmation",
3384
+ "name": "yes",
3385
+ "allowNo": false,
3386
+ "type": "boolean"
3298
3387
  }
3299
3388
  },
3300
3389
  "hasDynamicHelp": false,
3301
3390
  "hiddenAliases": [],
3302
- "id": "face:create",
3391
+ "id": "keys:revoke",
3303
3392
  "pluginAlias": "faces-cli",
3304
3393
  "pluginName": "faces-cli",
3305
3394
  "pluginType": "core",
@@ -3309,20 +3398,20 @@
3309
3398
  "relativePath": [
3310
3399
  "dist",
3311
3400
  "commands",
3312
- "face",
3313
- "create.js"
3401
+ "keys",
3402
+ "revoke.js"
3314
3403
  ]
3315
3404
  },
3316
- "face:delete": {
3405
+ "keys:update": {
3317
3406
  "aliases": [],
3318
3407
  "args": {
3319
- "face_id": {
3320
- "description": "Face alias",
3321
- "name": "face_id",
3408
+ "key_id": {
3409
+ "description": "Key ID",
3410
+ "name": "key_id",
3322
3411
  "required": true
3323
3412
  }
3324
3413
  },
3325
- "description": "Delete a face permanently",
3414
+ "description": "Update API key metadata (JWT required)",
3326
3415
  "flags": {
3327
3416
  "json": {
3328
3417
  "description": "Format output as json.",
@@ -3355,16 +3444,30 @@
3355
3444
  "multiple": false,
3356
3445
  "type": "option"
3357
3446
  },
3358
- "yes": {
3359
- "description": "Skip confirmation",
3360
- "name": "yes",
3447
+ "name": {
3448
+ "description": "New key name",
3449
+ "name": "name",
3450
+ "hasDynamicHelp": false,
3451
+ "multiple": false,
3452
+ "type": "option"
3453
+ },
3454
+ "budget": {
3455
+ "description": "New spend budget in USD",
3456
+ "name": "budget",
3457
+ "hasDynamicHelp": false,
3458
+ "multiple": false,
3459
+ "type": "option"
3460
+ },
3461
+ "reset-spent": {
3462
+ "description": "Reset spent amount to zero",
3463
+ "name": "reset-spent",
3361
3464
  "allowNo": false,
3362
3465
  "type": "boolean"
3363
3466
  }
3364
3467
  },
3365
3468
  "hasDynamicHelp": false,
3366
3469
  "hiddenAliases": [],
3367
- "id": "face:delete",
3470
+ "id": "keys:update",
3368
3471
  "pluginAlias": "faces-cli",
3369
3472
  "pluginName": "faces-cli",
3370
3473
  "pluginType": "core",
@@ -3374,14 +3477,20 @@
3374
3477
  "relativePath": [
3375
3478
  "dist",
3376
3479
  "commands",
3377
- "face",
3378
- "delete.js"
3480
+ "keys",
3481
+ "update.js"
3379
3482
  ]
3380
3483
  },
3381
- "face:diff": {
3484
+ "team:add": {
3382
3485
  "aliases": [],
3383
- "args": {},
3384
- "description": "Compare owned faces pairwise across all centroid components",
3486
+ "args": {
3487
+ "team_id": {
3488
+ "description": "Team ID",
3489
+ "name": "team_id",
3490
+ "required": true
3491
+ }
3492
+ },
3493
+ "description": "Add face(s) to a team",
3385
3494
  "flags": {
3386
3495
  "json": {
3387
3496
  "description": "Format output as json.",
@@ -3415,7 +3524,7 @@
3415
3524
  "type": "option"
3416
3525
  },
3417
3526
  "face": {
3418
- "description": "Face alias to include (repeatable, min 2)",
3527
+ "description": "Face alias to add (repeatable)",
3419
3528
  "name": "face",
3420
3529
  "required": true,
3421
3530
  "hasDynamicHelp": false,
@@ -3425,7 +3534,7 @@
3425
3534
  },
3426
3535
  "hasDynamicHelp": false,
3427
3536
  "hiddenAliases": [],
3428
- "id": "face:diff",
3537
+ "id": "team:add",
3429
3538
  "pluginAlias": "faces-cli",
3430
3539
  "pluginName": "faces-cli",
3431
3540
  "pluginType": "core",
@@ -3435,20 +3544,14 @@
3435
3544
  "relativePath": [
3436
3545
  "dist",
3437
3546
  "commands",
3438
- "face",
3439
- "diff.js"
3547
+ "team",
3548
+ "add.js"
3440
3549
  ]
3441
3550
  },
3442
- "face:edit": {
3551
+ "team:create": {
3443
3552
  "aliases": [],
3444
- "args": {
3445
- "face_id": {
3446
- "description": "Face alias",
3447
- "name": "face_id",
3448
- "required": true
3449
- }
3450
- },
3451
- "description": "Edit a face's metadata",
3553
+ "args": {},
3554
+ "description": "Create a new team",
3452
3555
  "flags": {
3453
3556
  "json": {
3454
3557
  "description": "Format output as json.",
@@ -3482,50 +3585,37 @@
3482
3585
  "type": "option"
3483
3586
  },
3484
3587
  "name": {
3485
- "description": "New display name",
3588
+ "description": "Team name",
3486
3589
  "name": "name",
3590
+ "required": true,
3487
3591
  "hasDynamicHelp": false,
3488
3592
  "multiple": false,
3489
3593
  "type": "option"
3490
3594
  },
3491
3595
  "description": {
3492
- "description": "Plain-text description / bio (max 1500 chars)",
3596
+ "description": "Plain-text team description (max 1500 chars)",
3493
3597
  "name": "description",
3494
3598
  "hasDynamicHelp": false,
3495
3599
  "multiple": false,
3496
3600
  "type": "option"
3497
3601
  },
3498
- "tag": {
3499
- "description": "Replace all tags (repeatable, lowercase)",
3500
- "name": "tag",
3501
- "hasDynamicHelp": false,
3502
- "multiple": true,
3503
- "type": "option"
3504
- },
3505
- "default-model": {
3506
- "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
3507
- "name": "default-model",
3602
+ "protocol": {
3603
+ "description": "Protocol content (mermaid diagram or markdown, max 1000 words)",
3604
+ "name": "protocol",
3508
3605
  "hasDynamicHelp": false,
3509
3606
  "multiple": false,
3510
3607
  "type": "option"
3511
3608
  },
3512
- "formula": {
3513
- "description": "New boolean formula (synthetic faces only)",
3514
- "name": "formula",
3609
+ "protocol-file": {
3610
+ "description": "Read protocol from file",
3611
+ "name": "protocol-file",
3515
3612
  "hasDynamicHelp": false,
3516
3613
  "multiple": false,
3517
3614
  "type": "option"
3518
3615
  },
3519
- "attr": {
3520
- "description": "Update attribute KEY=VALUE (repeatable)",
3521
- "name": "attr",
3522
- "hasDynamicHelp": false,
3523
- "multiple": true,
3524
- "type": "option"
3525
- },
3526
- "tool": {
3527
- "description": "Tool names to set (replaces list, repeatable)",
3528
- "name": "tool",
3616
+ "tag": {
3617
+ "description": "Tag label (repeatable, lowercase)",
3618
+ "name": "tag",
3529
3619
  "hasDynamicHelp": false,
3530
3620
  "multiple": true,
3531
3621
  "type": "option"
@@ -3533,7 +3623,7 @@
3533
3623
  },
3534
3624
  "hasDynamicHelp": false,
3535
3625
  "hiddenAliases": [],
3536
- "id": "face:edit",
3626
+ "id": "team:create",
3537
3627
  "pluginAlias": "faces-cli",
3538
3628
  "pluginName": "faces-cli",
3539
3629
  "pluginType": "core",
@@ -3543,20 +3633,20 @@
3543
3633
  "relativePath": [
3544
3634
  "dist",
3545
3635
  "commands",
3546
- "face",
3547
- "edit.js"
3636
+ "team",
3637
+ "create.js"
3548
3638
  ]
3549
3639
  },
3550
- "face:get": {
3640
+ "team:delete": {
3551
3641
  "aliases": [],
3552
3642
  "args": {
3553
- "face_id": {
3554
- "description": "Face alias",
3555
- "name": "face_id",
3643
+ "team_id": {
3644
+ "description": "Team ID",
3645
+ "name": "team_id",
3556
3646
  "required": true
3557
3647
  }
3558
3648
  },
3559
- "description": "Get details for a face by alias",
3649
+ "description": "Delete a team",
3560
3650
  "flags": {
3561
3651
  "json": {
3562
3652
  "description": "Format output as json.",
@@ -3589,17 +3679,16 @@
3589
3679
  "multiple": false,
3590
3680
  "type": "option"
3591
3681
  },
3592
- "include": {
3593
- "description": "Include extra fields: tags, teams (comma-separated)",
3594
- "name": "include",
3595
- "hasDynamicHelp": false,
3596
- "multiple": false,
3597
- "type": "option"
3682
+ "yes": {
3683
+ "description": "Skip confirmation",
3684
+ "name": "yes",
3685
+ "allowNo": false,
3686
+ "type": "boolean"
3598
3687
  }
3599
3688
  },
3600
3689
  "hasDynamicHelp": false,
3601
3690
  "hiddenAliases": [],
3602
- "id": "face:get",
3691
+ "id": "team:delete",
3603
3692
  "pluginAlias": "faces-cli",
3604
3693
  "pluginName": "faces-cli",
3605
3694
  "pluginType": "core",
@@ -3609,14 +3698,20 @@
3609
3698
  "relativePath": [
3610
3699
  "dist",
3611
3700
  "commands",
3612
- "face",
3613
- "get.js"
3701
+ "team",
3702
+ "delete.js"
3614
3703
  ]
3615
3704
  },
3616
- "face:list": {
3705
+ "team:edit": {
3617
3706
  "aliases": [],
3618
- "args": {},
3619
- "description": "List all owned faces",
3707
+ "args": {
3708
+ "team_id": {
3709
+ "description": "Team ID",
3710
+ "name": "team_id",
3711
+ "required": true
3712
+ }
3713
+ },
3714
+ "description": "Edit a team",
3620
3715
  "flags": {
3621
3716
  "json": {
3622
3717
  "description": "Format output as json.",
@@ -3649,23 +3744,30 @@
3649
3744
  "multiple": false,
3650
3745
  "type": "option"
3651
3746
  },
3652
- "tag": {
3653
- "description": "Filter by tag (repeatable, AND logic)",
3654
- "name": "tag",
3747
+ "name": {
3748
+ "description": "New team name",
3749
+ "name": "name",
3655
3750
  "hasDynamicHelp": false,
3656
- "multiple": true,
3751
+ "multiple": false,
3657
3752
  "type": "option"
3658
3753
  },
3659
- "team": {
3660
- "description": "Filter by team ID (repeatable, OR logic)",
3661
- "name": "team",
3754
+ "description": {
3755
+ "description": "New description (max 1500 chars)",
3756
+ "name": "description",
3662
3757
  "hasDynamicHelp": false,
3663
- "multiple": true,
3758
+ "multiple": false,
3664
3759
  "type": "option"
3665
3760
  },
3666
- "include": {
3667
- "description": "Include extra fields: tags, teams (comma-separated)",
3668
- "name": "include",
3761
+ "protocol": {
3762
+ "description": "New protocol content",
3763
+ "name": "protocol",
3764
+ "hasDynamicHelp": false,
3765
+ "multiple": false,
3766
+ "type": "option"
3767
+ },
3768
+ "protocol-file": {
3769
+ "description": "Read protocol from file",
3770
+ "name": "protocol-file",
3669
3771
  "hasDynamicHelp": false,
3670
3772
  "multiple": false,
3671
3773
  "type": "option"
@@ -3673,7 +3775,7 @@
3673
3775
  },
3674
3776
  "hasDynamicHelp": false,
3675
3777
  "hiddenAliases": [],
3676
- "id": "face:list",
3778
+ "id": "team:edit",
3677
3779
  "pluginAlias": "faces-cli",
3678
3780
  "pluginName": "faces-cli",
3679
3781
  "pluginType": "core",
@@ -3683,20 +3785,20 @@
3683
3785
  "relativePath": [
3684
3786
  "dist",
3685
3787
  "commands",
3686
- "face",
3687
- "list.js"
3788
+ "team",
3789
+ "edit.js"
3688
3790
  ]
3689
3791
  },
3690
- "face:neighbors": {
3792
+ "team:get": {
3691
3793
  "aliases": [],
3692
3794
  "args": {
3693
- "face_id": {
3694
- "description": "Face alias",
3695
- "name": "face_id",
3795
+ "team_id": {
3796
+ "description": "Team ID",
3797
+ "name": "team_id",
3696
3798
  "required": true
3697
3799
  }
3698
3800
  },
3699
- "description": "Find the most similar or dissimilar owned faces to a given face",
3801
+ "description": "Get a team by ID",
3700
3802
  "flags": {
3701
3803
  "json": {
3702
3804
  "description": "Format output as json.",
@@ -3728,45 +3830,11 @@
3728
3830
  "hasDynamicHelp": false,
3729
3831
  "multiple": false,
3730
3832
  "type": "option"
3731
- },
3732
- "k": {
3733
- "description": "Number of results (1–20)",
3734
- "name": "k",
3735
- "default": 5,
3736
- "hasDynamicHelp": false,
3737
- "multiple": false,
3738
- "type": "option"
3739
- },
3740
- "component": {
3741
- "description": "Centroid component to rank on (beta, delta, epsilon are the principal components of a face; face is their composite)",
3742
- "name": "component",
3743
- "default": "face",
3744
- "hasDynamicHelp": false,
3745
- "multiple": false,
3746
- "options": [
3747
- "face",
3748
- "beta",
3749
- "delta",
3750
- "epsilon"
3751
- ],
3752
- "type": "option"
3753
- },
3754
- "direction": {
3755
- "description": "nearest (most similar) or furthest (most dissimilar)",
3756
- "name": "direction",
3757
- "default": "nearest",
3758
- "hasDynamicHelp": false,
3759
- "multiple": false,
3760
- "options": [
3761
- "nearest",
3762
- "furthest"
3763
- ],
3764
- "type": "option"
3765
3833
  }
3766
3834
  },
3767
3835
  "hasDynamicHelp": false,
3768
3836
  "hiddenAliases": [],
3769
- "id": "face:neighbors",
3837
+ "id": "team:get",
3770
3838
  "pluginAlias": "faces-cli",
3771
3839
  "pluginName": "faces-cli",
3772
3840
  "pluginType": "core",
@@ -3776,14 +3844,14 @@
3776
3844
  "relativePath": [
3777
3845
  "dist",
3778
3846
  "commands",
3779
- "face",
3780
- "neighbors.js"
3847
+ "team",
3848
+ "get.js"
3781
3849
  ]
3782
3850
  },
3783
- "face:stats": {
3851
+ "team:list": {
3784
3852
  "aliases": [],
3785
3853
  "args": {},
3786
- "description": "Compile and chat stats for all owned faces",
3854
+ "description": "List your teams",
3787
3855
  "flags": {
3788
3856
  "json": {
3789
3857
  "description": "Format output as json.",
@@ -3819,7 +3887,7 @@
3819
3887
  },
3820
3888
  "hasDynamicHelp": false,
3821
3889
  "hiddenAliases": [],
3822
- "id": "face:stats",
3890
+ "id": "team:list",
3823
3891
  "pluginAlias": "faces-cli",
3824
3892
  "pluginName": "faces-cli",
3825
3893
  "pluginType": "core",
@@ -3829,20 +3897,20 @@
3829
3897
  "relativePath": [
3830
3898
  "dist",
3831
3899
  "commands",
3832
- "face",
3833
- "stats.js"
3900
+ "team",
3901
+ "list.js"
3834
3902
  ]
3835
3903
  },
3836
- "face:teams": {
3904
+ "team:members": {
3837
3905
  "aliases": [],
3838
3906
  "args": {
3839
- "alias": {
3840
- "description": "Face alias",
3841
- "name": "alias",
3907
+ "team_id": {
3908
+ "description": "Team ID",
3909
+ "name": "team_id",
3842
3910
  "required": true
3843
3911
  }
3844
3912
  },
3845
- "description": "Set a face's team memberships (replaces all)",
3913
+ "description": "List members of a team",
3846
3914
  "flags": {
3847
3915
  "json": {
3848
3916
  "description": "Format output as json.",
@@ -3874,19 +3942,11 @@
3874
3942
  "hasDynamicHelp": false,
3875
3943
  "multiple": false,
3876
3944
  "type": "option"
3877
- },
3878
- "team": {
3879
- "description": "Team ID (repeatable, replaces all memberships)",
3880
- "name": "team",
3881
- "required": true,
3882
- "hasDynamicHelp": false,
3883
- "multiple": true,
3884
- "type": "option"
3885
3945
  }
3886
3946
  },
3887
3947
  "hasDynamicHelp": false,
3888
3948
  "hiddenAliases": [],
3889
- "id": "face:teams",
3949
+ "id": "team:members",
3890
3950
  "pluginAlias": "faces-cli",
3891
3951
  "pluginName": "faces-cli",
3892
3952
  "pluginType": "core",
@@ -3896,20 +3956,25 @@
3896
3956
  "relativePath": [
3897
3957
  "dist",
3898
3958
  "commands",
3899
- "face",
3900
- "teams.js"
3959
+ "team",
3960
+ "members.js"
3901
3961
  ]
3902
3962
  },
3903
- "face:upload": {
3963
+ "team:remove": {
3904
3964
  "aliases": [],
3905
3965
  "args": {
3906
- "face_id": {
3907
- "description": "Face alias",
3908
- "name": "face_id",
3966
+ "team_id": {
3967
+ "description": "Team ID",
3968
+ "name": "team_id",
3969
+ "required": true
3970
+ },
3971
+ "alias": {
3972
+ "description": "Face alias to remove",
3973
+ "name": "alias",
3909
3974
  "required": true
3910
3975
  }
3911
3976
  },
3912
- "description": "Upload a file (text/PDF/audio/video) to a face",
3977
+ "description": "Remove a face from a team",
3913
3978
  "flags": {
3914
3979
  "json": {
3915
3980
  "description": "Format output as json.",
@@ -3941,50 +4006,11 @@
3941
4006
  "hasDynamicHelp": false,
3942
4007
  "multiple": false,
3943
4008
  "type": "option"
3944
- },
3945
- "file": {
3946
- "description": "File to upload",
3947
- "name": "file",
3948
- "required": true,
3949
- "hasDynamicHelp": false,
3950
- "multiple": false,
3951
- "type": "option"
3952
- },
3953
- "kind": {
3954
- "description": "Upload kind: document or thread",
3955
- "name": "kind",
3956
- "default": "document",
3957
- "hasDynamicHelp": false,
3958
- "multiple": false,
3959
- "options": [
3960
- "document",
3961
- "thread"
3962
- ],
3963
- "type": "option"
3964
- },
3965
- "perspective": {
3966
- "description": "Perspective (document only)",
3967
- "name": "perspective",
3968
- "default": "third-person",
3969
- "hasDynamicHelp": false,
3970
- "multiple": false,
3971
- "options": [
3972
- "first-person",
3973
- "third-person"
3974
- ],
3975
- "type": "option"
3976
- },
3977
- "face-speaker": {
3978
- "description": "Speaker name to map to the face (thread only). If omitted, first speaker is used.",
3979
- "name": "face-speaker",
3980
- "hasDynamicHelp": false,
3981
- "multiple": false,
3982
- "type": "option"
3983
4009
  }
3984
4010
  },
3985
4011
  "hasDynamicHelp": false,
3986
4012
  "hiddenAliases": [],
3987
- "id": "face:upload",
4013
+ "id": "team:remove",
3988
4014
  "pluginAlias": "faces-cli",
3989
4015
  "pluginName": "faces-cli",
3990
4016
  "pluginType": "core",
@@ -3994,8 +4020,8 @@
3994
4020
  "relativePath": [
3995
4021
  "dist",
3996
4022
  "commands",
3997
- "face",
3998
- "upload.js"
4023
+ "team",
4024
+ "remove.js"
3999
4025
  ]
4000
4026
  },
4001
4027
  "billing:subscription:activate": {
@@ -5463,16 +5489,16 @@
5463
5489
  "sync.js"
5464
5490
  ]
5465
5491
  },
5466
- "team:tag:add": {
5492
+ "face:tag:add": {
5467
5493
  "aliases": [],
5468
5494
  "args": {
5469
- "team_id": {
5470
- "description": "Team ID",
5471
- "name": "team_id",
5495
+ "alias": {
5496
+ "description": "Face alias",
5497
+ "name": "alias",
5472
5498
  "required": true
5473
5499
  }
5474
5500
  },
5475
- "description": "Add tags to a team (appends, idempotent)",
5501
+ "description": "Add tags to a face (appends, idempotent)",
5476
5502
  "flags": {
5477
5503
  "json": {
5478
5504
  "description": "Format output as json.",
@@ -5516,7 +5542,7 @@
5516
5542
  },
5517
5543
  "hasDynamicHelp": false,
5518
5544
  "hiddenAliases": [],
5519
- "id": "team:tag:add",
5545
+ "id": "face:tag:add",
5520
5546
  "pluginAlias": "faces-cli",
5521
5547
  "pluginName": "faces-cli",
5522
5548
  "pluginType": "core",
@@ -5526,21 +5552,15 @@
5526
5552
  "relativePath": [
5527
5553
  "dist",
5528
5554
  "commands",
5529
- "team",
5555
+ "face",
5530
5556
  "tag",
5531
5557
  "add.js"
5532
5558
  ]
5533
5559
  },
5534
- "team:tag:list": {
5560
+ "face:tag:all": {
5535
5561
  "aliases": [],
5536
- "args": {
5537
- "team_id": {
5538
- "description": "Team ID",
5539
- "name": "team_id",
5540
- "required": true
5541
- }
5542
- },
5543
- "description": "List tags on a team",
5562
+ "args": {},
5563
+ "description": "List all tags across all your faces",
5544
5564
  "flags": {
5545
5565
  "json": {
5546
5566
  "description": "Format output as json.",
@@ -5576,7 +5596,7 @@
5576
5596
  },
5577
5597
  "hasDynamicHelp": false,
5578
5598
  "hiddenAliases": [],
5579
- "id": "team:tag:list",
5599
+ "id": "face:tag:all",
5580
5600
  "pluginAlias": "faces-cli",
5581
5601
  "pluginName": "faces-cli",
5582
5602
  "pluginType": "core",
@@ -5586,26 +5606,21 @@
5586
5606
  "relativePath": [
5587
5607
  "dist",
5588
5608
  "commands",
5589
- "team",
5609
+ "face",
5590
5610
  "tag",
5591
- "list.js"
5611
+ "all.js"
5592
5612
  ]
5593
5613
  },
5594
- "team:tag:remove": {
5614
+ "face:tag:list": {
5595
5615
  "aliases": [],
5596
5616
  "args": {
5597
- "team_id": {
5598
- "description": "Team ID",
5599
- "name": "team_id",
5600
- "required": true
5601
- },
5602
- "tag": {
5603
- "description": "Tag to remove",
5604
- "name": "tag",
5617
+ "alias": {
5618
+ "description": "Face alias",
5619
+ "name": "alias",
5605
5620
  "required": true
5606
5621
  }
5607
5622
  },
5608
- "description": "Remove a tag from a team",
5623
+ "description": "List tags on a face",
5609
5624
  "flags": {
5610
5625
  "json": {
5611
5626
  "description": "Format output as json.",
@@ -5641,7 +5656,7 @@
5641
5656
  },
5642
5657
  "hasDynamicHelp": false,
5643
5658
  "hiddenAliases": [],
5644
- "id": "team:tag:remove",
5659
+ "id": "face:tag:list",
5645
5660
  "pluginAlias": "faces-cli",
5646
5661
  "pluginName": "faces-cli",
5647
5662
  "pluginType": "core",
@@ -5651,21 +5666,26 @@
5651
5666
  "relativePath": [
5652
5667
  "dist",
5653
5668
  "commands",
5654
- "team",
5669
+ "face",
5655
5670
  "tag",
5656
- "remove.js"
5671
+ "list.js"
5657
5672
  ]
5658
5673
  },
5659
- "team:tag:set": {
5674
+ "face:tag:remove": {
5660
5675
  "aliases": [],
5661
5676
  "args": {
5662
- "team_id": {
5663
- "description": "Team ID",
5664
- "name": "team_id",
5677
+ "alias": {
5678
+ "description": "Face alias",
5679
+ "name": "alias",
5680
+ "required": true
5681
+ },
5682
+ "tag": {
5683
+ "description": "Tag to remove",
5684
+ "name": "tag",
5665
5685
  "required": true
5666
5686
  }
5667
5687
  },
5668
- "description": "Replace all tags on a team",
5688
+ "description": "Remove a tag from a face",
5669
5689
  "flags": {
5670
5690
  "json": {
5671
5691
  "description": "Format output as json.",
@@ -5697,19 +5717,11 @@
5697
5717
  "hasDynamicHelp": false,
5698
5718
  "multiple": false,
5699
5719
  "type": "option"
5700
- },
5701
- "tag": {
5702
- "description": "Tag to set (repeatable, replaces all)",
5703
- "name": "tag",
5704
- "required": true,
5705
- "hasDynamicHelp": false,
5706
- "multiple": true,
5707
- "type": "option"
5708
5720
  }
5709
5721
  },
5710
5722
  "hasDynamicHelp": false,
5711
5723
  "hiddenAliases": [],
5712
- "id": "team:tag:set",
5724
+ "id": "face:tag:remove",
5713
5725
  "pluginAlias": "faces-cli",
5714
5726
  "pluginName": "faces-cli",
5715
5727
  "pluginType": "core",
@@ -5719,12 +5731,12 @@
5719
5731
  "relativePath": [
5720
5732
  "dist",
5721
5733
  "commands",
5722
- "team",
5734
+ "face",
5723
5735
  "tag",
5724
- "set.js"
5736
+ "remove.js"
5725
5737
  ]
5726
5738
  },
5727
- "face:tag:add": {
5739
+ "face:tag:set": {
5728
5740
  "aliases": [],
5729
5741
  "args": {
5730
5742
  "alias": {
@@ -5733,7 +5745,7 @@
5733
5745
  "required": true
5734
5746
  }
5735
5747
  },
5736
- "description": "Add tags to a face (appends, idempotent)",
5748
+ "description": "Replace all tags on a face",
5737
5749
  "flags": {
5738
5750
  "json": {
5739
5751
  "description": "Format output as json.",
@@ -5767,7 +5779,7 @@
5767
5779
  "type": "option"
5768
5780
  },
5769
5781
  "tag": {
5770
- "description": "Tag to add (repeatable)",
5782
+ "description": "Tag to set (repeatable, replaces all)",
5771
5783
  "name": "tag",
5772
5784
  "required": true,
5773
5785
  "hasDynamicHelp": false,
@@ -5777,7 +5789,7 @@
5777
5789
  },
5778
5790
  "hasDynamicHelp": false,
5779
5791
  "hiddenAliases": [],
5780
- "id": "face:tag:add",
5792
+ "id": "face:tag:set",
5781
5793
  "pluginAlias": "faces-cli",
5782
5794
  "pluginName": "faces-cli",
5783
5795
  "pluginType": "core",
@@ -5789,13 +5801,19 @@
5789
5801
  "commands",
5790
5802
  "face",
5791
5803
  "tag",
5792
- "add.js"
5804
+ "set.js"
5793
5805
  ]
5794
5806
  },
5795
- "face:tag:all": {
5807
+ "team:tag:add": {
5796
5808
  "aliases": [],
5797
- "args": {},
5798
- "description": "List all tags across all your faces",
5809
+ "args": {
5810
+ "team_id": {
5811
+ "description": "Team ID",
5812
+ "name": "team_id",
5813
+ "required": true
5814
+ }
5815
+ },
5816
+ "description": "Add tags to a team (appends, idempotent)",
5799
5817
  "flags": {
5800
5818
  "json": {
5801
5819
  "description": "Format output as json.",
@@ -5827,11 +5845,19 @@
5827
5845
  "hasDynamicHelp": false,
5828
5846
  "multiple": false,
5829
5847
  "type": "option"
5848
+ },
5849
+ "tag": {
5850
+ "description": "Tag to add (repeatable)",
5851
+ "name": "tag",
5852
+ "required": true,
5853
+ "hasDynamicHelp": false,
5854
+ "multiple": true,
5855
+ "type": "option"
5830
5856
  }
5831
5857
  },
5832
5858
  "hasDynamicHelp": false,
5833
5859
  "hiddenAliases": [],
5834
- "id": "face:tag:all",
5860
+ "id": "team:tag:add",
5835
5861
  "pluginAlias": "faces-cli",
5836
5862
  "pluginName": "faces-cli",
5837
5863
  "pluginType": "core",
@@ -5841,21 +5867,21 @@
5841
5867
  "relativePath": [
5842
5868
  "dist",
5843
5869
  "commands",
5844
- "face",
5870
+ "team",
5845
5871
  "tag",
5846
- "all.js"
5872
+ "add.js"
5847
5873
  ]
5848
5874
  },
5849
- "face:tag:list": {
5875
+ "team:tag:list": {
5850
5876
  "aliases": [],
5851
5877
  "args": {
5852
- "alias": {
5853
- "description": "Face alias",
5854
- "name": "alias",
5878
+ "team_id": {
5879
+ "description": "Team ID",
5880
+ "name": "team_id",
5855
5881
  "required": true
5856
5882
  }
5857
5883
  },
5858
- "description": "List tags on a face",
5884
+ "description": "List tags on a team",
5859
5885
  "flags": {
5860
5886
  "json": {
5861
5887
  "description": "Format output as json.",
@@ -5891,7 +5917,7 @@
5891
5917
  },
5892
5918
  "hasDynamicHelp": false,
5893
5919
  "hiddenAliases": [],
5894
- "id": "face:tag:list",
5920
+ "id": "team:tag:list",
5895
5921
  "pluginAlias": "faces-cli",
5896
5922
  "pluginName": "faces-cli",
5897
5923
  "pluginType": "core",
@@ -5901,17 +5927,17 @@
5901
5927
  "relativePath": [
5902
5928
  "dist",
5903
5929
  "commands",
5904
- "face",
5930
+ "team",
5905
5931
  "tag",
5906
5932
  "list.js"
5907
5933
  ]
5908
5934
  },
5909
- "face:tag:remove": {
5935
+ "team:tag:remove": {
5910
5936
  "aliases": [],
5911
5937
  "args": {
5912
- "alias": {
5913
- "description": "Face alias",
5914
- "name": "alias",
5938
+ "team_id": {
5939
+ "description": "Team ID",
5940
+ "name": "team_id",
5915
5941
  "required": true
5916
5942
  },
5917
5943
  "tag": {
@@ -5920,7 +5946,7 @@
5920
5946
  "required": true
5921
5947
  }
5922
5948
  },
5923
- "description": "Remove a tag from a face",
5949
+ "description": "Remove a tag from a team",
5924
5950
  "flags": {
5925
5951
  "json": {
5926
5952
  "description": "Format output as json.",
@@ -5956,7 +5982,7 @@
5956
5982
  },
5957
5983
  "hasDynamicHelp": false,
5958
5984
  "hiddenAliases": [],
5959
- "id": "face:tag:remove",
5985
+ "id": "team:tag:remove",
5960
5986
  "pluginAlias": "faces-cli",
5961
5987
  "pluginName": "faces-cli",
5962
5988
  "pluginType": "core",
@@ -5966,21 +5992,21 @@
5966
5992
  "relativePath": [
5967
5993
  "dist",
5968
5994
  "commands",
5969
- "face",
5995
+ "team",
5970
5996
  "tag",
5971
5997
  "remove.js"
5972
5998
  ]
5973
5999
  },
5974
- "face:tag:set": {
6000
+ "team:tag:set": {
5975
6001
  "aliases": [],
5976
6002
  "args": {
5977
- "alias": {
5978
- "description": "Face alias",
5979
- "name": "alias",
6003
+ "team_id": {
6004
+ "description": "Team ID",
6005
+ "name": "team_id",
5980
6006
  "required": true
5981
6007
  }
5982
6008
  },
5983
- "description": "Replace all tags on a face",
6009
+ "description": "Replace all tags on a team",
5984
6010
  "flags": {
5985
6011
  "json": {
5986
6012
  "description": "Format output as json.",
@@ -6024,7 +6050,7 @@
6024
6050
  },
6025
6051
  "hasDynamicHelp": false,
6026
6052
  "hiddenAliases": [],
6027
- "id": "face:tag:set",
6053
+ "id": "team:tag:set",
6028
6054
  "pluginAlias": "faces-cli",
6029
6055
  "pluginName": "faces-cli",
6030
6056
  "pluginType": "core",
@@ -6034,11 +6060,11 @@
6034
6060
  "relativePath": [
6035
6061
  "dist",
6036
6062
  "commands",
6037
- "face",
6063
+ "team",
6038
6064
  "tag",
6039
6065
  "set.js"
6040
6066
  ]
6041
6067
  }
6042
6068
  },
6043
- "version": "1.6.18"
6069
+ "version": "1.7.1"
6044
6070
  }