faces-cli 1.4.0 → 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.
@@ -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,14 +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
- "catalog:doctor": {
510
+ "billing:topup": {
570
511
  "aliases": [],
571
512
  "args": {},
572
- "description": "Diagnose and repair the local face catalog",
513
+ "description": "Top up credit balance using saved payment method",
573
514
  "flags": {
574
515
  "json": {
575
516
  "description": "Format output as json.",
@@ -602,22 +543,25 @@
602
543
  "multiple": false,
603
544
  "type": "option"
604
545
  },
605
- "fix": {
606
- "description": "Rebuild missing or stale catalog entries from API",
607
- "name": "fix",
608
- "allowNo": false,
609
- "type": "boolean"
546
+ "amount": {
547
+ "description": "Top-up amount in USD (min $1)",
548
+ "name": "amount",
549
+ "required": true,
550
+ "hasDynamicHelp": false,
551
+ "multiple": false,
552
+ "type": "option"
610
553
  },
611
- "generate": {
612
- "description": "Fix + generate missing descriptions via LLM",
613
- "name": "generate",
614
- "allowNo": false,
615
- "type": "boolean"
554
+ "payment-ref": {
555
+ "description": "Payment reference (admin/test path)",
556
+ "name": "payment-ref",
557
+ "hasDynamicHelp": false,
558
+ "multiple": false,
559
+ "type": "option"
616
560
  }
617
561
  },
618
562
  "hasDynamicHelp": false,
619
563
  "hiddenAliases": [],
620
- "id": "catalog:doctor",
564
+ "id": "billing:topup",
621
565
  "pluginAlias": "faces-cli",
622
566
  "pluginName": "faces-cli",
623
567
  "pluginType": "core",
@@ -627,14 +571,14 @@
627
571
  "relativePath": [
628
572
  "dist",
629
573
  "commands",
630
- "catalog",
631
- "doctor.js"
574
+ "billing",
575
+ "topup.js"
632
576
  ]
633
577
  },
634
- "catalog:list": {
578
+ "billing:usage": {
635
579
  "aliases": [],
636
580
  "args": {},
637
- "description": "List all faces in the local catalog",
581
+ "description": "Aggregated usage analytics",
638
582
  "flags": {
639
583
  "json": {
640
584
  "description": "Format output as json.",
@@ -666,56 +610,30 @@
666
610
  "hasDynamicHelp": false,
667
611
  "multiple": false,
668
612
  "type": "option"
669
- }
670
- },
671
- "hasDynamicHelp": false,
672
- "hiddenAliases": [],
673
- "id": "catalog:list",
674
- "pluginAlias": "faces-cli",
675
- "pluginName": "faces-cli",
676
- "pluginType": "core",
677
- "strict": true,
678
- "enableJsonFlag": true,
679
- "isESM": true,
680
- "relativePath": [
681
- "dist",
682
- "commands",
683
- "catalog",
684
- "list.js"
685
- ]
686
- },
687
- "billing:balance": {
688
- "aliases": [],
689
- "args": {},
690
- "description": "Show credit balance and payment method status",
691
- "flags": {
692
- "json": {
693
- "description": "Format output as json.",
694
- "helpGroup": "GLOBAL",
695
- "name": "json",
696
- "allowNo": false,
697
- "type": "boolean"
698
613
  },
699
- "base-url": {
700
- "description": "API base URL",
701
- "env": "FACES_BASE_URL",
702
- "name": "base-url",
614
+ "group-by": {
615
+ "description": "Group results",
616
+ "name": "group-by",
703
617
  "hasDynamicHelp": false,
704
618
  "multiple": false,
619
+ "options": [
620
+ "api_key",
621
+ "model",
622
+ "llm",
623
+ "date"
624
+ ],
705
625
  "type": "option"
706
626
  },
707
- "token": {
708
- "description": "JWT bearer token",
709
- "env": "FACES_TOKEN",
710
- "name": "token",
627
+ "from": {
628
+ "description": "Start date (YYYY-MM-DD)",
629
+ "name": "from",
711
630
  "hasDynamicHelp": false,
712
631
  "multiple": false,
713
632
  "type": "option"
714
633
  },
715
- "api-key": {
716
- "description": "API key",
717
- "env": "FACES_API_KEY",
718
- "name": "api-key",
634
+ "to": {
635
+ "description": "End date (YYYY-MM-DD)",
636
+ "name": "to",
719
637
  "hasDynamicHelp": false,
720
638
  "multiple": false,
721
639
  "type": "option"
@@ -723,7 +641,7 @@
723
641
  },
724
642
  "hasDynamicHelp": false,
725
643
  "hiddenAliases": [],
726
- "id": "billing:balance",
644
+ "id": "billing:usage",
727
645
  "pluginAlias": "faces-cli",
728
646
  "pluginName": "faces-cli",
729
647
  "pluginType": "core",
@@ -734,13 +652,19 @@
734
652
  "dist",
735
653
  "commands",
736
654
  "billing",
737
- "balance.js"
655
+ "usage.js"
738
656
  ]
739
657
  },
740
- "billing:card-setup": {
658
+ "chat:chat": {
741
659
  "aliases": [],
742
- "args": {},
743
- "description": "Get a Stripe card setup URL to save a payment method",
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.",
744
668
  "flags": {
745
669
  "json": {
746
670
  "description": "Format output as json.",
@@ -772,11 +696,67 @@
772
696
  "hasDynamicHelp": false,
773
697
  "multiple": false,
774
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"
775
755
  }
776
756
  },
777
757
  "hasDynamicHelp": false,
778
758
  "hiddenAliases": [],
779
- "id": "billing:card-setup",
759
+ "id": "chat:chat",
780
760
  "pluginAlias": "faces-cli",
781
761
  "pluginName": "faces-cli",
782
762
  "pluginType": "core",
@@ -786,14 +766,20 @@
786
766
  "relativePath": [
787
767
  "dist",
788
768
  "commands",
789
- "billing",
790
- "card-setup.js"
769
+ "chat",
770
+ "chat.js"
791
771
  ]
792
772
  },
793
- "billing:checkout": {
773
+ "chat:messages": {
794
774
  "aliases": [],
795
- "args": {},
796
- "description": "Get a Stripe checkout URL to upgrade your subscription plan",
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)",
797
783
  "flags": {
798
784
  "json": {
799
785
  "description": "Format output as json.",
@@ -826,22 +812,40 @@
826
812
  "multiple": false,
827
813
  "type": "option"
828
814
  },
829
- "plan": {
830
- "description": "Plan to upgrade to",
831
- "name": "plan",
815
+ "message": {
816
+ "char": "m",
817
+ "description": "User message (repeatable)",
818
+ "name": "message",
832
819
  "required": true,
833
820
  "hasDynamicHelp": false,
821
+ "multiple": true,
822
+ "type": "option"
823
+ },
824
+ "system": {
825
+ "description": "System prompt",
826
+ "name": "system",
827
+ "hasDynamicHelp": false,
828
+ "multiple": false,
829
+ "type": "option"
830
+ },
831
+ "stream": {
832
+ "description": "Stream the response",
833
+ "name": "stream",
834
+ "allowNo": false,
835
+ "type": "boolean"
836
+ },
837
+ "max-tokens": {
838
+ "description": "Max tokens",
839
+ "name": "max-tokens",
840
+ "default": 1024,
841
+ "hasDynamicHelp": false,
834
842
  "multiple": false,
835
- "options": [
836
- "standard",
837
- "pro"
838
- ],
839
843
  "type": "option"
840
844
  }
841
845
  },
842
846
  "hasDynamicHelp": false,
843
847
  "hiddenAliases": [],
844
- "id": "billing:checkout",
848
+ "id": "chat:messages",
845
849
  "pluginAlias": "faces-cli",
846
850
  "pluginName": "faces-cli",
847
851
  "pluginType": "core",
@@ -851,14 +855,20 @@
851
855
  "relativePath": [
852
856
  "dist",
853
857
  "commands",
854
- "billing",
855
- "checkout.js"
858
+ "chat",
859
+ "messages.js"
856
860
  ]
857
861
  },
858
- "billing:llm-costs": {
862
+ "chat:responses": {
859
863
  "aliases": [],
860
- "args": {},
861
- "description": "List available LLMs and their per-token costs",
864
+ "args": {
865
+ "face_model": {
866
+ "description": "Face model (e.g. myface or myface@gpt-4o)",
867
+ "name": "face_model",
868
+ "required": true
869
+ }
870
+ },
871
+ "description": "OpenAI Responses API proxy via a face (alias: chat:chat --responses)",
862
872
  "flags": {
863
873
  "json": {
864
874
  "description": "Format output as json.",
@@ -891,17 +901,32 @@
891
901
  "multiple": false,
892
902
  "type": "option"
893
903
  },
894
- "provider": {
895
- "description": "Filter by provider (e.g. openai, anthropic)",
896
- "name": "provider",
904
+ "message": {
905
+ "char": "m",
906
+ "description": "User input message",
907
+ "name": "message",
908
+ "required": true,
897
909
  "hasDynamicHelp": false,
898
910
  "multiple": false,
899
911
  "type": "option"
912
+ },
913
+ "instructions": {
914
+ "description": "System instructions",
915
+ "name": "instructions",
916
+ "hasDynamicHelp": false,
917
+ "multiple": false,
918
+ "type": "option"
919
+ },
920
+ "stream": {
921
+ "description": "Stream the response",
922
+ "name": "stream",
923
+ "allowNo": false,
924
+ "type": "boolean"
900
925
  }
901
926
  },
902
927
  "hasDynamicHelp": false,
903
928
  "hiddenAliases": [],
904
- "id": "billing:llm-costs",
929
+ "id": "chat:responses",
905
930
  "pluginAlias": "faces-cli",
906
931
  "pluginName": "faces-cli",
907
932
  "pluginType": "core",
@@ -911,14 +936,20 @@
911
936
  "relativePath": [
912
937
  "dist",
913
938
  "commands",
914
- "billing",
915
- "llm-costs.js"
939
+ "chat",
940
+ "responses.js"
916
941
  ]
917
942
  },
918
- "billing:quota": {
943
+ "compile:import": {
919
944
  "aliases": [],
920
- "args": {},
921
- "description": "Show compile token quota and per-face stats",
945
+ "args": {
946
+ "face_id": {
947
+ "description": "Face ID or username",
948
+ "name": "face_id",
949
+ "required": true
950
+ }
951
+ },
952
+ "description": "Import a YouTube video into a face via server-side download and transcription",
922
953
  "flags": {
923
954
  "json": {
924
955
  "description": "Format output as json.",
@@ -950,11 +981,50 @@
950
981
  "hasDynamicHelp": false,
951
982
  "multiple": false,
952
983
  "type": "option"
984
+ },
985
+ "url": {
986
+ "description": "YouTube URL (youtube.com/watch?v=... or youtu.be/...)",
987
+ "name": "url",
988
+ "required": true,
989
+ "hasDynamicHelp": false,
990
+ "multiple": false,
991
+ "type": "option"
992
+ },
993
+ "type": {
994
+ "description": "\"document\" for solo talks, lectures, monologues; \"thread\" for interviews or multi-speaker conversations",
995
+ "name": "type",
996
+ "default": "document",
997
+ "hasDynamicHelp": false,
998
+ "multiple": false,
999
+ "options": [
1000
+ "document",
1001
+ "thread"
1002
+ ],
1003
+ "type": "option"
1004
+ },
1005
+ "perspective": {
1006
+ "description": "\"first-person\" if the face is the speaker; \"third-person\" if the video is about the face",
1007
+ "name": "perspective",
1008
+ "default": "third-person",
1009
+ "hasDynamicHelp": false,
1010
+ "multiple": false,
1011
+ "options": [
1012
+ "first-person",
1013
+ "third-person"
1014
+ ],
1015
+ "type": "option"
1016
+ },
1017
+ "face-speaker": {
1018
+ "description": "For --type thread: AssemblyAI speaker label (e.g. \"A\") that corresponds to the face. Defaults to first detected speaker.",
1019
+ "name": "face-speaker",
1020
+ "hasDynamicHelp": false,
1021
+ "multiple": false,
1022
+ "type": "option"
953
1023
  }
954
1024
  },
955
1025
  "hasDynamicHelp": false,
956
1026
  "hiddenAliases": [],
957
- "id": "billing:quota",
1027
+ "id": "compile:import",
958
1028
  "pluginAlias": "faces-cli",
959
1029
  "pluginName": "faces-cli",
960
1030
  "pluginType": "core",
@@ -964,14 +1034,14 @@
964
1034
  "relativePath": [
965
1035
  "dist",
966
1036
  "commands",
967
- "billing",
968
- "quota.js"
1037
+ "compile",
1038
+ "import.js"
969
1039
  ]
970
1040
  },
971
- "billing:subscription": {
1041
+ "config:clear": {
972
1042
  "aliases": [],
973
1043
  "args": {},
974
- "description": "Show current plan, face count, and renewal date",
1044
+ "description": "Delete all saved credentials and config",
975
1045
  "flags": {
976
1046
  "json": {
977
1047
  "description": "Format output as json.",
@@ -1003,11 +1073,17 @@
1003
1073
  "hasDynamicHelp": false,
1004
1074
  "multiple": false,
1005
1075
  "type": "option"
1076
+ },
1077
+ "yes": {
1078
+ "description": "Skip confirmation",
1079
+ "name": "yes",
1080
+ "allowNo": false,
1081
+ "type": "boolean"
1006
1082
  }
1007
1083
  },
1008
1084
  "hasDynamicHelp": false,
1009
1085
  "hiddenAliases": [],
1010
- "id": "billing:subscription",
1086
+ "id": "config:clear",
1011
1087
  "pluginAlias": "faces-cli",
1012
1088
  "pluginName": "faces-cli",
1013
1089
  "pluginType": "core",
@@ -1017,14 +1093,25 @@
1017
1093
  "relativePath": [
1018
1094
  "dist",
1019
1095
  "commands",
1020
- "billing",
1021
- "subscription.js"
1096
+ "config",
1097
+ "clear.js"
1022
1098
  ]
1023
1099
  },
1024
- "billing:topup": {
1100
+ "config:set": {
1025
1101
  "aliases": [],
1026
- "args": {},
1027
- "description": "Top up credit balance using saved payment method",
1102
+ "args": {
1103
+ "key": {
1104
+ "description": "Config key",
1105
+ "name": "key",
1106
+ "required": true
1107
+ },
1108
+ "value": {
1109
+ "description": "Config value",
1110
+ "name": "value",
1111
+ "required": true
1112
+ }
1113
+ },
1114
+ "description": "Set a config value (e.g. base_url, api_key, token)",
1028
1115
  "flags": {
1029
1116
  "json": {
1030
1117
  "description": "Format output as json.",
@@ -1056,26 +1143,11 @@
1056
1143
  "hasDynamicHelp": false,
1057
1144
  "multiple": false,
1058
1145
  "type": "option"
1059
- },
1060
- "amount": {
1061
- "description": "Top-up amount in USD (min $1)",
1062
- "name": "amount",
1063
- "required": true,
1064
- "hasDynamicHelp": false,
1065
- "multiple": false,
1066
- "type": "option"
1067
- },
1068
- "payment-ref": {
1069
- "description": "Payment reference (admin/test path)",
1070
- "name": "payment-ref",
1071
- "hasDynamicHelp": false,
1072
- "multiple": false,
1073
- "type": "option"
1074
1146
  }
1075
1147
  },
1076
1148
  "hasDynamicHelp": false,
1077
1149
  "hiddenAliases": [],
1078
- "id": "billing:topup",
1150
+ "id": "config:set",
1079
1151
  "pluginAlias": "faces-cli",
1080
1152
  "pluginName": "faces-cli",
1081
1153
  "pluginType": "core",
@@ -1085,14 +1157,14 @@
1085
1157
  "relativePath": [
1086
1158
  "dist",
1087
1159
  "commands",
1088
- "billing",
1089
- "topup.js"
1160
+ "config",
1161
+ "set.js"
1090
1162
  ]
1091
1163
  },
1092
- "billing:usage": {
1164
+ "config:show": {
1093
1165
  "aliases": [],
1094
1166
  "args": {},
1095
- "description": "Aggregated usage analytics",
1167
+ "description": "Print current config (credentials are masked)",
1096
1168
  "flags": {
1097
1169
  "json": {
1098
1170
  "description": "Format output as json.",
@@ -1124,38 +1196,11 @@
1124
1196
  "hasDynamicHelp": false,
1125
1197
  "multiple": false,
1126
1198
  "type": "option"
1127
- },
1128
- "group-by": {
1129
- "description": "Group results",
1130
- "name": "group-by",
1131
- "hasDynamicHelp": false,
1132
- "multiple": false,
1133
- "options": [
1134
- "api_key",
1135
- "model",
1136
- "llm",
1137
- "date"
1138
- ],
1139
- "type": "option"
1140
- },
1141
- "from": {
1142
- "description": "Start date (YYYY-MM-DD)",
1143
- "name": "from",
1144
- "hasDynamicHelp": false,
1145
- "multiple": false,
1146
- "type": "option"
1147
- },
1148
- "to": {
1149
- "description": "End date (YYYY-MM-DD)",
1150
- "name": "to",
1151
- "hasDynamicHelp": false,
1152
- "multiple": false,
1153
- "type": "option"
1154
1199
  }
1155
1200
  },
1156
1201
  "hasDynamicHelp": false,
1157
1202
  "hiddenAliases": [],
1158
- "id": "billing:usage",
1203
+ "id": "config:show",
1159
1204
  "pluginAlias": "faces-cli",
1160
1205
  "pluginName": "faces-cli",
1161
1206
  "pluginType": "core",
@@ -1165,20 +1210,27 @@
1165
1210
  "relativePath": [
1166
1211
  "dist",
1167
1212
  "commands",
1168
- "billing",
1169
- "usage.js"
1213
+ "config",
1214
+ "show.js"
1170
1215
  ]
1171
1216
  },
1172
- "chat:chat": {
1217
+ "auth:connect": {
1173
1218
  "aliases": [],
1174
1219
  "args": {
1175
- "face_username": {
1176
- "description": "Face username (or face@model)",
1177
- "name": "face_username",
1220
+ "provider": {
1221
+ "description": "OAuth provider to connect",
1222
+ "name": "provider",
1223
+ "options": [
1224
+ "openai"
1225
+ ],
1178
1226
  "required": true
1179
1227
  }
1180
1228
  },
1181
- "description": "Chat via a face. Auto-routes to the correct API endpoint based on model provider.",
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
+ ],
1182
1234
  "flags": {
1183
1235
  "json": {
1184
1236
  "description": "Format output as json.",
@@ -1211,66 +1263,73 @@
1211
1263
  "multiple": false,
1212
1264
  "type": "option"
1213
1265
  },
1214
- "message": {
1215
- "char": "m",
1216
- "description": "User message (repeatable)",
1217
- "name": "message",
1218
- "required": false,
1219
- "hasDynamicHelp": false,
1220
- "multiple": true,
1221
- "type": "option"
1222
- },
1223
- "llm": {
1224
- "description": "LLM override (e.g. gpt-4o-mini, claude-sonnet-4-6)",
1225
- "name": "llm",
1226
- "hasDynamicHelp": false,
1227
- "multiple": false,
1228
- "type": "option"
1229
- },
1230
- "system": {
1231
- "description": "System prompt / instructions",
1232
- "name": "system",
1233
- "hasDynamicHelp": false,
1234
- "multiple": false,
1235
- "type": "option"
1236
- },
1237
- "stream": {
1238
- "description": "Stream the response",
1239
- "name": "stream",
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"
1271
+ }
1272
+ },
1273
+ "hasDynamicHelp": false,
1274
+ "hiddenAliases": [],
1275
+ "id": "auth:connect",
1276
+ "pluginAlias": "faces-cli",
1277
+ "pluginName": "faces-cli",
1278
+ "pluginType": "core",
1279
+ "strict": true,
1280
+ "enableJsonFlag": true,
1281
+ "isESM": true,
1282
+ "relativePath": [
1283
+ "dist",
1284
+ "commands",
1285
+ "auth",
1286
+ "connect.js"
1287
+ ]
1288
+ },
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",
1240
1302
  "allowNo": false,
1241
1303
  "type": "boolean"
1242
1304
  },
1243
- "max-tokens": {
1244
- "description": "Max tokens",
1245
- "name": "max-tokens",
1305
+ "base-url": {
1306
+ "description": "API base URL",
1307
+ "env": "FACES_BASE_URL",
1308
+ "name": "base-url",
1246
1309
  "hasDynamicHelp": false,
1247
1310
  "multiple": false,
1248
1311
  "type": "option"
1249
1312
  },
1250
- "temperature": {
1251
- "description": "Temperature (0.0-2.0)",
1252
- "name": "temperature",
1313
+ "token": {
1314
+ "description": "JWT bearer token",
1315
+ "env": "FACES_TOKEN",
1316
+ "name": "token",
1253
1317
  "hasDynamicHelp": false,
1254
1318
  "multiple": false,
1255
1319
  "type": "option"
1256
1320
  },
1257
- "file": {
1258
- "description": "Read message from file",
1259
- "name": "file",
1321
+ "api-key": {
1322
+ "description": "API key",
1323
+ "env": "FACES_API_KEY",
1324
+ "name": "api-key",
1260
1325
  "hasDynamicHelp": false,
1261
1326
  "multiple": false,
1262
1327
  "type": "option"
1263
- },
1264
- "responses": {
1265
- "description": "Use OpenAI Responses API instead of Chat Completions",
1266
- "name": "responses",
1267
- "allowNo": false,
1268
- "type": "boolean"
1269
1328
  }
1270
1329
  },
1271
1330
  "hasDynamicHelp": false,
1272
1331
  "hiddenAliases": [],
1273
- "id": "chat:chat",
1332
+ "id": "auth:connections",
1274
1333
  "pluginAlias": "faces-cli",
1275
1334
  "pluginName": "faces-cli",
1276
1335
  "pluginType": "core",
@@ -1280,20 +1339,26 @@
1280
1339
  "relativePath": [
1281
1340
  "dist",
1282
1341
  "commands",
1283
- "chat",
1284
- "chat.js"
1342
+ "auth",
1343
+ "connections.js"
1285
1344
  ]
1286
1345
  },
1287
- "chat:messages": {
1346
+ "auth:disconnect": {
1288
1347
  "aliases": [],
1289
1348
  "args": {
1290
- "face_model": {
1291
- "description": "Face model (e.g. myface or myface@claude-sonnet-4-6)",
1292
- "name": "face_model",
1349
+ "provider": {
1350
+ "description": "OAuth provider to disconnect",
1351
+ "name": "provider",
1352
+ "options": [
1353
+ "openai"
1354
+ ],
1293
1355
  "required": true
1294
1356
  }
1295
1357
  },
1296
- "description": "Anthropic Messages API proxy via a face (alias: chat:chat auto-routes Anthropic models here)",
1358
+ "description": "Disconnect a linked OAuth provider account",
1359
+ "examples": [
1360
+ "<%= config.bin %> auth disconnect openai"
1361
+ ],
1297
1362
  "flags": {
1298
1363
  "json": {
1299
1364
  "description": "Format output as json.",
@@ -1325,41 +1390,11 @@
1325
1390
  "hasDynamicHelp": false,
1326
1391
  "multiple": false,
1327
1392
  "type": "option"
1328
- },
1329
- "message": {
1330
- "char": "m",
1331
- "description": "User message (repeatable)",
1332
- "name": "message",
1333
- "required": true,
1334
- "hasDynamicHelp": false,
1335
- "multiple": true,
1336
- "type": "option"
1337
- },
1338
- "system": {
1339
- "description": "System prompt",
1340
- "name": "system",
1341
- "hasDynamicHelp": false,
1342
- "multiple": false,
1343
- "type": "option"
1344
- },
1345
- "stream": {
1346
- "description": "Stream the response",
1347
- "name": "stream",
1348
- "allowNo": false,
1349
- "type": "boolean"
1350
- },
1351
- "max-tokens": {
1352
- "description": "Max tokens",
1353
- "name": "max-tokens",
1354
- "default": 1024,
1355
- "hasDynamicHelp": false,
1356
- "multiple": false,
1357
- "type": "option"
1358
1393
  }
1359
1394
  },
1360
1395
  "hasDynamicHelp": false,
1361
1396
  "hiddenAliases": [],
1362
- "id": "chat:messages",
1397
+ "id": "auth:disconnect",
1363
1398
  "pluginAlias": "faces-cli",
1364
1399
  "pluginName": "faces-cli",
1365
1400
  "pluginType": "core",
@@ -1369,20 +1404,14 @@
1369
1404
  "relativePath": [
1370
1405
  "dist",
1371
1406
  "commands",
1372
- "chat",
1373
- "messages.js"
1407
+ "auth",
1408
+ "disconnect.js"
1374
1409
  ]
1375
1410
  },
1376
- "chat:responses": {
1411
+ "auth:login": {
1377
1412
  "aliases": [],
1378
- "args": {
1379
- "face_model": {
1380
- "description": "Face model (e.g. myface or myface@gpt-4o)",
1381
- "name": "face_model",
1382
- "required": true
1383
- }
1384
- },
1385
- "description": "OpenAI Responses API proxy via a face (alias: chat:chat --responses)",
1413
+ "args": {},
1414
+ "description": "Login and save JWT credentials",
1386
1415
  "flags": {
1387
1416
  "json": {
1388
1417
  "description": "Format output as json.",
@@ -1415,32 +1444,26 @@
1415
1444
  "multiple": false,
1416
1445
  "type": "option"
1417
1446
  },
1418
- "message": {
1419
- "char": "m",
1420
- "description": "User input message",
1421
- "name": "message",
1447
+ "email": {
1448
+ "description": "Account email",
1449
+ "name": "email",
1422
1450
  "required": true,
1423
1451
  "hasDynamicHelp": false,
1424
1452
  "multiple": false,
1425
1453
  "type": "option"
1426
1454
  },
1427
- "instructions": {
1428
- "description": "System instructions",
1429
- "name": "instructions",
1455
+ "password": {
1456
+ "description": "Account password",
1457
+ "name": "password",
1458
+ "required": true,
1430
1459
  "hasDynamicHelp": false,
1431
1460
  "multiple": false,
1432
1461
  "type": "option"
1433
- },
1434
- "stream": {
1435
- "description": "Stream the response",
1436
- "name": "stream",
1437
- "allowNo": false,
1438
- "type": "boolean"
1439
1462
  }
1440
1463
  },
1441
1464
  "hasDynamicHelp": false,
1442
1465
  "hiddenAliases": [],
1443
- "id": "chat:responses",
1466
+ "id": "auth:login",
1444
1467
  "pluginAlias": "faces-cli",
1445
1468
  "pluginName": "faces-cli",
1446
1469
  "pluginType": "core",
@@ -1450,20 +1473,14 @@
1450
1473
  "relativePath": [
1451
1474
  "dist",
1452
1475
  "commands",
1453
- "chat",
1454
- "responses.js"
1476
+ "auth",
1477
+ "login.js"
1455
1478
  ]
1456
1479
  },
1457
- "compile:import": {
1480
+ "auth:logout": {
1458
1481
  "aliases": [],
1459
- "args": {
1460
- "face_id": {
1461
- "description": "Face ID or username",
1462
- "name": "face_id",
1463
- "required": true
1464
- }
1465
- },
1466
- "description": "Import a YouTube video into a face via server-side download and transcription",
1482
+ "args": {},
1483
+ "description": "Clear saved credentials",
1467
1484
  "flags": {
1468
1485
  "json": {
1469
1486
  "description": "Format output as json.",
@@ -1495,50 +1512,11 @@
1495
1512
  "hasDynamicHelp": false,
1496
1513
  "multiple": false,
1497
1514
  "type": "option"
1498
- },
1499
- "url": {
1500
- "description": "YouTube URL (youtube.com/watch?v=... or youtu.be/...)",
1501
- "name": "url",
1502
- "required": true,
1503
- "hasDynamicHelp": false,
1504
- "multiple": false,
1505
- "type": "option"
1506
- },
1507
- "type": {
1508
- "description": "\"document\" for solo talks, lectures, monologues; \"thread\" for interviews or multi-speaker conversations",
1509
- "name": "type",
1510
- "default": "document",
1511
- "hasDynamicHelp": false,
1512
- "multiple": false,
1513
- "options": [
1514
- "document",
1515
- "thread"
1516
- ],
1517
- "type": "option"
1518
- },
1519
- "perspective": {
1520
- "description": "\"first-person\" if the face is the speaker; \"third-person\" if the video is about the face",
1521
- "name": "perspective",
1522
- "default": "third-person",
1523
- "hasDynamicHelp": false,
1524
- "multiple": false,
1525
- "options": [
1526
- "first-person",
1527
- "third-person"
1528
- ],
1529
- "type": "option"
1530
- },
1531
- "face-speaker": {
1532
- "description": "For --type thread: AssemblyAI speaker label (e.g. \"A\") that corresponds to the face. Defaults to first detected speaker.",
1533
- "name": "face-speaker",
1534
- "hasDynamicHelp": false,
1535
- "multiple": false,
1536
- "type": "option"
1537
1515
  }
1538
1516
  },
1539
1517
  "hasDynamicHelp": false,
1540
1518
  "hiddenAliases": [],
1541
- "id": "compile:import",
1519
+ "id": "auth:logout",
1542
1520
  "pluginAlias": "faces-cli",
1543
1521
  "pluginName": "faces-cli",
1544
1522
  "pluginType": "core",
@@ -1548,14 +1526,14 @@
1548
1526
  "relativePath": [
1549
1527
  "dist",
1550
1528
  "commands",
1551
- "compile",
1552
- "import.js"
1529
+ "auth",
1530
+ "logout.js"
1553
1531
  ]
1554
1532
  },
1555
- "config:clear": {
1533
+ "auth:refresh": {
1556
1534
  "aliases": [],
1557
1535
  "args": {},
1558
- "description": "Delete all saved credentials and config",
1536
+ "description": "Exchange current JWT for a fresh one",
1559
1537
  "flags": {
1560
1538
  "json": {
1561
1539
  "description": "Format output as json.",
@@ -1587,17 +1565,11 @@
1587
1565
  "hasDynamicHelp": false,
1588
1566
  "multiple": false,
1589
1567
  "type": "option"
1590
- },
1591
- "yes": {
1592
- "description": "Skip confirmation",
1593
- "name": "yes",
1594
- "allowNo": false,
1595
- "type": "boolean"
1596
1568
  }
1597
1569
  },
1598
1570
  "hasDynamicHelp": false,
1599
1571
  "hiddenAliases": [],
1600
- "id": "config:clear",
1572
+ "id": "auth:refresh",
1601
1573
  "pluginAlias": "faces-cli",
1602
1574
  "pluginName": "faces-cli",
1603
1575
  "pluginType": "core",
@@ -1607,25 +1579,14 @@
1607
1579
  "relativePath": [
1608
1580
  "dist",
1609
1581
  "commands",
1610
- "config",
1611
- "clear.js"
1582
+ "auth",
1583
+ "refresh.js"
1612
1584
  ]
1613
1585
  },
1614
- "config:set": {
1586
+ "auth:register": {
1615
1587
  "aliases": [],
1616
- "args": {
1617
- "key": {
1618
- "description": "Config key",
1619
- "name": "key",
1620
- "required": true
1621
- },
1622
- "value": {
1623
- "description": "Config value",
1624
- "name": "value",
1625
- "required": true
1626
- }
1627
- },
1628
- "description": "Set a config value (e.g. base_url, api_key, token)",
1588
+ "args": {},
1589
+ "description": "Create a new Faces account",
1629
1590
  "flags": {
1630
1591
  "json": {
1631
1592
  "description": "Format output as json.",
@@ -1657,11 +1618,49 @@
1657
1618
  "hasDynamicHelp": false,
1658
1619
  "multiple": false,
1659
1620
  "type": "option"
1621
+ },
1622
+ "email": {
1623
+ "description": "Email address",
1624
+ "name": "email",
1625
+ "required": true,
1626
+ "hasDynamicHelp": false,
1627
+ "multiple": false,
1628
+ "type": "option"
1629
+ },
1630
+ "password": {
1631
+ "description": "Password",
1632
+ "name": "password",
1633
+ "required": true,
1634
+ "hasDynamicHelp": false,
1635
+ "multiple": false,
1636
+ "type": "option"
1637
+ },
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",
1656
+ "hasDynamicHelp": false,
1657
+ "multiple": false,
1658
+ "type": "option"
1660
1659
  }
1661
1660
  },
1662
1661
  "hasDynamicHelp": false,
1663
1662
  "hiddenAliases": [],
1664
- "id": "config:set",
1663
+ "id": "auth:register",
1665
1664
  "pluginAlias": "faces-cli",
1666
1665
  "pluginName": "faces-cli",
1667
1666
  "pluginType": "core",
@@ -1671,14 +1670,14 @@
1671
1670
  "relativePath": [
1672
1671
  "dist",
1673
1672
  "commands",
1674
- "config",
1675
- "set.js"
1673
+ "auth",
1674
+ "register.js"
1676
1675
  ]
1677
1676
  },
1678
- "config:show": {
1677
+ "auth:whoami": {
1679
1678
  "aliases": [],
1680
1679
  "args": {},
1681
- "description": "Print current config (credentials are masked)",
1680
+ "description": "Print current user profile",
1682
1681
  "flags": {
1683
1682
  "json": {
1684
1683
  "description": "Format output as json.",
@@ -1714,7 +1713,7 @@
1714
1713
  },
1715
1714
  "hasDynamicHelp": false,
1716
1715
  "hiddenAliases": [],
1717
- "id": "config:show",
1716
+ "id": "auth:whoami",
1718
1717
  "pluginAlias": "faces-cli",
1719
1718
  "pluginName": "faces-cli",
1720
1719
  "pluginType": "core",
@@ -1724,8 +1723,8 @@
1724
1723
  "relativePath": [
1725
1724
  "dist",
1726
1725
  "commands",
1727
- "config",
1728
- "show.js"
1726
+ "auth",
1727
+ "whoami.js"
1729
1728
  ]
1730
1729
  },
1731
1730
  "face:create": {
@@ -2682,7 +2681,7 @@
2682
2681
  "update.js"
2683
2682
  ]
2684
2683
  },
2685
- "compile:doc:create": {
2684
+ "compile:thread:create": {
2686
2685
  "aliases": [],
2687
2686
  "args": {
2688
2687
  "face_id": {
@@ -2691,7 +2690,7 @@
2691
2690
  "required": true
2692
2691
  }
2693
2692
  },
2694
- "description": "Submit a document to a face",
2693
+ "description": "Start a new thread for a face",
2695
2694
  "flags": {
2696
2695
  "json": {
2697
2696
  "description": "Format output as json.",
@@ -2725,42 +2724,16 @@
2725
2724
  "type": "option"
2726
2725
  },
2727
2726
  "label": {
2728
- "description": "Document label/title",
2727
+ "description": "Thread label",
2729
2728
  "name": "label",
2730
2729
  "hasDynamicHelp": false,
2731
2730
  "multiple": false,
2732
2731
  "type": "option"
2733
- },
2734
- "content": {
2735
- "description": "Inline text content",
2736
- "name": "content",
2737
- "hasDynamicHelp": false,
2738
- "multiple": false,
2739
- "type": "option"
2740
- },
2741
- "file": {
2742
- "description": "Read content from file",
2743
- "name": "file",
2744
- "hasDynamicHelp": false,
2745
- "multiple": false,
2746
- "type": "option"
2747
- },
2748
- "perspective": {
2749
- "description": "Perspective (first-person or third-person)",
2750
- "name": "perspective",
2751
- "default": "first-person",
2752
- "hasDynamicHelp": false,
2753
- "multiple": false,
2754
- "options": [
2755
- "first-person",
2756
- "third-person"
2757
- ],
2758
- "type": "option"
2759
2732
  }
2760
2733
  },
2761
2734
  "hasDynamicHelp": false,
2762
2735
  "hiddenAliases": [],
2763
- "id": "compile:doc:create",
2736
+ "id": "compile:thread:create",
2764
2737
  "pluginAlias": "faces-cli",
2765
2738
  "pluginName": "faces-cli",
2766
2739
  "pluginType": "core",
@@ -2771,20 +2744,20 @@
2771
2744
  "dist",
2772
2745
  "commands",
2773
2746
  "compile",
2774
- "doc",
2747
+ "thread",
2775
2748
  "create.js"
2776
2749
  ]
2777
2750
  },
2778
- "compile:doc:delete": {
2751
+ "compile:thread:delete": {
2779
2752
  "aliases": [],
2780
2753
  "args": {
2781
- "doc_id": {
2782
- "description": "Document ID",
2783
- "name": "doc_id",
2754
+ "thread_id": {
2755
+ "description": "Thread ID",
2756
+ "name": "thread_id",
2784
2757
  "required": true
2785
2758
  }
2786
2759
  },
2787
- "description": "Delete a document",
2760
+ "description": "Delete a thread",
2788
2761
  "flags": {
2789
2762
  "json": {
2790
2763
  "description": "Format output as json.",
@@ -2816,11 +2789,17 @@
2816
2789
  "hasDynamicHelp": false,
2817
2790
  "multiple": false,
2818
2791
  "type": "option"
2792
+ },
2793
+ "yes": {
2794
+ "description": "Skip confirmation",
2795
+ "name": "yes",
2796
+ "allowNo": false,
2797
+ "type": "boolean"
2819
2798
  }
2820
2799
  },
2821
2800
  "hasDynamicHelp": false,
2822
2801
  "hiddenAliases": [],
2823
- "id": "compile:doc:delete",
2802
+ "id": "compile:thread:delete",
2824
2803
  "pluginAlias": "faces-cli",
2825
2804
  "pluginName": "faces-cli",
2826
2805
  "pluginType": "core",
@@ -2831,20 +2810,20 @@
2831
2810
  "dist",
2832
2811
  "commands",
2833
2812
  "compile",
2834
- "doc",
2813
+ "thread",
2835
2814
  "delete.js"
2836
2815
  ]
2837
2816
  },
2838
- "compile:doc:edit": {
2817
+ "compile:thread:edit": {
2839
2818
  "aliases": [],
2840
2819
  "args": {
2841
- "doc_id": {
2842
- "description": "Document ID",
2843
- "name": "doc_id",
2820
+ "thread_id": {
2821
+ "description": "Thread ID",
2822
+ "name": "thread_id",
2844
2823
  "required": true
2845
2824
  }
2846
2825
  },
2847
- "description": "Edit a document (label, content, or perspective)",
2826
+ "description": "Edit a thread (label)",
2848
2827
  "flags": {
2849
2828
  "json": {
2850
2829
  "description": "Format output as json.",
@@ -2878,41 +2857,17 @@
2878
2857
  "type": "option"
2879
2858
  },
2880
2859
  "label": {
2881
- "description": "New label/title",
2860
+ "description": "New thread label",
2882
2861
  "name": "label",
2862
+ "required": true,
2883
2863
  "hasDynamicHelp": false,
2884
2864
  "multiple": false,
2885
2865
  "type": "option"
2886
- },
2887
- "content": {
2888
- "description": "New inline text content",
2889
- "name": "content",
2890
- "hasDynamicHelp": false,
2891
- "multiple": false,
2892
- "type": "option"
2893
- },
2894
- "file": {
2895
- "description": "Read new content from file",
2896
- "name": "file",
2897
- "hasDynamicHelp": false,
2898
- "multiple": false,
2899
- "type": "option"
2900
- },
2901
- "perspective": {
2902
- "description": "Perspective (first-person or third-person)",
2903
- "name": "perspective",
2904
- "hasDynamicHelp": false,
2905
- "multiple": false,
2906
- "options": [
2907
- "first-person",
2908
- "third-person"
2909
- ],
2910
- "type": "option"
2911
2866
  }
2912
2867
  },
2913
2868
  "hasDynamicHelp": false,
2914
2869
  "hiddenAliases": [],
2915
- "id": "compile:doc:edit",
2870
+ "id": "compile:thread:edit",
2916
2871
  "pluginAlias": "faces-cli",
2917
2872
  "pluginName": "faces-cli",
2918
2873
  "pluginType": "core",
@@ -2923,20 +2878,20 @@
2923
2878
  "dist",
2924
2879
  "commands",
2925
2880
  "compile",
2926
- "doc",
2881
+ "thread",
2927
2882
  "edit.js"
2928
2883
  ]
2929
2884
  },
2930
- "compile:doc:get": {
2885
+ "compile:thread:get": {
2931
2886
  "aliases": [],
2932
2887
  "args": {
2933
- "doc_id": {
2934
- "description": "Document ID",
2935
- "name": "doc_id",
2888
+ "thread_id": {
2889
+ "description": "Thread ID",
2890
+ "name": "thread_id",
2936
2891
  "required": true
2937
2892
  }
2938
2893
  },
2939
- "description": "Get a document by ID",
2894
+ "description": "Get a thread by ID",
2940
2895
  "flags": {
2941
2896
  "json": {
2942
2897
  "description": "Format output as json.",
@@ -2972,7 +2927,7 @@
2972
2927
  },
2973
2928
  "hasDynamicHelp": false,
2974
2929
  "hiddenAliases": [],
2975
- "id": "compile:doc:get",
2930
+ "id": "compile:thread:get",
2976
2931
  "pluginAlias": "faces-cli",
2977
2932
  "pluginName": "faces-cli",
2978
2933
  "pluginType": "core",
@@ -2983,11 +2938,11 @@
2983
2938
  "dist",
2984
2939
  "commands",
2985
2940
  "compile",
2986
- "doc",
2941
+ "thread",
2987
2942
  "get.js"
2988
2943
  ]
2989
2944
  },
2990
- "compile:doc": {
2945
+ "compile:thread:list": {
2991
2946
  "aliases": [],
2992
2947
  "args": {
2993
2948
  "face_id": {
@@ -2996,7 +2951,7 @@
2996
2951
  "required": true
2997
2952
  }
2998
2953
  },
2999
- "description": "Compile a document into a face (create → make in one step)",
2954
+ "description": "List threads for a face",
3000
2955
  "flags": {
3001
2956
  "json": {
3002
2957
  "description": "Format output as json.",
@@ -3028,52 +2983,11 @@
3028
2983
  "hasDynamicHelp": false,
3029
2984
  "multiple": false,
3030
2985
  "type": "option"
3031
- },
3032
- "label": {
3033
- "description": "Document label/title",
3034
- "name": "label",
3035
- "hasDynamicHelp": false,
3036
- "multiple": false,
3037
- "type": "option"
3038
- },
3039
- "content": {
3040
- "description": "Inline text content",
3041
- "name": "content",
3042
- "hasDynamicHelp": false,
3043
- "multiple": false,
3044
- "type": "option"
3045
- },
3046
- "file": {
3047
- "description": "Read content from file",
3048
- "name": "file",
3049
- "hasDynamicHelp": false,
3050
- "multiple": false,
3051
- "type": "option"
3052
- },
3053
- "perspective": {
3054
- "description": "Perspective",
3055
- "name": "perspective",
3056
- "default": "first-person",
3057
- "hasDynamicHelp": false,
3058
- "multiple": false,
3059
- "options": [
3060
- "first-person",
3061
- "third-person"
3062
- ],
3063
- "type": "option"
3064
- },
3065
- "timeout": {
3066
- "description": "Compile timeout in seconds (default: 600)",
3067
- "name": "timeout",
3068
- "default": 600,
3069
- "hasDynamicHelp": false,
3070
- "multiple": false,
3071
- "type": "option"
3072
2986
  }
3073
2987
  },
3074
2988
  "hasDynamicHelp": false,
3075
2989
  "hiddenAliases": [],
3076
- "id": "compile:doc",
2990
+ "id": "compile:thread:list",
3077
2991
  "pluginAlias": "faces-cli",
3078
2992
  "pluginName": "faces-cli",
3079
2993
  "pluginType": "core",
@@ -3084,20 +2998,20 @@
3084
2998
  "dist",
3085
2999
  "commands",
3086
3000
  "compile",
3087
- "doc",
3088
- "index.js"
3001
+ "thread",
3002
+ "list.js"
3089
3003
  ]
3090
3004
  },
3091
- "compile:doc:list": {
3005
+ "compile:thread:message": {
3092
3006
  "aliases": [],
3093
3007
  "args": {
3094
- "face_id": {
3095
- "description": "Face ID or username",
3096
- "name": "face_id",
3008
+ "thread_id": {
3009
+ "description": "Thread ID",
3010
+ "name": "thread_id",
3097
3011
  "required": true
3098
3012
  }
3099
3013
  },
3100
- "description": "List documents for a face",
3014
+ "description": "Send a user message to a thread",
3101
3015
  "flags": {
3102
3016
  "json": {
3103
3017
  "description": "Format output as json.",
@@ -3129,11 +3043,20 @@
3129
3043
  "hasDynamicHelp": false,
3130
3044
  "multiple": false,
3131
3045
  "type": "option"
3046
+ },
3047
+ "message": {
3048
+ "char": "m",
3049
+ "description": "User message to append",
3050
+ "name": "message",
3051
+ "required": true,
3052
+ "hasDynamicHelp": false,
3053
+ "multiple": false,
3054
+ "type": "option"
3132
3055
  }
3133
3056
  },
3134
3057
  "hasDynamicHelp": false,
3135
3058
  "hiddenAliases": [],
3136
- "id": "compile:doc:list",
3059
+ "id": "compile:thread:message",
3137
3060
  "pluginAlias": "faces-cli",
3138
3061
  "pluginName": "faces-cli",
3139
3062
  "pluginType": "core",
@@ -3144,20 +3067,20 @@
3144
3067
  "dist",
3145
3068
  "commands",
3146
3069
  "compile",
3147
- "doc",
3148
- "list.js"
3070
+ "thread",
3071
+ "message.js"
3149
3072
  ]
3150
3073
  },
3151
- "compile:doc:make": {
3074
+ "compile:thread:sync": {
3152
3075
  "aliases": [],
3153
3076
  "args": {
3154
- "doc_id": {
3155
- "description": "Document ID",
3156
- "name": "doc_id",
3077
+ "thread_id": {
3078
+ "description": "Thread ID",
3079
+ "name": "thread_id",
3157
3080
  "required": true
3158
3081
  }
3159
3082
  },
3160
- "description": "Compile an existing document (prepare + sync in one step)",
3083
+ "description": "Archive and sync a thread into a face",
3161
3084
  "flags": {
3162
3085
  "json": {
3163
3086
  "description": "Format output as json.",
@@ -3189,19 +3112,11 @@
3189
3112
  "hasDynamicHelp": false,
3190
3113
  "multiple": false,
3191
3114
  "type": "option"
3192
- },
3193
- "timeout": {
3194
- "description": "Compile timeout in seconds (default: 600)",
3195
- "name": "timeout",
3196
- "default": 600,
3197
- "hasDynamicHelp": false,
3198
- "multiple": false,
3199
- "type": "option"
3200
3115
  }
3201
3116
  },
3202
3117
  "hasDynamicHelp": false,
3203
3118
  "hiddenAliases": [],
3204
- "id": "compile:doc:make",
3119
+ "id": "compile:thread:sync",
3205
3120
  "pluginAlias": "faces-cli",
3206
3121
  "pluginName": "faces-cli",
3207
3122
  "pluginType": "core",
@@ -3212,11 +3127,11 @@
3212
3127
  "dist",
3213
3128
  "commands",
3214
3129
  "compile",
3215
- "doc",
3216
- "make.js"
3130
+ "thread",
3131
+ "sync.js"
3217
3132
  ]
3218
3133
  },
3219
- "compile:thread:create": {
3134
+ "compile:doc:create": {
3220
3135
  "aliases": [],
3221
3136
  "args": {
3222
3137
  "face_id": {
@@ -3225,7 +3140,7 @@
3225
3140
  "required": true
3226
3141
  }
3227
3142
  },
3228
- "description": "Start a new thread for a face",
3143
+ "description": "Submit a document to a face",
3229
3144
  "flags": {
3230
3145
  "json": {
3231
3146
  "description": "Format output as json.",
@@ -3259,16 +3174,42 @@
3259
3174
  "type": "option"
3260
3175
  },
3261
3176
  "label": {
3262
- "description": "Thread label",
3177
+ "description": "Document label/title",
3263
3178
  "name": "label",
3264
3179
  "hasDynamicHelp": false,
3265
3180
  "multiple": false,
3266
3181
  "type": "option"
3182
+ },
3183
+ "content": {
3184
+ "description": "Inline text content",
3185
+ "name": "content",
3186
+ "hasDynamicHelp": false,
3187
+ "multiple": false,
3188
+ "type": "option"
3189
+ },
3190
+ "file": {
3191
+ "description": "Read content from file",
3192
+ "name": "file",
3193
+ "hasDynamicHelp": false,
3194
+ "multiple": false,
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"
3267
3208
  }
3268
3209
  },
3269
3210
  "hasDynamicHelp": false,
3270
3211
  "hiddenAliases": [],
3271
- "id": "compile:thread:create",
3212
+ "id": "compile:doc:create",
3272
3213
  "pluginAlias": "faces-cli",
3273
3214
  "pluginName": "faces-cli",
3274
3215
  "pluginType": "core",
@@ -3279,20 +3220,20 @@
3279
3220
  "dist",
3280
3221
  "commands",
3281
3222
  "compile",
3282
- "thread",
3223
+ "doc",
3283
3224
  "create.js"
3284
3225
  ]
3285
3226
  },
3286
- "compile:thread:delete": {
3227
+ "compile:doc:delete": {
3287
3228
  "aliases": [],
3288
3229
  "args": {
3289
- "thread_id": {
3290
- "description": "Thread ID",
3291
- "name": "thread_id",
3230
+ "doc_id": {
3231
+ "description": "Document ID",
3232
+ "name": "doc_id",
3292
3233
  "required": true
3293
3234
  }
3294
3235
  },
3295
- "description": "Delete a thread",
3236
+ "description": "Delete a document",
3296
3237
  "flags": {
3297
3238
  "json": {
3298
3239
  "description": "Format output as json.",
@@ -3324,17 +3265,11 @@
3324
3265
  "hasDynamicHelp": false,
3325
3266
  "multiple": false,
3326
3267
  "type": "option"
3327
- },
3328
- "yes": {
3329
- "description": "Skip confirmation",
3330
- "name": "yes",
3331
- "allowNo": false,
3332
- "type": "boolean"
3333
3268
  }
3334
3269
  },
3335
3270
  "hasDynamicHelp": false,
3336
3271
  "hiddenAliases": [],
3337
- "id": "compile:thread:delete",
3272
+ "id": "compile:doc:delete",
3338
3273
  "pluginAlias": "faces-cli",
3339
3274
  "pluginName": "faces-cli",
3340
3275
  "pluginType": "core",
@@ -3345,20 +3280,20 @@
3345
3280
  "dist",
3346
3281
  "commands",
3347
3282
  "compile",
3348
- "thread",
3283
+ "doc",
3349
3284
  "delete.js"
3350
3285
  ]
3351
3286
  },
3352
- "compile:thread:edit": {
3287
+ "compile:doc:edit": {
3353
3288
  "aliases": [],
3354
3289
  "args": {
3355
- "thread_id": {
3356
- "description": "Thread ID",
3357
- "name": "thread_id",
3290
+ "doc_id": {
3291
+ "description": "Document ID",
3292
+ "name": "doc_id",
3358
3293
  "required": true
3359
3294
  }
3360
3295
  },
3361
- "description": "Edit a thread (label)",
3296
+ "description": "Edit a document (label, content, or perspective)",
3362
3297
  "flags": {
3363
3298
  "json": {
3364
3299
  "description": "Format output as json.",
@@ -3392,17 +3327,41 @@
3392
3327
  "type": "option"
3393
3328
  },
3394
3329
  "label": {
3395
- "description": "New thread label",
3330
+ "description": "New label/title",
3396
3331
  "name": "label",
3397
- "required": true,
3398
3332
  "hasDynamicHelp": false,
3399
3333
  "multiple": false,
3400
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"
3401
3360
  }
3402
3361
  },
3403
3362
  "hasDynamicHelp": false,
3404
3363
  "hiddenAliases": [],
3405
- "id": "compile:thread:edit",
3364
+ "id": "compile:doc:edit",
3406
3365
  "pluginAlias": "faces-cli",
3407
3366
  "pluginName": "faces-cli",
3408
3367
  "pluginType": "core",
@@ -3413,20 +3372,20 @@
3413
3372
  "dist",
3414
3373
  "commands",
3415
3374
  "compile",
3416
- "thread",
3375
+ "doc",
3417
3376
  "edit.js"
3418
3377
  ]
3419
3378
  },
3420
- "compile:thread:get": {
3379
+ "compile:doc:get": {
3421
3380
  "aliases": [],
3422
3381
  "args": {
3423
- "thread_id": {
3424
- "description": "Thread ID",
3425
- "name": "thread_id",
3382
+ "doc_id": {
3383
+ "description": "Document ID",
3384
+ "name": "doc_id",
3426
3385
  "required": true
3427
3386
  }
3428
3387
  },
3429
- "description": "Get a thread by ID",
3388
+ "description": "Get a document by ID",
3430
3389
  "flags": {
3431
3390
  "json": {
3432
3391
  "description": "Format output as json.",
@@ -3462,7 +3421,7 @@
3462
3421
  },
3463
3422
  "hasDynamicHelp": false,
3464
3423
  "hiddenAliases": [],
3465
- "id": "compile:thread:get",
3424
+ "id": "compile:doc:get",
3466
3425
  "pluginAlias": "faces-cli",
3467
3426
  "pluginName": "faces-cli",
3468
3427
  "pluginType": "core",
@@ -3473,11 +3432,11 @@
3473
3432
  "dist",
3474
3433
  "commands",
3475
3434
  "compile",
3476
- "thread",
3435
+ "doc",
3477
3436
  "get.js"
3478
3437
  ]
3479
3438
  },
3480
- "compile:thread:list": {
3439
+ "compile:doc": {
3481
3440
  "aliases": [],
3482
3441
  "args": {
3483
3442
  "face_id": {
@@ -3486,7 +3445,7 @@
3486
3445
  "required": true
3487
3446
  }
3488
3447
  },
3489
- "description": "List threads for a face",
3448
+ "description": "Compile a document into a face (create → make in one step)",
3490
3449
  "flags": {
3491
3450
  "json": {
3492
3451
  "description": "Format output as json.",
@@ -3518,11 +3477,52 @@
3518
3477
  "hasDynamicHelp": false,
3519
3478
  "multiple": false,
3520
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"
3521
3521
  }
3522
3522
  },
3523
3523
  "hasDynamicHelp": false,
3524
3524
  "hiddenAliases": [],
3525
- "id": "compile:thread:list",
3525
+ "id": "compile:doc",
3526
3526
  "pluginAlias": "faces-cli",
3527
3527
  "pluginName": "faces-cli",
3528
3528
  "pluginType": "core",
@@ -3533,20 +3533,20 @@
3533
3533
  "dist",
3534
3534
  "commands",
3535
3535
  "compile",
3536
- "thread",
3537
- "list.js"
3536
+ "doc",
3537
+ "index.js"
3538
3538
  ]
3539
3539
  },
3540
- "compile:thread:message": {
3540
+ "compile:doc:list": {
3541
3541
  "aliases": [],
3542
3542
  "args": {
3543
- "thread_id": {
3544
- "description": "Thread ID",
3545
- "name": "thread_id",
3543
+ "face_id": {
3544
+ "description": "Face ID or username",
3545
+ "name": "face_id",
3546
3546
  "required": true
3547
3547
  }
3548
3548
  },
3549
- "description": "Send a user message to a thread",
3549
+ "description": "List documents for a face",
3550
3550
  "flags": {
3551
3551
  "json": {
3552
3552
  "description": "Format output as json.",
@@ -3578,20 +3578,11 @@
3578
3578
  "hasDynamicHelp": false,
3579
3579
  "multiple": false,
3580
3580
  "type": "option"
3581
- },
3582
- "message": {
3583
- "char": "m",
3584
- "description": "User message to append",
3585
- "name": "message",
3586
- "required": true,
3587
- "hasDynamicHelp": false,
3588
- "multiple": false,
3589
- "type": "option"
3590
3581
  }
3591
3582
  },
3592
3583
  "hasDynamicHelp": false,
3593
3584
  "hiddenAliases": [],
3594
- "id": "compile:thread:message",
3585
+ "id": "compile:doc:list",
3595
3586
  "pluginAlias": "faces-cli",
3596
3587
  "pluginName": "faces-cli",
3597
3588
  "pluginType": "core",
@@ -3602,20 +3593,20 @@
3602
3593
  "dist",
3603
3594
  "commands",
3604
3595
  "compile",
3605
- "thread",
3606
- "message.js"
3596
+ "doc",
3597
+ "list.js"
3607
3598
  ]
3608
3599
  },
3609
- "compile:thread:sync": {
3600
+ "compile:doc:make": {
3610
3601
  "aliases": [],
3611
3602
  "args": {
3612
- "thread_id": {
3613
- "description": "Thread ID",
3614
- "name": "thread_id",
3603
+ "doc_id": {
3604
+ "description": "Document ID",
3605
+ "name": "doc_id",
3615
3606
  "required": true
3616
3607
  }
3617
3608
  },
3618
- "description": "Archive and sync a thread into a face",
3609
+ "description": "Compile an existing document (prepare + sync in one step)",
3619
3610
  "flags": {
3620
3611
  "json": {
3621
3612
  "description": "Format output as json.",
@@ -3647,11 +3638,19 @@
3647
3638
  "hasDynamicHelp": false,
3648
3639
  "multiple": false,
3649
3640
  "type": "option"
3641
+ },
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"
3650
3649
  }
3651
3650
  },
3652
3651
  "hasDynamicHelp": false,
3653
3652
  "hiddenAliases": [],
3654
- "id": "compile:thread:sync",
3653
+ "id": "compile:doc:make",
3655
3654
  "pluginAlias": "faces-cli",
3656
3655
  "pluginName": "faces-cli",
3657
3656
  "pluginType": "core",
@@ -3662,10 +3661,10 @@
3662
3661
  "dist",
3663
3662
  "commands",
3664
3663
  "compile",
3665
- "thread",
3666
- "sync.js"
3664
+ "doc",
3665
+ "make.js"
3667
3666
  ]
3668
3667
  }
3669
3668
  },
3670
- "version": "1.4.0"
3669
+ "version": "1.4.1"
3671
3670
  }