faces-cli 1.7.6 → 1.7.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/commands/chat/chat.js +8 -0
  2. package/dist/commands/compile/doc/pause.d.ts +3 -0
  3. package/dist/commands/compile/doc/pause.js +52 -5
  4. package/dist/commands/compile/thread/pause.d.ts +3 -0
  5. package/dist/commands/compile/thread/pause.js +53 -5
  6. package/dist/poll.d.ts +21 -0
  7. package/dist/poll.js +34 -0
  8. package/dist/utils.d.ts +0 -15
  9. package/dist/utils.js +0 -75
  10. package/oclif.manifest.json +948 -1830
  11. package/package.json +1 -1
  12. package/dist/commands/billing/quota.d.ts +0 -10
  13. package/dist/commands/billing/quota.js +0 -12
  14. package/dist/commands/billing/subscription.d.ts +0 -10
  15. package/dist/commands/billing/subscription.js +0 -24
  16. package/dist/commands/face/upload.d.ts +0 -17
  17. package/dist/commands/face/upload.js +0 -66
  18. package/dist/commands/voiceprint/build-status.d.ts +0 -14
  19. package/dist/commands/voiceprint/build-status.js +0 -46
  20. package/dist/commands/voiceprint/build.d.ts +0 -23
  21. package/dist/commands/voiceprint/build.js +0 -109
  22. package/dist/commands/voiceprint/get.d.ts +0 -14
  23. package/dist/commands/voiceprint/get.js +0 -47
  24. package/dist/commands/voiceprint/refine-status.d.ts +0 -14
  25. package/dist/commands/voiceprint/refine-status.js +0 -43
  26. package/dist/commands/voiceprint/refine.d.ts +0 -23
  27. package/dist/commands/voiceprint/refine.js +0 -88
  28. package/dist/commands/voiceprint/revert.d.ts +0 -14
  29. package/dist/commands/voiceprint/revert.js +0 -36
  30. package/dist/commands/voiceprint/score-status.d.ts +0 -14
  31. package/dist/commands/voiceprint/score-status.js +0 -46
  32. package/dist/commands/voiceprint/score.d.ts +0 -24
  33. package/dist/commands/voiceprint/score.js +0 -114
  34. package/dist/commands/voiceprint/upload.d.ts +0 -17
  35. package/dist/commands/voiceprint/upload.js +0 -66
  36. package/dist/commands/voiceprint/versions.d.ts +0 -14
  37. package/dist/commands/voiceprint/versions.js +0 -44
  38. package/dist/voiceprint.d.ts +0 -28
  39. package/dist/voiceprint.js +0 -55
@@ -1113,112 +1113,6 @@
1113
1113
  "llm-costs.js"
1114
1114
  ]
1115
1115
  },
1116
- "billing:quota": {
1117
- "aliases": [],
1118
- "args": {},
1119
- "description": "Show compilation stats per face (deprecated — use compile:stats)",
1120
- "flags": {
1121
- "json": {
1122
- "description": "Format output as json.",
1123
- "helpGroup": "GLOBAL",
1124
- "name": "json",
1125
- "allowNo": false,
1126
- "type": "boolean"
1127
- },
1128
- "base-url": {
1129
- "description": "API base URL",
1130
- "env": "FACES_BASE_URL",
1131
- "name": "base-url",
1132
- "hasDynamicHelp": false,
1133
- "multiple": false,
1134
- "type": "option"
1135
- },
1136
- "token": {
1137
- "description": "JWT bearer token",
1138
- "env": "FACES_TOKEN",
1139
- "name": "token",
1140
- "hasDynamicHelp": false,
1141
- "multiple": false,
1142
- "type": "option"
1143
- },
1144
- "api-key": {
1145
- "description": "API key",
1146
- "env": "FACES_API_KEY",
1147
- "name": "api-key",
1148
- "hasDynamicHelp": false,
1149
- "multiple": false,
1150
- "type": "option"
1151
- }
1152
- },
1153
- "hasDynamicHelp": false,
1154
- "hiddenAliases": [],
1155
- "id": "billing:quota",
1156
- "pluginAlias": "faces-cli",
1157
- "pluginName": "faces-cli",
1158
- "pluginType": "core",
1159
- "strict": true,
1160
- "enableJsonFlag": true,
1161
- "isESM": true,
1162
- "relativePath": [
1163
- "dist",
1164
- "commands",
1165
- "billing",
1166
- "quota.js"
1167
- ]
1168
- },
1169
- "billing:subscription": {
1170
- "aliases": [],
1171
- "args": {},
1172
- "description": "Show current plan, face count, and renewal date",
1173
- "flags": {
1174
- "json": {
1175
- "description": "Format output as json.",
1176
- "helpGroup": "GLOBAL",
1177
- "name": "json",
1178
- "allowNo": false,
1179
- "type": "boolean"
1180
- },
1181
- "base-url": {
1182
- "description": "API base URL",
1183
- "env": "FACES_BASE_URL",
1184
- "name": "base-url",
1185
- "hasDynamicHelp": false,
1186
- "multiple": false,
1187
- "type": "option"
1188
- },
1189
- "token": {
1190
- "description": "JWT bearer token",
1191
- "env": "FACES_TOKEN",
1192
- "name": "token",
1193
- "hasDynamicHelp": false,
1194
- "multiple": false,
1195
- "type": "option"
1196
- },
1197
- "api-key": {
1198
- "description": "API key",
1199
- "env": "FACES_API_KEY",
1200
- "name": "api-key",
1201
- "hasDynamicHelp": false,
1202
- "multiple": false,
1203
- "type": "option"
1204
- }
1205
- },
1206
- "hasDynamicHelp": false,
1207
- "hiddenAliases": [],
1208
- "id": "billing:subscription",
1209
- "pluginAlias": "faces-cli",
1210
- "pluginName": "faces-cli",
1211
- "pluginType": "core",
1212
- "strict": true,
1213
- "enableJsonFlag": true,
1214
- "isESM": true,
1215
- "relativePath": [
1216
- "dist",
1217
- "commands",
1218
- "billing",
1219
- "subscription.js"
1220
- ]
1221
- },
1222
1116
  "billing:topup": {
1223
1117
  "aliases": [],
1224
1118
  "args": {},
@@ -2326,10 +2220,10 @@
2326
2220
  "show.js"
2327
2221
  ]
2328
2222
  },
2329
- "keys:create": {
2223
+ "face:attributes": {
2330
2224
  "aliases": [],
2331
2225
  "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.",
2226
+ "description": "List all supported attribute keys",
2333
2227
  "flags": {
2334
2228
  "json": {
2335
2229
  "description": "Format output as json.",
@@ -2361,53 +2255,11 @@
2361
2255
  "hasDynamicHelp": false,
2362
2256
  "multiple": false,
2363
2257
  "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
2258
  }
2407
2259
  },
2408
2260
  "hasDynamicHelp": false,
2409
2261
  "hiddenAliases": [],
2410
- "id": "keys:create",
2262
+ "id": "face:attributes",
2411
2263
  "pluginAlias": "faces-cli",
2412
2264
  "pluginName": "faces-cli",
2413
2265
  "pluginType": "core",
@@ -2417,14 +2269,14 @@
2417
2269
  "relativePath": [
2418
2270
  "dist",
2419
2271
  "commands",
2420
- "keys",
2421
- "create.js"
2272
+ "face",
2273
+ "attributes.js"
2422
2274
  ]
2423
2275
  },
2424
- "keys:list": {
2276
+ "face:create": {
2425
2277
  "aliases": [],
2426
2278
  "args": {},
2427
- "description": "List all API keys (JWT required)",
2279
+ "description": "Create a new face",
2428
2280
  "flags": {
2429
2281
  "json": {
2430
2282
  "description": "Format output as json.",
@@ -2456,11 +2308,86 @@
2456
2308
  "hasDynamicHelp": false,
2457
2309
  "multiple": false,
2458
2310
  "type": "option"
2311
+ },
2312
+ "name": {
2313
+ "description": "Display name",
2314
+ "name": "name",
2315
+ "required": true,
2316
+ "hasDynamicHelp": false,
2317
+ "multiple": false,
2318
+ "type": "option"
2319
+ },
2320
+ "alias": {
2321
+ "description": "Unique alias slug",
2322
+ "name": "alias",
2323
+ "required": true,
2324
+ "hasDynamicHelp": false,
2325
+ "multiple": false,
2326
+ "type": "option"
2327
+ },
2328
+ "description": {
2329
+ "description": "Plain-text description / bio (max 1500 chars)",
2330
+ "name": "description",
2331
+ "hasDynamicHelp": false,
2332
+ "multiple": false,
2333
+ "type": "option"
2334
+ },
2335
+ "tag": {
2336
+ "description": "Tag label (repeatable, lowercase)",
2337
+ "name": "tag",
2338
+ "hasDynamicHelp": false,
2339
+ "multiple": true,
2340
+ "type": "option"
2341
+ },
2342
+ "default-model": {
2343
+ "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
2344
+ "name": "default-model",
2345
+ "hasDynamicHelp": false,
2346
+ "multiple": false,
2347
+ "type": "option"
2348
+ },
2349
+ "formula": {
2350
+ "description": "Boolean formula over owned concrete face aliases (e.g. \"a | b\", \"(a | b) - c\"). Creates a composite face.",
2351
+ "name": "formula",
2352
+ "hasDynamicHelp": false,
2353
+ "multiple": false,
2354
+ "type": "option"
2355
+ },
2356
+ "attr": {
2357
+ "description": "Attribute KEY=VALUE (repeatable)",
2358
+ "name": "attr",
2359
+ "hasDynamicHelp": false,
2360
+ "multiple": true,
2361
+ "type": "option"
2362
+ },
2363
+ "tool": {
2364
+ "description": "Tool name to enable (repeatable)",
2365
+ "name": "tool",
2366
+ "hasDynamicHelp": false,
2367
+ "multiple": true,
2368
+ "type": "option"
2369
+ },
2370
+ "profile-addendum": {
2371
+ "description": "Per-face system prompt, injected after the persona profile and before any per-request system prompt (max 100,000 chars).",
2372
+ "name": "profile-addendum",
2373
+ "hasDynamicHelp": false,
2374
+ "multiple": false,
2375
+ "type": "option"
2376
+ },
2377
+ "profile-addendum-file": {
2378
+ "description": "Read the per-face system prompt from a file (alternative to --profile-addendum).",
2379
+ "exclusive": [
2380
+ "profile-addendum"
2381
+ ],
2382
+ "name": "profile-addendum-file",
2383
+ "hasDynamicHelp": false,
2384
+ "multiple": false,
2385
+ "type": "option"
2459
2386
  }
2460
2387
  },
2461
2388
  "hasDynamicHelp": false,
2462
2389
  "hiddenAliases": [],
2463
- "id": "keys:list",
2390
+ "id": "face:create",
2464
2391
  "pluginAlias": "faces-cli",
2465
2392
  "pluginName": "faces-cli",
2466
2393
  "pluginType": "core",
@@ -2470,20 +2397,20 @@
2470
2397
  "relativePath": [
2471
2398
  "dist",
2472
2399
  "commands",
2473
- "keys",
2474
- "list.js"
2400
+ "face",
2401
+ "create.js"
2475
2402
  ]
2476
2403
  },
2477
- "keys:revoke": {
2404
+ "face:delete": {
2478
2405
  "aliases": [],
2479
2406
  "args": {
2480
- "key_id": {
2481
- "description": "Key ID",
2482
- "name": "key_id",
2407
+ "face_id": {
2408
+ "description": "Face alias",
2409
+ "name": "face_id",
2483
2410
  "required": true
2484
2411
  }
2485
2412
  },
2486
- "description": "Revoke an API key (JWT required)",
2413
+ "description": "Delete a face permanently",
2487
2414
  "flags": {
2488
2415
  "json": {
2489
2416
  "description": "Format output as json.",
@@ -2525,7 +2452,7 @@
2525
2452
  },
2526
2453
  "hasDynamicHelp": false,
2527
2454
  "hiddenAliases": [],
2528
- "id": "keys:revoke",
2455
+ "id": "face:delete",
2529
2456
  "pluginAlias": "faces-cli",
2530
2457
  "pluginName": "faces-cli",
2531
2458
  "pluginType": "core",
@@ -2535,879 +2462,11 @@
2535
2462
  "relativePath": [
2536
2463
  "dist",
2537
2464
  "commands",
2538
- "keys",
2539
- "revoke.js"
2465
+ "face",
2466
+ "delete.js"
2540
2467
  ]
2541
2468
  },
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": {
2689
- "aliases": [],
2690
- "args": {},
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",
2939
- "flags": {
2940
- "json": {
2941
- "description": "Format output as json.",
2942
- "helpGroup": "GLOBAL",
2943
- "name": "json",
2944
- "allowNo": false,
2945
- "type": "boolean"
2946
- },
2947
- "base-url": {
2948
- "description": "API base URL",
2949
- "env": "FACES_BASE_URL",
2950
- "name": "base-url",
2951
- "hasDynamicHelp": false,
2952
- "multiple": false,
2953
- "type": "option"
2954
- },
2955
- "token": {
2956
- "description": "JWT bearer token",
2957
- "env": "FACES_TOKEN",
2958
- "name": "token",
2959
- "hasDynamicHelp": false,
2960
- "multiple": false,
2961
- "type": "option"
2962
- },
2963
- "api-key": {
2964
- "description": "API key",
2965
- "env": "FACES_API_KEY",
2966
- "name": "api-key",
2967
- "hasDynamicHelp": false,
2968
- "multiple": false,
2969
- "type": "option"
2970
- }
2971
- },
2972
- "hasDynamicHelp": false,
2973
- "hiddenAliases": [],
2974
- "id": "team:get",
2975
- "pluginAlias": "faces-cli",
2976
- "pluginName": "faces-cli",
2977
- "pluginType": "core",
2978
- "strict": true,
2979
- "enableJsonFlag": true,
2980
- "isESM": true,
2981
- "relativePath": [
2982
- "dist",
2983
- "commands",
2984
- "team",
2985
- "get.js"
2986
- ]
2987
- },
2988
- "team:list": {
2989
- "aliases": [],
2990
- "args": {},
2991
- "description": "List your teams",
2992
- "flags": {
2993
- "json": {
2994
- "description": "Format output as json.",
2995
- "helpGroup": "GLOBAL",
2996
- "name": "json",
2997
- "allowNo": false,
2998
- "type": "boolean"
2999
- },
3000
- "base-url": {
3001
- "description": "API base URL",
3002
- "env": "FACES_BASE_URL",
3003
- "name": "base-url",
3004
- "hasDynamicHelp": false,
3005
- "multiple": false,
3006
- "type": "option"
3007
- },
3008
- "token": {
3009
- "description": "JWT bearer token",
3010
- "env": "FACES_TOKEN",
3011
- "name": "token",
3012
- "hasDynamicHelp": false,
3013
- "multiple": false,
3014
- "type": "option"
3015
- },
3016
- "api-key": {
3017
- "description": "API key",
3018
- "env": "FACES_API_KEY",
3019
- "name": "api-key",
3020
- "hasDynamicHelp": false,
3021
- "multiple": false,
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"
3058
- },
3059
- "base-url": {
3060
- "description": "API base URL",
3061
- "env": "FACES_BASE_URL",
3062
- "name": "base-url",
3063
- "hasDynamicHelp": false,
3064
- "multiple": false,
3065
- "type": "option"
3066
- },
3067
- "token": {
3068
- "description": "JWT bearer token",
3069
- "env": "FACES_TOKEN",
3070
- "name": "token",
3071
- "hasDynamicHelp": false,
3072
- "multiple": false,
3073
- "type": "option"
3074
- },
3075
- "api-key": {
3076
- "description": "API key",
3077
- "env": "FACES_API_KEY",
3078
- "name": "api-key",
3079
- "hasDynamicHelp": false,
3080
- "multiple": false,
3081
- "type": "option"
3082
- }
3083
- },
3084
- "hasDynamicHelp": false,
3085
- "hiddenAliases": [],
3086
- "id": "team:members",
3087
- "pluginAlias": "faces-cli",
3088
- "pluginName": "faces-cli",
3089
- "pluginType": "core",
3090
- "strict": true,
3091
- "enableJsonFlag": true,
3092
- "isESM": true,
3093
- "relativePath": [
3094
- "dist",
3095
- "commands",
3096
- "team",
3097
- "members.js"
3098
- ]
3099
- },
3100
- "team:remove": {
3101
- "aliases": [],
3102
- "args": {
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",
3111
- "required": true
3112
- }
3113
- },
3114
- "description": "Remove a face from a team",
3115
- "flags": {
3116
- "json": {
3117
- "description": "Format output as json.",
3118
- "helpGroup": "GLOBAL",
3119
- "name": "json",
3120
- "allowNo": false,
3121
- "type": "boolean"
3122
- },
3123
- "base-url": {
3124
- "description": "API base URL",
3125
- "env": "FACES_BASE_URL",
3126
- "name": "base-url",
3127
- "hasDynamicHelp": false,
3128
- "multiple": false,
3129
- "type": "option"
3130
- },
3131
- "token": {
3132
- "description": "JWT bearer token",
3133
- "env": "FACES_TOKEN",
3134
- "name": "token",
3135
- "hasDynamicHelp": false,
3136
- "multiple": false,
3137
- "type": "option"
3138
- },
3139
- "api-key": {
3140
- "description": "API key",
3141
- "env": "FACES_API_KEY",
3142
- "name": "api-key",
3143
- "hasDynamicHelp": false,
3144
- "multiple": false,
3145
- "type": "option"
3146
- }
3147
- },
3148
- "hasDynamicHelp": false,
3149
- "hiddenAliases": [],
3150
- "id": "team:remove",
3151
- "pluginAlias": "faces-cli",
3152
- "pluginName": "faces-cli",
3153
- "pluginType": "core",
3154
- "strict": true,
3155
- "enableJsonFlag": true,
3156
- "isESM": true,
3157
- "relativePath": [
3158
- "dist",
3159
- "commands",
3160
- "team",
3161
- "remove.js"
3162
- ]
3163
- },
3164
- "face:attributes": {
3165
- "aliases": [],
3166
- "args": {},
3167
- "description": "List all supported attribute keys",
3168
- "flags": {
3169
- "json": {
3170
- "description": "Format output as json.",
3171
- "helpGroup": "GLOBAL",
3172
- "name": "json",
3173
- "allowNo": false,
3174
- "type": "boolean"
3175
- },
3176
- "base-url": {
3177
- "description": "API base URL",
3178
- "env": "FACES_BASE_URL",
3179
- "name": "base-url",
3180
- "hasDynamicHelp": false,
3181
- "multiple": false,
3182
- "type": "option"
3183
- },
3184
- "token": {
3185
- "description": "JWT bearer token",
3186
- "env": "FACES_TOKEN",
3187
- "name": "token",
3188
- "hasDynamicHelp": false,
3189
- "multiple": false,
3190
- "type": "option"
3191
- },
3192
- "api-key": {
3193
- "description": "API key",
3194
- "env": "FACES_API_KEY",
3195
- "name": "api-key",
3196
- "hasDynamicHelp": false,
3197
- "multiple": false,
3198
- "type": "option"
3199
- }
3200
- },
3201
- "hasDynamicHelp": false,
3202
- "hiddenAliases": [],
3203
- "id": "face:attributes",
3204
- "pluginAlias": "faces-cli",
3205
- "pluginName": "faces-cli",
3206
- "pluginType": "core",
3207
- "strict": true,
3208
- "enableJsonFlag": true,
3209
- "isESM": true,
3210
- "relativePath": [
3211
- "dist",
3212
- "commands",
3213
- "face",
3214
- "attributes.js"
3215
- ]
3216
- },
3217
- "face:create": {
3218
- "aliases": [],
3219
- "args": {},
3220
- "description": "Create a new face",
3221
- "flags": {
3222
- "json": {
3223
- "description": "Format output as json.",
3224
- "helpGroup": "GLOBAL",
3225
- "name": "json",
3226
- "allowNo": false,
3227
- "type": "boolean"
3228
- },
3229
- "base-url": {
3230
- "description": "API base URL",
3231
- "env": "FACES_BASE_URL",
3232
- "name": "base-url",
3233
- "hasDynamicHelp": false,
3234
- "multiple": false,
3235
- "type": "option"
3236
- },
3237
- "token": {
3238
- "description": "JWT bearer token",
3239
- "env": "FACES_TOKEN",
3240
- "name": "token",
3241
- "hasDynamicHelp": false,
3242
- "multiple": false,
3243
- "type": "option"
3244
- },
3245
- "api-key": {
3246
- "description": "API key",
3247
- "env": "FACES_API_KEY",
3248
- "name": "api-key",
3249
- "hasDynamicHelp": false,
3250
- "multiple": false,
3251
- "type": "option"
3252
- },
3253
- "name": {
3254
- "description": "Display name",
3255
- "name": "name",
3256
- "required": true,
3257
- "hasDynamicHelp": false,
3258
- "multiple": false,
3259
- "type": "option"
3260
- },
3261
- "alias": {
3262
- "description": "Unique alias slug",
3263
- "name": "alias",
3264
- "required": true,
3265
- "hasDynamicHelp": false,
3266
- "multiple": false,
3267
- "type": "option"
3268
- },
3269
- "description": {
3270
- "description": "Plain-text description / bio (max 1500 chars)",
3271
- "name": "description",
3272
- "hasDynamicHelp": false,
3273
- "multiple": false,
3274
- "type": "option"
3275
- },
3276
- "tag": {
3277
- "description": "Tag label (repeatable, lowercase)",
3278
- "name": "tag",
3279
- "hasDynamicHelp": false,
3280
- "multiple": true,
3281
- "type": "option"
3282
- },
3283
- "default-model": {
3284
- "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
3285
- "name": "default-model",
3286
- "hasDynamicHelp": false,
3287
- "multiple": false,
3288
- "type": "option"
3289
- },
3290
- "formula": {
3291
- "description": "Boolean formula over owned concrete face aliases (e.g. \"a | b\", \"(a | b) - c\"). Creates a composite face.",
3292
- "name": "formula",
3293
- "hasDynamicHelp": false,
3294
- "multiple": false,
3295
- "type": "option"
3296
- },
3297
- "attr": {
3298
- "description": "Attribute KEY=VALUE (repeatable)",
3299
- "name": "attr",
3300
- "hasDynamicHelp": false,
3301
- "multiple": true,
3302
- "type": "option"
3303
- },
3304
- "tool": {
3305
- "description": "Tool name to enable (repeatable)",
3306
- "name": "tool",
3307
- "hasDynamicHelp": false,
3308
- "multiple": true,
3309
- "type": "option"
3310
- },
3311
- "profile-addendum": {
3312
- "description": "Per-face system prompt, injected after the persona profile and before any per-request system prompt (max 100,000 chars).",
3313
- "name": "profile-addendum",
3314
- "hasDynamicHelp": false,
3315
- "multiple": false,
3316
- "type": "option"
3317
- },
3318
- "profile-addendum-file": {
3319
- "description": "Read the per-face system prompt from a file (alternative to --profile-addendum).",
3320
- "exclusive": [
3321
- "profile-addendum"
3322
- ],
3323
- "name": "profile-addendum-file",
3324
- "hasDynamicHelp": false,
3325
- "multiple": false,
3326
- "type": "option"
3327
- }
3328
- },
3329
- "hasDynamicHelp": false,
3330
- "hiddenAliases": [],
3331
- "id": "face:create",
3332
- "pluginAlias": "faces-cli",
3333
- "pluginName": "faces-cli",
3334
- "pluginType": "core",
3335
- "strict": true,
3336
- "enableJsonFlag": true,
3337
- "isESM": true,
3338
- "relativePath": [
3339
- "dist",
3340
- "commands",
3341
- "face",
3342
- "create.js"
3343
- ]
3344
- },
3345
- "face:delete": {
3346
- "aliases": [],
3347
- "args": {
3348
- "face_id": {
3349
- "description": "Face alias",
3350
- "name": "face_id",
3351
- "required": true
3352
- }
3353
- },
3354
- "description": "Delete a face permanently",
3355
- "flags": {
3356
- "json": {
3357
- "description": "Format output as json.",
3358
- "helpGroup": "GLOBAL",
3359
- "name": "json",
3360
- "allowNo": false,
3361
- "type": "boolean"
3362
- },
3363
- "base-url": {
3364
- "description": "API base URL",
3365
- "env": "FACES_BASE_URL",
3366
- "name": "base-url",
3367
- "hasDynamicHelp": false,
3368
- "multiple": false,
3369
- "type": "option"
3370
- },
3371
- "token": {
3372
- "description": "JWT bearer token",
3373
- "env": "FACES_TOKEN",
3374
- "name": "token",
3375
- "hasDynamicHelp": false,
3376
- "multiple": false,
3377
- "type": "option"
3378
- },
3379
- "api-key": {
3380
- "description": "API key",
3381
- "env": "FACES_API_KEY",
3382
- "name": "api-key",
3383
- "hasDynamicHelp": false,
3384
- "multiple": false,
3385
- "type": "option"
3386
- },
3387
- "yes": {
3388
- "description": "Skip confirmation",
3389
- "name": "yes",
3390
- "allowNo": false,
3391
- "type": "boolean"
3392
- }
3393
- },
3394
- "hasDynamicHelp": false,
3395
- "hiddenAliases": [],
3396
- "id": "face:delete",
3397
- "pluginAlias": "faces-cli",
3398
- "pluginName": "faces-cli",
3399
- "pluginType": "core",
3400
- "strict": true,
3401
- "enableJsonFlag": true,
3402
- "isESM": true,
3403
- "relativePath": [
3404
- "dist",
3405
- "commands",
3406
- "face",
3407
- "delete.js"
3408
- ]
3409
- },
3410
- "face:diff": {
2469
+ "face:diff": {
3411
2470
  "aliases": [],
3412
2471
  "args": {},
3413
2472
  "description": "Compare owned faces pairwise across all centroid components",
@@ -4024,19 +3083,229 @@
4024
3083
  "hasDynamicHelp": false,
4025
3084
  "multiple": false,
4026
3085
  "type": "option"
4027
- },
4028
- "team": {
4029
- "description": "Team ID (repeatable, replaces all memberships)",
4030
- "name": "team",
4031
- "required": true,
4032
- "hasDynamicHelp": false,
4033
- "multiple": true,
4034
- "type": "option"
3086
+ },
3087
+ "team": {
3088
+ "description": "Team ID (repeatable, replaces all memberships)",
3089
+ "name": "team",
3090
+ "required": true,
3091
+ "hasDynamicHelp": false,
3092
+ "multiple": true,
3093
+ "type": "option"
3094
+ }
3095
+ },
3096
+ "hasDynamicHelp": false,
3097
+ "hiddenAliases": [],
3098
+ "id": "face:teams",
3099
+ "pluginAlias": "faces-cli",
3100
+ "pluginName": "faces-cli",
3101
+ "pluginType": "core",
3102
+ "strict": true,
3103
+ "enableJsonFlag": true,
3104
+ "isESM": true,
3105
+ "relativePath": [
3106
+ "dist",
3107
+ "commands",
3108
+ "face",
3109
+ "teams.js"
3110
+ ]
3111
+ },
3112
+ "face:unlock": {
3113
+ "aliases": [],
3114
+ "args": {
3115
+ "face_id": {
3116
+ "description": "Face alias",
3117
+ "name": "face_id",
3118
+ "required": true
3119
+ }
3120
+ },
3121
+ "description": "Unlock a face (make it writable again). Thaws the face and everything it owns (documents, threads, voiceprint).",
3122
+ "examples": [
3123
+ "<%= config.bin %> <%= command.id %> socrates"
3124
+ ],
3125
+ "flags": {
3126
+ "json": {
3127
+ "description": "Format output as json.",
3128
+ "helpGroup": "GLOBAL",
3129
+ "name": "json",
3130
+ "allowNo": false,
3131
+ "type": "boolean"
3132
+ },
3133
+ "base-url": {
3134
+ "description": "API base URL",
3135
+ "env": "FACES_BASE_URL",
3136
+ "name": "base-url",
3137
+ "hasDynamicHelp": false,
3138
+ "multiple": false,
3139
+ "type": "option"
3140
+ },
3141
+ "token": {
3142
+ "description": "JWT bearer token",
3143
+ "env": "FACES_TOKEN",
3144
+ "name": "token",
3145
+ "hasDynamicHelp": false,
3146
+ "multiple": false,
3147
+ "type": "option"
3148
+ },
3149
+ "api-key": {
3150
+ "description": "API key",
3151
+ "env": "FACES_API_KEY",
3152
+ "name": "api-key",
3153
+ "hasDynamicHelp": false,
3154
+ "multiple": false,
3155
+ "type": "option"
3156
+ }
3157
+ },
3158
+ "hasDynamicHelp": false,
3159
+ "hiddenAliases": [],
3160
+ "id": "face:unlock",
3161
+ "pluginAlias": "faces-cli",
3162
+ "pluginName": "faces-cli",
3163
+ "pluginType": "core",
3164
+ "strict": true,
3165
+ "enableJsonFlag": true,
3166
+ "isESM": true,
3167
+ "relativePath": [
3168
+ "dist",
3169
+ "commands",
3170
+ "face",
3171
+ "unlock.js"
3172
+ ]
3173
+ },
3174
+ "keys:create": {
3175
+ "aliases": [],
3176
+ "args": {},
3177
+ "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.",
3178
+ "flags": {
3179
+ "json": {
3180
+ "description": "Format output as json.",
3181
+ "helpGroup": "GLOBAL",
3182
+ "name": "json",
3183
+ "allowNo": false,
3184
+ "type": "boolean"
3185
+ },
3186
+ "base-url": {
3187
+ "description": "API base URL",
3188
+ "env": "FACES_BASE_URL",
3189
+ "name": "base-url",
3190
+ "hasDynamicHelp": false,
3191
+ "multiple": false,
3192
+ "type": "option"
3193
+ },
3194
+ "token": {
3195
+ "description": "JWT bearer token",
3196
+ "env": "FACES_TOKEN",
3197
+ "name": "token",
3198
+ "hasDynamicHelp": false,
3199
+ "multiple": false,
3200
+ "type": "option"
3201
+ },
3202
+ "api-key": {
3203
+ "description": "API key",
3204
+ "env": "FACES_API_KEY",
3205
+ "name": "api-key",
3206
+ "hasDynamicHelp": false,
3207
+ "multiple": false,
3208
+ "type": "option"
3209
+ },
3210
+ "name": {
3211
+ "description": "Key name/label",
3212
+ "name": "name",
3213
+ "required": true,
3214
+ "hasDynamicHelp": false,
3215
+ "multiple": false,
3216
+ "type": "option"
3217
+ },
3218
+ "expires-days": {
3219
+ "description": "Expiry in days (omit for no expiry)",
3220
+ "name": "expires-days",
3221
+ "hasDynamicHelp": false,
3222
+ "multiple": false,
3223
+ "type": "option"
3224
+ },
3225
+ "budget": {
3226
+ "description": "Spend budget in USD",
3227
+ "name": "budget",
3228
+ "hasDynamicHelp": false,
3229
+ "multiple": false,
3230
+ "type": "option"
3231
+ },
3232
+ "face": {
3233
+ "description": "Allowed face alias (repeatable)",
3234
+ "name": "face",
3235
+ "hasDynamicHelp": false,
3236
+ "multiple": true,
3237
+ "type": "option"
3238
+ },
3239
+ "model": {
3240
+ "description": "Allowed model name (repeatable)",
3241
+ "name": "model",
3242
+ "hasDynamicHelp": false,
3243
+ "multiple": true,
3244
+ "type": "option"
3245
+ },
3246
+ "save": {
3247
+ "description": "Save the new key to ~/.faces/config.json as api_key (default: true; use --no-save to skip)",
3248
+ "name": "save",
3249
+ "allowNo": true,
3250
+ "type": "boolean"
3251
+ }
3252
+ },
3253
+ "hasDynamicHelp": false,
3254
+ "hiddenAliases": [],
3255
+ "id": "keys:create",
3256
+ "pluginAlias": "faces-cli",
3257
+ "pluginName": "faces-cli",
3258
+ "pluginType": "core",
3259
+ "strict": true,
3260
+ "enableJsonFlag": true,
3261
+ "isESM": true,
3262
+ "relativePath": [
3263
+ "dist",
3264
+ "commands",
3265
+ "keys",
3266
+ "create.js"
3267
+ ]
3268
+ },
3269
+ "keys:list": {
3270
+ "aliases": [],
3271
+ "args": {},
3272
+ "description": "List all API keys (JWT required)",
3273
+ "flags": {
3274
+ "json": {
3275
+ "description": "Format output as json.",
3276
+ "helpGroup": "GLOBAL",
3277
+ "name": "json",
3278
+ "allowNo": false,
3279
+ "type": "boolean"
3280
+ },
3281
+ "base-url": {
3282
+ "description": "API base URL",
3283
+ "env": "FACES_BASE_URL",
3284
+ "name": "base-url",
3285
+ "hasDynamicHelp": false,
3286
+ "multiple": false,
3287
+ "type": "option"
3288
+ },
3289
+ "token": {
3290
+ "description": "JWT bearer token",
3291
+ "env": "FACES_TOKEN",
3292
+ "name": "token",
3293
+ "hasDynamicHelp": false,
3294
+ "multiple": false,
3295
+ "type": "option"
3296
+ },
3297
+ "api-key": {
3298
+ "description": "API key",
3299
+ "env": "FACES_API_KEY",
3300
+ "name": "api-key",
3301
+ "hasDynamicHelp": false,
3302
+ "multiple": false,
3303
+ "type": "option"
4035
3304
  }
4036
3305
  },
4037
3306
  "hasDynamicHelp": false,
4038
3307
  "hiddenAliases": [],
4039
- "id": "face:teams",
3308
+ "id": "keys:list",
4040
3309
  "pluginAlias": "faces-cli",
4041
3310
  "pluginName": "faces-cli",
4042
3311
  "pluginType": "core",
@@ -4046,23 +3315,20 @@
4046
3315
  "relativePath": [
4047
3316
  "dist",
4048
3317
  "commands",
4049
- "face",
4050
- "teams.js"
3318
+ "keys",
3319
+ "list.js"
4051
3320
  ]
4052
3321
  },
4053
- "face:unlock": {
3322
+ "keys:revoke": {
4054
3323
  "aliases": [],
4055
3324
  "args": {
4056
- "face_id": {
4057
- "description": "Face alias",
4058
- "name": "face_id",
3325
+ "key_id": {
3326
+ "description": "Key ID",
3327
+ "name": "key_id",
4059
3328
  "required": true
4060
3329
  }
4061
3330
  },
4062
- "description": "Unlock a face (make it writable again). Thaws the face and everything it owns (documents, threads, voiceprint).",
4063
- "examples": [
4064
- "<%= config.bin %> <%= command.id %> socrates"
4065
- ],
3331
+ "description": "Revoke an API key (JWT required)",
4066
3332
  "flags": {
4067
3333
  "json": {
4068
3334
  "description": "Format output as json.",
@@ -4094,11 +3360,17 @@
4094
3360
  "hasDynamicHelp": false,
4095
3361
  "multiple": false,
4096
3362
  "type": "option"
3363
+ },
3364
+ "yes": {
3365
+ "description": "Skip confirmation",
3366
+ "name": "yes",
3367
+ "allowNo": false,
3368
+ "type": "boolean"
4097
3369
  }
4098
3370
  },
4099
3371
  "hasDynamicHelp": false,
4100
3372
  "hiddenAliases": [],
4101
- "id": "face:unlock",
3373
+ "id": "keys:revoke",
4102
3374
  "pluginAlias": "faces-cli",
4103
3375
  "pluginName": "faces-cli",
4104
3376
  "pluginType": "core",
@@ -4108,20 +3380,20 @@
4108
3380
  "relativePath": [
4109
3381
  "dist",
4110
3382
  "commands",
4111
- "face",
4112
- "unlock.js"
3383
+ "keys",
3384
+ "revoke.js"
4113
3385
  ]
4114
3386
  },
4115
- "face:upload": {
3387
+ "keys:update": {
4116
3388
  "aliases": [],
4117
3389
  "args": {
4118
- "face_id": {
4119
- "description": "Face alias",
4120
- "name": "face_id",
3390
+ "key_id": {
3391
+ "description": "Key ID",
3392
+ "name": "key_id",
4121
3393
  "required": true
4122
3394
  }
4123
3395
  },
4124
- "description": "Upload a file (text/PDF/audio/video) to a face",
3396
+ "description": "Update API key metadata (JWT required)",
4125
3397
  "flags": {
4126
3398
  "json": {
4127
3399
  "description": "Format output as json.",
@@ -4154,49 +3426,30 @@
4154
3426
  "multiple": false,
4155
3427
  "type": "option"
4156
3428
  },
4157
- "file": {
4158
- "description": "File to upload",
4159
- "name": "file",
4160
- "required": true,
4161
- "hasDynamicHelp": false,
4162
- "multiple": false,
4163
- "type": "option"
4164
- },
4165
- "kind": {
4166
- "description": "Upload kind: document or thread",
4167
- "name": "kind",
4168
- "default": "document",
3429
+ "name": {
3430
+ "description": "New key name",
3431
+ "name": "name",
4169
3432
  "hasDynamicHelp": false,
4170
3433
  "multiple": false,
4171
- "options": [
4172
- "document",
4173
- "thread"
4174
- ],
4175
3434
  "type": "option"
4176
3435
  },
4177
- "perspective": {
4178
- "description": "Perspective (document only)",
4179
- "name": "perspective",
4180
- "default": "third-person",
3436
+ "budget": {
3437
+ "description": "New spend budget in USD",
3438
+ "name": "budget",
4181
3439
  "hasDynamicHelp": false,
4182
3440
  "multiple": false,
4183
- "options": [
4184
- "first-person",
4185
- "third-person"
4186
- ],
4187
3441
  "type": "option"
4188
3442
  },
4189
- "face-speaker": {
4190
- "description": "Speaker name to map to the face (thread only). If omitted, first speaker is used.",
4191
- "name": "face-speaker",
4192
- "hasDynamicHelp": false,
4193
- "multiple": false,
4194
- "type": "option"
3443
+ "reset-spent": {
3444
+ "description": "Reset spent amount to zero",
3445
+ "name": "reset-spent",
3446
+ "allowNo": false,
3447
+ "type": "boolean"
4195
3448
  }
4196
3449
  },
4197
3450
  "hasDynamicHelp": false,
4198
3451
  "hiddenAliases": [],
4199
- "id": "face:upload",
3452
+ "id": "keys:update",
4200
3453
  "pluginAlias": "faces-cli",
4201
3454
  "pluginName": "faces-cli",
4202
3455
  "pluginType": "core",
@@ -4206,23 +3459,20 @@
4206
3459
  "relativePath": [
4207
3460
  "dist",
4208
3461
  "commands",
4209
- "face",
4210
- "upload.js"
3462
+ "keys",
3463
+ "update.js"
4211
3464
  ]
4212
3465
  },
4213
- "voiceprint:build-status": {
3466
+ "team:add": {
4214
3467
  "aliases": [],
4215
3468
  "args": {
4216
- "job_id": {
4217
- "description": "Build job id",
4218
- "name": "job_id",
3469
+ "team_id": {
3470
+ "description": "Team ID",
3471
+ "name": "team_id",
4219
3472
  "required": true
4220
3473
  }
4221
3474
  },
4222
- "description": "Get the status/result of a voiceprint build job (from voiceprint:build without --wait)",
4223
- "examples": [
4224
- "<%= config.bin %> <%= command.id %> 4e13bf03-fbc1-4ad0-92ae-16984e2f9a1d"
4225
- ],
3475
+ "description": "Add face(s) to a team",
4226
3476
  "flags": {
4227
3477
  "json": {
4228
3478
  "description": "Format output as json.",
@@ -4254,11 +3504,19 @@
4254
3504
  "hasDynamicHelp": false,
4255
3505
  "multiple": false,
4256
3506
  "type": "option"
3507
+ },
3508
+ "face": {
3509
+ "description": "Face alias to add (repeatable)",
3510
+ "name": "face",
3511
+ "required": true,
3512
+ "hasDynamicHelp": false,
3513
+ "multiple": true,
3514
+ "type": "option"
4257
3515
  }
4258
3516
  },
4259
3517
  "hasDynamicHelp": false,
4260
3518
  "hiddenAliases": [],
4261
- "id": "voiceprint:build-status",
3519
+ "id": "team:add",
4262
3520
  "pluginAlias": "faces-cli",
4263
3521
  "pluginName": "faces-cli",
4264
3522
  "pluginType": "core",
@@ -4268,24 +3526,14 @@
4268
3526
  "relativePath": [
4269
3527
  "dist",
4270
3528
  "commands",
4271
- "voiceprint",
4272
- "build-status.js"
3529
+ "team",
3530
+ "add.js"
4273
3531
  ]
4274
3532
  },
4275
- "voiceprint:build": {
3533
+ "team:create": {
4276
3534
  "aliases": [],
4277
- "args": {
4278
- "self_alias": {
4279
- "description": "Self face alias",
4280
- "name": "self_alias",
4281
- "required": true
4282
- }
4283
- },
4284
- "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.",
4285
- "examples": [
4286
- "<%= config.bin %> <%= command.id %> alice --wait",
4287
- "<%= config.bin %> <%= command.id %> alice --holdout-count 120 --oauth-only --wait"
4288
- ],
3535
+ "args": {},
3536
+ "description": "Create a new team",
4289
3537
  "flags": {
4290
3538
  "json": {
4291
3539
  "description": "Format output as json.",
@@ -4318,105 +3566,46 @@
4318
3566
  "multiple": false,
4319
3567
  "type": "option"
4320
3568
  },
4321
- "model": {
4322
- "description": "Model that forges the voice map (default: gpt-5.4)",
4323
- "name": "model",
4324
- "hasDynamicHelp": false,
4325
- "multiple": false,
4326
- "type": "option"
4327
- },
4328
- "holdout-count": {
4329
- "description": "Stratified scoring holdout size (default: 120)",
4330
- "name": "holdout-count",
3569
+ "name": {
3570
+ "description": "Team name",
3571
+ "name": "name",
3572
+ "required": true,
4331
3573
  "hasDynamicHelp": false,
4332
3574
  "multiple": false,
4333
3575
  "type": "option"
4334
3576
  },
4335
- "min-valid": {
4336
- "description": "Corpus floor below which no holdout is split — train on all (default: 550)",
4337
- "name": "min-valid",
3577
+ "description": {
3578
+ "description": "Plain-text team description (max 1500 chars)",
3579
+ "name": "description",
4338
3580
  "hasDynamicHelp": false,
4339
3581
  "multiple": false,
4340
3582
  "type": "option"
4341
3583
  },
4342
- "oauth-only": {
4343
- "description": "Only run on a free (OAuth) route; never fall back to billed inference",
4344
- "name": "oauth-only",
4345
- "allowNo": false,
4346
- "type": "boolean"
4347
- },
4348
- "wait": {
4349
- "description": "Block and poll until the build finishes (default: print the job_id and return)",
4350
- "name": "wait",
4351
- "allowNo": false,
4352
- "type": "boolean"
4353
- }
4354
- },
4355
- "hasDynamicHelp": false,
4356
- "hiddenAliases": [],
4357
- "id": "voiceprint:build",
4358
- "pluginAlias": "faces-cli",
4359
- "pluginName": "faces-cli",
4360
- "pluginType": "core",
4361
- "strict": true,
4362
- "enableJsonFlag": true,
4363
- "isESM": true,
4364
- "relativePath": [
4365
- "dist",
4366
- "commands",
4367
- "voiceprint",
4368
- "build.js"
4369
- ]
4370
- },
4371
- "voiceprint:get": {
4372
- "aliases": [],
4373
- "args": {
4374
- "job_id": {
4375
- "description": "Scoring job id (from voiceprint:score --no-wait)",
4376
- "name": "job_id",
4377
- "required": true
4378
- }
4379
- },
4380
- "description": "Get the status/result of a voiceprint scoring job started with voiceprint:score --no-wait",
4381
- "examples": [
4382
- "<%= config.bin %> <%= command.id %> 4e13bf03-fbc1-4ad0-92ae-16984e2f9a1d"
4383
- ],
4384
- "flags": {
4385
- "json": {
4386
- "description": "Format output as json.",
4387
- "helpGroup": "GLOBAL",
4388
- "name": "json",
4389
- "allowNo": false,
4390
- "type": "boolean"
4391
- },
4392
- "base-url": {
4393
- "description": "API base URL",
4394
- "env": "FACES_BASE_URL",
4395
- "name": "base-url",
3584
+ "protocol": {
3585
+ "description": "Protocol content (mermaid diagram or markdown, max 1000 words)",
3586
+ "name": "protocol",
4396
3587
  "hasDynamicHelp": false,
4397
3588
  "multiple": false,
4398
3589
  "type": "option"
4399
3590
  },
4400
- "token": {
4401
- "description": "JWT bearer token",
4402
- "env": "FACES_TOKEN",
4403
- "name": "token",
3591
+ "protocol-file": {
3592
+ "description": "Read protocol from file",
3593
+ "name": "protocol-file",
4404
3594
  "hasDynamicHelp": false,
4405
3595
  "multiple": false,
4406
3596
  "type": "option"
4407
3597
  },
4408
- "api-key": {
4409
- "description": "API key",
4410
- "env": "FACES_API_KEY",
4411
- "name": "api-key",
3598
+ "tag": {
3599
+ "description": "Tag label (repeatable, lowercase)",
3600
+ "name": "tag",
4412
3601
  "hasDynamicHelp": false,
4413
- "multiple": false,
3602
+ "multiple": true,
4414
3603
  "type": "option"
4415
3604
  }
4416
3605
  },
4417
3606
  "hasDynamicHelp": false,
4418
3607
  "hiddenAliases": [],
4419
- "id": "voiceprint:get",
3608
+ "id": "team:create",
4420
3609
  "pluginAlias": "faces-cli",
4421
3610
  "pluginName": "faces-cli",
4422
3611
  "pluginType": "core",
@@ -4426,23 +3615,20 @@
4426
3615
  "relativePath": [
4427
3616
  "dist",
4428
3617
  "commands",
4429
- "voiceprint",
4430
- "get.js"
3618
+ "team",
3619
+ "create.js"
4431
3620
  ]
4432
3621
  },
4433
- "voiceprint:refine-status": {
3622
+ "team:delete": {
4434
3623
  "aliases": [],
4435
3624
  "args": {
4436
- "job_id": {
4437
- "description": "Refine job id",
4438
- "name": "job_id",
3625
+ "team_id": {
3626
+ "description": "Team ID",
3627
+ "name": "team_id",
4439
3628
  "required": true
4440
3629
  }
4441
3630
  },
4442
- "description": "Get the status/result of a voiceprint refine job (from voiceprint:refine without --wait)",
4443
- "examples": [
4444
- "<%= config.bin %> <%= command.id %> 4e13bf03-fbc1-4ad0-92ae-16984e2f9a1d"
4445
- ],
3631
+ "description": "Delete a team",
4446
3632
  "flags": {
4447
3633
  "json": {
4448
3634
  "description": "Format output as json.",
@@ -4474,11 +3660,17 @@
4474
3660
  "hasDynamicHelp": false,
4475
3661
  "multiple": false,
4476
3662
  "type": "option"
3663
+ },
3664
+ "yes": {
3665
+ "description": "Skip confirmation",
3666
+ "name": "yes",
3667
+ "allowNo": false,
3668
+ "type": "boolean"
4477
3669
  }
4478
3670
  },
4479
3671
  "hasDynamicHelp": false,
4480
3672
  "hiddenAliases": [],
4481
- "id": "voiceprint:refine-status",
3673
+ "id": "team:delete",
4482
3674
  "pluginAlias": "faces-cli",
4483
3675
  "pluginName": "faces-cli",
4484
3676
  "pluginType": "core",
@@ -4488,24 +3680,20 @@
4488
3680
  "relativePath": [
4489
3681
  "dist",
4490
3682
  "commands",
4491
- "voiceprint",
4492
- "refine-status.js"
3683
+ "team",
3684
+ "delete.js"
4493
3685
  ]
4494
3686
  },
4495
- "voiceprint:refine": {
3687
+ "team:edit": {
4496
3688
  "aliases": [],
4497
3689
  "args": {
4498
- "self_alias": {
4499
- "description": "Self face alias",
4500
- "name": "self_alias",
3690
+ "team_id": {
3691
+ "description": "Team ID",
3692
+ "name": "team_id",
4501
3693
  "required": true
4502
3694
  }
4503
3695
  },
4504
- "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.",
4505
- "examples": [
4506
- "<%= config.bin %> <%= command.id %> alice --wait",
4507
- "<%= config.bin %> <%= command.id %> alice --temperature 0.4 --n-samples 6 --wait"
4508
- ],
3696
+ "description": "Edit a team",
4509
3697
  "flags": {
4510
3698
  "json": {
4511
3699
  "description": "Format output as json.",
@@ -4538,43 +3726,38 @@
4538
3726
  "multiple": false,
4539
3727
  "type": "option"
4540
3728
  },
4541
- "model": {
4542
- "description": "Model used to forge candidate drafts (default: the active version's build model)",
4543
- "name": "model",
3729
+ "name": {
3730
+ "description": "New team name",
3731
+ "name": "name",
4544
3732
  "hasDynamicHelp": false,
4545
3733
  "multiple": false,
4546
3734
  "type": "option"
4547
3735
  },
4548
- "temperature": {
4549
- "description": "Sampling temperature for candidate drafts (default: 0.4)",
4550
- "name": "temperature",
3736
+ "description": {
3737
+ "description": "New description (max 1500 chars)",
3738
+ "name": "description",
4551
3739
  "hasDynamicHelp": false,
4552
3740
  "multiple": false,
4553
3741
  "type": "option"
4554
3742
  },
4555
- "n-samples": {
4556
- "description": "Drafts forged per holdout pair (default: 6)",
4557
- "name": "n-samples",
3743
+ "protocol": {
3744
+ "description": "New protocol content",
3745
+ "name": "protocol",
4558
3746
  "hasDynamicHelp": false,
4559
3747
  "multiple": false,
4560
3748
  "type": "option"
4561
3749
  },
4562
- "oauth-only": {
4563
- "description": "Only run on a free (OAuth) route; never fall back to billed inference",
4564
- "name": "oauth-only",
4565
- "allowNo": false,
4566
- "type": "boolean"
4567
- },
4568
- "wait": {
4569
- "description": "Block and poll until refine finishes (default: print the job_id and return)",
4570
- "name": "wait",
4571
- "allowNo": false,
4572
- "type": "boolean"
3750
+ "protocol-file": {
3751
+ "description": "Read protocol from file",
3752
+ "name": "protocol-file",
3753
+ "hasDynamicHelp": false,
3754
+ "multiple": false,
3755
+ "type": "option"
4573
3756
  }
4574
3757
  },
4575
3758
  "hasDynamicHelp": false,
4576
3759
  "hiddenAliases": [],
4577
- "id": "voiceprint:refine",
3760
+ "id": "team:edit",
4578
3761
  "pluginAlias": "faces-cli",
4579
3762
  "pluginName": "faces-cli",
4580
3763
  "pluginType": "core",
@@ -4584,23 +3767,20 @@
4584
3767
  "relativePath": [
4585
3768
  "dist",
4586
3769
  "commands",
4587
- "voiceprint",
4588
- "refine.js"
3770
+ "team",
3771
+ "edit.js"
4589
3772
  ]
4590
3773
  },
4591
- "voiceprint:revert": {
3774
+ "team:get": {
4592
3775
  "aliases": [],
4593
3776
  "args": {
4594
- "self_alias": {
4595
- "description": "Self face alias",
4596
- "name": "self_alias",
3777
+ "team_id": {
3778
+ "description": "Team ID",
3779
+ "name": "team_id",
4597
3780
  "required": true
4598
3781
  }
4599
- },
4600
- "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.",
4601
- "examples": [
4602
- "<%= config.bin %> <%= command.id %> alice"
4603
- ],
3782
+ },
3783
+ "description": "Get a team by ID",
4604
3784
  "flags": {
4605
3785
  "json": {
4606
3786
  "description": "Format output as json.",
@@ -4636,7 +3816,7 @@
4636
3816
  },
4637
3817
  "hasDynamicHelp": false,
4638
3818
  "hiddenAliases": [],
4639
- "id": "voiceprint:revert",
3819
+ "id": "team:get",
4640
3820
  "pluginAlias": "faces-cli",
4641
3821
  "pluginName": "faces-cli",
4642
3822
  "pluginType": "core",
@@ -4646,23 +3826,14 @@
4646
3826
  "relativePath": [
4647
3827
  "dist",
4648
3828
  "commands",
4649
- "voiceprint",
4650
- "revert.js"
3829
+ "team",
3830
+ "get.js"
4651
3831
  ]
4652
3832
  },
4653
- "voiceprint:score-status": {
3833
+ "team:list": {
4654
3834
  "aliases": [],
4655
- "args": {
4656
- "job_id": {
4657
- "description": "Scoring job id",
4658
- "name": "job_id",
4659
- "required": true
4660
- }
4661
- },
4662
- "description": "Get the status/result of a voiceprint scoring job (from voiceprint:score without --wait)",
4663
- "examples": [
4664
- "<%= config.bin %> <%= command.id %> 4e13bf03-fbc1-4ad0-92ae-16984e2f9a1d"
4665
- ],
3835
+ "args": {},
3836
+ "description": "List your teams",
4666
3837
  "flags": {
4667
3838
  "json": {
4668
3839
  "description": "Format output as json.",
@@ -4698,7 +3869,7 @@
4698
3869
  },
4699
3870
  "hasDynamicHelp": false,
4700
3871
  "hiddenAliases": [],
4701
- "id": "voiceprint:score-status",
3872
+ "id": "team:list",
4702
3873
  "pluginAlias": "faces-cli",
4703
3874
  "pluginName": "faces-cli",
4704
3875
  "pluginType": "core",
@@ -4708,25 +3879,20 @@
4708
3879
  "relativePath": [
4709
3880
  "dist",
4710
3881
  "commands",
4711
- "voiceprint",
4712
- "score-status.js"
3882
+ "team",
3883
+ "list.js"
4713
3884
  ]
4714
3885
  },
4715
- "voiceprint:score": {
3886
+ "team:members": {
4716
3887
  "aliases": [],
4717
3888
  "args": {
4718
- "face": {
4719
- "description": "Face to score (alias, owner:alias, or a union like \"(alice-voiceprint | alice)\")",
4720
- "name": "face",
3889
+ "team_id": {
3890
+ "description": "Team ID",
3891
+ "name": "team_id",
4721
3892
  "required": true
4722
3893
  }
4723
3894
  },
4724
- "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.",
4725
- "examples": [
4726
- "<%= config.bin %> <%= command.id %> \"(alice-voiceprint | alice)\" --emails ./sent.jsonl --wait",
4727
- "<%= config.bin %> <%= command.id %> alice --emails-dir ./sent-emails/ --wait",
4728
- "<%= config.bin %> <%= command.id %> alice --emails ./sent.json # prints job_id; poll with voiceprint:score-status"
4729
- ],
3895
+ "description": "List members of a team",
4730
3896
  "flags": {
4731
3897
  "json": {
4732
3898
  "description": "Format output as json.",
@@ -4758,55 +3924,11 @@
4758
3924
  "hasDynamicHelp": false,
4759
3925
  "multiple": false,
4760
3926
  "type": "option"
4761
- },
4762
- "emails": {
4763
- "description": "JSON or JSONL file of the person's real writing — {id?, text} objects or plain strings (provide at least 20)",
4764
- "name": "emails",
4765
- "hasDynamicHelp": false,
4766
- "multiple": false,
4767
- "type": "option"
4768
- },
4769
- "emails-dir": {
4770
- "description": "Directory with one sample per file (id = filename). Alternative to --emails.",
4771
- "exclusive": [
4772
- "emails"
4773
- ],
4774
- "name": "emails-dir",
4775
- "hasDynamicHelp": false,
4776
- "multiple": false,
4777
- "type": "option"
4778
- },
4779
- "author-corpus": {
4780
- "description": "Optional larger reference of the person's writing (JSON/JSONL/dir) used to define their voice; defaults to --emails",
4781
- "name": "author-corpus",
4782
- "hasDynamicHelp": false,
4783
- "multiple": false,
4784
- "type": "option"
4785
- },
4786
- "model": {
4787
- "description": "Model used to generate comparison drafts",
4788
- "name": "model",
4789
- "default": "gpt-5.4",
4790
- "hasDynamicHelp": false,
4791
- "multiple": false,
4792
- "type": "option"
4793
- },
4794
- "oauth-only": {
4795
- "description": "Only run when a free (OAuth) model route is available; never fall back to billed inference",
4796
- "name": "oauth-only",
4797
- "allowNo": false,
4798
- "type": "boolean"
4799
- },
4800
- "wait": {
4801
- "description": "Block and poll until the score is ready, then print it (default: print the job_id and return)",
4802
- "name": "wait",
4803
- "allowNo": false,
4804
- "type": "boolean"
4805
3927
  }
4806
3928
  },
4807
3929
  "hasDynamicHelp": false,
4808
3930
  "hiddenAliases": [],
4809
- "id": "voiceprint:score",
3931
+ "id": "team:members",
4810
3932
  "pluginAlias": "faces-cli",
4811
3933
  "pluginName": "faces-cli",
4812
3934
  "pluginType": "core",
@@ -4816,29 +3938,25 @@
4816
3938
  "relativePath": [
4817
3939
  "dist",
4818
3940
  "commands",
4819
- "voiceprint",
4820
- "score.js"
3941
+ "team",
3942
+ "members.js"
4821
3943
  ]
4822
3944
  },
4823
- "voiceprint:upload": {
3945
+ "team:remove": {
4824
3946
  "aliases": [],
4825
3947
  "args": {
4826
- "self_alias": {
4827
- "description": "Self face alias",
4828
- "name": "self_alias",
3948
+ "team_id": {
3949
+ "description": "Team ID",
3950
+ "name": "team_id",
4829
3951
  "required": true
4830
3952
  },
4831
- "file": {
4832
- "description": "Corpus file (JSON array for thread_json, JSONL for email_jsonl)",
4833
- "name": "file",
3953
+ "alias": {
3954
+ "description": "Face alias to remove",
3955
+ "name": "alias",
4834
3956
  "required": true
4835
3957
  }
4836
3958
  },
4837
- "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.",
4838
- "examples": [
4839
- "<%= config.bin %> <%= command.id %> alice ./corpus.json",
4840
- "<%= config.bin %> <%= command.id %> alice ./mail.jsonl --type email_jsonl --emails-per-thread 50"
4841
- ],
3959
+ "description": "Remove a face from a team",
4842
3960
  "flags": {
4843
3961
  "json": {
4844
3962
  "description": "Format output as json.",
@@ -4870,31 +3988,11 @@
4870
3988
  "hasDynamicHelp": false,
4871
3989
  "multiple": false,
4872
3990
  "type": "option"
4873
- },
4874
- "type": {
4875
- "description": "thread_json: a JSON array of canonical email objects → one room. email_jsonl: JSONL (one email/line) → chunked into several rooms.",
4876
- "name": "type",
4877
- "default": "thread_json",
4878
- "hasDynamicHelp": false,
4879
- "multiple": false,
4880
- "options": [
4881
- "thread_json",
4882
- "email_jsonl"
4883
- ],
4884
- "type": "option"
4885
- },
4886
- "emails-per-thread": {
4887
- "description": "For --type email_jsonl: emails per room (default 50)",
4888
- "name": "emails-per-thread",
4889
- "default": 50,
4890
- "hasDynamicHelp": false,
4891
- "multiple": false,
4892
- "type": "option"
4893
3991
  }
4894
3992
  },
4895
3993
  "hasDynamicHelp": false,
4896
3994
  "hiddenAliases": [],
4897
- "id": "voiceprint:upload",
3995
+ "id": "team:remove",
4898
3996
  "pluginAlias": "faces-cli",
4899
3997
  "pluginName": "faces-cli",
4900
3998
  "pluginType": "core",
@@ -4904,23 +4002,14 @@
4904
4002
  "relativePath": [
4905
4003
  "dist",
4906
4004
  "commands",
4907
- "voiceprint",
4908
- "upload.js"
4005
+ "team",
4006
+ "remove.js"
4909
4007
  ]
4910
4008
  },
4911
- "voiceprint:versions": {
4009
+ "billing:subscription:activate": {
4912
4010
  "aliases": [],
4913
- "args": {
4914
- "self_alias": {
4915
- "description": "Self face alias",
4916
- "name": "self_alias",
4917
- "required": true
4918
- }
4919
- },
4920
- "description": "List a self face's voice-map versions (active + one prior). Retention is one-deep; toggle with voiceprint:revert.",
4921
- "examples": [
4922
- "<%= config.bin %> <%= command.id %> alice"
4923
- ],
4011
+ "args": {},
4012
+ "description": "Activate or reactivate a subscription plan",
4924
4013
  "flags": {
4925
4014
  "json": {
4926
4015
  "description": "Format output as json.",
@@ -4952,11 +4041,22 @@
4952
4041
  "hasDynamicHelp": false,
4953
4042
  "multiple": false,
4954
4043
  "type": "option"
4044
+ },
4045
+ "plan": {
4046
+ "description": "Plan to activate",
4047
+ "name": "plan",
4048
+ "default": "connect",
4049
+ "hasDynamicHelp": false,
4050
+ "multiple": false,
4051
+ "options": [
4052
+ "connect"
4053
+ ],
4054
+ "type": "option"
4955
4055
  }
4956
4056
  },
4957
4057
  "hasDynamicHelp": false,
4958
4058
  "hiddenAliases": [],
4959
- "id": "voiceprint:versions",
4059
+ "id": "billing:subscription:activate",
4960
4060
  "pluginAlias": "faces-cli",
4961
4061
  "pluginName": "faces-cli",
4962
4062
  "pluginType": "core",
@@ -4966,14 +4066,15 @@
4966
4066
  "relativePath": [
4967
4067
  "dist",
4968
4068
  "commands",
4969
- "voiceprint",
4970
- "versions.js"
4069
+ "billing",
4070
+ "subscription",
4071
+ "activate.js"
4971
4072
  ]
4972
4073
  },
4973
- "billing:subscription:activate": {
4074
+ "billing:subscription:cancel": {
4974
4075
  "aliases": [],
4975
4076
  "args": {},
4976
- "description": "Activate or reactivate a subscription plan",
4077
+ "description": "Cancel your subscription (keeps access until period end)",
4977
4078
  "flags": {
4978
4079
  "json": {
4979
4080
  "description": "Format output as json.",
@@ -5006,21 +4107,16 @@
5006
4107
  "multiple": false,
5007
4108
  "type": "option"
5008
4109
  },
5009
- "plan": {
5010
- "description": "Plan to activate",
5011
- "name": "plan",
5012
- "default": "connect",
5013
- "hasDynamicHelp": false,
5014
- "multiple": false,
5015
- "options": [
5016
- "connect"
5017
- ],
5018
- "type": "option"
4110
+ "yes": {
4111
+ "description": "Skip confirmation",
4112
+ "name": "yes",
4113
+ "allowNo": false,
4114
+ "type": "boolean"
5019
4115
  }
5020
4116
  },
5021
4117
  "hasDynamicHelp": false,
5022
4118
  "hiddenAliases": [],
5023
- "id": "billing:subscription:activate",
4119
+ "id": "billing:subscription:cancel",
5024
4120
  "pluginAlias": "faces-cli",
5025
4121
  "pluginName": "faces-cli",
5026
4122
  "pluginType": "core",
@@ -5032,13 +4128,13 @@
5032
4128
  "commands",
5033
4129
  "billing",
5034
4130
  "subscription",
5035
- "activate.js"
4131
+ "cancel.js"
5036
4132
  ]
5037
4133
  },
5038
- "billing:subscription:cancel": {
4134
+ "billing:subscription": {
5039
4135
  "aliases": [],
5040
4136
  "args": {},
5041
- "description": "Cancel your subscription (keeps access until period end)",
4137
+ "description": "Show current plan, face count, and renewal date",
5042
4138
  "flags": {
5043
4139
  "json": {
5044
4140
  "description": "Format output as json.",
@@ -5070,17 +4166,11 @@
5070
4166
  "hasDynamicHelp": false,
5071
4167
  "multiple": false,
5072
4168
  "type": "option"
5073
- },
5074
- "yes": {
5075
- "description": "Skip confirmation",
5076
- "name": "yes",
5077
- "allowNo": false,
5078
- "type": "boolean"
5079
4169
  }
5080
4170
  },
5081
4171
  "hasDynamicHelp": false,
5082
4172
  "hiddenAliases": [],
5083
- "id": "billing:subscription:cancel",
4173
+ "id": "billing:subscription",
5084
4174
  "pluginAlias": "faces-cli",
5085
4175
  "pluginName": "faces-cli",
5086
4176
  "pluginType": "core",
@@ -5092,10 +4182,10 @@
5092
4182
  "commands",
5093
4183
  "billing",
5094
4184
  "subscription",
5095
- "cancel.js"
4185
+ "index.js"
5096
4186
  ]
5097
4187
  },
5098
- "compile:doc:create": {
4188
+ "compile:thread:create": {
5099
4189
  "aliases": [],
5100
4190
  "args": {
5101
4191
  "face_id": {
@@ -5104,7 +4194,7 @@
5104
4194
  "required": true
5105
4195
  }
5106
4196
  },
5107
- "description": "Submit a document to a face",
4197
+ "description": "Start a new thread for a face",
5108
4198
  "flags": {
5109
4199
  "json": {
5110
4200
  "description": "Format output as json.",
@@ -5138,42 +4228,22 @@
5138
4228
  "type": "option"
5139
4229
  },
5140
4230
  "label": {
5141
- "description": "Document label/title",
4231
+ "description": "Thread label",
5142
4232
  "name": "label",
5143
4233
  "hasDynamicHelp": false,
5144
4234
  "multiple": false,
5145
4235
  "type": "option"
5146
4236
  },
5147
- "content": {
5148
- "description": "Inline text content",
5149
- "name": "content",
5150
- "hasDynamicHelp": false,
5151
- "multiple": false,
5152
- "type": "option"
5153
- },
5154
- "file": {
5155
- "description": "Read content from file",
5156
- "name": "file",
5157
- "hasDynamicHelp": false,
5158
- "multiple": false,
5159
- "type": "option"
5160
- },
5161
- "perspective": {
5162
- "description": "Perspective (first-person or third-person)",
5163
- "name": "perspective",
5164
- "default": "first-person",
5165
- "hasDynamicHelp": false,
5166
- "multiple": false,
5167
- "options": [
5168
- "first-person",
5169
- "third-person"
5170
- ],
5171
- "type": "option"
4237
+ "oauth-only": {
4238
+ "description": "Prevent fallback to paid system key (use OAuth only)",
4239
+ "name": "oauth-only",
4240
+ "allowNo": false,
4241
+ "type": "boolean"
5172
4242
  }
5173
4243
  },
5174
4244
  "hasDynamicHelp": false,
5175
4245
  "hiddenAliases": [],
5176
- "id": "compile:doc:create",
4246
+ "id": "compile:thread:create",
5177
4247
  "pluginAlias": "faces-cli",
5178
4248
  "pluginName": "faces-cli",
5179
4249
  "pluginType": "core",
@@ -5184,20 +4254,20 @@
5184
4254
  "dist",
5185
4255
  "commands",
5186
4256
  "compile",
5187
- "doc",
4257
+ "thread",
5188
4258
  "create.js"
5189
4259
  ]
5190
4260
  },
5191
- "compile:doc:delete": {
4261
+ "compile:thread:delete": {
5192
4262
  "aliases": [],
5193
4263
  "args": {
5194
- "doc_id": {
5195
- "description": "Document ID",
5196
- "name": "doc_id",
4264
+ "thread_id": {
4265
+ "description": "Thread ID",
4266
+ "name": "thread_id",
5197
4267
  "required": true
5198
4268
  }
5199
4269
  },
5200
- "description": "Delete a document",
4270
+ "description": "Delete a thread",
5201
4271
  "flags": {
5202
4272
  "json": {
5203
4273
  "description": "Format output as json.",
@@ -5229,11 +4299,17 @@
5229
4299
  "hasDynamicHelp": false,
5230
4300
  "multiple": false,
5231
4301
  "type": "option"
4302
+ },
4303
+ "yes": {
4304
+ "description": "Skip confirmation",
4305
+ "name": "yes",
4306
+ "allowNo": false,
4307
+ "type": "boolean"
5232
4308
  }
5233
4309
  },
5234
4310
  "hasDynamicHelp": false,
5235
4311
  "hiddenAliases": [],
5236
- "id": "compile:doc:delete",
4312
+ "id": "compile:thread:delete",
5237
4313
  "pluginAlias": "faces-cli",
5238
4314
  "pluginName": "faces-cli",
5239
4315
  "pluginType": "core",
@@ -5244,20 +4320,20 @@
5244
4320
  "dist",
5245
4321
  "commands",
5246
4322
  "compile",
5247
- "doc",
4323
+ "thread",
5248
4324
  "delete.js"
5249
4325
  ]
5250
4326
  },
5251
- "compile:doc:edit": {
4327
+ "compile:thread:edit": {
5252
4328
  "aliases": [],
5253
4329
  "args": {
5254
- "doc_id": {
5255
- "description": "Document ID",
5256
- "name": "doc_id",
4330
+ "thread_id": {
4331
+ "description": "Thread ID",
4332
+ "name": "thread_id",
5257
4333
  "required": true
5258
4334
  }
5259
4335
  },
5260
- "description": "Edit a document (label, content, or perspective)",
4336
+ "description": "Edit a thread (label and/or reassign face speaker)",
5261
4337
  "flags": {
5262
4338
  "json": {
5263
4339
  "description": "Format output as json.",
@@ -5291,41 +4367,23 @@
5291
4367
  "type": "option"
5292
4368
  },
5293
4369
  "label": {
5294
- "description": "New label/title",
4370
+ "description": "New thread label",
5295
4371
  "name": "label",
5296
4372
  "hasDynamicHelp": false,
5297
4373
  "multiple": false,
5298
4374
  "type": "option"
5299
4375
  },
5300
- "content": {
5301
- "description": "New inline text content",
5302
- "name": "content",
5303
- "hasDynamicHelp": false,
5304
- "multiple": false,
5305
- "type": "option"
5306
- },
5307
- "file": {
5308
- "description": "Read new content from file",
5309
- "name": "file",
5310
- "hasDynamicHelp": false,
5311
- "multiple": false,
5312
- "type": "option"
5313
- },
5314
- "perspective": {
5315
- "description": "Perspective (first-person or third-person)",
5316
- "name": "perspective",
4376
+ "face-speaker": {
4377
+ "description": "Reassign face speaker: set this speaker to role=user, all others to role=assistant",
4378
+ "name": "face-speaker",
5317
4379
  "hasDynamicHelp": false,
5318
4380
  "multiple": false,
5319
- "options": [
5320
- "first-person",
5321
- "third-person"
5322
- ],
5323
4381
  "type": "option"
5324
4382
  }
5325
4383
  },
5326
4384
  "hasDynamicHelp": false,
5327
4385
  "hiddenAliases": [],
5328
- "id": "compile:doc:edit",
4386
+ "id": "compile:thread:edit",
5329
4387
  "pluginAlias": "faces-cli",
5330
4388
  "pluginName": "faces-cli",
5331
4389
  "pluginType": "core",
@@ -5336,20 +4394,20 @@
5336
4394
  "dist",
5337
4395
  "commands",
5338
4396
  "compile",
5339
- "doc",
4397
+ "thread",
5340
4398
  "edit.js"
5341
4399
  ]
5342
4400
  },
5343
- "compile:doc:get": {
4401
+ "compile:thread:get": {
5344
4402
  "aliases": [],
5345
4403
  "args": {
5346
- "doc_id": {
5347
- "description": "Document ID",
5348
- "name": "doc_id",
4404
+ "thread_id": {
4405
+ "description": "Thread ID",
4406
+ "name": "thread_id",
5349
4407
  "required": true
5350
4408
  }
5351
4409
  },
5352
- "description": "Get a document by ID",
4410
+ "description": "Get a thread by ID",
5353
4411
  "flags": {
5354
4412
  "json": {
5355
4413
  "description": "Format output as json.",
@@ -5385,7 +4443,7 @@
5385
4443
  },
5386
4444
  "hasDynamicHelp": false,
5387
4445
  "hiddenAliases": [],
5388
- "id": "compile:doc:get",
4446
+ "id": "compile:thread:get",
5389
4447
  "pluginAlias": "faces-cli",
5390
4448
  "pluginName": "faces-cli",
5391
4449
  "pluginType": "core",
@@ -5396,11 +4454,11 @@
5396
4454
  "dist",
5397
4455
  "commands",
5398
4456
  "compile",
5399
- "doc",
4457
+ "thread",
5400
4458
  "get.js"
5401
4459
  ]
5402
4460
  },
5403
- "compile:doc": {
4461
+ "compile:thread:list": {
5404
4462
  "aliases": [],
5405
4463
  "args": {
5406
4464
  "face_id": {
@@ -5409,7 +4467,7 @@
5409
4467
  "required": true
5410
4468
  }
5411
4469
  },
5412
- "description": "Compile a document into a face (create → make in one step)",
4470
+ "description": "List threads for a face",
5413
4471
  "flags": {
5414
4472
  "json": {
5415
4473
  "description": "Format output as json.",
@@ -5441,58 +4499,11 @@
5441
4499
  "hasDynamicHelp": false,
5442
4500
  "multiple": false,
5443
4501
  "type": "option"
5444
- },
5445
- "label": {
5446
- "description": "Document label/title",
5447
- "name": "label",
5448
- "hasDynamicHelp": false,
5449
- "multiple": false,
5450
- "type": "option"
5451
- },
5452
- "content": {
5453
- "description": "Inline text content",
5454
- "name": "content",
5455
- "hasDynamicHelp": false,
5456
- "multiple": false,
5457
- "type": "option"
5458
- },
5459
- "file": {
5460
- "description": "Read content from file",
5461
- "name": "file",
5462
- "hasDynamicHelp": false,
5463
- "multiple": false,
5464
- "type": "option"
5465
- },
5466
- "perspective": {
5467
- "description": "Perspective",
5468
- "name": "perspective",
5469
- "default": "first-person",
5470
- "hasDynamicHelp": false,
5471
- "multiple": false,
5472
- "options": [
5473
- "first-person",
5474
- "third-person"
5475
- ],
5476
- "type": "option"
5477
- },
5478
- "timeout": {
5479
- "description": "Compile timeout in seconds (default: 600)",
5480
- "name": "timeout",
5481
- "default": 600,
5482
- "hasDynamicHelp": false,
5483
- "multiple": false,
5484
- "type": "option"
5485
- },
5486
- "no-wait": {
5487
- "description": "Create and trigger compilation, then return immediately without polling.",
5488
- "name": "no-wait",
5489
- "allowNo": false,
5490
- "type": "boolean"
5491
4502
  }
5492
4503
  },
5493
4504
  "hasDynamicHelp": false,
5494
4505
  "hiddenAliases": [],
5495
- "id": "compile:doc",
4506
+ "id": "compile:thread:list",
5496
4507
  "pluginAlias": "faces-cli",
5497
4508
  "pluginName": "faces-cli",
5498
4509
  "pluginType": "core",
@@ -5503,20 +4514,20 @@
5503
4514
  "dist",
5504
4515
  "commands",
5505
4516
  "compile",
5506
- "doc",
5507
- "index.js"
4517
+ "thread",
4518
+ "list.js"
5508
4519
  ]
5509
4520
  },
5510
- "compile:doc:list": {
4521
+ "compile:thread:make": {
5511
4522
  "aliases": [],
5512
4523
  "args": {
5513
- "face_id": {
5514
- "description": "Face alias",
5515
- "name": "face_id",
4524
+ "thread_id": {
4525
+ "description": "Thread ID",
4526
+ "name": "thread_id",
5516
4527
  "required": true
5517
4528
  }
5518
4529
  },
5519
- "description": "List documents for a face",
4530
+ "description": "Compile an existing thread (prepare + sync in one step)",
5520
4531
  "flags": {
5521
4532
  "json": {
5522
4533
  "description": "Format output as json.",
@@ -5548,11 +4559,25 @@
5548
4559
  "hasDynamicHelp": false,
5549
4560
  "multiple": false,
5550
4561
  "type": "option"
4562
+ },
4563
+ "timeout": {
4564
+ "description": "Compile timeout in seconds (default: 600)",
4565
+ "name": "timeout",
4566
+ "default": 600,
4567
+ "hasDynamicHelp": false,
4568
+ "multiple": false,
4569
+ "type": "option"
4570
+ },
4571
+ "no-wait": {
4572
+ "description": "Return immediately after triggering compilation. Prints the thread ID for manual polling.",
4573
+ "name": "no-wait",
4574
+ "allowNo": false,
4575
+ "type": "boolean"
5551
4576
  }
5552
4577
  },
5553
4578
  "hasDynamicHelp": false,
5554
4579
  "hiddenAliases": [],
5555
- "id": "compile:doc:list",
4580
+ "id": "compile:thread:make",
5556
4581
  "pluginAlias": "faces-cli",
5557
4582
  "pluginName": "faces-cli",
5558
4583
  "pluginType": "core",
@@ -5563,20 +4588,20 @@
5563
4588
  "dist",
5564
4589
  "commands",
5565
4590
  "compile",
5566
- "doc",
5567
- "list.js"
4591
+ "thread",
4592
+ "make.js"
5568
4593
  ]
5569
4594
  },
5570
- "compile:doc:make": {
4595
+ "compile:thread:message": {
5571
4596
  "aliases": [],
5572
4597
  "args": {
5573
- "doc_id": {
5574
- "description": "Document ID",
5575
- "name": "doc_id",
4598
+ "thread_id": {
4599
+ "description": "Thread ID",
4600
+ "name": "thread_id",
5576
4601
  "required": true
5577
4602
  }
5578
4603
  },
5579
- "description": "Compile an existing document (prepare + sync in one step)",
4604
+ "description": "Send a user message to a thread",
5580
4605
  "flags": {
5581
4606
  "json": {
5582
4607
  "description": "Format output as json.",
@@ -5609,24 +4634,25 @@
5609
4634
  "multiple": false,
5610
4635
  "type": "option"
5611
4636
  },
5612
- "timeout": {
5613
- "description": "Compile timeout in seconds (default: 600)",
5614
- "name": "timeout",
5615
- "default": 600,
4637
+ "message": {
4638
+ "char": "m",
4639
+ "description": "User message to append",
4640
+ "name": "message",
4641
+ "required": true,
5616
4642
  "hasDynamicHelp": false,
5617
4643
  "multiple": false,
5618
4644
  "type": "option"
5619
4645
  },
5620
- "no-wait": {
5621
- "description": "Return immediately after triggering compilation. Prints the document ID for manual polling.",
5622
- "name": "no-wait",
4646
+ "oauth-only": {
4647
+ "description": "Prevent fallback to paid system key (use OAuth only)",
4648
+ "name": "oauth-only",
5623
4649
  "allowNo": false,
5624
4650
  "type": "boolean"
5625
4651
  }
5626
4652
  },
5627
4653
  "hasDynamicHelp": false,
5628
4654
  "hiddenAliases": [],
5629
- "id": "compile:doc:make",
4655
+ "id": "compile:thread:message",
5630
4656
  "pluginAlias": "faces-cli",
5631
4657
  "pluginName": "faces-cli",
5632
4658
  "pluginType": "core",
@@ -5637,20 +4663,20 @@
5637
4663
  "dist",
5638
4664
  "commands",
5639
4665
  "compile",
5640
- "doc",
5641
- "make.js"
4666
+ "thread",
4667
+ "message.js"
5642
4668
  ]
5643
4669
  },
5644
- "compile:doc:pause": {
4670
+ "compile:thread:pause": {
5645
4671
  "aliases": [],
5646
4672
  "args": {
5647
- "doc_id": {
5648
- "description": "Document ID",
5649
- "name": "doc_id",
4673
+ "thread_id": {
4674
+ "description": "Thread ID",
4675
+ "name": "thread_id",
5650
4676
  "required": true
5651
4677
  }
5652
4678
  },
5653
- "description": "Pause a running document compilation (preserves progress, resume with make)",
4679
+ "description": "Ask a running thread compilation to stop (preserves progress, resume with make). The compile stops at the next chunk boundary; this waits for it unless --no-wait.",
5654
4680
  "flags": {
5655
4681
  "json": {
5656
4682
  "description": "Format output as json.",
@@ -5682,11 +4708,25 @@
5682
4708
  "hasDynamicHelp": false,
5683
4709
  "multiple": false,
5684
4710
  "type": "option"
4711
+ },
4712
+ "no-wait": {
4713
+ "description": "Return as soon as the pause is accepted, without waiting for the compile to stop.",
4714
+ "name": "no-wait",
4715
+ "allowNo": false,
4716
+ "type": "boolean"
4717
+ },
4718
+ "timeout": {
4719
+ "description": "Seconds to wait for the compile to stop (default: 60)",
4720
+ "name": "timeout",
4721
+ "default": 60,
4722
+ "hasDynamicHelp": false,
4723
+ "multiple": false,
4724
+ "type": "option"
5685
4725
  }
5686
4726
  },
5687
4727
  "hasDynamicHelp": false,
5688
4728
  "hiddenAliases": [],
5689
- "id": "compile:doc:pause",
4729
+ "id": "compile:thread:pause",
5690
4730
  "pluginAlias": "faces-cli",
5691
4731
  "pluginName": "faces-cli",
5692
4732
  "pluginType": "core",
@@ -5697,20 +4737,20 @@
5697
4737
  "dist",
5698
4738
  "commands",
5699
4739
  "compile",
5700
- "doc",
4740
+ "thread",
5701
4741
  "pause.js"
5702
4742
  ]
5703
4743
  },
5704
- "compile:doc:reset": {
4744
+ "compile:thread:reset": {
5705
4745
  "aliases": [],
5706
4746
  "args": {
5707
- "doc_id": {
5708
- "description": "Document ID",
5709
- "name": "doc_id",
4747
+ "thread_id": {
4748
+ "description": "Thread ID",
4749
+ "name": "thread_id",
5710
4750
  "required": true
5711
4751
  }
5712
4752
  },
5713
- "description": "Reset document compilation progress (wipe extraction, keep content)",
4753
+ "description": "Reset thread compilation progress (wipe extraction, keep source messages)",
5714
4754
  "flags": {
5715
4755
  "json": {
5716
4756
  "description": "Format output as json.",
@@ -5752,7 +4792,7 @@
5752
4792
  },
5753
4793
  "hasDynamicHelp": false,
5754
4794
  "hiddenAliases": [],
5755
- "id": "compile:doc:reset",
4795
+ "id": "compile:thread:reset",
5756
4796
  "pluginAlias": "faces-cli",
5757
4797
  "pluginName": "faces-cli",
5758
4798
  "pluginType": "core",
@@ -5763,20 +4803,20 @@
5763
4803
  "dist",
5764
4804
  "commands",
5765
4805
  "compile",
5766
- "doc",
4806
+ "thread",
5767
4807
  "reset.js"
5768
4808
  ]
5769
4809
  },
5770
- "compile:thread:create": {
4810
+ "compile:thread:sync": {
5771
4811
  "aliases": [],
5772
4812
  "args": {
5773
- "face_id": {
5774
- "description": "Face alias",
5775
- "name": "face_id",
4813
+ "thread_id": {
4814
+ "description": "Thread ID",
4815
+ "name": "thread_id",
5776
4816
  "required": true
5777
4817
  }
5778
4818
  },
5779
- "description": "Start a new thread for a face",
4819
+ "description": "Archive and sync a thread into a face",
5780
4820
  "flags": {
5781
4821
  "json": {
5782
4822
  "description": "Format output as json.",
@@ -5808,24 +4848,11 @@
5808
4848
  "hasDynamicHelp": false,
5809
4849
  "multiple": false,
5810
4850
  "type": "option"
5811
- },
5812
- "label": {
5813
- "description": "Thread label",
5814
- "name": "label",
5815
- "hasDynamicHelp": false,
5816
- "multiple": false,
5817
- "type": "option"
5818
- },
5819
- "oauth-only": {
5820
- "description": "Prevent fallback to paid system key (use OAuth only)",
5821
- "name": "oauth-only",
5822
- "allowNo": false,
5823
- "type": "boolean"
5824
4851
  }
5825
4852
  },
5826
4853
  "hasDynamicHelp": false,
5827
4854
  "hiddenAliases": [],
5828
- "id": "compile:thread:create",
4855
+ "id": "compile:thread:sync",
5829
4856
  "pluginAlias": "faces-cli",
5830
4857
  "pluginName": "faces-cli",
5831
4858
  "pluginType": "core",
@@ -5837,19 +4864,19 @@
5837
4864
  "commands",
5838
4865
  "compile",
5839
4866
  "thread",
5840
- "create.js"
4867
+ "sync.js"
5841
4868
  ]
5842
4869
  },
5843
- "compile:thread:delete": {
4870
+ "face:tag:add": {
5844
4871
  "aliases": [],
5845
4872
  "args": {
5846
- "thread_id": {
5847
- "description": "Thread ID",
5848
- "name": "thread_id",
4873
+ "alias": {
4874
+ "description": "Face alias",
4875
+ "name": "alias",
5849
4876
  "required": true
5850
4877
  }
5851
4878
  },
5852
- "description": "Delete a thread",
4879
+ "description": "Add tags to a face (appends, idempotent)",
5853
4880
  "flags": {
5854
4881
  "json": {
5855
4882
  "description": "Format output as json.",
@@ -5882,16 +4909,18 @@
5882
4909
  "multiple": false,
5883
4910
  "type": "option"
5884
4911
  },
5885
- "yes": {
5886
- "description": "Skip confirmation",
5887
- "name": "yes",
5888
- "allowNo": false,
5889
- "type": "boolean"
4912
+ "tag": {
4913
+ "description": "Tag to add (repeatable)",
4914
+ "name": "tag",
4915
+ "required": true,
4916
+ "hasDynamicHelp": false,
4917
+ "multiple": true,
4918
+ "type": "option"
5890
4919
  }
5891
4920
  },
5892
4921
  "hasDynamicHelp": false,
5893
4922
  "hiddenAliases": [],
5894
- "id": "compile:thread:delete",
4923
+ "id": "face:tag:add",
5895
4924
  "pluginAlias": "faces-cli",
5896
4925
  "pluginName": "faces-cli",
5897
4926
  "pluginType": "core",
@@ -5901,21 +4930,15 @@
5901
4930
  "relativePath": [
5902
4931
  "dist",
5903
4932
  "commands",
5904
- "compile",
5905
- "thread",
5906
- "delete.js"
4933
+ "face",
4934
+ "tag",
4935
+ "add.js"
5907
4936
  ]
5908
4937
  },
5909
- "compile:thread:edit": {
4938
+ "face:tag:all": {
5910
4939
  "aliases": [],
5911
- "args": {
5912
- "thread_id": {
5913
- "description": "Thread ID",
5914
- "name": "thread_id",
5915
- "required": true
5916
- }
5917
- },
5918
- "description": "Edit a thread (label and/or reassign face speaker)",
4940
+ "args": {},
4941
+ "description": "List all tags across all your faces",
5919
4942
  "flags": {
5920
4943
  "json": {
5921
4944
  "description": "Format output as json.",
@@ -5947,25 +4970,11 @@
5947
4970
  "hasDynamicHelp": false,
5948
4971
  "multiple": false,
5949
4972
  "type": "option"
5950
- },
5951
- "label": {
5952
- "description": "New thread label",
5953
- "name": "label",
5954
- "hasDynamicHelp": false,
5955
- "multiple": false,
5956
- "type": "option"
5957
- },
5958
- "face-speaker": {
5959
- "description": "Reassign face speaker: set this speaker to role=user, all others to role=assistant",
5960
- "name": "face-speaker",
5961
- "hasDynamicHelp": false,
5962
- "multiple": false,
5963
- "type": "option"
5964
4973
  }
5965
4974
  },
5966
4975
  "hasDynamicHelp": false,
5967
4976
  "hiddenAliases": [],
5968
- "id": "compile:thread:edit",
4977
+ "id": "face:tag:all",
5969
4978
  "pluginAlias": "faces-cli",
5970
4979
  "pluginName": "faces-cli",
5971
4980
  "pluginType": "core",
@@ -5975,21 +4984,21 @@
5975
4984
  "relativePath": [
5976
4985
  "dist",
5977
4986
  "commands",
5978
- "compile",
5979
- "thread",
5980
- "edit.js"
4987
+ "face",
4988
+ "tag",
4989
+ "all.js"
5981
4990
  ]
5982
4991
  },
5983
- "compile:thread:get": {
4992
+ "face:tag:list": {
5984
4993
  "aliases": [],
5985
4994
  "args": {
5986
- "thread_id": {
5987
- "description": "Thread ID",
5988
- "name": "thread_id",
4995
+ "alias": {
4996
+ "description": "Face alias",
4997
+ "name": "alias",
5989
4998
  "required": true
5990
4999
  }
5991
5000
  },
5992
- "description": "Get a thread by ID",
5001
+ "description": "List tags on a face",
5993
5002
  "flags": {
5994
5003
  "json": {
5995
5004
  "description": "Format output as json.",
@@ -6025,7 +5034,7 @@
6025
5034
  },
6026
5035
  "hasDynamicHelp": false,
6027
5036
  "hiddenAliases": [],
6028
- "id": "compile:thread:get",
5037
+ "id": "face:tag:list",
6029
5038
  "pluginAlias": "faces-cli",
6030
5039
  "pluginName": "faces-cli",
6031
5040
  "pluginType": "core",
@@ -6035,21 +5044,26 @@
6035
5044
  "relativePath": [
6036
5045
  "dist",
6037
5046
  "commands",
6038
- "compile",
6039
- "thread",
6040
- "get.js"
5047
+ "face",
5048
+ "tag",
5049
+ "list.js"
6041
5050
  ]
6042
5051
  },
6043
- "compile:thread:list": {
5052
+ "face:tag:remove": {
6044
5053
  "aliases": [],
6045
5054
  "args": {
6046
- "face_id": {
5055
+ "alias": {
6047
5056
  "description": "Face alias",
6048
- "name": "face_id",
5057
+ "name": "alias",
5058
+ "required": true
5059
+ },
5060
+ "tag": {
5061
+ "description": "Tag to remove",
5062
+ "name": "tag",
6049
5063
  "required": true
6050
5064
  }
6051
5065
  },
6052
- "description": "List threads for a face",
5066
+ "description": "Remove a tag from a face",
6053
5067
  "flags": {
6054
5068
  "json": {
6055
5069
  "description": "Format output as json.",
@@ -6085,7 +5099,7 @@
6085
5099
  },
6086
5100
  "hasDynamicHelp": false,
6087
5101
  "hiddenAliases": [],
6088
- "id": "compile:thread:list",
5102
+ "id": "face:tag:remove",
6089
5103
  "pluginAlias": "faces-cli",
6090
5104
  "pluginName": "faces-cli",
6091
5105
  "pluginType": "core",
@@ -6095,21 +5109,21 @@
6095
5109
  "relativePath": [
6096
5110
  "dist",
6097
5111
  "commands",
6098
- "compile",
6099
- "thread",
6100
- "list.js"
5112
+ "face",
5113
+ "tag",
5114
+ "remove.js"
6101
5115
  ]
6102
5116
  },
6103
- "compile:thread:make": {
5117
+ "face:tag:set": {
6104
5118
  "aliases": [],
6105
5119
  "args": {
6106
- "thread_id": {
6107
- "description": "Thread ID",
6108
- "name": "thread_id",
5120
+ "alias": {
5121
+ "description": "Face alias",
5122
+ "name": "alias",
6109
5123
  "required": true
6110
5124
  }
6111
5125
  },
6112
- "description": "Compile an existing thread (prepare + sync in one step)",
5126
+ "description": "Replace all tags on a face",
6113
5127
  "flags": {
6114
5128
  "json": {
6115
5129
  "description": "Format output as json.",
@@ -6142,24 +5156,18 @@
6142
5156
  "multiple": false,
6143
5157
  "type": "option"
6144
5158
  },
6145
- "timeout": {
6146
- "description": "Compile timeout in seconds (default: 600)",
6147
- "name": "timeout",
6148
- "default": 600,
5159
+ "tag": {
5160
+ "description": "Tag to set (repeatable, replaces all)",
5161
+ "name": "tag",
5162
+ "required": true,
6149
5163
  "hasDynamicHelp": false,
6150
- "multiple": false,
5164
+ "multiple": true,
6151
5165
  "type": "option"
6152
- },
6153
- "no-wait": {
6154
- "description": "Return immediately after triggering compilation. Prints the thread ID for manual polling.",
6155
- "name": "no-wait",
6156
- "allowNo": false,
6157
- "type": "boolean"
6158
5166
  }
6159
5167
  },
6160
5168
  "hasDynamicHelp": false,
6161
5169
  "hiddenAliases": [],
6162
- "id": "compile:thread:make",
5170
+ "id": "face:tag:set",
6163
5171
  "pluginAlias": "faces-cli",
6164
5172
  "pluginName": "faces-cli",
6165
5173
  "pluginType": "core",
@@ -6169,21 +5177,21 @@
6169
5177
  "relativePath": [
6170
5178
  "dist",
6171
5179
  "commands",
6172
- "compile",
6173
- "thread",
6174
- "make.js"
5180
+ "face",
5181
+ "tag",
5182
+ "set.js"
6175
5183
  ]
6176
5184
  },
6177
- "compile:thread:message": {
5185
+ "team:tag:add": {
6178
5186
  "aliases": [],
6179
5187
  "args": {
6180
- "thread_id": {
6181
- "description": "Thread ID",
6182
- "name": "thread_id",
5188
+ "team_id": {
5189
+ "description": "Team ID",
5190
+ "name": "team_id",
6183
5191
  "required": true
6184
5192
  }
6185
5193
  },
6186
- "description": "Send a user message to a thread",
5194
+ "description": "Add tags to a team (appends, idempotent)",
6187
5195
  "flags": {
6188
5196
  "json": {
6189
5197
  "description": "Format output as json.",
@@ -6216,25 +5224,18 @@
6216
5224
  "multiple": false,
6217
5225
  "type": "option"
6218
5226
  },
6219
- "message": {
6220
- "char": "m",
6221
- "description": "User message to append",
6222
- "name": "message",
5227
+ "tag": {
5228
+ "description": "Tag to add (repeatable)",
5229
+ "name": "tag",
6223
5230
  "required": true,
6224
5231
  "hasDynamicHelp": false,
6225
- "multiple": false,
5232
+ "multiple": true,
6226
5233
  "type": "option"
6227
- },
6228
- "oauth-only": {
6229
- "description": "Prevent fallback to paid system key (use OAuth only)",
6230
- "name": "oauth-only",
6231
- "allowNo": false,
6232
- "type": "boolean"
6233
5234
  }
6234
5235
  },
6235
5236
  "hasDynamicHelp": false,
6236
5237
  "hiddenAliases": [],
6237
- "id": "compile:thread:message",
5238
+ "id": "team:tag:add",
6238
5239
  "pluginAlias": "faces-cli",
6239
5240
  "pluginName": "faces-cli",
6240
5241
  "pluginType": "core",
@@ -6244,21 +5245,21 @@
6244
5245
  "relativePath": [
6245
5246
  "dist",
6246
5247
  "commands",
6247
- "compile",
6248
- "thread",
6249
- "message.js"
5248
+ "team",
5249
+ "tag",
5250
+ "add.js"
6250
5251
  ]
6251
5252
  },
6252
- "compile:thread:pause": {
5253
+ "team:tag:list": {
6253
5254
  "aliases": [],
6254
5255
  "args": {
6255
- "thread_id": {
6256
- "description": "Thread ID",
6257
- "name": "thread_id",
5256
+ "team_id": {
5257
+ "description": "Team ID",
5258
+ "name": "team_id",
6258
5259
  "required": true
6259
5260
  }
6260
5261
  },
6261
- "description": "Pause a running thread compilation (preserves progress, resume with make)",
5262
+ "description": "List tags on a team",
6262
5263
  "flags": {
6263
5264
  "json": {
6264
5265
  "description": "Format output as json.",
@@ -6294,7 +5295,7 @@
6294
5295
  },
6295
5296
  "hasDynamicHelp": false,
6296
5297
  "hiddenAliases": [],
6297
- "id": "compile:thread:pause",
5298
+ "id": "team:tag:list",
6298
5299
  "pluginAlias": "faces-cli",
6299
5300
  "pluginName": "faces-cli",
6300
5301
  "pluginType": "core",
@@ -6304,21 +5305,26 @@
6304
5305
  "relativePath": [
6305
5306
  "dist",
6306
5307
  "commands",
6307
- "compile",
6308
- "thread",
6309
- "pause.js"
5308
+ "team",
5309
+ "tag",
5310
+ "list.js"
6310
5311
  ]
6311
5312
  },
6312
- "compile:thread:reset": {
5313
+ "team:tag:remove": {
6313
5314
  "aliases": [],
6314
5315
  "args": {
6315
- "thread_id": {
6316
- "description": "Thread ID",
6317
- "name": "thread_id",
5316
+ "team_id": {
5317
+ "description": "Team ID",
5318
+ "name": "team_id",
5319
+ "required": true
5320
+ },
5321
+ "tag": {
5322
+ "description": "Tag to remove",
5323
+ "name": "tag",
6318
5324
  "required": true
6319
5325
  }
6320
5326
  },
6321
- "description": "Reset thread compilation progress (wipe extraction, keep source messages)",
5327
+ "description": "Remove a tag from a team",
6322
5328
  "flags": {
6323
5329
  "json": {
6324
5330
  "description": "Format output as json.",
@@ -6350,17 +5356,11 @@
6350
5356
  "hasDynamicHelp": false,
6351
5357
  "multiple": false,
6352
5358
  "type": "option"
6353
- },
6354
- "yes": {
6355
- "description": "Skip confirmation",
6356
- "name": "yes",
6357
- "allowNo": false,
6358
- "type": "boolean"
6359
5359
  }
6360
5360
  },
6361
5361
  "hasDynamicHelp": false,
6362
5362
  "hiddenAliases": [],
6363
- "id": "compile:thread:reset",
5363
+ "id": "team:tag:remove",
6364
5364
  "pluginAlias": "faces-cli",
6365
5365
  "pluginName": "faces-cli",
6366
5366
  "pluginType": "core",
@@ -6370,21 +5370,21 @@
6370
5370
  "relativePath": [
6371
5371
  "dist",
6372
5372
  "commands",
6373
- "compile",
6374
- "thread",
6375
- "reset.js"
5373
+ "team",
5374
+ "tag",
5375
+ "remove.js"
6376
5376
  ]
6377
5377
  },
6378
- "compile:thread:sync": {
5378
+ "team:tag:set": {
6379
5379
  "aliases": [],
6380
5380
  "args": {
6381
- "thread_id": {
6382
- "description": "Thread ID",
6383
- "name": "thread_id",
5381
+ "team_id": {
5382
+ "description": "Team ID",
5383
+ "name": "team_id",
6384
5384
  "required": true
6385
5385
  }
6386
5386
  },
6387
- "description": "Archive and sync a thread into a face",
5387
+ "description": "Replace all tags on a team",
6388
5388
  "flags": {
6389
5389
  "json": {
6390
5390
  "description": "Format output as json.",
@@ -6416,11 +5416,19 @@
6416
5416
  "hasDynamicHelp": false,
6417
5417
  "multiple": false,
6418
5418
  "type": "option"
5419
+ },
5420
+ "tag": {
5421
+ "description": "Tag to set (repeatable, replaces all)",
5422
+ "name": "tag",
5423
+ "required": true,
5424
+ "hasDynamicHelp": false,
5425
+ "multiple": true,
5426
+ "type": "option"
6419
5427
  }
6420
5428
  },
6421
5429
  "hasDynamicHelp": false,
6422
5430
  "hiddenAliases": [],
6423
- "id": "compile:thread:sync",
5431
+ "id": "team:tag:set",
6424
5432
  "pluginAlias": "faces-cli",
6425
5433
  "pluginName": "faces-cli",
6426
5434
  "pluginType": "core",
@@ -6430,21 +5438,21 @@
6430
5438
  "relativePath": [
6431
5439
  "dist",
6432
5440
  "commands",
6433
- "compile",
6434
- "thread",
6435
- "sync.js"
5441
+ "team",
5442
+ "tag",
5443
+ "set.js"
6436
5444
  ]
6437
5445
  },
6438
- "team:tag:add": {
5446
+ "compile:doc:create": {
6439
5447
  "aliases": [],
6440
5448
  "args": {
6441
- "team_id": {
6442
- "description": "Team ID",
6443
- "name": "team_id",
5449
+ "face_id": {
5450
+ "description": "Face alias",
5451
+ "name": "face_id",
6444
5452
  "required": true
6445
5453
  }
6446
5454
  },
6447
- "description": "Add tags to a team (appends, idempotent)",
5455
+ "description": "Submit a document to a face",
6448
5456
  "flags": {
6449
5457
  "json": {
6450
5458
  "description": "Format output as json.",
@@ -6477,18 +5485,43 @@
6477
5485
  "multiple": false,
6478
5486
  "type": "option"
6479
5487
  },
6480
- "tag": {
6481
- "description": "Tag to add (repeatable)",
6482
- "name": "tag",
6483
- "required": true,
5488
+ "label": {
5489
+ "description": "Document label/title",
5490
+ "name": "label",
6484
5491
  "hasDynamicHelp": false,
6485
- "multiple": true,
5492
+ "multiple": false,
5493
+ "type": "option"
5494
+ },
5495
+ "content": {
5496
+ "description": "Inline text content",
5497
+ "name": "content",
5498
+ "hasDynamicHelp": false,
5499
+ "multiple": false,
5500
+ "type": "option"
5501
+ },
5502
+ "file": {
5503
+ "description": "Read content from file",
5504
+ "name": "file",
5505
+ "hasDynamicHelp": false,
5506
+ "multiple": false,
5507
+ "type": "option"
5508
+ },
5509
+ "perspective": {
5510
+ "description": "Perspective (first-person or third-person)",
5511
+ "name": "perspective",
5512
+ "default": "first-person",
5513
+ "hasDynamicHelp": false,
5514
+ "multiple": false,
5515
+ "options": [
5516
+ "first-person",
5517
+ "third-person"
5518
+ ],
6486
5519
  "type": "option"
6487
5520
  }
6488
5521
  },
6489
5522
  "hasDynamicHelp": false,
6490
5523
  "hiddenAliases": [],
6491
- "id": "team:tag:add",
5524
+ "id": "compile:doc:create",
6492
5525
  "pluginAlias": "faces-cli",
6493
5526
  "pluginName": "faces-cli",
6494
5527
  "pluginType": "core",
@@ -6498,21 +5531,21 @@
6498
5531
  "relativePath": [
6499
5532
  "dist",
6500
5533
  "commands",
6501
- "team",
6502
- "tag",
6503
- "add.js"
5534
+ "compile",
5535
+ "doc",
5536
+ "create.js"
6504
5537
  ]
6505
5538
  },
6506
- "team:tag:list": {
5539
+ "compile:doc:delete": {
6507
5540
  "aliases": [],
6508
5541
  "args": {
6509
- "team_id": {
6510
- "description": "Team ID",
6511
- "name": "team_id",
5542
+ "doc_id": {
5543
+ "description": "Document ID",
5544
+ "name": "doc_id",
6512
5545
  "required": true
6513
5546
  }
6514
5547
  },
6515
- "description": "List tags on a team",
5548
+ "description": "Delete a document",
6516
5549
  "flags": {
6517
5550
  "json": {
6518
5551
  "description": "Format output as json.",
@@ -6548,7 +5581,7 @@
6548
5581
  },
6549
5582
  "hasDynamicHelp": false,
6550
5583
  "hiddenAliases": [],
6551
- "id": "team:tag:list",
5584
+ "id": "compile:doc:delete",
6552
5585
  "pluginAlias": "faces-cli",
6553
5586
  "pluginName": "faces-cli",
6554
5587
  "pluginType": "core",
@@ -6558,26 +5591,21 @@
6558
5591
  "relativePath": [
6559
5592
  "dist",
6560
5593
  "commands",
6561
- "team",
6562
- "tag",
6563
- "list.js"
6564
- ]
6565
- },
6566
- "team:tag:remove": {
6567
- "aliases": [],
6568
- "args": {
6569
- "team_id": {
6570
- "description": "Team ID",
6571
- "name": "team_id",
6572
- "required": true
6573
- },
6574
- "tag": {
6575
- "description": "Tag to remove",
6576
- "name": "tag",
5594
+ "compile",
5595
+ "doc",
5596
+ "delete.js"
5597
+ ]
5598
+ },
5599
+ "compile:doc:edit": {
5600
+ "aliases": [],
5601
+ "args": {
5602
+ "doc_id": {
5603
+ "description": "Document ID",
5604
+ "name": "doc_id",
6577
5605
  "required": true
6578
5606
  }
6579
5607
  },
6580
- "description": "Remove a tag from a team",
5608
+ "description": "Edit a document (label, content, or perspective)",
6581
5609
  "flags": {
6582
5610
  "json": {
6583
5611
  "description": "Format output as json.",
@@ -6609,11 +5637,43 @@
6609
5637
  "hasDynamicHelp": false,
6610
5638
  "multiple": false,
6611
5639
  "type": "option"
5640
+ },
5641
+ "label": {
5642
+ "description": "New label/title",
5643
+ "name": "label",
5644
+ "hasDynamicHelp": false,
5645
+ "multiple": false,
5646
+ "type": "option"
5647
+ },
5648
+ "content": {
5649
+ "description": "New inline text content",
5650
+ "name": "content",
5651
+ "hasDynamicHelp": false,
5652
+ "multiple": false,
5653
+ "type": "option"
5654
+ },
5655
+ "file": {
5656
+ "description": "Read new content from file",
5657
+ "name": "file",
5658
+ "hasDynamicHelp": false,
5659
+ "multiple": false,
5660
+ "type": "option"
5661
+ },
5662
+ "perspective": {
5663
+ "description": "Perspective (first-person or third-person)",
5664
+ "name": "perspective",
5665
+ "hasDynamicHelp": false,
5666
+ "multiple": false,
5667
+ "options": [
5668
+ "first-person",
5669
+ "third-person"
5670
+ ],
5671
+ "type": "option"
6612
5672
  }
6613
5673
  },
6614
5674
  "hasDynamicHelp": false,
6615
5675
  "hiddenAliases": [],
6616
- "id": "team:tag:remove",
5676
+ "id": "compile:doc:edit",
6617
5677
  "pluginAlias": "faces-cli",
6618
5678
  "pluginName": "faces-cli",
6619
5679
  "pluginType": "core",
@@ -6623,21 +5683,21 @@
6623
5683
  "relativePath": [
6624
5684
  "dist",
6625
5685
  "commands",
6626
- "team",
6627
- "tag",
6628
- "remove.js"
5686
+ "compile",
5687
+ "doc",
5688
+ "edit.js"
6629
5689
  ]
6630
5690
  },
6631
- "team:tag:set": {
5691
+ "compile:doc:get": {
6632
5692
  "aliases": [],
6633
5693
  "args": {
6634
- "team_id": {
6635
- "description": "Team ID",
6636
- "name": "team_id",
5694
+ "doc_id": {
5695
+ "description": "Document ID",
5696
+ "name": "doc_id",
6637
5697
  "required": true
6638
5698
  }
6639
5699
  },
6640
- "description": "Replace all tags on a team",
5700
+ "description": "Get a document by ID",
6641
5701
  "flags": {
6642
5702
  "json": {
6643
5703
  "description": "Format output as json.",
@@ -6669,19 +5729,11 @@
6669
5729
  "hasDynamicHelp": false,
6670
5730
  "multiple": false,
6671
5731
  "type": "option"
6672
- },
6673
- "tag": {
6674
- "description": "Tag to set (repeatable, replaces all)",
6675
- "name": "tag",
6676
- "required": true,
6677
- "hasDynamicHelp": false,
6678
- "multiple": true,
6679
- "type": "option"
6680
5732
  }
6681
5733
  },
6682
5734
  "hasDynamicHelp": false,
6683
5735
  "hiddenAliases": [],
6684
- "id": "team:tag:set",
5736
+ "id": "compile:doc:get",
6685
5737
  "pluginAlias": "faces-cli",
6686
5738
  "pluginName": "faces-cli",
6687
5739
  "pluginType": "core",
@@ -6691,21 +5743,21 @@
6691
5743
  "relativePath": [
6692
5744
  "dist",
6693
5745
  "commands",
6694
- "team",
6695
- "tag",
6696
- "set.js"
5746
+ "compile",
5747
+ "doc",
5748
+ "get.js"
6697
5749
  ]
6698
5750
  },
6699
- "face:tag:add": {
5751
+ "compile:doc": {
6700
5752
  "aliases": [],
6701
5753
  "args": {
6702
- "alias": {
5754
+ "face_id": {
6703
5755
  "description": "Face alias",
6704
- "name": "alias",
5756
+ "name": "face_id",
6705
5757
  "required": true
6706
5758
  }
6707
5759
  },
6708
- "description": "Add tags to a face (appends, idempotent)",
5760
+ "description": "Compile a document into a face (create → make in one step)",
6709
5761
  "flags": {
6710
5762
  "json": {
6711
5763
  "description": "Format output as json.",
@@ -6738,18 +5790,57 @@
6738
5790
  "multiple": false,
6739
5791
  "type": "option"
6740
5792
  },
6741
- "tag": {
6742
- "description": "Tag to add (repeatable)",
6743
- "name": "tag",
6744
- "required": true,
5793
+ "label": {
5794
+ "description": "Document label/title",
5795
+ "name": "label",
6745
5796
  "hasDynamicHelp": false,
6746
- "multiple": true,
5797
+ "multiple": false,
5798
+ "type": "option"
5799
+ },
5800
+ "content": {
5801
+ "description": "Inline text content",
5802
+ "name": "content",
5803
+ "hasDynamicHelp": false,
5804
+ "multiple": false,
5805
+ "type": "option"
5806
+ },
5807
+ "file": {
5808
+ "description": "Read content from file",
5809
+ "name": "file",
5810
+ "hasDynamicHelp": false,
5811
+ "multiple": false,
5812
+ "type": "option"
5813
+ },
5814
+ "perspective": {
5815
+ "description": "Perspective",
5816
+ "name": "perspective",
5817
+ "default": "first-person",
5818
+ "hasDynamicHelp": false,
5819
+ "multiple": false,
5820
+ "options": [
5821
+ "first-person",
5822
+ "third-person"
5823
+ ],
5824
+ "type": "option"
5825
+ },
5826
+ "timeout": {
5827
+ "description": "Compile timeout in seconds (default: 600)",
5828
+ "name": "timeout",
5829
+ "default": 600,
5830
+ "hasDynamicHelp": false,
5831
+ "multiple": false,
6747
5832
  "type": "option"
5833
+ },
5834
+ "no-wait": {
5835
+ "description": "Create and trigger compilation, then return immediately without polling.",
5836
+ "name": "no-wait",
5837
+ "allowNo": false,
5838
+ "type": "boolean"
6748
5839
  }
6749
5840
  },
6750
5841
  "hasDynamicHelp": false,
6751
5842
  "hiddenAliases": [],
6752
- "id": "face:tag:add",
5843
+ "id": "compile:doc",
6753
5844
  "pluginAlias": "faces-cli",
6754
5845
  "pluginName": "faces-cli",
6755
5846
  "pluginType": "core",
@@ -6759,15 +5850,21 @@
6759
5850
  "relativePath": [
6760
5851
  "dist",
6761
5852
  "commands",
6762
- "face",
6763
- "tag",
6764
- "add.js"
5853
+ "compile",
5854
+ "doc",
5855
+ "index.js"
6765
5856
  ]
6766
5857
  },
6767
- "face:tag:all": {
5858
+ "compile:doc:list": {
6768
5859
  "aliases": [],
6769
- "args": {},
6770
- "description": "List all tags across all your faces",
5860
+ "args": {
5861
+ "face_id": {
5862
+ "description": "Face alias",
5863
+ "name": "face_id",
5864
+ "required": true
5865
+ }
5866
+ },
5867
+ "description": "List documents for a face",
6771
5868
  "flags": {
6772
5869
  "json": {
6773
5870
  "description": "Format output as json.",
@@ -6803,7 +5900,7 @@
6803
5900
  },
6804
5901
  "hasDynamicHelp": false,
6805
5902
  "hiddenAliases": [],
6806
- "id": "face:tag:all",
5903
+ "id": "compile:doc:list",
6807
5904
  "pluginAlias": "faces-cli",
6808
5905
  "pluginName": "faces-cli",
6809
5906
  "pluginType": "core",
@@ -6813,21 +5910,21 @@
6813
5910
  "relativePath": [
6814
5911
  "dist",
6815
5912
  "commands",
6816
- "face",
6817
- "tag",
6818
- "all.js"
5913
+ "compile",
5914
+ "doc",
5915
+ "list.js"
6819
5916
  ]
6820
5917
  },
6821
- "face:tag:list": {
5918
+ "compile:doc:make": {
6822
5919
  "aliases": [],
6823
5920
  "args": {
6824
- "alias": {
6825
- "description": "Face alias",
6826
- "name": "alias",
5921
+ "doc_id": {
5922
+ "description": "Document ID",
5923
+ "name": "doc_id",
6827
5924
  "required": true
6828
5925
  }
6829
5926
  },
6830
- "description": "List tags on a face",
5927
+ "description": "Compile an existing document (prepare + sync in one step)",
6831
5928
  "flags": {
6832
5929
  "json": {
6833
5930
  "description": "Format output as json.",
@@ -6859,11 +5956,25 @@
6859
5956
  "hasDynamicHelp": false,
6860
5957
  "multiple": false,
6861
5958
  "type": "option"
5959
+ },
5960
+ "timeout": {
5961
+ "description": "Compile timeout in seconds (default: 600)",
5962
+ "name": "timeout",
5963
+ "default": 600,
5964
+ "hasDynamicHelp": false,
5965
+ "multiple": false,
5966
+ "type": "option"
5967
+ },
5968
+ "no-wait": {
5969
+ "description": "Return immediately after triggering compilation. Prints the document ID for manual polling.",
5970
+ "name": "no-wait",
5971
+ "allowNo": false,
5972
+ "type": "boolean"
6862
5973
  }
6863
5974
  },
6864
5975
  "hasDynamicHelp": false,
6865
5976
  "hiddenAliases": [],
6866
- "id": "face:tag:list",
5977
+ "id": "compile:doc:make",
6867
5978
  "pluginAlias": "faces-cli",
6868
5979
  "pluginName": "faces-cli",
6869
5980
  "pluginType": "core",
@@ -6873,26 +5984,21 @@
6873
5984
  "relativePath": [
6874
5985
  "dist",
6875
5986
  "commands",
6876
- "face",
6877
- "tag",
6878
- "list.js"
5987
+ "compile",
5988
+ "doc",
5989
+ "make.js"
6879
5990
  ]
6880
5991
  },
6881
- "face:tag:remove": {
5992
+ "compile:doc:pause": {
6882
5993
  "aliases": [],
6883
5994
  "args": {
6884
- "alias": {
6885
- "description": "Face alias",
6886
- "name": "alias",
6887
- "required": true
6888
- },
6889
- "tag": {
6890
- "description": "Tag to remove",
6891
- "name": "tag",
5995
+ "doc_id": {
5996
+ "description": "Document ID",
5997
+ "name": "doc_id",
6892
5998
  "required": true
6893
5999
  }
6894
6000
  },
6895
- "description": "Remove a tag from a face",
6001
+ "description": "Ask a running document compilation to stop (preserves progress, resume with make). The compile stops at the next chunk boundary; this waits for it unless --no-wait.",
6896
6002
  "flags": {
6897
6003
  "json": {
6898
6004
  "description": "Format output as json.",
@@ -6924,11 +6030,25 @@
6924
6030
  "hasDynamicHelp": false,
6925
6031
  "multiple": false,
6926
6032
  "type": "option"
6033
+ },
6034
+ "no-wait": {
6035
+ "description": "Return as soon as the pause is accepted, without waiting for the compile to stop.",
6036
+ "name": "no-wait",
6037
+ "allowNo": false,
6038
+ "type": "boolean"
6039
+ },
6040
+ "timeout": {
6041
+ "description": "Seconds to wait for the compile to stop (default: 60)",
6042
+ "name": "timeout",
6043
+ "default": 60,
6044
+ "hasDynamicHelp": false,
6045
+ "multiple": false,
6046
+ "type": "option"
6927
6047
  }
6928
6048
  },
6929
6049
  "hasDynamicHelp": false,
6930
6050
  "hiddenAliases": [],
6931
- "id": "face:tag:remove",
6051
+ "id": "compile:doc:pause",
6932
6052
  "pluginAlias": "faces-cli",
6933
6053
  "pluginName": "faces-cli",
6934
6054
  "pluginType": "core",
@@ -6938,21 +6058,21 @@
6938
6058
  "relativePath": [
6939
6059
  "dist",
6940
6060
  "commands",
6941
- "face",
6942
- "tag",
6943
- "remove.js"
6061
+ "compile",
6062
+ "doc",
6063
+ "pause.js"
6944
6064
  ]
6945
6065
  },
6946
- "face:tag:set": {
6066
+ "compile:doc:reset": {
6947
6067
  "aliases": [],
6948
6068
  "args": {
6949
- "alias": {
6950
- "description": "Face alias",
6951
- "name": "alias",
6069
+ "doc_id": {
6070
+ "description": "Document ID",
6071
+ "name": "doc_id",
6952
6072
  "required": true
6953
6073
  }
6954
6074
  },
6955
- "description": "Replace all tags on a face",
6075
+ "description": "Reset document compilation progress (wipe extraction, keep content)",
6956
6076
  "flags": {
6957
6077
  "json": {
6958
6078
  "description": "Format output as json.",
@@ -6985,18 +6105,16 @@
6985
6105
  "multiple": false,
6986
6106
  "type": "option"
6987
6107
  },
6988
- "tag": {
6989
- "description": "Tag to set (repeatable, replaces all)",
6990
- "name": "tag",
6991
- "required": true,
6992
- "hasDynamicHelp": false,
6993
- "multiple": true,
6994
- "type": "option"
6108
+ "yes": {
6109
+ "description": "Skip confirmation",
6110
+ "name": "yes",
6111
+ "allowNo": false,
6112
+ "type": "boolean"
6995
6113
  }
6996
6114
  },
6997
6115
  "hasDynamicHelp": false,
6998
6116
  "hiddenAliases": [],
6999
- "id": "face:tag:set",
6117
+ "id": "compile:doc:reset",
7000
6118
  "pluginAlias": "faces-cli",
7001
6119
  "pluginName": "faces-cli",
7002
6120
  "pluginType": "core",
@@ -7006,11 +6124,11 @@
7006
6124
  "relativePath": [
7007
6125
  "dist",
7008
6126
  "commands",
7009
- "face",
7010
- "tag",
7011
- "set.js"
6127
+ "compile",
6128
+ "doc",
6129
+ "reset.js"
7012
6130
  ]
7013
6131
  }
7014
6132
  },
7015
- "version": "1.7.6"
6133
+ "version": "1.7.8"
7016
6134
  }