faces-cli 1.3.2 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/catalog.d.ts +36 -0
  2. package/dist/catalog.js +167 -0
  3. package/dist/client.js +2 -1
  4. package/dist/commands/auth/whoami.js +1 -1
  5. package/dist/commands/billing/checkout.js +3 -3
  6. package/dist/commands/catalog/doctor.d.ts +12 -0
  7. package/dist/commands/catalog/doctor.js +196 -0
  8. package/dist/commands/catalog/list.d.ts +10 -0
  9. package/dist/commands/catalog/list.js +35 -0
  10. package/dist/commands/chat/chat.d.ts +4 -0
  11. package/dist/commands/chat/chat.js +146 -39
  12. package/dist/commands/chat/messages.js +1 -1
  13. package/dist/commands/chat/responses.js +1 -1
  14. package/dist/commands/compile/doc/create.d.ts +1 -0
  15. package/dist/commands/compile/doc/create.js +5 -2
  16. package/dist/commands/compile/doc/edit.d.ts +17 -0
  17. package/dist/commands/compile/doc/edit.js +48 -0
  18. package/dist/commands/compile/doc/index.d.ts +18 -0
  19. package/dist/commands/compile/doc/index.js +95 -0
  20. package/dist/commands/compile/doc/list.js +1 -1
  21. package/dist/commands/compile/doc/make.d.ts +14 -0
  22. package/dist/commands/compile/doc/make.js +55 -0
  23. package/dist/commands/compile/import.js +2 -3
  24. package/dist/commands/compile/thread/create.js +2 -2
  25. package/dist/commands/compile/{doc/sync.d.ts → thread/delete.d.ts} +2 -2
  26. package/dist/commands/compile/{doc/sync.js → thread/delete.js} +7 -7
  27. package/dist/commands/compile/thread/edit.d.ts +14 -0
  28. package/dist/commands/compile/thread/edit.js +29 -0
  29. package/dist/commands/compile/{doc/prepare.d.ts → thread/get.d.ts} +2 -2
  30. package/dist/commands/compile/{doc/prepare.js → thread/get.js} +5 -5
  31. package/dist/commands/compile/thread/list.js +1 -1
  32. package/dist/commands/compile/thread/message.js +1 -1
  33. package/dist/commands/face/create.d.ts +2 -0
  34. package/dist/commands/face/create.js +17 -2
  35. package/dist/commands/face/delete.js +6 -0
  36. package/dist/commands/face/get.js +5 -3
  37. package/dist/commands/face/list.js +20 -3
  38. package/dist/commands/face/update.d.ts +2 -0
  39. package/dist/commands/face/update.js +39 -9
  40. package/dist/config.d.ts +2 -0
  41. package/dist/poll.d.ts +30 -0
  42. package/dist/poll.js +40 -0
  43. package/dist/utils.d.ts +5 -0
  44. package/dist/utils.js +16 -0
  45. package/oclif.manifest.json +1043 -551
  46. package/package.json +4 -1
@@ -53,23 +53,10 @@
53
53
  "state.js"
54
54
  ]
55
55
  },
56
- "auth:connect": {
56
+ "catalog:doctor": {
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": "Diagnose and repair the local face catalog",
73
60
  "flags": {
74
61
  "json": {
75
62
  "description": "Format output as json.",
@@ -102,16 +89,22 @@
102
89
  "multiple": false,
103
90
  "type": "option"
104
91
  },
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",
92
+ "fix": {
93
+ "description": "Rebuild missing or stale catalog entries from API",
94
+ "name": "fix",
95
+ "allowNo": false,
96
+ "type": "boolean"
97
+ },
98
+ "generate": {
99
+ "description": "Fix + generate missing descriptions via LLM",
100
+ "name": "generate",
108
101
  "allowNo": false,
109
102
  "type": "boolean"
110
103
  }
111
104
  },
112
105
  "hasDynamicHelp": false,
113
106
  "hiddenAliases": [],
114
- "id": "auth:connect",
107
+ "id": "catalog:doctor",
115
108
  "pluginAlias": "faces-cli",
116
109
  "pluginName": "faces-cli",
117
110
  "pluginType": "core",
@@ -121,18 +114,14 @@
121
114
  "relativePath": [
122
115
  "dist",
123
116
  "commands",
124
- "auth",
125
- "connect.js"
117
+ "catalog",
118
+ "doctor.js"
126
119
  ]
127
120
  },
128
- "auth:connections": {
121
+ "catalog:list": {
129
122
  "aliases": [],
130
123
  "args": {},
131
- "description": "List connected OAuth provider accounts",
132
- "examples": [
133
- "<%= config.bin %> auth connections",
134
- "<%= config.bin %> auth connections --json"
135
- ],
124
+ "description": "List all faces in the local catalog",
136
125
  "flags": {
137
126
  "json": {
138
127
  "description": "Format output as json.",
@@ -168,7 +157,7 @@
168
157
  },
169
158
  "hasDynamicHelp": false,
170
159
  "hiddenAliases": [],
171
- "id": "auth:connections",
160
+ "id": "catalog:list",
172
161
  "pluginAlias": "faces-cli",
173
162
  "pluginName": "faces-cli",
174
163
  "pluginType": "core",
@@ -178,26 +167,14 @@
178
167
  "relativePath": [
179
168
  "dist",
180
169
  "commands",
181
- "auth",
182
- "connections.js"
170
+ "catalog",
171
+ "list.js"
183
172
  ]
184
173
  },
185
- "auth:disconnect": {
174
+ "billing:balance": {
186
175
  "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
- ],
176
+ "args": {},
177
+ "description": "Show credit balance and payment method status",
201
178
  "flags": {
202
179
  "json": {
203
180
  "description": "Format output as json.",
@@ -233,7 +210,7 @@
233
210
  },
234
211
  "hasDynamicHelp": false,
235
212
  "hiddenAliases": [],
236
- "id": "auth:disconnect",
213
+ "id": "billing:balance",
237
214
  "pluginAlias": "faces-cli",
238
215
  "pluginName": "faces-cli",
239
216
  "pluginType": "core",
@@ -243,14 +220,14 @@
243
220
  "relativePath": [
244
221
  "dist",
245
222
  "commands",
246
- "auth",
247
- "disconnect.js"
223
+ "billing",
224
+ "balance.js"
248
225
  ]
249
226
  },
250
- "auth:login": {
227
+ "billing:card-setup": {
251
228
  "aliases": [],
252
229
  "args": {},
253
- "description": "Login and save JWT credentials",
230
+ "description": "Get a Stripe card setup URL to save a payment method",
254
231
  "flags": {
255
232
  "json": {
256
233
  "description": "Format output as json.",
@@ -282,27 +259,11 @@
282
259
  "hasDynamicHelp": false,
283
260
  "multiple": false,
284
261
  "type": "option"
285
- },
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,
298
- "hasDynamicHelp": false,
299
- "multiple": false,
300
- "type": "option"
301
262
  }
302
263
  },
303
264
  "hasDynamicHelp": false,
304
265
  "hiddenAliases": [],
305
- "id": "auth:login",
266
+ "id": "billing:card-setup",
306
267
  "pluginAlias": "faces-cli",
307
268
  "pluginName": "faces-cli",
308
269
  "pluginType": "core",
@@ -312,14 +273,14 @@
312
273
  "relativePath": [
313
274
  "dist",
314
275
  "commands",
315
- "auth",
316
- "login.js"
276
+ "billing",
277
+ "card-setup.js"
317
278
  ]
318
279
  },
319
- "auth:logout": {
280
+ "billing:checkout": {
320
281
  "aliases": [],
321
282
  "args": {},
322
- "description": "Clear saved credentials",
283
+ "description": "Get a Stripe checkout URL to upgrade your subscription plan",
323
284
  "flags": {
324
285
  "json": {
325
286
  "description": "Format output as json.",
@@ -351,11 +312,22 @@
351
312
  "hasDynamicHelp": false,
352
313
  "multiple": false,
353
314
  "type": "option"
315
+ },
316
+ "plan": {
317
+ "description": "Plan to subscribe to",
318
+ "name": "plan",
319
+ "default": "connect",
320
+ "hasDynamicHelp": false,
321
+ "multiple": false,
322
+ "options": [
323
+ "connect"
324
+ ],
325
+ "type": "option"
354
326
  }
355
327
  },
356
328
  "hasDynamicHelp": false,
357
329
  "hiddenAliases": [],
358
- "id": "auth:logout",
330
+ "id": "billing:checkout",
359
331
  "pluginAlias": "faces-cli",
360
332
  "pluginName": "faces-cli",
361
333
  "pluginType": "core",
@@ -365,14 +337,14 @@
365
337
  "relativePath": [
366
338
  "dist",
367
339
  "commands",
368
- "auth",
369
- "logout.js"
340
+ "billing",
341
+ "checkout.js"
370
342
  ]
371
343
  },
372
- "auth:refresh": {
344
+ "billing:llm-costs": {
373
345
  "aliases": [],
374
346
  "args": {},
375
- "description": "Exchange current JWT for a fresh one",
347
+ "description": "List available LLMs and their per-token costs",
376
348
  "flags": {
377
349
  "json": {
378
350
  "description": "Format output as json.",
@@ -404,11 +376,18 @@
404
376
  "hasDynamicHelp": false,
405
377
  "multiple": false,
406
378
  "type": "option"
379
+ },
380
+ "provider": {
381
+ "description": "Filter by provider (e.g. openai, anthropic)",
382
+ "name": "provider",
383
+ "hasDynamicHelp": false,
384
+ "multiple": false,
385
+ "type": "option"
407
386
  }
408
387
  },
409
388
  "hasDynamicHelp": false,
410
389
  "hiddenAliases": [],
411
- "id": "auth:refresh",
390
+ "id": "billing:llm-costs",
412
391
  "pluginAlias": "faces-cli",
413
392
  "pluginName": "faces-cli",
414
393
  "pluginType": "core",
@@ -418,14 +397,14 @@
418
397
  "relativePath": [
419
398
  "dist",
420
399
  "commands",
421
- "auth",
422
- "refresh.js"
400
+ "billing",
401
+ "llm-costs.js"
423
402
  ]
424
403
  },
425
- "auth:register": {
404
+ "billing:quota": {
426
405
  "aliases": [],
427
406
  "args": {},
428
- "description": "Create a new Faces account",
407
+ "description": "Show compile token quota and per-face stats",
429
408
  "flags": {
430
409
  "json": {
431
410
  "description": "Format output as json.",
@@ -457,49 +436,11 @@
457
436
  "hasDynamicHelp": false,
458
437
  "multiple": false,
459
438
  "type": "option"
460
- },
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",
487
- "required": true,
488
- "hasDynamicHelp": false,
489
- "multiple": false,
490
- "type": "option"
491
- },
492
- "invite-key": {
493
- "description": "Invite key (if required)",
494
- "name": "invite-key",
495
- "hasDynamicHelp": false,
496
- "multiple": false,
497
- "type": "option"
498
439
  }
499
440
  },
500
441
  "hasDynamicHelp": false,
501
442
  "hiddenAliases": [],
502
- "id": "auth:register",
443
+ "id": "billing:quota",
503
444
  "pluginAlias": "faces-cli",
504
445
  "pluginName": "faces-cli",
505
446
  "pluginType": "core",
@@ -509,14 +450,14 @@
509
450
  "relativePath": [
510
451
  "dist",
511
452
  "commands",
512
- "auth",
513
- "register.js"
453
+ "billing",
454
+ "quota.js"
514
455
  ]
515
456
  },
516
- "auth:whoami": {
457
+ "billing:subscription": {
517
458
  "aliases": [],
518
459
  "args": {},
519
- "description": "Print current user profile",
460
+ "description": "Show current plan, face count, and renewal date",
520
461
  "flags": {
521
462
  "json": {
522
463
  "description": "Format output as json.",
@@ -552,7 +493,7 @@
552
493
  },
553
494
  "hasDynamicHelp": false,
554
495
  "hiddenAliases": [],
555
- "id": "auth:whoami",
496
+ "id": "billing:subscription",
556
497
  "pluginAlias": "faces-cli",
557
498
  "pluginName": "faces-cli",
558
499
  "pluginType": "core",
@@ -562,20 +503,14 @@
562
503
  "relativePath": [
563
504
  "dist",
564
505
  "commands",
565
- "auth",
566
- "whoami.js"
506
+ "billing",
507
+ "subscription.js"
567
508
  ]
568
509
  },
569
- "chat:chat": {
510
+ "billing:topup": {
570
511
  "aliases": [],
571
- "args": {
572
- "face_username": {
573
- "description": "Face username",
574
- "name": "face_username",
575
- "required": true
576
- }
577
- },
578
- "description": "OpenAI-compatible chat completion via a face",
512
+ "args": {},
513
+ "description": "Top up credit balance using saved payment method",
579
514
  "flags": {
580
515
  "json": {
581
516
  "description": "Format output as json.",
@@ -608,52 +543,17 @@
608
543
  "multiple": false,
609
544
  "type": "option"
610
545
  },
611
- "message": {
612
- "char": "m",
613
- "description": "User message (repeatable)",
614
- "name": "message",
615
- "required": false,
616
- "hasDynamicHelp": false,
617
- "multiple": true,
618
- "type": "option"
619
- },
620
- "llm": {
621
- "description": "LLM override (e.g. claude-sonnet-4-6)",
622
- "name": "llm",
623
- "hasDynamicHelp": false,
624
- "multiple": false,
625
- "type": "option"
626
- },
627
- "system": {
628
- "description": "System prompt override",
629
- "name": "system",
630
- "hasDynamicHelp": false,
631
- "multiple": false,
632
- "type": "option"
633
- },
634
- "stream": {
635
- "description": "Stream the response",
636
- "name": "stream",
637
- "allowNo": false,
638
- "type": "boolean"
639
- },
640
- "max-tokens": {
641
- "description": "Max tokens",
642
- "name": "max-tokens",
643
- "hasDynamicHelp": false,
644
- "multiple": false,
645
- "type": "option"
646
- },
647
- "temperature": {
648
- "description": "Temperature (0.0-2.0)",
649
- "name": "temperature",
546
+ "amount": {
547
+ "description": "Top-up amount in USD (min $1)",
548
+ "name": "amount",
549
+ "required": true,
650
550
  "hasDynamicHelp": false,
651
551
  "multiple": false,
652
552
  "type": "option"
653
553
  },
654
- "file": {
655
- "description": "Read message from file",
656
- "name": "file",
554
+ "payment-ref": {
555
+ "description": "Payment reference (admin/test path)",
556
+ "name": "payment-ref",
657
557
  "hasDynamicHelp": false,
658
558
  "multiple": false,
659
559
  "type": "option"
@@ -661,7 +561,7 @@
661
561
  },
662
562
  "hasDynamicHelp": false,
663
563
  "hiddenAliases": [],
664
- "id": "chat:chat",
564
+ "id": "billing:topup",
665
565
  "pluginAlias": "faces-cli",
666
566
  "pluginName": "faces-cli",
667
567
  "pluginType": "core",
@@ -671,20 +571,14 @@
671
571
  "relativePath": [
672
572
  "dist",
673
573
  "commands",
674
- "chat",
675
- "chat.js"
574
+ "billing",
575
+ "topup.js"
676
576
  ]
677
577
  },
678
- "chat:messages": {
578
+ "billing:usage": {
679
579
  "aliases": [],
680
- "args": {
681
- "face_model": {
682
- "description": "Face model (e.g. myface or myface@claude-sonnet-4-6)",
683
- "name": "face_model",
684
- "required": true
685
- }
686
- },
687
- "description": "Anthropic Messages API proxy via a face (e.g. face@claude-sonnet-4-6)",
580
+ "args": {},
581
+ "description": "Aggregated usage analytics",
688
582
  "flags": {
689
583
  "json": {
690
584
  "description": "Format output as json.",
@@ -717,8 +611,209 @@
717
611
  "multiple": false,
718
612
  "type": "option"
719
613
  },
720
- "message": {
721
- "char": "m",
614
+ "group-by": {
615
+ "description": "Group results",
616
+ "name": "group-by",
617
+ "hasDynamicHelp": false,
618
+ "multiple": false,
619
+ "options": [
620
+ "api_key",
621
+ "model",
622
+ "llm",
623
+ "date"
624
+ ],
625
+ "type": "option"
626
+ },
627
+ "from": {
628
+ "description": "Start date (YYYY-MM-DD)",
629
+ "name": "from",
630
+ "hasDynamicHelp": false,
631
+ "multiple": false,
632
+ "type": "option"
633
+ },
634
+ "to": {
635
+ "description": "End date (YYYY-MM-DD)",
636
+ "name": "to",
637
+ "hasDynamicHelp": false,
638
+ "multiple": false,
639
+ "type": "option"
640
+ }
641
+ },
642
+ "hasDynamicHelp": false,
643
+ "hiddenAliases": [],
644
+ "id": "billing:usage",
645
+ "pluginAlias": "faces-cli",
646
+ "pluginName": "faces-cli",
647
+ "pluginType": "core",
648
+ "strict": true,
649
+ "enableJsonFlag": true,
650
+ "isESM": true,
651
+ "relativePath": [
652
+ "dist",
653
+ "commands",
654
+ "billing",
655
+ "usage.js"
656
+ ]
657
+ },
658
+ "chat:chat": {
659
+ "aliases": [],
660
+ "args": {
661
+ "face_username": {
662
+ "description": "Face username (or face@model)",
663
+ "name": "face_username",
664
+ "required": true
665
+ }
666
+ },
667
+ "description": "Chat via a face. Auto-routes to the correct API endpoint based on model provider.",
668
+ "flags": {
669
+ "json": {
670
+ "description": "Format output as json.",
671
+ "helpGroup": "GLOBAL",
672
+ "name": "json",
673
+ "allowNo": false,
674
+ "type": "boolean"
675
+ },
676
+ "base-url": {
677
+ "description": "API base URL",
678
+ "env": "FACES_BASE_URL",
679
+ "name": "base-url",
680
+ "hasDynamicHelp": false,
681
+ "multiple": false,
682
+ "type": "option"
683
+ },
684
+ "token": {
685
+ "description": "JWT bearer token",
686
+ "env": "FACES_TOKEN",
687
+ "name": "token",
688
+ "hasDynamicHelp": false,
689
+ "multiple": false,
690
+ "type": "option"
691
+ },
692
+ "api-key": {
693
+ "description": "API key",
694
+ "env": "FACES_API_KEY",
695
+ "name": "api-key",
696
+ "hasDynamicHelp": false,
697
+ "multiple": false,
698
+ "type": "option"
699
+ },
700
+ "message": {
701
+ "char": "m",
702
+ "description": "User message (repeatable)",
703
+ "name": "message",
704
+ "required": false,
705
+ "hasDynamicHelp": false,
706
+ "multiple": true,
707
+ "type": "option"
708
+ },
709
+ "llm": {
710
+ "description": "LLM override (e.g. gpt-4o-mini, claude-sonnet-4-6)",
711
+ "name": "llm",
712
+ "hasDynamicHelp": false,
713
+ "multiple": false,
714
+ "type": "option"
715
+ },
716
+ "system": {
717
+ "description": "System prompt / instructions",
718
+ "name": "system",
719
+ "hasDynamicHelp": false,
720
+ "multiple": false,
721
+ "type": "option"
722
+ },
723
+ "stream": {
724
+ "description": "Stream the response",
725
+ "name": "stream",
726
+ "allowNo": false,
727
+ "type": "boolean"
728
+ },
729
+ "max-tokens": {
730
+ "description": "Max tokens",
731
+ "name": "max-tokens",
732
+ "hasDynamicHelp": false,
733
+ "multiple": false,
734
+ "type": "option"
735
+ },
736
+ "temperature": {
737
+ "description": "Temperature (0.0-2.0)",
738
+ "name": "temperature",
739
+ "hasDynamicHelp": false,
740
+ "multiple": false,
741
+ "type": "option"
742
+ },
743
+ "file": {
744
+ "description": "Read message from file",
745
+ "name": "file",
746
+ "hasDynamicHelp": false,
747
+ "multiple": false,
748
+ "type": "option"
749
+ },
750
+ "responses": {
751
+ "description": "Use OpenAI Responses API instead of Chat Completions",
752
+ "name": "responses",
753
+ "allowNo": false,
754
+ "type": "boolean"
755
+ }
756
+ },
757
+ "hasDynamicHelp": false,
758
+ "hiddenAliases": [],
759
+ "id": "chat:chat",
760
+ "pluginAlias": "faces-cli",
761
+ "pluginName": "faces-cli",
762
+ "pluginType": "core",
763
+ "strict": true,
764
+ "enableJsonFlag": true,
765
+ "isESM": true,
766
+ "relativePath": [
767
+ "dist",
768
+ "commands",
769
+ "chat",
770
+ "chat.js"
771
+ ]
772
+ },
773
+ "chat:messages": {
774
+ "aliases": [],
775
+ "args": {
776
+ "face_model": {
777
+ "description": "Face model (e.g. myface or myface@claude-sonnet-4-6)",
778
+ "name": "face_model",
779
+ "required": true
780
+ }
781
+ },
782
+ "description": "Anthropic Messages API proxy via a face (alias: chat:chat auto-routes Anthropic models here)",
783
+ "flags": {
784
+ "json": {
785
+ "description": "Format output as json.",
786
+ "helpGroup": "GLOBAL",
787
+ "name": "json",
788
+ "allowNo": false,
789
+ "type": "boolean"
790
+ },
791
+ "base-url": {
792
+ "description": "API base URL",
793
+ "env": "FACES_BASE_URL",
794
+ "name": "base-url",
795
+ "hasDynamicHelp": false,
796
+ "multiple": false,
797
+ "type": "option"
798
+ },
799
+ "token": {
800
+ "description": "JWT bearer token",
801
+ "env": "FACES_TOKEN",
802
+ "name": "token",
803
+ "hasDynamicHelp": false,
804
+ "multiple": false,
805
+ "type": "option"
806
+ },
807
+ "api-key": {
808
+ "description": "API key",
809
+ "env": "FACES_API_KEY",
810
+ "name": "api-key",
811
+ "hasDynamicHelp": false,
812
+ "multiple": false,
813
+ "type": "option"
814
+ },
815
+ "message": {
816
+ "char": "m",
722
817
  "description": "User message (repeatable)",
723
818
  "name": "message",
724
819
  "required": true,
@@ -773,7 +868,7 @@
773
868
  "required": true
774
869
  }
775
870
  },
776
- "description": "OpenAI Responses API proxy via a face",
871
+ "description": "OpenAI Responses API proxy via a face (alias: chat:chat --responses)",
777
872
  "flags": {
778
873
  "json": {
779
874
  "description": "Format output as json.",
@@ -1119,10 +1214,23 @@
1119
1214
  "show.js"
1120
1215
  ]
1121
1216
  },
1122
- "face:create": {
1217
+ "auth:connect": {
1123
1218
  "aliases": [],
1124
- "args": {},
1125
- "description": "Create a new face",
1219
+ "args": {
1220
+ "provider": {
1221
+ "description": "OAuth provider to connect",
1222
+ "name": "provider",
1223
+ "options": [
1224
+ "openai"
1225
+ ],
1226
+ "required": true
1227
+ }
1228
+ },
1229
+ "description": "Connect an OAuth provider account to Faces (e.g. ChatGPT Plus/Pro)",
1230
+ "examples": [
1231
+ "<%= config.bin %> auth connect openai",
1232
+ "<%= config.bin %> auth connect openai --manual"
1233
+ ],
1126
1234
  "flags": {
1127
1235
  "json": {
1128
1236
  "description": "Format output as json.",
@@ -1155,47 +1263,16 @@
1155
1263
  "multiple": false,
1156
1264
  "type": "option"
1157
1265
  },
1158
- "name": {
1159
- "description": "Display name",
1160
- "name": "name",
1161
- "required": true,
1162
- "hasDynamicHelp": false,
1163
- "multiple": false,
1164
- "type": "option"
1165
- },
1166
- "username": {
1167
- "description": "Unique username slug",
1168
- "name": "username",
1169
- "required": true,
1170
- "hasDynamicHelp": false,
1171
- "multiple": false,
1172
- "type": "option"
1173
- },
1174
- "formula": {
1175
- "description": "Boolean formula over owned concrete face usernames (e.g. \"a | b\", \"(a | b) - c\"). Creates a composite face.",
1176
- "name": "formula",
1177
- "hasDynamicHelp": false,
1178
- "multiple": false,
1179
- "type": "option"
1180
- },
1181
- "attr": {
1182
- "description": "Attribute KEY=VALUE (repeatable)",
1183
- "name": "attr",
1184
- "hasDynamicHelp": false,
1185
- "multiple": true,
1186
- "type": "option"
1187
- },
1188
- "tool": {
1189
- "description": "Tool name to enable (repeatable)",
1190
- "name": "tool",
1191
- "hasDynamicHelp": false,
1192
- "multiple": true,
1193
- "type": "option"
1266
+ "manual": {
1267
+ "description": "Manual mode for headless environments: prints the authorize URL and prompts you to paste the callback URL after approving in any browser.",
1268
+ "name": "manual",
1269
+ "allowNo": false,
1270
+ "type": "boolean"
1194
1271
  }
1195
1272
  },
1196
1273
  "hasDynamicHelp": false,
1197
1274
  "hiddenAliases": [],
1198
- "id": "face:create",
1275
+ "id": "auth:connect",
1199
1276
  "pluginAlias": "faces-cli",
1200
1277
  "pluginName": "faces-cli",
1201
1278
  "pluginType": "core",
@@ -1205,20 +1282,83 @@
1205
1282
  "relativePath": [
1206
1283
  "dist",
1207
1284
  "commands",
1208
- "face",
1209
- "create.js"
1285
+ "auth",
1286
+ "connect.js"
1210
1287
  ]
1211
1288
  },
1212
- "face:delete": {
1289
+ "auth:connections": {
1290
+ "aliases": [],
1291
+ "args": {},
1292
+ "description": "List connected OAuth provider accounts",
1293
+ "examples": [
1294
+ "<%= config.bin %> auth connections",
1295
+ "<%= config.bin %> auth connections --json"
1296
+ ],
1297
+ "flags": {
1298
+ "json": {
1299
+ "description": "Format output as json.",
1300
+ "helpGroup": "GLOBAL",
1301
+ "name": "json",
1302
+ "allowNo": false,
1303
+ "type": "boolean"
1304
+ },
1305
+ "base-url": {
1306
+ "description": "API base URL",
1307
+ "env": "FACES_BASE_URL",
1308
+ "name": "base-url",
1309
+ "hasDynamicHelp": false,
1310
+ "multiple": false,
1311
+ "type": "option"
1312
+ },
1313
+ "token": {
1314
+ "description": "JWT bearer token",
1315
+ "env": "FACES_TOKEN",
1316
+ "name": "token",
1317
+ "hasDynamicHelp": false,
1318
+ "multiple": false,
1319
+ "type": "option"
1320
+ },
1321
+ "api-key": {
1322
+ "description": "API key",
1323
+ "env": "FACES_API_KEY",
1324
+ "name": "api-key",
1325
+ "hasDynamicHelp": false,
1326
+ "multiple": false,
1327
+ "type": "option"
1328
+ }
1329
+ },
1330
+ "hasDynamicHelp": false,
1331
+ "hiddenAliases": [],
1332
+ "id": "auth:connections",
1333
+ "pluginAlias": "faces-cli",
1334
+ "pluginName": "faces-cli",
1335
+ "pluginType": "core",
1336
+ "strict": true,
1337
+ "enableJsonFlag": true,
1338
+ "isESM": true,
1339
+ "relativePath": [
1340
+ "dist",
1341
+ "commands",
1342
+ "auth",
1343
+ "connections.js"
1344
+ ]
1345
+ },
1346
+ "auth:disconnect": {
1213
1347
  "aliases": [],
1214
1348
  "args": {
1215
- "face_id": {
1216
- "description": "Face ID or username",
1217
- "name": "face_id",
1349
+ "provider": {
1350
+ "description": "OAuth provider to disconnect",
1351
+ "name": "provider",
1352
+ "options": [
1353
+ "openai"
1354
+ ],
1218
1355
  "required": true
1219
1356
  }
1220
1357
  },
1221
- "description": "Delete a face permanently",
1358
+ "description": "Disconnect a linked OAuth provider account",
1359
+ "examples": [
1360
+ "<%= config.bin %> auth disconnect openai"
1361
+ ],
1222
1362
  "flags": {
1223
1363
  "json": {
1224
1364
  "description": "Format output as json.",
@@ -1250,17 +1390,11 @@
1250
1390
  "hasDynamicHelp": false,
1251
1391
  "multiple": false,
1252
1392
  "type": "option"
1253
- },
1254
- "yes": {
1255
- "description": "Skip confirmation",
1256
- "name": "yes",
1257
- "allowNo": false,
1258
- "type": "boolean"
1259
1393
  }
1260
1394
  },
1261
1395
  "hasDynamicHelp": false,
1262
1396
  "hiddenAliases": [],
1263
- "id": "face:delete",
1397
+ "id": "auth:disconnect",
1264
1398
  "pluginAlias": "faces-cli",
1265
1399
  "pluginName": "faces-cli",
1266
1400
  "pluginType": "core",
@@ -1270,14 +1404,14 @@
1270
1404
  "relativePath": [
1271
1405
  "dist",
1272
1406
  "commands",
1273
- "face",
1274
- "delete.js"
1407
+ "auth",
1408
+ "disconnect.js"
1275
1409
  ]
1276
1410
  },
1277
- "face:diff": {
1411
+ "auth:login": {
1278
1412
  "aliases": [],
1279
1413
  "args": {},
1280
- "description": "Compare owned faces pairwise across all centroid components",
1414
+ "description": "Login and save JWT credentials",
1281
1415
  "flags": {
1282
1416
  "json": {
1283
1417
  "description": "Format output as json.",
@@ -1310,18 +1444,26 @@
1310
1444
  "multiple": false,
1311
1445
  "type": "option"
1312
1446
  },
1313
- "face": {
1314
- "description": "Face username to include (repeatable, min 2)",
1315
- "name": "face",
1447
+ "email": {
1448
+ "description": "Account email",
1449
+ "name": "email",
1316
1450
  "required": true,
1317
1451
  "hasDynamicHelp": false,
1318
- "multiple": true,
1452
+ "multiple": false,
1453
+ "type": "option"
1454
+ },
1455
+ "password": {
1456
+ "description": "Account password",
1457
+ "name": "password",
1458
+ "required": true,
1459
+ "hasDynamicHelp": false,
1460
+ "multiple": false,
1319
1461
  "type": "option"
1320
1462
  }
1321
1463
  },
1322
1464
  "hasDynamicHelp": false,
1323
1465
  "hiddenAliases": [],
1324
- "id": "face:diff",
1466
+ "id": "auth:login",
1325
1467
  "pluginAlias": "faces-cli",
1326
1468
  "pluginName": "faces-cli",
1327
1469
  "pluginType": "core",
@@ -1331,20 +1473,14 @@
1331
1473
  "relativePath": [
1332
1474
  "dist",
1333
1475
  "commands",
1334
- "face",
1335
- "diff.js"
1476
+ "auth",
1477
+ "login.js"
1336
1478
  ]
1337
1479
  },
1338
- "face:get": {
1480
+ "auth:logout": {
1339
1481
  "aliases": [],
1340
- "args": {
1341
- "face_id": {
1342
- "description": "Face ID or username",
1343
- "name": "face_id",
1344
- "required": true
1345
- }
1346
- },
1347
- "description": "Get details for a face by ID or username",
1482
+ "args": {},
1483
+ "description": "Clear saved credentials",
1348
1484
  "flags": {
1349
1485
  "json": {
1350
1486
  "description": "Format output as json.",
@@ -1380,7 +1516,7 @@
1380
1516
  },
1381
1517
  "hasDynamicHelp": false,
1382
1518
  "hiddenAliases": [],
1383
- "id": "face:get",
1519
+ "id": "auth:logout",
1384
1520
  "pluginAlias": "faces-cli",
1385
1521
  "pluginName": "faces-cli",
1386
1522
  "pluginType": "core",
@@ -1390,14 +1526,14 @@
1390
1526
  "relativePath": [
1391
1527
  "dist",
1392
1528
  "commands",
1393
- "face",
1394
- "get.js"
1529
+ "auth",
1530
+ "logout.js"
1395
1531
  ]
1396
1532
  },
1397
- "face:list": {
1533
+ "auth:refresh": {
1398
1534
  "aliases": [],
1399
1535
  "args": {},
1400
- "description": "List all owned faces",
1536
+ "description": "Exchange current JWT for a fresh one",
1401
1537
  "flags": {
1402
1538
  "json": {
1403
1539
  "description": "Format output as json.",
@@ -1433,7 +1569,7 @@
1433
1569
  },
1434
1570
  "hasDynamicHelp": false,
1435
1571
  "hiddenAliases": [],
1436
- "id": "face:list",
1572
+ "id": "auth:refresh",
1437
1573
  "pluginAlias": "faces-cli",
1438
1574
  "pluginName": "faces-cli",
1439
1575
  "pluginType": "core",
@@ -1443,20 +1579,14 @@
1443
1579
  "relativePath": [
1444
1580
  "dist",
1445
1581
  "commands",
1446
- "face",
1447
- "list.js"
1582
+ "auth",
1583
+ "refresh.js"
1448
1584
  ]
1449
1585
  },
1450
- "face:neighbors": {
1586
+ "auth:register": {
1451
1587
  "aliases": [],
1452
- "args": {
1453
- "face_id": {
1454
- "description": "Face username",
1455
- "name": "face_id",
1456
- "required": true
1457
- }
1458
- },
1459
- "description": "Find the most similar or dissimilar owned faces to a given face",
1588
+ "args": {},
1589
+ "description": "Create a new Faces account",
1460
1590
  "flags": {
1461
1591
  "json": {
1462
1592
  "description": "Format output as json.",
@@ -1489,44 +1619,48 @@
1489
1619
  "multiple": false,
1490
1620
  "type": "option"
1491
1621
  },
1492
- "k": {
1493
- "description": "Number of results (1–20)",
1494
- "name": "k",
1495
- "default": 5,
1622
+ "email": {
1623
+ "description": "Email address",
1624
+ "name": "email",
1625
+ "required": true,
1496
1626
  "hasDynamicHelp": false,
1497
1627
  "multiple": false,
1498
1628
  "type": "option"
1499
1629
  },
1500
- "component": {
1501
- "description": "Centroid component to rank on (beta, delta, epsilon are the principal components of a face; face is their composite)",
1502
- "name": "component",
1503
- "default": "face",
1630
+ "password": {
1631
+ "description": "Password",
1632
+ "name": "password",
1633
+ "required": true,
1504
1634
  "hasDynamicHelp": false,
1505
1635
  "multiple": false,
1506
- "options": [
1507
- "face",
1508
- "beta",
1509
- "delta",
1510
- "epsilon"
1511
- ],
1512
1636
  "type": "option"
1513
1637
  },
1514
- "direction": {
1515
- "description": "nearest (most similar) or furthest (most dissimilar)",
1516
- "name": "direction",
1517
- "default": "nearest",
1638
+ "name": {
1639
+ "description": "Display name (defaults to username)",
1640
+ "name": "name",
1641
+ "hasDynamicHelp": false,
1642
+ "multiple": false,
1643
+ "type": "option"
1644
+ },
1645
+ "username": {
1646
+ "description": "Username (lowercase, dashes, numbers)",
1647
+ "name": "username",
1648
+ "required": true,
1649
+ "hasDynamicHelp": false,
1650
+ "multiple": false,
1651
+ "type": "option"
1652
+ },
1653
+ "invite-key": {
1654
+ "description": "Invite key (if required)",
1655
+ "name": "invite-key",
1518
1656
  "hasDynamicHelp": false,
1519
1657
  "multiple": false,
1520
- "options": [
1521
- "nearest",
1522
- "furthest"
1523
- ],
1524
1658
  "type": "option"
1525
1659
  }
1526
1660
  },
1527
1661
  "hasDynamicHelp": false,
1528
1662
  "hiddenAliases": [],
1529
- "id": "face:neighbors",
1663
+ "id": "auth:register",
1530
1664
  "pluginAlias": "faces-cli",
1531
1665
  "pluginName": "faces-cli",
1532
1666
  "pluginType": "core",
@@ -1536,14 +1670,14 @@
1536
1670
  "relativePath": [
1537
1671
  "dist",
1538
1672
  "commands",
1539
- "face",
1540
- "neighbors.js"
1673
+ "auth",
1674
+ "register.js"
1541
1675
  ]
1542
1676
  },
1543
- "face:stats": {
1677
+ "auth:whoami": {
1544
1678
  "aliases": [],
1545
1679
  "args": {},
1546
- "description": "Compile and chat stats for all owned faces",
1680
+ "description": "Print current user profile",
1547
1681
  "flags": {
1548
1682
  "json": {
1549
1683
  "description": "Format output as json.",
@@ -1579,7 +1713,7 @@
1579
1713
  },
1580
1714
  "hasDynamicHelp": false,
1581
1715
  "hiddenAliases": [],
1582
- "id": "face:stats",
1716
+ "id": "auth:whoami",
1583
1717
  "pluginAlias": "faces-cli",
1584
1718
  "pluginName": "faces-cli",
1585
1719
  "pluginType": "core",
@@ -1589,20 +1723,14 @@
1589
1723
  "relativePath": [
1590
1724
  "dist",
1591
1725
  "commands",
1592
- "face",
1593
- "stats.js"
1726
+ "auth",
1727
+ "whoami.js"
1594
1728
  ]
1595
1729
  },
1596
- "face:update": {
1730
+ "face:create": {
1597
1731
  "aliases": [],
1598
- "args": {
1599
- "face_id": {
1600
- "description": "Face ID or username",
1601
- "name": "face_id",
1602
- "required": true
1603
- }
1604
- },
1605
- "description": "Update a face's metadata",
1732
+ "args": {},
1733
+ "description": "Create a new face",
1606
1734
  "flags": {
1607
1735
  "json": {
1608
1736
  "description": "Format output as json.",
@@ -1636,28 +1764,51 @@
1636
1764
  "type": "option"
1637
1765
  },
1638
1766
  "name": {
1639
- "description": "New display name",
1767
+ "description": "Display name",
1640
1768
  "name": "name",
1769
+ "required": true,
1770
+ "hasDynamicHelp": false,
1771
+ "multiple": false,
1772
+ "type": "option"
1773
+ },
1774
+ "username": {
1775
+ "description": "Unique username slug",
1776
+ "name": "username",
1777
+ "required": true,
1778
+ "hasDynamicHelp": false,
1779
+ "multiple": false,
1780
+ "type": "option"
1781
+ },
1782
+ "description": {
1783
+ "description": "Description for local catalog",
1784
+ "name": "description",
1785
+ "hasDynamicHelp": false,
1786
+ "multiple": false,
1787
+ "type": "option"
1788
+ },
1789
+ "default-model": {
1790
+ "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
1791
+ "name": "default-model",
1641
1792
  "hasDynamicHelp": false,
1642
1793
  "multiple": false,
1643
1794
  "type": "option"
1644
1795
  },
1645
1796
  "formula": {
1646
- "description": "New boolean formula (synthetic faces only)",
1797
+ "description": "Boolean formula over owned concrete face usernames (e.g. \"a | b\", \"(a | b) - c\"). Creates a composite face.",
1647
1798
  "name": "formula",
1648
1799
  "hasDynamicHelp": false,
1649
1800
  "multiple": false,
1650
1801
  "type": "option"
1651
1802
  },
1652
1803
  "attr": {
1653
- "description": "Update attribute KEY=VALUE (repeatable)",
1804
+ "description": "Attribute KEY=VALUE (repeatable)",
1654
1805
  "name": "attr",
1655
1806
  "hasDynamicHelp": false,
1656
1807
  "multiple": true,
1657
1808
  "type": "option"
1658
1809
  },
1659
1810
  "tool": {
1660
- "description": "Tool names to set (replaces list, repeatable)",
1811
+ "description": "Tool name to enable (repeatable)",
1661
1812
  "name": "tool",
1662
1813
  "hasDynamicHelp": false,
1663
1814
  "multiple": true,
@@ -1666,7 +1817,7 @@
1666
1817
  },
1667
1818
  "hasDynamicHelp": false,
1668
1819
  "hiddenAliases": [],
1669
- "id": "face:update",
1820
+ "id": "face:create",
1670
1821
  "pluginAlias": "faces-cli",
1671
1822
  "pluginName": "faces-cli",
1672
1823
  "pluginType": "core",
@@ -1677,10 +1828,10 @@
1677
1828
  "dist",
1678
1829
  "commands",
1679
1830
  "face",
1680
- "update.js"
1831
+ "create.js"
1681
1832
  ]
1682
1833
  },
1683
- "face:upload": {
1834
+ "face:delete": {
1684
1835
  "aliases": [],
1685
1836
  "args": {
1686
1837
  "face_id": {
@@ -1689,7 +1840,7 @@
1689
1840
  "required": true
1690
1841
  }
1691
1842
  },
1692
- "description": "Upload a file (text/PDF/audio/video) to a face",
1843
+ "description": "Delete a face permanently",
1693
1844
  "flags": {
1694
1845
  "json": {
1695
1846
  "description": "Format output as json.",
@@ -1722,30 +1873,16 @@
1722
1873
  "multiple": false,
1723
1874
  "type": "option"
1724
1875
  },
1725
- "file": {
1726
- "description": "File to upload",
1727
- "name": "file",
1728
- "required": true,
1729
- "hasDynamicHelp": false,
1730
- "multiple": false,
1731
- "type": "option"
1732
- },
1733
- "kind": {
1734
- "description": "Upload kind: document or thread",
1735
- "name": "kind",
1736
- "default": "document",
1737
- "hasDynamicHelp": false,
1738
- "multiple": false,
1739
- "options": [
1740
- "document",
1741
- "thread"
1742
- ],
1743
- "type": "option"
1876
+ "yes": {
1877
+ "description": "Skip confirmation",
1878
+ "name": "yes",
1879
+ "allowNo": false,
1880
+ "type": "boolean"
1744
1881
  }
1745
1882
  },
1746
1883
  "hasDynamicHelp": false,
1747
1884
  "hiddenAliases": [],
1748
- "id": "face:upload",
1885
+ "id": "face:delete",
1749
1886
  "pluginAlias": "faces-cli",
1750
1887
  "pluginName": "faces-cli",
1751
1888
  "pluginType": "core",
@@ -1756,13 +1893,13 @@
1756
1893
  "dist",
1757
1894
  "commands",
1758
1895
  "face",
1759
- "upload.js"
1896
+ "delete.js"
1760
1897
  ]
1761
1898
  },
1762
- "keys:create": {
1899
+ "face:diff": {
1763
1900
  "aliases": [],
1764
1901
  "args": {},
1765
- "description": "Create a new API key (JWT required)",
1902
+ "description": "Compare owned faces pairwise across all centroid components",
1766
1903
  "flags": {
1767
1904
  "json": {
1768
1905
  "description": "Format output as json.",
@@ -1795,46 +1932,130 @@
1795
1932
  "multiple": false,
1796
1933
  "type": "option"
1797
1934
  },
1798
- "name": {
1799
- "description": "Key name/label",
1800
- "name": "name",
1935
+ "face": {
1936
+ "description": "Face username to include (repeatable, min 2)",
1937
+ "name": "face",
1801
1938
  "required": true,
1802
1939
  "hasDynamicHelp": false,
1940
+ "multiple": true,
1941
+ "type": "option"
1942
+ }
1943
+ },
1944
+ "hasDynamicHelp": false,
1945
+ "hiddenAliases": [],
1946
+ "id": "face:diff",
1947
+ "pluginAlias": "faces-cli",
1948
+ "pluginName": "faces-cli",
1949
+ "pluginType": "core",
1950
+ "strict": true,
1951
+ "enableJsonFlag": true,
1952
+ "isESM": true,
1953
+ "relativePath": [
1954
+ "dist",
1955
+ "commands",
1956
+ "face",
1957
+ "diff.js"
1958
+ ]
1959
+ },
1960
+ "face:get": {
1961
+ "aliases": [],
1962
+ "args": {
1963
+ "face_id": {
1964
+ "description": "Face ID or username",
1965
+ "name": "face_id",
1966
+ "required": true
1967
+ }
1968
+ },
1969
+ "description": "Get details for a face by ID or username",
1970
+ "flags": {
1971
+ "json": {
1972
+ "description": "Format output as json.",
1973
+ "helpGroup": "GLOBAL",
1974
+ "name": "json",
1975
+ "allowNo": false,
1976
+ "type": "boolean"
1977
+ },
1978
+ "base-url": {
1979
+ "description": "API base URL",
1980
+ "env": "FACES_BASE_URL",
1981
+ "name": "base-url",
1982
+ "hasDynamicHelp": false,
1803
1983
  "multiple": false,
1804
1984
  "type": "option"
1805
1985
  },
1806
- "expires-days": {
1807
- "description": "Expiry in days (omit for no expiry)",
1808
- "name": "expires-days",
1986
+ "token": {
1987
+ "description": "JWT bearer token",
1988
+ "env": "FACES_TOKEN",
1989
+ "name": "token",
1809
1990
  "hasDynamicHelp": false,
1810
1991
  "multiple": false,
1811
1992
  "type": "option"
1812
1993
  },
1813
- "budget": {
1814
- "description": "Spend budget in USD",
1815
- "name": "budget",
1994
+ "api-key": {
1995
+ "description": "API key",
1996
+ "env": "FACES_API_KEY",
1997
+ "name": "api-key",
1816
1998
  "hasDynamicHelp": false,
1817
1999
  "multiple": false,
1818
2000
  "type": "option"
2001
+ }
2002
+ },
2003
+ "hasDynamicHelp": false,
2004
+ "hiddenAliases": [],
2005
+ "id": "face:get",
2006
+ "pluginAlias": "faces-cli",
2007
+ "pluginName": "faces-cli",
2008
+ "pluginType": "core",
2009
+ "strict": true,
2010
+ "enableJsonFlag": true,
2011
+ "isESM": true,
2012
+ "relativePath": [
2013
+ "dist",
2014
+ "commands",
2015
+ "face",
2016
+ "get.js"
2017
+ ]
2018
+ },
2019
+ "face:list": {
2020
+ "aliases": [],
2021
+ "args": {},
2022
+ "description": "List all owned faces",
2023
+ "flags": {
2024
+ "json": {
2025
+ "description": "Format output as json.",
2026
+ "helpGroup": "GLOBAL",
2027
+ "name": "json",
2028
+ "allowNo": false,
2029
+ "type": "boolean"
1819
2030
  },
1820
- "face": {
1821
- "description": "Allowed face username (repeatable)",
1822
- "name": "face",
2031
+ "base-url": {
2032
+ "description": "API base URL",
2033
+ "env": "FACES_BASE_URL",
2034
+ "name": "base-url",
1823
2035
  "hasDynamicHelp": false,
1824
- "multiple": true,
2036
+ "multiple": false,
1825
2037
  "type": "option"
1826
2038
  },
1827
- "model": {
1828
- "description": "Allowed model name (repeatable)",
1829
- "name": "model",
2039
+ "token": {
2040
+ "description": "JWT bearer token",
2041
+ "env": "FACES_TOKEN",
2042
+ "name": "token",
1830
2043
  "hasDynamicHelp": false,
1831
- "multiple": true,
2044
+ "multiple": false,
2045
+ "type": "option"
2046
+ },
2047
+ "api-key": {
2048
+ "description": "API key",
2049
+ "env": "FACES_API_KEY",
2050
+ "name": "api-key",
2051
+ "hasDynamicHelp": false,
2052
+ "multiple": false,
1832
2053
  "type": "option"
1833
2054
  }
1834
2055
  },
1835
2056
  "hasDynamicHelp": false,
1836
2057
  "hiddenAliases": [],
1837
- "id": "keys:create",
2058
+ "id": "face:list",
1838
2059
  "pluginAlias": "faces-cli",
1839
2060
  "pluginName": "faces-cli",
1840
2061
  "pluginType": "core",
@@ -1844,14 +2065,20 @@
1844
2065
  "relativePath": [
1845
2066
  "dist",
1846
2067
  "commands",
1847
- "keys",
1848
- "create.js"
2068
+ "face",
2069
+ "list.js"
1849
2070
  ]
1850
2071
  },
1851
- "keys:list": {
2072
+ "face:neighbors": {
1852
2073
  "aliases": [],
1853
- "args": {},
1854
- "description": "List all API keys (JWT required)",
2074
+ "args": {
2075
+ "face_id": {
2076
+ "description": "Face username",
2077
+ "name": "face_id",
2078
+ "required": true
2079
+ }
2080
+ },
2081
+ "description": "Find the most similar or dissimilar owned faces to a given face",
1855
2082
  "flags": {
1856
2083
  "json": {
1857
2084
  "description": "Format output as json.",
@@ -1883,11 +2110,45 @@
1883
2110
  "hasDynamicHelp": false,
1884
2111
  "multiple": false,
1885
2112
  "type": "option"
2113
+ },
2114
+ "k": {
2115
+ "description": "Number of results (1–20)",
2116
+ "name": "k",
2117
+ "default": 5,
2118
+ "hasDynamicHelp": false,
2119
+ "multiple": false,
2120
+ "type": "option"
2121
+ },
2122
+ "component": {
2123
+ "description": "Centroid component to rank on (beta, delta, epsilon are the principal components of a face; face is their composite)",
2124
+ "name": "component",
2125
+ "default": "face",
2126
+ "hasDynamicHelp": false,
2127
+ "multiple": false,
2128
+ "options": [
2129
+ "face",
2130
+ "beta",
2131
+ "delta",
2132
+ "epsilon"
2133
+ ],
2134
+ "type": "option"
2135
+ },
2136
+ "direction": {
2137
+ "description": "nearest (most similar) or furthest (most dissimilar)",
2138
+ "name": "direction",
2139
+ "default": "nearest",
2140
+ "hasDynamicHelp": false,
2141
+ "multiple": false,
2142
+ "options": [
2143
+ "nearest",
2144
+ "furthest"
2145
+ ],
2146
+ "type": "option"
1886
2147
  }
1887
2148
  },
1888
2149
  "hasDynamicHelp": false,
1889
2150
  "hiddenAliases": [],
1890
- "id": "keys:list",
2151
+ "id": "face:neighbors",
1891
2152
  "pluginAlias": "faces-cli",
1892
2153
  "pluginName": "faces-cli",
1893
2154
  "pluginType": "core",
@@ -1897,20 +2158,14 @@
1897
2158
  "relativePath": [
1898
2159
  "dist",
1899
2160
  "commands",
1900
- "keys",
1901
- "list.js"
2161
+ "face",
2162
+ "neighbors.js"
1902
2163
  ]
1903
2164
  },
1904
- "keys:revoke": {
2165
+ "face:stats": {
1905
2166
  "aliases": [],
1906
- "args": {
1907
- "key_id": {
1908
- "description": "Key ID",
1909
- "name": "key_id",
1910
- "required": true
1911
- }
1912
- },
1913
- "description": "Revoke an API key (JWT required)",
2167
+ "args": {},
2168
+ "description": "Compile and chat stats for all owned faces",
1914
2169
  "flags": {
1915
2170
  "json": {
1916
2171
  "description": "Format output as json.",
@@ -1942,17 +2197,11 @@
1942
2197
  "hasDynamicHelp": false,
1943
2198
  "multiple": false,
1944
2199
  "type": "option"
1945
- },
1946
- "yes": {
1947
- "description": "Skip confirmation",
1948
- "name": "yes",
1949
- "allowNo": false,
1950
- "type": "boolean"
1951
2200
  }
1952
2201
  },
1953
2202
  "hasDynamicHelp": false,
1954
2203
  "hiddenAliases": [],
1955
- "id": "keys:revoke",
2204
+ "id": "face:stats",
1956
2205
  "pluginAlias": "faces-cli",
1957
2206
  "pluginName": "faces-cli",
1958
2207
  "pluginType": "core",
@@ -1962,20 +2211,20 @@
1962
2211
  "relativePath": [
1963
2212
  "dist",
1964
2213
  "commands",
1965
- "keys",
1966
- "revoke.js"
2214
+ "face",
2215
+ "stats.js"
1967
2216
  ]
1968
2217
  },
1969
- "keys:update": {
2218
+ "face:update": {
1970
2219
  "aliases": [],
1971
2220
  "args": {
1972
- "key_id": {
1973
- "description": "Key ID",
1974
- "name": "key_id",
2221
+ "face_id": {
2222
+ "description": "Face ID or username",
2223
+ "name": "face_id",
1975
2224
  "required": true
1976
2225
  }
1977
2226
  },
1978
- "description": "Update API key metadata (JWT required)",
2227
+ "description": "Update a face's metadata",
1979
2228
  "flags": {
1980
2229
  "json": {
1981
2230
  "description": "Format output as json.",
@@ -2009,29 +2258,51 @@
2009
2258
  "type": "option"
2010
2259
  },
2011
2260
  "name": {
2012
- "description": "New key name",
2261
+ "description": "New display name",
2013
2262
  "name": "name",
2014
2263
  "hasDynamicHelp": false,
2015
2264
  "multiple": false,
2016
2265
  "type": "option"
2017
2266
  },
2018
- "budget": {
2019
- "description": "New spend budget in USD",
2020
- "name": "budget",
2267
+ "description": {
2268
+ "description": "Description for local catalog",
2269
+ "name": "description",
2021
2270
  "hasDynamicHelp": false,
2022
2271
  "multiple": false,
2023
2272
  "type": "option"
2024
2273
  },
2025
- "reset-spent": {
2026
- "description": "Reset spent amount to zero",
2027
- "name": "reset-spent",
2028
- "allowNo": false,
2029
- "type": "boolean"
2274
+ "default-model": {
2275
+ "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
2276
+ "name": "default-model",
2277
+ "hasDynamicHelp": false,
2278
+ "multiple": false,
2279
+ "type": "option"
2280
+ },
2281
+ "formula": {
2282
+ "description": "New boolean formula (synthetic faces only)",
2283
+ "name": "formula",
2284
+ "hasDynamicHelp": false,
2285
+ "multiple": false,
2286
+ "type": "option"
2287
+ },
2288
+ "attr": {
2289
+ "description": "Update attribute KEY=VALUE (repeatable)",
2290
+ "name": "attr",
2291
+ "hasDynamicHelp": false,
2292
+ "multiple": true,
2293
+ "type": "option"
2294
+ },
2295
+ "tool": {
2296
+ "description": "Tool names to set (replaces list, repeatable)",
2297
+ "name": "tool",
2298
+ "hasDynamicHelp": false,
2299
+ "multiple": true,
2300
+ "type": "option"
2030
2301
  }
2031
2302
  },
2032
2303
  "hasDynamicHelp": false,
2033
2304
  "hiddenAliases": [],
2034
- "id": "keys:update",
2305
+ "id": "face:update",
2035
2306
  "pluginAlias": "faces-cli",
2036
2307
  "pluginName": "faces-cli",
2037
2308
  "pluginType": "core",
@@ -2041,14 +2312,20 @@
2041
2312
  "relativePath": [
2042
2313
  "dist",
2043
2314
  "commands",
2044
- "keys",
2315
+ "face",
2045
2316
  "update.js"
2046
2317
  ]
2047
2318
  },
2048
- "billing:balance": {
2319
+ "face:upload": {
2049
2320
  "aliases": [],
2050
- "args": {},
2051
- "description": "Show credit balance and payment method status",
2321
+ "args": {
2322
+ "face_id": {
2323
+ "description": "Face ID or username",
2324
+ "name": "face_id",
2325
+ "required": true
2326
+ }
2327
+ },
2328
+ "description": "Upload a file (text/PDF/audio/video) to a face",
2052
2329
  "flags": {
2053
2330
  "json": {
2054
2331
  "description": "Format output as json.",
@@ -2080,11 +2357,31 @@
2080
2357
  "hasDynamicHelp": false,
2081
2358
  "multiple": false,
2082
2359
  "type": "option"
2360
+ },
2361
+ "file": {
2362
+ "description": "File to upload",
2363
+ "name": "file",
2364
+ "required": true,
2365
+ "hasDynamicHelp": false,
2366
+ "multiple": false,
2367
+ "type": "option"
2368
+ },
2369
+ "kind": {
2370
+ "description": "Upload kind: document or thread",
2371
+ "name": "kind",
2372
+ "default": "document",
2373
+ "hasDynamicHelp": false,
2374
+ "multiple": false,
2375
+ "options": [
2376
+ "document",
2377
+ "thread"
2378
+ ],
2379
+ "type": "option"
2083
2380
  }
2084
2381
  },
2085
2382
  "hasDynamicHelp": false,
2086
2383
  "hiddenAliases": [],
2087
- "id": "billing:balance",
2384
+ "id": "face:upload",
2088
2385
  "pluginAlias": "faces-cli",
2089
2386
  "pluginName": "faces-cli",
2090
2387
  "pluginType": "core",
@@ -2094,14 +2391,14 @@
2094
2391
  "relativePath": [
2095
2392
  "dist",
2096
2393
  "commands",
2097
- "billing",
2098
- "balance.js"
2394
+ "face",
2395
+ "upload.js"
2099
2396
  ]
2100
2397
  },
2101
- "billing:card-setup": {
2398
+ "keys:create": {
2102
2399
  "aliases": [],
2103
2400
  "args": {},
2104
- "description": "Get a Stripe card setup URL to save a payment method",
2401
+ "description": "Create a new API key (JWT required)",
2105
2402
  "flags": {
2106
2403
  "json": {
2107
2404
  "description": "Format output as json.",
@@ -2133,11 +2430,47 @@
2133
2430
  "hasDynamicHelp": false,
2134
2431
  "multiple": false,
2135
2432
  "type": "option"
2433
+ },
2434
+ "name": {
2435
+ "description": "Key name/label",
2436
+ "name": "name",
2437
+ "required": true,
2438
+ "hasDynamicHelp": false,
2439
+ "multiple": false,
2440
+ "type": "option"
2441
+ },
2442
+ "expires-days": {
2443
+ "description": "Expiry in days (omit for no expiry)",
2444
+ "name": "expires-days",
2445
+ "hasDynamicHelp": false,
2446
+ "multiple": false,
2447
+ "type": "option"
2448
+ },
2449
+ "budget": {
2450
+ "description": "Spend budget in USD",
2451
+ "name": "budget",
2452
+ "hasDynamicHelp": false,
2453
+ "multiple": false,
2454
+ "type": "option"
2455
+ },
2456
+ "face": {
2457
+ "description": "Allowed face username (repeatable)",
2458
+ "name": "face",
2459
+ "hasDynamicHelp": false,
2460
+ "multiple": true,
2461
+ "type": "option"
2462
+ },
2463
+ "model": {
2464
+ "description": "Allowed model name (repeatable)",
2465
+ "name": "model",
2466
+ "hasDynamicHelp": false,
2467
+ "multiple": true,
2468
+ "type": "option"
2136
2469
  }
2137
2470
  },
2138
2471
  "hasDynamicHelp": false,
2139
2472
  "hiddenAliases": [],
2140
- "id": "billing:card-setup",
2473
+ "id": "keys:create",
2141
2474
  "pluginAlias": "faces-cli",
2142
2475
  "pluginName": "faces-cli",
2143
2476
  "pluginType": "core",
@@ -2147,14 +2480,14 @@
2147
2480
  "relativePath": [
2148
2481
  "dist",
2149
2482
  "commands",
2150
- "billing",
2151
- "card-setup.js"
2483
+ "keys",
2484
+ "create.js"
2152
2485
  ]
2153
2486
  },
2154
- "billing:checkout": {
2487
+ "keys:list": {
2155
2488
  "aliases": [],
2156
2489
  "args": {},
2157
- "description": "Get a Stripe checkout URL to upgrade your subscription plan",
2490
+ "description": "List all API keys (JWT required)",
2158
2491
  "flags": {
2159
2492
  "json": {
2160
2493
  "description": "Format output as json.",
@@ -2186,23 +2519,11 @@
2186
2519
  "hasDynamicHelp": false,
2187
2520
  "multiple": false,
2188
2521
  "type": "option"
2189
- },
2190
- "plan": {
2191
- "description": "Plan to upgrade to",
2192
- "name": "plan",
2193
- "required": true,
2194
- "hasDynamicHelp": false,
2195
- "multiple": false,
2196
- "options": [
2197
- "standard",
2198
- "pro"
2199
- ],
2200
- "type": "option"
2201
2522
  }
2202
2523
  },
2203
2524
  "hasDynamicHelp": false,
2204
2525
  "hiddenAliases": [],
2205
- "id": "billing:checkout",
2526
+ "id": "keys:list",
2206
2527
  "pluginAlias": "faces-cli",
2207
2528
  "pluginName": "faces-cli",
2208
2529
  "pluginType": "core",
@@ -2212,14 +2533,20 @@
2212
2533
  "relativePath": [
2213
2534
  "dist",
2214
2535
  "commands",
2215
- "billing",
2216
- "checkout.js"
2536
+ "keys",
2537
+ "list.js"
2217
2538
  ]
2218
2539
  },
2219
- "billing:llm-costs": {
2540
+ "keys:revoke": {
2220
2541
  "aliases": [],
2221
- "args": {},
2222
- "description": "List available LLMs and their per-token costs",
2542
+ "args": {
2543
+ "key_id": {
2544
+ "description": "Key ID",
2545
+ "name": "key_id",
2546
+ "required": true
2547
+ }
2548
+ },
2549
+ "description": "Revoke an API key (JWT required)",
2223
2550
  "flags": {
2224
2551
  "json": {
2225
2552
  "description": "Format output as json.",
@@ -2252,17 +2579,16 @@
2252
2579
  "multiple": false,
2253
2580
  "type": "option"
2254
2581
  },
2255
- "provider": {
2256
- "description": "Filter by provider (e.g. openai, anthropic)",
2257
- "name": "provider",
2258
- "hasDynamicHelp": false,
2259
- "multiple": false,
2260
- "type": "option"
2582
+ "yes": {
2583
+ "description": "Skip confirmation",
2584
+ "name": "yes",
2585
+ "allowNo": false,
2586
+ "type": "boolean"
2261
2587
  }
2262
2588
  },
2263
2589
  "hasDynamicHelp": false,
2264
2590
  "hiddenAliases": [],
2265
- "id": "billing:llm-costs",
2591
+ "id": "keys:revoke",
2266
2592
  "pluginAlias": "faces-cli",
2267
2593
  "pluginName": "faces-cli",
2268
2594
  "pluginType": "core",
@@ -2272,14 +2598,20 @@
2272
2598
  "relativePath": [
2273
2599
  "dist",
2274
2600
  "commands",
2275
- "billing",
2276
- "llm-costs.js"
2601
+ "keys",
2602
+ "revoke.js"
2277
2603
  ]
2278
2604
  },
2279
- "billing:quota": {
2605
+ "keys:update": {
2280
2606
  "aliases": [],
2281
- "args": {},
2282
- "description": "Show compile token quota and per-face stats",
2607
+ "args": {
2608
+ "key_id": {
2609
+ "description": "Key ID",
2610
+ "name": "key_id",
2611
+ "required": true
2612
+ }
2613
+ },
2614
+ "description": "Update API key metadata (JWT required)",
2283
2615
  "flags": {
2284
2616
  "json": {
2285
2617
  "description": "Format output as json.",
@@ -2311,11 +2643,31 @@
2311
2643
  "hasDynamicHelp": false,
2312
2644
  "multiple": false,
2313
2645
  "type": "option"
2646
+ },
2647
+ "name": {
2648
+ "description": "New key name",
2649
+ "name": "name",
2650
+ "hasDynamicHelp": false,
2651
+ "multiple": false,
2652
+ "type": "option"
2653
+ },
2654
+ "budget": {
2655
+ "description": "New spend budget in USD",
2656
+ "name": "budget",
2657
+ "hasDynamicHelp": false,
2658
+ "multiple": false,
2659
+ "type": "option"
2660
+ },
2661
+ "reset-spent": {
2662
+ "description": "Reset spent amount to zero",
2663
+ "name": "reset-spent",
2664
+ "allowNo": false,
2665
+ "type": "boolean"
2314
2666
  }
2315
2667
  },
2316
2668
  "hasDynamicHelp": false,
2317
2669
  "hiddenAliases": [],
2318
- "id": "billing:quota",
2670
+ "id": "keys:update",
2319
2671
  "pluginAlias": "faces-cli",
2320
2672
  "pluginName": "faces-cli",
2321
2673
  "pluginType": "core",
@@ -2325,14 +2677,20 @@
2325
2677
  "relativePath": [
2326
2678
  "dist",
2327
2679
  "commands",
2328
- "billing",
2329
- "quota.js"
2680
+ "keys",
2681
+ "update.js"
2330
2682
  ]
2331
2683
  },
2332
- "billing:subscription": {
2684
+ "compile:thread:create": {
2333
2685
  "aliases": [],
2334
- "args": {},
2335
- "description": "Show current plan, face count, and renewal date",
2686
+ "args": {
2687
+ "face_id": {
2688
+ "description": "Face ID or username",
2689
+ "name": "face_id",
2690
+ "required": true
2691
+ }
2692
+ },
2693
+ "description": "Start a new thread for a face",
2336
2694
  "flags": {
2337
2695
  "json": {
2338
2696
  "description": "Format output as json.",
@@ -2364,11 +2722,18 @@
2364
2722
  "hasDynamicHelp": false,
2365
2723
  "multiple": false,
2366
2724
  "type": "option"
2725
+ },
2726
+ "label": {
2727
+ "description": "Thread label",
2728
+ "name": "label",
2729
+ "hasDynamicHelp": false,
2730
+ "multiple": false,
2731
+ "type": "option"
2367
2732
  }
2368
2733
  },
2369
2734
  "hasDynamicHelp": false,
2370
2735
  "hiddenAliases": [],
2371
- "id": "billing:subscription",
2736
+ "id": "compile:thread:create",
2372
2737
  "pluginAlias": "faces-cli",
2373
2738
  "pluginName": "faces-cli",
2374
2739
  "pluginType": "core",
@@ -2378,14 +2743,21 @@
2378
2743
  "relativePath": [
2379
2744
  "dist",
2380
2745
  "commands",
2381
- "billing",
2382
- "subscription.js"
2746
+ "compile",
2747
+ "thread",
2748
+ "create.js"
2383
2749
  ]
2384
2750
  },
2385
- "billing:topup": {
2751
+ "compile:thread:delete": {
2386
2752
  "aliases": [],
2387
- "args": {},
2388
- "description": "Top up credit balance using saved payment method",
2753
+ "args": {
2754
+ "thread_id": {
2755
+ "description": "Thread ID",
2756
+ "name": "thread_id",
2757
+ "required": true
2758
+ }
2759
+ },
2760
+ "description": "Delete a thread",
2389
2761
  "flags": {
2390
2762
  "json": {
2391
2763
  "description": "Format output as json.",
@@ -2418,25 +2790,16 @@
2418
2790
  "multiple": false,
2419
2791
  "type": "option"
2420
2792
  },
2421
- "amount": {
2422
- "description": "Top-up amount in USD (min $1)",
2423
- "name": "amount",
2424
- "required": true,
2425
- "hasDynamicHelp": false,
2426
- "multiple": false,
2427
- "type": "option"
2428
- },
2429
- "payment-ref": {
2430
- "description": "Payment reference (admin/test path)",
2431
- "name": "payment-ref",
2432
- "hasDynamicHelp": false,
2433
- "multiple": false,
2434
- "type": "option"
2793
+ "yes": {
2794
+ "description": "Skip confirmation",
2795
+ "name": "yes",
2796
+ "allowNo": false,
2797
+ "type": "boolean"
2435
2798
  }
2436
2799
  },
2437
2800
  "hasDynamicHelp": false,
2438
2801
  "hiddenAliases": [],
2439
- "id": "billing:topup",
2802
+ "id": "compile:thread:delete",
2440
2803
  "pluginAlias": "faces-cli",
2441
2804
  "pluginName": "faces-cli",
2442
2805
  "pluginType": "core",
@@ -2446,14 +2809,21 @@
2446
2809
  "relativePath": [
2447
2810
  "dist",
2448
2811
  "commands",
2449
- "billing",
2450
- "topup.js"
2812
+ "compile",
2813
+ "thread",
2814
+ "delete.js"
2451
2815
  ]
2452
2816
  },
2453
- "billing:usage": {
2817
+ "compile:thread:edit": {
2454
2818
  "aliases": [],
2455
- "args": {},
2456
- "description": "Aggregated usage analytics",
2819
+ "args": {
2820
+ "thread_id": {
2821
+ "description": "Thread ID",
2822
+ "name": "thread_id",
2823
+ "required": true
2824
+ }
2825
+ },
2826
+ "description": "Edit a thread (label)",
2457
2827
  "flags": {
2458
2828
  "json": {
2459
2829
  "description": "Format output as json.",
@@ -2486,29 +2856,10 @@
2486
2856
  "multiple": false,
2487
2857
  "type": "option"
2488
2858
  },
2489
- "group-by": {
2490
- "description": "Group results",
2491
- "name": "group-by",
2492
- "hasDynamicHelp": false,
2493
- "multiple": false,
2494
- "options": [
2495
- "api_key",
2496
- "model",
2497
- "llm",
2498
- "date"
2499
- ],
2500
- "type": "option"
2501
- },
2502
- "from": {
2503
- "description": "Start date (YYYY-MM-DD)",
2504
- "name": "from",
2505
- "hasDynamicHelp": false,
2506
- "multiple": false,
2507
- "type": "option"
2508
- },
2509
- "to": {
2510
- "description": "End date (YYYY-MM-DD)",
2511
- "name": "to",
2859
+ "label": {
2860
+ "description": "New thread label",
2861
+ "name": "label",
2862
+ "required": true,
2512
2863
  "hasDynamicHelp": false,
2513
2864
  "multiple": false,
2514
2865
  "type": "option"
@@ -2516,7 +2867,7 @@
2516
2867
  },
2517
2868
  "hasDynamicHelp": false,
2518
2869
  "hiddenAliases": [],
2519
- "id": "billing:usage",
2870
+ "id": "compile:thread:edit",
2520
2871
  "pluginAlias": "faces-cli",
2521
2872
  "pluginName": "faces-cli",
2522
2873
  "pluginType": "core",
@@ -2526,20 +2877,21 @@
2526
2877
  "relativePath": [
2527
2878
  "dist",
2528
2879
  "commands",
2529
- "billing",
2530
- "usage.js"
2880
+ "compile",
2881
+ "thread",
2882
+ "edit.js"
2531
2883
  ]
2532
2884
  },
2533
- "compile:thread:create": {
2885
+ "compile:thread:get": {
2534
2886
  "aliases": [],
2535
2887
  "args": {
2536
- "face_id": {
2537
- "description": "Face ID or username",
2538
- "name": "face_id",
2888
+ "thread_id": {
2889
+ "description": "Thread ID",
2890
+ "name": "thread_id",
2539
2891
  "required": true
2540
2892
  }
2541
2893
  },
2542
- "description": "Start a new thread for a face",
2894
+ "description": "Get a thread by ID",
2543
2895
  "flags": {
2544
2896
  "json": {
2545
2897
  "description": "Format output as json.",
@@ -2571,18 +2923,11 @@
2571
2923
  "hasDynamicHelp": false,
2572
2924
  "multiple": false,
2573
2925
  "type": "option"
2574
- },
2575
- "label": {
2576
- "description": "Thread label",
2577
- "name": "label",
2578
- "hasDynamicHelp": false,
2579
- "multiple": false,
2580
- "type": "option"
2581
2926
  }
2582
2927
  },
2583
2928
  "hasDynamicHelp": false,
2584
2929
  "hiddenAliases": [],
2585
- "id": "compile:thread:create",
2930
+ "id": "compile:thread:get",
2586
2931
  "pluginAlias": "faces-cli",
2587
2932
  "pluginName": "faces-cli",
2588
2933
  "pluginType": "core",
@@ -2594,7 +2939,7 @@
2594
2939
  "commands",
2595
2940
  "compile",
2596
2941
  "thread",
2597
- "create.js"
2942
+ "get.js"
2598
2943
  ]
2599
2944
  },
2600
2945
  "compile:thread:list": {
@@ -2848,6 +3193,18 @@
2848
3193
  "hasDynamicHelp": false,
2849
3194
  "multiple": false,
2850
3195
  "type": "option"
3196
+ },
3197
+ "perspective": {
3198
+ "description": "Perspective (first-person or third-person)",
3199
+ "name": "perspective",
3200
+ "default": "first-person",
3201
+ "hasDynamicHelp": false,
3202
+ "multiple": false,
3203
+ "options": [
3204
+ "first-person",
3205
+ "third-person"
3206
+ ],
3207
+ "type": "option"
2851
3208
  }
2852
3209
  },
2853
3210
  "hasDynamicHelp": false,
@@ -2927,6 +3284,98 @@
2927
3284
  "delete.js"
2928
3285
  ]
2929
3286
  },
3287
+ "compile:doc:edit": {
3288
+ "aliases": [],
3289
+ "args": {
3290
+ "doc_id": {
3291
+ "description": "Document ID",
3292
+ "name": "doc_id",
3293
+ "required": true
3294
+ }
3295
+ },
3296
+ "description": "Edit a document (label, content, or perspective)",
3297
+ "flags": {
3298
+ "json": {
3299
+ "description": "Format output as json.",
3300
+ "helpGroup": "GLOBAL",
3301
+ "name": "json",
3302
+ "allowNo": false,
3303
+ "type": "boolean"
3304
+ },
3305
+ "base-url": {
3306
+ "description": "API base URL",
3307
+ "env": "FACES_BASE_URL",
3308
+ "name": "base-url",
3309
+ "hasDynamicHelp": false,
3310
+ "multiple": false,
3311
+ "type": "option"
3312
+ },
3313
+ "token": {
3314
+ "description": "JWT bearer token",
3315
+ "env": "FACES_TOKEN",
3316
+ "name": "token",
3317
+ "hasDynamicHelp": false,
3318
+ "multiple": false,
3319
+ "type": "option"
3320
+ },
3321
+ "api-key": {
3322
+ "description": "API key",
3323
+ "env": "FACES_API_KEY",
3324
+ "name": "api-key",
3325
+ "hasDynamicHelp": false,
3326
+ "multiple": false,
3327
+ "type": "option"
3328
+ },
3329
+ "label": {
3330
+ "description": "New label/title",
3331
+ "name": "label",
3332
+ "hasDynamicHelp": false,
3333
+ "multiple": false,
3334
+ "type": "option"
3335
+ },
3336
+ "content": {
3337
+ "description": "New inline text content",
3338
+ "name": "content",
3339
+ "hasDynamicHelp": false,
3340
+ "multiple": false,
3341
+ "type": "option"
3342
+ },
3343
+ "file": {
3344
+ "description": "Read new content from file",
3345
+ "name": "file",
3346
+ "hasDynamicHelp": false,
3347
+ "multiple": false,
3348
+ "type": "option"
3349
+ },
3350
+ "perspective": {
3351
+ "description": "Perspective (first-person or third-person)",
3352
+ "name": "perspective",
3353
+ "hasDynamicHelp": false,
3354
+ "multiple": false,
3355
+ "options": [
3356
+ "first-person",
3357
+ "third-person"
3358
+ ],
3359
+ "type": "option"
3360
+ }
3361
+ },
3362
+ "hasDynamicHelp": false,
3363
+ "hiddenAliases": [],
3364
+ "id": "compile:doc:edit",
3365
+ "pluginAlias": "faces-cli",
3366
+ "pluginName": "faces-cli",
3367
+ "pluginType": "core",
3368
+ "strict": true,
3369
+ "enableJsonFlag": true,
3370
+ "isESM": true,
3371
+ "relativePath": [
3372
+ "dist",
3373
+ "commands",
3374
+ "compile",
3375
+ "doc",
3376
+ "edit.js"
3377
+ ]
3378
+ },
2930
3379
  "compile:doc:get": {
2931
3380
  "aliases": [],
2932
3381
  "args": {
@@ -2987,7 +3436,7 @@
2987
3436
  "get.js"
2988
3437
  ]
2989
3438
  },
2990
- "compile:doc:list": {
3439
+ "compile:doc": {
2991
3440
  "aliases": [],
2992
3441
  "args": {
2993
3442
  "face_id": {
@@ -2996,7 +3445,7 @@
2996
3445
  "required": true
2997
3446
  }
2998
3447
  },
2999
- "description": "List documents for a face",
3448
+ "description": "Compile a document into a face (create → make in one step)",
3000
3449
  "flags": {
3001
3450
  "json": {
3002
3451
  "description": "Format output as json.",
@@ -3028,11 +3477,52 @@
3028
3477
  "hasDynamicHelp": false,
3029
3478
  "multiple": false,
3030
3479
  "type": "option"
3480
+ },
3481
+ "label": {
3482
+ "description": "Document label/title",
3483
+ "name": "label",
3484
+ "hasDynamicHelp": false,
3485
+ "multiple": false,
3486
+ "type": "option"
3487
+ },
3488
+ "content": {
3489
+ "description": "Inline text content",
3490
+ "name": "content",
3491
+ "hasDynamicHelp": false,
3492
+ "multiple": false,
3493
+ "type": "option"
3494
+ },
3495
+ "file": {
3496
+ "description": "Read content from file",
3497
+ "name": "file",
3498
+ "hasDynamicHelp": false,
3499
+ "multiple": false,
3500
+ "type": "option"
3501
+ },
3502
+ "perspective": {
3503
+ "description": "Perspective",
3504
+ "name": "perspective",
3505
+ "default": "first-person",
3506
+ "hasDynamicHelp": false,
3507
+ "multiple": false,
3508
+ "options": [
3509
+ "first-person",
3510
+ "third-person"
3511
+ ],
3512
+ "type": "option"
3513
+ },
3514
+ "timeout": {
3515
+ "description": "Compile timeout in seconds (default: 600)",
3516
+ "name": "timeout",
3517
+ "default": 600,
3518
+ "hasDynamicHelp": false,
3519
+ "multiple": false,
3520
+ "type": "option"
3031
3521
  }
3032
3522
  },
3033
3523
  "hasDynamicHelp": false,
3034
3524
  "hiddenAliases": [],
3035
- "id": "compile:doc:list",
3525
+ "id": "compile:doc",
3036
3526
  "pluginAlias": "faces-cli",
3037
3527
  "pluginName": "faces-cli",
3038
3528
  "pluginType": "core",
@@ -3044,19 +3534,19 @@
3044
3534
  "commands",
3045
3535
  "compile",
3046
3536
  "doc",
3047
- "list.js"
3537
+ "index.js"
3048
3538
  ]
3049
3539
  },
3050
- "compile:doc:prepare": {
3540
+ "compile:doc:list": {
3051
3541
  "aliases": [],
3052
3542
  "args": {
3053
- "doc_id": {
3054
- "description": "Document ID",
3055
- "name": "doc_id",
3543
+ "face_id": {
3544
+ "description": "Face ID or username",
3545
+ "name": "face_id",
3056
3546
  "required": true
3057
3547
  }
3058
3548
  },
3059
- "description": "Run LLM extraction pipeline on a document",
3549
+ "description": "List documents for a face",
3060
3550
  "flags": {
3061
3551
  "json": {
3062
3552
  "description": "Format output as json.",
@@ -3092,7 +3582,7 @@
3092
3582
  },
3093
3583
  "hasDynamicHelp": false,
3094
3584
  "hiddenAliases": [],
3095
- "id": "compile:doc:prepare",
3585
+ "id": "compile:doc:list",
3096
3586
  "pluginAlias": "faces-cli",
3097
3587
  "pluginName": "faces-cli",
3098
3588
  "pluginType": "core",
@@ -3104,10 +3594,10 @@
3104
3594
  "commands",
3105
3595
  "compile",
3106
3596
  "doc",
3107
- "prepare.js"
3597
+ "list.js"
3108
3598
  ]
3109
3599
  },
3110
- "compile:doc:sync": {
3600
+ "compile:doc:make": {
3111
3601
  "aliases": [],
3112
3602
  "args": {
3113
3603
  "doc_id": {
@@ -3116,7 +3606,7 @@
3116
3606
  "required": true
3117
3607
  }
3118
3608
  },
3119
- "description": "Sync a document into a face (charges compile quota)",
3609
+ "description": "Compile an existing document (prepare + sync in one step)",
3120
3610
  "flags": {
3121
3611
  "json": {
3122
3612
  "description": "Format output as json.",
@@ -3149,16 +3639,18 @@
3149
3639
  "multiple": false,
3150
3640
  "type": "option"
3151
3641
  },
3152
- "yes": {
3153
- "description": "Skip confirmation (quota will be charged)",
3154
- "name": "yes",
3155
- "allowNo": false,
3156
- "type": "boolean"
3642
+ "timeout": {
3643
+ "description": "Compile timeout in seconds (default: 600)",
3644
+ "name": "timeout",
3645
+ "default": 600,
3646
+ "hasDynamicHelp": false,
3647
+ "multiple": false,
3648
+ "type": "option"
3157
3649
  }
3158
3650
  },
3159
3651
  "hasDynamicHelp": false,
3160
3652
  "hiddenAliases": [],
3161
- "id": "compile:doc:sync",
3653
+ "id": "compile:doc:make",
3162
3654
  "pluginAlias": "faces-cli",
3163
3655
  "pluginName": "faces-cli",
3164
3656
  "pluginType": "core",
@@ -3170,9 +3662,9 @@
3170
3662
  "commands",
3171
3663
  "compile",
3172
3664
  "doc",
3173
- "sync.js"
3665
+ "make.js"
3174
3666
  ]
3175
3667
  }
3176
3668
  },
3177
- "version": "1.3.2"
3669
+ "version": "1.4.1"
3178
3670
  }