faces-cli 1.6.12 → 1.6.14

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,10 +120,23 @@
120
120
  "state.js"
121
121
  ]
122
122
  },
123
- "catalog:backup": {
123
+ "auth:connect": {
124
124
  "aliases": [],
125
- "args": {},
126
- "description": "Snapshot all faces, teams, and source material for migration",
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
+ ],
127
140
  "flags": {
128
141
  "json": {
129
142
  "description": "Format output as json.",
@@ -155,11 +168,17 @@
155
168
  "hasDynamicHelp": false,
156
169
  "multiple": false,
157
170
  "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"
158
177
  }
159
178
  },
160
179
  "hasDynamicHelp": false,
161
180
  "hiddenAliases": [],
162
- "id": "catalog:backup",
181
+ "id": "auth:connect",
163
182
  "pluginAlias": "faces-cli",
164
183
  "pluginName": "faces-cli",
165
184
  "pluginType": "core",
@@ -169,14 +188,18 @@
169
188
  "relativePath": [
170
189
  "dist",
171
190
  "commands",
172
- "catalog",
173
- "backup.js"
191
+ "auth",
192
+ "connect.js"
174
193
  ]
175
194
  },
176
- "catalog:doctor": {
195
+ "auth:connections": {
177
196
  "aliases": [],
178
197
  "args": {},
179
- "description": "Diagnose and repair the local face and team catalog",
198
+ "description": "List connected OAuth provider accounts",
199
+ "examples": [
200
+ "<%= config.bin %> auth connections",
201
+ "<%= config.bin %> auth connections --json"
202
+ ],
180
203
  "flags": {
181
204
  "json": {
182
205
  "description": "Format output as json.",
@@ -208,23 +231,11 @@
208
231
  "hasDynamicHelp": false,
209
232
  "multiple": false,
210
233
  "type": "option"
211
- },
212
- "fix": {
213
- "description": "Rebuild missing or stale catalog entries from API",
214
- "name": "fix",
215
- "allowNo": false,
216
- "type": "boolean"
217
- },
218
- "generate": {
219
- "description": "Fix + generate missing descriptions via LLM",
220
- "name": "generate",
221
- "allowNo": false,
222
- "type": "boolean"
223
234
  }
224
235
  },
225
236
  "hasDynamicHelp": false,
226
237
  "hiddenAliases": [],
227
- "id": "catalog:doctor",
238
+ "id": "auth:connections",
228
239
  "pluginAlias": "faces-cli",
229
240
  "pluginName": "faces-cli",
230
241
  "pluginType": "core",
@@ -234,14 +245,26 @@
234
245
  "relativePath": [
235
246
  "dist",
236
247
  "commands",
237
- "catalog",
238
- "doctor.js"
248
+ "auth",
249
+ "connections.js"
239
250
  ]
240
251
  },
241
- "catalog:list": {
252
+ "auth:disconnect": {
242
253
  "aliases": [],
243
- "args": {},
244
- "description": "List all faces in the local catalog",
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
+ ],
245
268
  "flags": {
246
269
  "json": {
247
270
  "description": "Format output as json.",
@@ -277,7 +300,7 @@
277
300
  },
278
301
  "hasDynamicHelp": false,
279
302
  "hiddenAliases": [],
280
- "id": "catalog:list",
303
+ "id": "auth:disconnect",
281
304
  "pluginAlias": "faces-cli",
282
305
  "pluginName": "faces-cli",
283
306
  "pluginType": "core",
@@ -287,14 +310,14 @@
287
310
  "relativePath": [
288
311
  "dist",
289
312
  "commands",
290
- "catalog",
291
- "list.js"
313
+ "auth",
314
+ "disconnect.js"
292
315
  ]
293
316
  },
294
- "catalog:manyfaced": {
317
+ "auth:login": {
295
318
  "aliases": [],
296
319
  "args": {},
297
- "description": "Browse and install community manyfaced skills from github.com/facessh/manyfaced",
320
+ "description": "Login and save JWT credentials",
298
321
  "flags": {
299
322
  "json": {
300
323
  "description": "Format output as json.",
@@ -327,37 +350,26 @@
327
350
  "multiple": false,
328
351
  "type": "option"
329
352
  },
330
- "skill": {
331
- "description": "Show details for a specific skill",
332
- "name": "skill",
333
- "hasDynamicHelp": false,
334
- "multiple": false,
335
- "type": "option"
336
- },
337
- "install": {
338
- "description": "Install a skill by name",
339
- "name": "install",
353
+ "email": {
354
+ "description": "Account email",
355
+ "name": "email",
356
+ "required": true,
340
357
  "hasDynamicHelp": false,
341
358
  "multiple": false,
342
359
  "type": "option"
343
360
  },
344
- "skills-dir": {
345
- "description": "Directory to install skills into (required for --install)",
346
- "name": "skills-dir",
361
+ "password": {
362
+ "description": "Account password",
363
+ "name": "password",
364
+ "required": true,
347
365
  "hasDynamicHelp": false,
348
366
  "multiple": false,
349
367
  "type": "option"
350
- },
351
- "refresh": {
352
- "description": "Force refresh the skill index (ignore cache)",
353
- "name": "refresh",
354
- "allowNo": false,
355
- "type": "boolean"
356
368
  }
357
369
  },
358
370
  "hasDynamicHelp": false,
359
371
  "hiddenAliases": [],
360
- "id": "catalog:manyfaced",
372
+ "id": "auth:login",
361
373
  "pluginAlias": "faces-cli",
362
374
  "pluginName": "faces-cli",
363
375
  "pluginType": "core",
@@ -367,19 +379,14 @@
367
379
  "relativePath": [
368
380
  "dist",
369
381
  "commands",
370
- "catalog",
371
- "manyfaced.js"
382
+ "auth",
383
+ "login.js"
372
384
  ]
373
385
  },
374
- "catalog:restore": {
386
+ "auth:logout": {
375
387
  "aliases": [],
376
- "args": {
377
- "file": {
378
- "description": "Backup file path (default: most recent in ~/.faces/backups/)",
379
- "name": "file"
380
- }
381
- },
382
- "description": "Restore faces, teams, and source material from a backup snapshot",
388
+ "args": {},
389
+ "description": "Clear saved credentials",
383
390
  "flags": {
384
391
  "json": {
385
392
  "description": "Format output as json.",
@@ -411,17 +418,11 @@
411
418
  "hasDynamicHelp": false,
412
419
  "multiple": false,
413
420
  "type": "option"
414
- },
415
- "compile": {
416
- "description": "Run compile:all after restoring",
417
- "name": "compile",
418
- "allowNo": false,
419
- "type": "boolean"
420
421
  }
421
422
  },
422
423
  "hasDynamicHelp": false,
423
424
  "hiddenAliases": [],
424
- "id": "catalog:restore",
425
+ "id": "auth:logout",
425
426
  "pluginAlias": "faces-cli",
426
427
  "pluginName": "faces-cli",
427
428
  "pluginType": "core",
@@ -431,27 +432,14 @@
431
432
  "relativePath": [
432
433
  "dist",
433
434
  "commands",
434
- "catalog",
435
- "restore.js"
435
+ "auth",
436
+ "logout.js"
436
437
  ]
437
438
  },
438
- "auth:connect": {
439
+ "auth:refresh": {
439
440
  "aliases": [],
440
- "args": {
441
- "provider": {
442
- "description": "OAuth provider to connect",
443
- "name": "provider",
444
- "options": [
445
- "openai"
446
- ],
447
- "required": true
448
- }
449
- },
450
- "description": "Connect an OAuth provider account to Faces (e.g. ChatGPT Plus/Pro)",
451
- "examples": [
452
- "<%= config.bin %> auth connect openai",
453
- "<%= config.bin %> auth connect openai --manual"
454
- ],
441
+ "args": {},
442
+ "description": "Exchange current JWT for a fresh one",
455
443
  "flags": {
456
444
  "json": {
457
445
  "description": "Format output as json.",
@@ -483,17 +471,11 @@
483
471
  "hasDynamicHelp": false,
484
472
  "multiple": false,
485
473
  "type": "option"
486
- },
487
- "manual": {
488
- "description": "Manual mode for headless environments: prints the authorize URL and prompts you to paste the callback URL after approving in any browser.",
489
- "name": "manual",
490
- "allowNo": false,
491
- "type": "boolean"
492
474
  }
493
475
  },
494
476
  "hasDynamicHelp": false,
495
477
  "hiddenAliases": [],
496
- "id": "auth:connect",
478
+ "id": "auth:refresh",
497
479
  "pluginAlias": "faces-cli",
498
480
  "pluginName": "faces-cli",
499
481
  "pluginType": "core",
@@ -504,17 +486,13 @@
504
486
  "dist",
505
487
  "commands",
506
488
  "auth",
507
- "connect.js"
489
+ "refresh.js"
508
490
  ]
509
491
  },
510
- "auth:connections": {
492
+ "auth:register": {
511
493
  "aliases": [],
512
494
  "args": {},
513
- "description": "List connected OAuth provider accounts",
514
- "examples": [
515
- "<%= config.bin %> auth connections",
516
- "<%= config.bin %> auth connections --json"
517
- ],
495
+ "description": "Create a new Faces account",
518
496
  "flags": {
519
497
  "json": {
520
498
  "description": "Format output as json.",
@@ -546,11 +524,54 @@
546
524
  "hasDynamicHelp": false,
547
525
  "multiple": false,
548
526
  "type": "option"
527
+ },
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,
548
+ "hasDynamicHelp": false,
549
+ "multiple": false,
550
+ "type": "option"
551
+ },
552
+ "invite-key": {
553
+ "description": "Invite key (if required)",
554
+ "name": "invite-key",
555
+ "hasDynamicHelp": false,
556
+ "multiple": false,
557
+ "type": "option"
558
+ },
559
+ "plan": {
560
+ "description": "Plan to subscribe to: \"free\" ($5 activation) or \"connect\" ($17/mo, no activation fee)",
561
+ "name": "plan",
562
+ "default": "free",
563
+ "hasDynamicHelp": false,
564
+ "multiple": false,
565
+ "options": [
566
+ "free",
567
+ "connect"
568
+ ],
569
+ "type": "option"
549
570
  }
550
571
  },
551
572
  "hasDynamicHelp": false,
552
573
  "hiddenAliases": [],
553
- "id": "auth:connections",
574
+ "id": "auth:register",
554
575
  "pluginAlias": "faces-cli",
555
576
  "pluginName": "faces-cli",
556
577
  "pluginType": "core",
@@ -561,25 +582,13 @@
561
582
  "dist",
562
583
  "commands",
563
584
  "auth",
564
- "connections.js"
585
+ "register.js"
565
586
  ]
566
587
  },
567
- "auth:disconnect": {
588
+ "auth:whoami": {
568
589
  "aliases": [],
569
- "args": {
570
- "provider": {
571
- "description": "OAuth provider to disconnect",
572
- "name": "provider",
573
- "options": [
574
- "openai"
575
- ],
576
- "required": true
577
- }
578
- },
579
- "description": "Disconnect a linked OAuth provider account",
580
- "examples": [
581
- "<%= config.bin %> auth disconnect openai"
582
- ],
590
+ "args": {},
591
+ "description": "Print current user profile and auth diagnostic",
583
592
  "flags": {
584
593
  "json": {
585
594
  "description": "Format output as json.",
@@ -615,7 +624,7 @@
615
624
  },
616
625
  "hasDynamicHelp": false,
617
626
  "hiddenAliases": [],
618
- "id": "auth:disconnect",
627
+ "id": "auth:whoami",
619
628
  "pluginAlias": "faces-cli",
620
629
  "pluginName": "faces-cli",
621
630
  "pluginType": "core",
@@ -626,13 +635,13 @@
626
635
  "dist",
627
636
  "commands",
628
637
  "auth",
629
- "disconnect.js"
638
+ "whoami.js"
630
639
  ]
631
640
  },
632
- "auth:login": {
641
+ "catalog:backup": {
633
642
  "aliases": [],
634
643
  "args": {},
635
- "description": "Login and save JWT credentials",
644
+ "description": "Snapshot all faces, teams, and source material for migration",
636
645
  "flags": {
637
646
  "json": {
638
647
  "description": "Format output as json.",
@@ -664,27 +673,11 @@
664
673
  "hasDynamicHelp": false,
665
674
  "multiple": false,
666
675
  "type": "option"
667
- },
668
- "email": {
669
- "description": "Account email",
670
- "name": "email",
671
- "required": true,
672
- "hasDynamicHelp": false,
673
- "multiple": false,
674
- "type": "option"
675
- },
676
- "password": {
677
- "description": "Account password",
678
- "name": "password",
679
- "required": true,
680
- "hasDynamicHelp": false,
681
- "multiple": false,
682
- "type": "option"
683
676
  }
684
677
  },
685
678
  "hasDynamicHelp": false,
686
679
  "hiddenAliases": [],
687
- "id": "auth:login",
680
+ "id": "catalog:backup",
688
681
  "pluginAlias": "faces-cli",
689
682
  "pluginName": "faces-cli",
690
683
  "pluginType": "core",
@@ -694,14 +687,14 @@
694
687
  "relativePath": [
695
688
  "dist",
696
689
  "commands",
697
- "auth",
698
- "login.js"
690
+ "catalog",
691
+ "backup.js"
699
692
  ]
700
693
  },
701
- "auth:logout": {
694
+ "catalog:doctor": {
702
695
  "aliases": [],
703
696
  "args": {},
704
- "description": "Clear saved credentials",
697
+ "description": "Diagnose and repair the local face and team catalog",
705
698
  "flags": {
706
699
  "json": {
707
700
  "description": "Format output as json.",
@@ -733,11 +726,23 @@
733
726
  "hasDynamicHelp": false,
734
727
  "multiple": false,
735
728
  "type": "option"
729
+ },
730
+ "fix": {
731
+ "description": "Rebuild missing or stale catalog entries from API",
732
+ "name": "fix",
733
+ "allowNo": false,
734
+ "type": "boolean"
735
+ },
736
+ "generate": {
737
+ "description": "Fix + generate missing descriptions via LLM",
738
+ "name": "generate",
739
+ "allowNo": false,
740
+ "type": "boolean"
736
741
  }
737
742
  },
738
743
  "hasDynamicHelp": false,
739
744
  "hiddenAliases": [],
740
- "id": "auth:logout",
745
+ "id": "catalog:doctor",
741
746
  "pluginAlias": "faces-cli",
742
747
  "pluginName": "faces-cli",
743
748
  "pluginType": "core",
@@ -747,14 +752,14 @@
747
752
  "relativePath": [
748
753
  "dist",
749
754
  "commands",
750
- "auth",
751
- "logout.js"
755
+ "catalog",
756
+ "doctor.js"
752
757
  ]
753
758
  },
754
- "auth:refresh": {
759
+ "catalog:list": {
755
760
  "aliases": [],
756
761
  "args": {},
757
- "description": "Exchange current JWT for a fresh one",
762
+ "description": "List all faces in the local catalog",
758
763
  "flags": {
759
764
  "json": {
760
765
  "description": "Format output as json.",
@@ -790,7 +795,7 @@
790
795
  },
791
796
  "hasDynamicHelp": false,
792
797
  "hiddenAliases": [],
793
- "id": "auth:refresh",
798
+ "id": "catalog:list",
794
799
  "pluginAlias": "faces-cli",
795
800
  "pluginName": "faces-cli",
796
801
  "pluginType": "core",
@@ -800,14 +805,14 @@
800
805
  "relativePath": [
801
806
  "dist",
802
807
  "commands",
803
- "auth",
804
- "refresh.js"
808
+ "catalog",
809
+ "list.js"
805
810
  ]
806
811
  },
807
- "auth:register": {
812
+ "catalog:manyfaced": {
808
813
  "aliases": [],
809
814
  "args": {},
810
- "description": "Create a new Faces account",
815
+ "description": "Browse and install community manyfaced skills from github.com/facessh/manyfaced",
811
816
  "flags": {
812
817
  "json": {
813
818
  "description": "Format output as json.",
@@ -840,53 +845,37 @@
840
845
  "multiple": false,
841
846
  "type": "option"
842
847
  },
843
- "email": {
844
- "description": "Email address",
845
- "name": "email",
846
- "required": true,
847
- "hasDynamicHelp": false,
848
- "multiple": false,
849
- "type": "option"
850
- },
851
- "password": {
852
- "description": "Password",
853
- "name": "password",
854
- "required": true,
848
+ "skill": {
849
+ "description": "Show details for a specific skill",
850
+ "name": "skill",
855
851
  "hasDynamicHelp": false,
856
852
  "multiple": false,
857
853
  "type": "option"
858
854
  },
859
- "username": {
860
- "description": "Username (lowercase, dashes, numbers)",
861
- "name": "username",
862
- "required": true,
855
+ "install": {
856
+ "description": "Install a skill by name",
857
+ "name": "install",
863
858
  "hasDynamicHelp": false,
864
859
  "multiple": false,
865
860
  "type": "option"
866
861
  },
867
- "invite-key": {
868
- "description": "Invite key (if required)",
869
- "name": "invite-key",
862
+ "skills-dir": {
863
+ "description": "Directory to install skills into (required for --install)",
864
+ "name": "skills-dir",
870
865
  "hasDynamicHelp": false,
871
866
  "multiple": false,
872
867
  "type": "option"
873
868
  },
874
- "plan": {
875
- "description": "Plan to subscribe to: \"free\" ($5 activation) or \"connect\" ($17/mo, no activation fee)",
876
- "name": "plan",
877
- "default": "free",
878
- "hasDynamicHelp": false,
879
- "multiple": false,
880
- "options": [
881
- "free",
882
- "connect"
883
- ],
884
- "type": "option"
869
+ "refresh": {
870
+ "description": "Force refresh the skill index (ignore cache)",
871
+ "name": "refresh",
872
+ "allowNo": false,
873
+ "type": "boolean"
885
874
  }
886
875
  },
887
876
  "hasDynamicHelp": false,
888
877
  "hiddenAliases": [],
889
- "id": "auth:register",
878
+ "id": "catalog:manyfaced",
890
879
  "pluginAlias": "faces-cli",
891
880
  "pluginName": "faces-cli",
892
881
  "pluginType": "core",
@@ -896,14 +885,19 @@
896
885
  "relativePath": [
897
886
  "dist",
898
887
  "commands",
899
- "auth",
900
- "register.js"
888
+ "catalog",
889
+ "manyfaced.js"
901
890
  ]
902
891
  },
903
- "auth:whoami": {
892
+ "catalog:restore": {
904
893
  "aliases": [],
905
- "args": {},
906
- "description": "Print current user profile and auth diagnostic",
894
+ "args": {
895
+ "file": {
896
+ "description": "Backup file path (default: most recent in ~/.faces/backups/)",
897
+ "name": "file"
898
+ }
899
+ },
900
+ "description": "Restore faces, teams, and source material from a backup snapshot",
907
901
  "flags": {
908
902
  "json": {
909
903
  "description": "Format output as json.",
@@ -935,11 +929,17 @@
935
929
  "hasDynamicHelp": false,
936
930
  "multiple": false,
937
931
  "type": "option"
932
+ },
933
+ "compile": {
934
+ "description": "Run compile:all after restoring",
935
+ "name": "compile",
936
+ "allowNo": false,
937
+ "type": "boolean"
938
938
  }
939
939
  },
940
940
  "hasDynamicHelp": false,
941
941
  "hiddenAliases": [],
942
- "id": "auth:whoami",
942
+ "id": "catalog:restore",
943
943
  "pluginAlias": "faces-cli",
944
944
  "pluginName": "faces-cli",
945
945
  "pluginType": "core",
@@ -949,8 +949,8 @@
949
949
  "relativePath": [
950
950
  "dist",
951
951
  "commands",
952
- "auth",
953
- "whoami.js"
952
+ "catalog",
953
+ "restore.js"
954
954
  ]
955
955
  },
956
956
  "billing:balance": {
@@ -2174,10 +2174,10 @@
2174
2174
  "show.js"
2175
2175
  ]
2176
2176
  },
2177
- "face:attributes": {
2177
+ "keys:create": {
2178
2178
  "aliases": [],
2179
2179
  "args": {},
2180
- "description": "List all supported attribute keys",
2180
+ "description": "Create a new API key (JWT required)",
2181
2181
  "flags": {
2182
2182
  "json": {
2183
2183
  "description": "Format output as json.",
@@ -2209,11 +2209,47 @@
2209
2209
  "hasDynamicHelp": false,
2210
2210
  "multiple": false,
2211
2211
  "type": "option"
2212
+ },
2213
+ "name": {
2214
+ "description": "Key name/label",
2215
+ "name": "name",
2216
+ "required": true,
2217
+ "hasDynamicHelp": false,
2218
+ "multiple": false,
2219
+ "type": "option"
2220
+ },
2221
+ "expires-days": {
2222
+ "description": "Expiry in days (omit for no expiry)",
2223
+ "name": "expires-days",
2224
+ "hasDynamicHelp": false,
2225
+ "multiple": false,
2226
+ "type": "option"
2227
+ },
2228
+ "budget": {
2229
+ "description": "Spend budget in USD",
2230
+ "name": "budget",
2231
+ "hasDynamicHelp": false,
2232
+ "multiple": false,
2233
+ "type": "option"
2234
+ },
2235
+ "face": {
2236
+ "description": "Allowed face alias (repeatable)",
2237
+ "name": "face",
2238
+ "hasDynamicHelp": false,
2239
+ "multiple": true,
2240
+ "type": "option"
2241
+ },
2242
+ "model": {
2243
+ "description": "Allowed model name (repeatable)",
2244
+ "name": "model",
2245
+ "hasDynamicHelp": false,
2246
+ "multiple": true,
2247
+ "type": "option"
2212
2248
  }
2213
2249
  },
2214
2250
  "hasDynamicHelp": false,
2215
2251
  "hiddenAliases": [],
2216
- "id": "face:attributes",
2252
+ "id": "keys:create",
2217
2253
  "pluginAlias": "faces-cli",
2218
2254
  "pluginName": "faces-cli",
2219
2255
  "pluginType": "core",
@@ -2223,14 +2259,14 @@
2223
2259
  "relativePath": [
2224
2260
  "dist",
2225
2261
  "commands",
2226
- "face",
2227
- "attributes.js"
2262
+ "keys",
2263
+ "create.js"
2228
2264
  ]
2229
2265
  },
2230
- "face:create": {
2266
+ "keys:list": {
2231
2267
  "aliases": [],
2232
2268
  "args": {},
2233
- "description": "Create a new face",
2269
+ "description": "List all API keys (JWT required)",
2234
2270
  "flags": {
2235
2271
  "json": {
2236
2272
  "description": "Format output as json.",
@@ -2262,69 +2298,11 @@
2262
2298
  "hasDynamicHelp": false,
2263
2299
  "multiple": false,
2264
2300
  "type": "option"
2265
- },
2266
- "name": {
2267
- "description": "Display name",
2268
- "name": "name",
2269
- "required": true,
2270
- "hasDynamicHelp": false,
2271
- "multiple": false,
2272
- "type": "option"
2273
- },
2274
- "alias": {
2275
- "description": "Unique alias slug",
2276
- "name": "alias",
2277
- "required": true,
2278
- "hasDynamicHelp": false,
2279
- "multiple": false,
2280
- "type": "option"
2281
- },
2282
- "description": {
2283
- "description": "Plain-text description / bio (max 1500 chars)",
2284
- "name": "description",
2285
- "hasDynamicHelp": false,
2286
- "multiple": false,
2287
- "type": "option"
2288
- },
2289
- "tag": {
2290
- "description": "Tag label (repeatable, lowercase)",
2291
- "name": "tag",
2292
- "hasDynamicHelp": false,
2293
- "multiple": true,
2294
- "type": "option"
2295
- },
2296
- "default-model": {
2297
- "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
2298
- "name": "default-model",
2299
- "hasDynamicHelp": false,
2300
- "multiple": false,
2301
- "type": "option"
2302
- },
2303
- "formula": {
2304
- "description": "Boolean formula over owned concrete face aliases (e.g. \"a | b\", \"(a | b) - c\"). Creates a composite face.",
2305
- "name": "formula",
2306
- "hasDynamicHelp": false,
2307
- "multiple": false,
2308
- "type": "option"
2309
- },
2310
- "attr": {
2311
- "description": "Attribute KEY=VALUE (repeatable)",
2312
- "name": "attr",
2313
- "hasDynamicHelp": false,
2314
- "multiple": true,
2315
- "type": "option"
2316
- },
2317
- "tool": {
2318
- "description": "Tool name to enable (repeatable)",
2319
- "name": "tool",
2320
- "hasDynamicHelp": false,
2321
- "multiple": true,
2322
- "type": "option"
2323
2301
  }
2324
2302
  },
2325
2303
  "hasDynamicHelp": false,
2326
2304
  "hiddenAliases": [],
2327
- "id": "face:create",
2305
+ "id": "keys:list",
2328
2306
  "pluginAlias": "faces-cli",
2329
2307
  "pluginName": "faces-cli",
2330
2308
  "pluginType": "core",
@@ -2334,20 +2312,20 @@
2334
2312
  "relativePath": [
2335
2313
  "dist",
2336
2314
  "commands",
2337
- "face",
2338
- "create.js"
2315
+ "keys",
2316
+ "list.js"
2339
2317
  ]
2340
2318
  },
2341
- "face:delete": {
2319
+ "keys:revoke": {
2342
2320
  "aliases": [],
2343
2321
  "args": {
2344
- "face_id": {
2345
- "description": "Face alias",
2346
- "name": "face_id",
2322
+ "key_id": {
2323
+ "description": "Key ID",
2324
+ "name": "key_id",
2347
2325
  "required": true
2348
2326
  }
2349
2327
  },
2350
- "description": "Delete a face permanently",
2328
+ "description": "Revoke an API key (JWT required)",
2351
2329
  "flags": {
2352
2330
  "json": {
2353
2331
  "description": "Format output as json.",
@@ -2389,7 +2367,7 @@
2389
2367
  },
2390
2368
  "hasDynamicHelp": false,
2391
2369
  "hiddenAliases": [],
2392
- "id": "face:delete",
2370
+ "id": "keys:revoke",
2393
2371
  "pluginAlias": "faces-cli",
2394
2372
  "pluginName": "faces-cli",
2395
2373
  "pluginType": "core",
@@ -2399,14 +2377,20 @@
2399
2377
  "relativePath": [
2400
2378
  "dist",
2401
2379
  "commands",
2402
- "face",
2403
- "delete.js"
2380
+ "keys",
2381
+ "revoke.js"
2404
2382
  ]
2405
2383
  },
2406
- "face:diff": {
2384
+ "keys:update": {
2407
2385
  "aliases": [],
2408
- "args": {},
2409
- "description": "Compare owned faces pairwise across all centroid components",
2386
+ "args": {
2387
+ "key_id": {
2388
+ "description": "Key ID",
2389
+ "name": "key_id",
2390
+ "required": true
2391
+ }
2392
+ },
2393
+ "description": "Update API key metadata (JWT required)",
2410
2394
  "flags": {
2411
2395
  "json": {
2412
2396
  "description": "Format output as json.",
@@ -2439,18 +2423,30 @@
2439
2423
  "multiple": false,
2440
2424
  "type": "option"
2441
2425
  },
2442
- "face": {
2443
- "description": "Face alias to include (repeatable, min 2)",
2444
- "name": "face",
2445
- "required": true,
2426
+ "name": {
2427
+ "description": "New key name",
2428
+ "name": "name",
2446
2429
  "hasDynamicHelp": false,
2447
- "multiple": true,
2430
+ "multiple": false,
2448
2431
  "type": "option"
2432
+ },
2433
+ "budget": {
2434
+ "description": "New spend budget in USD",
2435
+ "name": "budget",
2436
+ "hasDynamicHelp": false,
2437
+ "multiple": false,
2438
+ "type": "option"
2439
+ },
2440
+ "reset-spent": {
2441
+ "description": "Reset spent amount to zero",
2442
+ "name": "reset-spent",
2443
+ "allowNo": false,
2444
+ "type": "boolean"
2449
2445
  }
2450
2446
  },
2451
2447
  "hasDynamicHelp": false,
2452
2448
  "hiddenAliases": [],
2453
- "id": "face:diff",
2449
+ "id": "keys:update",
2454
2450
  "pluginAlias": "faces-cli",
2455
2451
  "pluginName": "faces-cli",
2456
2452
  "pluginType": "core",
@@ -2460,20 +2456,14 @@
2460
2456
  "relativePath": [
2461
2457
  "dist",
2462
2458
  "commands",
2463
- "face",
2464
- "diff.js"
2459
+ "keys",
2460
+ "update.js"
2465
2461
  ]
2466
2462
  },
2467
- "face:get": {
2463
+ "face:attributes": {
2468
2464
  "aliases": [],
2469
- "args": {
2470
- "face_id": {
2471
- "description": "Face alias",
2472
- "name": "face_id",
2473
- "required": true
2474
- }
2475
- },
2476
- "description": "Get details for a face by alias",
2465
+ "args": {},
2466
+ "description": "List all supported attribute keys",
2477
2467
  "flags": {
2478
2468
  "json": {
2479
2469
  "description": "Format output as json.",
@@ -2505,18 +2495,11 @@
2505
2495
  "hasDynamicHelp": false,
2506
2496
  "multiple": false,
2507
2497
  "type": "option"
2508
- },
2509
- "include": {
2510
- "description": "Include extra fields: tags, teams (comma-separated)",
2511
- "name": "include",
2512
- "hasDynamicHelp": false,
2513
- "multiple": false,
2514
- "type": "option"
2515
2498
  }
2516
2499
  },
2517
2500
  "hasDynamicHelp": false,
2518
2501
  "hiddenAliases": [],
2519
- "id": "face:get",
2502
+ "id": "face:attributes",
2520
2503
  "pluginAlias": "faces-cli",
2521
2504
  "pluginName": "faces-cli",
2522
2505
  "pluginType": "core",
@@ -2527,13 +2510,13 @@
2527
2510
  "dist",
2528
2511
  "commands",
2529
2512
  "face",
2530
- "get.js"
2513
+ "attributes.js"
2531
2514
  ]
2532
2515
  },
2533
- "face:list": {
2516
+ "face:create": {
2534
2517
  "aliases": [],
2535
2518
  "args": {},
2536
- "description": "List all owned faces",
2519
+ "description": "Create a new face",
2537
2520
  "flags": {
2538
2521
  "json": {
2539
2522
  "description": "Format output as json.",
@@ -2566,124 +2549,68 @@
2566
2549
  "multiple": false,
2567
2550
  "type": "option"
2568
2551
  },
2569
- "tag": {
2570
- "description": "Filter by tag (repeatable, AND logic)",
2571
- "name": "tag",
2572
- "hasDynamicHelp": false,
2573
- "multiple": true,
2574
- "type": "option"
2575
- },
2576
- "team": {
2577
- "description": "Filter by team ID (repeatable, OR logic)",
2578
- "name": "team",
2552
+ "name": {
2553
+ "description": "Display name",
2554
+ "name": "name",
2555
+ "required": true,
2579
2556
  "hasDynamicHelp": false,
2580
- "multiple": true,
2557
+ "multiple": false,
2581
2558
  "type": "option"
2582
2559
  },
2583
- "include": {
2584
- "description": "Include extra fields: tags, teams (comma-separated)",
2585
- "name": "include",
2560
+ "alias": {
2561
+ "description": "Unique alias slug",
2562
+ "name": "alias",
2563
+ "required": true,
2586
2564
  "hasDynamicHelp": false,
2587
2565
  "multiple": false,
2588
2566
  "type": "option"
2589
- }
2590
- },
2591
- "hasDynamicHelp": false,
2592
- "hiddenAliases": [],
2593
- "id": "face:list",
2594
- "pluginAlias": "faces-cli",
2595
- "pluginName": "faces-cli",
2596
- "pluginType": "core",
2597
- "strict": true,
2598
- "enableJsonFlag": true,
2599
- "isESM": true,
2600
- "relativePath": [
2601
- "dist",
2602
- "commands",
2603
- "face",
2604
- "list.js"
2605
- ]
2606
- },
2607
- "face:neighbors": {
2608
- "aliases": [],
2609
- "args": {
2610
- "face_id": {
2611
- "description": "Face alias",
2612
- "name": "face_id",
2613
- "required": true
2614
- }
2615
- },
2616
- "description": "Find the most similar or dissimilar owned faces to a given face",
2617
- "flags": {
2618
- "json": {
2619
- "description": "Format output as json.",
2620
- "helpGroup": "GLOBAL",
2621
- "name": "json",
2622
- "allowNo": false,
2623
- "type": "boolean"
2624
2567
  },
2625
- "base-url": {
2626
- "description": "API base URL",
2627
- "env": "FACES_BASE_URL",
2628
- "name": "base-url",
2568
+ "description": {
2569
+ "description": "Plain-text description / bio (max 1500 chars)",
2570
+ "name": "description",
2629
2571
  "hasDynamicHelp": false,
2630
2572
  "multiple": false,
2631
2573
  "type": "option"
2632
2574
  },
2633
- "token": {
2634
- "description": "JWT bearer token",
2635
- "env": "FACES_TOKEN",
2636
- "name": "token",
2575
+ "tag": {
2576
+ "description": "Tag label (repeatable, lowercase)",
2577
+ "name": "tag",
2637
2578
  "hasDynamicHelp": false,
2638
- "multiple": false,
2579
+ "multiple": true,
2639
2580
  "type": "option"
2640
2581
  },
2641
- "api-key": {
2642
- "description": "API key",
2643
- "env": "FACES_API_KEY",
2644
- "name": "api-key",
2582
+ "default-model": {
2583
+ "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
2584
+ "name": "default-model",
2645
2585
  "hasDynamicHelp": false,
2646
2586
  "multiple": false,
2647
2587
  "type": "option"
2648
2588
  },
2649
- "k": {
2650
- "description": "Number of results (1–20)",
2651
- "name": "k",
2652
- "default": 5,
2589
+ "formula": {
2590
+ "description": "Boolean formula over owned concrete face aliases (e.g. \"a | b\", \"(a | b) - c\"). Creates a composite face.",
2591
+ "name": "formula",
2653
2592
  "hasDynamicHelp": false,
2654
2593
  "multiple": false,
2655
2594
  "type": "option"
2656
2595
  },
2657
- "component": {
2658
- "description": "Centroid component to rank on (beta, delta, epsilon are the principal components of a face; face is their composite)",
2659
- "name": "component",
2660
- "default": "face",
2596
+ "attr": {
2597
+ "description": "Attribute KEY=VALUE (repeatable)",
2598
+ "name": "attr",
2661
2599
  "hasDynamicHelp": false,
2662
- "multiple": false,
2663
- "options": [
2664
- "face",
2665
- "beta",
2666
- "delta",
2667
- "epsilon"
2668
- ],
2600
+ "multiple": true,
2669
2601
  "type": "option"
2670
2602
  },
2671
- "direction": {
2672
- "description": "nearest (most similar) or furthest (most dissimilar)",
2673
- "name": "direction",
2674
- "default": "nearest",
2603
+ "tool": {
2604
+ "description": "Tool name to enable (repeatable)",
2605
+ "name": "tool",
2675
2606
  "hasDynamicHelp": false,
2676
- "multiple": false,
2677
- "options": [
2678
- "nearest",
2679
- "furthest"
2680
- ],
2607
+ "multiple": true,
2681
2608
  "type": "option"
2682
2609
  }
2683
2610
  },
2684
2611
  "hasDynamicHelp": false,
2685
2612
  "hiddenAliases": [],
2686
- "id": "face:neighbors",
2613
+ "id": "face:create",
2687
2614
  "pluginAlias": "faces-cli",
2688
2615
  "pluginName": "faces-cli",
2689
2616
  "pluginType": "core",
@@ -2694,13 +2621,19 @@
2694
2621
  "dist",
2695
2622
  "commands",
2696
2623
  "face",
2697
- "neighbors.js"
2624
+ "create.js"
2698
2625
  ]
2699
2626
  },
2700
- "face:stats": {
2627
+ "face:delete": {
2701
2628
  "aliases": [],
2702
- "args": {},
2703
- "description": "Compile and chat stats for all owned faces",
2629
+ "args": {
2630
+ "face_id": {
2631
+ "description": "Face alias",
2632
+ "name": "face_id",
2633
+ "required": true
2634
+ }
2635
+ },
2636
+ "description": "Delete a face permanently",
2704
2637
  "flags": {
2705
2638
  "json": {
2706
2639
  "description": "Format output as json.",
@@ -2732,11 +2665,17 @@
2732
2665
  "hasDynamicHelp": false,
2733
2666
  "multiple": false,
2734
2667
  "type": "option"
2668
+ },
2669
+ "yes": {
2670
+ "description": "Skip confirmation",
2671
+ "name": "yes",
2672
+ "allowNo": false,
2673
+ "type": "boolean"
2735
2674
  }
2736
2675
  },
2737
2676
  "hasDynamicHelp": false,
2738
2677
  "hiddenAliases": [],
2739
- "id": "face:stats",
2678
+ "id": "face:delete",
2740
2679
  "pluginAlias": "faces-cli",
2741
2680
  "pluginName": "faces-cli",
2742
2681
  "pluginType": "core",
@@ -2747,19 +2686,13 @@
2747
2686
  "dist",
2748
2687
  "commands",
2749
2688
  "face",
2750
- "stats.js"
2689
+ "delete.js"
2751
2690
  ]
2752
2691
  },
2753
- "face:teams": {
2692
+ "face:diff": {
2754
2693
  "aliases": [],
2755
- "args": {
2756
- "alias": {
2757
- "description": "Face alias",
2758
- "name": "alias",
2759
- "required": true
2760
- }
2761
- },
2762
- "description": "Set a face's team memberships (replaces all)",
2694
+ "args": {},
2695
+ "description": "Compare owned faces pairwise across all centroid components",
2763
2696
  "flags": {
2764
2697
  "json": {
2765
2698
  "description": "Format output as json.",
@@ -2792,9 +2725,9 @@
2792
2725
  "multiple": false,
2793
2726
  "type": "option"
2794
2727
  },
2795
- "team": {
2796
- "description": "Team ID (repeatable, replaces all memberships)",
2797
- "name": "team",
2728
+ "face": {
2729
+ "description": "Face alias to include (repeatable, min 2)",
2730
+ "name": "face",
2798
2731
  "required": true,
2799
2732
  "hasDynamicHelp": false,
2800
2733
  "multiple": true,
@@ -2803,7 +2736,7 @@
2803
2736
  },
2804
2737
  "hasDynamicHelp": false,
2805
2738
  "hiddenAliases": [],
2806
- "id": "face:teams",
2739
+ "id": "face:diff",
2807
2740
  "pluginAlias": "faces-cli",
2808
2741
  "pluginName": "faces-cli",
2809
2742
  "pluginType": "core",
@@ -2814,10 +2747,10 @@
2814
2747
  "dist",
2815
2748
  "commands",
2816
2749
  "face",
2817
- "teams.js"
2750
+ "diff.js"
2818
2751
  ]
2819
2752
  },
2820
- "face:update": {
2753
+ "face:edit": {
2821
2754
  "aliases": [],
2822
2755
  "args": {
2823
2756
  "face_id": {
@@ -2826,7 +2759,7 @@
2826
2759
  "required": true
2827
2760
  }
2828
2761
  },
2829
- "description": "Update a face's metadata",
2762
+ "description": "Edit a face's metadata",
2830
2763
  "flags": {
2831
2764
  "json": {
2832
2765
  "description": "Format output as json.",
@@ -2911,7 +2844,7 @@
2911
2844
  },
2912
2845
  "hasDynamicHelp": false,
2913
2846
  "hiddenAliases": [],
2914
- "id": "face:update",
2847
+ "id": "face:edit",
2915
2848
  "pluginAlias": "faces-cli",
2916
2849
  "pluginName": "faces-cli",
2917
2850
  "pluginType": "core",
@@ -2922,10 +2855,10 @@
2922
2855
  "dist",
2923
2856
  "commands",
2924
2857
  "face",
2925
- "update.js"
2858
+ "edit.js"
2926
2859
  ]
2927
2860
  },
2928
- "face:upload": {
2861
+ "face:get": {
2929
2862
  "aliases": [],
2930
2863
  "args": {
2931
2864
  "face_id": {
@@ -2934,7 +2867,7 @@
2934
2867
  "required": true
2935
2868
  }
2936
2869
  },
2937
- "description": "Upload a file (text/PDF/audio/video) to a face",
2870
+ "description": "Get details for a face by alias",
2938
2871
  "flags": {
2939
2872
  "json": {
2940
2873
  "description": "Format output as json.",
@@ -2967,41 +2900,9 @@
2967
2900
  "multiple": false,
2968
2901
  "type": "option"
2969
2902
  },
2970
- "file": {
2971
- "description": "File to upload",
2972
- "name": "file",
2973
- "required": true,
2974
- "hasDynamicHelp": false,
2975
- "multiple": false,
2976
- "type": "option"
2977
- },
2978
- "kind": {
2979
- "description": "Upload kind: document or thread",
2980
- "name": "kind",
2981
- "default": "document",
2982
- "hasDynamicHelp": false,
2983
- "multiple": false,
2984
- "options": [
2985
- "document",
2986
- "thread"
2987
- ],
2988
- "type": "option"
2989
- },
2990
- "perspective": {
2991
- "description": "Perspective (document only)",
2992
- "name": "perspective",
2993
- "default": "third-person",
2994
- "hasDynamicHelp": false,
2995
- "multiple": false,
2996
- "options": [
2997
- "first-person",
2998
- "third-person"
2999
- ],
3000
- "type": "option"
3001
- },
3002
- "face-speaker": {
3003
- "description": "Speaker name to map to the face (thread only). If omitted, first speaker is used.",
3004
- "name": "face-speaker",
2903
+ "include": {
2904
+ "description": "Include extra fields: tags, teams (comma-separated)",
2905
+ "name": "include",
3005
2906
  "hasDynamicHelp": false,
3006
2907
  "multiple": false,
3007
2908
  "type": "option"
@@ -3009,7 +2910,7 @@
3009
2910
  },
3010
2911
  "hasDynamicHelp": false,
3011
2912
  "hiddenAliases": [],
3012
- "id": "face:upload",
2913
+ "id": "face:get",
3013
2914
  "pluginAlias": "faces-cli",
3014
2915
  "pluginName": "faces-cli",
3015
2916
  "pluginType": "core",
@@ -3020,13 +2921,13 @@
3020
2921
  "dist",
3021
2922
  "commands",
3022
2923
  "face",
3023
- "upload.js"
2924
+ "get.js"
3024
2925
  ]
3025
2926
  },
3026
- "keys:create": {
2927
+ "face:list": {
3027
2928
  "aliases": [],
3028
2929
  "args": {},
3029
- "description": "Create a new API key (JWT required)",
2930
+ "description": "List all owned faces",
3030
2931
  "flags": {
3031
2932
  "json": {
3032
2933
  "description": "Format output as json.",
@@ -3059,46 +2960,124 @@
3059
2960
  "multiple": false,
3060
2961
  "type": "option"
3061
2962
  },
3062
- "name": {
3063
- "description": "Key name/label",
3064
- "name": "name",
3065
- "required": true,
2963
+ "tag": {
2964
+ "description": "Filter by tag (repeatable, AND logic)",
2965
+ "name": "tag",
2966
+ "hasDynamicHelp": false,
2967
+ "multiple": true,
2968
+ "type": "option"
2969
+ },
2970
+ "team": {
2971
+ "description": "Filter by team ID (repeatable, OR logic)",
2972
+ "name": "team",
2973
+ "hasDynamicHelp": false,
2974
+ "multiple": true,
2975
+ "type": "option"
2976
+ },
2977
+ "include": {
2978
+ "description": "Include extra fields: tags, teams (comma-separated)",
2979
+ "name": "include",
3066
2980
  "hasDynamicHelp": false,
3067
2981
  "multiple": false,
3068
2982
  "type": "option"
2983
+ }
2984
+ },
2985
+ "hasDynamicHelp": false,
2986
+ "hiddenAliases": [],
2987
+ "id": "face:list",
2988
+ "pluginAlias": "faces-cli",
2989
+ "pluginName": "faces-cli",
2990
+ "pluginType": "core",
2991
+ "strict": true,
2992
+ "enableJsonFlag": true,
2993
+ "isESM": true,
2994
+ "relativePath": [
2995
+ "dist",
2996
+ "commands",
2997
+ "face",
2998
+ "list.js"
2999
+ ]
3000
+ },
3001
+ "face:neighbors": {
3002
+ "aliases": [],
3003
+ "args": {
3004
+ "face_id": {
3005
+ "description": "Face alias",
3006
+ "name": "face_id",
3007
+ "required": true
3008
+ }
3009
+ },
3010
+ "description": "Find the most similar or dissimilar owned faces to a given face",
3011
+ "flags": {
3012
+ "json": {
3013
+ "description": "Format output as json.",
3014
+ "helpGroup": "GLOBAL",
3015
+ "name": "json",
3016
+ "allowNo": false,
3017
+ "type": "boolean"
3069
3018
  },
3070
- "expires-days": {
3071
- "description": "Expiry in days (omit for no expiry)",
3072
- "name": "expires-days",
3019
+ "base-url": {
3020
+ "description": "API base URL",
3021
+ "env": "FACES_BASE_URL",
3022
+ "name": "base-url",
3023
+ "hasDynamicHelp": false,
3024
+ "multiple": false,
3025
+ "type": "option"
3026
+ },
3027
+ "token": {
3028
+ "description": "JWT bearer token",
3029
+ "env": "FACES_TOKEN",
3030
+ "name": "token",
3031
+ "hasDynamicHelp": false,
3032
+ "multiple": false,
3033
+ "type": "option"
3034
+ },
3035
+ "api-key": {
3036
+ "description": "API key",
3037
+ "env": "FACES_API_KEY",
3038
+ "name": "api-key",
3073
3039
  "hasDynamicHelp": false,
3074
3040
  "multiple": false,
3075
3041
  "type": "option"
3076
3042
  },
3077
- "budget": {
3078
- "description": "Spend budget in USD",
3079
- "name": "budget",
3043
+ "k": {
3044
+ "description": "Number of results (1–20)",
3045
+ "name": "k",
3046
+ "default": 5,
3080
3047
  "hasDynamicHelp": false,
3081
3048
  "multiple": false,
3082
3049
  "type": "option"
3083
3050
  },
3084
- "face": {
3085
- "description": "Allowed face alias (repeatable)",
3086
- "name": "face",
3051
+ "component": {
3052
+ "description": "Centroid component to rank on (beta, delta, epsilon are the principal components of a face; face is their composite)",
3053
+ "name": "component",
3054
+ "default": "face",
3087
3055
  "hasDynamicHelp": false,
3088
- "multiple": true,
3056
+ "multiple": false,
3057
+ "options": [
3058
+ "face",
3059
+ "beta",
3060
+ "delta",
3061
+ "epsilon"
3062
+ ],
3089
3063
  "type": "option"
3090
3064
  },
3091
- "model": {
3092
- "description": "Allowed model name (repeatable)",
3093
- "name": "model",
3065
+ "direction": {
3066
+ "description": "nearest (most similar) or furthest (most dissimilar)",
3067
+ "name": "direction",
3068
+ "default": "nearest",
3094
3069
  "hasDynamicHelp": false,
3095
- "multiple": true,
3070
+ "multiple": false,
3071
+ "options": [
3072
+ "nearest",
3073
+ "furthest"
3074
+ ],
3096
3075
  "type": "option"
3097
3076
  }
3098
3077
  },
3099
3078
  "hasDynamicHelp": false,
3100
3079
  "hiddenAliases": [],
3101
- "id": "keys:create",
3080
+ "id": "face:neighbors",
3102
3081
  "pluginAlias": "faces-cli",
3103
3082
  "pluginName": "faces-cli",
3104
3083
  "pluginType": "core",
@@ -3108,14 +3087,14 @@
3108
3087
  "relativePath": [
3109
3088
  "dist",
3110
3089
  "commands",
3111
- "keys",
3112
- "create.js"
3090
+ "face",
3091
+ "neighbors.js"
3113
3092
  ]
3114
3093
  },
3115
- "keys:list": {
3094
+ "face:stats": {
3116
3095
  "aliases": [],
3117
3096
  "args": {},
3118
- "description": "List all API keys (JWT required)",
3097
+ "description": "Compile and chat stats for all owned faces",
3119
3098
  "flags": {
3120
3099
  "json": {
3121
3100
  "description": "Format output as json.",
@@ -3151,7 +3130,7 @@
3151
3130
  },
3152
3131
  "hasDynamicHelp": false,
3153
3132
  "hiddenAliases": [],
3154
- "id": "keys:list",
3133
+ "id": "face:stats",
3155
3134
  "pluginAlias": "faces-cli",
3156
3135
  "pluginName": "faces-cli",
3157
3136
  "pluginType": "core",
@@ -3161,20 +3140,20 @@
3161
3140
  "relativePath": [
3162
3141
  "dist",
3163
3142
  "commands",
3164
- "keys",
3165
- "list.js"
3143
+ "face",
3144
+ "stats.js"
3166
3145
  ]
3167
3146
  },
3168
- "keys:revoke": {
3147
+ "face:teams": {
3169
3148
  "aliases": [],
3170
3149
  "args": {
3171
- "key_id": {
3172
- "description": "Key ID",
3173
- "name": "key_id",
3150
+ "alias": {
3151
+ "description": "Face alias",
3152
+ "name": "alias",
3174
3153
  "required": true
3175
3154
  }
3176
3155
  },
3177
- "description": "Revoke an API key (JWT required)",
3156
+ "description": "Set a face's team memberships (replaces all)",
3178
3157
  "flags": {
3179
3158
  "json": {
3180
3159
  "description": "Format output as json.",
@@ -3207,16 +3186,18 @@
3207
3186
  "multiple": false,
3208
3187
  "type": "option"
3209
3188
  },
3210
- "yes": {
3211
- "description": "Skip confirmation",
3212
- "name": "yes",
3213
- "allowNo": false,
3214
- "type": "boolean"
3189
+ "team": {
3190
+ "description": "Team ID (repeatable, replaces all memberships)",
3191
+ "name": "team",
3192
+ "required": true,
3193
+ "hasDynamicHelp": false,
3194
+ "multiple": true,
3195
+ "type": "option"
3215
3196
  }
3216
3197
  },
3217
3198
  "hasDynamicHelp": false,
3218
3199
  "hiddenAliases": [],
3219
- "id": "keys:revoke",
3200
+ "id": "face:teams",
3220
3201
  "pluginAlias": "faces-cli",
3221
3202
  "pluginName": "faces-cli",
3222
3203
  "pluginType": "core",
@@ -3226,20 +3207,20 @@
3226
3207
  "relativePath": [
3227
3208
  "dist",
3228
3209
  "commands",
3229
- "keys",
3230
- "revoke.js"
3210
+ "face",
3211
+ "teams.js"
3231
3212
  ]
3232
3213
  },
3233
- "keys:update": {
3214
+ "face:upload": {
3234
3215
  "aliases": [],
3235
3216
  "args": {
3236
- "key_id": {
3237
- "description": "Key ID",
3238
- "name": "key_id",
3217
+ "face_id": {
3218
+ "description": "Face alias",
3219
+ "name": "face_id",
3239
3220
  "required": true
3240
3221
  }
3241
3222
  },
3242
- "description": "Update API key metadata (JWT required)",
3223
+ "description": "Upload a file (text/PDF/audio/video) to a face",
3243
3224
  "flags": {
3244
3225
  "json": {
3245
3226
  "description": "Format output as json.",
@@ -3272,30 +3253,49 @@
3272
3253
  "multiple": false,
3273
3254
  "type": "option"
3274
3255
  },
3275
- "name": {
3276
- "description": "New key name",
3277
- "name": "name",
3256
+ "file": {
3257
+ "description": "File to upload",
3258
+ "name": "file",
3259
+ "required": true,
3278
3260
  "hasDynamicHelp": false,
3279
3261
  "multiple": false,
3280
3262
  "type": "option"
3281
3263
  },
3282
- "budget": {
3283
- "description": "New spend budget in USD",
3284
- "name": "budget",
3264
+ "kind": {
3265
+ "description": "Upload kind: document or thread",
3266
+ "name": "kind",
3267
+ "default": "document",
3285
3268
  "hasDynamicHelp": false,
3286
3269
  "multiple": false,
3270
+ "options": [
3271
+ "document",
3272
+ "thread"
3273
+ ],
3287
3274
  "type": "option"
3288
3275
  },
3289
- "reset-spent": {
3290
- "description": "Reset spent amount to zero",
3291
- "name": "reset-spent",
3292
- "allowNo": false,
3293
- "type": "boolean"
3276
+ "perspective": {
3277
+ "description": "Perspective (document only)",
3278
+ "name": "perspective",
3279
+ "default": "third-person",
3280
+ "hasDynamicHelp": false,
3281
+ "multiple": false,
3282
+ "options": [
3283
+ "first-person",
3284
+ "third-person"
3285
+ ],
3286
+ "type": "option"
3287
+ },
3288
+ "face-speaker": {
3289
+ "description": "Speaker name to map to the face (thread only). If omitted, first speaker is used.",
3290
+ "name": "face-speaker",
3291
+ "hasDynamicHelp": false,
3292
+ "multiple": false,
3293
+ "type": "option"
3294
3294
  }
3295
3295
  },
3296
3296
  "hasDynamicHelp": false,
3297
3297
  "hiddenAliases": [],
3298
- "id": "keys:update",
3298
+ "id": "face:upload",
3299
3299
  "pluginAlias": "faces-cli",
3300
3300
  "pluginName": "faces-cli",
3301
3301
  "pluginType": "core",
@@ -3305,8 +3305,8 @@
3305
3305
  "relativePath": [
3306
3306
  "dist",
3307
3307
  "commands",
3308
- "keys",
3309
- "update.js"
3308
+ "face",
3309
+ "upload.js"
3310
3310
  ]
3311
3311
  },
3312
3312
  "team:add": {
@@ -3530,7 +3530,7 @@
3530
3530
  "delete.js"
3531
3531
  ]
3532
3532
  },
3533
- "team:get": {
3533
+ "team:edit": {
3534
3534
  "aliases": [],
3535
3535
  "args": {
3536
3536
  "team_id": {
@@ -3539,7 +3539,7 @@
3539
3539
  "required": true
3540
3540
  }
3541
3541
  },
3542
- "description": "Get a team by ID",
3542
+ "description": "Edit a team",
3543
3543
  "flags": {
3544
3544
  "json": {
3545
3545
  "description": "Format output as json.",
@@ -3571,11 +3571,39 @@
3571
3571
  "hasDynamicHelp": false,
3572
3572
  "multiple": false,
3573
3573
  "type": "option"
3574
+ },
3575
+ "name": {
3576
+ "description": "New team name",
3577
+ "name": "name",
3578
+ "hasDynamicHelp": false,
3579
+ "multiple": false,
3580
+ "type": "option"
3581
+ },
3582
+ "description": {
3583
+ "description": "New description (max 1500 chars)",
3584
+ "name": "description",
3585
+ "hasDynamicHelp": false,
3586
+ "multiple": false,
3587
+ "type": "option"
3588
+ },
3589
+ "protocol": {
3590
+ "description": "New protocol content",
3591
+ "name": "protocol",
3592
+ "hasDynamicHelp": false,
3593
+ "multiple": false,
3594
+ "type": "option"
3595
+ },
3596
+ "protocol-file": {
3597
+ "description": "Read protocol from file",
3598
+ "name": "protocol-file",
3599
+ "hasDynamicHelp": false,
3600
+ "multiple": false,
3601
+ "type": "option"
3574
3602
  }
3575
3603
  },
3576
3604
  "hasDynamicHelp": false,
3577
3605
  "hiddenAliases": [],
3578
- "id": "team:get",
3606
+ "id": "team:edit",
3579
3607
  "pluginAlias": "faces-cli",
3580
3608
  "pluginName": "faces-cli",
3581
3609
  "pluginType": "core",
@@ -3586,13 +3614,19 @@
3586
3614
  "dist",
3587
3615
  "commands",
3588
3616
  "team",
3589
- "get.js"
3617
+ "edit.js"
3590
3618
  ]
3591
3619
  },
3592
- "team:list": {
3620
+ "team:get": {
3593
3621
  "aliases": [],
3594
- "args": {},
3595
- "description": "List your teams",
3622
+ "args": {
3623
+ "team_id": {
3624
+ "description": "Team ID",
3625
+ "name": "team_id",
3626
+ "required": true
3627
+ }
3628
+ },
3629
+ "description": "Get a team by ID",
3596
3630
  "flags": {
3597
3631
  "json": {
3598
3632
  "description": "Format output as json.",
@@ -3628,7 +3662,7 @@
3628
3662
  },
3629
3663
  "hasDynamicHelp": false,
3630
3664
  "hiddenAliases": [],
3631
- "id": "team:list",
3665
+ "id": "team:get",
3632
3666
  "pluginAlias": "faces-cli",
3633
3667
  "pluginName": "faces-cli",
3634
3668
  "pluginType": "core",
@@ -3639,19 +3673,13 @@
3639
3673
  "dist",
3640
3674
  "commands",
3641
3675
  "team",
3642
- "list.js"
3676
+ "get.js"
3643
3677
  ]
3644
3678
  },
3645
- "team:members": {
3679
+ "team:list": {
3646
3680
  "aliases": [],
3647
- "args": {
3648
- "team_id": {
3649
- "description": "Team ID",
3650
- "name": "team_id",
3651
- "required": true
3652
- }
3653
- },
3654
- "description": "List members of a team",
3681
+ "args": {},
3682
+ "description": "List your teams",
3655
3683
  "flags": {
3656
3684
  "json": {
3657
3685
  "description": "Format output as json.",
@@ -3687,7 +3715,7 @@
3687
3715
  },
3688
3716
  "hasDynamicHelp": false,
3689
3717
  "hiddenAliases": [],
3690
- "id": "team:members",
3718
+ "id": "team:list",
3691
3719
  "pluginAlias": "faces-cli",
3692
3720
  "pluginName": "faces-cli",
3693
3721
  "pluginType": "core",
@@ -3698,24 +3726,19 @@
3698
3726
  "dist",
3699
3727
  "commands",
3700
3728
  "team",
3701
- "members.js"
3729
+ "list.js"
3702
3730
  ]
3703
3731
  },
3704
- "team:remove": {
3732
+ "team:members": {
3705
3733
  "aliases": [],
3706
3734
  "args": {
3707
3735
  "team_id": {
3708
3736
  "description": "Team ID",
3709
3737
  "name": "team_id",
3710
3738
  "required": true
3711
- },
3712
- "alias": {
3713
- "description": "Face alias to remove",
3714
- "name": "alias",
3715
- "required": true
3716
3739
  }
3717
3740
  },
3718
- "description": "Remove a face from a team",
3741
+ "description": "List members of a team",
3719
3742
  "flags": {
3720
3743
  "json": {
3721
3744
  "description": "Format output as json.",
@@ -3751,7 +3774,7 @@
3751
3774
  },
3752
3775
  "hasDynamicHelp": false,
3753
3776
  "hiddenAliases": [],
3754
- "id": "team:remove",
3777
+ "id": "team:members",
3755
3778
  "pluginAlias": "faces-cli",
3756
3779
  "pluginName": "faces-cli",
3757
3780
  "pluginType": "core",
@@ -3762,19 +3785,24 @@
3762
3785
  "dist",
3763
3786
  "commands",
3764
3787
  "team",
3765
- "remove.js"
3788
+ "members.js"
3766
3789
  ]
3767
3790
  },
3768
- "team:update": {
3791
+ "team:remove": {
3769
3792
  "aliases": [],
3770
3793
  "args": {
3771
3794
  "team_id": {
3772
3795
  "description": "Team ID",
3773
3796
  "name": "team_id",
3774
3797
  "required": true
3798
+ },
3799
+ "alias": {
3800
+ "description": "Face alias to remove",
3801
+ "name": "alias",
3802
+ "required": true
3775
3803
  }
3776
3804
  },
3777
- "description": "Update a team",
3805
+ "description": "Remove a face from a team",
3778
3806
  "flags": {
3779
3807
  "json": {
3780
3808
  "description": "Format output as json.",
@@ -3806,39 +3834,11 @@
3806
3834
  "hasDynamicHelp": false,
3807
3835
  "multiple": false,
3808
3836
  "type": "option"
3809
- },
3810
- "name": {
3811
- "description": "New team name",
3812
- "name": "name",
3813
- "hasDynamicHelp": false,
3814
- "multiple": false,
3815
- "type": "option"
3816
- },
3817
- "description": {
3818
- "description": "New description (max 1500 chars)",
3819
- "name": "description",
3820
- "hasDynamicHelp": false,
3821
- "multiple": false,
3822
- "type": "option"
3823
- },
3824
- "protocol": {
3825
- "description": "New protocol content",
3826
- "name": "protocol",
3827
- "hasDynamicHelp": false,
3828
- "multiple": false,
3829
- "type": "option"
3830
- },
3831
- "protocol-file": {
3832
- "description": "Read protocol from file",
3833
- "name": "protocol-file",
3834
- "hasDynamicHelp": false,
3835
- "multiple": false,
3836
- "type": "option"
3837
3837
  }
3838
3838
  },
3839
3839
  "hasDynamicHelp": false,
3840
3840
  "hiddenAliases": [],
3841
- "id": "team:update",
3841
+ "id": "team:remove",
3842
3842
  "pluginAlias": "faces-cli",
3843
3843
  "pluginName": "faces-cli",
3844
3844
  "pluginType": "core",
@@ -3849,7 +3849,7 @@
3849
3849
  "dist",
3850
3850
  "commands",
3851
3851
  "team",
3852
- "update.js"
3852
+ "remove.js"
3853
3853
  ]
3854
3854
  },
3855
3855
  "billing:subscription:activate": {
@@ -5894,5 +5894,5 @@
5894
5894
  ]
5895
5895
  }
5896
5896
  },
5897
- "version": "1.6.12"
5897
+ "version": "1.6.14"
5898
5898
  }