faces-cli 1.6.16 → 1.6.17

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 an OAuth provider account to Faces (e.g. ChatGPT Plus/Pro)",
136
- "examples": [
137
- "<%= config.bin %> auth connect openai",
138
- "<%= config.bin %> auth connect openai --manual"
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.",
@@ -168,17 +155,11 @@
168
155
  "hasDynamicHelp": false,
169
156
  "multiple": false,
170
157
  "type": "option"
171
- },
172
- "manual": {
173
- "description": "Manual mode for headless environments: prints the authorize URL and prompts you to paste the callback URL after approving in any browser.",
174
- "name": "manual",
175
- "allowNo": false,
176
- "type": "boolean"
177
158
  }
178
159
  },
179
160
  "hasDynamicHelp": false,
180
161
  "hiddenAliases": [],
181
- "id": "auth:connect",
162
+ "id": "billing:balance",
182
163
  "pluginAlias": "faces-cli",
183
164
  "pluginName": "faces-cli",
184
165
  "pluginType": "core",
@@ -188,18 +169,14 @@
188
169
  "relativePath": [
189
170
  "dist",
190
171
  "commands",
191
- "auth",
192
- "connect.js"
172
+ "billing",
173
+ "balance.js"
193
174
  ]
194
175
  },
195
- "auth:connections": {
176
+ "billing:card-setup": {
196
177
  "aliases": [],
197
178
  "args": {},
198
- "description": "List connected OAuth provider accounts",
199
- "examples": [
200
- "<%= config.bin %> auth connections",
201
- "<%= config.bin %> auth connections --json"
202
- ],
179
+ "description": "Get a Stripe card setup URL to save a payment method",
203
180
  "flags": {
204
181
  "json": {
205
182
  "description": "Format output as json.",
@@ -235,7 +212,7 @@
235
212
  },
236
213
  "hasDynamicHelp": false,
237
214
  "hiddenAliases": [],
238
- "id": "auth:connections",
215
+ "id": "billing:card-setup",
239
216
  "pluginAlias": "faces-cli",
240
217
  "pluginName": "faces-cli",
241
218
  "pluginType": "core",
@@ -245,26 +222,14 @@
245
222
  "relativePath": [
246
223
  "dist",
247
224
  "commands",
248
- "auth",
249
- "connections.js"
225
+ "billing",
226
+ "card-setup.js"
250
227
  ]
251
228
  },
252
- "auth:disconnect": {
229
+ "billing:llm-costs": {
253
230
  "aliases": [],
254
- "args": {
255
- "provider": {
256
- "description": "OAuth provider to disconnect",
257
- "name": "provider",
258
- "options": [
259
- "openai"
260
- ],
261
- "required": true
262
- }
263
- },
264
- "description": "Disconnect a linked OAuth provider account",
265
- "examples": [
266
- "<%= config.bin %> auth disconnect openai"
267
- ],
231
+ "args": {},
232
+ "description": "List available LLMs and their per-token costs",
268
233
  "flags": {
269
234
  "json": {
270
235
  "description": "Format output as json.",
@@ -296,11 +261,18 @@
296
261
  "hasDynamicHelp": false,
297
262
  "multiple": false,
298
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"
299
271
  }
300
272
  },
301
273
  "hasDynamicHelp": false,
302
274
  "hiddenAliases": [],
303
- "id": "auth:disconnect",
275
+ "id": "billing:llm-costs",
304
276
  "pluginAlias": "faces-cli",
305
277
  "pluginName": "faces-cli",
306
278
  "pluginType": "core",
@@ -310,14 +282,14 @@
310
282
  "relativePath": [
311
283
  "dist",
312
284
  "commands",
313
- "auth",
314
- "disconnect.js"
285
+ "billing",
286
+ "llm-costs.js"
315
287
  ]
316
288
  },
317
- "auth:login": {
289
+ "billing:quota": {
318
290
  "aliases": [],
319
291
  "args": {},
320
- "description": "Login and save JWT credentials",
292
+ "description": "Show compilation stats per face (deprecated — use compile:stats)",
321
293
  "flags": {
322
294
  "json": {
323
295
  "description": "Format output as json.",
@@ -349,27 +321,11 @@
349
321
  "hasDynamicHelp": false,
350
322
  "multiple": false,
351
323
  "type": "option"
352
- },
353
- "email": {
354
- "description": "Account email",
355
- "name": "email",
356
- "required": true,
357
- "hasDynamicHelp": false,
358
- "multiple": false,
359
- "type": "option"
360
- },
361
- "password": {
362
- "description": "Account password",
363
- "name": "password",
364
- "required": true,
365
- "hasDynamicHelp": false,
366
- "multiple": false,
367
- "type": "option"
368
324
  }
369
325
  },
370
326
  "hasDynamicHelp": false,
371
327
  "hiddenAliases": [],
372
- "id": "auth:login",
328
+ "id": "billing:quota",
373
329
  "pluginAlias": "faces-cli",
374
330
  "pluginName": "faces-cli",
375
331
  "pluginType": "core",
@@ -379,14 +335,14 @@
379
335
  "relativePath": [
380
336
  "dist",
381
337
  "commands",
382
- "auth",
383
- "login.js"
338
+ "billing",
339
+ "quota.js"
384
340
  ]
385
341
  },
386
- "auth:logout": {
342
+ "billing:subscription": {
387
343
  "aliases": [],
388
344
  "args": {},
389
- "description": "Clear saved credentials",
345
+ "description": "Show current plan, face count, and renewal date",
390
346
  "flags": {
391
347
  "json": {
392
348
  "description": "Format output as json.",
@@ -422,7 +378,7 @@
422
378
  },
423
379
  "hasDynamicHelp": false,
424
380
  "hiddenAliases": [],
425
- "id": "auth:logout",
381
+ "id": "billing:subscription",
426
382
  "pluginAlias": "faces-cli",
427
383
  "pluginName": "faces-cli",
428
384
  "pluginType": "core",
@@ -432,14 +388,14 @@
432
388
  "relativePath": [
433
389
  "dist",
434
390
  "commands",
435
- "auth",
436
- "logout.js"
391
+ "billing",
392
+ "subscription.js"
437
393
  ]
438
394
  },
439
- "auth:refresh": {
395
+ "billing:topup": {
440
396
  "aliases": [],
441
397
  "args": {},
442
- "description": "Exchange current JWT for a fresh one",
398
+ "description": "Top up credit balance using saved payment method",
443
399
  "flags": {
444
400
  "json": {
445
401
  "description": "Format output as json.",
@@ -471,11 +427,26 @@
471
427
  "hasDynamicHelp": false,
472
428
  "multiple": false,
473
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"
474
445
  }
475
446
  },
476
447
  "hasDynamicHelp": false,
477
448
  "hiddenAliases": [],
478
- "id": "auth:refresh",
449
+ "id": "billing:topup",
479
450
  "pluginAlias": "faces-cli",
480
451
  "pluginName": "faces-cli",
481
452
  "pluginType": "core",
@@ -485,14 +456,14 @@
485
456
  "relativePath": [
486
457
  "dist",
487
458
  "commands",
488
- "auth",
489
- "refresh.js"
459
+ "billing",
460
+ "topup.js"
490
461
  ]
491
462
  },
492
- "auth:register": {
463
+ "billing:usage": {
493
464
  "aliases": [],
494
465
  "args": {},
495
- "description": "Create a new Faces account",
466
+ "description": "Aggregated usage analytics",
496
467
  "flags": {
497
468
  "json": {
498
469
  "description": "Format output as json.",
@@ -525,53 +496,37 @@
525
496
  "multiple": false,
526
497
  "type": "option"
527
498
  },
528
- "email": {
529
- "description": "Email address",
530
- "name": "email",
531
- "required": true,
532
- "hasDynamicHelp": false,
533
- "multiple": false,
534
- "type": "option"
535
- },
536
- "password": {
537
- "description": "Password",
538
- "name": "password",
539
- "required": true,
540
- "hasDynamicHelp": false,
541
- "multiple": false,
542
- "type": "option"
543
- },
544
- "username": {
545
- "description": "Username (lowercase, dashes, numbers)",
546
- "name": "username",
547
- "required": true,
499
+ "group-by": {
500
+ "description": "Group results",
501
+ "name": "group-by",
548
502
  "hasDynamicHelp": false,
549
503
  "multiple": false,
504
+ "options": [
505
+ "api_key",
506
+ "model",
507
+ "llm",
508
+ "date"
509
+ ],
550
510
  "type": "option"
551
511
  },
552
- "invite-key": {
553
- "description": "Invite key (if required)",
554
- "name": "invite-key",
512
+ "from": {
513
+ "description": "Start date (YYYY-MM-DD)",
514
+ "name": "from",
555
515
  "hasDynamicHelp": false,
556
516
  "multiple": false,
557
517
  "type": "option"
558
518
  },
559
- "plan": {
560
- "description": "Plan to subscribe to: \"free\" ($5 activation) or \"connect\" ($17/mo, no activation fee)",
561
- "name": "plan",
562
- "default": "free",
519
+ "to": {
520
+ "description": "End date (YYYY-MM-DD)",
521
+ "name": "to",
563
522
  "hasDynamicHelp": false,
564
523
  "multiple": false,
565
- "options": [
566
- "free",
567
- "connect"
568
- ],
569
524
  "type": "option"
570
525
  }
571
526
  },
572
527
  "hasDynamicHelp": false,
573
528
  "hiddenAliases": [],
574
- "id": "auth:register",
529
+ "id": "billing:usage",
575
530
  "pluginAlias": "faces-cli",
576
531
  "pluginName": "faces-cli",
577
532
  "pluginType": "core",
@@ -581,14 +536,27 @@
581
536
  "relativePath": [
582
537
  "dist",
583
538
  "commands",
584
- "auth",
585
- "register.js"
539
+ "billing",
540
+ "usage.js"
586
541
  ]
587
542
  },
588
- "auth:whoami": {
543
+ "auth:connect": {
589
544
  "aliases": [],
590
- "args": {},
591
- "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 an OAuth provider account to Faces (e.g. ChatGPT Plus/Pro)",
556
+ "examples": [
557
+ "<%= config.bin %> auth connect openai",
558
+ "<%= config.bin %> auth connect openai --manual"
559
+ ],
592
560
  "flags": {
593
561
  "json": {
594
562
  "description": "Format output as json.",
@@ -620,11 +588,17 @@
620
588
  "hasDynamicHelp": false,
621
589
  "multiple": false,
622
590
  "type": "option"
591
+ },
592
+ "manual": {
593
+ "description": "Manual mode for headless environments: prints the authorize URL and prompts you to paste the callback URL after approving in any browser.",
594
+ "name": "manual",
595
+ "allowNo": false,
596
+ "type": "boolean"
623
597
  }
624
598
  },
625
599
  "hasDynamicHelp": false,
626
600
  "hiddenAliases": [],
627
- "id": "auth:whoami",
601
+ "id": "auth:connect",
628
602
  "pluginAlias": "faces-cli",
629
603
  "pluginName": "faces-cli",
630
604
  "pluginType": "core",
@@ -635,13 +609,17 @@
635
609
  "dist",
636
610
  "commands",
637
611
  "auth",
638
- "whoami.js"
612
+ "connect.js"
639
613
  ]
640
614
  },
641
- "billing:balance": {
615
+ "auth:connections": {
642
616
  "aliases": [],
643
617
  "args": {},
644
- "description": "Show credit balance and payment method status",
618
+ "description": "List connected OAuth provider accounts",
619
+ "examples": [
620
+ "<%= config.bin %> auth connections",
621
+ "<%= config.bin %> auth connections --json"
622
+ ],
645
623
  "flags": {
646
624
  "json": {
647
625
  "description": "Format output as json.",
@@ -677,7 +655,7 @@
677
655
  },
678
656
  "hasDynamicHelp": false,
679
657
  "hiddenAliases": [],
680
- "id": "billing:balance",
658
+ "id": "auth:connections",
681
659
  "pluginAlias": "faces-cli",
682
660
  "pluginName": "faces-cli",
683
661
  "pluginType": "core",
@@ -687,14 +665,26 @@
687
665
  "relativePath": [
688
666
  "dist",
689
667
  "commands",
690
- "billing",
691
- "balance.js"
668
+ "auth",
669
+ "connections.js"
692
670
  ]
693
671
  },
694
- "billing:card-setup": {
672
+ "auth:disconnect": {
695
673
  "aliases": [],
696
- "args": {},
697
- "description": "Get a Stripe card setup URL to save a payment method",
674
+ "args": {
675
+ "provider": {
676
+ "description": "OAuth provider to disconnect",
677
+ "name": "provider",
678
+ "options": [
679
+ "openai"
680
+ ],
681
+ "required": true
682
+ }
683
+ },
684
+ "description": "Disconnect a linked OAuth provider account",
685
+ "examples": [
686
+ "<%= config.bin %> auth disconnect openai"
687
+ ],
698
688
  "flags": {
699
689
  "json": {
700
690
  "description": "Format output as json.",
@@ -730,7 +720,7 @@
730
720
  },
731
721
  "hasDynamicHelp": false,
732
722
  "hiddenAliases": [],
733
- "id": "billing:card-setup",
723
+ "id": "auth:disconnect",
734
724
  "pluginAlias": "faces-cli",
735
725
  "pluginName": "faces-cli",
736
726
  "pluginType": "core",
@@ -740,14 +730,14 @@
740
730
  "relativePath": [
741
731
  "dist",
742
732
  "commands",
743
- "billing",
744
- "card-setup.js"
733
+ "auth",
734
+ "disconnect.js"
745
735
  ]
746
736
  },
747
- "billing:llm-costs": {
737
+ "auth:login": {
748
738
  "aliases": [],
749
739
  "args": {},
750
- "description": "List available LLMs and their per-token costs",
740
+ "description": "Login and save JWT credentials",
751
741
  "flags": {
752
742
  "json": {
753
743
  "description": "Format output as json.",
@@ -780,9 +770,18 @@
780
770
  "multiple": false,
781
771
  "type": "option"
782
772
  },
783
- "provider": {
784
- "description": "Filter by provider (e.g. openai, anthropic)",
785
- "name": "provider",
773
+ "email": {
774
+ "description": "Account email",
775
+ "name": "email",
776
+ "required": true,
777
+ "hasDynamicHelp": false,
778
+ "multiple": false,
779
+ "type": "option"
780
+ },
781
+ "password": {
782
+ "description": "Account password",
783
+ "name": "password",
784
+ "required": true,
786
785
  "hasDynamicHelp": false,
787
786
  "multiple": false,
788
787
  "type": "option"
@@ -790,7 +789,7 @@
790
789
  },
791
790
  "hasDynamicHelp": false,
792
791
  "hiddenAliases": [],
793
- "id": "billing:llm-costs",
792
+ "id": "auth:login",
794
793
  "pluginAlias": "faces-cli",
795
794
  "pluginName": "faces-cli",
796
795
  "pluginType": "core",
@@ -800,14 +799,14 @@
800
799
  "relativePath": [
801
800
  "dist",
802
801
  "commands",
803
- "billing",
804
- "llm-costs.js"
802
+ "auth",
803
+ "login.js"
805
804
  ]
806
805
  },
807
- "billing:quota": {
806
+ "auth:logout": {
808
807
  "aliases": [],
809
808
  "args": {},
810
- "description": "Show compilation stats per face (deprecated — use compile:stats)",
809
+ "description": "Clear saved credentials",
811
810
  "flags": {
812
811
  "json": {
813
812
  "description": "Format output as json.",
@@ -843,7 +842,7 @@
843
842
  },
844
843
  "hasDynamicHelp": false,
845
844
  "hiddenAliases": [],
846
- "id": "billing:quota",
845
+ "id": "auth:logout",
847
846
  "pluginAlias": "faces-cli",
848
847
  "pluginName": "faces-cli",
849
848
  "pluginType": "core",
@@ -853,14 +852,14 @@
853
852
  "relativePath": [
854
853
  "dist",
855
854
  "commands",
856
- "billing",
857
- "quota.js"
855
+ "auth",
856
+ "logout.js"
858
857
  ]
859
858
  },
860
- "billing:subscription": {
859
+ "auth:refresh": {
861
860
  "aliases": [],
862
861
  "args": {},
863
- "description": "Show current plan, face count, and renewal date",
862
+ "description": "Exchange current JWT for a fresh one",
864
863
  "flags": {
865
864
  "json": {
866
865
  "description": "Format output as json.",
@@ -896,7 +895,7 @@
896
895
  },
897
896
  "hasDynamicHelp": false,
898
897
  "hiddenAliases": [],
899
- "id": "billing:subscription",
898
+ "id": "auth:refresh",
900
899
  "pluginAlias": "faces-cli",
901
900
  "pluginName": "faces-cli",
902
901
  "pluginType": "core",
@@ -906,14 +905,14 @@
906
905
  "relativePath": [
907
906
  "dist",
908
907
  "commands",
909
- "billing",
910
- "subscription.js"
908
+ "auth",
909
+ "refresh.js"
911
910
  ]
912
911
  },
913
- "billing:topup": {
912
+ "auth:register": {
914
913
  "aliases": [],
915
914
  "args": {},
916
- "description": "Top up credit balance using saved payment method",
915
+ "description": "Create a new Faces account",
917
916
  "flags": {
918
917
  "json": {
919
918
  "description": "Format output as json.",
@@ -946,25 +945,53 @@
946
945
  "multiple": false,
947
946
  "type": "option"
948
947
  },
949
- "amount": {
950
- "description": "Top-up amount in USD (min $1)",
951
- "name": "amount",
948
+ "email": {
949
+ "description": "Email address",
950
+ "name": "email",
952
951
  "required": true,
953
952
  "hasDynamicHelp": false,
954
953
  "multiple": false,
955
954
  "type": "option"
956
955
  },
957
- "payment-ref": {
958
- "description": "Payment reference (admin/test path)",
959
- "name": "payment-ref",
956
+ "password": {
957
+ "description": "Password",
958
+ "name": "password",
959
+ "required": true,
960
+ "hasDynamicHelp": false,
961
+ "multiple": false,
962
+ "type": "option"
963
+ },
964
+ "username": {
965
+ "description": "Username (lowercase, dashes, numbers)",
966
+ "name": "username",
967
+ "required": true,
968
+ "hasDynamicHelp": false,
969
+ "multiple": false,
970
+ "type": "option"
971
+ },
972
+ "invite-key": {
973
+ "description": "Invite key (if required)",
974
+ "name": "invite-key",
975
+ "hasDynamicHelp": false,
976
+ "multiple": false,
977
+ "type": "option"
978
+ },
979
+ "plan": {
980
+ "description": "Plan to subscribe to: \"free\" ($5 activation) or \"connect\" ($17/mo, no activation fee)",
981
+ "name": "plan",
982
+ "default": "free",
960
983
  "hasDynamicHelp": false,
961
984
  "multiple": false,
985
+ "options": [
986
+ "free",
987
+ "connect"
988
+ ],
962
989
  "type": "option"
963
990
  }
964
991
  },
965
992
  "hasDynamicHelp": false,
966
993
  "hiddenAliases": [],
967
- "id": "billing:topup",
994
+ "id": "auth:register",
968
995
  "pluginAlias": "faces-cli",
969
996
  "pluginName": "faces-cli",
970
997
  "pluginType": "core",
@@ -974,14 +1001,14 @@
974
1001
  "relativePath": [
975
1002
  "dist",
976
1003
  "commands",
977
- "billing",
978
- "topup.js"
1004
+ "auth",
1005
+ "register.js"
979
1006
  ]
980
1007
  },
981
- "billing:usage": {
1008
+ "auth:whoami": {
982
1009
  "aliases": [],
983
1010
  "args": {},
984
- "description": "Aggregated usage analytics",
1011
+ "description": "Print current user profile and auth diagnostic",
985
1012
  "flags": {
986
1013
  "json": {
987
1014
  "description": "Format output as json.",
@@ -1013,38 +1040,11 @@
1013
1040
  "hasDynamicHelp": false,
1014
1041
  "multiple": false,
1015
1042
  "type": "option"
1016
- },
1017
- "group-by": {
1018
- "description": "Group results",
1019
- "name": "group-by",
1020
- "hasDynamicHelp": false,
1021
- "multiple": false,
1022
- "options": [
1023
- "api_key",
1024
- "model",
1025
- "llm",
1026
- "date"
1027
- ],
1028
- "type": "option"
1029
- },
1030
- "from": {
1031
- "description": "Start date (YYYY-MM-DD)",
1032
- "name": "from",
1033
- "hasDynamicHelp": false,
1034
- "multiple": false,
1035
- "type": "option"
1036
- },
1037
- "to": {
1038
- "description": "End date (YYYY-MM-DD)",
1039
- "name": "to",
1040
- "hasDynamicHelp": false,
1041
- "multiple": false,
1042
- "type": "option"
1043
1043
  }
1044
1044
  },
1045
1045
  "hasDynamicHelp": false,
1046
1046
  "hiddenAliases": [],
1047
- "id": "billing:usage",
1047
+ "id": "auth:whoami",
1048
1048
  "pluginAlias": "faces-cli",
1049
1049
  "pluginName": "faces-cli",
1050
1050
  "pluginType": "core",
@@ -1054,8 +1054,8 @@
1054
1054
  "relativePath": [
1055
1055
  "dist",
1056
1056
  "commands",
1057
- "billing",
1058
- "usage.js"
1057
+ "auth",
1058
+ "whoami.js"
1059
1059
  ]
1060
1060
  },
1061
1061
  "catalog:backup": {
@@ -2320,63 +2320,10 @@
2320
2320
  "show.js"
2321
2321
  ]
2322
2322
  },
2323
- "face:attributes": {
2324
- "aliases": [],
2325
- "args": {},
2326
- "description": "List all supported attribute keys",
2327
- "flags": {
2328
- "json": {
2329
- "description": "Format output as json.",
2330
- "helpGroup": "GLOBAL",
2331
- "name": "json",
2332
- "allowNo": false,
2333
- "type": "boolean"
2334
- },
2335
- "base-url": {
2336
- "description": "API base URL",
2337
- "env": "FACES_BASE_URL",
2338
- "name": "base-url",
2339
- "hasDynamicHelp": false,
2340
- "multiple": false,
2341
- "type": "option"
2342
- },
2343
- "token": {
2344
- "description": "JWT bearer token",
2345
- "env": "FACES_TOKEN",
2346
- "name": "token",
2347
- "hasDynamicHelp": false,
2348
- "multiple": false,
2349
- "type": "option"
2350
- },
2351
- "api-key": {
2352
- "description": "API key",
2353
- "env": "FACES_API_KEY",
2354
- "name": "api-key",
2355
- "hasDynamicHelp": false,
2356
- "multiple": false,
2357
- "type": "option"
2358
- }
2359
- },
2360
- "hasDynamicHelp": false,
2361
- "hiddenAliases": [],
2362
- "id": "face:attributes",
2363
- "pluginAlias": "faces-cli",
2364
- "pluginName": "faces-cli",
2365
- "pluginType": "core",
2366
- "strict": true,
2367
- "enableJsonFlag": true,
2368
- "isESM": true,
2369
- "relativePath": [
2370
- "dist",
2371
- "commands",
2372
- "face",
2373
- "attributes.js"
2374
- ]
2375
- },
2376
- "face:create": {
2323
+ "keys:create": {
2377
2324
  "aliases": [],
2378
2325
  "args": {},
2379
- "description": "Create a new face",
2326
+ "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.",
2380
2327
  "flags": {
2381
2328
  "json": {
2382
2329
  "description": "Format output as json.",
@@ -2410,67 +2357,51 @@
2410
2357
  "type": "option"
2411
2358
  },
2412
2359
  "name": {
2413
- "description": "Display name",
2360
+ "description": "Key name/label",
2414
2361
  "name": "name",
2415
2362
  "required": true,
2416
2363
  "hasDynamicHelp": false,
2417
2364
  "multiple": false,
2418
2365
  "type": "option"
2419
2366
  },
2420
- "alias": {
2421
- "description": "Unique alias slug",
2422
- "name": "alias",
2423
- "required": true,
2367
+ "expires-days": {
2368
+ "description": "Expiry in days (omit for no expiry)",
2369
+ "name": "expires-days",
2424
2370
  "hasDynamicHelp": false,
2425
2371
  "multiple": false,
2426
2372
  "type": "option"
2427
2373
  },
2428
- "description": {
2429
- "description": "Plain-text description / bio (max 1500 chars)",
2430
- "name": "description",
2374
+ "budget": {
2375
+ "description": "Spend budget in USD",
2376
+ "name": "budget",
2431
2377
  "hasDynamicHelp": false,
2432
2378
  "multiple": false,
2433
2379
  "type": "option"
2434
2380
  },
2435
- "tag": {
2436
- "description": "Tag label (repeatable, lowercase)",
2437
- "name": "tag",
2381
+ "face": {
2382
+ "description": "Allowed face alias (repeatable)",
2383
+ "name": "face",
2438
2384
  "hasDynamicHelp": false,
2439
2385
  "multiple": true,
2440
2386
  "type": "option"
2441
2387
  },
2442
- "default-model": {
2443
- "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
2444
- "name": "default-model",
2445
- "hasDynamicHelp": false,
2446
- "multiple": false,
2447
- "type": "option"
2448
- },
2449
- "formula": {
2450
- "description": "Boolean formula over owned concrete face aliases (e.g. \"a | b\", \"(a | b) - c\"). Creates a composite face.",
2451
- "name": "formula",
2452
- "hasDynamicHelp": false,
2453
- "multiple": false,
2454
- "type": "option"
2455
- },
2456
- "attr": {
2457
- "description": "Attribute KEY=VALUE (repeatable)",
2458
- "name": "attr",
2388
+ "model": {
2389
+ "description": "Allowed model name (repeatable)",
2390
+ "name": "model",
2459
2391
  "hasDynamicHelp": false,
2460
2392
  "multiple": true,
2461
2393
  "type": "option"
2462
2394
  },
2463
- "tool": {
2464
- "description": "Tool name to enable (repeatable)",
2465
- "name": "tool",
2466
- "hasDynamicHelp": false,
2467
- "multiple": true,
2468
- "type": "option"
2395
+ "save": {
2396
+ "description": "Save the new key to ~/.faces/config.json as api_key (default: true; use --no-save to skip)",
2397
+ "name": "save",
2398
+ "allowNo": true,
2399
+ "type": "boolean"
2469
2400
  }
2470
2401
  },
2471
2402
  "hasDynamicHelp": false,
2472
2403
  "hiddenAliases": [],
2473
- "id": "face:create",
2404
+ "id": "keys:create",
2474
2405
  "pluginAlias": "faces-cli",
2475
2406
  "pluginName": "faces-cli",
2476
2407
  "pluginType": "core",
@@ -2480,20 +2411,73 @@
2480
2411
  "relativePath": [
2481
2412
  "dist",
2482
2413
  "commands",
2483
- "face",
2414
+ "keys",
2484
2415
  "create.js"
2485
2416
  ]
2486
2417
  },
2487
- "face:delete": {
2418
+ "keys:list": {
2488
2419
  "aliases": [],
2489
- "args": {
2490
- "face_id": {
2491
- "description": "Face alias",
2492
- "name": "face_id",
2493
- "required": true
2494
- }
2495
- },
2496
- "description": "Delete a face permanently",
2420
+ "args": {},
2421
+ "description": "List all API keys (JWT required)",
2422
+ "flags": {
2423
+ "json": {
2424
+ "description": "Format output as json.",
2425
+ "helpGroup": "GLOBAL",
2426
+ "name": "json",
2427
+ "allowNo": false,
2428
+ "type": "boolean"
2429
+ },
2430
+ "base-url": {
2431
+ "description": "API base URL",
2432
+ "env": "FACES_BASE_URL",
2433
+ "name": "base-url",
2434
+ "hasDynamicHelp": false,
2435
+ "multiple": false,
2436
+ "type": "option"
2437
+ },
2438
+ "token": {
2439
+ "description": "JWT bearer token",
2440
+ "env": "FACES_TOKEN",
2441
+ "name": "token",
2442
+ "hasDynamicHelp": false,
2443
+ "multiple": false,
2444
+ "type": "option"
2445
+ },
2446
+ "api-key": {
2447
+ "description": "API key",
2448
+ "env": "FACES_API_KEY",
2449
+ "name": "api-key",
2450
+ "hasDynamicHelp": false,
2451
+ "multiple": false,
2452
+ "type": "option"
2453
+ }
2454
+ },
2455
+ "hasDynamicHelp": false,
2456
+ "hiddenAliases": [],
2457
+ "id": "keys:list",
2458
+ "pluginAlias": "faces-cli",
2459
+ "pluginName": "faces-cli",
2460
+ "pluginType": "core",
2461
+ "strict": true,
2462
+ "enableJsonFlag": true,
2463
+ "isESM": true,
2464
+ "relativePath": [
2465
+ "dist",
2466
+ "commands",
2467
+ "keys",
2468
+ "list.js"
2469
+ ]
2470
+ },
2471
+ "keys:revoke": {
2472
+ "aliases": [],
2473
+ "args": {
2474
+ "key_id": {
2475
+ "description": "Key ID",
2476
+ "name": "key_id",
2477
+ "required": true
2478
+ }
2479
+ },
2480
+ "description": "Revoke an API key (JWT required)",
2497
2481
  "flags": {
2498
2482
  "json": {
2499
2483
  "description": "Format output as json.",
@@ -2535,7 +2519,7 @@
2535
2519
  },
2536
2520
  "hasDynamicHelp": false,
2537
2521
  "hiddenAliases": [],
2538
- "id": "face:delete",
2522
+ "id": "keys:revoke",
2539
2523
  "pluginAlias": "faces-cli",
2540
2524
  "pluginName": "faces-cli",
2541
2525
  "pluginType": "core",
@@ -2545,14 +2529,20 @@
2545
2529
  "relativePath": [
2546
2530
  "dist",
2547
2531
  "commands",
2548
- "face",
2549
- "delete.js"
2532
+ "keys",
2533
+ "revoke.js"
2550
2534
  ]
2551
2535
  },
2552
- "face:diff": {
2536
+ "keys:update": {
2553
2537
  "aliases": [],
2554
- "args": {},
2555
- "description": "Compare owned faces pairwise across all centroid components",
2538
+ "args": {
2539
+ "key_id": {
2540
+ "description": "Key ID",
2541
+ "name": "key_id",
2542
+ "required": true
2543
+ }
2544
+ },
2545
+ "description": "Update API key metadata (JWT required)",
2556
2546
  "flags": {
2557
2547
  "json": {
2558
2548
  "description": "Format output as json.",
@@ -2585,18 +2575,30 @@
2585
2575
  "multiple": false,
2586
2576
  "type": "option"
2587
2577
  },
2588
- "face": {
2589
- "description": "Face alias to include (repeatable, min 2)",
2590
- "name": "face",
2591
- "required": true,
2578
+ "name": {
2579
+ "description": "New key name",
2580
+ "name": "name",
2592
2581
  "hasDynamicHelp": false,
2593
- "multiple": true,
2582
+ "multiple": false,
2583
+ "type": "option"
2584
+ },
2585
+ "budget": {
2586
+ "description": "New spend budget in USD",
2587
+ "name": "budget",
2588
+ "hasDynamicHelp": false,
2589
+ "multiple": false,
2594
2590
  "type": "option"
2591
+ },
2592
+ "reset-spent": {
2593
+ "description": "Reset spent amount to zero",
2594
+ "name": "reset-spent",
2595
+ "allowNo": false,
2596
+ "type": "boolean"
2595
2597
  }
2596
2598
  },
2597
2599
  "hasDynamicHelp": false,
2598
2600
  "hiddenAliases": [],
2599
- "id": "face:diff",
2601
+ "id": "keys:update",
2600
2602
  "pluginAlias": "faces-cli",
2601
2603
  "pluginName": "faces-cli",
2602
2604
  "pluginType": "core",
@@ -2606,20 +2608,67 @@
2606
2608
  "relativePath": [
2607
2609
  "dist",
2608
2610
  "commands",
2609
- "face",
2610
- "diff.js"
2611
+ "keys",
2612
+ "update.js"
2611
2613
  ]
2612
2614
  },
2613
- "face:edit": {
2615
+ "face:attributes": {
2614
2616
  "aliases": [],
2615
- "args": {
2616
- "face_id": {
2617
- "description": "Face alias",
2618
- "name": "face_id",
2619
- "required": true
2617
+ "args": {},
2618
+ "description": "List all supported attribute keys",
2619
+ "flags": {
2620
+ "json": {
2621
+ "description": "Format output as json.",
2622
+ "helpGroup": "GLOBAL",
2623
+ "name": "json",
2624
+ "allowNo": false,
2625
+ "type": "boolean"
2626
+ },
2627
+ "base-url": {
2628
+ "description": "API base URL",
2629
+ "env": "FACES_BASE_URL",
2630
+ "name": "base-url",
2631
+ "hasDynamicHelp": false,
2632
+ "multiple": false,
2633
+ "type": "option"
2634
+ },
2635
+ "token": {
2636
+ "description": "JWT bearer token",
2637
+ "env": "FACES_TOKEN",
2638
+ "name": "token",
2639
+ "hasDynamicHelp": false,
2640
+ "multiple": false,
2641
+ "type": "option"
2642
+ },
2643
+ "api-key": {
2644
+ "description": "API key",
2645
+ "env": "FACES_API_KEY",
2646
+ "name": "api-key",
2647
+ "hasDynamicHelp": false,
2648
+ "multiple": false,
2649
+ "type": "option"
2620
2650
  }
2621
2651
  },
2622
- "description": "Edit a face's metadata",
2652
+ "hasDynamicHelp": false,
2653
+ "hiddenAliases": [],
2654
+ "id": "face:attributes",
2655
+ "pluginAlias": "faces-cli",
2656
+ "pluginName": "faces-cli",
2657
+ "pluginType": "core",
2658
+ "strict": true,
2659
+ "enableJsonFlag": true,
2660
+ "isESM": true,
2661
+ "relativePath": [
2662
+ "dist",
2663
+ "commands",
2664
+ "face",
2665
+ "attributes.js"
2666
+ ]
2667
+ },
2668
+ "face:create": {
2669
+ "aliases": [],
2670
+ "args": {},
2671
+ "description": "Create a new face",
2623
2672
  "flags": {
2624
2673
  "json": {
2625
2674
  "description": "Format output as json.",
@@ -2653,8 +2702,17 @@
2653
2702
  "type": "option"
2654
2703
  },
2655
2704
  "name": {
2656
- "description": "New display name",
2705
+ "description": "Display name",
2657
2706
  "name": "name",
2707
+ "required": true,
2708
+ "hasDynamicHelp": false,
2709
+ "multiple": false,
2710
+ "type": "option"
2711
+ },
2712
+ "alias": {
2713
+ "description": "Unique alias slug",
2714
+ "name": "alias",
2715
+ "required": true,
2658
2716
  "hasDynamicHelp": false,
2659
2717
  "multiple": false,
2660
2718
  "type": "option"
@@ -2667,7 +2725,7 @@
2667
2725
  "type": "option"
2668
2726
  },
2669
2727
  "tag": {
2670
- "description": "Replace all tags (repeatable, lowercase)",
2728
+ "description": "Tag label (repeatable, lowercase)",
2671
2729
  "name": "tag",
2672
2730
  "hasDynamicHelp": false,
2673
2731
  "multiple": true,
@@ -2681,21 +2739,21 @@
2681
2739
  "type": "option"
2682
2740
  },
2683
2741
  "formula": {
2684
- "description": "New boolean formula (synthetic faces only)",
2742
+ "description": "Boolean formula over owned concrete face aliases (e.g. \"a | b\", \"(a | b) - c\"). Creates a composite face.",
2685
2743
  "name": "formula",
2686
2744
  "hasDynamicHelp": false,
2687
2745
  "multiple": false,
2688
2746
  "type": "option"
2689
2747
  },
2690
2748
  "attr": {
2691
- "description": "Update attribute KEY=VALUE (repeatable)",
2749
+ "description": "Attribute KEY=VALUE (repeatable)",
2692
2750
  "name": "attr",
2693
2751
  "hasDynamicHelp": false,
2694
2752
  "multiple": true,
2695
2753
  "type": "option"
2696
2754
  },
2697
2755
  "tool": {
2698
- "description": "Tool names to set (replaces list, repeatable)",
2756
+ "description": "Tool name to enable (repeatable)",
2699
2757
  "name": "tool",
2700
2758
  "hasDynamicHelp": false,
2701
2759
  "multiple": true,
@@ -2704,7 +2762,7 @@
2704
2762
  },
2705
2763
  "hasDynamicHelp": false,
2706
2764
  "hiddenAliases": [],
2707
- "id": "face:edit",
2765
+ "id": "face:create",
2708
2766
  "pluginAlias": "faces-cli",
2709
2767
  "pluginName": "faces-cli",
2710
2768
  "pluginType": "core",
@@ -2715,10 +2773,10 @@
2715
2773
  "dist",
2716
2774
  "commands",
2717
2775
  "face",
2718
- "edit.js"
2776
+ "create.js"
2719
2777
  ]
2720
2778
  },
2721
- "face:get": {
2779
+ "face:delete": {
2722
2780
  "aliases": [],
2723
2781
  "args": {
2724
2782
  "face_id": {
@@ -2727,7 +2785,7 @@
2727
2785
  "required": true
2728
2786
  }
2729
2787
  },
2730
- "description": "Get details for a face by alias",
2788
+ "description": "Delete a face permanently",
2731
2789
  "flags": {
2732
2790
  "json": {
2733
2791
  "description": "Format output as json.",
@@ -2760,17 +2818,16 @@
2760
2818
  "multiple": false,
2761
2819
  "type": "option"
2762
2820
  },
2763
- "include": {
2764
- "description": "Include extra fields: tags, teams (comma-separated)",
2765
- "name": "include",
2766
- "hasDynamicHelp": false,
2767
- "multiple": false,
2768
- "type": "option"
2821
+ "yes": {
2822
+ "description": "Skip confirmation",
2823
+ "name": "yes",
2824
+ "allowNo": false,
2825
+ "type": "boolean"
2769
2826
  }
2770
2827
  },
2771
2828
  "hasDynamicHelp": false,
2772
2829
  "hiddenAliases": [],
2773
- "id": "face:get",
2830
+ "id": "face:delete",
2774
2831
  "pluginAlias": "faces-cli",
2775
2832
  "pluginName": "faces-cli",
2776
2833
  "pluginType": "core",
@@ -2781,13 +2838,13 @@
2781
2838
  "dist",
2782
2839
  "commands",
2783
2840
  "face",
2784
- "get.js"
2841
+ "delete.js"
2785
2842
  ]
2786
2843
  },
2787
- "face:list": {
2844
+ "face:diff": {
2788
2845
  "aliases": [],
2789
2846
  "args": {},
2790
- "description": "List all owned faces",
2847
+ "description": "Compare owned faces pairwise across all centroid components",
2791
2848
  "flags": {
2792
2849
  "json": {
2793
2850
  "description": "Format output as json.",
@@ -2820,31 +2877,18 @@
2820
2877
  "multiple": false,
2821
2878
  "type": "option"
2822
2879
  },
2823
- "tag": {
2824
- "description": "Filter by tag (repeatable, AND logic)",
2825
- "name": "tag",
2826
- "hasDynamicHelp": false,
2827
- "multiple": true,
2828
- "type": "option"
2829
- },
2830
- "team": {
2831
- "description": "Filter by team ID (repeatable, OR logic)",
2832
- "name": "team",
2880
+ "face": {
2881
+ "description": "Face alias to include (repeatable, min 2)",
2882
+ "name": "face",
2883
+ "required": true,
2833
2884
  "hasDynamicHelp": false,
2834
2885
  "multiple": true,
2835
2886
  "type": "option"
2836
- },
2837
- "include": {
2838
- "description": "Include extra fields: tags, teams (comma-separated)",
2839
- "name": "include",
2840
- "hasDynamicHelp": false,
2841
- "multiple": false,
2842
- "type": "option"
2843
2887
  }
2844
2888
  },
2845
2889
  "hasDynamicHelp": false,
2846
2890
  "hiddenAliases": [],
2847
- "id": "face:list",
2891
+ "id": "face:diff",
2848
2892
  "pluginAlias": "faces-cli",
2849
2893
  "pluginName": "faces-cli",
2850
2894
  "pluginType": "core",
@@ -2855,10 +2899,10 @@
2855
2899
  "dist",
2856
2900
  "commands",
2857
2901
  "face",
2858
- "list.js"
2902
+ "diff.js"
2859
2903
  ]
2860
2904
  },
2861
- "face:neighbors": {
2905
+ "face:edit": {
2862
2906
  "aliases": [],
2863
2907
  "args": {
2864
2908
  "face_id": {
@@ -2867,7 +2911,7 @@
2867
2911
  "required": true
2868
2912
  }
2869
2913
  },
2870
- "description": "Find the most similar or dissimilar owned faces to a given face",
2914
+ "description": "Edit a face's metadata",
2871
2915
  "flags": {
2872
2916
  "json": {
2873
2917
  "description": "Format output as json.",
@@ -2900,97 +2944,59 @@
2900
2944
  "multiple": false,
2901
2945
  "type": "option"
2902
2946
  },
2903
- "k": {
2904
- "description": "Number of results (1–20)",
2905
- "name": "k",
2906
- "default": 5,
2947
+ "name": {
2948
+ "description": "New display name",
2949
+ "name": "name",
2907
2950
  "hasDynamicHelp": false,
2908
2951
  "multiple": false,
2909
2952
  "type": "option"
2910
2953
  },
2911
- "component": {
2912
- "description": "Centroid component to rank on (beta, delta, epsilon are the principal components of a face; face is their composite)",
2913
- "name": "component",
2914
- "default": "face",
2954
+ "description": {
2955
+ "description": "Plain-text description / bio (max 1500 chars)",
2956
+ "name": "description",
2915
2957
  "hasDynamicHelp": false,
2916
2958
  "multiple": false,
2917
- "options": [
2918
- "face",
2919
- "beta",
2920
- "delta",
2921
- "epsilon"
2922
- ],
2923
2959
  "type": "option"
2924
2960
  },
2925
- "direction": {
2926
- "description": "nearest (most similar) or furthest (most dissimilar)",
2927
- "name": "direction",
2928
- "default": "nearest",
2961
+ "tag": {
2962
+ "description": "Replace all tags (repeatable, lowercase)",
2963
+ "name": "tag",
2929
2964
  "hasDynamicHelp": false,
2930
- "multiple": false,
2931
- "options": [
2932
- "nearest",
2933
- "furthest"
2934
- ],
2965
+ "multiple": true,
2935
2966
  "type": "option"
2936
- }
2937
- },
2938
- "hasDynamicHelp": false,
2939
- "hiddenAliases": [],
2940
- "id": "face:neighbors",
2941
- "pluginAlias": "faces-cli",
2942
- "pluginName": "faces-cli",
2943
- "pluginType": "core",
2944
- "strict": true,
2945
- "enableJsonFlag": true,
2946
- "isESM": true,
2947
- "relativePath": [
2948
- "dist",
2949
- "commands",
2950
- "face",
2951
- "neighbors.js"
2952
- ]
2953
- },
2954
- "face:stats": {
2955
- "aliases": [],
2956
- "args": {},
2957
- "description": "Compile and chat stats for all owned faces",
2958
- "flags": {
2959
- "json": {
2960
- "description": "Format output as json.",
2961
- "helpGroup": "GLOBAL",
2962
- "name": "json",
2963
- "allowNo": false,
2964
- "type": "boolean"
2965
2967
  },
2966
- "base-url": {
2967
- "description": "API base URL",
2968
- "env": "FACES_BASE_URL",
2969
- "name": "base-url",
2968
+ "default-model": {
2969
+ "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
2970
+ "name": "default-model",
2970
2971
  "hasDynamicHelp": false,
2971
2972
  "multiple": false,
2972
2973
  "type": "option"
2973
2974
  },
2974
- "token": {
2975
- "description": "JWT bearer token",
2976
- "env": "FACES_TOKEN",
2977
- "name": "token",
2975
+ "formula": {
2976
+ "description": "New boolean formula (synthetic faces only)",
2977
+ "name": "formula",
2978
2978
  "hasDynamicHelp": false,
2979
2979
  "multiple": false,
2980
2980
  "type": "option"
2981
2981
  },
2982
- "api-key": {
2983
- "description": "API key",
2984
- "env": "FACES_API_KEY",
2985
- "name": "api-key",
2982
+ "attr": {
2983
+ "description": "Update attribute KEY=VALUE (repeatable)",
2984
+ "name": "attr",
2986
2985
  "hasDynamicHelp": false,
2987
- "multiple": false,
2986
+ "multiple": true,
2987
+ "type": "option"
2988
+ },
2989
+ "tool": {
2990
+ "description": "Tool names to set (replaces list, repeatable)",
2991
+ "name": "tool",
2992
+ "hasDynamicHelp": false,
2993
+ "multiple": true,
2988
2994
  "type": "option"
2989
2995
  }
2990
2996
  },
2991
2997
  "hasDynamicHelp": false,
2992
2998
  "hiddenAliases": [],
2993
- "id": "face:stats",
2999
+ "id": "face:edit",
2994
3000
  "pluginAlias": "faces-cli",
2995
3001
  "pluginName": "faces-cli",
2996
3002
  "pluginType": "core",
@@ -3001,19 +3007,19 @@
3001
3007
  "dist",
3002
3008
  "commands",
3003
3009
  "face",
3004
- "stats.js"
3010
+ "edit.js"
3005
3011
  ]
3006
3012
  },
3007
- "face:teams": {
3013
+ "face:get": {
3008
3014
  "aliases": [],
3009
3015
  "args": {
3010
- "alias": {
3016
+ "face_id": {
3011
3017
  "description": "Face alias",
3012
- "name": "alias",
3018
+ "name": "face_id",
3013
3019
  "required": true
3014
3020
  }
3015
3021
  },
3016
- "description": "Set a face's team memberships (replaces all)",
3022
+ "description": "Get details for a face by alias",
3017
3023
  "flags": {
3018
3024
  "json": {
3019
3025
  "description": "Format output as json.",
@@ -3046,18 +3052,17 @@
3046
3052
  "multiple": false,
3047
3053
  "type": "option"
3048
3054
  },
3049
- "team": {
3050
- "description": "Team ID (repeatable, replaces all memberships)",
3051
- "name": "team",
3052
- "required": true,
3055
+ "include": {
3056
+ "description": "Include extra fields: tags, teams (comma-separated)",
3057
+ "name": "include",
3053
3058
  "hasDynamicHelp": false,
3054
- "multiple": true,
3059
+ "multiple": false,
3055
3060
  "type": "option"
3056
3061
  }
3057
3062
  },
3058
3063
  "hasDynamicHelp": false,
3059
3064
  "hiddenAliases": [],
3060
- "id": "face:teams",
3065
+ "id": "face:get",
3061
3066
  "pluginAlias": "faces-cli",
3062
3067
  "pluginName": "faces-cli",
3063
3068
  "pluginType": "core",
@@ -3068,19 +3073,13 @@
3068
3073
  "dist",
3069
3074
  "commands",
3070
3075
  "face",
3071
- "teams.js"
3076
+ "get.js"
3072
3077
  ]
3073
3078
  },
3074
- "face:upload": {
3079
+ "face:list": {
3075
3080
  "aliases": [],
3076
- "args": {
3077
- "face_id": {
3078
- "description": "Face alias",
3079
- "name": "face_id",
3080
- "required": true
3081
- }
3082
- },
3083
- "description": "Upload a file (text/PDF/audio/video) to a face",
3081
+ "args": {},
3082
+ "description": "List all owned faces",
3084
3083
  "flags": {
3085
3084
  "json": {
3086
3085
  "description": "Format output as json.",
@@ -3113,41 +3112,23 @@
3113
3112
  "multiple": false,
3114
3113
  "type": "option"
3115
3114
  },
3116
- "file": {
3117
- "description": "File to upload",
3118
- "name": "file",
3119
- "required": true,
3120
- "hasDynamicHelp": false,
3121
- "multiple": false,
3122
- "type": "option"
3123
- },
3124
- "kind": {
3125
- "description": "Upload kind: document or thread",
3126
- "name": "kind",
3127
- "default": "document",
3115
+ "tag": {
3116
+ "description": "Filter by tag (repeatable, AND logic)",
3117
+ "name": "tag",
3128
3118
  "hasDynamicHelp": false,
3129
- "multiple": false,
3130
- "options": [
3131
- "document",
3132
- "thread"
3133
- ],
3119
+ "multiple": true,
3134
3120
  "type": "option"
3135
3121
  },
3136
- "perspective": {
3137
- "description": "Perspective (document only)",
3138
- "name": "perspective",
3139
- "default": "third-person",
3122
+ "team": {
3123
+ "description": "Filter by team ID (repeatable, OR logic)",
3124
+ "name": "team",
3140
3125
  "hasDynamicHelp": false,
3141
- "multiple": false,
3142
- "options": [
3143
- "first-person",
3144
- "third-person"
3145
- ],
3126
+ "multiple": true,
3146
3127
  "type": "option"
3147
3128
  },
3148
- "face-speaker": {
3149
- "description": "Speaker name to map to the face (thread only). If omitted, first speaker is used.",
3150
- "name": "face-speaker",
3129
+ "include": {
3130
+ "description": "Include extra fields: tags, teams (comma-separated)",
3131
+ "name": "include",
3151
3132
  "hasDynamicHelp": false,
3152
3133
  "multiple": false,
3153
3134
  "type": "option"
@@ -3155,7 +3136,7 @@
3155
3136
  },
3156
3137
  "hasDynamicHelp": false,
3157
3138
  "hiddenAliases": [],
3158
- "id": "face:upload",
3139
+ "id": "face:list",
3159
3140
  "pluginAlias": "faces-cli",
3160
3141
  "pluginName": "faces-cli",
3161
3142
  "pluginType": "core",
@@ -3166,13 +3147,19 @@
3166
3147
  "dist",
3167
3148
  "commands",
3168
3149
  "face",
3169
- "upload.js"
3150
+ "list.js"
3170
3151
  ]
3171
3152
  },
3172
- "keys:create": {
3153
+ "face:neighbors": {
3173
3154
  "aliases": [],
3174
- "args": {},
3175
- "description": "Create a new API key (JWT required)",
3155
+ "args": {
3156
+ "face_id": {
3157
+ "description": "Face alias",
3158
+ "name": "face_id",
3159
+ "required": true
3160
+ }
3161
+ },
3162
+ "description": "Find the most similar or dissimilar owned faces to a given face",
3176
3163
  "flags": {
3177
3164
  "json": {
3178
3165
  "description": "Format output as json.",
@@ -3205,46 +3192,44 @@
3205
3192
  "multiple": false,
3206
3193
  "type": "option"
3207
3194
  },
3208
- "name": {
3209
- "description": "Key name/label",
3210
- "name": "name",
3211
- "required": true,
3195
+ "k": {
3196
+ "description": "Number of results (1–20)",
3197
+ "name": "k",
3198
+ "default": 5,
3212
3199
  "hasDynamicHelp": false,
3213
3200
  "multiple": false,
3214
3201
  "type": "option"
3215
3202
  },
3216
- "expires-days": {
3217
- "description": "Expiry in days (omit for no expiry)",
3218
- "name": "expires-days",
3203
+ "component": {
3204
+ "description": "Centroid component to rank on (beta, delta, epsilon are the principal components of a face; face is their composite)",
3205
+ "name": "component",
3206
+ "default": "face",
3219
3207
  "hasDynamicHelp": false,
3220
3208
  "multiple": false,
3209
+ "options": [
3210
+ "face",
3211
+ "beta",
3212
+ "delta",
3213
+ "epsilon"
3214
+ ],
3221
3215
  "type": "option"
3222
3216
  },
3223
- "budget": {
3224
- "description": "Spend budget in USD",
3225
- "name": "budget",
3217
+ "direction": {
3218
+ "description": "nearest (most similar) or furthest (most dissimilar)",
3219
+ "name": "direction",
3220
+ "default": "nearest",
3226
3221
  "hasDynamicHelp": false,
3227
3222
  "multiple": false,
3228
- "type": "option"
3229
- },
3230
- "face": {
3231
- "description": "Allowed face alias (repeatable)",
3232
- "name": "face",
3233
- "hasDynamicHelp": false,
3234
- "multiple": true,
3235
- "type": "option"
3236
- },
3237
- "model": {
3238
- "description": "Allowed model name (repeatable)",
3239
- "name": "model",
3240
- "hasDynamicHelp": false,
3241
- "multiple": true,
3223
+ "options": [
3224
+ "nearest",
3225
+ "furthest"
3226
+ ],
3242
3227
  "type": "option"
3243
3228
  }
3244
3229
  },
3245
3230
  "hasDynamicHelp": false,
3246
3231
  "hiddenAliases": [],
3247
- "id": "keys:create",
3232
+ "id": "face:neighbors",
3248
3233
  "pluginAlias": "faces-cli",
3249
3234
  "pluginName": "faces-cli",
3250
3235
  "pluginType": "core",
@@ -3254,14 +3239,14 @@
3254
3239
  "relativePath": [
3255
3240
  "dist",
3256
3241
  "commands",
3257
- "keys",
3258
- "create.js"
3242
+ "face",
3243
+ "neighbors.js"
3259
3244
  ]
3260
3245
  },
3261
- "keys:list": {
3246
+ "face:stats": {
3262
3247
  "aliases": [],
3263
3248
  "args": {},
3264
- "description": "List all API keys (JWT required)",
3249
+ "description": "Compile and chat stats for all owned faces",
3265
3250
  "flags": {
3266
3251
  "json": {
3267
3252
  "description": "Format output as json.",
@@ -3297,7 +3282,7 @@
3297
3282
  },
3298
3283
  "hasDynamicHelp": false,
3299
3284
  "hiddenAliases": [],
3300
- "id": "keys:list",
3285
+ "id": "face:stats",
3301
3286
  "pluginAlias": "faces-cli",
3302
3287
  "pluginName": "faces-cli",
3303
3288
  "pluginType": "core",
@@ -3307,20 +3292,20 @@
3307
3292
  "relativePath": [
3308
3293
  "dist",
3309
3294
  "commands",
3310
- "keys",
3311
- "list.js"
3295
+ "face",
3296
+ "stats.js"
3312
3297
  ]
3313
3298
  },
3314
- "keys:revoke": {
3299
+ "face:teams": {
3315
3300
  "aliases": [],
3316
3301
  "args": {
3317
- "key_id": {
3318
- "description": "Key ID",
3319
- "name": "key_id",
3302
+ "alias": {
3303
+ "description": "Face alias",
3304
+ "name": "alias",
3320
3305
  "required": true
3321
3306
  }
3322
3307
  },
3323
- "description": "Revoke an API key (JWT required)",
3308
+ "description": "Set a face's team memberships (replaces all)",
3324
3309
  "flags": {
3325
3310
  "json": {
3326
3311
  "description": "Format output as json.",
@@ -3353,16 +3338,18 @@
3353
3338
  "multiple": false,
3354
3339
  "type": "option"
3355
3340
  },
3356
- "yes": {
3357
- "description": "Skip confirmation",
3358
- "name": "yes",
3359
- "allowNo": false,
3360
- "type": "boolean"
3341
+ "team": {
3342
+ "description": "Team ID (repeatable, replaces all memberships)",
3343
+ "name": "team",
3344
+ "required": true,
3345
+ "hasDynamicHelp": false,
3346
+ "multiple": true,
3347
+ "type": "option"
3361
3348
  }
3362
3349
  },
3363
3350
  "hasDynamicHelp": false,
3364
3351
  "hiddenAliases": [],
3365
- "id": "keys:revoke",
3352
+ "id": "face:teams",
3366
3353
  "pluginAlias": "faces-cli",
3367
3354
  "pluginName": "faces-cli",
3368
3355
  "pluginType": "core",
@@ -3372,20 +3359,20 @@
3372
3359
  "relativePath": [
3373
3360
  "dist",
3374
3361
  "commands",
3375
- "keys",
3376
- "revoke.js"
3362
+ "face",
3363
+ "teams.js"
3377
3364
  ]
3378
3365
  },
3379
- "keys:update": {
3366
+ "face:upload": {
3380
3367
  "aliases": [],
3381
3368
  "args": {
3382
- "key_id": {
3383
- "description": "Key ID",
3384
- "name": "key_id",
3369
+ "face_id": {
3370
+ "description": "Face alias",
3371
+ "name": "face_id",
3385
3372
  "required": true
3386
3373
  }
3387
3374
  },
3388
- "description": "Update API key metadata (JWT required)",
3375
+ "description": "Upload a file (text/PDF/audio/video) to a face",
3389
3376
  "flags": {
3390
3377
  "json": {
3391
3378
  "description": "Format output as json.",
@@ -3418,30 +3405,49 @@
3418
3405
  "multiple": false,
3419
3406
  "type": "option"
3420
3407
  },
3421
- "name": {
3422
- "description": "New key name",
3423
- "name": "name",
3408
+ "file": {
3409
+ "description": "File to upload",
3410
+ "name": "file",
3411
+ "required": true,
3424
3412
  "hasDynamicHelp": false,
3425
3413
  "multiple": false,
3426
3414
  "type": "option"
3427
3415
  },
3428
- "budget": {
3429
- "description": "New spend budget in USD",
3430
- "name": "budget",
3416
+ "kind": {
3417
+ "description": "Upload kind: document or thread",
3418
+ "name": "kind",
3419
+ "default": "document",
3420
+ "hasDynamicHelp": false,
3421
+ "multiple": false,
3422
+ "options": [
3423
+ "document",
3424
+ "thread"
3425
+ ],
3426
+ "type": "option"
3427
+ },
3428
+ "perspective": {
3429
+ "description": "Perspective (document only)",
3430
+ "name": "perspective",
3431
+ "default": "third-person",
3431
3432
  "hasDynamicHelp": false,
3432
3433
  "multiple": false,
3434
+ "options": [
3435
+ "first-person",
3436
+ "third-person"
3437
+ ],
3433
3438
  "type": "option"
3434
3439
  },
3435
- "reset-spent": {
3436
- "description": "Reset spent amount to zero",
3437
- "name": "reset-spent",
3438
- "allowNo": false,
3439
- "type": "boolean"
3440
+ "face-speaker": {
3441
+ "description": "Speaker name to map to the face (thread only). If omitted, first speaker is used.",
3442
+ "name": "face-speaker",
3443
+ "hasDynamicHelp": false,
3444
+ "multiple": false,
3445
+ "type": "option"
3440
3446
  }
3441
3447
  },
3442
3448
  "hasDynamicHelp": false,
3443
3449
  "hiddenAliases": [],
3444
- "id": "keys:update",
3450
+ "id": "face:upload",
3445
3451
  "pluginAlias": "faces-cli",
3446
3452
  "pluginName": "faces-cli",
3447
3453
  "pluginType": "core",
@@ -3451,8 +3457,8 @@
3451
3457
  "relativePath": [
3452
3458
  "dist",
3453
3459
  "commands",
3454
- "keys",
3455
- "update.js"
3460
+ "face",
3461
+ "upload.js"
3456
3462
  ]
3457
3463
  },
3458
3464
  "team:add": {
@@ -6040,5 +6046,5 @@
6040
6046
  ]
6041
6047
  }
6042
6048
  },
6043
- "version": "1.6.16"
6049
+ "version": "1.6.17"
6044
6050
  }