faces-cli 1.4.1 → 1.4.2

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,10 +53,23 @@
53
53
  "state.js"
54
54
  ]
55
55
  },
56
- "catalog:doctor": {
56
+ "auth:connect": {
57
57
  "aliases": [],
58
- "args": {},
59
- "description": "Diagnose and repair the local face catalog",
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
+ ],
60
73
  "flags": {
61
74
  "json": {
62
75
  "description": "Format output as json.",
@@ -89,22 +102,16 @@
89
102
  "multiple": false,
90
103
  "type": "option"
91
104
  },
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",
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",
101
108
  "allowNo": false,
102
109
  "type": "boolean"
103
110
  }
104
111
  },
105
112
  "hasDynamicHelp": false,
106
113
  "hiddenAliases": [],
107
- "id": "catalog:doctor",
114
+ "id": "auth:connect",
108
115
  "pluginAlias": "faces-cli",
109
116
  "pluginName": "faces-cli",
110
117
  "pluginType": "core",
@@ -114,14 +121,18 @@
114
121
  "relativePath": [
115
122
  "dist",
116
123
  "commands",
117
- "catalog",
118
- "doctor.js"
124
+ "auth",
125
+ "connect.js"
119
126
  ]
120
127
  },
121
- "catalog:list": {
128
+ "auth:connections": {
122
129
  "aliases": [],
123
130
  "args": {},
124
- "description": "List all faces in the local catalog",
131
+ "description": "List connected OAuth provider accounts",
132
+ "examples": [
133
+ "<%= config.bin %> auth connections",
134
+ "<%= config.bin %> auth connections --json"
135
+ ],
125
136
  "flags": {
126
137
  "json": {
127
138
  "description": "Format output as json.",
@@ -157,7 +168,7 @@
157
168
  },
158
169
  "hasDynamicHelp": false,
159
170
  "hiddenAliases": [],
160
- "id": "catalog:list",
171
+ "id": "auth:connections",
161
172
  "pluginAlias": "faces-cli",
162
173
  "pluginName": "faces-cli",
163
174
  "pluginType": "core",
@@ -167,14 +178,26 @@
167
178
  "relativePath": [
168
179
  "dist",
169
180
  "commands",
170
- "catalog",
171
- "list.js"
181
+ "auth",
182
+ "connections.js"
172
183
  ]
173
184
  },
174
- "billing:balance": {
185
+ "auth:disconnect": {
175
186
  "aliases": [],
176
- "args": {},
177
- "description": "Show credit balance and payment method status",
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
+ ],
178
201
  "flags": {
179
202
  "json": {
180
203
  "description": "Format output as json.",
@@ -210,7 +233,7 @@
210
233
  },
211
234
  "hasDynamicHelp": false,
212
235
  "hiddenAliases": [],
213
- "id": "billing:balance",
236
+ "id": "auth:disconnect",
214
237
  "pluginAlias": "faces-cli",
215
238
  "pluginName": "faces-cli",
216
239
  "pluginType": "core",
@@ -220,14 +243,14 @@
220
243
  "relativePath": [
221
244
  "dist",
222
245
  "commands",
223
- "billing",
224
- "balance.js"
246
+ "auth",
247
+ "disconnect.js"
225
248
  ]
226
249
  },
227
- "billing:card-setup": {
250
+ "auth:login": {
228
251
  "aliases": [],
229
252
  "args": {},
230
- "description": "Get a Stripe card setup URL to save a payment method",
253
+ "description": "Login and save JWT credentials",
231
254
  "flags": {
232
255
  "json": {
233
256
  "description": "Format output as json.",
@@ -259,11 +282,27 @@
259
282
  "hasDynamicHelp": false,
260
283
  "multiple": false,
261
284
  "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"
262
301
  }
263
302
  },
264
303
  "hasDynamicHelp": false,
265
304
  "hiddenAliases": [],
266
- "id": "billing:card-setup",
305
+ "id": "auth:login",
267
306
  "pluginAlias": "faces-cli",
268
307
  "pluginName": "faces-cli",
269
308
  "pluginType": "core",
@@ -273,14 +312,14 @@
273
312
  "relativePath": [
274
313
  "dist",
275
314
  "commands",
276
- "billing",
277
- "card-setup.js"
315
+ "auth",
316
+ "login.js"
278
317
  ]
279
318
  },
280
- "billing:checkout": {
319
+ "auth:logout": {
281
320
  "aliases": [],
282
321
  "args": {},
283
- "description": "Get a Stripe checkout URL to upgrade your subscription plan",
322
+ "description": "Clear saved credentials",
284
323
  "flags": {
285
324
  "json": {
286
325
  "description": "Format output as json.",
@@ -312,22 +351,11 @@
312
351
  "hasDynamicHelp": false,
313
352
  "multiple": false,
314
353
  "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"
326
354
  }
327
355
  },
328
356
  "hasDynamicHelp": false,
329
357
  "hiddenAliases": [],
330
- "id": "billing:checkout",
358
+ "id": "auth:logout",
331
359
  "pluginAlias": "faces-cli",
332
360
  "pluginName": "faces-cli",
333
361
  "pluginType": "core",
@@ -337,14 +365,14 @@
337
365
  "relativePath": [
338
366
  "dist",
339
367
  "commands",
340
- "billing",
341
- "checkout.js"
368
+ "auth",
369
+ "logout.js"
342
370
  ]
343
371
  },
344
- "billing:llm-costs": {
372
+ "auth:refresh": {
345
373
  "aliases": [],
346
374
  "args": {},
347
- "description": "List available LLMs and their per-token costs",
375
+ "description": "Exchange current JWT for a fresh one",
348
376
  "flags": {
349
377
  "json": {
350
378
  "description": "Format output as json.",
@@ -376,18 +404,11 @@
376
404
  "hasDynamicHelp": false,
377
405
  "multiple": false,
378
406
  "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"
386
407
  }
387
408
  },
388
409
  "hasDynamicHelp": false,
389
410
  "hiddenAliases": [],
390
- "id": "billing:llm-costs",
411
+ "id": "auth:refresh",
391
412
  "pluginAlias": "faces-cli",
392
413
  "pluginName": "faces-cli",
393
414
  "pluginType": "core",
@@ -397,14 +418,14 @@
397
418
  "relativePath": [
398
419
  "dist",
399
420
  "commands",
400
- "billing",
401
- "llm-costs.js"
421
+ "auth",
422
+ "refresh.js"
402
423
  ]
403
424
  },
404
- "billing:quota": {
425
+ "auth:register": {
405
426
  "aliases": [],
406
427
  "args": {},
407
- "description": "Show compile token quota and per-face stats",
428
+ "description": "Create a new Faces account",
408
429
  "flags": {
409
430
  "json": {
410
431
  "description": "Format output as json.",
@@ -436,11 +457,49 @@
436
457
  "hasDynamicHelp": false,
437
458
  "multiple": false,
438
459
  "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"
439
498
  }
440
499
  },
441
500
  "hasDynamicHelp": false,
442
501
  "hiddenAliases": [],
443
- "id": "billing:quota",
502
+ "id": "auth:register",
444
503
  "pluginAlias": "faces-cli",
445
504
  "pluginName": "faces-cli",
446
505
  "pluginType": "core",
@@ -450,14 +509,14 @@
450
509
  "relativePath": [
451
510
  "dist",
452
511
  "commands",
453
- "billing",
454
- "quota.js"
512
+ "auth",
513
+ "register.js"
455
514
  ]
456
515
  },
457
- "billing:subscription": {
516
+ "auth:whoami": {
458
517
  "aliases": [],
459
518
  "args": {},
460
- "description": "Show current plan, face count, and renewal date",
519
+ "description": "Print current user profile",
461
520
  "flags": {
462
521
  "json": {
463
522
  "description": "Format output as json.",
@@ -493,7 +552,7 @@
493
552
  },
494
553
  "hasDynamicHelp": false,
495
554
  "hiddenAliases": [],
496
- "id": "billing:subscription",
555
+ "id": "auth:whoami",
497
556
  "pluginAlias": "faces-cli",
498
557
  "pluginName": "faces-cli",
499
558
  "pluginType": "core",
@@ -503,14 +562,14 @@
503
562
  "relativePath": [
504
563
  "dist",
505
564
  "commands",
506
- "billing",
507
- "subscription.js"
565
+ "auth",
566
+ "whoami.js"
508
567
  ]
509
568
  },
510
- "billing:topup": {
569
+ "billing:balance": {
511
570
  "aliases": [],
512
571
  "args": {},
513
- "description": "Top up credit balance using saved payment method",
572
+ "description": "Show credit balance and payment method status",
514
573
  "flags": {
515
574
  "json": {
516
575
  "description": "Format output as json.",
@@ -542,26 +601,11 @@
542
601
  "hasDynamicHelp": false,
543
602
  "multiple": false,
544
603
  "type": "option"
545
- },
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"
553
- },
554
- "payment-ref": {
555
- "description": "Payment reference (admin/test path)",
556
- "name": "payment-ref",
557
- "hasDynamicHelp": false,
558
- "multiple": false,
559
- "type": "option"
560
604
  }
561
605
  },
562
606
  "hasDynamicHelp": false,
563
607
  "hiddenAliases": [],
564
- "id": "billing:topup",
608
+ "id": "billing:balance",
565
609
  "pluginAlias": "faces-cli",
566
610
  "pluginName": "faces-cli",
567
611
  "pluginType": "core",
@@ -572,13 +616,13 @@
572
616
  "dist",
573
617
  "commands",
574
618
  "billing",
575
- "topup.js"
619
+ "balance.js"
576
620
  ]
577
621
  },
578
- "billing:usage": {
622
+ "billing:card-setup": {
579
623
  "aliases": [],
580
624
  "args": {},
581
- "description": "Aggregated usage analytics",
625
+ "description": "Get a Stripe card setup URL to save a payment method",
582
626
  "flags": {
583
627
  "json": {
584
628
  "description": "Format output as json.",
@@ -610,38 +654,11 @@
610
654
  "hasDynamicHelp": false,
611
655
  "multiple": false,
612
656
  "type": "option"
613
- },
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
657
  }
641
658
  },
642
659
  "hasDynamicHelp": false,
643
660
  "hiddenAliases": [],
644
- "id": "billing:usage",
661
+ "id": "billing:card-setup",
645
662
  "pluginAlias": "faces-cli",
646
663
  "pluginName": "faces-cli",
647
664
  "pluginType": "core",
@@ -652,19 +669,13 @@
652
669
  "dist",
653
670
  "commands",
654
671
  "billing",
655
- "usage.js"
672
+ "card-setup.js"
656
673
  ]
657
674
  },
658
- "chat:chat": {
675
+ "billing:checkout": {
659
676
  "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.",
677
+ "args": {},
678
+ "description": "Get a Stripe checkout URL to upgrade your subscription plan",
668
679
  "flags": {
669
680
  "json": {
670
681
  "description": "Format output as json.",
@@ -697,66 +708,21 @@
697
708
  "multiple": false,
698
709
  "type": "option"
699
710
  },
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",
711
+ "plan": {
712
+ "description": "Plan to subscribe to",
713
+ "name": "plan",
714
+ "default": "connect",
746
715
  "hasDynamicHelp": false,
747
716
  "multiple": false,
717
+ "options": [
718
+ "connect"
719
+ ],
748
720
  "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
721
  }
756
722
  },
757
723
  "hasDynamicHelp": false,
758
724
  "hiddenAliases": [],
759
- "id": "chat:chat",
725
+ "id": "billing:checkout",
760
726
  "pluginAlias": "faces-cli",
761
727
  "pluginName": "faces-cli",
762
728
  "pluginType": "core",
@@ -766,20 +732,14 @@
766
732
  "relativePath": [
767
733
  "dist",
768
734
  "commands",
769
- "chat",
770
- "chat.js"
735
+ "billing",
736
+ "checkout.js"
771
737
  ]
772
738
  },
773
- "chat:messages": {
739
+ "billing:llm-costs": {
774
740
  "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)",
741
+ "args": {},
742
+ "description": "List available LLMs and their per-token costs",
783
743
  "flags": {
784
744
  "json": {
785
745
  "description": "Format output as json.",
@@ -812,32 +772,9 @@
812
772
  "multiple": false,
813
773
  "type": "option"
814
774
  },
815
- "message": {
816
- "char": "m",
817
- "description": "User message (repeatable)",
818
- "name": "message",
819
- "required": true,
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,
775
+ "provider": {
776
+ "description": "Filter by provider (e.g. openai, anthropic)",
777
+ "name": "provider",
841
778
  "hasDynamicHelp": false,
842
779
  "multiple": false,
843
780
  "type": "option"
@@ -845,7 +782,7 @@
845
782
  },
846
783
  "hasDynamicHelp": false,
847
784
  "hiddenAliases": [],
848
- "id": "chat:messages",
785
+ "id": "billing:llm-costs",
849
786
  "pluginAlias": "faces-cli",
850
787
  "pluginName": "faces-cli",
851
788
  "pluginType": "core",
@@ -855,20 +792,14 @@
855
792
  "relativePath": [
856
793
  "dist",
857
794
  "commands",
858
- "chat",
859
- "messages.js"
795
+ "billing",
796
+ "llm-costs.js"
860
797
  ]
861
798
  },
862
- "chat:responses": {
799
+ "billing:quota": {
863
800
  "aliases": [],
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)",
801
+ "args": {},
802
+ "description": "Show compile token quota and per-face stats",
872
803
  "flags": {
873
804
  "json": {
874
805
  "description": "Format output as json.",
@@ -900,33 +831,11 @@
900
831
  "hasDynamicHelp": false,
901
832
  "multiple": false,
902
833
  "type": "option"
903
- },
904
- "message": {
905
- "char": "m",
906
- "description": "User input message",
907
- "name": "message",
908
- "required": true,
909
- "hasDynamicHelp": false,
910
- "multiple": false,
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"
925
834
  }
926
835
  },
927
836
  "hasDynamicHelp": false,
928
837
  "hiddenAliases": [],
929
- "id": "chat:responses",
838
+ "id": "billing:quota",
930
839
  "pluginAlias": "faces-cli",
931
840
  "pluginName": "faces-cli",
932
841
  "pluginType": "core",
@@ -936,20 +845,14 @@
936
845
  "relativePath": [
937
846
  "dist",
938
847
  "commands",
939
- "chat",
940
- "responses.js"
848
+ "billing",
849
+ "quota.js"
941
850
  ]
942
851
  },
943
- "compile:import": {
852
+ "billing:subscription": {
944
853
  "aliases": [],
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",
854
+ "args": {},
855
+ "description": "Show current plan, face count, and renewal date",
953
856
  "flags": {
954
857
  "json": {
955
858
  "description": "Format output as json.",
@@ -981,50 +884,11 @@
981
884
  "hasDynamicHelp": false,
982
885
  "multiple": false,
983
886
  "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"
1023
887
  }
1024
888
  },
1025
889
  "hasDynamicHelp": false,
1026
890
  "hiddenAliases": [],
1027
- "id": "compile:import",
891
+ "id": "billing:subscription",
1028
892
  "pluginAlias": "faces-cli",
1029
893
  "pluginName": "faces-cli",
1030
894
  "pluginType": "core",
@@ -1034,14 +898,14 @@
1034
898
  "relativePath": [
1035
899
  "dist",
1036
900
  "commands",
1037
- "compile",
1038
- "import.js"
901
+ "billing",
902
+ "subscription.js"
1039
903
  ]
1040
904
  },
1041
- "config:clear": {
905
+ "billing:topup": {
1042
906
  "aliases": [],
1043
907
  "args": {},
1044
- "description": "Delete all saved credentials and config",
908
+ "description": "Top up credit balance using saved payment method",
1045
909
  "flags": {
1046
910
  "json": {
1047
911
  "description": "Format output as json.",
@@ -1074,16 +938,25 @@
1074
938
  "multiple": false,
1075
939
  "type": "option"
1076
940
  },
1077
- "yes": {
1078
- "description": "Skip confirmation",
1079
- "name": "yes",
1080
- "allowNo": false,
1081
- "type": "boolean"
941
+ "amount": {
942
+ "description": "Top-up amount in USD (min $1)",
943
+ "name": "amount",
944
+ "required": true,
945
+ "hasDynamicHelp": false,
946
+ "multiple": false,
947
+ "type": "option"
948
+ },
949
+ "payment-ref": {
950
+ "description": "Payment reference (admin/test path)",
951
+ "name": "payment-ref",
952
+ "hasDynamicHelp": false,
953
+ "multiple": false,
954
+ "type": "option"
1082
955
  }
1083
956
  },
1084
957
  "hasDynamicHelp": false,
1085
958
  "hiddenAliases": [],
1086
- "id": "config:clear",
959
+ "id": "billing:topup",
1087
960
  "pluginAlias": "faces-cli",
1088
961
  "pluginName": "faces-cli",
1089
962
  "pluginType": "core",
@@ -1093,25 +966,14 @@
1093
966
  "relativePath": [
1094
967
  "dist",
1095
968
  "commands",
1096
- "config",
1097
- "clear.js"
969
+ "billing",
970
+ "topup.js"
1098
971
  ]
1099
972
  },
1100
- "config:set": {
973
+ "billing:usage": {
1101
974
  "aliases": [],
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)",
975
+ "args": {},
976
+ "description": "Aggregated usage analytics",
1115
977
  "flags": {
1116
978
  "json": {
1117
979
  "description": "Format output as json.",
@@ -1143,11 +1005,38 @@
1143
1005
  "hasDynamicHelp": false,
1144
1006
  "multiple": false,
1145
1007
  "type": "option"
1008
+ },
1009
+ "group-by": {
1010
+ "description": "Group results",
1011
+ "name": "group-by",
1012
+ "hasDynamicHelp": false,
1013
+ "multiple": false,
1014
+ "options": [
1015
+ "api_key",
1016
+ "model",
1017
+ "llm",
1018
+ "date"
1019
+ ],
1020
+ "type": "option"
1021
+ },
1022
+ "from": {
1023
+ "description": "Start date (YYYY-MM-DD)",
1024
+ "name": "from",
1025
+ "hasDynamicHelp": false,
1026
+ "multiple": false,
1027
+ "type": "option"
1028
+ },
1029
+ "to": {
1030
+ "description": "End date (YYYY-MM-DD)",
1031
+ "name": "to",
1032
+ "hasDynamicHelp": false,
1033
+ "multiple": false,
1034
+ "type": "option"
1146
1035
  }
1147
1036
  },
1148
1037
  "hasDynamicHelp": false,
1149
1038
  "hiddenAliases": [],
1150
- "id": "config:set",
1039
+ "id": "billing:usage",
1151
1040
  "pluginAlias": "faces-cli",
1152
1041
  "pluginName": "faces-cli",
1153
1042
  "pluginType": "core",
@@ -1157,14 +1046,14 @@
1157
1046
  "relativePath": [
1158
1047
  "dist",
1159
1048
  "commands",
1160
- "config",
1161
- "set.js"
1049
+ "billing",
1050
+ "usage.js"
1162
1051
  ]
1163
1052
  },
1164
- "config:show": {
1053
+ "catalog:doctor": {
1165
1054
  "aliases": [],
1166
1055
  "args": {},
1167
- "description": "Print current config (credentials are masked)",
1056
+ "description": "Diagnose and repair the local face catalog",
1168
1057
  "flags": {
1169
1058
  "json": {
1170
1059
  "description": "Format output as json.",
@@ -1196,11 +1085,23 @@
1196
1085
  "hasDynamicHelp": false,
1197
1086
  "multiple": false,
1198
1087
  "type": "option"
1088
+ },
1089
+ "fix": {
1090
+ "description": "Rebuild missing or stale catalog entries from API",
1091
+ "name": "fix",
1092
+ "allowNo": false,
1093
+ "type": "boolean"
1094
+ },
1095
+ "generate": {
1096
+ "description": "Fix + generate missing descriptions via LLM",
1097
+ "name": "generate",
1098
+ "allowNo": false,
1099
+ "type": "boolean"
1199
1100
  }
1200
1101
  },
1201
1102
  "hasDynamicHelp": false,
1202
1103
  "hiddenAliases": [],
1203
- "id": "config:show",
1104
+ "id": "catalog:doctor",
1204
1105
  "pluginAlias": "faces-cli",
1205
1106
  "pluginName": "faces-cli",
1206
1107
  "pluginType": "core",
@@ -1210,27 +1111,14 @@
1210
1111
  "relativePath": [
1211
1112
  "dist",
1212
1113
  "commands",
1213
- "config",
1214
- "show.js"
1114
+ "catalog",
1115
+ "doctor.js"
1215
1116
  ]
1216
1117
  },
1217
- "auth:connect": {
1218
- "aliases": [],
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
- ],
1118
+ "catalog:list": {
1119
+ "aliases": [],
1120
+ "args": {},
1121
+ "description": "List all faces in the local catalog",
1234
1122
  "flags": {
1235
1123
  "json": {
1236
1124
  "description": "Format output as json.",
@@ -1262,17 +1150,11 @@
1262
1150
  "hasDynamicHelp": false,
1263
1151
  "multiple": false,
1264
1152
  "type": "option"
1265
- },
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
1153
  }
1272
1154
  },
1273
1155
  "hasDynamicHelp": false,
1274
1156
  "hiddenAliases": [],
1275
- "id": "auth:connect",
1157
+ "id": "catalog:list",
1276
1158
  "pluginAlias": "faces-cli",
1277
1159
  "pluginName": "faces-cli",
1278
1160
  "pluginType": "core",
@@ -1282,18 +1164,20 @@
1282
1164
  "relativePath": [
1283
1165
  "dist",
1284
1166
  "commands",
1285
- "auth",
1286
- "connect.js"
1167
+ "catalog",
1168
+ "list.js"
1287
1169
  ]
1288
1170
  },
1289
- "auth:connections": {
1171
+ "chat:chat": {
1290
1172
  "aliases": [],
1291
- "args": {},
1292
- "description": "List connected OAuth provider accounts",
1293
- "examples": [
1294
- "<%= config.bin %> auth connections",
1295
- "<%= config.bin %> auth connections --json"
1296
- ],
1173
+ "args": {
1174
+ "face_username": {
1175
+ "description": "Face username (or face@model)",
1176
+ "name": "face_username",
1177
+ "required": true
1178
+ }
1179
+ },
1180
+ "description": "Chat via a face. Auto-routes to the correct API endpoint based on model provider.",
1297
1181
  "flags": {
1298
1182
  "json": {
1299
1183
  "description": "Format output as json.",
@@ -1325,11 +1209,67 @@
1325
1209
  "hasDynamicHelp": false,
1326
1210
  "multiple": false,
1327
1211
  "type": "option"
1212
+ },
1213
+ "message": {
1214
+ "char": "m",
1215
+ "description": "User message (repeatable)",
1216
+ "name": "message",
1217
+ "required": false,
1218
+ "hasDynamicHelp": false,
1219
+ "multiple": true,
1220
+ "type": "option"
1221
+ },
1222
+ "llm": {
1223
+ "description": "LLM override (e.g. gpt-4o-mini, claude-sonnet-4-6)",
1224
+ "name": "llm",
1225
+ "hasDynamicHelp": false,
1226
+ "multiple": false,
1227
+ "type": "option"
1228
+ },
1229
+ "system": {
1230
+ "description": "System prompt / instructions",
1231
+ "name": "system",
1232
+ "hasDynamicHelp": false,
1233
+ "multiple": false,
1234
+ "type": "option"
1235
+ },
1236
+ "stream": {
1237
+ "description": "Stream the response",
1238
+ "name": "stream",
1239
+ "allowNo": false,
1240
+ "type": "boolean"
1241
+ },
1242
+ "max-tokens": {
1243
+ "description": "Max tokens",
1244
+ "name": "max-tokens",
1245
+ "hasDynamicHelp": false,
1246
+ "multiple": false,
1247
+ "type": "option"
1248
+ },
1249
+ "temperature": {
1250
+ "description": "Temperature (0.0-2.0)",
1251
+ "name": "temperature",
1252
+ "hasDynamicHelp": false,
1253
+ "multiple": false,
1254
+ "type": "option"
1255
+ },
1256
+ "file": {
1257
+ "description": "Read message from file",
1258
+ "name": "file",
1259
+ "hasDynamicHelp": false,
1260
+ "multiple": false,
1261
+ "type": "option"
1262
+ },
1263
+ "responses": {
1264
+ "description": "Use OpenAI Responses API instead of Chat Completions",
1265
+ "name": "responses",
1266
+ "allowNo": false,
1267
+ "type": "boolean"
1328
1268
  }
1329
1269
  },
1330
1270
  "hasDynamicHelp": false,
1331
1271
  "hiddenAliases": [],
1332
- "id": "auth:connections",
1272
+ "id": "chat:chat",
1333
1273
  "pluginAlias": "faces-cli",
1334
1274
  "pluginName": "faces-cli",
1335
1275
  "pluginType": "core",
@@ -1339,26 +1279,20 @@
1339
1279
  "relativePath": [
1340
1280
  "dist",
1341
1281
  "commands",
1342
- "auth",
1343
- "connections.js"
1282
+ "chat",
1283
+ "chat.js"
1344
1284
  ]
1345
1285
  },
1346
- "auth:disconnect": {
1286
+ "chat:messages": {
1347
1287
  "aliases": [],
1348
1288
  "args": {
1349
- "provider": {
1350
- "description": "OAuth provider to disconnect",
1351
- "name": "provider",
1352
- "options": [
1353
- "openai"
1354
- ],
1289
+ "face_model": {
1290
+ "description": "Face model (e.g. myface or myface@claude-sonnet-4-6)",
1291
+ "name": "face_model",
1355
1292
  "required": true
1356
1293
  }
1357
1294
  },
1358
- "description": "Disconnect a linked OAuth provider account",
1359
- "examples": [
1360
- "<%= config.bin %> auth disconnect openai"
1361
- ],
1295
+ "description": "Anthropic Messages API proxy via a face (alias: chat:chat auto-routes Anthropic models here)",
1362
1296
  "flags": {
1363
1297
  "json": {
1364
1298
  "description": "Format output as json.",
@@ -1390,11 +1324,41 @@
1390
1324
  "hasDynamicHelp": false,
1391
1325
  "multiple": false,
1392
1326
  "type": "option"
1327
+ },
1328
+ "message": {
1329
+ "char": "m",
1330
+ "description": "User message (repeatable)",
1331
+ "name": "message",
1332
+ "required": true,
1333
+ "hasDynamicHelp": false,
1334
+ "multiple": true,
1335
+ "type": "option"
1336
+ },
1337
+ "system": {
1338
+ "description": "System prompt",
1339
+ "name": "system",
1340
+ "hasDynamicHelp": false,
1341
+ "multiple": false,
1342
+ "type": "option"
1343
+ },
1344
+ "stream": {
1345
+ "description": "Stream the response",
1346
+ "name": "stream",
1347
+ "allowNo": false,
1348
+ "type": "boolean"
1349
+ },
1350
+ "max-tokens": {
1351
+ "description": "Max tokens",
1352
+ "name": "max-tokens",
1353
+ "default": 1024,
1354
+ "hasDynamicHelp": false,
1355
+ "multiple": false,
1356
+ "type": "option"
1393
1357
  }
1394
1358
  },
1395
1359
  "hasDynamicHelp": false,
1396
1360
  "hiddenAliases": [],
1397
- "id": "auth:disconnect",
1361
+ "id": "chat:messages",
1398
1362
  "pluginAlias": "faces-cli",
1399
1363
  "pluginName": "faces-cli",
1400
1364
  "pluginType": "core",
@@ -1404,14 +1368,20 @@
1404
1368
  "relativePath": [
1405
1369
  "dist",
1406
1370
  "commands",
1407
- "auth",
1408
- "disconnect.js"
1371
+ "chat",
1372
+ "messages.js"
1409
1373
  ]
1410
1374
  },
1411
- "auth:login": {
1375
+ "chat:responses": {
1412
1376
  "aliases": [],
1413
- "args": {},
1414
- "description": "Login and save JWT credentials",
1377
+ "args": {
1378
+ "face_model": {
1379
+ "description": "Face model (e.g. myface or myface@gpt-4o)",
1380
+ "name": "face_model",
1381
+ "required": true
1382
+ }
1383
+ },
1384
+ "description": "OpenAI Responses API proxy via a face (alias: chat:chat --responses)",
1415
1385
  "flags": {
1416
1386
  "json": {
1417
1387
  "description": "Format output as json.",
@@ -1444,26 +1414,32 @@
1444
1414
  "multiple": false,
1445
1415
  "type": "option"
1446
1416
  },
1447
- "email": {
1448
- "description": "Account email",
1449
- "name": "email",
1417
+ "message": {
1418
+ "char": "m",
1419
+ "description": "User input message",
1420
+ "name": "message",
1450
1421
  "required": true,
1451
1422
  "hasDynamicHelp": false,
1452
1423
  "multiple": false,
1453
1424
  "type": "option"
1454
1425
  },
1455
- "password": {
1456
- "description": "Account password",
1457
- "name": "password",
1458
- "required": true,
1426
+ "instructions": {
1427
+ "description": "System instructions",
1428
+ "name": "instructions",
1459
1429
  "hasDynamicHelp": false,
1460
1430
  "multiple": false,
1461
1431
  "type": "option"
1432
+ },
1433
+ "stream": {
1434
+ "description": "Stream the response",
1435
+ "name": "stream",
1436
+ "allowNo": false,
1437
+ "type": "boolean"
1462
1438
  }
1463
1439
  },
1464
1440
  "hasDynamicHelp": false,
1465
1441
  "hiddenAliases": [],
1466
- "id": "auth:login",
1442
+ "id": "chat:responses",
1467
1443
  "pluginAlias": "faces-cli",
1468
1444
  "pluginName": "faces-cli",
1469
1445
  "pluginType": "core",
@@ -1473,14 +1449,20 @@
1473
1449
  "relativePath": [
1474
1450
  "dist",
1475
1451
  "commands",
1476
- "auth",
1477
- "login.js"
1452
+ "chat",
1453
+ "responses.js"
1478
1454
  ]
1479
1455
  },
1480
- "auth:logout": {
1456
+ "compile:import": {
1481
1457
  "aliases": [],
1482
- "args": {},
1483
- "description": "Clear saved credentials",
1458
+ "args": {
1459
+ "face_id": {
1460
+ "description": "Face ID or username",
1461
+ "name": "face_id",
1462
+ "required": true
1463
+ }
1464
+ },
1465
+ "description": "Import a YouTube video into a face via server-side download and transcription",
1484
1466
  "flags": {
1485
1467
  "json": {
1486
1468
  "description": "Format output as json.",
@@ -1512,11 +1494,50 @@
1512
1494
  "hasDynamicHelp": false,
1513
1495
  "multiple": false,
1514
1496
  "type": "option"
1497
+ },
1498
+ "url": {
1499
+ "description": "YouTube URL (youtube.com/watch?v=... or youtu.be/...)",
1500
+ "name": "url",
1501
+ "required": true,
1502
+ "hasDynamicHelp": false,
1503
+ "multiple": false,
1504
+ "type": "option"
1505
+ },
1506
+ "type": {
1507
+ "description": "\"document\" for solo talks, lectures, monologues; \"thread\" for interviews or multi-speaker conversations",
1508
+ "name": "type",
1509
+ "default": "document",
1510
+ "hasDynamicHelp": false,
1511
+ "multiple": false,
1512
+ "options": [
1513
+ "document",
1514
+ "thread"
1515
+ ],
1516
+ "type": "option"
1517
+ },
1518
+ "perspective": {
1519
+ "description": "\"first-person\" if the face is the speaker; \"third-person\" if the video is about the face",
1520
+ "name": "perspective",
1521
+ "default": "third-person",
1522
+ "hasDynamicHelp": false,
1523
+ "multiple": false,
1524
+ "options": [
1525
+ "first-person",
1526
+ "third-person"
1527
+ ],
1528
+ "type": "option"
1529
+ },
1530
+ "face-speaker": {
1531
+ "description": "For --type thread: AssemblyAI speaker label (e.g. \"A\") that corresponds to the face. Defaults to first detected speaker.",
1532
+ "name": "face-speaker",
1533
+ "hasDynamicHelp": false,
1534
+ "multiple": false,
1535
+ "type": "option"
1515
1536
  }
1516
1537
  },
1517
1538
  "hasDynamicHelp": false,
1518
1539
  "hiddenAliases": [],
1519
- "id": "auth:logout",
1540
+ "id": "compile:import",
1520
1541
  "pluginAlias": "faces-cli",
1521
1542
  "pluginName": "faces-cli",
1522
1543
  "pluginType": "core",
@@ -1526,14 +1547,14 @@
1526
1547
  "relativePath": [
1527
1548
  "dist",
1528
1549
  "commands",
1529
- "auth",
1530
- "logout.js"
1550
+ "compile",
1551
+ "import.js"
1531
1552
  ]
1532
1553
  },
1533
- "auth:refresh": {
1554
+ "config:clear": {
1534
1555
  "aliases": [],
1535
1556
  "args": {},
1536
- "description": "Exchange current JWT for a fresh one",
1557
+ "description": "Delete all saved credentials and config",
1537
1558
  "flags": {
1538
1559
  "json": {
1539
1560
  "description": "Format output as json.",
@@ -1565,11 +1586,17 @@
1565
1586
  "hasDynamicHelp": false,
1566
1587
  "multiple": false,
1567
1588
  "type": "option"
1589
+ },
1590
+ "yes": {
1591
+ "description": "Skip confirmation",
1592
+ "name": "yes",
1593
+ "allowNo": false,
1594
+ "type": "boolean"
1568
1595
  }
1569
1596
  },
1570
1597
  "hasDynamicHelp": false,
1571
1598
  "hiddenAliases": [],
1572
- "id": "auth:refresh",
1599
+ "id": "config:clear",
1573
1600
  "pluginAlias": "faces-cli",
1574
1601
  "pluginName": "faces-cli",
1575
1602
  "pluginType": "core",
@@ -1579,14 +1606,25 @@
1579
1606
  "relativePath": [
1580
1607
  "dist",
1581
1608
  "commands",
1582
- "auth",
1583
- "refresh.js"
1609
+ "config",
1610
+ "clear.js"
1584
1611
  ]
1585
1612
  },
1586
- "auth:register": {
1613
+ "config:set": {
1587
1614
  "aliases": [],
1588
- "args": {},
1589
- "description": "Create a new Faces account",
1615
+ "args": {
1616
+ "key": {
1617
+ "description": "Config key",
1618
+ "name": "key",
1619
+ "required": true
1620
+ },
1621
+ "value": {
1622
+ "description": "Config value",
1623
+ "name": "value",
1624
+ "required": true
1625
+ }
1626
+ },
1627
+ "description": "Set a config value (e.g. base_url, api_key, token)",
1590
1628
  "flags": {
1591
1629
  "json": {
1592
1630
  "description": "Format output as json.",
@@ -1618,49 +1656,11 @@
1618
1656
  "hasDynamicHelp": false,
1619
1657
  "multiple": false,
1620
1658
  "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"
1659
1659
  }
1660
1660
  },
1661
1661
  "hasDynamicHelp": false,
1662
1662
  "hiddenAliases": [],
1663
- "id": "auth:register",
1663
+ "id": "config:set",
1664
1664
  "pluginAlias": "faces-cli",
1665
1665
  "pluginName": "faces-cli",
1666
1666
  "pluginType": "core",
@@ -1670,14 +1670,14 @@
1670
1670
  "relativePath": [
1671
1671
  "dist",
1672
1672
  "commands",
1673
- "auth",
1674
- "register.js"
1673
+ "config",
1674
+ "set.js"
1675
1675
  ]
1676
1676
  },
1677
- "auth:whoami": {
1677
+ "config:show": {
1678
1678
  "aliases": [],
1679
1679
  "args": {},
1680
- "description": "Print current user profile",
1680
+ "description": "Print current config (credentials are masked)",
1681
1681
  "flags": {
1682
1682
  "json": {
1683
1683
  "description": "Format output as json.",
@@ -1713,7 +1713,7 @@
1713
1713
  },
1714
1714
  "hasDynamicHelp": false,
1715
1715
  "hiddenAliases": [],
1716
- "id": "auth:whoami",
1716
+ "id": "config:show",
1717
1717
  "pluginAlias": "faces-cli",
1718
1718
  "pluginName": "faces-cli",
1719
1719
  "pluginType": "core",
@@ -1723,8 +1723,8 @@
1723
1723
  "relativePath": [
1724
1724
  "dist",
1725
1725
  "commands",
1726
- "auth",
1727
- "whoami.js"
1726
+ "config",
1727
+ "show.js"
1728
1728
  ]
1729
1729
  },
1730
1730
  "face:create": {
@@ -2377,6 +2377,25 @@
2377
2377
  "thread"
2378
2378
  ],
2379
2379
  "type": "option"
2380
+ },
2381
+ "perspective": {
2382
+ "description": "Perspective (document only)",
2383
+ "name": "perspective",
2384
+ "default": "third-person",
2385
+ "hasDynamicHelp": false,
2386
+ "multiple": false,
2387
+ "options": [
2388
+ "first-person",
2389
+ "third-person"
2390
+ ],
2391
+ "type": "option"
2392
+ },
2393
+ "face-speaker": {
2394
+ "description": "Speaker name to map to the face (thread only). If omitted, first speaker is used.",
2395
+ "name": "face-speaker",
2396
+ "hasDynamicHelp": false,
2397
+ "multiple": false,
2398
+ "type": "option"
2380
2399
  }
2381
2400
  },
2382
2401
  "hasDynamicHelp": false,
@@ -2681,7 +2700,7 @@
2681
2700
  "update.js"
2682
2701
  ]
2683
2702
  },
2684
- "compile:thread:create": {
2703
+ "compile:doc:create": {
2685
2704
  "aliases": [],
2686
2705
  "args": {
2687
2706
  "face_id": {
@@ -2690,7 +2709,7 @@
2690
2709
  "required": true
2691
2710
  }
2692
2711
  },
2693
- "description": "Start a new thread for a face",
2712
+ "description": "Submit a document to a face",
2694
2713
  "flags": {
2695
2714
  "json": {
2696
2715
  "description": "Format output as json.",
@@ -2724,16 +2743,42 @@
2724
2743
  "type": "option"
2725
2744
  },
2726
2745
  "label": {
2727
- "description": "Thread label",
2746
+ "description": "Document label/title",
2728
2747
  "name": "label",
2729
2748
  "hasDynamicHelp": false,
2730
2749
  "multiple": false,
2731
2750
  "type": "option"
2751
+ },
2752
+ "content": {
2753
+ "description": "Inline text content",
2754
+ "name": "content",
2755
+ "hasDynamicHelp": false,
2756
+ "multiple": false,
2757
+ "type": "option"
2758
+ },
2759
+ "file": {
2760
+ "description": "Read content from file",
2761
+ "name": "file",
2762
+ "hasDynamicHelp": false,
2763
+ "multiple": false,
2764
+ "type": "option"
2765
+ },
2766
+ "perspective": {
2767
+ "description": "Perspective (first-person or third-person)",
2768
+ "name": "perspective",
2769
+ "default": "first-person",
2770
+ "hasDynamicHelp": false,
2771
+ "multiple": false,
2772
+ "options": [
2773
+ "first-person",
2774
+ "third-person"
2775
+ ],
2776
+ "type": "option"
2732
2777
  }
2733
2778
  },
2734
2779
  "hasDynamicHelp": false,
2735
2780
  "hiddenAliases": [],
2736
- "id": "compile:thread:create",
2781
+ "id": "compile:doc:create",
2737
2782
  "pluginAlias": "faces-cli",
2738
2783
  "pluginName": "faces-cli",
2739
2784
  "pluginType": "core",
@@ -2744,20 +2789,20 @@
2744
2789
  "dist",
2745
2790
  "commands",
2746
2791
  "compile",
2747
- "thread",
2792
+ "doc",
2748
2793
  "create.js"
2749
2794
  ]
2750
2795
  },
2751
- "compile:thread:delete": {
2796
+ "compile:doc:delete": {
2752
2797
  "aliases": [],
2753
2798
  "args": {
2754
- "thread_id": {
2755
- "description": "Thread ID",
2756
- "name": "thread_id",
2799
+ "doc_id": {
2800
+ "description": "Document ID",
2801
+ "name": "doc_id",
2757
2802
  "required": true
2758
2803
  }
2759
2804
  },
2760
- "description": "Delete a thread",
2805
+ "description": "Delete a document",
2761
2806
  "flags": {
2762
2807
  "json": {
2763
2808
  "description": "Format output as json.",
@@ -2789,17 +2834,11 @@
2789
2834
  "hasDynamicHelp": false,
2790
2835
  "multiple": false,
2791
2836
  "type": "option"
2792
- },
2793
- "yes": {
2794
- "description": "Skip confirmation",
2795
- "name": "yes",
2796
- "allowNo": false,
2797
- "type": "boolean"
2798
2837
  }
2799
2838
  },
2800
2839
  "hasDynamicHelp": false,
2801
2840
  "hiddenAliases": [],
2802
- "id": "compile:thread:delete",
2841
+ "id": "compile:doc:delete",
2803
2842
  "pluginAlias": "faces-cli",
2804
2843
  "pluginName": "faces-cli",
2805
2844
  "pluginType": "core",
@@ -2810,20 +2849,20 @@
2810
2849
  "dist",
2811
2850
  "commands",
2812
2851
  "compile",
2813
- "thread",
2852
+ "doc",
2814
2853
  "delete.js"
2815
2854
  ]
2816
2855
  },
2817
- "compile:thread:edit": {
2856
+ "compile:doc:edit": {
2818
2857
  "aliases": [],
2819
2858
  "args": {
2820
- "thread_id": {
2821
- "description": "Thread ID",
2822
- "name": "thread_id",
2859
+ "doc_id": {
2860
+ "description": "Document ID",
2861
+ "name": "doc_id",
2823
2862
  "required": true
2824
2863
  }
2825
2864
  },
2826
- "description": "Edit a thread (label)",
2865
+ "description": "Edit a document (label, content, or perspective)",
2827
2866
  "flags": {
2828
2867
  "json": {
2829
2868
  "description": "Format output as json.",
@@ -2857,17 +2896,41 @@
2857
2896
  "type": "option"
2858
2897
  },
2859
2898
  "label": {
2860
- "description": "New thread label",
2899
+ "description": "New label/title",
2861
2900
  "name": "label",
2862
- "required": true,
2863
2901
  "hasDynamicHelp": false,
2864
2902
  "multiple": false,
2865
2903
  "type": "option"
2904
+ },
2905
+ "content": {
2906
+ "description": "New inline text content",
2907
+ "name": "content",
2908
+ "hasDynamicHelp": false,
2909
+ "multiple": false,
2910
+ "type": "option"
2911
+ },
2912
+ "file": {
2913
+ "description": "Read new content from file",
2914
+ "name": "file",
2915
+ "hasDynamicHelp": false,
2916
+ "multiple": false,
2917
+ "type": "option"
2918
+ },
2919
+ "perspective": {
2920
+ "description": "Perspective (first-person or third-person)",
2921
+ "name": "perspective",
2922
+ "hasDynamicHelp": false,
2923
+ "multiple": false,
2924
+ "options": [
2925
+ "first-person",
2926
+ "third-person"
2927
+ ],
2928
+ "type": "option"
2866
2929
  }
2867
2930
  },
2868
2931
  "hasDynamicHelp": false,
2869
2932
  "hiddenAliases": [],
2870
- "id": "compile:thread:edit",
2933
+ "id": "compile:doc:edit",
2871
2934
  "pluginAlias": "faces-cli",
2872
2935
  "pluginName": "faces-cli",
2873
2936
  "pluginType": "core",
@@ -2878,20 +2941,20 @@
2878
2941
  "dist",
2879
2942
  "commands",
2880
2943
  "compile",
2881
- "thread",
2944
+ "doc",
2882
2945
  "edit.js"
2883
2946
  ]
2884
2947
  },
2885
- "compile:thread:get": {
2948
+ "compile:doc:get": {
2886
2949
  "aliases": [],
2887
2950
  "args": {
2888
- "thread_id": {
2889
- "description": "Thread ID",
2890
- "name": "thread_id",
2951
+ "doc_id": {
2952
+ "description": "Document ID",
2953
+ "name": "doc_id",
2891
2954
  "required": true
2892
2955
  }
2893
2956
  },
2894
- "description": "Get a thread by ID",
2957
+ "description": "Get a document by ID",
2895
2958
  "flags": {
2896
2959
  "json": {
2897
2960
  "description": "Format output as json.",
@@ -2927,7 +2990,7 @@
2927
2990
  },
2928
2991
  "hasDynamicHelp": false,
2929
2992
  "hiddenAliases": [],
2930
- "id": "compile:thread:get",
2993
+ "id": "compile:doc:get",
2931
2994
  "pluginAlias": "faces-cli",
2932
2995
  "pluginName": "faces-cli",
2933
2996
  "pluginType": "core",
@@ -2938,11 +3001,11 @@
2938
3001
  "dist",
2939
3002
  "commands",
2940
3003
  "compile",
2941
- "thread",
3004
+ "doc",
2942
3005
  "get.js"
2943
3006
  ]
2944
3007
  },
2945
- "compile:thread:list": {
3008
+ "compile:doc": {
2946
3009
  "aliases": [],
2947
3010
  "args": {
2948
3011
  "face_id": {
@@ -2951,7 +3014,7 @@
2951
3014
  "required": true
2952
3015
  }
2953
3016
  },
2954
- "description": "List threads for a face",
3017
+ "description": "Compile a document into a face (create → make in one step)",
2955
3018
  "flags": {
2956
3019
  "json": {
2957
3020
  "description": "Format output as json.",
@@ -2983,11 +3046,52 @@
2983
3046
  "hasDynamicHelp": false,
2984
3047
  "multiple": false,
2985
3048
  "type": "option"
3049
+ },
3050
+ "label": {
3051
+ "description": "Document label/title",
3052
+ "name": "label",
3053
+ "hasDynamicHelp": false,
3054
+ "multiple": false,
3055
+ "type": "option"
3056
+ },
3057
+ "content": {
3058
+ "description": "Inline text content",
3059
+ "name": "content",
3060
+ "hasDynamicHelp": false,
3061
+ "multiple": false,
3062
+ "type": "option"
3063
+ },
3064
+ "file": {
3065
+ "description": "Read content from file",
3066
+ "name": "file",
3067
+ "hasDynamicHelp": false,
3068
+ "multiple": false,
3069
+ "type": "option"
3070
+ },
3071
+ "perspective": {
3072
+ "description": "Perspective",
3073
+ "name": "perspective",
3074
+ "default": "first-person",
3075
+ "hasDynamicHelp": false,
3076
+ "multiple": false,
3077
+ "options": [
3078
+ "first-person",
3079
+ "third-person"
3080
+ ],
3081
+ "type": "option"
3082
+ },
3083
+ "timeout": {
3084
+ "description": "Compile timeout in seconds (default: 600)",
3085
+ "name": "timeout",
3086
+ "default": 600,
3087
+ "hasDynamicHelp": false,
3088
+ "multiple": false,
3089
+ "type": "option"
2986
3090
  }
2987
3091
  },
2988
3092
  "hasDynamicHelp": false,
2989
3093
  "hiddenAliases": [],
2990
- "id": "compile:thread:list",
3094
+ "id": "compile:doc",
2991
3095
  "pluginAlias": "faces-cli",
2992
3096
  "pluginName": "faces-cli",
2993
3097
  "pluginType": "core",
@@ -2998,20 +3102,20 @@
2998
3102
  "dist",
2999
3103
  "commands",
3000
3104
  "compile",
3001
- "thread",
3002
- "list.js"
3105
+ "doc",
3106
+ "index.js"
3003
3107
  ]
3004
3108
  },
3005
- "compile:thread:message": {
3109
+ "compile:doc:list": {
3006
3110
  "aliases": [],
3007
3111
  "args": {
3008
- "thread_id": {
3009
- "description": "Thread ID",
3010
- "name": "thread_id",
3112
+ "face_id": {
3113
+ "description": "Face ID or username",
3114
+ "name": "face_id",
3011
3115
  "required": true
3012
3116
  }
3013
3117
  },
3014
- "description": "Send a user message to a thread",
3118
+ "description": "List documents for a face",
3015
3119
  "flags": {
3016
3120
  "json": {
3017
3121
  "description": "Format output as json.",
@@ -3043,20 +3147,11 @@
3043
3147
  "hasDynamicHelp": false,
3044
3148
  "multiple": false,
3045
3149
  "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"
3055
3150
  }
3056
3151
  },
3057
3152
  "hasDynamicHelp": false,
3058
3153
  "hiddenAliases": [],
3059
- "id": "compile:thread:message",
3154
+ "id": "compile:doc:list",
3060
3155
  "pluginAlias": "faces-cli",
3061
3156
  "pluginName": "faces-cli",
3062
3157
  "pluginType": "core",
@@ -3067,20 +3162,20 @@
3067
3162
  "dist",
3068
3163
  "commands",
3069
3164
  "compile",
3070
- "thread",
3071
- "message.js"
3165
+ "doc",
3166
+ "list.js"
3072
3167
  ]
3073
3168
  },
3074
- "compile:thread:sync": {
3169
+ "compile:doc:make": {
3075
3170
  "aliases": [],
3076
3171
  "args": {
3077
- "thread_id": {
3078
- "description": "Thread ID",
3079
- "name": "thread_id",
3172
+ "doc_id": {
3173
+ "description": "Document ID",
3174
+ "name": "doc_id",
3080
3175
  "required": true
3081
3176
  }
3082
3177
  },
3083
- "description": "Archive and sync a thread into a face",
3178
+ "description": "Compile an existing document (prepare + sync in one step)",
3084
3179
  "flags": {
3085
3180
  "json": {
3086
3181
  "description": "Format output as json.",
@@ -3112,11 +3207,19 @@
3112
3207
  "hasDynamicHelp": false,
3113
3208
  "multiple": false,
3114
3209
  "type": "option"
3210
+ },
3211
+ "timeout": {
3212
+ "description": "Compile timeout in seconds (default: 600)",
3213
+ "name": "timeout",
3214
+ "default": 600,
3215
+ "hasDynamicHelp": false,
3216
+ "multiple": false,
3217
+ "type": "option"
3115
3218
  }
3116
3219
  },
3117
3220
  "hasDynamicHelp": false,
3118
3221
  "hiddenAliases": [],
3119
- "id": "compile:thread:sync",
3222
+ "id": "compile:doc:make",
3120
3223
  "pluginAlias": "faces-cli",
3121
3224
  "pluginName": "faces-cli",
3122
3225
  "pluginType": "core",
@@ -3127,11 +3230,11 @@
3127
3230
  "dist",
3128
3231
  "commands",
3129
3232
  "compile",
3130
- "thread",
3131
- "sync.js"
3233
+ "doc",
3234
+ "make.js"
3132
3235
  ]
3133
3236
  },
3134
- "compile:doc:create": {
3237
+ "compile:thread:create": {
3135
3238
  "aliases": [],
3136
3239
  "args": {
3137
3240
  "face_id": {
@@ -3140,7 +3243,7 @@
3140
3243
  "required": true
3141
3244
  }
3142
3245
  },
3143
- "description": "Submit a document to a face",
3246
+ "description": "Start a new thread for a face",
3144
3247
  "flags": {
3145
3248
  "json": {
3146
3249
  "description": "Format output as json.",
@@ -3174,42 +3277,16 @@
3174
3277
  "type": "option"
3175
3278
  },
3176
3279
  "label": {
3177
- "description": "Document label/title",
3280
+ "description": "Thread label",
3178
3281
  "name": "label",
3179
3282
  "hasDynamicHelp": false,
3180
3283
  "multiple": false,
3181
3284
  "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"
3208
3285
  }
3209
3286
  },
3210
3287
  "hasDynamicHelp": false,
3211
3288
  "hiddenAliases": [],
3212
- "id": "compile:doc:create",
3289
+ "id": "compile:thread:create",
3213
3290
  "pluginAlias": "faces-cli",
3214
3291
  "pluginName": "faces-cli",
3215
3292
  "pluginType": "core",
@@ -3220,20 +3297,20 @@
3220
3297
  "dist",
3221
3298
  "commands",
3222
3299
  "compile",
3223
- "doc",
3300
+ "thread",
3224
3301
  "create.js"
3225
3302
  ]
3226
3303
  },
3227
- "compile:doc:delete": {
3304
+ "compile:thread:delete": {
3228
3305
  "aliases": [],
3229
3306
  "args": {
3230
- "doc_id": {
3231
- "description": "Document ID",
3232
- "name": "doc_id",
3307
+ "thread_id": {
3308
+ "description": "Thread ID",
3309
+ "name": "thread_id",
3233
3310
  "required": true
3234
3311
  }
3235
3312
  },
3236
- "description": "Delete a document",
3313
+ "description": "Delete a thread",
3237
3314
  "flags": {
3238
3315
  "json": {
3239
3316
  "description": "Format output as json.",
@@ -3265,11 +3342,17 @@
3265
3342
  "hasDynamicHelp": false,
3266
3343
  "multiple": false,
3267
3344
  "type": "option"
3345
+ },
3346
+ "yes": {
3347
+ "description": "Skip confirmation",
3348
+ "name": "yes",
3349
+ "allowNo": false,
3350
+ "type": "boolean"
3268
3351
  }
3269
3352
  },
3270
3353
  "hasDynamicHelp": false,
3271
3354
  "hiddenAliases": [],
3272
- "id": "compile:doc:delete",
3355
+ "id": "compile:thread:delete",
3273
3356
  "pluginAlias": "faces-cli",
3274
3357
  "pluginName": "faces-cli",
3275
3358
  "pluginType": "core",
@@ -3280,20 +3363,20 @@
3280
3363
  "dist",
3281
3364
  "commands",
3282
3365
  "compile",
3283
- "doc",
3366
+ "thread",
3284
3367
  "delete.js"
3285
3368
  ]
3286
3369
  },
3287
- "compile:doc:edit": {
3370
+ "compile:thread:edit": {
3288
3371
  "aliases": [],
3289
3372
  "args": {
3290
- "doc_id": {
3291
- "description": "Document ID",
3292
- "name": "doc_id",
3373
+ "thread_id": {
3374
+ "description": "Thread ID",
3375
+ "name": "thread_id",
3293
3376
  "required": true
3294
3377
  }
3295
3378
  },
3296
- "description": "Edit a document (label, content, or perspective)",
3379
+ "description": "Edit a thread (label)",
3297
3380
  "flags": {
3298
3381
  "json": {
3299
3382
  "description": "Format output as json.",
@@ -3327,41 +3410,17 @@
3327
3410
  "type": "option"
3328
3411
  },
3329
3412
  "label": {
3330
- "description": "New label/title",
3413
+ "description": "New thread label",
3331
3414
  "name": "label",
3415
+ "required": true,
3332
3416
  "hasDynamicHelp": false,
3333
3417
  "multiple": false,
3334
3418
  "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
3419
  }
3361
3420
  },
3362
3421
  "hasDynamicHelp": false,
3363
3422
  "hiddenAliases": [],
3364
- "id": "compile:doc:edit",
3423
+ "id": "compile:thread:edit",
3365
3424
  "pluginAlias": "faces-cli",
3366
3425
  "pluginName": "faces-cli",
3367
3426
  "pluginType": "core",
@@ -3372,20 +3431,20 @@
3372
3431
  "dist",
3373
3432
  "commands",
3374
3433
  "compile",
3375
- "doc",
3434
+ "thread",
3376
3435
  "edit.js"
3377
3436
  ]
3378
3437
  },
3379
- "compile:doc:get": {
3438
+ "compile:thread:get": {
3380
3439
  "aliases": [],
3381
3440
  "args": {
3382
- "doc_id": {
3383
- "description": "Document ID",
3384
- "name": "doc_id",
3441
+ "thread_id": {
3442
+ "description": "Thread ID",
3443
+ "name": "thread_id",
3385
3444
  "required": true
3386
3445
  }
3387
3446
  },
3388
- "description": "Get a document by ID",
3447
+ "description": "Get a thread by ID",
3389
3448
  "flags": {
3390
3449
  "json": {
3391
3450
  "description": "Format output as json.",
@@ -3421,7 +3480,7 @@
3421
3480
  },
3422
3481
  "hasDynamicHelp": false,
3423
3482
  "hiddenAliases": [],
3424
- "id": "compile:doc:get",
3483
+ "id": "compile:thread:get",
3425
3484
  "pluginAlias": "faces-cli",
3426
3485
  "pluginName": "faces-cli",
3427
3486
  "pluginType": "core",
@@ -3432,11 +3491,11 @@
3432
3491
  "dist",
3433
3492
  "commands",
3434
3493
  "compile",
3435
- "doc",
3494
+ "thread",
3436
3495
  "get.js"
3437
3496
  ]
3438
3497
  },
3439
- "compile:doc": {
3498
+ "compile:thread:list": {
3440
3499
  "aliases": [],
3441
3500
  "args": {
3442
3501
  "face_id": {
@@ -3445,7 +3504,7 @@
3445
3504
  "required": true
3446
3505
  }
3447
3506
  },
3448
- "description": "Compile a document into a face (create → make in one step)",
3507
+ "description": "List threads for a face",
3449
3508
  "flags": {
3450
3509
  "json": {
3451
3510
  "description": "Format output as json.",
@@ -3477,52 +3536,11 @@
3477
3536
  "hasDynamicHelp": false,
3478
3537
  "multiple": false,
3479
3538
  "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
3539
  }
3522
3540
  },
3523
3541
  "hasDynamicHelp": false,
3524
3542
  "hiddenAliases": [],
3525
- "id": "compile:doc",
3543
+ "id": "compile:thread:list",
3526
3544
  "pluginAlias": "faces-cli",
3527
3545
  "pluginName": "faces-cli",
3528
3546
  "pluginType": "core",
@@ -3533,20 +3551,20 @@
3533
3551
  "dist",
3534
3552
  "commands",
3535
3553
  "compile",
3536
- "doc",
3537
- "index.js"
3554
+ "thread",
3555
+ "list.js"
3538
3556
  ]
3539
3557
  },
3540
- "compile:doc:list": {
3558
+ "compile:thread:message": {
3541
3559
  "aliases": [],
3542
3560
  "args": {
3543
- "face_id": {
3544
- "description": "Face ID or username",
3545
- "name": "face_id",
3561
+ "thread_id": {
3562
+ "description": "Thread ID",
3563
+ "name": "thread_id",
3546
3564
  "required": true
3547
3565
  }
3548
3566
  },
3549
- "description": "List documents for a face",
3567
+ "description": "Send a user message to a thread",
3550
3568
  "flags": {
3551
3569
  "json": {
3552
3570
  "description": "Format output as json.",
@@ -3578,11 +3596,20 @@
3578
3596
  "hasDynamicHelp": false,
3579
3597
  "multiple": false,
3580
3598
  "type": "option"
3599
+ },
3600
+ "message": {
3601
+ "char": "m",
3602
+ "description": "User message to append",
3603
+ "name": "message",
3604
+ "required": true,
3605
+ "hasDynamicHelp": false,
3606
+ "multiple": false,
3607
+ "type": "option"
3581
3608
  }
3582
3609
  },
3583
3610
  "hasDynamicHelp": false,
3584
3611
  "hiddenAliases": [],
3585
- "id": "compile:doc:list",
3612
+ "id": "compile:thread:message",
3586
3613
  "pluginAlias": "faces-cli",
3587
3614
  "pluginName": "faces-cli",
3588
3615
  "pluginType": "core",
@@ -3593,20 +3620,20 @@
3593
3620
  "dist",
3594
3621
  "commands",
3595
3622
  "compile",
3596
- "doc",
3597
- "list.js"
3623
+ "thread",
3624
+ "message.js"
3598
3625
  ]
3599
3626
  },
3600
- "compile:doc:make": {
3627
+ "compile:thread:sync": {
3601
3628
  "aliases": [],
3602
3629
  "args": {
3603
- "doc_id": {
3604
- "description": "Document ID",
3605
- "name": "doc_id",
3630
+ "thread_id": {
3631
+ "description": "Thread ID",
3632
+ "name": "thread_id",
3606
3633
  "required": true
3607
3634
  }
3608
3635
  },
3609
- "description": "Compile an existing document (prepare + sync in one step)",
3636
+ "description": "Archive and sync a thread into a face",
3610
3637
  "flags": {
3611
3638
  "json": {
3612
3639
  "description": "Format output as json.",
@@ -3638,19 +3665,11 @@
3638
3665
  "hasDynamicHelp": false,
3639
3666
  "multiple": false,
3640
3667
  "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"
3649
3668
  }
3650
3669
  },
3651
3670
  "hasDynamicHelp": false,
3652
3671
  "hiddenAliases": [],
3653
- "id": "compile:doc:make",
3672
+ "id": "compile:thread:sync",
3654
3673
  "pluginAlias": "faces-cli",
3655
3674
  "pluginName": "faces-cli",
3656
3675
  "pluginType": "core",
@@ -3661,10 +3680,10 @@
3661
3680
  "dist",
3662
3681
  "commands",
3663
3682
  "compile",
3664
- "doc",
3665
- "make.js"
3683
+ "thread",
3684
+ "sync.js"
3666
3685
  ]
3667
3686
  }
3668
3687
  },
3669
- "version": "1.4.1"
3688
+ "version": "1.4.2"
3670
3689
  }