faces-cli 1.7.4 → 1.7.5

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.
@@ -2326,10 +2326,616 @@
2326
2326
  "show.js"
2327
2327
  ]
2328
2328
  },
2329
- "face:attributes": {
2329
+ "keys:create": {
2330
+ "aliases": [],
2331
+ "args": {},
2332
+ "description": "Create a new API key (JWT required). The new key is saved to ~/.faces/config.json as api_key by default; pass --no-save to skip.",
2333
+ "flags": {
2334
+ "json": {
2335
+ "description": "Format output as json.",
2336
+ "helpGroup": "GLOBAL",
2337
+ "name": "json",
2338
+ "allowNo": false,
2339
+ "type": "boolean"
2340
+ },
2341
+ "base-url": {
2342
+ "description": "API base URL",
2343
+ "env": "FACES_BASE_URL",
2344
+ "name": "base-url",
2345
+ "hasDynamicHelp": false,
2346
+ "multiple": false,
2347
+ "type": "option"
2348
+ },
2349
+ "token": {
2350
+ "description": "JWT bearer token",
2351
+ "env": "FACES_TOKEN",
2352
+ "name": "token",
2353
+ "hasDynamicHelp": false,
2354
+ "multiple": false,
2355
+ "type": "option"
2356
+ },
2357
+ "api-key": {
2358
+ "description": "API key",
2359
+ "env": "FACES_API_KEY",
2360
+ "name": "api-key",
2361
+ "hasDynamicHelp": false,
2362
+ "multiple": false,
2363
+ "type": "option"
2364
+ },
2365
+ "name": {
2366
+ "description": "Key name/label",
2367
+ "name": "name",
2368
+ "required": true,
2369
+ "hasDynamicHelp": false,
2370
+ "multiple": false,
2371
+ "type": "option"
2372
+ },
2373
+ "expires-days": {
2374
+ "description": "Expiry in days (omit for no expiry)",
2375
+ "name": "expires-days",
2376
+ "hasDynamicHelp": false,
2377
+ "multiple": false,
2378
+ "type": "option"
2379
+ },
2380
+ "budget": {
2381
+ "description": "Spend budget in USD",
2382
+ "name": "budget",
2383
+ "hasDynamicHelp": false,
2384
+ "multiple": false,
2385
+ "type": "option"
2386
+ },
2387
+ "face": {
2388
+ "description": "Allowed face alias (repeatable)",
2389
+ "name": "face",
2390
+ "hasDynamicHelp": false,
2391
+ "multiple": true,
2392
+ "type": "option"
2393
+ },
2394
+ "model": {
2395
+ "description": "Allowed model name (repeatable)",
2396
+ "name": "model",
2397
+ "hasDynamicHelp": false,
2398
+ "multiple": true,
2399
+ "type": "option"
2400
+ },
2401
+ "save": {
2402
+ "description": "Save the new key to ~/.faces/config.json as api_key (default: true; use --no-save to skip)",
2403
+ "name": "save",
2404
+ "allowNo": true,
2405
+ "type": "boolean"
2406
+ }
2407
+ },
2408
+ "hasDynamicHelp": false,
2409
+ "hiddenAliases": [],
2410
+ "id": "keys:create",
2411
+ "pluginAlias": "faces-cli",
2412
+ "pluginName": "faces-cli",
2413
+ "pluginType": "core",
2414
+ "strict": true,
2415
+ "enableJsonFlag": true,
2416
+ "isESM": true,
2417
+ "relativePath": [
2418
+ "dist",
2419
+ "commands",
2420
+ "keys",
2421
+ "create.js"
2422
+ ]
2423
+ },
2424
+ "keys:list": {
2425
+ "aliases": [],
2426
+ "args": {},
2427
+ "description": "List all API keys (JWT required)",
2428
+ "flags": {
2429
+ "json": {
2430
+ "description": "Format output as json.",
2431
+ "helpGroup": "GLOBAL",
2432
+ "name": "json",
2433
+ "allowNo": false,
2434
+ "type": "boolean"
2435
+ },
2436
+ "base-url": {
2437
+ "description": "API base URL",
2438
+ "env": "FACES_BASE_URL",
2439
+ "name": "base-url",
2440
+ "hasDynamicHelp": false,
2441
+ "multiple": false,
2442
+ "type": "option"
2443
+ },
2444
+ "token": {
2445
+ "description": "JWT bearer token",
2446
+ "env": "FACES_TOKEN",
2447
+ "name": "token",
2448
+ "hasDynamicHelp": false,
2449
+ "multiple": false,
2450
+ "type": "option"
2451
+ },
2452
+ "api-key": {
2453
+ "description": "API key",
2454
+ "env": "FACES_API_KEY",
2455
+ "name": "api-key",
2456
+ "hasDynamicHelp": false,
2457
+ "multiple": false,
2458
+ "type": "option"
2459
+ }
2460
+ },
2461
+ "hasDynamicHelp": false,
2462
+ "hiddenAliases": [],
2463
+ "id": "keys:list",
2464
+ "pluginAlias": "faces-cli",
2465
+ "pluginName": "faces-cli",
2466
+ "pluginType": "core",
2467
+ "strict": true,
2468
+ "enableJsonFlag": true,
2469
+ "isESM": true,
2470
+ "relativePath": [
2471
+ "dist",
2472
+ "commands",
2473
+ "keys",
2474
+ "list.js"
2475
+ ]
2476
+ },
2477
+ "keys:revoke": {
2478
+ "aliases": [],
2479
+ "args": {
2480
+ "key_id": {
2481
+ "description": "Key ID",
2482
+ "name": "key_id",
2483
+ "required": true
2484
+ }
2485
+ },
2486
+ "description": "Revoke an API key (JWT required)",
2487
+ "flags": {
2488
+ "json": {
2489
+ "description": "Format output as json.",
2490
+ "helpGroup": "GLOBAL",
2491
+ "name": "json",
2492
+ "allowNo": false,
2493
+ "type": "boolean"
2494
+ },
2495
+ "base-url": {
2496
+ "description": "API base URL",
2497
+ "env": "FACES_BASE_URL",
2498
+ "name": "base-url",
2499
+ "hasDynamicHelp": false,
2500
+ "multiple": false,
2501
+ "type": "option"
2502
+ },
2503
+ "token": {
2504
+ "description": "JWT bearer token",
2505
+ "env": "FACES_TOKEN",
2506
+ "name": "token",
2507
+ "hasDynamicHelp": false,
2508
+ "multiple": false,
2509
+ "type": "option"
2510
+ },
2511
+ "api-key": {
2512
+ "description": "API key",
2513
+ "env": "FACES_API_KEY",
2514
+ "name": "api-key",
2515
+ "hasDynamicHelp": false,
2516
+ "multiple": false,
2517
+ "type": "option"
2518
+ },
2519
+ "yes": {
2520
+ "description": "Skip confirmation",
2521
+ "name": "yes",
2522
+ "allowNo": false,
2523
+ "type": "boolean"
2524
+ }
2525
+ },
2526
+ "hasDynamicHelp": false,
2527
+ "hiddenAliases": [],
2528
+ "id": "keys:revoke",
2529
+ "pluginAlias": "faces-cli",
2530
+ "pluginName": "faces-cli",
2531
+ "pluginType": "core",
2532
+ "strict": true,
2533
+ "enableJsonFlag": true,
2534
+ "isESM": true,
2535
+ "relativePath": [
2536
+ "dist",
2537
+ "commands",
2538
+ "keys",
2539
+ "revoke.js"
2540
+ ]
2541
+ },
2542
+ "keys:update": {
2543
+ "aliases": [],
2544
+ "args": {
2545
+ "key_id": {
2546
+ "description": "Key ID",
2547
+ "name": "key_id",
2548
+ "required": true
2549
+ }
2550
+ },
2551
+ "description": "Update API key metadata (JWT required)",
2552
+ "flags": {
2553
+ "json": {
2554
+ "description": "Format output as json.",
2555
+ "helpGroup": "GLOBAL",
2556
+ "name": "json",
2557
+ "allowNo": false,
2558
+ "type": "boolean"
2559
+ },
2560
+ "base-url": {
2561
+ "description": "API base URL",
2562
+ "env": "FACES_BASE_URL",
2563
+ "name": "base-url",
2564
+ "hasDynamicHelp": false,
2565
+ "multiple": false,
2566
+ "type": "option"
2567
+ },
2568
+ "token": {
2569
+ "description": "JWT bearer token",
2570
+ "env": "FACES_TOKEN",
2571
+ "name": "token",
2572
+ "hasDynamicHelp": false,
2573
+ "multiple": false,
2574
+ "type": "option"
2575
+ },
2576
+ "api-key": {
2577
+ "description": "API key",
2578
+ "env": "FACES_API_KEY",
2579
+ "name": "api-key",
2580
+ "hasDynamicHelp": false,
2581
+ "multiple": false,
2582
+ "type": "option"
2583
+ },
2584
+ "name": {
2585
+ "description": "New key name",
2586
+ "name": "name",
2587
+ "hasDynamicHelp": false,
2588
+ "multiple": false,
2589
+ "type": "option"
2590
+ },
2591
+ "budget": {
2592
+ "description": "New spend budget in USD",
2593
+ "name": "budget",
2594
+ "hasDynamicHelp": false,
2595
+ "multiple": false,
2596
+ "type": "option"
2597
+ },
2598
+ "reset-spent": {
2599
+ "description": "Reset spent amount to zero",
2600
+ "name": "reset-spent",
2601
+ "allowNo": false,
2602
+ "type": "boolean"
2603
+ }
2604
+ },
2605
+ "hasDynamicHelp": false,
2606
+ "hiddenAliases": [],
2607
+ "id": "keys:update",
2608
+ "pluginAlias": "faces-cli",
2609
+ "pluginName": "faces-cli",
2610
+ "pluginType": "core",
2611
+ "strict": true,
2612
+ "enableJsonFlag": true,
2613
+ "isESM": true,
2614
+ "relativePath": [
2615
+ "dist",
2616
+ "commands",
2617
+ "keys",
2618
+ "update.js"
2619
+ ]
2620
+ },
2621
+ "team:add": {
2622
+ "aliases": [],
2623
+ "args": {
2624
+ "team_id": {
2625
+ "description": "Team ID",
2626
+ "name": "team_id",
2627
+ "required": true
2628
+ }
2629
+ },
2630
+ "description": "Add face(s) to a team",
2631
+ "flags": {
2632
+ "json": {
2633
+ "description": "Format output as json.",
2634
+ "helpGroup": "GLOBAL",
2635
+ "name": "json",
2636
+ "allowNo": false,
2637
+ "type": "boolean"
2638
+ },
2639
+ "base-url": {
2640
+ "description": "API base URL",
2641
+ "env": "FACES_BASE_URL",
2642
+ "name": "base-url",
2643
+ "hasDynamicHelp": false,
2644
+ "multiple": false,
2645
+ "type": "option"
2646
+ },
2647
+ "token": {
2648
+ "description": "JWT bearer token",
2649
+ "env": "FACES_TOKEN",
2650
+ "name": "token",
2651
+ "hasDynamicHelp": false,
2652
+ "multiple": false,
2653
+ "type": "option"
2654
+ },
2655
+ "api-key": {
2656
+ "description": "API key",
2657
+ "env": "FACES_API_KEY",
2658
+ "name": "api-key",
2659
+ "hasDynamicHelp": false,
2660
+ "multiple": false,
2661
+ "type": "option"
2662
+ },
2663
+ "face": {
2664
+ "description": "Face alias to add (repeatable)",
2665
+ "name": "face",
2666
+ "required": true,
2667
+ "hasDynamicHelp": false,
2668
+ "multiple": true,
2669
+ "type": "option"
2670
+ }
2671
+ },
2672
+ "hasDynamicHelp": false,
2673
+ "hiddenAliases": [],
2674
+ "id": "team:add",
2675
+ "pluginAlias": "faces-cli",
2676
+ "pluginName": "faces-cli",
2677
+ "pluginType": "core",
2678
+ "strict": true,
2679
+ "enableJsonFlag": true,
2680
+ "isESM": true,
2681
+ "relativePath": [
2682
+ "dist",
2683
+ "commands",
2684
+ "team",
2685
+ "add.js"
2686
+ ]
2687
+ },
2688
+ "team:create": {
2330
2689
  "aliases": [],
2331
2690
  "args": {},
2332
- "description": "List all supported attribute keys",
2691
+ "description": "Create a new team",
2692
+ "flags": {
2693
+ "json": {
2694
+ "description": "Format output as json.",
2695
+ "helpGroup": "GLOBAL",
2696
+ "name": "json",
2697
+ "allowNo": false,
2698
+ "type": "boolean"
2699
+ },
2700
+ "base-url": {
2701
+ "description": "API base URL",
2702
+ "env": "FACES_BASE_URL",
2703
+ "name": "base-url",
2704
+ "hasDynamicHelp": false,
2705
+ "multiple": false,
2706
+ "type": "option"
2707
+ },
2708
+ "token": {
2709
+ "description": "JWT bearer token",
2710
+ "env": "FACES_TOKEN",
2711
+ "name": "token",
2712
+ "hasDynamicHelp": false,
2713
+ "multiple": false,
2714
+ "type": "option"
2715
+ },
2716
+ "api-key": {
2717
+ "description": "API key",
2718
+ "env": "FACES_API_KEY",
2719
+ "name": "api-key",
2720
+ "hasDynamicHelp": false,
2721
+ "multiple": false,
2722
+ "type": "option"
2723
+ },
2724
+ "name": {
2725
+ "description": "Team name",
2726
+ "name": "name",
2727
+ "required": true,
2728
+ "hasDynamicHelp": false,
2729
+ "multiple": false,
2730
+ "type": "option"
2731
+ },
2732
+ "description": {
2733
+ "description": "Plain-text team description (max 1500 chars)",
2734
+ "name": "description",
2735
+ "hasDynamicHelp": false,
2736
+ "multiple": false,
2737
+ "type": "option"
2738
+ },
2739
+ "protocol": {
2740
+ "description": "Protocol content (mermaid diagram or markdown, max 1000 words)",
2741
+ "name": "protocol",
2742
+ "hasDynamicHelp": false,
2743
+ "multiple": false,
2744
+ "type": "option"
2745
+ },
2746
+ "protocol-file": {
2747
+ "description": "Read protocol from file",
2748
+ "name": "protocol-file",
2749
+ "hasDynamicHelp": false,
2750
+ "multiple": false,
2751
+ "type": "option"
2752
+ },
2753
+ "tag": {
2754
+ "description": "Tag label (repeatable, lowercase)",
2755
+ "name": "tag",
2756
+ "hasDynamicHelp": false,
2757
+ "multiple": true,
2758
+ "type": "option"
2759
+ }
2760
+ },
2761
+ "hasDynamicHelp": false,
2762
+ "hiddenAliases": [],
2763
+ "id": "team:create",
2764
+ "pluginAlias": "faces-cli",
2765
+ "pluginName": "faces-cli",
2766
+ "pluginType": "core",
2767
+ "strict": true,
2768
+ "enableJsonFlag": true,
2769
+ "isESM": true,
2770
+ "relativePath": [
2771
+ "dist",
2772
+ "commands",
2773
+ "team",
2774
+ "create.js"
2775
+ ]
2776
+ },
2777
+ "team:delete": {
2778
+ "aliases": [],
2779
+ "args": {
2780
+ "team_id": {
2781
+ "description": "Team ID",
2782
+ "name": "team_id",
2783
+ "required": true
2784
+ }
2785
+ },
2786
+ "description": "Delete a team",
2787
+ "flags": {
2788
+ "json": {
2789
+ "description": "Format output as json.",
2790
+ "helpGroup": "GLOBAL",
2791
+ "name": "json",
2792
+ "allowNo": false,
2793
+ "type": "boolean"
2794
+ },
2795
+ "base-url": {
2796
+ "description": "API base URL",
2797
+ "env": "FACES_BASE_URL",
2798
+ "name": "base-url",
2799
+ "hasDynamicHelp": false,
2800
+ "multiple": false,
2801
+ "type": "option"
2802
+ },
2803
+ "token": {
2804
+ "description": "JWT bearer token",
2805
+ "env": "FACES_TOKEN",
2806
+ "name": "token",
2807
+ "hasDynamicHelp": false,
2808
+ "multiple": false,
2809
+ "type": "option"
2810
+ },
2811
+ "api-key": {
2812
+ "description": "API key",
2813
+ "env": "FACES_API_KEY",
2814
+ "name": "api-key",
2815
+ "hasDynamicHelp": false,
2816
+ "multiple": false,
2817
+ "type": "option"
2818
+ },
2819
+ "yes": {
2820
+ "description": "Skip confirmation",
2821
+ "name": "yes",
2822
+ "allowNo": false,
2823
+ "type": "boolean"
2824
+ }
2825
+ },
2826
+ "hasDynamicHelp": false,
2827
+ "hiddenAliases": [],
2828
+ "id": "team:delete",
2829
+ "pluginAlias": "faces-cli",
2830
+ "pluginName": "faces-cli",
2831
+ "pluginType": "core",
2832
+ "strict": true,
2833
+ "enableJsonFlag": true,
2834
+ "isESM": true,
2835
+ "relativePath": [
2836
+ "dist",
2837
+ "commands",
2838
+ "team",
2839
+ "delete.js"
2840
+ ]
2841
+ },
2842
+ "team:edit": {
2843
+ "aliases": [],
2844
+ "args": {
2845
+ "team_id": {
2846
+ "description": "Team ID",
2847
+ "name": "team_id",
2848
+ "required": true
2849
+ }
2850
+ },
2851
+ "description": "Edit a team",
2852
+ "flags": {
2853
+ "json": {
2854
+ "description": "Format output as json.",
2855
+ "helpGroup": "GLOBAL",
2856
+ "name": "json",
2857
+ "allowNo": false,
2858
+ "type": "boolean"
2859
+ },
2860
+ "base-url": {
2861
+ "description": "API base URL",
2862
+ "env": "FACES_BASE_URL",
2863
+ "name": "base-url",
2864
+ "hasDynamicHelp": false,
2865
+ "multiple": false,
2866
+ "type": "option"
2867
+ },
2868
+ "token": {
2869
+ "description": "JWT bearer token",
2870
+ "env": "FACES_TOKEN",
2871
+ "name": "token",
2872
+ "hasDynamicHelp": false,
2873
+ "multiple": false,
2874
+ "type": "option"
2875
+ },
2876
+ "api-key": {
2877
+ "description": "API key",
2878
+ "env": "FACES_API_KEY",
2879
+ "name": "api-key",
2880
+ "hasDynamicHelp": false,
2881
+ "multiple": false,
2882
+ "type": "option"
2883
+ },
2884
+ "name": {
2885
+ "description": "New team name",
2886
+ "name": "name",
2887
+ "hasDynamicHelp": false,
2888
+ "multiple": false,
2889
+ "type": "option"
2890
+ },
2891
+ "description": {
2892
+ "description": "New description (max 1500 chars)",
2893
+ "name": "description",
2894
+ "hasDynamicHelp": false,
2895
+ "multiple": false,
2896
+ "type": "option"
2897
+ },
2898
+ "protocol": {
2899
+ "description": "New protocol content",
2900
+ "name": "protocol",
2901
+ "hasDynamicHelp": false,
2902
+ "multiple": false,
2903
+ "type": "option"
2904
+ },
2905
+ "protocol-file": {
2906
+ "description": "Read protocol from file",
2907
+ "name": "protocol-file",
2908
+ "hasDynamicHelp": false,
2909
+ "multiple": false,
2910
+ "type": "option"
2911
+ }
2912
+ },
2913
+ "hasDynamicHelp": false,
2914
+ "hiddenAliases": [],
2915
+ "id": "team:edit",
2916
+ "pluginAlias": "faces-cli",
2917
+ "pluginName": "faces-cli",
2918
+ "pluginType": "core",
2919
+ "strict": true,
2920
+ "enableJsonFlag": true,
2921
+ "isESM": true,
2922
+ "relativePath": [
2923
+ "dist",
2924
+ "commands",
2925
+ "team",
2926
+ "edit.js"
2927
+ ]
2928
+ },
2929
+ "team:get": {
2930
+ "aliases": [],
2931
+ "args": {
2932
+ "team_id": {
2933
+ "description": "Team ID",
2934
+ "name": "team_id",
2935
+ "required": true
2936
+ }
2937
+ },
2938
+ "description": "Get a team by ID",
2333
2939
  "flags": {
2334
2940
  "json": {
2335
2941
  "description": "Format output as json.",
@@ -2365,7 +2971,7 @@
2365
2971
  },
2366
2972
  "hasDynamicHelp": false,
2367
2973
  "hiddenAliases": [],
2368
- "id": "face:attributes",
2974
+ "id": "team:get",
2369
2975
  "pluginAlias": "faces-cli",
2370
2976
  "pluginName": "faces-cli",
2371
2977
  "pluginType": "core",
@@ -2375,14 +2981,14 @@
2375
2981
  "relativePath": [
2376
2982
  "dist",
2377
2983
  "commands",
2378
- "face",
2379
- "attributes.js"
2984
+ "team",
2985
+ "get.js"
2380
2986
  ]
2381
2987
  },
2382
- "face:create": {
2988
+ "team:list": {
2383
2989
  "aliases": [],
2384
2990
  "args": {},
2385
- "description": "Create a new face",
2991
+ "description": "List your teams",
2386
2992
  "flags": {
2387
2993
  "json": {
2388
2994
  "description": "Format output as json.",
@@ -2414,78 +3020,62 @@
2414
3020
  "hasDynamicHelp": false,
2415
3021
  "multiple": false,
2416
3022
  "type": "option"
3023
+ }
3024
+ },
3025
+ "hasDynamicHelp": false,
3026
+ "hiddenAliases": [],
3027
+ "id": "team:list",
3028
+ "pluginAlias": "faces-cli",
3029
+ "pluginName": "faces-cli",
3030
+ "pluginType": "core",
3031
+ "strict": true,
3032
+ "enableJsonFlag": true,
3033
+ "isESM": true,
3034
+ "relativePath": [
3035
+ "dist",
3036
+ "commands",
3037
+ "team",
3038
+ "list.js"
3039
+ ]
3040
+ },
3041
+ "team:members": {
3042
+ "aliases": [],
3043
+ "args": {
3044
+ "team_id": {
3045
+ "description": "Team ID",
3046
+ "name": "team_id",
3047
+ "required": true
3048
+ }
3049
+ },
3050
+ "description": "List members of a team",
3051
+ "flags": {
3052
+ "json": {
3053
+ "description": "Format output as json.",
3054
+ "helpGroup": "GLOBAL",
3055
+ "name": "json",
3056
+ "allowNo": false,
3057
+ "type": "boolean"
2417
3058
  },
2418
- "name": {
2419
- "description": "Display name",
2420
- "name": "name",
2421
- "required": true,
2422
- "hasDynamicHelp": false,
2423
- "multiple": false,
2424
- "type": "option"
2425
- },
2426
- "alias": {
2427
- "description": "Unique alias slug",
2428
- "name": "alias",
2429
- "required": true,
2430
- "hasDynamicHelp": false,
2431
- "multiple": false,
2432
- "type": "option"
2433
- },
2434
- "description": {
2435
- "description": "Plain-text description / bio (max 1500 chars)",
2436
- "name": "description",
2437
- "hasDynamicHelp": false,
2438
- "multiple": false,
2439
- "type": "option"
2440
- },
2441
- "tag": {
2442
- "description": "Tag label (repeatable, lowercase)",
2443
- "name": "tag",
2444
- "hasDynamicHelp": false,
2445
- "multiple": true,
2446
- "type": "option"
2447
- },
2448
- "default-model": {
2449
- "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
2450
- "name": "default-model",
2451
- "hasDynamicHelp": false,
2452
- "multiple": false,
2453
- "type": "option"
2454
- },
2455
- "formula": {
2456
- "description": "Boolean formula over owned concrete face aliases (e.g. \"a | b\", \"(a | b) - c\"). Creates a composite face.",
2457
- "name": "formula",
3059
+ "base-url": {
3060
+ "description": "API base URL",
3061
+ "env": "FACES_BASE_URL",
3062
+ "name": "base-url",
2458
3063
  "hasDynamicHelp": false,
2459
3064
  "multiple": false,
2460
3065
  "type": "option"
2461
3066
  },
2462
- "attr": {
2463
- "description": "Attribute KEY=VALUE (repeatable)",
2464
- "name": "attr",
2465
- "hasDynamicHelp": false,
2466
- "multiple": true,
2467
- "type": "option"
2468
- },
2469
- "tool": {
2470
- "description": "Tool name to enable (repeatable)",
2471
- "name": "tool",
2472
- "hasDynamicHelp": false,
2473
- "multiple": true,
2474
- "type": "option"
2475
- },
2476
- "profile-addendum": {
2477
- "description": "Per-face system prompt, injected after the persona profile and before any per-request system prompt (max 100,000 chars).",
2478
- "name": "profile-addendum",
3067
+ "token": {
3068
+ "description": "JWT bearer token",
3069
+ "env": "FACES_TOKEN",
3070
+ "name": "token",
2479
3071
  "hasDynamicHelp": false,
2480
3072
  "multiple": false,
2481
3073
  "type": "option"
2482
3074
  },
2483
- "profile-addendum-file": {
2484
- "description": "Read the per-face system prompt from a file (alternative to --profile-addendum).",
2485
- "exclusive": [
2486
- "profile-addendum"
2487
- ],
2488
- "name": "profile-addendum-file",
3075
+ "api-key": {
3076
+ "description": "API key",
3077
+ "env": "FACES_API_KEY",
3078
+ "name": "api-key",
2489
3079
  "hasDynamicHelp": false,
2490
3080
  "multiple": false,
2491
3081
  "type": "option"
@@ -2493,7 +3083,7 @@
2493
3083
  },
2494
3084
  "hasDynamicHelp": false,
2495
3085
  "hiddenAliases": [],
2496
- "id": "face:create",
3086
+ "id": "team:members",
2497
3087
  "pluginAlias": "faces-cli",
2498
3088
  "pluginName": "faces-cli",
2499
3089
  "pluginType": "core",
@@ -2503,20 +3093,25 @@
2503
3093
  "relativePath": [
2504
3094
  "dist",
2505
3095
  "commands",
2506
- "face",
2507
- "create.js"
3096
+ "team",
3097
+ "members.js"
2508
3098
  ]
2509
3099
  },
2510
- "face:delete": {
3100
+ "team:remove": {
2511
3101
  "aliases": [],
2512
3102
  "args": {
2513
- "face_id": {
2514
- "description": "Face alias",
2515
- "name": "face_id",
3103
+ "team_id": {
3104
+ "description": "Team ID",
3105
+ "name": "team_id",
3106
+ "required": true
3107
+ },
3108
+ "alias": {
3109
+ "description": "Face alias to remove",
3110
+ "name": "alias",
2516
3111
  "required": true
2517
3112
  }
2518
3113
  },
2519
- "description": "Delete a face permanently",
3114
+ "description": "Remove a face from a team",
2520
3115
  "flags": {
2521
3116
  "json": {
2522
3117
  "description": "Format output as json.",
@@ -2548,17 +3143,11 @@
2548
3143
  "hasDynamicHelp": false,
2549
3144
  "multiple": false,
2550
3145
  "type": "option"
2551
- },
2552
- "yes": {
2553
- "description": "Skip confirmation",
2554
- "name": "yes",
2555
- "allowNo": false,
2556
- "type": "boolean"
2557
3146
  }
2558
3147
  },
2559
3148
  "hasDynamicHelp": false,
2560
3149
  "hiddenAliases": [],
2561
- "id": "face:delete",
3150
+ "id": "team:remove",
2562
3151
  "pluginAlias": "faces-cli",
2563
3152
  "pluginName": "faces-cli",
2564
3153
  "pluginType": "core",
@@ -2568,14 +3157,23 @@
2568
3157
  "relativePath": [
2569
3158
  "dist",
2570
3159
  "commands",
2571
- "face",
2572
- "delete.js"
3160
+ "team",
3161
+ "remove.js"
2573
3162
  ]
2574
3163
  },
2575
- "face:diff": {
3164
+ "voiceprint:build-status": {
2576
3165
  "aliases": [],
2577
- "args": {},
2578
- "description": "Compare owned faces pairwise across all centroid components",
3166
+ "args": {
3167
+ "job_id": {
3168
+ "description": "Build job id",
3169
+ "name": "job_id",
3170
+ "required": true
3171
+ }
3172
+ },
3173
+ "description": "Get the status/result of a voiceprint build job (from voiceprint:build without --wait)",
3174
+ "examples": [
3175
+ "<%= config.bin %> <%= command.id %> 4e13bf03-fbc1-4ad0-92ae-16984e2f9a1d"
3176
+ ],
2579
3177
  "flags": {
2580
3178
  "json": {
2581
3179
  "description": "Format output as json.",
@@ -2607,19 +3205,11 @@
2607
3205
  "hasDynamicHelp": false,
2608
3206
  "multiple": false,
2609
3207
  "type": "option"
2610
- },
2611
- "face": {
2612
- "description": "Face alias to include (repeatable, min 2)",
2613
- "name": "face",
2614
- "required": true,
2615
- "hasDynamicHelp": false,
2616
- "multiple": true,
2617
- "type": "option"
2618
3208
  }
2619
3209
  },
2620
3210
  "hasDynamicHelp": false,
2621
3211
  "hiddenAliases": [],
2622
- "id": "face:diff",
3212
+ "id": "voiceprint:build-status",
2623
3213
  "pluginAlias": "faces-cli",
2624
3214
  "pluginName": "faces-cli",
2625
3215
  "pluginType": "core",
@@ -2629,20 +3219,24 @@
2629
3219
  "relativePath": [
2630
3220
  "dist",
2631
3221
  "commands",
2632
- "face",
2633
- "diff.js"
3222
+ "voiceprint",
3223
+ "build-status.js"
2634
3224
  ]
2635
3225
  },
2636
- "face:edit": {
3226
+ "voiceprint:build": {
2637
3227
  "aliases": [],
2638
3228
  "args": {
2639
- "face_id": {
2640
- "description": "Face alias",
2641
- "name": "face_id",
3229
+ "self_alias": {
3230
+ "description": "Self face alias",
3231
+ "name": "self_alias",
2642
3232
  "required": true
2643
3233
  }
2644
3234
  },
2645
- "description": "Edit a face's metadata",
3235
+ "description": "Build a self face's voice map from its uploaded corpus. Auto-creates the hidden <self>-voiceprint face and installs the map. Async — use --wait to block.",
3236
+ "examples": [
3237
+ "<%= config.bin %> <%= command.id %> alice --wait",
3238
+ "<%= config.bin %> <%= command.id %> alice --holdout-count 120 --oauth-only --wait"
3239
+ ],
2646
3240
  "flags": {
2647
3241
  "json": {
2648
3242
  "description": "Format output as json.",
@@ -2675,86 +3269,43 @@
2675
3269
  "multiple": false,
2676
3270
  "type": "option"
2677
3271
  },
2678
- "name": {
2679
- "description": "New display name",
2680
- "name": "name",
2681
- "hasDynamicHelp": false,
2682
- "multiple": false,
2683
- "type": "option"
2684
- },
2685
- "description": {
2686
- "description": "Plain-text description / bio (max 1500 chars)",
2687
- "name": "description",
2688
- "hasDynamicHelp": false,
2689
- "multiple": false,
2690
- "type": "option"
2691
- },
2692
- "tag": {
2693
- "description": "Replace all tags (repeatable, lowercase)",
2694
- "name": "tag",
2695
- "hasDynamicHelp": false,
2696
- "multiple": true,
2697
- "type": "option"
2698
- },
2699
- "default-model": {
2700
- "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
2701
- "name": "default-model",
3272
+ "model": {
3273
+ "description": "Model that forges the voice map (default: gpt-5.4)",
3274
+ "name": "model",
2702
3275
  "hasDynamicHelp": false,
2703
3276
  "multiple": false,
2704
3277
  "type": "option"
2705
3278
  },
2706
- "formula": {
2707
- "description": "New boolean formula (synthetic faces only)",
2708
- "name": "formula",
3279
+ "holdout-count": {
3280
+ "description": "Stratified scoring holdout size (default: 120)",
3281
+ "name": "holdout-count",
2709
3282
  "hasDynamicHelp": false,
2710
3283
  "multiple": false,
2711
3284
  "type": "option"
2712
3285
  },
2713
- "attr": {
2714
- "description": "Update attribute KEY=VALUE (repeatable)",
2715
- "name": "attr",
2716
- "hasDynamicHelp": false,
2717
- "multiple": true,
2718
- "type": "option"
2719
- },
2720
- "tool": {
2721
- "description": "Tool names to set (replaces list, repeatable)",
2722
- "name": "tool",
2723
- "hasDynamicHelp": false,
2724
- "multiple": true,
2725
- "type": "option"
2726
- },
2727
- "profile-addendum": {
2728
- "description": "Replace the per-face system prompt (max 100,000 chars).",
2729
- "name": "profile-addendum",
3286
+ "min-valid": {
3287
+ "description": "Corpus floor below which no holdout is split — train on all (default: 550)",
3288
+ "name": "min-valid",
2730
3289
  "hasDynamicHelp": false,
2731
3290
  "multiple": false,
2732
3291
  "type": "option"
2733
3292
  },
2734
- "profile-addendum-file": {
2735
- "description": "Replace the per-face system prompt from a file.",
2736
- "exclusive": [
2737
- "profile-addendum"
2738
- ],
2739
- "name": "profile-addendum-file",
2740
- "hasDynamicHelp": false,
2741
- "multiple": false,
2742
- "type": "option"
3293
+ "oauth-only": {
3294
+ "description": "Only run on a free (OAuth) route; never fall back to billed inference",
3295
+ "name": "oauth-only",
3296
+ "allowNo": false,
3297
+ "type": "boolean"
2743
3298
  },
2744
- "clear-profile-addendum": {
2745
- "description": "Remove the per-face system prompt.",
2746
- "exclusive": [
2747
- "profile-addendum",
2748
- "profile-addendum-file"
2749
- ],
2750
- "name": "clear-profile-addendum",
3299
+ "wait": {
3300
+ "description": "Block and poll until the build finishes (default: print the job_id and return)",
3301
+ "name": "wait",
2751
3302
  "allowNo": false,
2752
3303
  "type": "boolean"
2753
3304
  }
2754
3305
  },
2755
3306
  "hasDynamicHelp": false,
2756
3307
  "hiddenAliases": [],
2757
- "id": "face:edit",
3308
+ "id": "voiceprint:build",
2758
3309
  "pluginAlias": "faces-cli",
2759
3310
  "pluginName": "faces-cli",
2760
3311
  "pluginType": "core",
@@ -2764,20 +3315,23 @@
2764
3315
  "relativePath": [
2765
3316
  "dist",
2766
3317
  "commands",
2767
- "face",
2768
- "edit.js"
3318
+ "voiceprint",
3319
+ "build.js"
2769
3320
  ]
2770
3321
  },
2771
- "face:get": {
3322
+ "voiceprint:get": {
2772
3323
  "aliases": [],
2773
- "args": {
2774
- "face_id": {
2775
- "description": "Face alias",
2776
- "name": "face_id",
3324
+ "args": {
3325
+ "job_id": {
3326
+ "description": "Scoring job id (from voiceprint:score --no-wait)",
3327
+ "name": "job_id",
2777
3328
  "required": true
2778
3329
  }
2779
3330
  },
2780
- "description": "Get details for a face by alias",
3331
+ "description": "Get the status/result of a voiceprint scoring job started with voiceprint:score --no-wait",
3332
+ "examples": [
3333
+ "<%= config.bin %> <%= command.id %> 4e13bf03-fbc1-4ad0-92ae-16984e2f9a1d"
3334
+ ],
2781
3335
  "flags": {
2782
3336
  "json": {
2783
3337
  "description": "Format output as json.",
@@ -2809,24 +3363,11 @@
2809
3363
  "hasDynamicHelp": false,
2810
3364
  "multiple": false,
2811
3365
  "type": "option"
2812
- },
2813
- "include": {
2814
- "description": "Include extra fields: tags, teams (comma-separated)",
2815
- "name": "include",
2816
- "hasDynamicHelp": false,
2817
- "multiple": false,
2818
- "type": "option"
2819
- },
2820
- "full": {
2821
- "description": "Print the full profile_addendum instead of a truncated preview",
2822
- "name": "full",
2823
- "allowNo": false,
2824
- "type": "boolean"
2825
3366
  }
2826
3367
  },
2827
3368
  "hasDynamicHelp": false,
2828
3369
  "hiddenAliases": [],
2829
- "id": "face:get",
3370
+ "id": "voiceprint:get",
2830
3371
  "pluginAlias": "faces-cli",
2831
3372
  "pluginName": "faces-cli",
2832
3373
  "pluginType": "core",
@@ -2836,14 +3377,23 @@
2836
3377
  "relativePath": [
2837
3378
  "dist",
2838
3379
  "commands",
2839
- "face",
3380
+ "voiceprint",
2840
3381
  "get.js"
2841
3382
  ]
2842
3383
  },
2843
- "face:list": {
3384
+ "voiceprint:refine-status": {
2844
3385
  "aliases": [],
2845
- "args": {},
2846
- "description": "List faces. By default lists owned faces; use --public to include published faces from other accounts.",
3386
+ "args": {
3387
+ "job_id": {
3388
+ "description": "Refine job id",
3389
+ "name": "job_id",
3390
+ "required": true
3391
+ }
3392
+ },
3393
+ "description": "Get the status/result of a voiceprint refine job (from voiceprint:refine without --wait)",
3394
+ "examples": [
3395
+ "<%= config.bin %> <%= command.id %> 4e13bf03-fbc1-4ad0-92ae-16984e2f9a1d"
3396
+ ],
2847
3397
  "flags": {
2848
3398
  "json": {
2849
3399
  "description": "Format output as json.",
@@ -2875,58 +3425,11 @@
2875
3425
  "hasDynamicHelp": false,
2876
3426
  "multiple": false,
2877
3427
  "type": "option"
2878
- },
2879
- "tag": {
2880
- "description": "Filter by tag (repeatable, AND logic)",
2881
- "name": "tag",
2882
- "hasDynamicHelp": false,
2883
- "multiple": true,
2884
- "type": "option"
2885
- },
2886
- "team": {
2887
- "description": "Filter by team ID (repeatable, OR logic)",
2888
- "name": "team",
2889
- "hasDynamicHelp": false,
2890
- "multiple": true,
2891
- "type": "option"
2892
- },
2893
- "include": {
2894
- "description": "Include extra fields: tags, teams (comma-separated)",
2895
- "name": "include",
2896
- "hasDynamicHelp": false,
2897
- "multiple": false,
2898
- "type": "option"
2899
- },
2900
- "public": {
2901
- "description": "Include published faces from other accounts",
2902
- "name": "public",
2903
- "allowNo": false,
2904
- "type": "boolean"
2905
- },
2906
- "system": {
2907
- "description": "Show only the curated system faces (published faces owned by 'head')",
2908
- "name": "system",
2909
- "allowNo": false,
2910
- "type": "boolean"
2911
- },
2912
- "from-users": {
2913
- "description": "Only published faces from these owners (repeatable/comma-separated)",
2914
- "name": "from-users",
2915
- "hasDynamicHelp": false,
2916
- "multiple": true,
2917
- "type": "option"
2918
- },
2919
- "not-from-users": {
2920
- "description": "Exclude published faces from these owners (repeatable/comma-separated)",
2921
- "name": "not-from-users",
2922
- "hasDynamicHelp": false,
2923
- "multiple": true,
2924
- "type": "option"
2925
3428
  }
2926
3429
  },
2927
3430
  "hasDynamicHelp": false,
2928
3431
  "hiddenAliases": [],
2929
- "id": "face:list",
3432
+ "id": "voiceprint:refine-status",
2930
3433
  "pluginAlias": "faces-cli",
2931
3434
  "pluginName": "faces-cli",
2932
3435
  "pluginType": "core",
@@ -2936,20 +3439,24 @@
2936
3439
  "relativePath": [
2937
3440
  "dist",
2938
3441
  "commands",
2939
- "face",
2940
- "list.js"
3442
+ "voiceprint",
3443
+ "refine-status.js"
2941
3444
  ]
2942
3445
  },
2943
- "face:neighbors": {
3446
+ "voiceprint:refine": {
2944
3447
  "aliases": [],
2945
3448
  "args": {
2946
- "face_id": {
2947
- "description": "Face alias",
2948
- "name": "face_id",
3449
+ "self_alias": {
3450
+ "description": "Self face alias",
3451
+ "name": "self_alias",
2949
3452
  "required": true
2950
3453
  }
2951
3454
  },
2952
- "description": "Find the most similar or dissimilar owned faces to a given face",
3455
+ "description": "Tune the active version's post-processing recipe and promote it only if it beats the current one. Requires an existing build with a holdout ≥ 20. Undo with voiceprint:revert.",
3456
+ "examples": [
3457
+ "<%= config.bin %> <%= command.id %> alice --wait",
3458
+ "<%= config.bin %> <%= command.id %> alice --temperature 0.4 --n-samples 6 --wait"
3459
+ ],
2953
3460
  "flags": {
2954
3461
  "json": {
2955
3462
  "description": "Format output as json.",
@@ -2982,44 +3489,43 @@
2982
3489
  "multiple": false,
2983
3490
  "type": "option"
2984
3491
  },
2985
- "k": {
2986
- "description": "Number of results (1–20)",
2987
- "name": "k",
2988
- "default": 5,
3492
+ "model": {
3493
+ "description": "Model used to forge candidate drafts (default: the active version's build model)",
3494
+ "name": "model",
2989
3495
  "hasDynamicHelp": false,
2990
3496
  "multiple": false,
2991
3497
  "type": "option"
2992
3498
  },
2993
- "component": {
2994
- "description": "Centroid component to rank on (beta, delta, epsilon are the principal components of a face; face is their composite)",
2995
- "name": "component",
2996
- "default": "face",
3499
+ "temperature": {
3500
+ "description": "Sampling temperature for candidate drafts (default: 0.4)",
3501
+ "name": "temperature",
2997
3502
  "hasDynamicHelp": false,
2998
3503
  "multiple": false,
2999
- "options": [
3000
- "face",
3001
- "beta",
3002
- "delta",
3003
- "epsilon"
3004
- ],
3005
3504
  "type": "option"
3006
3505
  },
3007
- "direction": {
3008
- "description": "nearest (most similar) or furthest (most dissimilar)",
3009
- "name": "direction",
3010
- "default": "nearest",
3506
+ "n-samples": {
3507
+ "description": "Drafts forged per holdout pair (default: 6)",
3508
+ "name": "n-samples",
3011
3509
  "hasDynamicHelp": false,
3012
3510
  "multiple": false,
3013
- "options": [
3014
- "nearest",
3015
- "furthest"
3016
- ],
3017
3511
  "type": "option"
3512
+ },
3513
+ "oauth-only": {
3514
+ "description": "Only run on a free (OAuth) route; never fall back to billed inference",
3515
+ "name": "oauth-only",
3516
+ "allowNo": false,
3517
+ "type": "boolean"
3518
+ },
3519
+ "wait": {
3520
+ "description": "Block and poll until refine finishes (default: print the job_id and return)",
3521
+ "name": "wait",
3522
+ "allowNo": false,
3523
+ "type": "boolean"
3018
3524
  }
3019
3525
  },
3020
3526
  "hasDynamicHelp": false,
3021
3527
  "hiddenAliases": [],
3022
- "id": "face:neighbors",
3528
+ "id": "voiceprint:refine",
3023
3529
  "pluginAlias": "faces-cli",
3024
3530
  "pluginName": "faces-cli",
3025
3531
  "pluginType": "core",
@@ -3029,14 +3535,23 @@
3029
3535
  "relativePath": [
3030
3536
  "dist",
3031
3537
  "commands",
3032
- "face",
3033
- "neighbors.js"
3538
+ "voiceprint",
3539
+ "refine.js"
3034
3540
  ]
3035
3541
  },
3036
- "face:stats": {
3542
+ "voiceprint:revert": {
3037
3543
  "aliases": [],
3038
- "args": {},
3039
- "description": "Compile and chat stats for all owned faces",
3544
+ "args": {
3545
+ "self_alias": {
3546
+ "description": "Self face alias",
3547
+ "name": "self_alias",
3548
+ "required": true
3549
+ }
3550
+ },
3551
+ "description": "Revert a self face's voice map to its prior version (one-deep undo; re-running toggles back). Only changes which stored recipe/baseline is active — the map text is frozen.",
3552
+ "examples": [
3553
+ "<%= config.bin %> <%= command.id %> alice"
3554
+ ],
3040
3555
  "flags": {
3041
3556
  "json": {
3042
3557
  "description": "Format output as json.",
@@ -3072,7 +3587,7 @@
3072
3587
  },
3073
3588
  "hasDynamicHelp": false,
3074
3589
  "hiddenAliases": [],
3075
- "id": "face:stats",
3590
+ "id": "voiceprint:revert",
3076
3591
  "pluginAlias": "faces-cli",
3077
3592
  "pluginName": "faces-cli",
3078
3593
  "pluginType": "core",
@@ -3082,20 +3597,23 @@
3082
3597
  "relativePath": [
3083
3598
  "dist",
3084
3599
  "commands",
3085
- "face",
3086
- "stats.js"
3600
+ "voiceprint",
3601
+ "revert.js"
3087
3602
  ]
3088
3603
  },
3089
- "face:teams": {
3604
+ "voiceprint:score-status": {
3090
3605
  "aliases": [],
3091
3606
  "args": {
3092
- "alias": {
3093
- "description": "Face alias",
3094
- "name": "alias",
3607
+ "job_id": {
3608
+ "description": "Scoring job id",
3609
+ "name": "job_id",
3095
3610
  "required": true
3096
3611
  }
3097
3612
  },
3098
- "description": "Set a face's team memberships (replaces all)",
3613
+ "description": "Get the status/result of a voiceprint scoring job (from voiceprint:score without --wait)",
3614
+ "examples": [
3615
+ "<%= config.bin %> <%= command.id %> 4e13bf03-fbc1-4ad0-92ae-16984e2f9a1d"
3616
+ ],
3099
3617
  "flags": {
3100
3618
  "json": {
3101
3619
  "description": "Format output as json.",
@@ -3127,19 +3645,11 @@
3127
3645
  "hasDynamicHelp": false,
3128
3646
  "multiple": false,
3129
3647
  "type": "option"
3130
- },
3131
- "team": {
3132
- "description": "Team ID (repeatable, replaces all memberships)",
3133
- "name": "team",
3134
- "required": true,
3135
- "hasDynamicHelp": false,
3136
- "multiple": true,
3137
- "type": "option"
3138
3648
  }
3139
3649
  },
3140
3650
  "hasDynamicHelp": false,
3141
3651
  "hiddenAliases": [],
3142
- "id": "face:teams",
3652
+ "id": "voiceprint:score-status",
3143
3653
  "pluginAlias": "faces-cli",
3144
3654
  "pluginName": "faces-cli",
3145
3655
  "pluginType": "core",
@@ -3149,20 +3659,25 @@
3149
3659
  "relativePath": [
3150
3660
  "dist",
3151
3661
  "commands",
3152
- "face",
3153
- "teams.js"
3662
+ "voiceprint",
3663
+ "score-status.js"
3154
3664
  ]
3155
3665
  },
3156
- "face:upload": {
3666
+ "voiceprint:score": {
3157
3667
  "aliases": [],
3158
3668
  "args": {
3159
- "face_id": {
3160
- "description": "Face alias",
3161
- "name": "face_id",
3669
+ "face": {
3670
+ "description": "Face to score (alias, owner:alias, or a union like \"(alice-voiceprint | alice)\")",
3671
+ "name": "face",
3162
3672
  "required": true
3163
3673
  }
3164
3674
  },
3165
- "description": "Upload a file (text/PDF/audio/video) to a face",
3675
+ "description": "Score how closely a face writes like a specific person. Returns VCI (closeness, 0–100) and VFI (voice captured vs a generic baseline, 0–100). Deterministic — ideal for before/after tuning.",
3676
+ "examples": [
3677
+ "<%= config.bin %> <%= command.id %> \"(alice-voiceprint | alice)\" --emails ./sent.jsonl --wait",
3678
+ "<%= config.bin %> <%= command.id %> alice --emails-dir ./sent-emails/ --wait",
3679
+ "<%= config.bin %> <%= command.id %> alice --emails ./sent.json # prints job_id; poll with voiceprint:score-status"
3680
+ ],
3166
3681
  "flags": {
3167
3682
  "json": {
3168
3683
  "description": "Format output as json.",
@@ -3195,49 +3710,54 @@
3195
3710
  "multiple": false,
3196
3711
  "type": "option"
3197
3712
  },
3198
- "file": {
3199
- "description": "File to upload",
3200
- "name": "file",
3201
- "required": true,
3713
+ "emails": {
3714
+ "description": "JSON or JSONL file of the person's real writing — {id?, text} objects or plain strings (provide at least 20)",
3715
+ "name": "emails",
3202
3716
  "hasDynamicHelp": false,
3203
3717
  "multiple": false,
3204
3718
  "type": "option"
3205
3719
  },
3206
- "kind": {
3207
- "description": "Upload kind: document or thread",
3208
- "name": "kind",
3209
- "default": "document",
3720
+ "emails-dir": {
3721
+ "description": "Directory with one sample per file (id = filename). Alternative to --emails.",
3722
+ "exclusive": [
3723
+ "emails"
3724
+ ],
3725
+ "name": "emails-dir",
3210
3726
  "hasDynamicHelp": false,
3211
3727
  "multiple": false,
3212
- "options": [
3213
- "document",
3214
- "thread"
3215
- ],
3216
3728
  "type": "option"
3217
3729
  },
3218
- "perspective": {
3219
- "description": "Perspective (document only)",
3220
- "name": "perspective",
3221
- "default": "third-person",
3730
+ "author-corpus": {
3731
+ "description": "Optional larger reference of the person's writing (JSON/JSONL/dir) used to define their voice; defaults to --emails",
3732
+ "name": "author-corpus",
3222
3733
  "hasDynamicHelp": false,
3223
3734
  "multiple": false,
3224
- "options": [
3225
- "first-person",
3226
- "third-person"
3227
- ],
3228
3735
  "type": "option"
3229
3736
  },
3230
- "face-speaker": {
3231
- "description": "Speaker name to map to the face (thread only). If omitted, first speaker is used.",
3232
- "name": "face-speaker",
3737
+ "model": {
3738
+ "description": "Model used to generate comparison drafts",
3739
+ "name": "model",
3740
+ "default": "gpt-5.4",
3233
3741
  "hasDynamicHelp": false,
3234
3742
  "multiple": false,
3235
3743
  "type": "option"
3744
+ },
3745
+ "oauth-only": {
3746
+ "description": "Only run when a free (OAuth) model route is available; never fall back to billed inference",
3747
+ "name": "oauth-only",
3748
+ "allowNo": false,
3749
+ "type": "boolean"
3750
+ },
3751
+ "wait": {
3752
+ "description": "Block and poll until the score is ready, then print it (default: print the job_id and return)",
3753
+ "name": "wait",
3754
+ "allowNo": false,
3755
+ "type": "boolean"
3236
3756
  }
3237
3757
  },
3238
3758
  "hasDynamicHelp": false,
3239
3759
  "hiddenAliases": [],
3240
- "id": "face:upload",
3760
+ "id": "voiceprint:score",
3241
3761
  "pluginAlias": "faces-cli",
3242
3762
  "pluginName": "faces-cli",
3243
3763
  "pluginType": "core",
@@ -3247,14 +3767,29 @@
3247
3767
  "relativePath": [
3248
3768
  "dist",
3249
3769
  "commands",
3250
- "face",
3251
- "upload.js"
3770
+ "voiceprint",
3771
+ "score.js"
3252
3772
  ]
3253
3773
  },
3254
- "keys:create": {
3774
+ "voiceprint:upload": {
3255
3775
  "aliases": [],
3256
- "args": {},
3257
- "description": "Create a new API key (JWT required). The new key is saved to ~/.faces/config.json as api_key by default; pass --no-save to skip.",
3776
+ "args": {
3777
+ "self_alias": {
3778
+ "description": "Self face alias",
3779
+ "name": "self_alias",
3780
+ "required": true
3781
+ },
3782
+ "file": {
3783
+ "description": "Corpus file (JSON array for thread_json, JSONL for email_jsonl)",
3784
+ "name": "file",
3785
+ "required": true
3786
+ }
3787
+ },
3788
+ "description": "Write a self face's email corpus as threads (the source for a voiceprint build). Pure data write — no compilation, no per-message billing.",
3789
+ "examples": [
3790
+ "<%= config.bin %> <%= command.id %> alice ./corpus.json",
3791
+ "<%= config.bin %> <%= command.id %> alice ./mail.jsonl --type email_jsonl --emails-per-thread 50"
3792
+ ],
3258
3793
  "flags": {
3259
3794
  "json": {
3260
3795
  "description": "Format output as json.",
@@ -3287,52 +3822,92 @@
3287
3822
  "multiple": false,
3288
3823
  "type": "option"
3289
3824
  },
3290
- "name": {
3291
- "description": "Key name/label",
3292
- "name": "name",
3293
- "required": true,
3825
+ "type": {
3826
+ "description": "thread_json: a JSON array of canonical email objects → one room. email_jsonl: JSONL (one email/line) → chunked into several rooms.",
3827
+ "name": "type",
3828
+ "default": "thread_json",
3294
3829
  "hasDynamicHelp": false,
3295
3830
  "multiple": false,
3831
+ "options": [
3832
+ "thread_json",
3833
+ "email_jsonl"
3834
+ ],
3296
3835
  "type": "option"
3297
3836
  },
3298
- "expires-days": {
3299
- "description": "Expiry in days (omit for no expiry)",
3300
- "name": "expires-days",
3837
+ "emails-per-thread": {
3838
+ "description": "For --type email_jsonl: emails per room (default 50)",
3839
+ "name": "emails-per-thread",
3840
+ "default": 50,
3301
3841
  "hasDynamicHelp": false,
3302
3842
  "multiple": false,
3303
3843
  "type": "option"
3844
+ }
3845
+ },
3846
+ "hasDynamicHelp": false,
3847
+ "hiddenAliases": [],
3848
+ "id": "voiceprint:upload",
3849
+ "pluginAlias": "faces-cli",
3850
+ "pluginName": "faces-cli",
3851
+ "pluginType": "core",
3852
+ "strict": true,
3853
+ "enableJsonFlag": true,
3854
+ "isESM": true,
3855
+ "relativePath": [
3856
+ "dist",
3857
+ "commands",
3858
+ "voiceprint",
3859
+ "upload.js"
3860
+ ]
3861
+ },
3862
+ "voiceprint:versions": {
3863
+ "aliases": [],
3864
+ "args": {
3865
+ "self_alias": {
3866
+ "description": "Self face alias",
3867
+ "name": "self_alias",
3868
+ "required": true
3869
+ }
3870
+ },
3871
+ "description": "List a self face's voice-map versions (active + one prior). Retention is one-deep; toggle with voiceprint:revert.",
3872
+ "examples": [
3873
+ "<%= config.bin %> <%= command.id %> alice"
3874
+ ],
3875
+ "flags": {
3876
+ "json": {
3877
+ "description": "Format output as json.",
3878
+ "helpGroup": "GLOBAL",
3879
+ "name": "json",
3880
+ "allowNo": false,
3881
+ "type": "boolean"
3304
3882
  },
3305
- "budget": {
3306
- "description": "Spend budget in USD",
3307
- "name": "budget",
3883
+ "base-url": {
3884
+ "description": "API base URL",
3885
+ "env": "FACES_BASE_URL",
3886
+ "name": "base-url",
3308
3887
  "hasDynamicHelp": false,
3309
3888
  "multiple": false,
3310
3889
  "type": "option"
3311
3890
  },
3312
- "face": {
3313
- "description": "Allowed face alias (repeatable)",
3314
- "name": "face",
3891
+ "token": {
3892
+ "description": "JWT bearer token",
3893
+ "env": "FACES_TOKEN",
3894
+ "name": "token",
3315
3895
  "hasDynamicHelp": false,
3316
- "multiple": true,
3896
+ "multiple": false,
3317
3897
  "type": "option"
3318
3898
  },
3319
- "model": {
3320
- "description": "Allowed model name (repeatable)",
3321
- "name": "model",
3899
+ "api-key": {
3900
+ "description": "API key",
3901
+ "env": "FACES_API_KEY",
3902
+ "name": "api-key",
3322
3903
  "hasDynamicHelp": false,
3323
- "multiple": true,
3904
+ "multiple": false,
3324
3905
  "type": "option"
3325
- },
3326
- "save": {
3327
- "description": "Save the new key to ~/.faces/config.json as api_key (default: true; use --no-save to skip)",
3328
- "name": "save",
3329
- "allowNo": true,
3330
- "type": "boolean"
3331
3906
  }
3332
3907
  },
3333
3908
  "hasDynamicHelp": false,
3334
3909
  "hiddenAliases": [],
3335
- "id": "keys:create",
3910
+ "id": "voiceprint:versions",
3336
3911
  "pluginAlias": "faces-cli",
3337
3912
  "pluginName": "faces-cli",
3338
3913
  "pluginType": "core",
@@ -3342,14 +3917,14 @@
3342
3917
  "relativePath": [
3343
3918
  "dist",
3344
3919
  "commands",
3345
- "keys",
3346
- "create.js"
3920
+ "voiceprint",
3921
+ "versions.js"
3347
3922
  ]
3348
3923
  },
3349
- "keys:list": {
3924
+ "face:attributes": {
3350
3925
  "aliases": [],
3351
3926
  "args": {},
3352
- "description": "List all API keys (JWT required)",
3927
+ "description": "List all supported attribute keys",
3353
3928
  "flags": {
3354
3929
  "json": {
3355
3930
  "description": "Format output as json.",
@@ -3385,7 +3960,7 @@
3385
3960
  },
3386
3961
  "hasDynamicHelp": false,
3387
3962
  "hiddenAliases": [],
3388
- "id": "keys:list",
3963
+ "id": "face:attributes",
3389
3964
  "pluginAlias": "faces-cli",
3390
3965
  "pluginName": "faces-cli",
3391
3966
  "pluginType": "core",
@@ -3395,20 +3970,14 @@
3395
3970
  "relativePath": [
3396
3971
  "dist",
3397
3972
  "commands",
3398
- "keys",
3399
- "list.js"
3973
+ "face",
3974
+ "attributes.js"
3400
3975
  ]
3401
3976
  },
3402
- "keys:revoke": {
3977
+ "face:create": {
3403
3978
  "aliases": [],
3404
- "args": {
3405
- "key_id": {
3406
- "description": "Key ID",
3407
- "name": "key_id",
3408
- "required": true
3409
- }
3410
- },
3411
- "description": "Revoke an API key (JWT required)",
3979
+ "args": {},
3980
+ "description": "Create a new face",
3412
3981
  "flags": {
3413
3982
  "json": {
3414
3983
  "description": "Format output as json.",
@@ -3441,16 +4010,85 @@
3441
4010
  "multiple": false,
3442
4011
  "type": "option"
3443
4012
  },
3444
- "yes": {
3445
- "description": "Skip confirmation",
3446
- "name": "yes",
3447
- "allowNo": false,
3448
- "type": "boolean"
4013
+ "name": {
4014
+ "description": "Display name",
4015
+ "name": "name",
4016
+ "required": true,
4017
+ "hasDynamicHelp": false,
4018
+ "multiple": false,
4019
+ "type": "option"
4020
+ },
4021
+ "alias": {
4022
+ "description": "Unique alias slug",
4023
+ "name": "alias",
4024
+ "required": true,
4025
+ "hasDynamicHelp": false,
4026
+ "multiple": false,
4027
+ "type": "option"
4028
+ },
4029
+ "description": {
4030
+ "description": "Plain-text description / bio (max 1500 chars)",
4031
+ "name": "description",
4032
+ "hasDynamicHelp": false,
4033
+ "multiple": false,
4034
+ "type": "option"
4035
+ },
4036
+ "tag": {
4037
+ "description": "Tag label (repeatable, lowercase)",
4038
+ "name": "tag",
4039
+ "hasDynamicHelp": false,
4040
+ "multiple": true,
4041
+ "type": "option"
4042
+ },
4043
+ "default-model": {
4044
+ "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
4045
+ "name": "default-model",
4046
+ "hasDynamicHelp": false,
4047
+ "multiple": false,
4048
+ "type": "option"
4049
+ },
4050
+ "formula": {
4051
+ "description": "Boolean formula over owned concrete face aliases (e.g. \"a | b\", \"(a | b) - c\"). Creates a composite face.",
4052
+ "name": "formula",
4053
+ "hasDynamicHelp": false,
4054
+ "multiple": false,
4055
+ "type": "option"
4056
+ },
4057
+ "attr": {
4058
+ "description": "Attribute KEY=VALUE (repeatable)",
4059
+ "name": "attr",
4060
+ "hasDynamicHelp": false,
4061
+ "multiple": true,
4062
+ "type": "option"
4063
+ },
4064
+ "tool": {
4065
+ "description": "Tool name to enable (repeatable)",
4066
+ "name": "tool",
4067
+ "hasDynamicHelp": false,
4068
+ "multiple": true,
4069
+ "type": "option"
4070
+ },
4071
+ "profile-addendum": {
4072
+ "description": "Per-face system prompt, injected after the persona profile and before any per-request system prompt (max 100,000 chars).",
4073
+ "name": "profile-addendum",
4074
+ "hasDynamicHelp": false,
4075
+ "multiple": false,
4076
+ "type": "option"
4077
+ },
4078
+ "profile-addendum-file": {
4079
+ "description": "Read the per-face system prompt from a file (alternative to --profile-addendum).",
4080
+ "exclusive": [
4081
+ "profile-addendum"
4082
+ ],
4083
+ "name": "profile-addendum-file",
4084
+ "hasDynamicHelp": false,
4085
+ "multiple": false,
4086
+ "type": "option"
3449
4087
  }
3450
4088
  },
3451
4089
  "hasDynamicHelp": false,
3452
4090
  "hiddenAliases": [],
3453
- "id": "keys:revoke",
4091
+ "id": "face:create",
3454
4092
  "pluginAlias": "faces-cli",
3455
4093
  "pluginName": "faces-cli",
3456
4094
  "pluginType": "core",
@@ -3460,20 +4098,20 @@
3460
4098
  "relativePath": [
3461
4099
  "dist",
3462
4100
  "commands",
3463
- "keys",
3464
- "revoke.js"
4101
+ "face",
4102
+ "create.js"
3465
4103
  ]
3466
4104
  },
3467
- "keys:update": {
4105
+ "face:delete": {
3468
4106
  "aliases": [],
3469
4107
  "args": {
3470
- "key_id": {
3471
- "description": "Key ID",
3472
- "name": "key_id",
4108
+ "face_id": {
4109
+ "description": "Face alias",
4110
+ "name": "face_id",
3473
4111
  "required": true
3474
4112
  }
3475
4113
  },
3476
- "description": "Update API key metadata (JWT required)",
4114
+ "description": "Delete a face permanently",
3477
4115
  "flags": {
3478
4116
  "json": {
3479
4117
  "description": "Format output as json.",
@@ -3506,30 +4144,16 @@
3506
4144
  "multiple": false,
3507
4145
  "type": "option"
3508
4146
  },
3509
- "name": {
3510
- "description": "New key name",
3511
- "name": "name",
3512
- "hasDynamicHelp": false,
3513
- "multiple": false,
3514
- "type": "option"
3515
- },
3516
- "budget": {
3517
- "description": "New spend budget in USD",
3518
- "name": "budget",
3519
- "hasDynamicHelp": false,
3520
- "multiple": false,
3521
- "type": "option"
3522
- },
3523
- "reset-spent": {
3524
- "description": "Reset spent amount to zero",
3525
- "name": "reset-spent",
4147
+ "yes": {
4148
+ "description": "Skip confirmation",
4149
+ "name": "yes",
3526
4150
  "allowNo": false,
3527
4151
  "type": "boolean"
3528
4152
  }
3529
4153
  },
3530
4154
  "hasDynamicHelp": false,
3531
4155
  "hiddenAliases": [],
3532
- "id": "keys:update",
4156
+ "id": "face:delete",
3533
4157
  "pluginAlias": "faces-cli",
3534
4158
  "pluginName": "faces-cli",
3535
4159
  "pluginType": "core",
@@ -3539,20 +4163,14 @@
3539
4163
  "relativePath": [
3540
4164
  "dist",
3541
4165
  "commands",
3542
- "keys",
3543
- "update.js"
4166
+ "face",
4167
+ "delete.js"
3544
4168
  ]
3545
4169
  },
3546
- "team:add": {
4170
+ "face:diff": {
3547
4171
  "aliases": [],
3548
- "args": {
3549
- "team_id": {
3550
- "description": "Team ID",
3551
- "name": "team_id",
3552
- "required": true
3553
- }
3554
- },
3555
- "description": "Add face(s) to a team",
4172
+ "args": {},
4173
+ "description": "Compare owned faces pairwise across all centroid components",
3556
4174
  "flags": {
3557
4175
  "json": {
3558
4176
  "description": "Format output as json.",
@@ -3586,7 +4204,7 @@
3586
4204
  "type": "option"
3587
4205
  },
3588
4206
  "face": {
3589
- "description": "Face alias to add (repeatable)",
4207
+ "description": "Face alias to include (repeatable, min 2)",
3590
4208
  "name": "face",
3591
4209
  "required": true,
3592
4210
  "hasDynamicHelp": false,
@@ -3596,7 +4214,7 @@
3596
4214
  },
3597
4215
  "hasDynamicHelp": false,
3598
4216
  "hiddenAliases": [],
3599
- "id": "team:add",
4217
+ "id": "face:diff",
3600
4218
  "pluginAlias": "faces-cli",
3601
4219
  "pluginName": "faces-cli",
3602
4220
  "pluginType": "core",
@@ -3606,14 +4224,20 @@
3606
4224
  "relativePath": [
3607
4225
  "dist",
3608
4226
  "commands",
3609
- "team",
3610
- "add.js"
4227
+ "face",
4228
+ "diff.js"
3611
4229
  ]
3612
4230
  },
3613
- "team:create": {
4231
+ "face:edit": {
3614
4232
  "aliases": [],
3615
- "args": {},
3616
- "description": "Create a new team",
4233
+ "args": {
4234
+ "face_id": {
4235
+ "description": "Face alias",
4236
+ "name": "face_id",
4237
+ "required": true
4238
+ }
4239
+ },
4240
+ "description": "Edit a face's metadata",
3617
4241
  "flags": {
3618
4242
  "json": {
3619
4243
  "description": "Format output as json.",
@@ -3647,45 +4271,85 @@
3647
4271
  "type": "option"
3648
4272
  },
3649
4273
  "name": {
3650
- "description": "Team name",
4274
+ "description": "New display name",
3651
4275
  "name": "name",
3652
- "required": true,
3653
4276
  "hasDynamicHelp": false,
3654
4277
  "multiple": false,
3655
4278
  "type": "option"
3656
4279
  },
3657
4280
  "description": {
3658
- "description": "Plain-text team description (max 1500 chars)",
4281
+ "description": "Plain-text description / bio (max 1500 chars)",
3659
4282
  "name": "description",
3660
4283
  "hasDynamicHelp": false,
3661
4284
  "multiple": false,
3662
4285
  "type": "option"
3663
4286
  },
3664
- "protocol": {
3665
- "description": "Protocol content (mermaid diagram or markdown, max 1000 words)",
3666
- "name": "protocol",
4287
+ "tag": {
4288
+ "description": "Replace all tags (repeatable, lowercase)",
4289
+ "name": "tag",
4290
+ "hasDynamicHelp": false,
4291
+ "multiple": true,
4292
+ "type": "option"
4293
+ },
4294
+ "default-model": {
4295
+ "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
4296
+ "name": "default-model",
3667
4297
  "hasDynamicHelp": false,
3668
4298
  "multiple": false,
3669
4299
  "type": "option"
3670
4300
  },
3671
- "protocol-file": {
3672
- "description": "Read protocol from file",
3673
- "name": "protocol-file",
4301
+ "formula": {
4302
+ "description": "New boolean formula (synthetic faces only)",
4303
+ "name": "formula",
4304
+ "hasDynamicHelp": false,
4305
+ "multiple": false,
4306
+ "type": "option"
4307
+ },
4308
+ "attr": {
4309
+ "description": "Update attribute KEY=VALUE (repeatable)",
4310
+ "name": "attr",
4311
+ "hasDynamicHelp": false,
4312
+ "multiple": true,
4313
+ "type": "option"
4314
+ },
4315
+ "tool": {
4316
+ "description": "Tool names to set (replaces list, repeatable)",
4317
+ "name": "tool",
4318
+ "hasDynamicHelp": false,
4319
+ "multiple": true,
4320
+ "type": "option"
4321
+ },
4322
+ "profile-addendum": {
4323
+ "description": "Replace the per-face system prompt (max 100,000 chars).",
4324
+ "name": "profile-addendum",
4325
+ "hasDynamicHelp": false,
4326
+ "multiple": false,
4327
+ "type": "option"
4328
+ },
4329
+ "profile-addendum-file": {
4330
+ "description": "Replace the per-face system prompt from a file.",
4331
+ "exclusive": [
4332
+ "profile-addendum"
4333
+ ],
4334
+ "name": "profile-addendum-file",
3674
4335
  "hasDynamicHelp": false,
3675
4336
  "multiple": false,
3676
4337
  "type": "option"
3677
4338
  },
3678
- "tag": {
3679
- "description": "Tag label (repeatable, lowercase)",
3680
- "name": "tag",
3681
- "hasDynamicHelp": false,
3682
- "multiple": true,
3683
- "type": "option"
4339
+ "clear-profile-addendum": {
4340
+ "description": "Remove the per-face system prompt.",
4341
+ "exclusive": [
4342
+ "profile-addendum",
4343
+ "profile-addendum-file"
4344
+ ],
4345
+ "name": "clear-profile-addendum",
4346
+ "allowNo": false,
4347
+ "type": "boolean"
3684
4348
  }
3685
4349
  },
3686
4350
  "hasDynamicHelp": false,
3687
4351
  "hiddenAliases": [],
3688
- "id": "team:create",
4352
+ "id": "face:edit",
3689
4353
  "pluginAlias": "faces-cli",
3690
4354
  "pluginName": "faces-cli",
3691
4355
  "pluginType": "core",
@@ -3695,20 +4359,20 @@
3695
4359
  "relativePath": [
3696
4360
  "dist",
3697
4361
  "commands",
3698
- "team",
3699
- "create.js"
4362
+ "face",
4363
+ "edit.js"
3700
4364
  ]
3701
4365
  },
3702
- "team:delete": {
4366
+ "face:get": {
3703
4367
  "aliases": [],
3704
4368
  "args": {
3705
- "team_id": {
3706
- "description": "Team ID",
3707
- "name": "team_id",
4369
+ "face_id": {
4370
+ "description": "Face alias",
4371
+ "name": "face_id",
3708
4372
  "required": true
3709
4373
  }
3710
4374
  },
3711
- "description": "Delete a team",
4375
+ "description": "Get details for a face by alias",
3712
4376
  "flags": {
3713
4377
  "json": {
3714
4378
  "description": "Format output as json.",
@@ -3741,16 +4405,23 @@
3741
4405
  "multiple": false,
3742
4406
  "type": "option"
3743
4407
  },
3744
- "yes": {
3745
- "description": "Skip confirmation",
3746
- "name": "yes",
4408
+ "include": {
4409
+ "description": "Include extra fields: tags, teams (comma-separated)",
4410
+ "name": "include",
4411
+ "hasDynamicHelp": false,
4412
+ "multiple": false,
4413
+ "type": "option"
4414
+ },
4415
+ "full": {
4416
+ "description": "Print the full profile_addendum instead of a truncated preview",
4417
+ "name": "full",
3747
4418
  "allowNo": false,
3748
4419
  "type": "boolean"
3749
4420
  }
3750
4421
  },
3751
4422
  "hasDynamicHelp": false,
3752
4423
  "hiddenAliases": [],
3753
- "id": "team:delete",
4424
+ "id": "face:get",
3754
4425
  "pluginAlias": "faces-cli",
3755
4426
  "pluginName": "faces-cli",
3756
4427
  "pluginType": "core",
@@ -3760,20 +4431,14 @@
3760
4431
  "relativePath": [
3761
4432
  "dist",
3762
4433
  "commands",
3763
- "team",
3764
- "delete.js"
4434
+ "face",
4435
+ "get.js"
3765
4436
  ]
3766
4437
  },
3767
- "team:edit": {
4438
+ "face:list": {
3768
4439
  "aliases": [],
3769
- "args": {
3770
- "team_id": {
3771
- "description": "Team ID",
3772
- "name": "team_id",
3773
- "required": true
3774
- }
3775
- },
3776
- "description": "Edit a team",
4440
+ "args": {},
4441
+ "description": "List faces. By default lists owned faces; use --public to include published faces from other accounts.",
3777
4442
  "flags": {
3778
4443
  "json": {
3779
4444
  "description": "Format output as json.",
@@ -3806,38 +4471,57 @@
3806
4471
  "multiple": false,
3807
4472
  "type": "option"
3808
4473
  },
3809
- "name": {
3810
- "description": "New team name",
3811
- "name": "name",
4474
+ "tag": {
4475
+ "description": "Filter by tag (repeatable, AND logic)",
4476
+ "name": "tag",
3812
4477
  "hasDynamicHelp": false,
3813
- "multiple": false,
4478
+ "multiple": true,
3814
4479
  "type": "option"
3815
4480
  },
3816
- "description": {
3817
- "description": "New description (max 1500 chars)",
3818
- "name": "description",
4481
+ "team": {
4482
+ "description": "Filter by team ID (repeatable, OR logic)",
4483
+ "name": "team",
3819
4484
  "hasDynamicHelp": false,
3820
- "multiple": false,
4485
+ "multiple": true,
3821
4486
  "type": "option"
3822
4487
  },
3823
- "protocol": {
3824
- "description": "New protocol content",
3825
- "name": "protocol",
4488
+ "include": {
4489
+ "description": "Include extra fields: tags, teams (comma-separated)",
4490
+ "name": "include",
3826
4491
  "hasDynamicHelp": false,
3827
4492
  "multiple": false,
3828
4493
  "type": "option"
3829
4494
  },
3830
- "protocol-file": {
3831
- "description": "Read protocol from file",
3832
- "name": "protocol-file",
4495
+ "public": {
4496
+ "description": "Include published faces from other accounts",
4497
+ "name": "public",
4498
+ "allowNo": false,
4499
+ "type": "boolean"
4500
+ },
4501
+ "system": {
4502
+ "description": "Show only the curated system faces (published faces owned by 'head')",
4503
+ "name": "system",
4504
+ "allowNo": false,
4505
+ "type": "boolean"
4506
+ },
4507
+ "from-users": {
4508
+ "description": "Only published faces from these owners (repeatable/comma-separated)",
4509
+ "name": "from-users",
3833
4510
  "hasDynamicHelp": false,
3834
- "multiple": false,
4511
+ "multiple": true,
4512
+ "type": "option"
4513
+ },
4514
+ "not-from-users": {
4515
+ "description": "Exclude published faces from these owners (repeatable/comma-separated)",
4516
+ "name": "not-from-users",
4517
+ "hasDynamicHelp": false,
4518
+ "multiple": true,
3835
4519
  "type": "option"
3836
4520
  }
3837
4521
  },
3838
4522
  "hasDynamicHelp": false,
3839
4523
  "hiddenAliases": [],
3840
- "id": "team:edit",
4524
+ "id": "face:list",
3841
4525
  "pluginAlias": "faces-cli",
3842
4526
  "pluginName": "faces-cli",
3843
4527
  "pluginType": "core",
@@ -3847,20 +4531,20 @@
3847
4531
  "relativePath": [
3848
4532
  "dist",
3849
4533
  "commands",
3850
- "team",
3851
- "edit.js"
4534
+ "face",
4535
+ "list.js"
3852
4536
  ]
3853
4537
  },
3854
- "team:get": {
4538
+ "face:neighbors": {
3855
4539
  "aliases": [],
3856
4540
  "args": {
3857
- "team_id": {
3858
- "description": "Team ID",
3859
- "name": "team_id",
4541
+ "face_id": {
4542
+ "description": "Face alias",
4543
+ "name": "face_id",
3860
4544
  "required": true
3861
4545
  }
3862
4546
  },
3863
- "description": "Get a team by ID",
4547
+ "description": "Find the most similar or dissimilar owned faces to a given face",
3864
4548
  "flags": {
3865
4549
  "json": {
3866
4550
  "description": "Format output as json.",
@@ -3892,11 +4576,45 @@
3892
4576
  "hasDynamicHelp": false,
3893
4577
  "multiple": false,
3894
4578
  "type": "option"
4579
+ },
4580
+ "k": {
4581
+ "description": "Number of results (1–20)",
4582
+ "name": "k",
4583
+ "default": 5,
4584
+ "hasDynamicHelp": false,
4585
+ "multiple": false,
4586
+ "type": "option"
4587
+ },
4588
+ "component": {
4589
+ "description": "Centroid component to rank on (beta, delta, epsilon are the principal components of a face; face is their composite)",
4590
+ "name": "component",
4591
+ "default": "face",
4592
+ "hasDynamicHelp": false,
4593
+ "multiple": false,
4594
+ "options": [
4595
+ "face",
4596
+ "beta",
4597
+ "delta",
4598
+ "epsilon"
4599
+ ],
4600
+ "type": "option"
4601
+ },
4602
+ "direction": {
4603
+ "description": "nearest (most similar) or furthest (most dissimilar)",
4604
+ "name": "direction",
4605
+ "default": "nearest",
4606
+ "hasDynamicHelp": false,
4607
+ "multiple": false,
4608
+ "options": [
4609
+ "nearest",
4610
+ "furthest"
4611
+ ],
4612
+ "type": "option"
3895
4613
  }
3896
4614
  },
3897
4615
  "hasDynamicHelp": false,
3898
4616
  "hiddenAliases": [],
3899
- "id": "team:get",
4617
+ "id": "face:neighbors",
3900
4618
  "pluginAlias": "faces-cli",
3901
4619
  "pluginName": "faces-cli",
3902
4620
  "pluginType": "core",
@@ -3906,14 +4624,14 @@
3906
4624
  "relativePath": [
3907
4625
  "dist",
3908
4626
  "commands",
3909
- "team",
3910
- "get.js"
4627
+ "face",
4628
+ "neighbors.js"
3911
4629
  ]
3912
4630
  },
3913
- "team:list": {
4631
+ "face:stats": {
3914
4632
  "aliases": [],
3915
4633
  "args": {},
3916
- "description": "List your teams",
4634
+ "description": "Compile and chat stats for all owned faces",
3917
4635
  "flags": {
3918
4636
  "json": {
3919
4637
  "description": "Format output as json.",
@@ -3949,7 +4667,7 @@
3949
4667
  },
3950
4668
  "hasDynamicHelp": false,
3951
4669
  "hiddenAliases": [],
3952
- "id": "team:list",
4670
+ "id": "face:stats",
3953
4671
  "pluginAlias": "faces-cli",
3954
4672
  "pluginName": "faces-cli",
3955
4673
  "pluginType": "core",
@@ -3959,20 +4677,20 @@
3959
4677
  "relativePath": [
3960
4678
  "dist",
3961
4679
  "commands",
3962
- "team",
3963
- "list.js"
4680
+ "face",
4681
+ "stats.js"
3964
4682
  ]
3965
4683
  },
3966
- "team:members": {
4684
+ "face:teams": {
3967
4685
  "aliases": [],
3968
4686
  "args": {
3969
- "team_id": {
3970
- "description": "Team ID",
3971
- "name": "team_id",
4687
+ "alias": {
4688
+ "description": "Face alias",
4689
+ "name": "alias",
3972
4690
  "required": true
3973
4691
  }
3974
4692
  },
3975
- "description": "List members of a team",
4693
+ "description": "Set a face's team memberships (replaces all)",
3976
4694
  "flags": {
3977
4695
  "json": {
3978
4696
  "description": "Format output as json.",
@@ -4004,11 +4722,19 @@
4004
4722
  "hasDynamicHelp": false,
4005
4723
  "multiple": false,
4006
4724
  "type": "option"
4725
+ },
4726
+ "team": {
4727
+ "description": "Team ID (repeatable, replaces all memberships)",
4728
+ "name": "team",
4729
+ "required": true,
4730
+ "hasDynamicHelp": false,
4731
+ "multiple": true,
4732
+ "type": "option"
4007
4733
  }
4008
4734
  },
4009
4735
  "hasDynamicHelp": false,
4010
4736
  "hiddenAliases": [],
4011
- "id": "team:members",
4737
+ "id": "face:teams",
4012
4738
  "pluginAlias": "faces-cli",
4013
4739
  "pluginName": "faces-cli",
4014
4740
  "pluginType": "core",
@@ -4018,25 +4744,20 @@
4018
4744
  "relativePath": [
4019
4745
  "dist",
4020
4746
  "commands",
4021
- "team",
4022
- "members.js"
4747
+ "face",
4748
+ "teams.js"
4023
4749
  ]
4024
4750
  },
4025
- "team:remove": {
4751
+ "face:upload": {
4026
4752
  "aliases": [],
4027
4753
  "args": {
4028
- "team_id": {
4029
- "description": "Team ID",
4030
- "name": "team_id",
4031
- "required": true
4032
- },
4033
- "alias": {
4034
- "description": "Face alias to remove",
4035
- "name": "alias",
4754
+ "face_id": {
4755
+ "description": "Face alias",
4756
+ "name": "face_id",
4036
4757
  "required": true
4037
4758
  }
4038
4759
  },
4039
- "description": "Remove a face from a team",
4760
+ "description": "Upload a file (text/PDF/audio/video) to a face",
4040
4761
  "flags": {
4041
4762
  "json": {
4042
4763
  "description": "Format output as json.",
@@ -4061,10 +4782,49 @@
4061
4782
  "multiple": false,
4062
4783
  "type": "option"
4063
4784
  },
4064
- "api-key": {
4065
- "description": "API key",
4066
- "env": "FACES_API_KEY",
4067
- "name": "api-key",
4785
+ "api-key": {
4786
+ "description": "API key",
4787
+ "env": "FACES_API_KEY",
4788
+ "name": "api-key",
4789
+ "hasDynamicHelp": false,
4790
+ "multiple": false,
4791
+ "type": "option"
4792
+ },
4793
+ "file": {
4794
+ "description": "File to upload",
4795
+ "name": "file",
4796
+ "required": true,
4797
+ "hasDynamicHelp": false,
4798
+ "multiple": false,
4799
+ "type": "option"
4800
+ },
4801
+ "kind": {
4802
+ "description": "Upload kind: document or thread",
4803
+ "name": "kind",
4804
+ "default": "document",
4805
+ "hasDynamicHelp": false,
4806
+ "multiple": false,
4807
+ "options": [
4808
+ "document",
4809
+ "thread"
4810
+ ],
4811
+ "type": "option"
4812
+ },
4813
+ "perspective": {
4814
+ "description": "Perspective (document only)",
4815
+ "name": "perspective",
4816
+ "default": "third-person",
4817
+ "hasDynamicHelp": false,
4818
+ "multiple": false,
4819
+ "options": [
4820
+ "first-person",
4821
+ "third-person"
4822
+ ],
4823
+ "type": "option"
4824
+ },
4825
+ "face-speaker": {
4826
+ "description": "Speaker name to map to the face (thread only). If omitted, first speaker is used.",
4827
+ "name": "face-speaker",
4068
4828
  "hasDynamicHelp": false,
4069
4829
  "multiple": false,
4070
4830
  "type": "option"
@@ -4072,7 +4832,7 @@
4072
4832
  },
4073
4833
  "hasDynamicHelp": false,
4074
4834
  "hiddenAliases": [],
4075
- "id": "team:remove",
4835
+ "id": "face:upload",
4076
4836
  "pluginAlias": "faces-cli",
4077
4837
  "pluginName": "faces-cli",
4078
4838
  "pluginType": "core",
@@ -4082,8 +4842,8 @@
4082
4842
  "relativePath": [
4083
4843
  "dist",
4084
4844
  "commands",
4085
- "team",
4086
- "remove.js"
4845
+ "face",
4846
+ "upload.js"
4087
4847
  ]
4088
4848
  },
4089
4849
  "billing:subscription:activate": {
@@ -4211,7 +4971,7 @@
4211
4971
  "cancel.js"
4212
4972
  ]
4213
4973
  },
4214
- "compile:thread:create": {
4974
+ "compile:doc:create": {
4215
4975
  "aliases": [],
4216
4976
  "args": {
4217
4977
  "face_id": {
@@ -4220,7 +4980,7 @@
4220
4980
  "required": true
4221
4981
  }
4222
4982
  },
4223
- "description": "Start a new thread for a face",
4983
+ "description": "Submit a document to a face",
4224
4984
  "flags": {
4225
4985
  "json": {
4226
4986
  "description": "Format output as json.",
@@ -4254,22 +5014,42 @@
4254
5014
  "type": "option"
4255
5015
  },
4256
5016
  "label": {
4257
- "description": "Thread label",
5017
+ "description": "Document label/title",
4258
5018
  "name": "label",
4259
5019
  "hasDynamicHelp": false,
4260
5020
  "multiple": false,
4261
5021
  "type": "option"
4262
5022
  },
4263
- "oauth-only": {
4264
- "description": "Prevent fallback to paid system key (use OAuth only)",
4265
- "name": "oauth-only",
4266
- "allowNo": false,
4267
- "type": "boolean"
5023
+ "content": {
5024
+ "description": "Inline text content",
5025
+ "name": "content",
5026
+ "hasDynamicHelp": false,
5027
+ "multiple": false,
5028
+ "type": "option"
5029
+ },
5030
+ "file": {
5031
+ "description": "Read content from file",
5032
+ "name": "file",
5033
+ "hasDynamicHelp": false,
5034
+ "multiple": false,
5035
+ "type": "option"
5036
+ },
5037
+ "perspective": {
5038
+ "description": "Perspective (first-person or third-person)",
5039
+ "name": "perspective",
5040
+ "default": "first-person",
5041
+ "hasDynamicHelp": false,
5042
+ "multiple": false,
5043
+ "options": [
5044
+ "first-person",
5045
+ "third-person"
5046
+ ],
5047
+ "type": "option"
4268
5048
  }
4269
5049
  },
4270
5050
  "hasDynamicHelp": false,
4271
5051
  "hiddenAliases": [],
4272
- "id": "compile:thread:create",
5052
+ "id": "compile:doc:create",
4273
5053
  "pluginAlias": "faces-cli",
4274
5054
  "pluginName": "faces-cli",
4275
5055
  "pluginType": "core",
@@ -4280,20 +5060,20 @@
4280
5060
  "dist",
4281
5061
  "commands",
4282
5062
  "compile",
4283
- "thread",
5063
+ "doc",
4284
5064
  "create.js"
4285
5065
  ]
4286
5066
  },
4287
- "compile:thread:delete": {
5067
+ "compile:doc:delete": {
4288
5068
  "aliases": [],
4289
5069
  "args": {
4290
- "thread_id": {
4291
- "description": "Thread ID",
4292
- "name": "thread_id",
5070
+ "doc_id": {
5071
+ "description": "Document ID",
5072
+ "name": "doc_id",
4293
5073
  "required": true
4294
5074
  }
4295
5075
  },
4296
- "description": "Delete a thread",
5076
+ "description": "Delete a document",
4297
5077
  "flags": {
4298
5078
  "json": {
4299
5079
  "description": "Format output as json.",
@@ -4325,17 +5105,11 @@
4325
5105
  "hasDynamicHelp": false,
4326
5106
  "multiple": false,
4327
5107
  "type": "option"
4328
- },
4329
- "yes": {
4330
- "description": "Skip confirmation",
4331
- "name": "yes",
4332
- "allowNo": false,
4333
- "type": "boolean"
4334
5108
  }
4335
5109
  },
4336
5110
  "hasDynamicHelp": false,
4337
5111
  "hiddenAliases": [],
4338
- "id": "compile:thread:delete",
5112
+ "id": "compile:doc:delete",
4339
5113
  "pluginAlias": "faces-cli",
4340
5114
  "pluginName": "faces-cli",
4341
5115
  "pluginType": "core",
@@ -4346,20 +5120,20 @@
4346
5120
  "dist",
4347
5121
  "commands",
4348
5122
  "compile",
4349
- "thread",
5123
+ "doc",
4350
5124
  "delete.js"
4351
5125
  ]
4352
5126
  },
4353
- "compile:thread:edit": {
5127
+ "compile:doc:edit": {
4354
5128
  "aliases": [],
4355
5129
  "args": {
4356
- "thread_id": {
4357
- "description": "Thread ID",
4358
- "name": "thread_id",
5130
+ "doc_id": {
5131
+ "description": "Document ID",
5132
+ "name": "doc_id",
4359
5133
  "required": true
4360
5134
  }
4361
5135
  },
4362
- "description": "Edit a thread (label and/or reassign face speaker)",
5136
+ "description": "Edit a document (label, content, or perspective)",
4363
5137
  "flags": {
4364
5138
  "json": {
4365
5139
  "description": "Format output as json.",
@@ -4393,23 +5167,41 @@
4393
5167
  "type": "option"
4394
5168
  },
4395
5169
  "label": {
4396
- "description": "New thread label",
5170
+ "description": "New label/title",
4397
5171
  "name": "label",
4398
5172
  "hasDynamicHelp": false,
4399
5173
  "multiple": false,
4400
5174
  "type": "option"
4401
5175
  },
4402
- "face-speaker": {
4403
- "description": "Reassign face speaker: set this speaker to role=user, all others to role=assistant",
4404
- "name": "face-speaker",
5176
+ "content": {
5177
+ "description": "New inline text content",
5178
+ "name": "content",
4405
5179
  "hasDynamicHelp": false,
4406
5180
  "multiple": false,
4407
5181
  "type": "option"
5182
+ },
5183
+ "file": {
5184
+ "description": "Read new content from file",
5185
+ "name": "file",
5186
+ "hasDynamicHelp": false,
5187
+ "multiple": false,
5188
+ "type": "option"
5189
+ },
5190
+ "perspective": {
5191
+ "description": "Perspective (first-person or third-person)",
5192
+ "name": "perspective",
5193
+ "hasDynamicHelp": false,
5194
+ "multiple": false,
5195
+ "options": [
5196
+ "first-person",
5197
+ "third-person"
5198
+ ],
5199
+ "type": "option"
4408
5200
  }
4409
5201
  },
4410
5202
  "hasDynamicHelp": false,
4411
5203
  "hiddenAliases": [],
4412
- "id": "compile:thread:edit",
5204
+ "id": "compile:doc:edit",
4413
5205
  "pluginAlias": "faces-cli",
4414
5206
  "pluginName": "faces-cli",
4415
5207
  "pluginType": "core",
@@ -4420,20 +5212,20 @@
4420
5212
  "dist",
4421
5213
  "commands",
4422
5214
  "compile",
4423
- "thread",
5215
+ "doc",
4424
5216
  "edit.js"
4425
5217
  ]
4426
5218
  },
4427
- "compile:thread:get": {
5219
+ "compile:doc:get": {
4428
5220
  "aliases": [],
4429
5221
  "args": {
4430
- "thread_id": {
4431
- "description": "Thread ID",
4432
- "name": "thread_id",
5222
+ "doc_id": {
5223
+ "description": "Document ID",
5224
+ "name": "doc_id",
4433
5225
  "required": true
4434
5226
  }
4435
5227
  },
4436
- "description": "Get a thread by ID",
5228
+ "description": "Get a document by ID",
4437
5229
  "flags": {
4438
5230
  "json": {
4439
5231
  "description": "Format output as json.",
@@ -4469,7 +5261,7 @@
4469
5261
  },
4470
5262
  "hasDynamicHelp": false,
4471
5263
  "hiddenAliases": [],
4472
- "id": "compile:thread:get",
5264
+ "id": "compile:doc:get",
4473
5265
  "pluginAlias": "faces-cli",
4474
5266
  "pluginName": "faces-cli",
4475
5267
  "pluginType": "core",
@@ -4480,11 +5272,11 @@
4480
5272
  "dist",
4481
5273
  "commands",
4482
5274
  "compile",
4483
- "thread",
5275
+ "doc",
4484
5276
  "get.js"
4485
5277
  ]
4486
5278
  },
4487
- "compile:thread:list": {
5279
+ "compile:doc": {
4488
5280
  "aliases": [],
4489
5281
  "args": {
4490
5282
  "face_id": {
@@ -4493,7 +5285,7 @@
4493
5285
  "required": true
4494
5286
  }
4495
5287
  },
4496
- "description": "List threads for a face",
5288
+ "description": "Compile a document into a face (create → make in one step)",
4497
5289
  "flags": {
4498
5290
  "json": {
4499
5291
  "description": "Format output as json.",
@@ -4525,11 +5317,58 @@
4525
5317
  "hasDynamicHelp": false,
4526
5318
  "multiple": false,
4527
5319
  "type": "option"
5320
+ },
5321
+ "label": {
5322
+ "description": "Document label/title",
5323
+ "name": "label",
5324
+ "hasDynamicHelp": false,
5325
+ "multiple": false,
5326
+ "type": "option"
5327
+ },
5328
+ "content": {
5329
+ "description": "Inline text content",
5330
+ "name": "content",
5331
+ "hasDynamicHelp": false,
5332
+ "multiple": false,
5333
+ "type": "option"
5334
+ },
5335
+ "file": {
5336
+ "description": "Read content from file",
5337
+ "name": "file",
5338
+ "hasDynamicHelp": false,
5339
+ "multiple": false,
5340
+ "type": "option"
5341
+ },
5342
+ "perspective": {
5343
+ "description": "Perspective",
5344
+ "name": "perspective",
5345
+ "default": "first-person",
5346
+ "hasDynamicHelp": false,
5347
+ "multiple": false,
5348
+ "options": [
5349
+ "first-person",
5350
+ "third-person"
5351
+ ],
5352
+ "type": "option"
5353
+ },
5354
+ "timeout": {
5355
+ "description": "Compile timeout in seconds (default: 600)",
5356
+ "name": "timeout",
5357
+ "default": 600,
5358
+ "hasDynamicHelp": false,
5359
+ "multiple": false,
5360
+ "type": "option"
5361
+ },
5362
+ "no-wait": {
5363
+ "description": "Create and trigger compilation, then return immediately without polling.",
5364
+ "name": "no-wait",
5365
+ "allowNo": false,
5366
+ "type": "boolean"
4528
5367
  }
4529
5368
  },
4530
5369
  "hasDynamicHelp": false,
4531
5370
  "hiddenAliases": [],
4532
- "id": "compile:thread:list",
5371
+ "id": "compile:doc",
4533
5372
  "pluginAlias": "faces-cli",
4534
5373
  "pluginName": "faces-cli",
4535
5374
  "pluginType": "core",
@@ -4540,20 +5379,20 @@
4540
5379
  "dist",
4541
5380
  "commands",
4542
5381
  "compile",
4543
- "thread",
4544
- "list.js"
5382
+ "doc",
5383
+ "index.js"
4545
5384
  ]
4546
5385
  },
4547
- "compile:thread:make": {
5386
+ "compile:doc:list": {
4548
5387
  "aliases": [],
4549
5388
  "args": {
4550
- "thread_id": {
4551
- "description": "Thread ID",
4552
- "name": "thread_id",
5389
+ "face_id": {
5390
+ "description": "Face alias",
5391
+ "name": "face_id",
4553
5392
  "required": true
4554
5393
  }
4555
5394
  },
4556
- "description": "Compile an existing thread (prepare + sync in one step)",
5395
+ "description": "List documents for a face",
4557
5396
  "flags": {
4558
5397
  "json": {
4559
5398
  "description": "Format output as json.",
@@ -4585,25 +5424,11 @@
4585
5424
  "hasDynamicHelp": false,
4586
5425
  "multiple": false,
4587
5426
  "type": "option"
4588
- },
4589
- "timeout": {
4590
- "description": "Compile timeout in seconds (default: 600)",
4591
- "name": "timeout",
4592
- "default": 600,
4593
- "hasDynamicHelp": false,
4594
- "multiple": false,
4595
- "type": "option"
4596
- },
4597
- "no-wait": {
4598
- "description": "Return immediately after triggering compilation. Prints the thread ID for manual polling.",
4599
- "name": "no-wait",
4600
- "allowNo": false,
4601
- "type": "boolean"
4602
5427
  }
4603
5428
  },
4604
5429
  "hasDynamicHelp": false,
4605
5430
  "hiddenAliases": [],
4606
- "id": "compile:thread:make",
5431
+ "id": "compile:doc:list",
4607
5432
  "pluginAlias": "faces-cli",
4608
5433
  "pluginName": "faces-cli",
4609
5434
  "pluginType": "core",
@@ -4614,20 +5439,20 @@
4614
5439
  "dist",
4615
5440
  "commands",
4616
5441
  "compile",
4617
- "thread",
4618
- "make.js"
5442
+ "doc",
5443
+ "list.js"
4619
5444
  ]
4620
5445
  },
4621
- "compile:thread:message": {
5446
+ "compile:doc:make": {
4622
5447
  "aliases": [],
4623
5448
  "args": {
4624
- "thread_id": {
4625
- "description": "Thread ID",
4626
- "name": "thread_id",
5449
+ "doc_id": {
5450
+ "description": "Document ID",
5451
+ "name": "doc_id",
4627
5452
  "required": true
4628
5453
  }
4629
5454
  },
4630
- "description": "Send a user message to a thread",
5455
+ "description": "Compile an existing document (prepare + sync in one step)",
4631
5456
  "flags": {
4632
5457
  "json": {
4633
5458
  "description": "Format output as json.",
@@ -4660,25 +5485,24 @@
4660
5485
  "multiple": false,
4661
5486
  "type": "option"
4662
5487
  },
4663
- "message": {
4664
- "char": "m",
4665
- "description": "User message to append",
4666
- "name": "message",
4667
- "required": true,
5488
+ "timeout": {
5489
+ "description": "Compile timeout in seconds (default: 600)",
5490
+ "name": "timeout",
5491
+ "default": 600,
4668
5492
  "hasDynamicHelp": false,
4669
5493
  "multiple": false,
4670
5494
  "type": "option"
4671
5495
  },
4672
- "oauth-only": {
4673
- "description": "Prevent fallback to paid system key (use OAuth only)",
4674
- "name": "oauth-only",
5496
+ "no-wait": {
5497
+ "description": "Return immediately after triggering compilation. Prints the document ID for manual polling.",
5498
+ "name": "no-wait",
4675
5499
  "allowNo": false,
4676
5500
  "type": "boolean"
4677
5501
  }
4678
5502
  },
4679
5503
  "hasDynamicHelp": false,
4680
5504
  "hiddenAliases": [],
4681
- "id": "compile:thread:message",
5505
+ "id": "compile:doc:make",
4682
5506
  "pluginAlias": "faces-cli",
4683
5507
  "pluginName": "faces-cli",
4684
5508
  "pluginType": "core",
@@ -4689,20 +5513,20 @@
4689
5513
  "dist",
4690
5514
  "commands",
4691
5515
  "compile",
4692
- "thread",
4693
- "message.js"
5516
+ "doc",
5517
+ "make.js"
4694
5518
  ]
4695
5519
  },
4696
- "compile:thread:pause": {
5520
+ "compile:doc:pause": {
4697
5521
  "aliases": [],
4698
5522
  "args": {
4699
- "thread_id": {
4700
- "description": "Thread ID",
4701
- "name": "thread_id",
5523
+ "doc_id": {
5524
+ "description": "Document ID",
5525
+ "name": "doc_id",
4702
5526
  "required": true
4703
5527
  }
4704
5528
  },
4705
- "description": "Pause a running thread compilation (preserves progress, resume with make)",
5529
+ "description": "Pause a running document compilation (preserves progress, resume with make)",
4706
5530
  "flags": {
4707
5531
  "json": {
4708
5532
  "description": "Format output as json.",
@@ -4738,7 +5562,7 @@
4738
5562
  },
4739
5563
  "hasDynamicHelp": false,
4740
5564
  "hiddenAliases": [],
4741
- "id": "compile:thread:pause",
5565
+ "id": "compile:doc:pause",
4742
5566
  "pluginAlias": "faces-cli",
4743
5567
  "pluginName": "faces-cli",
4744
5568
  "pluginType": "core",
@@ -4749,20 +5573,20 @@
4749
5573
  "dist",
4750
5574
  "commands",
4751
5575
  "compile",
4752
- "thread",
5576
+ "doc",
4753
5577
  "pause.js"
4754
5578
  ]
4755
5579
  },
4756
- "compile:thread:reset": {
5580
+ "compile:doc:reset": {
4757
5581
  "aliases": [],
4758
5582
  "args": {
4759
- "thread_id": {
4760
- "description": "Thread ID",
4761
- "name": "thread_id",
5583
+ "doc_id": {
5584
+ "description": "Document ID",
5585
+ "name": "doc_id",
4762
5586
  "required": true
4763
5587
  }
4764
5588
  },
4765
- "description": "Reset thread compilation progress (wipe extraction, keep source messages)",
5589
+ "description": "Reset document compilation progress (wipe extraction, keep content)",
4766
5590
  "flags": {
4767
5591
  "json": {
4768
5592
  "description": "Format output as json.",
@@ -4804,7 +5628,7 @@
4804
5628
  },
4805
5629
  "hasDynamicHelp": false,
4806
5630
  "hiddenAliases": [],
4807
- "id": "compile:thread:reset",
5631
+ "id": "compile:doc:reset",
4808
5632
  "pluginAlias": "faces-cli",
4809
5633
  "pluginName": "faces-cli",
4810
5634
  "pluginType": "core",
@@ -4815,20 +5639,20 @@
4815
5639
  "dist",
4816
5640
  "commands",
4817
5641
  "compile",
4818
- "thread",
5642
+ "doc",
4819
5643
  "reset.js"
4820
5644
  ]
4821
5645
  },
4822
- "compile:thread:sync": {
5646
+ "compile:thread:create": {
4823
5647
  "aliases": [],
4824
5648
  "args": {
4825
- "thread_id": {
4826
- "description": "Thread ID",
4827
- "name": "thread_id",
5649
+ "face_id": {
5650
+ "description": "Face alias",
5651
+ "name": "face_id",
4828
5652
  "required": true
4829
5653
  }
4830
5654
  },
4831
- "description": "Archive and sync a thread into a face",
5655
+ "description": "Start a new thread for a face",
4832
5656
  "flags": {
4833
5657
  "json": {
4834
5658
  "description": "Format output as json.",
@@ -4860,11 +5684,24 @@
4860
5684
  "hasDynamicHelp": false,
4861
5685
  "multiple": false,
4862
5686
  "type": "option"
5687
+ },
5688
+ "label": {
5689
+ "description": "Thread label",
5690
+ "name": "label",
5691
+ "hasDynamicHelp": false,
5692
+ "multiple": false,
5693
+ "type": "option"
5694
+ },
5695
+ "oauth-only": {
5696
+ "description": "Prevent fallback to paid system key (use OAuth only)",
5697
+ "name": "oauth-only",
5698
+ "allowNo": false,
5699
+ "type": "boolean"
4863
5700
  }
4864
5701
  },
4865
5702
  "hasDynamicHelp": false,
4866
5703
  "hiddenAliases": [],
4867
- "id": "compile:thread:sync",
5704
+ "id": "compile:thread:create",
4868
5705
  "pluginAlias": "faces-cli",
4869
5706
  "pluginName": "faces-cli",
4870
5707
  "pluginType": "core",
@@ -4876,19 +5713,19 @@
4876
5713
  "commands",
4877
5714
  "compile",
4878
5715
  "thread",
4879
- "sync.js"
5716
+ "create.js"
4880
5717
  ]
4881
5718
  },
4882
- "compile:doc:create": {
5719
+ "compile:thread:delete": {
4883
5720
  "aliases": [],
4884
5721
  "args": {
4885
- "face_id": {
4886
- "description": "Face alias",
4887
- "name": "face_id",
5722
+ "thread_id": {
5723
+ "description": "Thread ID",
5724
+ "name": "thread_id",
4888
5725
  "required": true
4889
5726
  }
4890
5727
  },
4891
- "description": "Submit a document to a face",
5728
+ "description": "Delete a thread",
4892
5729
  "flags": {
4893
5730
  "json": {
4894
5731
  "description": "Format output as json.",
@@ -4921,43 +5758,16 @@
4921
5758
  "multiple": false,
4922
5759
  "type": "option"
4923
5760
  },
4924
- "label": {
4925
- "description": "Document label/title",
4926
- "name": "label",
4927
- "hasDynamicHelp": false,
4928
- "multiple": false,
4929
- "type": "option"
4930
- },
4931
- "content": {
4932
- "description": "Inline text content",
4933
- "name": "content",
4934
- "hasDynamicHelp": false,
4935
- "multiple": false,
4936
- "type": "option"
4937
- },
4938
- "file": {
4939
- "description": "Read content from file",
4940
- "name": "file",
4941
- "hasDynamicHelp": false,
4942
- "multiple": false,
4943
- "type": "option"
4944
- },
4945
- "perspective": {
4946
- "description": "Perspective (first-person or third-person)",
4947
- "name": "perspective",
4948
- "default": "first-person",
4949
- "hasDynamicHelp": false,
4950
- "multiple": false,
4951
- "options": [
4952
- "first-person",
4953
- "third-person"
4954
- ],
4955
- "type": "option"
5761
+ "yes": {
5762
+ "description": "Skip confirmation",
5763
+ "name": "yes",
5764
+ "allowNo": false,
5765
+ "type": "boolean"
4956
5766
  }
4957
5767
  },
4958
5768
  "hasDynamicHelp": false,
4959
5769
  "hiddenAliases": [],
4960
- "id": "compile:doc:create",
5770
+ "id": "compile:thread:delete",
4961
5771
  "pluginAlias": "faces-cli",
4962
5772
  "pluginName": "faces-cli",
4963
5773
  "pluginType": "core",
@@ -4968,20 +5778,20 @@
4968
5778
  "dist",
4969
5779
  "commands",
4970
5780
  "compile",
4971
- "doc",
4972
- "create.js"
5781
+ "thread",
5782
+ "delete.js"
4973
5783
  ]
4974
5784
  },
4975
- "compile:doc:delete": {
5785
+ "compile:thread:edit": {
4976
5786
  "aliases": [],
4977
5787
  "args": {
4978
- "doc_id": {
4979
- "description": "Document ID",
4980
- "name": "doc_id",
5788
+ "thread_id": {
5789
+ "description": "Thread ID",
5790
+ "name": "thread_id",
4981
5791
  "required": true
4982
5792
  }
4983
5793
  },
4984
- "description": "Delete a document",
5794
+ "description": "Edit a thread (label and/or reassign face speaker)",
4985
5795
  "flags": {
4986
5796
  "json": {
4987
5797
  "description": "Format output as json.",
@@ -5013,11 +5823,25 @@
5013
5823
  "hasDynamicHelp": false,
5014
5824
  "multiple": false,
5015
5825
  "type": "option"
5826
+ },
5827
+ "label": {
5828
+ "description": "New thread label",
5829
+ "name": "label",
5830
+ "hasDynamicHelp": false,
5831
+ "multiple": false,
5832
+ "type": "option"
5833
+ },
5834
+ "face-speaker": {
5835
+ "description": "Reassign face speaker: set this speaker to role=user, all others to role=assistant",
5836
+ "name": "face-speaker",
5837
+ "hasDynamicHelp": false,
5838
+ "multiple": false,
5839
+ "type": "option"
5016
5840
  }
5017
5841
  },
5018
5842
  "hasDynamicHelp": false,
5019
5843
  "hiddenAliases": [],
5020
- "id": "compile:doc:delete",
5844
+ "id": "compile:thread:edit",
5021
5845
  "pluginAlias": "faces-cli",
5022
5846
  "pluginName": "faces-cli",
5023
5847
  "pluginType": "core",
@@ -5028,20 +5852,20 @@
5028
5852
  "dist",
5029
5853
  "commands",
5030
5854
  "compile",
5031
- "doc",
5032
- "delete.js"
5855
+ "thread",
5856
+ "edit.js"
5033
5857
  ]
5034
5858
  },
5035
- "compile:doc:edit": {
5859
+ "compile:thread:get": {
5036
5860
  "aliases": [],
5037
5861
  "args": {
5038
- "doc_id": {
5039
- "description": "Document ID",
5040
- "name": "doc_id",
5862
+ "thread_id": {
5863
+ "description": "Thread ID",
5864
+ "name": "thread_id",
5041
5865
  "required": true
5042
5866
  }
5043
5867
  },
5044
- "description": "Edit a document (label, content, or perspective)",
5868
+ "description": "Get a thread by ID",
5045
5869
  "flags": {
5046
5870
  "json": {
5047
5871
  "description": "Format output as json.",
@@ -5073,43 +5897,11 @@
5073
5897
  "hasDynamicHelp": false,
5074
5898
  "multiple": false,
5075
5899
  "type": "option"
5076
- },
5077
- "label": {
5078
- "description": "New label/title",
5079
- "name": "label",
5080
- "hasDynamicHelp": false,
5081
- "multiple": false,
5082
- "type": "option"
5083
- },
5084
- "content": {
5085
- "description": "New inline text content",
5086
- "name": "content",
5087
- "hasDynamicHelp": false,
5088
- "multiple": false,
5089
- "type": "option"
5090
- },
5091
- "file": {
5092
- "description": "Read new content from file",
5093
- "name": "file",
5094
- "hasDynamicHelp": false,
5095
- "multiple": false,
5096
- "type": "option"
5097
- },
5098
- "perspective": {
5099
- "description": "Perspective (first-person or third-person)",
5100
- "name": "perspective",
5101
- "hasDynamicHelp": false,
5102
- "multiple": false,
5103
- "options": [
5104
- "first-person",
5105
- "third-person"
5106
- ],
5107
- "type": "option"
5108
5900
  }
5109
5901
  },
5110
5902
  "hasDynamicHelp": false,
5111
5903
  "hiddenAliases": [],
5112
- "id": "compile:doc:edit",
5904
+ "id": "compile:thread:get",
5113
5905
  "pluginAlias": "faces-cli",
5114
5906
  "pluginName": "faces-cli",
5115
5907
  "pluginType": "core",
@@ -5120,20 +5912,20 @@
5120
5912
  "dist",
5121
5913
  "commands",
5122
5914
  "compile",
5123
- "doc",
5124
- "edit.js"
5915
+ "thread",
5916
+ "get.js"
5125
5917
  ]
5126
5918
  },
5127
- "compile:doc:get": {
5919
+ "compile:thread:list": {
5128
5920
  "aliases": [],
5129
5921
  "args": {
5130
- "doc_id": {
5131
- "description": "Document ID",
5132
- "name": "doc_id",
5922
+ "face_id": {
5923
+ "description": "Face alias",
5924
+ "name": "face_id",
5133
5925
  "required": true
5134
5926
  }
5135
5927
  },
5136
- "description": "Get a document by ID",
5928
+ "description": "List threads for a face",
5137
5929
  "flags": {
5138
5930
  "json": {
5139
5931
  "description": "Format output as json.",
@@ -5169,7 +5961,7 @@
5169
5961
  },
5170
5962
  "hasDynamicHelp": false,
5171
5963
  "hiddenAliases": [],
5172
- "id": "compile:doc:get",
5964
+ "id": "compile:thread:list",
5173
5965
  "pluginAlias": "faces-cli",
5174
5966
  "pluginName": "faces-cli",
5175
5967
  "pluginType": "core",
@@ -5180,20 +5972,20 @@
5180
5972
  "dist",
5181
5973
  "commands",
5182
5974
  "compile",
5183
- "doc",
5184
- "get.js"
5975
+ "thread",
5976
+ "list.js"
5185
5977
  ]
5186
5978
  },
5187
- "compile:doc": {
5979
+ "compile:thread:make": {
5188
5980
  "aliases": [],
5189
5981
  "args": {
5190
- "face_id": {
5191
- "description": "Face alias",
5192
- "name": "face_id",
5982
+ "thread_id": {
5983
+ "description": "Thread ID",
5984
+ "name": "thread_id",
5193
5985
  "required": true
5194
5986
  }
5195
5987
  },
5196
- "description": "Compile a document into a face (create make in one step)",
5988
+ "description": "Compile an existing thread (prepare + sync in one step)",
5197
5989
  "flags": {
5198
5990
  "json": {
5199
5991
  "description": "Format output as json.",
@@ -5226,39 +6018,6 @@
5226
6018
  "multiple": false,
5227
6019
  "type": "option"
5228
6020
  },
5229
- "label": {
5230
- "description": "Document label/title",
5231
- "name": "label",
5232
- "hasDynamicHelp": false,
5233
- "multiple": false,
5234
- "type": "option"
5235
- },
5236
- "content": {
5237
- "description": "Inline text content",
5238
- "name": "content",
5239
- "hasDynamicHelp": false,
5240
- "multiple": false,
5241
- "type": "option"
5242
- },
5243
- "file": {
5244
- "description": "Read content from file",
5245
- "name": "file",
5246
- "hasDynamicHelp": false,
5247
- "multiple": false,
5248
- "type": "option"
5249
- },
5250
- "perspective": {
5251
- "description": "Perspective",
5252
- "name": "perspective",
5253
- "default": "first-person",
5254
- "hasDynamicHelp": false,
5255
- "multiple": false,
5256
- "options": [
5257
- "first-person",
5258
- "third-person"
5259
- ],
5260
- "type": "option"
5261
- },
5262
6021
  "timeout": {
5263
6022
  "description": "Compile timeout in seconds (default: 600)",
5264
6023
  "name": "timeout",
@@ -5268,7 +6027,7 @@
5268
6027
  "type": "option"
5269
6028
  },
5270
6029
  "no-wait": {
5271
- "description": "Create and trigger compilation, then return immediately without polling.",
6030
+ "description": "Return immediately after triggering compilation. Prints the thread ID for manual polling.",
5272
6031
  "name": "no-wait",
5273
6032
  "allowNo": false,
5274
6033
  "type": "boolean"
@@ -5276,7 +6035,7 @@
5276
6035
  },
5277
6036
  "hasDynamicHelp": false,
5278
6037
  "hiddenAliases": [],
5279
- "id": "compile:doc",
6038
+ "id": "compile:thread:make",
5280
6039
  "pluginAlias": "faces-cli",
5281
6040
  "pluginName": "faces-cli",
5282
6041
  "pluginType": "core",
@@ -5287,20 +6046,20 @@
5287
6046
  "dist",
5288
6047
  "commands",
5289
6048
  "compile",
5290
- "doc",
5291
- "index.js"
6049
+ "thread",
6050
+ "make.js"
5292
6051
  ]
5293
6052
  },
5294
- "compile:doc:list": {
6053
+ "compile:thread:message": {
5295
6054
  "aliases": [],
5296
6055
  "args": {
5297
- "face_id": {
5298
- "description": "Face alias",
5299
- "name": "face_id",
6056
+ "thread_id": {
6057
+ "description": "Thread ID",
6058
+ "name": "thread_id",
5300
6059
  "required": true
5301
6060
  }
5302
6061
  },
5303
- "description": "List documents for a face",
6062
+ "description": "Send a user message to a thread",
5304
6063
  "flags": {
5305
6064
  "json": {
5306
6065
  "description": "Format output as json.",
@@ -5332,11 +6091,26 @@
5332
6091
  "hasDynamicHelp": false,
5333
6092
  "multiple": false,
5334
6093
  "type": "option"
6094
+ },
6095
+ "message": {
6096
+ "char": "m",
6097
+ "description": "User message to append",
6098
+ "name": "message",
6099
+ "required": true,
6100
+ "hasDynamicHelp": false,
6101
+ "multiple": false,
6102
+ "type": "option"
6103
+ },
6104
+ "oauth-only": {
6105
+ "description": "Prevent fallback to paid system key (use OAuth only)",
6106
+ "name": "oauth-only",
6107
+ "allowNo": false,
6108
+ "type": "boolean"
5335
6109
  }
5336
6110
  },
5337
6111
  "hasDynamicHelp": false,
5338
6112
  "hiddenAliases": [],
5339
- "id": "compile:doc:list",
6113
+ "id": "compile:thread:message",
5340
6114
  "pluginAlias": "faces-cli",
5341
6115
  "pluginName": "faces-cli",
5342
6116
  "pluginType": "core",
@@ -5347,20 +6121,20 @@
5347
6121
  "dist",
5348
6122
  "commands",
5349
6123
  "compile",
5350
- "doc",
5351
- "list.js"
6124
+ "thread",
6125
+ "message.js"
5352
6126
  ]
5353
6127
  },
5354
- "compile:doc:make": {
6128
+ "compile:thread:pause": {
5355
6129
  "aliases": [],
5356
6130
  "args": {
5357
- "doc_id": {
5358
- "description": "Document ID",
5359
- "name": "doc_id",
6131
+ "thread_id": {
6132
+ "description": "Thread ID",
6133
+ "name": "thread_id",
5360
6134
  "required": true
5361
6135
  }
5362
6136
  },
5363
- "description": "Compile an existing document (prepare + sync in one step)",
6137
+ "description": "Pause a running thread compilation (preserves progress, resume with make)",
5364
6138
  "flags": {
5365
6139
  "json": {
5366
6140
  "description": "Format output as json.",
@@ -5392,25 +6166,11 @@
5392
6166
  "hasDynamicHelp": false,
5393
6167
  "multiple": false,
5394
6168
  "type": "option"
5395
- },
5396
- "timeout": {
5397
- "description": "Compile timeout in seconds (default: 600)",
5398
- "name": "timeout",
5399
- "default": 600,
5400
- "hasDynamicHelp": false,
5401
- "multiple": false,
5402
- "type": "option"
5403
- },
5404
- "no-wait": {
5405
- "description": "Return immediately after triggering compilation. Prints the document ID for manual polling.",
5406
- "name": "no-wait",
5407
- "allowNo": false,
5408
- "type": "boolean"
5409
6169
  }
5410
6170
  },
5411
6171
  "hasDynamicHelp": false,
5412
6172
  "hiddenAliases": [],
5413
- "id": "compile:doc:make",
6173
+ "id": "compile:thread:pause",
5414
6174
  "pluginAlias": "faces-cli",
5415
6175
  "pluginName": "faces-cli",
5416
6176
  "pluginType": "core",
@@ -5421,20 +6181,20 @@
5421
6181
  "dist",
5422
6182
  "commands",
5423
6183
  "compile",
5424
- "doc",
5425
- "make.js"
6184
+ "thread",
6185
+ "pause.js"
5426
6186
  ]
5427
6187
  },
5428
- "compile:doc:pause": {
6188
+ "compile:thread:reset": {
5429
6189
  "aliases": [],
5430
6190
  "args": {
5431
- "doc_id": {
5432
- "description": "Document ID",
5433
- "name": "doc_id",
6191
+ "thread_id": {
6192
+ "description": "Thread ID",
6193
+ "name": "thread_id",
5434
6194
  "required": true
5435
6195
  }
5436
6196
  },
5437
- "description": "Pause a running document compilation (preserves progress, resume with make)",
6197
+ "description": "Reset thread compilation progress (wipe extraction, keep source messages)",
5438
6198
  "flags": {
5439
6199
  "json": {
5440
6200
  "description": "Format output as json.",
@@ -5466,11 +6226,17 @@
5466
6226
  "hasDynamicHelp": false,
5467
6227
  "multiple": false,
5468
6228
  "type": "option"
6229
+ },
6230
+ "yes": {
6231
+ "description": "Skip confirmation",
6232
+ "name": "yes",
6233
+ "allowNo": false,
6234
+ "type": "boolean"
5469
6235
  }
5470
6236
  },
5471
6237
  "hasDynamicHelp": false,
5472
6238
  "hiddenAliases": [],
5473
- "id": "compile:doc:pause",
6239
+ "id": "compile:thread:reset",
5474
6240
  "pluginAlias": "faces-cli",
5475
6241
  "pluginName": "faces-cli",
5476
6242
  "pluginType": "core",
@@ -5481,20 +6247,20 @@
5481
6247
  "dist",
5482
6248
  "commands",
5483
6249
  "compile",
5484
- "doc",
5485
- "pause.js"
6250
+ "thread",
6251
+ "reset.js"
5486
6252
  ]
5487
6253
  },
5488
- "compile:doc:reset": {
6254
+ "compile:thread:sync": {
5489
6255
  "aliases": [],
5490
6256
  "args": {
5491
- "doc_id": {
5492
- "description": "Document ID",
5493
- "name": "doc_id",
6257
+ "thread_id": {
6258
+ "description": "Thread ID",
6259
+ "name": "thread_id",
5494
6260
  "required": true
5495
6261
  }
5496
6262
  },
5497
- "description": "Reset document compilation progress (wipe extraction, keep content)",
6263
+ "description": "Archive and sync a thread into a face",
5498
6264
  "flags": {
5499
6265
  "json": {
5500
6266
  "description": "Format output as json.",
@@ -5526,17 +6292,11 @@
5526
6292
  "hasDynamicHelp": false,
5527
6293
  "multiple": false,
5528
6294
  "type": "option"
5529
- },
5530
- "yes": {
5531
- "description": "Skip confirmation",
5532
- "name": "yes",
5533
- "allowNo": false,
5534
- "type": "boolean"
5535
6295
  }
5536
6296
  },
5537
6297
  "hasDynamicHelp": false,
5538
6298
  "hiddenAliases": [],
5539
- "id": "compile:doc:reset",
6299
+ "id": "compile:thread:sync",
5540
6300
  "pluginAlias": "faces-cli",
5541
6301
  "pluginName": "faces-cli",
5542
6302
  "pluginType": "core",
@@ -5547,20 +6307,20 @@
5547
6307
  "dist",
5548
6308
  "commands",
5549
6309
  "compile",
5550
- "doc",
5551
- "reset.js"
6310
+ "thread",
6311
+ "sync.js"
5552
6312
  ]
5553
6313
  },
5554
- "face:tag:add": {
6314
+ "team:tag:add": {
5555
6315
  "aliases": [],
5556
6316
  "args": {
5557
- "alias": {
5558
- "description": "Face alias",
5559
- "name": "alias",
6317
+ "team_id": {
6318
+ "description": "Team ID",
6319
+ "name": "team_id",
5560
6320
  "required": true
5561
6321
  }
5562
6322
  },
5563
- "description": "Add tags to a face (appends, idempotent)",
6323
+ "description": "Add tags to a team (appends, idempotent)",
5564
6324
  "flags": {
5565
6325
  "json": {
5566
6326
  "description": "Format output as json.",
@@ -5604,7 +6364,7 @@
5604
6364
  },
5605
6365
  "hasDynamicHelp": false,
5606
6366
  "hiddenAliases": [],
5607
- "id": "face:tag:add",
6367
+ "id": "team:tag:add",
5608
6368
  "pluginAlias": "faces-cli",
5609
6369
  "pluginName": "faces-cli",
5610
6370
  "pluginType": "core",
@@ -5614,15 +6374,21 @@
5614
6374
  "relativePath": [
5615
6375
  "dist",
5616
6376
  "commands",
5617
- "face",
6377
+ "team",
5618
6378
  "tag",
5619
6379
  "add.js"
5620
6380
  ]
5621
6381
  },
5622
- "face:tag:all": {
6382
+ "team:tag:list": {
5623
6383
  "aliases": [],
5624
- "args": {},
5625
- "description": "List all tags across all your faces",
6384
+ "args": {
6385
+ "team_id": {
6386
+ "description": "Team ID",
6387
+ "name": "team_id",
6388
+ "required": true
6389
+ }
6390
+ },
6391
+ "description": "List tags on a team",
5626
6392
  "flags": {
5627
6393
  "json": {
5628
6394
  "description": "Format output as json.",
@@ -5658,7 +6424,7 @@
5658
6424
  },
5659
6425
  "hasDynamicHelp": false,
5660
6426
  "hiddenAliases": [],
5661
- "id": "face:tag:all",
6427
+ "id": "team:tag:list",
5662
6428
  "pluginAlias": "faces-cli",
5663
6429
  "pluginName": "faces-cli",
5664
6430
  "pluginType": "core",
@@ -5668,21 +6434,26 @@
5668
6434
  "relativePath": [
5669
6435
  "dist",
5670
6436
  "commands",
5671
- "face",
6437
+ "team",
5672
6438
  "tag",
5673
- "all.js"
6439
+ "list.js"
5674
6440
  ]
5675
6441
  },
5676
- "face:tag:list": {
6442
+ "team:tag:remove": {
5677
6443
  "aliases": [],
5678
6444
  "args": {
5679
- "alias": {
5680
- "description": "Face alias",
5681
- "name": "alias",
6445
+ "team_id": {
6446
+ "description": "Team ID",
6447
+ "name": "team_id",
6448
+ "required": true
6449
+ },
6450
+ "tag": {
6451
+ "description": "Tag to remove",
6452
+ "name": "tag",
5682
6453
  "required": true
5683
6454
  }
5684
6455
  },
5685
- "description": "List tags on a face",
6456
+ "description": "Remove a tag from a team",
5686
6457
  "flags": {
5687
6458
  "json": {
5688
6459
  "description": "Format output as json.",
@@ -5718,7 +6489,7 @@
5718
6489
  },
5719
6490
  "hasDynamicHelp": false,
5720
6491
  "hiddenAliases": [],
5721
- "id": "face:tag:list",
6492
+ "id": "team:tag:remove",
5722
6493
  "pluginAlias": "faces-cli",
5723
6494
  "pluginName": "faces-cli",
5724
6495
  "pluginType": "core",
@@ -5728,26 +6499,21 @@
5728
6499
  "relativePath": [
5729
6500
  "dist",
5730
6501
  "commands",
5731
- "face",
6502
+ "team",
5732
6503
  "tag",
5733
- "list.js"
6504
+ "remove.js"
5734
6505
  ]
5735
6506
  },
5736
- "face:tag:remove": {
6507
+ "team:tag:set": {
5737
6508
  "aliases": [],
5738
6509
  "args": {
5739
- "alias": {
5740
- "description": "Face alias",
5741
- "name": "alias",
5742
- "required": true
5743
- },
5744
- "tag": {
5745
- "description": "Tag to remove",
5746
- "name": "tag",
6510
+ "team_id": {
6511
+ "description": "Team ID",
6512
+ "name": "team_id",
5747
6513
  "required": true
5748
6514
  }
5749
6515
  },
5750
- "description": "Remove a tag from a face",
6516
+ "description": "Replace all tags on a team",
5751
6517
  "flags": {
5752
6518
  "json": {
5753
6519
  "description": "Format output as json.",
@@ -5779,11 +6545,19 @@
5779
6545
  "hasDynamicHelp": false,
5780
6546
  "multiple": false,
5781
6547
  "type": "option"
6548
+ },
6549
+ "tag": {
6550
+ "description": "Tag to set (repeatable, replaces all)",
6551
+ "name": "tag",
6552
+ "required": true,
6553
+ "hasDynamicHelp": false,
6554
+ "multiple": true,
6555
+ "type": "option"
5782
6556
  }
5783
6557
  },
5784
6558
  "hasDynamicHelp": false,
5785
6559
  "hiddenAliases": [],
5786
- "id": "face:tag:remove",
6560
+ "id": "team:tag:set",
5787
6561
  "pluginAlias": "faces-cli",
5788
6562
  "pluginName": "faces-cli",
5789
6563
  "pluginType": "core",
@@ -5793,12 +6567,12 @@
5793
6567
  "relativePath": [
5794
6568
  "dist",
5795
6569
  "commands",
5796
- "face",
6570
+ "team",
5797
6571
  "tag",
5798
- "remove.js"
6572
+ "set.js"
5799
6573
  ]
5800
6574
  },
5801
- "face:tag:set": {
6575
+ "face:tag:add": {
5802
6576
  "aliases": [],
5803
6577
  "args": {
5804
6578
  "alias": {
@@ -5807,7 +6581,7 @@
5807
6581
  "required": true
5808
6582
  }
5809
6583
  },
5810
- "description": "Replace all tags on a face",
6584
+ "description": "Add tags to a face (appends, idempotent)",
5811
6585
  "flags": {
5812
6586
  "json": {
5813
6587
  "description": "Format output as json.",
@@ -5841,7 +6615,7 @@
5841
6615
  "type": "option"
5842
6616
  },
5843
6617
  "tag": {
5844
- "description": "Tag to set (repeatable, replaces all)",
6618
+ "description": "Tag to add (repeatable)",
5845
6619
  "name": "tag",
5846
6620
  "required": true,
5847
6621
  "hasDynamicHelp": false,
@@ -5851,7 +6625,7 @@
5851
6625
  },
5852
6626
  "hasDynamicHelp": false,
5853
6627
  "hiddenAliases": [],
5854
- "id": "face:tag:set",
6628
+ "id": "face:tag:add",
5855
6629
  "pluginAlias": "faces-cli",
5856
6630
  "pluginName": "faces-cli",
5857
6631
  "pluginType": "core",
@@ -5863,19 +6637,13 @@
5863
6637
  "commands",
5864
6638
  "face",
5865
6639
  "tag",
5866
- "set.js"
6640
+ "add.js"
5867
6641
  ]
5868
6642
  },
5869
- "team:tag:add": {
6643
+ "face:tag:all": {
5870
6644
  "aliases": [],
5871
- "args": {
5872
- "team_id": {
5873
- "description": "Team ID",
5874
- "name": "team_id",
5875
- "required": true
5876
- }
5877
- },
5878
- "description": "Add tags to a team (appends, idempotent)",
6645
+ "args": {},
6646
+ "description": "List all tags across all your faces",
5879
6647
  "flags": {
5880
6648
  "json": {
5881
6649
  "description": "Format output as json.",
@@ -5907,19 +6675,11 @@
5907
6675
  "hasDynamicHelp": false,
5908
6676
  "multiple": false,
5909
6677
  "type": "option"
5910
- },
5911
- "tag": {
5912
- "description": "Tag to add (repeatable)",
5913
- "name": "tag",
5914
- "required": true,
5915
- "hasDynamicHelp": false,
5916
- "multiple": true,
5917
- "type": "option"
5918
6678
  }
5919
6679
  },
5920
6680
  "hasDynamicHelp": false,
5921
6681
  "hiddenAliases": [],
5922
- "id": "team:tag:add",
6682
+ "id": "face:tag:all",
5923
6683
  "pluginAlias": "faces-cli",
5924
6684
  "pluginName": "faces-cli",
5925
6685
  "pluginType": "core",
@@ -5929,21 +6689,21 @@
5929
6689
  "relativePath": [
5930
6690
  "dist",
5931
6691
  "commands",
5932
- "team",
6692
+ "face",
5933
6693
  "tag",
5934
- "add.js"
6694
+ "all.js"
5935
6695
  ]
5936
6696
  },
5937
- "team:tag:list": {
6697
+ "face:tag:list": {
5938
6698
  "aliases": [],
5939
6699
  "args": {
5940
- "team_id": {
5941
- "description": "Team ID",
5942
- "name": "team_id",
6700
+ "alias": {
6701
+ "description": "Face alias",
6702
+ "name": "alias",
5943
6703
  "required": true
5944
6704
  }
5945
6705
  },
5946
- "description": "List tags on a team",
6706
+ "description": "List tags on a face",
5947
6707
  "flags": {
5948
6708
  "json": {
5949
6709
  "description": "Format output as json.",
@@ -5979,7 +6739,7 @@
5979
6739
  },
5980
6740
  "hasDynamicHelp": false,
5981
6741
  "hiddenAliases": [],
5982
- "id": "team:tag:list",
6742
+ "id": "face:tag:list",
5983
6743
  "pluginAlias": "faces-cli",
5984
6744
  "pluginName": "faces-cli",
5985
6745
  "pluginType": "core",
@@ -5989,17 +6749,17 @@
5989
6749
  "relativePath": [
5990
6750
  "dist",
5991
6751
  "commands",
5992
- "team",
6752
+ "face",
5993
6753
  "tag",
5994
6754
  "list.js"
5995
6755
  ]
5996
6756
  },
5997
- "team:tag:remove": {
6757
+ "face:tag:remove": {
5998
6758
  "aliases": [],
5999
6759
  "args": {
6000
- "team_id": {
6001
- "description": "Team ID",
6002
- "name": "team_id",
6760
+ "alias": {
6761
+ "description": "Face alias",
6762
+ "name": "alias",
6003
6763
  "required": true
6004
6764
  },
6005
6765
  "tag": {
@@ -6008,7 +6768,7 @@
6008
6768
  "required": true
6009
6769
  }
6010
6770
  },
6011
- "description": "Remove a tag from a team",
6771
+ "description": "Remove a tag from a face",
6012
6772
  "flags": {
6013
6773
  "json": {
6014
6774
  "description": "Format output as json.",
@@ -6044,7 +6804,7 @@
6044
6804
  },
6045
6805
  "hasDynamicHelp": false,
6046
6806
  "hiddenAliases": [],
6047
- "id": "team:tag:remove",
6807
+ "id": "face:tag:remove",
6048
6808
  "pluginAlias": "faces-cli",
6049
6809
  "pluginName": "faces-cli",
6050
6810
  "pluginType": "core",
@@ -6054,21 +6814,21 @@
6054
6814
  "relativePath": [
6055
6815
  "dist",
6056
6816
  "commands",
6057
- "team",
6817
+ "face",
6058
6818
  "tag",
6059
6819
  "remove.js"
6060
6820
  ]
6061
6821
  },
6062
- "team:tag:set": {
6822
+ "face:tag:set": {
6063
6823
  "aliases": [],
6064
6824
  "args": {
6065
- "team_id": {
6066
- "description": "Team ID",
6067
- "name": "team_id",
6825
+ "alias": {
6826
+ "description": "Face alias",
6827
+ "name": "alias",
6068
6828
  "required": true
6069
6829
  }
6070
6830
  },
6071
- "description": "Replace all tags on a team",
6831
+ "description": "Replace all tags on a face",
6072
6832
  "flags": {
6073
6833
  "json": {
6074
6834
  "description": "Format output as json.",
@@ -6112,7 +6872,7 @@
6112
6872
  },
6113
6873
  "hasDynamicHelp": false,
6114
6874
  "hiddenAliases": [],
6115
- "id": "team:tag:set",
6875
+ "id": "face:tag:set",
6116
6876
  "pluginAlias": "faces-cli",
6117
6877
  "pluginName": "faces-cli",
6118
6878
  "pluginType": "core",
@@ -6122,11 +6882,11 @@
6122
6882
  "relativePath": [
6123
6883
  "dist",
6124
6884
  "commands",
6125
- "team",
6885
+ "face",
6126
6886
  "tag",
6127
6887
  "set.js"
6128
6888
  ]
6129
6889
  }
6130
6890
  },
6131
- "version": "1.7.4"
6891
+ "version": "1.7.5"
6132
6892
  }