faces-cli 1.5.8 → 1.5.9

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.
@@ -53,23 +53,10 @@
53
53
  "state.js"
54
54
  ]
55
55
  },
56
- "auth:connect": {
56
+ "billing:balance": {
57
57
  "aliases": [],
58
- "args": {
59
- "provider": {
60
- "description": "OAuth provider to connect",
61
- "name": "provider",
62
- "options": [
63
- "openai"
64
- ],
65
- "required": true
66
- }
67
- },
68
- "description": "Connect an OAuth provider account to Faces (e.g. ChatGPT Plus/Pro)",
69
- "examples": [
70
- "<%= config.bin %> auth connect openai",
71
- "<%= config.bin %> auth connect openai --manual"
72
- ],
58
+ "args": {},
59
+ "description": "Show credit balance and payment method status",
73
60
  "flags": {
74
61
  "json": {
75
62
  "description": "Format output as json.",
@@ -101,17 +88,11 @@
101
88
  "hasDynamicHelp": false,
102
89
  "multiple": false,
103
90
  "type": "option"
104
- },
105
- "manual": {
106
- "description": "Manual mode for headless environments: prints the authorize URL and prompts you to paste the callback URL after approving in any browser.",
107
- "name": "manual",
108
- "allowNo": false,
109
- "type": "boolean"
110
91
  }
111
92
  },
112
93
  "hasDynamicHelp": false,
113
94
  "hiddenAliases": [],
114
- "id": "auth:connect",
95
+ "id": "billing:balance",
115
96
  "pluginAlias": "faces-cli",
116
97
  "pluginName": "faces-cli",
117
98
  "pluginType": "core",
@@ -121,18 +102,14 @@
121
102
  "relativePath": [
122
103
  "dist",
123
104
  "commands",
124
- "auth",
125
- "connect.js"
105
+ "billing",
106
+ "balance.js"
126
107
  ]
127
108
  },
128
- "auth:connections": {
109
+ "billing:card-setup": {
129
110
  "aliases": [],
130
111
  "args": {},
131
- "description": "List connected OAuth provider accounts",
132
- "examples": [
133
- "<%= config.bin %> auth connections",
134
- "<%= config.bin %> auth connections --json"
135
- ],
112
+ "description": "Get a Stripe card setup URL to save a payment method",
136
113
  "flags": {
137
114
  "json": {
138
115
  "description": "Format output as json.",
@@ -168,7 +145,7 @@
168
145
  },
169
146
  "hasDynamicHelp": false,
170
147
  "hiddenAliases": [],
171
- "id": "auth:connections",
148
+ "id": "billing:card-setup",
172
149
  "pluginAlias": "faces-cli",
173
150
  "pluginName": "faces-cli",
174
151
  "pluginType": "core",
@@ -178,26 +155,14 @@
178
155
  "relativePath": [
179
156
  "dist",
180
157
  "commands",
181
- "auth",
182
- "connections.js"
158
+ "billing",
159
+ "card-setup.js"
183
160
  ]
184
161
  },
185
- "auth:disconnect": {
162
+ "billing:checkout": {
186
163
  "aliases": [],
187
- "args": {
188
- "provider": {
189
- "description": "OAuth provider to disconnect",
190
- "name": "provider",
191
- "options": [
192
- "openai"
193
- ],
194
- "required": true
195
- }
196
- },
197
- "description": "Disconnect a linked OAuth provider account",
198
- "examples": [
199
- "<%= config.bin %> auth disconnect openai"
200
- ],
164
+ "args": {},
165
+ "description": "Get a Stripe checkout URL to upgrade your subscription plan",
201
166
  "flags": {
202
167
  "json": {
203
168
  "description": "Format output as json.",
@@ -229,11 +194,22 @@
229
194
  "hasDynamicHelp": false,
230
195
  "multiple": false,
231
196
  "type": "option"
197
+ },
198
+ "plan": {
199
+ "description": "Plan to subscribe to",
200
+ "name": "plan",
201
+ "default": "connect",
202
+ "hasDynamicHelp": false,
203
+ "multiple": false,
204
+ "options": [
205
+ "connect"
206
+ ],
207
+ "type": "option"
232
208
  }
233
209
  },
234
210
  "hasDynamicHelp": false,
235
211
  "hiddenAliases": [],
236
- "id": "auth:disconnect",
212
+ "id": "billing:checkout",
237
213
  "pluginAlias": "faces-cli",
238
214
  "pluginName": "faces-cli",
239
215
  "pluginType": "core",
@@ -243,14 +219,14 @@
243
219
  "relativePath": [
244
220
  "dist",
245
221
  "commands",
246
- "auth",
247
- "disconnect.js"
222
+ "billing",
223
+ "checkout.js"
248
224
  ]
249
225
  },
250
- "auth:login": {
226
+ "billing:llm-costs": {
251
227
  "aliases": [],
252
228
  "args": {},
253
- "description": "Login and save JWT credentials",
229
+ "description": "List available LLMs and their per-token costs",
254
230
  "flags": {
255
231
  "json": {
256
232
  "description": "Format output as json.",
@@ -283,18 +259,9 @@
283
259
  "multiple": false,
284
260
  "type": "option"
285
261
  },
286
- "email": {
287
- "description": "Account email",
288
- "name": "email",
289
- "required": true,
290
- "hasDynamicHelp": false,
291
- "multiple": false,
292
- "type": "option"
293
- },
294
- "password": {
295
- "description": "Account password",
296
- "name": "password",
297
- "required": true,
262
+ "provider": {
263
+ "description": "Filter by provider (e.g. openai, anthropic)",
264
+ "name": "provider",
298
265
  "hasDynamicHelp": false,
299
266
  "multiple": false,
300
267
  "type": "option"
@@ -302,7 +269,7 @@
302
269
  },
303
270
  "hasDynamicHelp": false,
304
271
  "hiddenAliases": [],
305
- "id": "auth:login",
272
+ "id": "billing:llm-costs",
306
273
  "pluginAlias": "faces-cli",
307
274
  "pluginName": "faces-cli",
308
275
  "pluginType": "core",
@@ -312,14 +279,14 @@
312
279
  "relativePath": [
313
280
  "dist",
314
281
  "commands",
315
- "auth",
316
- "login.js"
282
+ "billing",
283
+ "llm-costs.js"
317
284
  ]
318
285
  },
319
- "auth:logout": {
286
+ "billing:quota": {
320
287
  "aliases": [],
321
288
  "args": {},
322
- "description": "Clear saved credentials",
289
+ "description": "Show compile token quota and per-face stats",
323
290
  "flags": {
324
291
  "json": {
325
292
  "description": "Format output as json.",
@@ -355,7 +322,7 @@
355
322
  },
356
323
  "hasDynamicHelp": false,
357
324
  "hiddenAliases": [],
358
- "id": "auth:logout",
325
+ "id": "billing:quota",
359
326
  "pluginAlias": "faces-cli",
360
327
  "pluginName": "faces-cli",
361
328
  "pluginType": "core",
@@ -365,14 +332,14 @@
365
332
  "relativePath": [
366
333
  "dist",
367
334
  "commands",
368
- "auth",
369
- "logout.js"
335
+ "billing",
336
+ "quota.js"
370
337
  ]
371
338
  },
372
- "auth:refresh": {
339
+ "billing:subscription": {
373
340
  "aliases": [],
374
341
  "args": {},
375
- "description": "Exchange current JWT for a fresh one",
342
+ "description": "Show current plan, face count, and renewal date",
376
343
  "flags": {
377
344
  "json": {
378
345
  "description": "Format output as json.",
@@ -408,7 +375,7 @@
408
375
  },
409
376
  "hasDynamicHelp": false,
410
377
  "hiddenAliases": [],
411
- "id": "auth:refresh",
378
+ "id": "billing:subscription",
412
379
  "pluginAlias": "faces-cli",
413
380
  "pluginName": "faces-cli",
414
381
  "pluginType": "core",
@@ -418,14 +385,14 @@
418
385
  "relativePath": [
419
386
  "dist",
420
387
  "commands",
421
- "auth",
422
- "refresh.js"
388
+ "billing",
389
+ "subscription.js"
423
390
  ]
424
391
  },
425
- "auth:register": {
392
+ "billing:topup": {
426
393
  "aliases": [],
427
394
  "args": {},
428
- "description": "Create a new Faces account",
395
+ "description": "Top up credit balance using saved payment method",
429
396
  "flags": {
430
397
  "json": {
431
398
  "description": "Format output as json.",
@@ -458,60 +425,25 @@
458
425
  "multiple": false,
459
426
  "type": "option"
460
427
  },
461
- "email": {
462
- "description": "Email address",
463
- "name": "email",
464
- "required": true,
465
- "hasDynamicHelp": false,
466
- "multiple": false,
467
- "type": "option"
468
- },
469
- "password": {
470
- "description": "Password",
471
- "name": "password",
472
- "required": true,
473
- "hasDynamicHelp": false,
474
- "multiple": false,
475
- "type": "option"
476
- },
477
- "name": {
478
- "description": "Display name (defaults to username)",
479
- "name": "name",
480
- "hasDynamicHelp": false,
481
- "multiple": false,
482
- "type": "option"
483
- },
484
- "username": {
485
- "description": "Username (lowercase, dashes, numbers)",
486
- "name": "username",
428
+ "amount": {
429
+ "description": "Top-up amount in USD (min $1)",
430
+ "name": "amount",
487
431
  "required": true,
488
432
  "hasDynamicHelp": false,
489
433
  "multiple": false,
490
434
  "type": "option"
491
435
  },
492
- "invite-key": {
493
- "description": "Invite key (if required)",
494
- "name": "invite-key",
495
- "hasDynamicHelp": false,
496
- "multiple": false,
497
- "type": "option"
498
- },
499
- "plan": {
500
- "description": "Plan to subscribe to: \"free\" ($5 activation) or \"connect\" ($17/mo, no activation fee)",
501
- "name": "plan",
502
- "default": "free",
436
+ "payment-ref": {
437
+ "description": "Payment reference (admin/test path)",
438
+ "name": "payment-ref",
503
439
  "hasDynamicHelp": false,
504
440
  "multiple": false,
505
- "options": [
506
- "free",
507
- "connect"
508
- ],
509
441
  "type": "option"
510
442
  }
511
443
  },
512
444
  "hasDynamicHelp": false,
513
445
  "hiddenAliases": [],
514
- "id": "auth:register",
446
+ "id": "billing:topup",
515
447
  "pluginAlias": "faces-cli",
516
448
  "pluginName": "faces-cli",
517
449
  "pluginType": "core",
@@ -521,14 +453,14 @@
521
453
  "relativePath": [
522
454
  "dist",
523
455
  "commands",
524
- "auth",
525
- "register.js"
456
+ "billing",
457
+ "topup.js"
526
458
  ]
527
459
  },
528
- "auth:whoami": {
460
+ "billing:usage": {
529
461
  "aliases": [],
530
462
  "args": {},
531
- "description": "Print current user profile",
463
+ "description": "Aggregated usage analytics",
532
464
  "flags": {
533
465
  "json": {
534
466
  "description": "Format output as json.",
@@ -560,11 +492,38 @@
560
492
  "hasDynamicHelp": false,
561
493
  "multiple": false,
562
494
  "type": "option"
495
+ },
496
+ "group-by": {
497
+ "description": "Group results",
498
+ "name": "group-by",
499
+ "hasDynamicHelp": false,
500
+ "multiple": false,
501
+ "options": [
502
+ "api_key",
503
+ "model",
504
+ "llm",
505
+ "date"
506
+ ],
507
+ "type": "option"
508
+ },
509
+ "from": {
510
+ "description": "Start date (YYYY-MM-DD)",
511
+ "name": "from",
512
+ "hasDynamicHelp": false,
513
+ "multiple": false,
514
+ "type": "option"
515
+ },
516
+ "to": {
517
+ "description": "End date (YYYY-MM-DD)",
518
+ "name": "to",
519
+ "hasDynamicHelp": false,
520
+ "multiple": false,
521
+ "type": "option"
563
522
  }
564
523
  },
565
524
  "hasDynamicHelp": false,
566
525
  "hiddenAliases": [],
567
- "id": "auth:whoami",
526
+ "id": "billing:usage",
568
527
  "pluginAlias": "faces-cli",
569
528
  "pluginName": "faces-cli",
570
529
  "pluginType": "core",
@@ -574,14 +533,27 @@
574
533
  "relativePath": [
575
534
  "dist",
576
535
  "commands",
577
- "auth",
578
- "whoami.js"
536
+ "billing",
537
+ "usage.js"
579
538
  ]
580
539
  },
581
- "catalog:doctor": {
540
+ "auth:connect": {
582
541
  "aliases": [],
583
- "args": {},
584
- "description": "Diagnose and repair the local face catalog",
542
+ "args": {
543
+ "provider": {
544
+ "description": "OAuth provider to connect",
545
+ "name": "provider",
546
+ "options": [
547
+ "openai"
548
+ ],
549
+ "required": true
550
+ }
551
+ },
552
+ "description": "Connect an OAuth provider account to Faces (e.g. ChatGPT Plus/Pro)",
553
+ "examples": [
554
+ "<%= config.bin %> auth connect openai",
555
+ "<%= config.bin %> auth connect openai --manual"
556
+ ],
585
557
  "flags": {
586
558
  "json": {
587
559
  "description": "Format output as json.",
@@ -614,22 +586,16 @@
614
586
  "multiple": false,
615
587
  "type": "option"
616
588
  },
617
- "fix": {
618
- "description": "Rebuild missing or stale catalog entries from API",
619
- "name": "fix",
620
- "allowNo": false,
621
- "type": "boolean"
622
- },
623
- "generate": {
624
- "description": "Fix + generate missing descriptions via LLM",
625
- "name": "generate",
589
+ "manual": {
590
+ "description": "Manual mode for headless environments: prints the authorize URL and prompts you to paste the callback URL after approving in any browser.",
591
+ "name": "manual",
626
592
  "allowNo": false,
627
593
  "type": "boolean"
628
594
  }
629
595
  },
630
596
  "hasDynamicHelp": false,
631
597
  "hiddenAliases": [],
632
- "id": "catalog:doctor",
598
+ "id": "auth:connect",
633
599
  "pluginAlias": "faces-cli",
634
600
  "pluginName": "faces-cli",
635
601
  "pluginType": "core",
@@ -639,14 +605,18 @@
639
605
  "relativePath": [
640
606
  "dist",
641
607
  "commands",
642
- "catalog",
643
- "doctor.js"
608
+ "auth",
609
+ "connect.js"
644
610
  ]
645
611
  },
646
- "catalog:list": {
612
+ "auth:connections": {
647
613
  "aliases": [],
648
614
  "args": {},
649
- "description": "List all faces in the local catalog",
615
+ "description": "List connected OAuth provider accounts",
616
+ "examples": [
617
+ "<%= config.bin %> auth connections",
618
+ "<%= config.bin %> auth connections --json"
619
+ ],
650
620
  "flags": {
651
621
  "json": {
652
622
  "description": "Format output as json.",
@@ -682,7 +652,7 @@
682
652
  },
683
653
  "hasDynamicHelp": false,
684
654
  "hiddenAliases": [],
685
- "id": "catalog:list",
655
+ "id": "auth:connections",
686
656
  "pluginAlias": "faces-cli",
687
657
  "pluginName": "faces-cli",
688
658
  "pluginType": "core",
@@ -692,14 +662,26 @@
692
662
  "relativePath": [
693
663
  "dist",
694
664
  "commands",
695
- "catalog",
696
- "list.js"
665
+ "auth",
666
+ "connections.js"
697
667
  ]
698
668
  },
699
- "catalog:manyfaced": {
669
+ "auth:disconnect": {
700
670
  "aliases": [],
701
- "args": {},
702
- "description": "Browse and install community manyfaced skills from github.com/facessh/manyfaced",
671
+ "args": {
672
+ "provider": {
673
+ "description": "OAuth provider to disconnect",
674
+ "name": "provider",
675
+ "options": [
676
+ "openai"
677
+ ],
678
+ "required": true
679
+ }
680
+ },
681
+ "description": "Disconnect a linked OAuth provider account",
682
+ "examples": [
683
+ "<%= config.bin %> auth disconnect openai"
684
+ ],
703
685
  "flags": {
704
686
  "json": {
705
687
  "description": "Format output as json.",
@@ -731,38 +713,11 @@
731
713
  "hasDynamicHelp": false,
732
714
  "multiple": false,
733
715
  "type": "option"
734
- },
735
- "skill": {
736
- "description": "Show details for a specific skill",
737
- "name": "skill",
738
- "hasDynamicHelp": false,
739
- "multiple": false,
740
- "type": "option"
741
- },
742
- "install": {
743
- "description": "Install a skill by name",
744
- "name": "install",
745
- "hasDynamicHelp": false,
746
- "multiple": false,
747
- "type": "option"
748
- },
749
- "skills-dir": {
750
- "description": "Directory to install skills into (required for --install)",
751
- "name": "skills-dir",
752
- "hasDynamicHelp": false,
753
- "multiple": false,
754
- "type": "option"
755
- },
756
- "refresh": {
757
- "description": "Force refresh the skill index (ignore cache)",
758
- "name": "refresh",
759
- "allowNo": false,
760
- "type": "boolean"
761
716
  }
762
717
  },
763
718
  "hasDynamicHelp": false,
764
719
  "hiddenAliases": [],
765
- "id": "catalog:manyfaced",
720
+ "id": "auth:disconnect",
766
721
  "pluginAlias": "faces-cli",
767
722
  "pluginName": "faces-cli",
768
723
  "pluginType": "core",
@@ -772,14 +727,14 @@
772
727
  "relativePath": [
773
728
  "dist",
774
729
  "commands",
775
- "catalog",
776
- "manyfaced.js"
730
+ "auth",
731
+ "disconnect.js"
777
732
  ]
778
733
  },
779
- "billing:balance": {
734
+ "auth:login": {
780
735
  "aliases": [],
781
736
  "args": {},
782
- "description": "Show credit balance and payment method status",
737
+ "description": "Login and save JWT credentials",
783
738
  "flags": {
784
739
  "json": {
785
740
  "description": "Format output as json.",
@@ -811,11 +766,27 @@
811
766
  "hasDynamicHelp": false,
812
767
  "multiple": false,
813
768
  "type": "option"
769
+ },
770
+ "email": {
771
+ "description": "Account email",
772
+ "name": "email",
773
+ "required": true,
774
+ "hasDynamicHelp": false,
775
+ "multiple": false,
776
+ "type": "option"
777
+ },
778
+ "password": {
779
+ "description": "Account password",
780
+ "name": "password",
781
+ "required": true,
782
+ "hasDynamicHelp": false,
783
+ "multiple": false,
784
+ "type": "option"
814
785
  }
815
786
  },
816
787
  "hasDynamicHelp": false,
817
788
  "hiddenAliases": [],
818
- "id": "billing:balance",
789
+ "id": "auth:login",
819
790
  "pluginAlias": "faces-cli",
820
791
  "pluginName": "faces-cli",
821
792
  "pluginType": "core",
@@ -825,14 +796,14 @@
825
796
  "relativePath": [
826
797
  "dist",
827
798
  "commands",
828
- "billing",
829
- "balance.js"
799
+ "auth",
800
+ "login.js"
830
801
  ]
831
802
  },
832
- "billing:card-setup": {
803
+ "auth:logout": {
833
804
  "aliases": [],
834
805
  "args": {},
835
- "description": "Get a Stripe card setup URL to save a payment method",
806
+ "description": "Clear saved credentials",
836
807
  "flags": {
837
808
  "json": {
838
809
  "description": "Format output as json.",
@@ -868,7 +839,7 @@
868
839
  },
869
840
  "hasDynamicHelp": false,
870
841
  "hiddenAliases": [],
871
- "id": "billing:card-setup",
842
+ "id": "auth:logout",
872
843
  "pluginAlias": "faces-cli",
873
844
  "pluginName": "faces-cli",
874
845
  "pluginType": "core",
@@ -878,14 +849,14 @@
878
849
  "relativePath": [
879
850
  "dist",
880
851
  "commands",
881
- "billing",
882
- "card-setup.js"
852
+ "auth",
853
+ "logout.js"
883
854
  ]
884
855
  },
885
- "billing:checkout": {
856
+ "auth:refresh": {
886
857
  "aliases": [],
887
858
  "args": {},
888
- "description": "Get a Stripe checkout URL to upgrade your subscription plan",
859
+ "description": "Exchange current JWT for a fresh one",
889
860
  "flags": {
890
861
  "json": {
891
862
  "description": "Format output as json.",
@@ -917,22 +888,11 @@
917
888
  "hasDynamicHelp": false,
918
889
  "multiple": false,
919
890
  "type": "option"
920
- },
921
- "plan": {
922
- "description": "Plan to subscribe to",
923
- "name": "plan",
924
- "default": "connect",
925
- "hasDynamicHelp": false,
926
- "multiple": false,
927
- "options": [
928
- "connect"
929
- ],
930
- "type": "option"
931
891
  }
932
892
  },
933
893
  "hasDynamicHelp": false,
934
894
  "hiddenAliases": [],
935
- "id": "billing:checkout",
895
+ "id": "auth:refresh",
936
896
  "pluginAlias": "faces-cli",
937
897
  "pluginName": "faces-cli",
938
898
  "pluginType": "core",
@@ -942,14 +902,14 @@
942
902
  "relativePath": [
943
903
  "dist",
944
904
  "commands",
945
- "billing",
946
- "checkout.js"
905
+ "auth",
906
+ "refresh.js"
947
907
  ]
948
908
  },
949
- "billing:llm-costs": {
909
+ "auth:register": {
950
910
  "aliases": [],
951
911
  "args": {},
952
- "description": "List available LLMs and their per-token costs",
912
+ "description": "Create a new Faces account",
953
913
  "flags": {
954
914
  "json": {
955
915
  "description": "Format output as json.",
@@ -982,70 +942,60 @@
982
942
  "multiple": false,
983
943
  "type": "option"
984
944
  },
985
- "provider": {
986
- "description": "Filter by provider (e.g. openai, anthropic)",
987
- "name": "provider",
945
+ "email": {
946
+ "description": "Email address",
947
+ "name": "email",
948
+ "required": true,
988
949
  "hasDynamicHelp": false,
989
950
  "multiple": false,
990
951
  "type": "option"
991
- }
992
- },
993
- "hasDynamicHelp": false,
994
- "hiddenAliases": [],
995
- "id": "billing:llm-costs",
996
- "pluginAlias": "faces-cli",
997
- "pluginName": "faces-cli",
998
- "pluginType": "core",
999
- "strict": true,
1000
- "enableJsonFlag": true,
1001
- "isESM": true,
1002
- "relativePath": [
1003
- "dist",
1004
- "commands",
1005
- "billing",
1006
- "llm-costs.js"
1007
- ]
1008
- },
1009
- "billing:quota": {
1010
- "aliases": [],
1011
- "args": {},
1012
- "description": "Show compile token quota and per-face stats",
1013
- "flags": {
1014
- "json": {
1015
- "description": "Format output as json.",
1016
- "helpGroup": "GLOBAL",
1017
- "name": "json",
1018
- "allowNo": false,
1019
- "type": "boolean"
1020
952
  },
1021
- "base-url": {
1022
- "description": "API base URL",
1023
- "env": "FACES_BASE_URL",
1024
- "name": "base-url",
953
+ "password": {
954
+ "description": "Password",
955
+ "name": "password",
956
+ "required": true,
1025
957
  "hasDynamicHelp": false,
1026
958
  "multiple": false,
1027
959
  "type": "option"
1028
960
  },
1029
- "token": {
1030
- "description": "JWT bearer token",
1031
- "env": "FACES_TOKEN",
1032
- "name": "token",
961
+ "name": {
962
+ "description": "Display name (defaults to username)",
963
+ "name": "name",
1033
964
  "hasDynamicHelp": false,
1034
965
  "multiple": false,
1035
966
  "type": "option"
1036
967
  },
1037
- "api-key": {
1038
- "description": "API key",
1039
- "env": "FACES_API_KEY",
1040
- "name": "api-key",
968
+ "username": {
969
+ "description": "Username (lowercase, dashes, numbers)",
970
+ "name": "username",
971
+ "required": true,
972
+ "hasDynamicHelp": false,
973
+ "multiple": false,
974
+ "type": "option"
975
+ },
976
+ "invite-key": {
977
+ "description": "Invite key (if required)",
978
+ "name": "invite-key",
979
+ "hasDynamicHelp": false,
980
+ "multiple": false,
981
+ "type": "option"
982
+ },
983
+ "plan": {
984
+ "description": "Plan to subscribe to: \"free\" ($5 activation) or \"connect\" ($17/mo, no activation fee)",
985
+ "name": "plan",
986
+ "default": "free",
1041
987
  "hasDynamicHelp": false,
1042
988
  "multiple": false,
989
+ "options": [
990
+ "free",
991
+ "connect"
992
+ ],
1043
993
  "type": "option"
1044
994
  }
1045
995
  },
1046
996
  "hasDynamicHelp": false,
1047
997
  "hiddenAliases": [],
1048
- "id": "billing:quota",
998
+ "id": "auth:register",
1049
999
  "pluginAlias": "faces-cli",
1050
1000
  "pluginName": "faces-cli",
1051
1001
  "pluginType": "core",
@@ -1055,14 +1005,14 @@
1055
1005
  "relativePath": [
1056
1006
  "dist",
1057
1007
  "commands",
1058
- "billing",
1059
- "quota.js"
1008
+ "auth",
1009
+ "register.js"
1060
1010
  ]
1061
1011
  },
1062
- "billing:subscription": {
1012
+ "auth:whoami": {
1063
1013
  "aliases": [],
1064
1014
  "args": {},
1065
- "description": "Show current plan, face count, and renewal date",
1015
+ "description": "Print current user profile and auth diagnostic",
1066
1016
  "flags": {
1067
1017
  "json": {
1068
1018
  "description": "Format output as json.",
@@ -1098,7 +1048,7 @@
1098
1048
  },
1099
1049
  "hasDynamicHelp": false,
1100
1050
  "hiddenAliases": [],
1101
- "id": "billing:subscription",
1051
+ "id": "auth:whoami",
1102
1052
  "pluginAlias": "faces-cli",
1103
1053
  "pluginName": "faces-cli",
1104
1054
  "pluginType": "core",
@@ -1108,14 +1058,20 @@
1108
1058
  "relativePath": [
1109
1059
  "dist",
1110
1060
  "commands",
1111
- "billing",
1112
- "subscription.js"
1061
+ "auth",
1062
+ "whoami.js"
1113
1063
  ]
1114
1064
  },
1115
- "billing:topup": {
1065
+ "chat:chat": {
1116
1066
  "aliases": [],
1117
- "args": {},
1118
- "description": "Top up credit balance using saved payment method",
1067
+ "args": {
1068
+ "face_username": {
1069
+ "description": "Face alias (or alias@model)",
1070
+ "name": "face_username",
1071
+ "required": true
1072
+ }
1073
+ },
1074
+ "description": "Chat via a face. Auto-routes to the correct API endpoint based on model provider.",
1119
1075
  "flags": {
1120
1076
  "json": {
1121
1077
  "description": "Format output as json.",
@@ -1148,179 +1104,25 @@
1148
1104
  "multiple": false,
1149
1105
  "type": "option"
1150
1106
  },
1151
- "amount": {
1152
- "description": "Top-up amount in USD (min $1)",
1153
- "name": "amount",
1154
- "required": true,
1107
+ "message": {
1108
+ "char": "m",
1109
+ "description": "User message (repeatable)",
1110
+ "name": "message",
1111
+ "required": false,
1112
+ "hasDynamicHelp": false,
1113
+ "multiple": true,
1114
+ "type": "option"
1115
+ },
1116
+ "llm": {
1117
+ "description": "LLM override (e.g. gpt-4o-mini, claude-sonnet-4-6)",
1118
+ "name": "llm",
1155
1119
  "hasDynamicHelp": false,
1156
1120
  "multiple": false,
1157
1121
  "type": "option"
1158
1122
  },
1159
- "payment-ref": {
1160
- "description": "Payment reference (admin/test path)",
1161
- "name": "payment-ref",
1162
- "hasDynamicHelp": false,
1163
- "multiple": false,
1164
- "type": "option"
1165
- }
1166
- },
1167
- "hasDynamicHelp": false,
1168
- "hiddenAliases": [],
1169
- "id": "billing:topup",
1170
- "pluginAlias": "faces-cli",
1171
- "pluginName": "faces-cli",
1172
- "pluginType": "core",
1173
- "strict": true,
1174
- "enableJsonFlag": true,
1175
- "isESM": true,
1176
- "relativePath": [
1177
- "dist",
1178
- "commands",
1179
- "billing",
1180
- "topup.js"
1181
- ]
1182
- },
1183
- "billing:usage": {
1184
- "aliases": [],
1185
- "args": {},
1186
- "description": "Aggregated usage analytics",
1187
- "flags": {
1188
- "json": {
1189
- "description": "Format output as json.",
1190
- "helpGroup": "GLOBAL",
1191
- "name": "json",
1192
- "allowNo": false,
1193
- "type": "boolean"
1194
- },
1195
- "base-url": {
1196
- "description": "API base URL",
1197
- "env": "FACES_BASE_URL",
1198
- "name": "base-url",
1199
- "hasDynamicHelp": false,
1200
- "multiple": false,
1201
- "type": "option"
1202
- },
1203
- "token": {
1204
- "description": "JWT bearer token",
1205
- "env": "FACES_TOKEN",
1206
- "name": "token",
1207
- "hasDynamicHelp": false,
1208
- "multiple": false,
1209
- "type": "option"
1210
- },
1211
- "api-key": {
1212
- "description": "API key",
1213
- "env": "FACES_API_KEY",
1214
- "name": "api-key",
1215
- "hasDynamicHelp": false,
1216
- "multiple": false,
1217
- "type": "option"
1218
- },
1219
- "group-by": {
1220
- "description": "Group results",
1221
- "name": "group-by",
1222
- "hasDynamicHelp": false,
1223
- "multiple": false,
1224
- "options": [
1225
- "api_key",
1226
- "model",
1227
- "llm",
1228
- "date"
1229
- ],
1230
- "type": "option"
1231
- },
1232
- "from": {
1233
- "description": "Start date (YYYY-MM-DD)",
1234
- "name": "from",
1235
- "hasDynamicHelp": false,
1236
- "multiple": false,
1237
- "type": "option"
1238
- },
1239
- "to": {
1240
- "description": "End date (YYYY-MM-DD)",
1241
- "name": "to",
1242
- "hasDynamicHelp": false,
1243
- "multiple": false,
1244
- "type": "option"
1245
- }
1246
- },
1247
- "hasDynamicHelp": false,
1248
- "hiddenAliases": [],
1249
- "id": "billing:usage",
1250
- "pluginAlias": "faces-cli",
1251
- "pluginName": "faces-cli",
1252
- "pluginType": "core",
1253
- "strict": true,
1254
- "enableJsonFlag": true,
1255
- "isESM": true,
1256
- "relativePath": [
1257
- "dist",
1258
- "commands",
1259
- "billing",
1260
- "usage.js"
1261
- ]
1262
- },
1263
- "chat:chat": {
1264
- "aliases": [],
1265
- "args": {
1266
- "face_username": {
1267
- "description": "Face alias (or alias@model)",
1268
- "name": "face_username",
1269
- "required": true
1270
- }
1271
- },
1272
- "description": "Chat via a face. Auto-routes to the correct API endpoint based on model provider.",
1273
- "flags": {
1274
- "json": {
1275
- "description": "Format output as json.",
1276
- "helpGroup": "GLOBAL",
1277
- "name": "json",
1278
- "allowNo": false,
1279
- "type": "boolean"
1280
- },
1281
- "base-url": {
1282
- "description": "API base URL",
1283
- "env": "FACES_BASE_URL",
1284
- "name": "base-url",
1285
- "hasDynamicHelp": false,
1286
- "multiple": false,
1287
- "type": "option"
1288
- },
1289
- "token": {
1290
- "description": "JWT bearer token",
1291
- "env": "FACES_TOKEN",
1292
- "name": "token",
1293
- "hasDynamicHelp": false,
1294
- "multiple": false,
1295
- "type": "option"
1296
- },
1297
- "api-key": {
1298
- "description": "API key",
1299
- "env": "FACES_API_KEY",
1300
- "name": "api-key",
1301
- "hasDynamicHelp": false,
1302
- "multiple": false,
1303
- "type": "option"
1304
- },
1305
- "message": {
1306
- "char": "m",
1307
- "description": "User message (repeatable)",
1308
- "name": "message",
1309
- "required": false,
1310
- "hasDynamicHelp": false,
1311
- "multiple": true,
1312
- "type": "option"
1313
- },
1314
- "llm": {
1315
- "description": "LLM override (e.g. gpt-4o-mini, claude-sonnet-4-6)",
1316
- "name": "llm",
1317
- "hasDynamicHelp": false,
1318
- "multiple": false,
1319
- "type": "option"
1320
- },
1321
- "system": {
1322
- "description": "System prompt / instructions",
1323
- "name": "system",
1123
+ "system": {
1124
+ "description": "System prompt / instructions",
1125
+ "name": "system",
1324
1126
  "hasDynamicHelp": false,
1325
1127
  "multiple": false,
1326
1128
  "type": "option"
@@ -1545,10 +1347,16 @@
1545
1347
  "responses.js"
1546
1348
  ]
1547
1349
  },
1548
- "config:clear": {
1350
+ "compile:import": {
1549
1351
  "aliases": [],
1550
- "args": {},
1551
- "description": "Delete all saved credentials and config",
1352
+ "args": {
1353
+ "face_id": {
1354
+ "description": "Face alias",
1355
+ "name": "face_id",
1356
+ "required": true
1357
+ }
1358
+ },
1359
+ "description": "Import a YouTube video into a face via server-side download and transcription",
1552
1360
  "flags": {
1553
1361
  "json": {
1554
1362
  "description": "Format output as json.",
@@ -1581,16 +1389,55 @@
1581
1389
  "multiple": false,
1582
1390
  "type": "option"
1583
1391
  },
1584
- "yes": {
1585
- "description": "Skip confirmation",
1586
- "name": "yes",
1392
+ "url": {
1393
+ "description": "YouTube URL (youtube.com/watch?v=... or youtu.be/...)",
1394
+ "name": "url",
1395
+ "required": true,
1396
+ "hasDynamicHelp": false,
1397
+ "multiple": false,
1398
+ "type": "option"
1399
+ },
1400
+ "type": {
1401
+ "description": "\"document\" for solo talks, lectures, monologues; \"thread\" for interviews or multi-speaker conversations",
1402
+ "name": "type",
1403
+ "default": "document",
1404
+ "hasDynamicHelp": false,
1405
+ "multiple": false,
1406
+ "options": [
1407
+ "document",
1408
+ "thread"
1409
+ ],
1410
+ "type": "option"
1411
+ },
1412
+ "perspective": {
1413
+ "description": "\"first-person\" if the face is the speaker; \"third-person\" if the video is about the face",
1414
+ "name": "perspective",
1415
+ "default": "third-person",
1416
+ "hasDynamicHelp": false,
1417
+ "multiple": false,
1418
+ "options": [
1419
+ "first-person",
1420
+ "third-person"
1421
+ ],
1422
+ "type": "option"
1423
+ },
1424
+ "face-speaker": {
1425
+ "description": "For --type thread: AssemblyAI speaker label (e.g. \"A\") that corresponds to the face. Defaults to first detected speaker.",
1426
+ "name": "face-speaker",
1427
+ "hasDynamicHelp": false,
1428
+ "multiple": false,
1429
+ "type": "option"
1430
+ },
1431
+ "no-wait": {
1432
+ "description": "Return immediately after import starts (do not poll for transcription). Prints the ID for manual polling.",
1433
+ "name": "no-wait",
1587
1434
  "allowNo": false,
1588
1435
  "type": "boolean"
1589
1436
  }
1590
1437
  },
1591
1438
  "hasDynamicHelp": false,
1592
1439
  "hiddenAliases": [],
1593
- "id": "config:clear",
1440
+ "id": "compile:import",
1594
1441
  "pluginAlias": "faces-cli",
1595
1442
  "pluginName": "faces-cli",
1596
1443
  "pluginType": "core",
@@ -1600,25 +1447,20 @@
1600
1447
  "relativePath": [
1601
1448
  "dist",
1602
1449
  "commands",
1603
- "config",
1604
- "clear.js"
1450
+ "compile",
1451
+ "import.js"
1605
1452
  ]
1606
1453
  },
1607
- "config:set": {
1454
+ "compile:upload": {
1608
1455
  "aliases": [],
1609
1456
  "args": {
1610
- "key": {
1611
- "description": "Config key",
1612
- "name": "key",
1613
- "required": true
1614
- },
1615
- "value": {
1616
- "description": "Config value",
1617
- "name": "value",
1457
+ "alias": {
1458
+ "description": "Face alias",
1459
+ "name": "alias",
1618
1460
  "required": true
1619
1461
  }
1620
1462
  },
1621
- "description": "Set a config value (e.g. base_url, api_key, token)",
1463
+ "description": "Upload a file (text/PDF/audio/video) to compile into a face",
1622
1464
  "flags": {
1623
1465
  "json": {
1624
1466
  "description": "Format output as json.",
@@ -1650,28 +1492,73 @@
1650
1492
  "hasDynamicHelp": false,
1651
1493
  "multiple": false,
1652
1494
  "type": "option"
1653
- }
1654
- },
1655
- "hasDynamicHelp": false,
1656
- "hiddenAliases": [],
1657
- "id": "config:set",
1658
- "pluginAlias": "faces-cli",
1659
- "pluginName": "faces-cli",
1660
- "pluginType": "core",
1661
- "strict": true,
1662
- "enableJsonFlag": true,
1663
- "isESM": true,
1664
- "relativePath": [
1665
- "dist",
1666
- "commands",
1667
- "config",
1668
- "set.js"
1669
- ]
1670
- },
1671
- "config:show": {
1672
- "aliases": [],
1495
+ },
1496
+ "file": {
1497
+ "description": "File to upload",
1498
+ "name": "file",
1499
+ "required": true,
1500
+ "hasDynamicHelp": false,
1501
+ "multiple": false,
1502
+ "type": "option"
1503
+ },
1504
+ "kind": {
1505
+ "description": "Upload kind: document or thread",
1506
+ "name": "kind",
1507
+ "default": "document",
1508
+ "hasDynamicHelp": false,
1509
+ "multiple": false,
1510
+ "options": [
1511
+ "document",
1512
+ "thread"
1513
+ ],
1514
+ "type": "option"
1515
+ },
1516
+ "perspective": {
1517
+ "description": "Perspective (document only)",
1518
+ "name": "perspective",
1519
+ "default": "third-person",
1520
+ "hasDynamicHelp": false,
1521
+ "multiple": false,
1522
+ "options": [
1523
+ "first-person",
1524
+ "third-person"
1525
+ ],
1526
+ "type": "option"
1527
+ },
1528
+ "face-speaker": {
1529
+ "description": "Speaker name to map to the face (thread only). If omitted, auto-detected from face name.",
1530
+ "name": "face-speaker",
1531
+ "hasDynamicHelp": false,
1532
+ "multiple": false,
1533
+ "type": "option"
1534
+ },
1535
+ "no-wait": {
1536
+ "description": "Return immediately after upload (do not poll for transcription). Prints the ID for manual polling.",
1537
+ "name": "no-wait",
1538
+ "allowNo": false,
1539
+ "type": "boolean"
1540
+ }
1541
+ },
1542
+ "hasDynamicHelp": false,
1543
+ "hiddenAliases": [],
1544
+ "id": "compile:upload",
1545
+ "pluginAlias": "faces-cli",
1546
+ "pluginName": "faces-cli",
1547
+ "pluginType": "core",
1548
+ "strict": true,
1549
+ "enableJsonFlag": true,
1550
+ "isESM": true,
1551
+ "relativePath": [
1552
+ "dist",
1553
+ "commands",
1554
+ "compile",
1555
+ "upload.js"
1556
+ ]
1557
+ },
1558
+ "catalog:doctor": {
1559
+ "aliases": [],
1673
1560
  "args": {},
1674
- "description": "Print current config (credentials are masked)",
1561
+ "description": "Diagnose and repair the local face catalog",
1675
1562
  "flags": {
1676
1563
  "json": {
1677
1564
  "description": "Format output as json.",
@@ -1703,11 +1590,23 @@
1703
1590
  "hasDynamicHelp": false,
1704
1591
  "multiple": false,
1705
1592
  "type": "option"
1593
+ },
1594
+ "fix": {
1595
+ "description": "Rebuild missing or stale catalog entries from API",
1596
+ "name": "fix",
1597
+ "allowNo": false,
1598
+ "type": "boolean"
1599
+ },
1600
+ "generate": {
1601
+ "description": "Fix + generate missing descriptions via LLM",
1602
+ "name": "generate",
1603
+ "allowNo": false,
1604
+ "type": "boolean"
1706
1605
  }
1707
1606
  },
1708
1607
  "hasDynamicHelp": false,
1709
1608
  "hiddenAliases": [],
1710
- "id": "config:show",
1609
+ "id": "catalog:doctor",
1711
1610
  "pluginAlias": "faces-cli",
1712
1611
  "pluginName": "faces-cli",
1713
1612
  "pluginType": "core",
@@ -1717,20 +1616,67 @@
1717
1616
  "relativePath": [
1718
1617
  "dist",
1719
1618
  "commands",
1720
- "config",
1721
- "show.js"
1619
+ "catalog",
1620
+ "doctor.js"
1722
1621
  ]
1723
1622
  },
1724
- "compile:import": {
1623
+ "catalog:list": {
1725
1624
  "aliases": [],
1726
- "args": {
1727
- "face_id": {
1728
- "description": "Face alias",
1729
- "name": "face_id",
1730
- "required": true
1625
+ "args": {},
1626
+ "description": "List all faces in the local catalog",
1627
+ "flags": {
1628
+ "json": {
1629
+ "description": "Format output as json.",
1630
+ "helpGroup": "GLOBAL",
1631
+ "name": "json",
1632
+ "allowNo": false,
1633
+ "type": "boolean"
1634
+ },
1635
+ "base-url": {
1636
+ "description": "API base URL",
1637
+ "env": "FACES_BASE_URL",
1638
+ "name": "base-url",
1639
+ "hasDynamicHelp": false,
1640
+ "multiple": false,
1641
+ "type": "option"
1642
+ },
1643
+ "token": {
1644
+ "description": "JWT bearer token",
1645
+ "env": "FACES_TOKEN",
1646
+ "name": "token",
1647
+ "hasDynamicHelp": false,
1648
+ "multiple": false,
1649
+ "type": "option"
1650
+ },
1651
+ "api-key": {
1652
+ "description": "API key",
1653
+ "env": "FACES_API_KEY",
1654
+ "name": "api-key",
1655
+ "hasDynamicHelp": false,
1656
+ "multiple": false,
1657
+ "type": "option"
1731
1658
  }
1732
1659
  },
1733
- "description": "Import a YouTube video into a face via server-side download and transcription",
1660
+ "hasDynamicHelp": false,
1661
+ "hiddenAliases": [],
1662
+ "id": "catalog:list",
1663
+ "pluginAlias": "faces-cli",
1664
+ "pluginName": "faces-cli",
1665
+ "pluginType": "core",
1666
+ "strict": true,
1667
+ "enableJsonFlag": true,
1668
+ "isESM": true,
1669
+ "relativePath": [
1670
+ "dist",
1671
+ "commands",
1672
+ "catalog",
1673
+ "list.js"
1674
+ ]
1675
+ },
1676
+ "catalog:manyfaced": {
1677
+ "aliases": [],
1678
+ "args": {},
1679
+ "description": "Browse and install community manyfaced skills from github.com/facessh/manyfaced",
1734
1680
  "flags": {
1735
1681
  "json": {
1736
1682
  "description": "Format output as json.",
@@ -1763,55 +1709,96 @@
1763
1709
  "multiple": false,
1764
1710
  "type": "option"
1765
1711
  },
1766
- "url": {
1767
- "description": "YouTube URL (youtube.com/watch?v=... or youtu.be/...)",
1768
- "name": "url",
1769
- "required": true,
1712
+ "skill": {
1713
+ "description": "Show details for a specific skill",
1714
+ "name": "skill",
1770
1715
  "hasDynamicHelp": false,
1771
1716
  "multiple": false,
1772
1717
  "type": "option"
1773
1718
  },
1774
- "type": {
1775
- "description": "\"document\" for solo talks, lectures, monologues; \"thread\" for interviews or multi-speaker conversations",
1776
- "name": "type",
1777
- "default": "document",
1719
+ "install": {
1720
+ "description": "Install a skill by name",
1721
+ "name": "install",
1778
1722
  "hasDynamicHelp": false,
1779
1723
  "multiple": false,
1780
- "options": [
1781
- "document",
1782
- "thread"
1783
- ],
1784
1724
  "type": "option"
1785
1725
  },
1786
- "perspective": {
1787
- "description": "\"first-person\" if the face is the speaker; \"third-person\" if the video is about the face",
1788
- "name": "perspective",
1789
- "default": "third-person",
1726
+ "skills-dir": {
1727
+ "description": "Directory to install skills into (required for --install)",
1728
+ "name": "skills-dir",
1790
1729
  "hasDynamicHelp": false,
1791
1730
  "multiple": false,
1792
- "options": [
1793
- "first-person",
1794
- "third-person"
1795
- ],
1796
1731
  "type": "option"
1797
1732
  },
1798
- "face-speaker": {
1799
- "description": "For --type thread: AssemblyAI speaker label (e.g. \"A\") that corresponds to the face. Defaults to first detected speaker.",
1800
- "name": "face-speaker",
1733
+ "refresh": {
1734
+ "description": "Force refresh the skill index (ignore cache)",
1735
+ "name": "refresh",
1736
+ "allowNo": false,
1737
+ "type": "boolean"
1738
+ }
1739
+ },
1740
+ "hasDynamicHelp": false,
1741
+ "hiddenAliases": [],
1742
+ "id": "catalog:manyfaced",
1743
+ "pluginAlias": "faces-cli",
1744
+ "pluginName": "faces-cli",
1745
+ "pluginType": "core",
1746
+ "strict": true,
1747
+ "enableJsonFlag": true,
1748
+ "isESM": true,
1749
+ "relativePath": [
1750
+ "dist",
1751
+ "commands",
1752
+ "catalog",
1753
+ "manyfaced.js"
1754
+ ]
1755
+ },
1756
+ "config:clear": {
1757
+ "aliases": [],
1758
+ "args": {},
1759
+ "description": "Delete all saved credentials and config",
1760
+ "flags": {
1761
+ "json": {
1762
+ "description": "Format output as json.",
1763
+ "helpGroup": "GLOBAL",
1764
+ "name": "json",
1765
+ "allowNo": false,
1766
+ "type": "boolean"
1767
+ },
1768
+ "base-url": {
1769
+ "description": "API base URL",
1770
+ "env": "FACES_BASE_URL",
1771
+ "name": "base-url",
1801
1772
  "hasDynamicHelp": false,
1802
1773
  "multiple": false,
1803
1774
  "type": "option"
1804
1775
  },
1805
- "no-wait": {
1806
- "description": "Return immediately after import starts (do not poll for transcription). Prints the ID for manual polling.",
1807
- "name": "no-wait",
1776
+ "token": {
1777
+ "description": "JWT bearer token",
1778
+ "env": "FACES_TOKEN",
1779
+ "name": "token",
1780
+ "hasDynamicHelp": false,
1781
+ "multiple": false,
1782
+ "type": "option"
1783
+ },
1784
+ "api-key": {
1785
+ "description": "API key",
1786
+ "env": "FACES_API_KEY",
1787
+ "name": "api-key",
1788
+ "hasDynamicHelp": false,
1789
+ "multiple": false,
1790
+ "type": "option"
1791
+ },
1792
+ "yes": {
1793
+ "description": "Skip confirmation",
1794
+ "name": "yes",
1808
1795
  "allowNo": false,
1809
1796
  "type": "boolean"
1810
1797
  }
1811
1798
  },
1812
1799
  "hasDynamicHelp": false,
1813
1800
  "hiddenAliases": [],
1814
- "id": "compile:import",
1801
+ "id": "config:clear",
1815
1802
  "pluginAlias": "faces-cli",
1816
1803
  "pluginName": "faces-cli",
1817
1804
  "pluginType": "core",
@@ -1821,20 +1808,25 @@
1821
1808
  "relativePath": [
1822
1809
  "dist",
1823
1810
  "commands",
1824
- "compile",
1825
- "import.js"
1811
+ "config",
1812
+ "clear.js"
1826
1813
  ]
1827
1814
  },
1828
- "compile:upload": {
1815
+ "config:set": {
1829
1816
  "aliases": [],
1830
1817
  "args": {
1831
- "alias": {
1832
- "description": "Face alias",
1833
- "name": "alias",
1818
+ "key": {
1819
+ "description": "Config key",
1820
+ "name": "key",
1821
+ "required": true
1822
+ },
1823
+ "value": {
1824
+ "description": "Config value",
1825
+ "name": "value",
1834
1826
  "required": true
1835
1827
  }
1836
1828
  },
1837
- "description": "Upload a file (text/PDF/audio/video) to compile into a face",
1829
+ "description": "Set a config value (e.g. base_url, api_key, token)",
1838
1830
  "flags": {
1839
1831
  "json": {
1840
1832
  "description": "Format output as json.",
@@ -1866,56 +1858,64 @@
1866
1858
  "hasDynamicHelp": false,
1867
1859
  "multiple": false,
1868
1860
  "type": "option"
1861
+ }
1862
+ },
1863
+ "hasDynamicHelp": false,
1864
+ "hiddenAliases": [],
1865
+ "id": "config:set",
1866
+ "pluginAlias": "faces-cli",
1867
+ "pluginName": "faces-cli",
1868
+ "pluginType": "core",
1869
+ "strict": true,
1870
+ "enableJsonFlag": true,
1871
+ "isESM": true,
1872
+ "relativePath": [
1873
+ "dist",
1874
+ "commands",
1875
+ "config",
1876
+ "set.js"
1877
+ ]
1878
+ },
1879
+ "config:show": {
1880
+ "aliases": [],
1881
+ "args": {},
1882
+ "description": "Print current config (credentials are masked)",
1883
+ "flags": {
1884
+ "json": {
1885
+ "description": "Format output as json.",
1886
+ "helpGroup": "GLOBAL",
1887
+ "name": "json",
1888
+ "allowNo": false,
1889
+ "type": "boolean"
1869
1890
  },
1870
- "file": {
1871
- "description": "File to upload",
1872
- "name": "file",
1873
- "required": true,
1874
- "hasDynamicHelp": false,
1875
- "multiple": false,
1876
- "type": "option"
1877
- },
1878
- "kind": {
1879
- "description": "Upload kind: document or thread",
1880
- "name": "kind",
1881
- "default": "document",
1891
+ "base-url": {
1892
+ "description": "API base URL",
1893
+ "env": "FACES_BASE_URL",
1894
+ "name": "base-url",
1882
1895
  "hasDynamicHelp": false,
1883
1896
  "multiple": false,
1884
- "options": [
1885
- "document",
1886
- "thread"
1887
- ],
1888
1897
  "type": "option"
1889
1898
  },
1890
- "perspective": {
1891
- "description": "Perspective (document only)",
1892
- "name": "perspective",
1893
- "default": "third-person",
1899
+ "token": {
1900
+ "description": "JWT bearer token",
1901
+ "env": "FACES_TOKEN",
1902
+ "name": "token",
1894
1903
  "hasDynamicHelp": false,
1895
1904
  "multiple": false,
1896
- "options": [
1897
- "first-person",
1898
- "third-person"
1899
- ],
1900
1905
  "type": "option"
1901
1906
  },
1902
- "face-speaker": {
1903
- "description": "Speaker name to map to the face (thread only). If omitted, auto-detected from face name.",
1904
- "name": "face-speaker",
1907
+ "api-key": {
1908
+ "description": "API key",
1909
+ "env": "FACES_API_KEY",
1910
+ "name": "api-key",
1905
1911
  "hasDynamicHelp": false,
1906
1912
  "multiple": false,
1907
1913
  "type": "option"
1908
- },
1909
- "no-wait": {
1910
- "description": "Return immediately after upload (do not poll for transcription). Prints the ID for manual polling.",
1911
- "name": "no-wait",
1912
- "allowNo": false,
1913
- "type": "boolean"
1914
1914
  }
1915
1915
  },
1916
1916
  "hasDynamicHelp": false,
1917
1917
  "hiddenAliases": [],
1918
- "id": "compile:upload",
1918
+ "id": "config:show",
1919
1919
  "pluginAlias": "faces-cli",
1920
1920
  "pluginName": "faces-cli",
1921
1921
  "pluginType": "core",
@@ -1925,8 +1925,8 @@
1925
1925
  "relativePath": [
1926
1926
  "dist",
1927
1927
  "commands",
1928
- "compile",
1929
- "upload.js"
1928
+ "config",
1929
+ "show.js"
1930
1930
  ]
1931
1931
  },
1932
1932
  "face:create": {
@@ -4231,5 +4231,5 @@
4231
4231
  ]
4232
4232
  }
4233
4233
  },
4234
- "version": "1.5.8"
4234
+ "version": "1.5.9"
4235
4235
  }