faces-cli 1.7.0 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -120,10 +120,10 @@
120
120
  "state.js"
121
121
  ]
122
122
  },
123
- "catalog:backup": {
123
+ "billing:balance": {
124
124
  "aliases": [],
125
125
  "args": {},
126
- "description": "Snapshot all faces, teams, and source material for migration",
126
+ "description": "Show credit balance and payment method status",
127
127
  "flags": {
128
128
  "json": {
129
129
  "description": "Format output as json.",
@@ -159,7 +159,7 @@
159
159
  },
160
160
  "hasDynamicHelp": false,
161
161
  "hiddenAliases": [],
162
- "id": "catalog:backup",
162
+ "id": "billing:balance",
163
163
  "pluginAlias": "faces-cli",
164
164
  "pluginName": "faces-cli",
165
165
  "pluginType": "core",
@@ -169,14 +169,14 @@
169
169
  "relativePath": [
170
170
  "dist",
171
171
  "commands",
172
- "catalog",
173
- "backup.js"
172
+ "billing",
173
+ "balance.js"
174
174
  ]
175
175
  },
176
- "catalog:doctor": {
176
+ "billing:card-setup": {
177
177
  "aliases": [],
178
178
  "args": {},
179
- "description": "Diagnose and repair the local face and team catalog",
179
+ "description": "Get a Stripe card setup URL to save a payment method",
180
180
  "flags": {
181
181
  "json": {
182
182
  "description": "Format output as json.",
@@ -208,23 +208,71 @@
208
208
  "hasDynamicHelp": false,
209
209
  "multiple": false,
210
210
  "type": "option"
211
- },
212
- "fix": {
213
- "description": "Rebuild missing or stale catalog entries from API",
214
- "name": "fix",
211
+ }
212
+ },
213
+ "hasDynamicHelp": false,
214
+ "hiddenAliases": [],
215
+ "id": "billing:card-setup",
216
+ "pluginAlias": "faces-cli",
217
+ "pluginName": "faces-cli",
218
+ "pluginType": "core",
219
+ "strict": true,
220
+ "enableJsonFlag": true,
221
+ "isESM": true,
222
+ "relativePath": [
223
+ "dist",
224
+ "commands",
225
+ "billing",
226
+ "card-setup.js"
227
+ ]
228
+ },
229
+ "billing:llm-costs": {
230
+ "aliases": [],
231
+ "args": {},
232
+ "description": "List available LLMs and their per-token costs",
233
+ "flags": {
234
+ "json": {
235
+ "description": "Format output as json.",
236
+ "helpGroup": "GLOBAL",
237
+ "name": "json",
215
238
  "allowNo": false,
216
239
  "type": "boolean"
217
240
  },
218
- "generate": {
219
- "description": "Fix + generate missing descriptions via LLM",
220
- "name": "generate",
221
- "allowNo": false,
222
- "type": "boolean"
241
+ "base-url": {
242
+ "description": "API base URL",
243
+ "env": "FACES_BASE_URL",
244
+ "name": "base-url",
245
+ "hasDynamicHelp": false,
246
+ "multiple": false,
247
+ "type": "option"
248
+ },
249
+ "token": {
250
+ "description": "JWT bearer token",
251
+ "env": "FACES_TOKEN",
252
+ "name": "token",
253
+ "hasDynamicHelp": false,
254
+ "multiple": false,
255
+ "type": "option"
256
+ },
257
+ "api-key": {
258
+ "description": "API key",
259
+ "env": "FACES_API_KEY",
260
+ "name": "api-key",
261
+ "hasDynamicHelp": false,
262
+ "multiple": false,
263
+ "type": "option"
264
+ },
265
+ "provider": {
266
+ "description": "Filter by provider (e.g. openai, anthropic)",
267
+ "name": "provider",
268
+ "hasDynamicHelp": false,
269
+ "multiple": false,
270
+ "type": "option"
223
271
  }
224
272
  },
225
273
  "hasDynamicHelp": false,
226
274
  "hiddenAliases": [],
227
- "id": "catalog:doctor",
275
+ "id": "billing:llm-costs",
228
276
  "pluginAlias": "faces-cli",
229
277
  "pluginName": "faces-cli",
230
278
  "pluginType": "core",
@@ -234,14 +282,14 @@
234
282
  "relativePath": [
235
283
  "dist",
236
284
  "commands",
237
- "catalog",
238
- "doctor.js"
285
+ "billing",
286
+ "llm-costs.js"
239
287
  ]
240
288
  },
241
- "catalog:list": {
289
+ "billing:quota": {
242
290
  "aliases": [],
243
291
  "args": {},
244
- "description": "List all faces in the local catalog",
292
+ "description": "Show compilation stats per face (deprecated — use compile:stats)",
245
293
  "flags": {
246
294
  "json": {
247
295
  "description": "Format output as json.",
@@ -277,7 +325,7 @@
277
325
  },
278
326
  "hasDynamicHelp": false,
279
327
  "hiddenAliases": [],
280
- "id": "catalog:list",
328
+ "id": "billing:quota",
281
329
  "pluginAlias": "faces-cli",
282
330
  "pluginName": "faces-cli",
283
331
  "pluginType": "core",
@@ -287,14 +335,14 @@
287
335
  "relativePath": [
288
336
  "dist",
289
337
  "commands",
290
- "catalog",
291
- "list.js"
338
+ "billing",
339
+ "quota.js"
292
340
  ]
293
341
  },
294
- "catalog:manyfaced": {
342
+ "billing:subscription": {
295
343
  "aliases": [],
296
344
  "args": {},
297
- "description": "Browse and install community manyfaced skills from github.com/facessh/manyfaced",
345
+ "description": "Show current plan, face count, and renewal date",
298
346
  "flags": {
299
347
  "json": {
300
348
  "description": "Format output as json.",
@@ -326,38 +374,79 @@
326
374
  "hasDynamicHelp": false,
327
375
  "multiple": false,
328
376
  "type": "option"
377
+ }
378
+ },
379
+ "hasDynamicHelp": false,
380
+ "hiddenAliases": [],
381
+ "id": "billing:subscription",
382
+ "pluginAlias": "faces-cli",
383
+ "pluginName": "faces-cli",
384
+ "pluginType": "core",
385
+ "strict": true,
386
+ "enableJsonFlag": true,
387
+ "isESM": true,
388
+ "relativePath": [
389
+ "dist",
390
+ "commands",
391
+ "billing",
392
+ "subscription.js"
393
+ ]
394
+ },
395
+ "billing:topup": {
396
+ "aliases": [],
397
+ "args": {},
398
+ "description": "Top up credit balance using saved payment method",
399
+ "flags": {
400
+ "json": {
401
+ "description": "Format output as json.",
402
+ "helpGroup": "GLOBAL",
403
+ "name": "json",
404
+ "allowNo": false,
405
+ "type": "boolean"
406
+ },
407
+ "base-url": {
408
+ "description": "API base URL",
409
+ "env": "FACES_BASE_URL",
410
+ "name": "base-url",
411
+ "hasDynamicHelp": false,
412
+ "multiple": false,
413
+ "type": "option"
329
414
  },
330
- "skill": {
331
- "description": "Show details for a specific skill",
332
- "name": "skill",
415
+ "token": {
416
+ "description": "JWT bearer token",
417
+ "env": "FACES_TOKEN",
418
+ "name": "token",
333
419
  "hasDynamicHelp": false,
334
420
  "multiple": false,
335
421
  "type": "option"
336
422
  },
337
- "install": {
338
- "description": "Install a skill by name",
339
- "name": "install",
423
+ "api-key": {
424
+ "description": "API key",
425
+ "env": "FACES_API_KEY",
426
+ "name": "api-key",
340
427
  "hasDynamicHelp": false,
341
428
  "multiple": false,
342
429
  "type": "option"
343
430
  },
344
- "skills-dir": {
345
- "description": "Directory to install skills into (required for --install)",
346
- "name": "skills-dir",
431
+ "amount": {
432
+ "description": "Top-up amount in USD (min $1)",
433
+ "name": "amount",
434
+ "required": true,
347
435
  "hasDynamicHelp": false,
348
436
  "multiple": false,
349
437
  "type": "option"
350
438
  },
351
- "refresh": {
352
- "description": "Force refresh the skill index (ignore cache)",
353
- "name": "refresh",
354
- "allowNo": false,
355
- "type": "boolean"
439
+ "payment-ref": {
440
+ "description": "Payment reference (admin/test path)",
441
+ "name": "payment-ref",
442
+ "hasDynamicHelp": false,
443
+ "multiple": false,
444
+ "type": "option"
356
445
  }
357
446
  },
358
447
  "hasDynamicHelp": false,
359
448
  "hiddenAliases": [],
360
- "id": "catalog:manyfaced",
449
+ "id": "billing:topup",
361
450
  "pluginAlias": "faces-cli",
362
451
  "pluginName": "faces-cli",
363
452
  "pluginType": "core",
@@ -367,19 +456,14 @@
367
456
  "relativePath": [
368
457
  "dist",
369
458
  "commands",
370
- "catalog",
371
- "manyfaced.js"
459
+ "billing",
460
+ "topup.js"
372
461
  ]
373
462
  },
374
- "catalog:restore": {
463
+ "billing:usage": {
375
464
  "aliases": [],
376
- "args": {
377
- "file": {
378
- "description": "Backup file path (default: most recent in ~/.faces/backups/)",
379
- "name": "file"
380
- }
381
- },
382
- "description": "Restore faces, teams, and source material from a backup snapshot",
465
+ "args": {},
466
+ "description": "Aggregated usage analytics",
383
467
  "flags": {
384
468
  "json": {
385
469
  "description": "Format output as json.",
@@ -412,16 +496,37 @@
412
496
  "multiple": false,
413
497
  "type": "option"
414
498
  },
415
- "compile": {
416
- "description": "Run compile:all after restoring",
417
- "name": "compile",
418
- "allowNo": false,
419
- "type": "boolean"
499
+ "group-by": {
500
+ "description": "Group results",
501
+ "name": "group-by",
502
+ "hasDynamicHelp": false,
503
+ "multiple": false,
504
+ "options": [
505
+ "api_key",
506
+ "model",
507
+ "llm",
508
+ "date"
509
+ ],
510
+ "type": "option"
511
+ },
512
+ "from": {
513
+ "description": "Start date (YYYY-MM-DD)",
514
+ "name": "from",
515
+ "hasDynamicHelp": false,
516
+ "multiple": false,
517
+ "type": "option"
518
+ },
519
+ "to": {
520
+ "description": "End date (YYYY-MM-DD)",
521
+ "name": "to",
522
+ "hasDynamicHelp": false,
523
+ "multiple": false,
524
+ "type": "option"
420
525
  }
421
526
  },
422
527
  "hasDynamicHelp": false,
423
528
  "hiddenAliases": [],
424
- "id": "catalog:restore",
529
+ "id": "billing:usage",
425
530
  "pluginAlias": "faces-cli",
426
531
  "pluginName": "faces-cli",
427
532
  "pluginType": "core",
@@ -431,8 +536,8 @@
431
536
  "relativePath": [
432
537
  "dist",
433
538
  "commands",
434
- "catalog",
435
- "restore.js"
539
+ "billing",
540
+ "usage.js"
436
541
  ]
437
542
  },
438
543
  "auth:connect": {
@@ -947,10 +1052,10 @@
947
1052
  "whoami.js"
948
1053
  ]
949
1054
  },
950
- "billing:balance": {
1055
+ "catalog:backup": {
951
1056
  "aliases": [],
952
1057
  "args": {},
953
- "description": "Show credit balance and payment method status",
1058
+ "description": "Snapshot all faces, teams, and source material for migration",
954
1059
  "flags": {
955
1060
  "json": {
956
1061
  "description": "Format output as json.",
@@ -986,7 +1091,7 @@
986
1091
  },
987
1092
  "hasDynamicHelp": false,
988
1093
  "hiddenAliases": [],
989
- "id": "billing:balance",
1094
+ "id": "catalog:backup",
990
1095
  "pluginAlias": "faces-cli",
991
1096
  "pluginName": "faces-cli",
992
1097
  "pluginType": "core",
@@ -996,14 +1101,14 @@
996
1101
  "relativePath": [
997
1102
  "dist",
998
1103
  "commands",
999
- "billing",
1000
- "balance.js"
1104
+ "catalog",
1105
+ "backup.js"
1001
1106
  ]
1002
1107
  },
1003
- "billing:card-setup": {
1108
+ "catalog:doctor": {
1004
1109
  "aliases": [],
1005
1110
  "args": {},
1006
- "description": "Get a Stripe card setup URL to save a payment method",
1111
+ "description": "Diagnose and repair the local face and team catalog",
1007
1112
  "flags": {
1008
1113
  "json": {
1009
1114
  "description": "Format output as json.",
@@ -1035,11 +1140,23 @@
1035
1140
  "hasDynamicHelp": false,
1036
1141
  "multiple": false,
1037
1142
  "type": "option"
1143
+ },
1144
+ "fix": {
1145
+ "description": "Rebuild missing or stale catalog entries from API",
1146
+ "name": "fix",
1147
+ "allowNo": false,
1148
+ "type": "boolean"
1149
+ },
1150
+ "generate": {
1151
+ "description": "Fix + generate missing descriptions via LLM",
1152
+ "name": "generate",
1153
+ "allowNo": false,
1154
+ "type": "boolean"
1038
1155
  }
1039
1156
  },
1040
1157
  "hasDynamicHelp": false,
1041
1158
  "hiddenAliases": [],
1042
- "id": "billing:card-setup",
1159
+ "id": "catalog:doctor",
1043
1160
  "pluginAlias": "faces-cli",
1044
1161
  "pluginName": "faces-cli",
1045
1162
  "pluginType": "core",
@@ -1049,14 +1166,14 @@
1049
1166
  "relativePath": [
1050
1167
  "dist",
1051
1168
  "commands",
1052
- "billing",
1053
- "card-setup.js"
1169
+ "catalog",
1170
+ "doctor.js"
1054
1171
  ]
1055
1172
  },
1056
- "billing:llm-costs": {
1173
+ "catalog:list": {
1057
1174
  "aliases": [],
1058
1175
  "args": {},
1059
- "description": "List available LLMs and their per-token costs",
1176
+ "description": "List all faces in the local catalog",
1060
1177
  "flags": {
1061
1178
  "json": {
1062
1179
  "description": "Format output as json.",
@@ -1088,18 +1205,11 @@
1088
1205
  "hasDynamicHelp": false,
1089
1206
  "multiple": false,
1090
1207
  "type": "option"
1091
- },
1092
- "provider": {
1093
- "description": "Filter by provider (e.g. openai, anthropic)",
1094
- "name": "provider",
1095
- "hasDynamicHelp": false,
1096
- "multiple": false,
1097
- "type": "option"
1098
1208
  }
1099
1209
  },
1100
1210
  "hasDynamicHelp": false,
1101
1211
  "hiddenAliases": [],
1102
- "id": "billing:llm-costs",
1212
+ "id": "catalog:list",
1103
1213
  "pluginAlias": "faces-cli",
1104
1214
  "pluginName": "faces-cli",
1105
1215
  "pluginType": "core",
@@ -1109,14 +1219,14 @@
1109
1219
  "relativePath": [
1110
1220
  "dist",
1111
1221
  "commands",
1112
- "billing",
1113
- "llm-costs.js"
1222
+ "catalog",
1223
+ "list.js"
1114
1224
  ]
1115
1225
  },
1116
- "billing:quota": {
1226
+ "catalog:manyfaced": {
1117
1227
  "aliases": [],
1118
1228
  "args": {},
1119
- "description": "Show compilation stats per face (deprecated use compile:stats)",
1229
+ "description": "Browse and install community manyfaced skills from github.com/facessh/manyfaced",
1120
1230
  "flags": {
1121
1231
  "json": {
1122
1232
  "description": "Format output as json.",
@@ -1148,11 +1258,38 @@
1148
1258
  "hasDynamicHelp": false,
1149
1259
  "multiple": false,
1150
1260
  "type": "option"
1261
+ },
1262
+ "skill": {
1263
+ "description": "Show details for a specific skill",
1264
+ "name": "skill",
1265
+ "hasDynamicHelp": false,
1266
+ "multiple": false,
1267
+ "type": "option"
1268
+ },
1269
+ "install": {
1270
+ "description": "Install a skill by name",
1271
+ "name": "install",
1272
+ "hasDynamicHelp": false,
1273
+ "multiple": false,
1274
+ "type": "option"
1275
+ },
1276
+ "skills-dir": {
1277
+ "description": "Directory to install skills into (required for --install)",
1278
+ "name": "skills-dir",
1279
+ "hasDynamicHelp": false,
1280
+ "multiple": false,
1281
+ "type": "option"
1282
+ },
1283
+ "refresh": {
1284
+ "description": "Force refresh the skill index (ignore cache)",
1285
+ "name": "refresh",
1286
+ "allowNo": false,
1287
+ "type": "boolean"
1151
1288
  }
1152
1289
  },
1153
1290
  "hasDynamicHelp": false,
1154
1291
  "hiddenAliases": [],
1155
- "id": "billing:quota",
1292
+ "id": "catalog:manyfaced",
1156
1293
  "pluginAlias": "faces-cli",
1157
1294
  "pluginName": "faces-cli",
1158
1295
  "pluginType": "core",
@@ -1162,14 +1299,19 @@
1162
1299
  "relativePath": [
1163
1300
  "dist",
1164
1301
  "commands",
1165
- "billing",
1166
- "quota.js"
1302
+ "catalog",
1303
+ "manyfaced.js"
1167
1304
  ]
1168
1305
  },
1169
- "billing:subscription": {
1306
+ "catalog:restore": {
1170
1307
  "aliases": [],
1171
- "args": {},
1172
- "description": "Show current plan, face count, and renewal date",
1308
+ "args": {
1309
+ "file": {
1310
+ "description": "Backup file path (default: most recent in ~/.faces/backups/)",
1311
+ "name": "file"
1312
+ }
1313
+ },
1314
+ "description": "Restore faces, teams, and source material from a backup snapshot",
1173
1315
  "flags": {
1174
1316
  "json": {
1175
1317
  "description": "Format output as json.",
@@ -1201,11 +1343,17 @@
1201
1343
  "hasDynamicHelp": false,
1202
1344
  "multiple": false,
1203
1345
  "type": "option"
1346
+ },
1347
+ "compile": {
1348
+ "description": "Run compile:all after restoring",
1349
+ "name": "compile",
1350
+ "allowNo": false,
1351
+ "type": "boolean"
1204
1352
  }
1205
1353
  },
1206
1354
  "hasDynamicHelp": false,
1207
1355
  "hiddenAliases": [],
1208
- "id": "billing:subscription",
1356
+ "id": "catalog:restore",
1209
1357
  "pluginAlias": "faces-cli",
1210
1358
  "pluginName": "faces-cli",
1211
1359
  "pluginType": "core",
@@ -1215,14 +1363,20 @@
1215
1363
  "relativePath": [
1216
1364
  "dist",
1217
1365
  "commands",
1218
- "billing",
1219
- "subscription.js"
1366
+ "catalog",
1367
+ "restore.js"
1220
1368
  ]
1221
1369
  },
1222
- "billing:topup": {
1370
+ "chat:chat": {
1223
1371
  "aliases": [],
1224
- "args": {},
1225
- "description": "Top up credit balance using saved payment method",
1372
+ "args": {
1373
+ "face_username": {
1374
+ "description": "Face alias (alias@model, or owner:alias@model for a published face)",
1375
+ "name": "face_username",
1376
+ "required": true
1377
+ }
1378
+ },
1379
+ "description": "Chat via a face. Auto-routes to the correct API endpoint based on the model catalog.",
1226
1380
  "flags": {
1227
1381
  "json": {
1228
1382
  "description": "Format output as json.",
@@ -1255,25 +1409,72 @@
1255
1409
  "multiple": false,
1256
1410
  "type": "option"
1257
1411
  },
1258
- "amount": {
1259
- "description": "Top-up amount in USD (min $1)",
1260
- "name": "amount",
1261
- "required": true,
1412
+ "message": {
1413
+ "char": "m",
1414
+ "description": "User message (repeatable)",
1415
+ "name": "message",
1416
+ "required": false,
1417
+ "hasDynamicHelp": false,
1418
+ "multiple": true,
1419
+ "type": "option"
1420
+ },
1421
+ "llm": {
1422
+ "description": "LLM override (e.g. gpt-4o-mini, claude-sonnet-4-6)",
1423
+ "name": "llm",
1262
1424
  "hasDynamicHelp": false,
1263
1425
  "multiple": false,
1264
1426
  "type": "option"
1265
1427
  },
1266
- "payment-ref": {
1267
- "description": "Payment reference (admin/test path)",
1268
- "name": "payment-ref",
1428
+ "system": {
1429
+ "description": "System prompt / instructions",
1430
+ "name": "system",
1431
+ "hasDynamicHelp": false,
1432
+ "multiple": false,
1433
+ "type": "option"
1434
+ },
1435
+ "stream": {
1436
+ "description": "Stream the response",
1437
+ "name": "stream",
1438
+ "allowNo": false,
1439
+ "type": "boolean"
1440
+ },
1441
+ "max-tokens": {
1442
+ "description": "Max tokens",
1443
+ "name": "max-tokens",
1444
+ "hasDynamicHelp": false,
1445
+ "multiple": false,
1446
+ "type": "option"
1447
+ },
1448
+ "temperature": {
1449
+ "description": "Temperature (0.0-2.0)",
1450
+ "name": "temperature",
1451
+ "hasDynamicHelp": false,
1452
+ "multiple": false,
1453
+ "type": "option"
1454
+ },
1455
+ "file": {
1456
+ "description": "Read message from file",
1457
+ "name": "file",
1269
1458
  "hasDynamicHelp": false,
1270
1459
  "multiple": false,
1271
1460
  "type": "option"
1461
+ },
1462
+ "responses": {
1463
+ "description": "Force the OpenAI Responses API endpoint (escape hatch; routing is automatic otherwise)",
1464
+ "name": "responses",
1465
+ "allowNo": false,
1466
+ "type": "boolean"
1467
+ },
1468
+ "oauth-only": {
1469
+ "description": "Prevent fallback to paid system key (use OAuth only)",
1470
+ "name": "oauth-only",
1471
+ "allowNo": false,
1472
+ "type": "boolean"
1272
1473
  }
1273
1474
  },
1274
1475
  "hasDynamicHelp": false,
1275
1476
  "hiddenAliases": [],
1276
- "id": "billing:topup",
1477
+ "id": "chat:chat",
1277
1478
  "pluginAlias": "faces-cli",
1278
1479
  "pluginName": "faces-cli",
1279
1480
  "pluginType": "core",
@@ -1283,14 +1484,20 @@
1283
1484
  "relativePath": [
1284
1485
  "dist",
1285
1486
  "commands",
1286
- "billing",
1287
- "topup.js"
1487
+ "chat",
1488
+ "chat.js"
1288
1489
  ]
1289
1490
  },
1290
- "billing:usage": {
1491
+ "chat:messages": {
1291
1492
  "aliases": [],
1292
- "args": {},
1293
- "description": "Aggregated usage analytics",
1493
+ "args": {
1494
+ "face_model": {
1495
+ "description": "Face model (e.g. myface, myface@claude-sonnet-4-6, or head:judge@claude-sonnet-4-6)",
1496
+ "name": "face_model",
1497
+ "required": true
1498
+ }
1499
+ },
1500
+ "description": "Anthropic Messages API proxy via a face (alias: chat:chat auto-routes Anthropic models here)",
1294
1501
  "flags": {
1295
1502
  "json": {
1296
1503
  "description": "Format output as json.",
@@ -1323,37 +1530,46 @@
1323
1530
  "multiple": false,
1324
1531
  "type": "option"
1325
1532
  },
1326
- "group-by": {
1327
- "description": "Group results",
1328
- "name": "group-by",
1533
+ "message": {
1534
+ "char": "m",
1535
+ "description": "User message (repeatable)",
1536
+ "name": "message",
1537
+ "required": true,
1329
1538
  "hasDynamicHelp": false,
1330
- "multiple": false,
1331
- "options": [
1332
- "api_key",
1333
- "model",
1334
- "llm",
1335
- "date"
1336
- ],
1539
+ "multiple": true,
1337
1540
  "type": "option"
1338
1541
  },
1339
- "from": {
1340
- "description": "Start date (YYYY-MM-DD)",
1341
- "name": "from",
1542
+ "system": {
1543
+ "description": "System prompt",
1544
+ "name": "system",
1342
1545
  "hasDynamicHelp": false,
1343
1546
  "multiple": false,
1344
1547
  "type": "option"
1345
1548
  },
1346
- "to": {
1347
- "description": "End date (YYYY-MM-DD)",
1348
- "name": "to",
1549
+ "stream": {
1550
+ "description": "Stream the response",
1551
+ "name": "stream",
1552
+ "allowNo": false,
1553
+ "type": "boolean"
1554
+ },
1555
+ "max-tokens": {
1556
+ "description": "Max tokens",
1557
+ "name": "max-tokens",
1558
+ "default": 1024,
1349
1559
  "hasDynamicHelp": false,
1350
1560
  "multiple": false,
1351
1561
  "type": "option"
1562
+ },
1563
+ "oauth-only": {
1564
+ "description": "Prevent fallback to paid system key (use OAuth only)",
1565
+ "name": "oauth-only",
1566
+ "allowNo": false,
1567
+ "type": "boolean"
1352
1568
  }
1353
1569
  },
1354
1570
  "hasDynamicHelp": false,
1355
1571
  "hiddenAliases": [],
1356
- "id": "billing:usage",
1572
+ "id": "chat:messages",
1357
1573
  "pluginAlias": "faces-cli",
1358
1574
  "pluginName": "faces-cli",
1359
1575
  "pluginType": "core",
@@ -1363,14 +1579,20 @@
1363
1579
  "relativePath": [
1364
1580
  "dist",
1365
1581
  "commands",
1366
- "billing",
1367
- "usage.js"
1582
+ "chat",
1583
+ "messages.js"
1368
1584
  ]
1369
1585
  },
1370
- "compile:all": {
1586
+ "chat:responses": {
1371
1587
  "aliases": [],
1372
- "args": {},
1373
- "description": "Compile all uncompiled documents and threads across all faces",
1588
+ "args": {
1589
+ "face_model": {
1590
+ "description": "Face model (e.g. myface, myface@gpt-4o, or head:logician@gpt-5.4)",
1591
+ "name": "face_model",
1592
+ "required": true
1593
+ }
1594
+ },
1595
+ "description": "OpenAI Responses API proxy via a face (alias: chat:chat --responses)",
1374
1596
  "flags": {
1375
1597
  "json": {
1376
1598
  "description": "Format output as json.",
@@ -1403,18 +1625,38 @@
1403
1625
  "multiple": false,
1404
1626
  "type": "option"
1405
1627
  },
1406
- "timeout": {
1407
- "description": "Per-item compile timeout in seconds (default: 600)",
1408
- "name": "timeout",
1409
- "default": 600,
1628
+ "message": {
1629
+ "char": "m",
1630
+ "description": "User input message",
1631
+ "name": "message",
1632
+ "required": true,
1410
1633
  "hasDynamicHelp": false,
1411
1634
  "multiple": false,
1412
1635
  "type": "option"
1636
+ },
1637
+ "instructions": {
1638
+ "description": "System instructions",
1639
+ "name": "instructions",
1640
+ "hasDynamicHelp": false,
1641
+ "multiple": false,
1642
+ "type": "option"
1643
+ },
1644
+ "stream": {
1645
+ "description": "Stream the response",
1646
+ "name": "stream",
1647
+ "allowNo": false,
1648
+ "type": "boolean"
1649
+ },
1650
+ "oauth-only": {
1651
+ "description": "Prevent fallback to paid system key (use OAuth only)",
1652
+ "name": "oauth-only",
1653
+ "allowNo": false,
1654
+ "type": "boolean"
1413
1655
  }
1414
1656
  },
1415
1657
  "hasDynamicHelp": false,
1416
1658
  "hiddenAliases": [],
1417
- "id": "compile:all",
1659
+ "id": "chat:responses",
1418
1660
  "pluginAlias": "faces-cli",
1419
1661
  "pluginName": "faces-cli",
1420
1662
  "pluginType": "core",
@@ -1424,9 +1666,216 @@
1424
1666
  "relativePath": [
1425
1667
  "dist",
1426
1668
  "commands",
1427
- "compile",
1428
- "all.js"
1429
- ]
1669
+ "chat",
1670
+ "responses.js"
1671
+ ]
1672
+ },
1673
+ "chat:thread": {
1674
+ "aliases": [],
1675
+ "args": {
1676
+ "face_username": {
1677
+ "description": "Face alias (alias@model, or owner:alias@model for a published face) — required when starting a new thread",
1678
+ "name": "face_username",
1679
+ "required": false
1680
+ }
1681
+ },
1682
+ "description": "Multi-turn chat thread. Conversation history is stored under ~/.faces/threads/<id>.json — resume any thread later with --id.",
1683
+ "examples": [
1684
+ "<%= config.bin %> <%= command.id %> socrates -m \"What is justice?\"",
1685
+ "<%= config.bin %> <%= command.id %> --id t_abc123 -m \"Say more about that\"",
1686
+ "<%= config.bin %> <%= command.id %> --list",
1687
+ "<%= config.bin %> <%= command.id %> --id t_abc123 --show",
1688
+ "<%= config.bin %> <%= command.id %> --id t_abc123 --delete"
1689
+ ],
1690
+ "flags": {
1691
+ "json": {
1692
+ "description": "Format output as json.",
1693
+ "helpGroup": "GLOBAL",
1694
+ "name": "json",
1695
+ "allowNo": false,
1696
+ "type": "boolean"
1697
+ },
1698
+ "base-url": {
1699
+ "description": "API base URL",
1700
+ "env": "FACES_BASE_URL",
1701
+ "name": "base-url",
1702
+ "hasDynamicHelp": false,
1703
+ "multiple": false,
1704
+ "type": "option"
1705
+ },
1706
+ "token": {
1707
+ "description": "JWT bearer token",
1708
+ "env": "FACES_TOKEN",
1709
+ "name": "token",
1710
+ "hasDynamicHelp": false,
1711
+ "multiple": false,
1712
+ "type": "option"
1713
+ },
1714
+ "api-key": {
1715
+ "description": "API key",
1716
+ "env": "FACES_API_KEY",
1717
+ "name": "api-key",
1718
+ "hasDynamicHelp": false,
1719
+ "multiple": false,
1720
+ "type": "option"
1721
+ },
1722
+ "id": {
1723
+ "description": "Resume an existing thread by id",
1724
+ "name": "id",
1725
+ "hasDynamicHelp": false,
1726
+ "multiple": false,
1727
+ "type": "option"
1728
+ },
1729
+ "message": {
1730
+ "char": "m",
1731
+ "description": "User message",
1732
+ "name": "message",
1733
+ "hasDynamicHelp": false,
1734
+ "multiple": false,
1735
+ "type": "option"
1736
+ },
1737
+ "file": {
1738
+ "description": "Read message from file",
1739
+ "name": "file",
1740
+ "hasDynamicHelp": false,
1741
+ "multiple": false,
1742
+ "type": "option"
1743
+ },
1744
+ "llm": {
1745
+ "description": "LLM override (only honored when starting a new thread)",
1746
+ "name": "llm",
1747
+ "hasDynamicHelp": false,
1748
+ "multiple": false,
1749
+ "type": "option"
1750
+ },
1751
+ "system": {
1752
+ "description": "System prompt (only honored when starting a new thread)",
1753
+ "name": "system",
1754
+ "hasDynamicHelp": false,
1755
+ "multiple": false,
1756
+ "type": "option"
1757
+ },
1758
+ "max-tokens": {
1759
+ "description": "Max tokens",
1760
+ "name": "max-tokens",
1761
+ "hasDynamicHelp": false,
1762
+ "multiple": false,
1763
+ "type": "option"
1764
+ },
1765
+ "temperature": {
1766
+ "description": "Temperature (0.0-2.0, OpenAI/Chat Completions only)",
1767
+ "name": "temperature",
1768
+ "hasDynamicHelp": false,
1769
+ "multiple": false,
1770
+ "type": "option"
1771
+ },
1772
+ "stream": {
1773
+ "description": "Stream the response",
1774
+ "name": "stream",
1775
+ "allowNo": false,
1776
+ "type": "boolean"
1777
+ },
1778
+ "oauth-only": {
1779
+ "description": "Prevent fallback to paid system key",
1780
+ "name": "oauth-only",
1781
+ "allowNo": false,
1782
+ "type": "boolean"
1783
+ },
1784
+ "list": {
1785
+ "description": "List saved threads",
1786
+ "name": "list",
1787
+ "allowNo": false,
1788
+ "type": "boolean"
1789
+ },
1790
+ "show": {
1791
+ "description": "Show the thread transcript (requires --id)",
1792
+ "name": "show",
1793
+ "allowNo": false,
1794
+ "type": "boolean"
1795
+ },
1796
+ "delete": {
1797
+ "description": "Delete the thread (requires --id)",
1798
+ "name": "delete",
1799
+ "allowNo": false,
1800
+ "type": "boolean"
1801
+ }
1802
+ },
1803
+ "hasDynamicHelp": false,
1804
+ "hiddenAliases": [],
1805
+ "id": "chat:thread",
1806
+ "pluginAlias": "faces-cli",
1807
+ "pluginName": "faces-cli",
1808
+ "pluginType": "core",
1809
+ "strict": true,
1810
+ "enableJsonFlag": true,
1811
+ "isESM": true,
1812
+ "relativePath": [
1813
+ "dist",
1814
+ "commands",
1815
+ "chat",
1816
+ "thread.js"
1817
+ ]
1818
+ },
1819
+ "compile:all": {
1820
+ "aliases": [],
1821
+ "args": {},
1822
+ "description": "Compile all uncompiled documents and threads across all faces",
1823
+ "flags": {
1824
+ "json": {
1825
+ "description": "Format output as json.",
1826
+ "helpGroup": "GLOBAL",
1827
+ "name": "json",
1828
+ "allowNo": false,
1829
+ "type": "boolean"
1830
+ },
1831
+ "base-url": {
1832
+ "description": "API base URL",
1833
+ "env": "FACES_BASE_URL",
1834
+ "name": "base-url",
1835
+ "hasDynamicHelp": false,
1836
+ "multiple": false,
1837
+ "type": "option"
1838
+ },
1839
+ "token": {
1840
+ "description": "JWT bearer token",
1841
+ "env": "FACES_TOKEN",
1842
+ "name": "token",
1843
+ "hasDynamicHelp": false,
1844
+ "multiple": false,
1845
+ "type": "option"
1846
+ },
1847
+ "api-key": {
1848
+ "description": "API key",
1849
+ "env": "FACES_API_KEY",
1850
+ "name": "api-key",
1851
+ "hasDynamicHelp": false,
1852
+ "multiple": false,
1853
+ "type": "option"
1854
+ },
1855
+ "timeout": {
1856
+ "description": "Per-item compile timeout in seconds (default: 600)",
1857
+ "name": "timeout",
1858
+ "default": 600,
1859
+ "hasDynamicHelp": false,
1860
+ "multiple": false,
1861
+ "type": "option"
1862
+ }
1863
+ },
1864
+ "hasDynamicHelp": false,
1865
+ "hiddenAliases": [],
1866
+ "id": "compile:all",
1867
+ "pluginAlias": "faces-cli",
1868
+ "pluginName": "faces-cli",
1869
+ "pluginType": "core",
1870
+ "strict": true,
1871
+ "enableJsonFlag": true,
1872
+ "isESM": true,
1873
+ "relativePath": [
1874
+ "dist",
1875
+ "commands",
1876
+ "compile",
1877
+ "all.js"
1878
+ ]
1430
1879
  },
1431
1880
  "compile:import": {
1432
1881
  "aliases": [],
@@ -1689,16 +2138,10 @@
1689
2138
  "upload.js"
1690
2139
  ]
1691
2140
  },
1692
- "chat:chat": {
2141
+ "config:clear": {
1693
2142
  "aliases": [],
1694
- "args": {
1695
- "face_username": {
1696
- "description": "Face alias (or alias@model)",
1697
- "name": "face_username",
1698
- "required": true
1699
- }
1700
- },
1701
- "description": "Chat via a face. Auto-routes to the correct API endpoint based on the model catalog.",
2143
+ "args": {},
2144
+ "description": "Delete all saved credentials and config",
1702
2145
  "flags": {
1703
2146
  "json": {
1704
2147
  "description": "Format output as json.",
@@ -1731,400 +2174,16 @@
1731
2174
  "multiple": false,
1732
2175
  "type": "option"
1733
2176
  },
1734
- "message": {
1735
- "char": "m",
1736
- "description": "User message (repeatable)",
1737
- "name": "message",
1738
- "required": false,
1739
- "hasDynamicHelp": false,
1740
- "multiple": true,
1741
- "type": "option"
1742
- },
1743
- "llm": {
1744
- "description": "LLM override (e.g. gpt-4o-mini, claude-sonnet-4-6)",
1745
- "name": "llm",
1746
- "hasDynamicHelp": false,
1747
- "multiple": false,
1748
- "type": "option"
1749
- },
1750
- "system": {
1751
- "description": "System prompt / instructions",
1752
- "name": "system",
1753
- "hasDynamicHelp": false,
1754
- "multiple": false,
1755
- "type": "option"
1756
- },
1757
- "stream": {
1758
- "description": "Stream the response",
1759
- "name": "stream",
1760
- "allowNo": false,
1761
- "type": "boolean"
1762
- },
1763
- "max-tokens": {
1764
- "description": "Max tokens",
1765
- "name": "max-tokens",
1766
- "hasDynamicHelp": false,
1767
- "multiple": false,
1768
- "type": "option"
1769
- },
1770
- "temperature": {
1771
- "description": "Temperature (0.0-2.0)",
1772
- "name": "temperature",
1773
- "hasDynamicHelp": false,
1774
- "multiple": false,
1775
- "type": "option"
1776
- },
1777
- "file": {
1778
- "description": "Read message from file",
1779
- "name": "file",
1780
- "hasDynamicHelp": false,
1781
- "multiple": false,
1782
- "type": "option"
1783
- },
1784
- "responses": {
1785
- "description": "Force the OpenAI Responses API endpoint (escape hatch; routing is automatic otherwise)",
1786
- "name": "responses",
1787
- "allowNo": false,
1788
- "type": "boolean"
1789
- },
1790
- "oauth-only": {
1791
- "description": "Prevent fallback to paid system key (use OAuth only)",
1792
- "name": "oauth-only",
1793
- "allowNo": false,
1794
- "type": "boolean"
1795
- }
1796
- },
1797
- "hasDynamicHelp": false,
1798
- "hiddenAliases": [],
1799
- "id": "chat:chat",
1800
- "pluginAlias": "faces-cli",
1801
- "pluginName": "faces-cli",
1802
- "pluginType": "core",
1803
- "strict": true,
1804
- "enableJsonFlag": true,
1805
- "isESM": true,
1806
- "relativePath": [
1807
- "dist",
1808
- "commands",
1809
- "chat",
1810
- "chat.js"
1811
- ]
1812
- },
1813
- "chat:messages": {
1814
- "aliases": [],
1815
- "args": {
1816
- "face_model": {
1817
- "description": "Face model (e.g. myface or myface@claude-sonnet-4-6)",
1818
- "name": "face_model",
1819
- "required": true
1820
- }
1821
- },
1822
- "description": "Anthropic Messages API proxy via a face (alias: chat:chat auto-routes Anthropic models here)",
1823
- "flags": {
1824
- "json": {
1825
- "description": "Format output as json.",
1826
- "helpGroup": "GLOBAL",
1827
- "name": "json",
1828
- "allowNo": false,
1829
- "type": "boolean"
1830
- },
1831
- "base-url": {
1832
- "description": "API base URL",
1833
- "env": "FACES_BASE_URL",
1834
- "name": "base-url",
1835
- "hasDynamicHelp": false,
1836
- "multiple": false,
1837
- "type": "option"
1838
- },
1839
- "token": {
1840
- "description": "JWT bearer token",
1841
- "env": "FACES_TOKEN",
1842
- "name": "token",
1843
- "hasDynamicHelp": false,
1844
- "multiple": false,
1845
- "type": "option"
1846
- },
1847
- "api-key": {
1848
- "description": "API key",
1849
- "env": "FACES_API_KEY",
1850
- "name": "api-key",
1851
- "hasDynamicHelp": false,
1852
- "multiple": false,
1853
- "type": "option"
1854
- },
1855
- "message": {
1856
- "char": "m",
1857
- "description": "User message (repeatable)",
1858
- "name": "message",
1859
- "required": true,
1860
- "hasDynamicHelp": false,
1861
- "multiple": true,
1862
- "type": "option"
1863
- },
1864
- "system": {
1865
- "description": "System prompt",
1866
- "name": "system",
1867
- "hasDynamicHelp": false,
1868
- "multiple": false,
1869
- "type": "option"
1870
- },
1871
- "stream": {
1872
- "description": "Stream the response",
1873
- "name": "stream",
1874
- "allowNo": false,
1875
- "type": "boolean"
1876
- },
1877
- "max-tokens": {
1878
- "description": "Max tokens",
1879
- "name": "max-tokens",
1880
- "default": 1024,
1881
- "hasDynamicHelp": false,
1882
- "multiple": false,
1883
- "type": "option"
1884
- },
1885
- "oauth-only": {
1886
- "description": "Prevent fallback to paid system key (use OAuth only)",
1887
- "name": "oauth-only",
1888
- "allowNo": false,
1889
- "type": "boolean"
1890
- }
1891
- },
1892
- "hasDynamicHelp": false,
1893
- "hiddenAliases": [],
1894
- "id": "chat:messages",
1895
- "pluginAlias": "faces-cli",
1896
- "pluginName": "faces-cli",
1897
- "pluginType": "core",
1898
- "strict": true,
1899
- "enableJsonFlag": true,
1900
- "isESM": true,
1901
- "relativePath": [
1902
- "dist",
1903
- "commands",
1904
- "chat",
1905
- "messages.js"
1906
- ]
1907
- },
1908
- "chat:responses": {
1909
- "aliases": [],
1910
- "args": {
1911
- "face_model": {
1912
- "description": "Face model (e.g. myface or myface@gpt-4o)",
1913
- "name": "face_model",
1914
- "required": true
1915
- }
1916
- },
1917
- "description": "OpenAI Responses API proxy via a face (alias: chat:chat --responses)",
1918
- "flags": {
1919
- "json": {
1920
- "description": "Format output as json.",
1921
- "helpGroup": "GLOBAL",
1922
- "name": "json",
1923
- "allowNo": false,
1924
- "type": "boolean"
1925
- },
1926
- "base-url": {
1927
- "description": "API base URL",
1928
- "env": "FACES_BASE_URL",
1929
- "name": "base-url",
1930
- "hasDynamicHelp": false,
1931
- "multiple": false,
1932
- "type": "option"
1933
- },
1934
- "token": {
1935
- "description": "JWT bearer token",
1936
- "env": "FACES_TOKEN",
1937
- "name": "token",
1938
- "hasDynamicHelp": false,
1939
- "multiple": false,
1940
- "type": "option"
1941
- },
1942
- "api-key": {
1943
- "description": "API key",
1944
- "env": "FACES_API_KEY",
1945
- "name": "api-key",
1946
- "hasDynamicHelp": false,
1947
- "multiple": false,
1948
- "type": "option"
1949
- },
1950
- "message": {
1951
- "char": "m",
1952
- "description": "User input message",
1953
- "name": "message",
1954
- "required": true,
1955
- "hasDynamicHelp": false,
1956
- "multiple": false,
1957
- "type": "option"
1958
- },
1959
- "instructions": {
1960
- "description": "System instructions",
1961
- "name": "instructions",
1962
- "hasDynamicHelp": false,
1963
- "multiple": false,
1964
- "type": "option"
1965
- },
1966
- "stream": {
1967
- "description": "Stream the response",
1968
- "name": "stream",
1969
- "allowNo": false,
1970
- "type": "boolean"
1971
- },
1972
- "oauth-only": {
1973
- "description": "Prevent fallback to paid system key (use OAuth only)",
1974
- "name": "oauth-only",
1975
- "allowNo": false,
1976
- "type": "boolean"
1977
- }
1978
- },
1979
- "hasDynamicHelp": false,
1980
- "hiddenAliases": [],
1981
- "id": "chat:responses",
1982
- "pluginAlias": "faces-cli",
1983
- "pluginName": "faces-cli",
1984
- "pluginType": "core",
1985
- "strict": true,
1986
- "enableJsonFlag": true,
1987
- "isESM": true,
1988
- "relativePath": [
1989
- "dist",
1990
- "commands",
1991
- "chat",
1992
- "responses.js"
1993
- ]
1994
- },
1995
- "chat:thread": {
1996
- "aliases": [],
1997
- "args": {
1998
- "face_username": {
1999
- "description": "Face alias (or alias@model) — required when starting a new thread",
2000
- "name": "face_username",
2001
- "required": false
2002
- }
2003
- },
2004
- "description": "Multi-turn chat thread. Conversation history is stored under ~/.faces/threads/<id>.json — resume any thread later with --id.",
2005
- "examples": [
2006
- "<%= config.bin %> <%= command.id %> socrates -m \"What is justice?\"",
2007
- "<%= config.bin %> <%= command.id %> --id t_abc123 -m \"Say more about that\"",
2008
- "<%= config.bin %> <%= command.id %> --list",
2009
- "<%= config.bin %> <%= command.id %> --id t_abc123 --show",
2010
- "<%= config.bin %> <%= command.id %> --id t_abc123 --delete"
2011
- ],
2012
- "flags": {
2013
- "json": {
2014
- "description": "Format output as json.",
2015
- "helpGroup": "GLOBAL",
2016
- "name": "json",
2017
- "allowNo": false,
2018
- "type": "boolean"
2019
- },
2020
- "base-url": {
2021
- "description": "API base URL",
2022
- "env": "FACES_BASE_URL",
2023
- "name": "base-url",
2024
- "hasDynamicHelp": false,
2025
- "multiple": false,
2026
- "type": "option"
2027
- },
2028
- "token": {
2029
- "description": "JWT bearer token",
2030
- "env": "FACES_TOKEN",
2031
- "name": "token",
2032
- "hasDynamicHelp": false,
2033
- "multiple": false,
2034
- "type": "option"
2035
- },
2036
- "api-key": {
2037
- "description": "API key",
2038
- "env": "FACES_API_KEY",
2039
- "name": "api-key",
2040
- "hasDynamicHelp": false,
2041
- "multiple": false,
2042
- "type": "option"
2043
- },
2044
- "id": {
2045
- "description": "Resume an existing thread by id",
2046
- "name": "id",
2047
- "hasDynamicHelp": false,
2048
- "multiple": false,
2049
- "type": "option"
2050
- },
2051
- "message": {
2052
- "char": "m",
2053
- "description": "User message",
2054
- "name": "message",
2055
- "hasDynamicHelp": false,
2056
- "multiple": false,
2057
- "type": "option"
2058
- },
2059
- "file": {
2060
- "description": "Read message from file",
2061
- "name": "file",
2062
- "hasDynamicHelp": false,
2063
- "multiple": false,
2064
- "type": "option"
2065
- },
2066
- "llm": {
2067
- "description": "LLM override (only honored when starting a new thread)",
2068
- "name": "llm",
2069
- "hasDynamicHelp": false,
2070
- "multiple": false,
2071
- "type": "option"
2072
- },
2073
- "system": {
2074
- "description": "System prompt (only honored when starting a new thread)",
2075
- "name": "system",
2076
- "hasDynamicHelp": false,
2077
- "multiple": false,
2078
- "type": "option"
2079
- },
2080
- "max-tokens": {
2081
- "description": "Max tokens",
2082
- "name": "max-tokens",
2083
- "hasDynamicHelp": false,
2084
- "multiple": false,
2085
- "type": "option"
2086
- },
2087
- "temperature": {
2088
- "description": "Temperature (0.0-2.0, OpenAI/Chat Completions only)",
2089
- "name": "temperature",
2090
- "hasDynamicHelp": false,
2091
- "multiple": false,
2092
- "type": "option"
2093
- },
2094
- "stream": {
2095
- "description": "Stream the response",
2096
- "name": "stream",
2097
- "allowNo": false,
2098
- "type": "boolean"
2099
- },
2100
- "oauth-only": {
2101
- "description": "Prevent fallback to paid system key",
2102
- "name": "oauth-only",
2103
- "allowNo": false,
2104
- "type": "boolean"
2105
- },
2106
- "list": {
2107
- "description": "List saved threads",
2108
- "name": "list",
2109
- "allowNo": false,
2110
- "type": "boolean"
2111
- },
2112
- "show": {
2113
- "description": "Show the thread transcript (requires --id)",
2114
- "name": "show",
2115
- "allowNo": false,
2116
- "type": "boolean"
2117
- },
2118
- "delete": {
2119
- "description": "Delete the thread (requires --id)",
2120
- "name": "delete",
2177
+ "yes": {
2178
+ "description": "Skip confirmation",
2179
+ "name": "yes",
2121
2180
  "allowNo": false,
2122
2181
  "type": "boolean"
2123
2182
  }
2124
2183
  },
2125
2184
  "hasDynamicHelp": false,
2126
2185
  "hiddenAliases": [],
2127
- "id": "chat:thread",
2186
+ "id": "config:clear",
2128
2187
  "pluginAlias": "faces-cli",
2129
2188
  "pluginName": "faces-cli",
2130
2189
  "pluginType": "core",
@@ -2134,14 +2193,25 @@
2134
2193
  "relativePath": [
2135
2194
  "dist",
2136
2195
  "commands",
2137
- "chat",
2138
- "thread.js"
2196
+ "config",
2197
+ "clear.js"
2139
2198
  ]
2140
2199
  },
2141
- "config:clear": {
2200
+ "config:set": {
2142
2201
  "aliases": [],
2143
- "args": {},
2144
- "description": "Delete all saved credentials and config",
2202
+ "args": {
2203
+ "key": {
2204
+ "description": "Config key",
2205
+ "name": "key",
2206
+ "required": true
2207
+ },
2208
+ "value": {
2209
+ "description": "Config value",
2210
+ "name": "value",
2211
+ "required": true
2212
+ }
2213
+ },
2214
+ "description": "Set a config value (e.g. base_url, api_key, token)",
2145
2215
  "flags": {
2146
2216
  "json": {
2147
2217
  "description": "Format output as json.",
@@ -2173,17 +2243,11 @@
2173
2243
  "hasDynamicHelp": false,
2174
2244
  "multiple": false,
2175
2245
  "type": "option"
2176
- },
2177
- "yes": {
2178
- "description": "Skip confirmation",
2179
- "name": "yes",
2180
- "allowNo": false,
2181
- "type": "boolean"
2182
2246
  }
2183
2247
  },
2184
2248
  "hasDynamicHelp": false,
2185
2249
  "hiddenAliases": [],
2186
- "id": "config:clear",
2250
+ "id": "config:set",
2187
2251
  "pluginAlias": "faces-cli",
2188
2252
  "pluginName": "faces-cli",
2189
2253
  "pluginType": "core",
@@ -2194,24 +2258,13 @@
2194
2258
  "dist",
2195
2259
  "commands",
2196
2260
  "config",
2197
- "clear.js"
2261
+ "set.js"
2198
2262
  ]
2199
2263
  },
2200
- "config:set": {
2264
+ "config:show": {
2201
2265
  "aliases": [],
2202
- "args": {
2203
- "key": {
2204
- "description": "Config key",
2205
- "name": "key",
2206
- "required": true
2207
- },
2208
- "value": {
2209
- "description": "Config value",
2210
- "name": "value",
2211
- "required": true
2212
- }
2213
- },
2214
- "description": "Set a config value (e.g. base_url, api_key, token)",
2266
+ "args": {},
2267
+ "description": "Print current config (credentials are masked)",
2215
2268
  "flags": {
2216
2269
  "json": {
2217
2270
  "description": "Format output as json.",
@@ -2247,7 +2300,7 @@
2247
2300
  },
2248
2301
  "hasDynamicHelp": false,
2249
2302
  "hiddenAliases": [],
2250
- "id": "config:set",
2303
+ "id": "config:show",
2251
2304
  "pluginAlias": "faces-cli",
2252
2305
  "pluginName": "faces-cli",
2253
2306
  "pluginType": "core",
@@ -2258,13 +2311,13 @@
2258
2311
  "dist",
2259
2312
  "commands",
2260
2313
  "config",
2261
- "set.js"
2314
+ "show.js"
2262
2315
  ]
2263
2316
  },
2264
- "config:show": {
2317
+ "face:attributes": {
2265
2318
  "aliases": [],
2266
2319
  "args": {},
2267
- "description": "Print current config (credentials are masked)",
2320
+ "description": "List all supported attribute keys",
2268
2321
  "flags": {
2269
2322
  "json": {
2270
2323
  "description": "Format output as json.",
@@ -2300,7 +2353,7 @@
2300
2353
  },
2301
2354
  "hasDynamicHelp": false,
2302
2355
  "hiddenAliases": [],
2303
- "id": "config:show",
2356
+ "id": "face:attributes",
2304
2357
  "pluginAlias": "faces-cli",
2305
2358
  "pluginName": "faces-cli",
2306
2359
  "pluginType": "core",
@@ -2310,14 +2363,14 @@
2310
2363
  "relativePath": [
2311
2364
  "dist",
2312
2365
  "commands",
2313
- "config",
2314
- "show.js"
2366
+ "face",
2367
+ "attributes.js"
2315
2368
  ]
2316
2369
  },
2317
- "keys:create": {
2370
+ "face:create": {
2318
2371
  "aliases": [],
2319
2372
  "args": {},
2320
- "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.",
2373
+ "description": "Create a new face",
2321
2374
  "flags": {
2322
2375
  "json": {
2323
2376
  "description": "Format output as json.",
@@ -2351,104 +2404,67 @@
2351
2404
  "type": "option"
2352
2405
  },
2353
2406
  "name": {
2354
- "description": "Key name/label",
2407
+ "description": "Display name",
2355
2408
  "name": "name",
2356
2409
  "required": true,
2357
2410
  "hasDynamicHelp": false,
2358
2411
  "multiple": false,
2359
2412
  "type": "option"
2360
2413
  },
2361
- "expires-days": {
2362
- "description": "Expiry in days (omit for no expiry)",
2363
- "name": "expires-days",
2414
+ "alias": {
2415
+ "description": "Unique alias slug",
2416
+ "name": "alias",
2417
+ "required": true,
2364
2418
  "hasDynamicHelp": false,
2365
2419
  "multiple": false,
2366
2420
  "type": "option"
2367
2421
  },
2368
- "budget": {
2369
- "description": "Spend budget in USD",
2370
- "name": "budget",
2422
+ "description": {
2423
+ "description": "Plain-text description / bio (max 1500 chars)",
2424
+ "name": "description",
2371
2425
  "hasDynamicHelp": false,
2372
2426
  "multiple": false,
2373
2427
  "type": "option"
2374
2428
  },
2375
- "face": {
2376
- "description": "Allowed face alias (repeatable)",
2377
- "name": "face",
2429
+ "tag": {
2430
+ "description": "Tag label (repeatable, lowercase)",
2431
+ "name": "tag",
2378
2432
  "hasDynamicHelp": false,
2379
2433
  "multiple": true,
2380
2434
  "type": "option"
2381
2435
  },
2382
- "model": {
2383
- "description": "Allowed model name (repeatable)",
2384
- "name": "model",
2436
+ "default-model": {
2437
+ "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
2438
+ "name": "default-model",
2385
2439
  "hasDynamicHelp": false,
2386
- "multiple": true,
2440
+ "multiple": false,
2387
2441
  "type": "option"
2388
2442
  },
2389
- "save": {
2390
- "description": "Save the new key to ~/.faces/config.json as api_key (default: true; use --no-save to skip)",
2391
- "name": "save",
2392
- "allowNo": true,
2393
- "type": "boolean"
2394
- }
2395
- },
2396
- "hasDynamicHelp": false,
2397
- "hiddenAliases": [],
2398
- "id": "keys:create",
2399
- "pluginAlias": "faces-cli",
2400
- "pluginName": "faces-cli",
2401
- "pluginType": "core",
2402
- "strict": true,
2403
- "enableJsonFlag": true,
2404
- "isESM": true,
2405
- "relativePath": [
2406
- "dist",
2407
- "commands",
2408
- "keys",
2409
- "create.js"
2410
- ]
2411
- },
2412
- "keys:list": {
2413
- "aliases": [],
2414
- "args": {},
2415
- "description": "List all API keys (JWT required)",
2416
- "flags": {
2417
- "json": {
2418
- "description": "Format output as json.",
2419
- "helpGroup": "GLOBAL",
2420
- "name": "json",
2421
- "allowNo": false,
2422
- "type": "boolean"
2423
- },
2424
- "base-url": {
2425
- "description": "API base URL",
2426
- "env": "FACES_BASE_URL",
2427
- "name": "base-url",
2443
+ "formula": {
2444
+ "description": "Boolean formula over owned concrete face aliases (e.g. \"a | b\", \"(a | b) - c\"). Creates a composite face.",
2445
+ "name": "formula",
2428
2446
  "hasDynamicHelp": false,
2429
2447
  "multiple": false,
2430
2448
  "type": "option"
2431
2449
  },
2432
- "token": {
2433
- "description": "JWT bearer token",
2434
- "env": "FACES_TOKEN",
2435
- "name": "token",
2450
+ "attr": {
2451
+ "description": "Attribute KEY=VALUE (repeatable)",
2452
+ "name": "attr",
2436
2453
  "hasDynamicHelp": false,
2437
- "multiple": false,
2454
+ "multiple": true,
2438
2455
  "type": "option"
2439
2456
  },
2440
- "api-key": {
2441
- "description": "API key",
2442
- "env": "FACES_API_KEY",
2443
- "name": "api-key",
2457
+ "tool": {
2458
+ "description": "Tool name to enable (repeatable)",
2459
+ "name": "tool",
2444
2460
  "hasDynamicHelp": false,
2445
- "multiple": false,
2461
+ "multiple": true,
2446
2462
  "type": "option"
2447
2463
  }
2448
2464
  },
2449
2465
  "hasDynamicHelp": false,
2450
2466
  "hiddenAliases": [],
2451
- "id": "keys:list",
2467
+ "id": "face:create",
2452
2468
  "pluginAlias": "faces-cli",
2453
2469
  "pluginName": "faces-cli",
2454
2470
  "pluginType": "core",
@@ -2458,20 +2474,20 @@
2458
2474
  "relativePath": [
2459
2475
  "dist",
2460
2476
  "commands",
2461
- "keys",
2462
- "list.js"
2477
+ "face",
2478
+ "create.js"
2463
2479
  ]
2464
2480
  },
2465
- "keys:revoke": {
2481
+ "face:delete": {
2466
2482
  "aliases": [],
2467
2483
  "args": {
2468
- "key_id": {
2469
- "description": "Key ID",
2470
- "name": "key_id",
2484
+ "face_id": {
2485
+ "description": "Face alias",
2486
+ "name": "face_id",
2471
2487
  "required": true
2472
2488
  }
2473
2489
  },
2474
- "description": "Revoke an API key (JWT required)",
2490
+ "description": "Delete a face permanently",
2475
2491
  "flags": {
2476
2492
  "json": {
2477
2493
  "description": "Format output as json.",
@@ -2513,7 +2529,7 @@
2513
2529
  },
2514
2530
  "hasDynamicHelp": false,
2515
2531
  "hiddenAliases": [],
2516
- "id": "keys:revoke",
2532
+ "id": "face:delete",
2517
2533
  "pluginAlias": "faces-cli",
2518
2534
  "pluginName": "faces-cli",
2519
2535
  "pluginType": "core",
@@ -2523,20 +2539,14 @@
2523
2539
  "relativePath": [
2524
2540
  "dist",
2525
2541
  "commands",
2526
- "keys",
2527
- "revoke.js"
2542
+ "face",
2543
+ "delete.js"
2528
2544
  ]
2529
2545
  },
2530
- "keys:update": {
2546
+ "face:diff": {
2531
2547
  "aliases": [],
2532
- "args": {
2533
- "key_id": {
2534
- "description": "Key ID",
2535
- "name": "key_id",
2536
- "required": true
2537
- }
2538
- },
2539
- "description": "Update API key metadata (JWT required)",
2548
+ "args": {},
2549
+ "description": "Compare owned faces pairwise across all centroid components",
2540
2550
  "flags": {
2541
2551
  "json": {
2542
2552
  "description": "Format output as json.",
@@ -2569,30 +2579,18 @@
2569
2579
  "multiple": false,
2570
2580
  "type": "option"
2571
2581
  },
2572
- "name": {
2573
- "description": "New key name",
2574
- "name": "name",
2575
- "hasDynamicHelp": false,
2576
- "multiple": false,
2577
- "type": "option"
2578
- },
2579
- "budget": {
2580
- "description": "New spend budget in USD",
2581
- "name": "budget",
2582
+ "face": {
2583
+ "description": "Face alias to include (repeatable, min 2)",
2584
+ "name": "face",
2585
+ "required": true,
2582
2586
  "hasDynamicHelp": false,
2583
- "multiple": false,
2587
+ "multiple": true,
2584
2588
  "type": "option"
2585
- },
2586
- "reset-spent": {
2587
- "description": "Reset spent amount to zero",
2588
- "name": "reset-spent",
2589
- "allowNo": false,
2590
- "type": "boolean"
2591
2589
  }
2592
2590
  },
2593
2591
  "hasDynamicHelp": false,
2594
2592
  "hiddenAliases": [],
2595
- "id": "keys:update",
2593
+ "id": "face:diff",
2596
2594
  "pluginAlias": "faces-cli",
2597
2595
  "pluginName": "faces-cli",
2598
2596
  "pluginType": "core",
@@ -2602,20 +2600,20 @@
2602
2600
  "relativePath": [
2603
2601
  "dist",
2604
2602
  "commands",
2605
- "keys",
2606
- "update.js"
2603
+ "face",
2604
+ "diff.js"
2607
2605
  ]
2608
2606
  },
2609
- "team:add": {
2607
+ "face:edit": {
2610
2608
  "aliases": [],
2611
2609
  "args": {
2612
- "team_id": {
2613
- "description": "Team ID",
2614
- "name": "team_id",
2610
+ "face_id": {
2611
+ "description": "Face alias",
2612
+ "name": "face_id",
2615
2613
  "required": true
2616
2614
  }
2617
2615
  },
2618
- "description": "Add face(s) to a team",
2616
+ "description": "Edit a face's metadata",
2619
2617
  "flags": {
2620
2618
  "json": {
2621
2619
  "description": "Format output as json.",
@@ -2648,10 +2646,51 @@
2648
2646
  "multiple": false,
2649
2647
  "type": "option"
2650
2648
  },
2651
- "face": {
2652
- "description": "Face alias to add (repeatable)",
2653
- "name": "face",
2654
- "required": true,
2649
+ "name": {
2650
+ "description": "New display name",
2651
+ "name": "name",
2652
+ "hasDynamicHelp": false,
2653
+ "multiple": false,
2654
+ "type": "option"
2655
+ },
2656
+ "description": {
2657
+ "description": "Plain-text description / bio (max 1500 chars)",
2658
+ "name": "description",
2659
+ "hasDynamicHelp": false,
2660
+ "multiple": false,
2661
+ "type": "option"
2662
+ },
2663
+ "tag": {
2664
+ "description": "Replace all tags (repeatable, lowercase)",
2665
+ "name": "tag",
2666
+ "hasDynamicHelp": false,
2667
+ "multiple": true,
2668
+ "type": "option"
2669
+ },
2670
+ "default-model": {
2671
+ "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
2672
+ "name": "default-model",
2673
+ "hasDynamicHelp": false,
2674
+ "multiple": false,
2675
+ "type": "option"
2676
+ },
2677
+ "formula": {
2678
+ "description": "New boolean formula (synthetic faces only)",
2679
+ "name": "formula",
2680
+ "hasDynamicHelp": false,
2681
+ "multiple": false,
2682
+ "type": "option"
2683
+ },
2684
+ "attr": {
2685
+ "description": "Update attribute KEY=VALUE (repeatable)",
2686
+ "name": "attr",
2687
+ "hasDynamicHelp": false,
2688
+ "multiple": true,
2689
+ "type": "option"
2690
+ },
2691
+ "tool": {
2692
+ "description": "Tool names to set (replaces list, repeatable)",
2693
+ "name": "tool",
2655
2694
  "hasDynamicHelp": false,
2656
2695
  "multiple": true,
2657
2696
  "type": "option"
@@ -2659,7 +2698,7 @@
2659
2698
  },
2660
2699
  "hasDynamicHelp": false,
2661
2700
  "hiddenAliases": [],
2662
- "id": "team:add",
2701
+ "id": "face:edit",
2663
2702
  "pluginAlias": "faces-cli",
2664
2703
  "pluginName": "faces-cli",
2665
2704
  "pluginType": "core",
@@ -2669,14 +2708,20 @@
2669
2708
  "relativePath": [
2670
2709
  "dist",
2671
2710
  "commands",
2672
- "team",
2673
- "add.js"
2711
+ "face",
2712
+ "edit.js"
2674
2713
  ]
2675
2714
  },
2676
- "team:create": {
2715
+ "face:get": {
2677
2716
  "aliases": [],
2678
- "args": {},
2679
- "description": "Create a new team",
2717
+ "args": {
2718
+ "face_id": {
2719
+ "description": "Face alias",
2720
+ "name": "face_id",
2721
+ "required": true
2722
+ }
2723
+ },
2724
+ "description": "Get details for a face by alias",
2680
2725
  "flags": {
2681
2726
  "json": {
2682
2727
  "description": "Format output as json.",
@@ -2709,46 +2754,17 @@
2709
2754
  "multiple": false,
2710
2755
  "type": "option"
2711
2756
  },
2712
- "name": {
2713
- "description": "Team name",
2714
- "name": "name",
2715
- "required": true,
2716
- "hasDynamicHelp": false,
2717
- "multiple": false,
2718
- "type": "option"
2719
- },
2720
- "description": {
2721
- "description": "Plain-text team description (max 1500 chars)",
2722
- "name": "description",
2723
- "hasDynamicHelp": false,
2724
- "multiple": false,
2725
- "type": "option"
2726
- },
2727
- "protocol": {
2728
- "description": "Protocol content (mermaid diagram or markdown, max 1000 words)",
2729
- "name": "protocol",
2730
- "hasDynamicHelp": false,
2731
- "multiple": false,
2732
- "type": "option"
2733
- },
2734
- "protocol-file": {
2735
- "description": "Read protocol from file",
2736
- "name": "protocol-file",
2757
+ "include": {
2758
+ "description": "Include extra fields: tags, teams (comma-separated)",
2759
+ "name": "include",
2737
2760
  "hasDynamicHelp": false,
2738
2761
  "multiple": false,
2739
2762
  "type": "option"
2740
- },
2741
- "tag": {
2742
- "description": "Tag label (repeatable, lowercase)",
2743
- "name": "tag",
2744
- "hasDynamicHelp": false,
2745
- "multiple": true,
2746
- "type": "option"
2747
2763
  }
2748
2764
  },
2749
2765
  "hasDynamicHelp": false,
2750
2766
  "hiddenAliases": [],
2751
- "id": "team:create",
2767
+ "id": "face:get",
2752
2768
  "pluginAlias": "faces-cli",
2753
2769
  "pluginName": "faces-cli",
2754
2770
  "pluginType": "core",
@@ -2758,20 +2774,14 @@
2758
2774
  "relativePath": [
2759
2775
  "dist",
2760
2776
  "commands",
2761
- "team",
2762
- "create.js"
2777
+ "face",
2778
+ "get.js"
2763
2779
  ]
2764
2780
  },
2765
- "team:delete": {
2781
+ "face:list": {
2766
2782
  "aliases": [],
2767
- "args": {
2768
- "team_id": {
2769
- "description": "Team ID",
2770
- "name": "team_id",
2771
- "required": true
2772
- }
2773
- },
2774
- "description": "Delete a team",
2783
+ "args": {},
2784
+ "description": "List faces. By default lists owned faces; use --public to include published faces from other accounts.",
2775
2785
  "flags": {
2776
2786
  "json": {
2777
2787
  "description": "Format output as json.",
@@ -2804,16 +2814,57 @@
2804
2814
  "multiple": false,
2805
2815
  "type": "option"
2806
2816
  },
2807
- "yes": {
2808
- "description": "Skip confirmation",
2809
- "name": "yes",
2817
+ "tag": {
2818
+ "description": "Filter by tag (repeatable, AND logic)",
2819
+ "name": "tag",
2820
+ "hasDynamicHelp": false,
2821
+ "multiple": true,
2822
+ "type": "option"
2823
+ },
2824
+ "team": {
2825
+ "description": "Filter by team ID (repeatable, OR logic)",
2826
+ "name": "team",
2827
+ "hasDynamicHelp": false,
2828
+ "multiple": true,
2829
+ "type": "option"
2830
+ },
2831
+ "include": {
2832
+ "description": "Include extra fields: tags, teams (comma-separated)",
2833
+ "name": "include",
2834
+ "hasDynamicHelp": false,
2835
+ "multiple": false,
2836
+ "type": "option"
2837
+ },
2838
+ "public": {
2839
+ "description": "Include published faces from other accounts",
2840
+ "name": "public",
2841
+ "allowNo": false,
2842
+ "type": "boolean"
2843
+ },
2844
+ "system": {
2845
+ "description": "Show only the curated system faces (published faces owned by 'head')",
2846
+ "name": "system",
2810
2847
  "allowNo": false,
2811
2848
  "type": "boolean"
2849
+ },
2850
+ "from-users": {
2851
+ "description": "Only published faces from these owners (repeatable/comma-separated)",
2852
+ "name": "from-users",
2853
+ "hasDynamicHelp": false,
2854
+ "multiple": true,
2855
+ "type": "option"
2856
+ },
2857
+ "not-from-users": {
2858
+ "description": "Exclude published faces from these owners (repeatable/comma-separated)",
2859
+ "name": "not-from-users",
2860
+ "hasDynamicHelp": false,
2861
+ "multiple": true,
2862
+ "type": "option"
2812
2863
  }
2813
2864
  },
2814
2865
  "hasDynamicHelp": false,
2815
2866
  "hiddenAliases": [],
2816
- "id": "team:delete",
2867
+ "id": "face:list",
2817
2868
  "pluginAlias": "faces-cli",
2818
2869
  "pluginName": "faces-cli",
2819
2870
  "pluginType": "core",
@@ -2823,20 +2874,20 @@
2823
2874
  "relativePath": [
2824
2875
  "dist",
2825
2876
  "commands",
2826
- "team",
2827
- "delete.js"
2877
+ "face",
2878
+ "list.js"
2828
2879
  ]
2829
2880
  },
2830
- "team:edit": {
2881
+ "face:neighbors": {
2831
2882
  "aliases": [],
2832
2883
  "args": {
2833
- "team_id": {
2834
- "description": "Team ID",
2835
- "name": "team_id",
2884
+ "face_id": {
2885
+ "description": "Face alias",
2886
+ "name": "face_id",
2836
2887
  "required": true
2837
2888
  }
2838
2889
  },
2839
- "description": "Edit a team",
2890
+ "description": "Find the most similar or dissimilar owned faces to a given face",
2840
2891
  "flags": {
2841
2892
  "json": {
2842
2893
  "description": "Format output as json.",
@@ -2869,38 +2920,44 @@
2869
2920
  "multiple": false,
2870
2921
  "type": "option"
2871
2922
  },
2872
- "name": {
2873
- "description": "New team name",
2874
- "name": "name",
2875
- "hasDynamicHelp": false,
2876
- "multiple": false,
2877
- "type": "option"
2878
- },
2879
- "description": {
2880
- "description": "New description (max 1500 chars)",
2881
- "name": "description",
2923
+ "k": {
2924
+ "description": "Number of results (1–20)",
2925
+ "name": "k",
2926
+ "default": 5,
2882
2927
  "hasDynamicHelp": false,
2883
2928
  "multiple": false,
2884
2929
  "type": "option"
2885
2930
  },
2886
- "protocol": {
2887
- "description": "New protocol content",
2888
- "name": "protocol",
2931
+ "component": {
2932
+ "description": "Centroid component to rank on (beta, delta, epsilon are the principal components of a face; face is their composite)",
2933
+ "name": "component",
2934
+ "default": "face",
2889
2935
  "hasDynamicHelp": false,
2890
2936
  "multiple": false,
2937
+ "options": [
2938
+ "face",
2939
+ "beta",
2940
+ "delta",
2941
+ "epsilon"
2942
+ ],
2891
2943
  "type": "option"
2892
2944
  },
2893
- "protocol-file": {
2894
- "description": "Read protocol from file",
2895
- "name": "protocol-file",
2945
+ "direction": {
2946
+ "description": "nearest (most similar) or furthest (most dissimilar)",
2947
+ "name": "direction",
2948
+ "default": "nearest",
2896
2949
  "hasDynamicHelp": false,
2897
2950
  "multiple": false,
2951
+ "options": [
2952
+ "nearest",
2953
+ "furthest"
2954
+ ],
2898
2955
  "type": "option"
2899
2956
  }
2900
2957
  },
2901
2958
  "hasDynamicHelp": false,
2902
2959
  "hiddenAliases": [],
2903
- "id": "team:edit",
2960
+ "id": "face:neighbors",
2904
2961
  "pluginAlias": "faces-cli",
2905
2962
  "pluginName": "faces-cli",
2906
2963
  "pluginType": "core",
@@ -2910,20 +2967,14 @@
2910
2967
  "relativePath": [
2911
2968
  "dist",
2912
2969
  "commands",
2913
- "team",
2914
- "edit.js"
2970
+ "face",
2971
+ "neighbors.js"
2915
2972
  ]
2916
2973
  },
2917
- "team:get": {
2974
+ "face:stats": {
2918
2975
  "aliases": [],
2919
- "args": {
2920
- "team_id": {
2921
- "description": "Team ID",
2922
- "name": "team_id",
2923
- "required": true
2924
- }
2925
- },
2926
- "description": "Get a team by ID",
2976
+ "args": {},
2977
+ "description": "Compile and chat stats for all owned faces",
2927
2978
  "flags": {
2928
2979
  "json": {
2929
2980
  "description": "Format output as json.",
@@ -2959,7 +3010,7 @@
2959
3010
  },
2960
3011
  "hasDynamicHelp": false,
2961
3012
  "hiddenAliases": [],
2962
- "id": "team:get",
3013
+ "id": "face:stats",
2963
3014
  "pluginAlias": "faces-cli",
2964
3015
  "pluginName": "faces-cli",
2965
3016
  "pluginType": "core",
@@ -2969,14 +3020,20 @@
2969
3020
  "relativePath": [
2970
3021
  "dist",
2971
3022
  "commands",
2972
- "team",
2973
- "get.js"
3023
+ "face",
3024
+ "stats.js"
2974
3025
  ]
2975
3026
  },
2976
- "team:list": {
3027
+ "face:teams": {
2977
3028
  "aliases": [],
2978
- "args": {},
2979
- "description": "List your teams",
3029
+ "args": {
3030
+ "alias": {
3031
+ "description": "Face alias",
3032
+ "name": "alias",
3033
+ "required": true
3034
+ }
3035
+ },
3036
+ "description": "Set a face's team memberships (replaces all)",
2980
3037
  "flags": {
2981
3038
  "json": {
2982
3039
  "description": "Format output as json.",
@@ -3008,11 +3065,19 @@
3008
3065
  "hasDynamicHelp": false,
3009
3066
  "multiple": false,
3010
3067
  "type": "option"
3068
+ },
3069
+ "team": {
3070
+ "description": "Team ID (repeatable, replaces all memberships)",
3071
+ "name": "team",
3072
+ "required": true,
3073
+ "hasDynamicHelp": false,
3074
+ "multiple": true,
3075
+ "type": "option"
3011
3076
  }
3012
3077
  },
3013
3078
  "hasDynamicHelp": false,
3014
3079
  "hiddenAliases": [],
3015
- "id": "team:list",
3080
+ "id": "face:teams",
3016
3081
  "pluginAlias": "faces-cli",
3017
3082
  "pluginName": "faces-cli",
3018
3083
  "pluginType": "core",
@@ -3022,20 +3087,20 @@
3022
3087
  "relativePath": [
3023
3088
  "dist",
3024
3089
  "commands",
3025
- "team",
3026
- "list.js"
3090
+ "face",
3091
+ "teams.js"
3027
3092
  ]
3028
3093
  },
3029
- "team:members": {
3094
+ "face:upload": {
3030
3095
  "aliases": [],
3031
3096
  "args": {
3032
- "team_id": {
3033
- "description": "Team ID",
3034
- "name": "team_id",
3097
+ "face_id": {
3098
+ "description": "Face alias",
3099
+ "name": "face_id",
3035
3100
  "required": true
3036
3101
  }
3037
3102
  },
3038
- "description": "List members of a team",
3103
+ "description": "Upload a file (text/PDF/audio/video) to a face",
3039
3104
  "flags": {
3040
3105
  "json": {
3041
3106
  "description": "Format output as json.",
@@ -3067,11 +3132,50 @@
3067
3132
  "hasDynamicHelp": false,
3068
3133
  "multiple": false,
3069
3134
  "type": "option"
3135
+ },
3136
+ "file": {
3137
+ "description": "File to upload",
3138
+ "name": "file",
3139
+ "required": true,
3140
+ "hasDynamicHelp": false,
3141
+ "multiple": false,
3142
+ "type": "option"
3143
+ },
3144
+ "kind": {
3145
+ "description": "Upload kind: document or thread",
3146
+ "name": "kind",
3147
+ "default": "document",
3148
+ "hasDynamicHelp": false,
3149
+ "multiple": false,
3150
+ "options": [
3151
+ "document",
3152
+ "thread"
3153
+ ],
3154
+ "type": "option"
3155
+ },
3156
+ "perspective": {
3157
+ "description": "Perspective (document only)",
3158
+ "name": "perspective",
3159
+ "default": "third-person",
3160
+ "hasDynamicHelp": false,
3161
+ "multiple": false,
3162
+ "options": [
3163
+ "first-person",
3164
+ "third-person"
3165
+ ],
3166
+ "type": "option"
3167
+ },
3168
+ "face-speaker": {
3169
+ "description": "Speaker name to map to the face (thread only). If omitted, first speaker is used.",
3170
+ "name": "face-speaker",
3171
+ "hasDynamicHelp": false,
3172
+ "multiple": false,
3173
+ "type": "option"
3070
3174
  }
3071
3175
  },
3072
3176
  "hasDynamicHelp": false,
3073
3177
  "hiddenAliases": [],
3074
- "id": "team:members",
3178
+ "id": "face:upload",
3075
3179
  "pluginAlias": "faces-cli",
3076
3180
  "pluginName": "faces-cli",
3077
3181
  "pluginType": "core",
@@ -3081,25 +3185,14 @@
3081
3185
  "relativePath": [
3082
3186
  "dist",
3083
3187
  "commands",
3084
- "team",
3085
- "members.js"
3188
+ "face",
3189
+ "upload.js"
3086
3190
  ]
3087
3191
  },
3088
- "team:remove": {
3192
+ "keys:create": {
3089
3193
  "aliases": [],
3090
- "args": {
3091
- "team_id": {
3092
- "description": "Team ID",
3093
- "name": "team_id",
3094
- "required": true
3095
- },
3096
- "alias": {
3097
- "description": "Face alias to remove",
3098
- "name": "alias",
3099
- "required": true
3100
- }
3101
- },
3102
- "description": "Remove a face from a team",
3194
+ "args": {},
3195
+ "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.",
3103
3196
  "flags": {
3104
3197
  "json": {
3105
3198
  "description": "Format output as json.",
@@ -3131,11 +3224,53 @@
3131
3224
  "hasDynamicHelp": false,
3132
3225
  "multiple": false,
3133
3226
  "type": "option"
3227
+ },
3228
+ "name": {
3229
+ "description": "Key name/label",
3230
+ "name": "name",
3231
+ "required": true,
3232
+ "hasDynamicHelp": false,
3233
+ "multiple": false,
3234
+ "type": "option"
3235
+ },
3236
+ "expires-days": {
3237
+ "description": "Expiry in days (omit for no expiry)",
3238
+ "name": "expires-days",
3239
+ "hasDynamicHelp": false,
3240
+ "multiple": false,
3241
+ "type": "option"
3242
+ },
3243
+ "budget": {
3244
+ "description": "Spend budget in USD",
3245
+ "name": "budget",
3246
+ "hasDynamicHelp": false,
3247
+ "multiple": false,
3248
+ "type": "option"
3249
+ },
3250
+ "face": {
3251
+ "description": "Allowed face alias (repeatable)",
3252
+ "name": "face",
3253
+ "hasDynamicHelp": false,
3254
+ "multiple": true,
3255
+ "type": "option"
3256
+ },
3257
+ "model": {
3258
+ "description": "Allowed model name (repeatable)",
3259
+ "name": "model",
3260
+ "hasDynamicHelp": false,
3261
+ "multiple": true,
3262
+ "type": "option"
3263
+ },
3264
+ "save": {
3265
+ "description": "Save the new key to ~/.faces/config.json as api_key (default: true; use --no-save to skip)",
3266
+ "name": "save",
3267
+ "allowNo": true,
3268
+ "type": "boolean"
3134
3269
  }
3135
3270
  },
3136
3271
  "hasDynamicHelp": false,
3137
3272
  "hiddenAliases": [],
3138
- "id": "team:remove",
3273
+ "id": "keys:create",
3139
3274
  "pluginAlias": "faces-cli",
3140
3275
  "pluginName": "faces-cli",
3141
3276
  "pluginType": "core",
@@ -3145,14 +3280,14 @@
3145
3280
  "relativePath": [
3146
3281
  "dist",
3147
3282
  "commands",
3148
- "team",
3149
- "remove.js"
3283
+ "keys",
3284
+ "create.js"
3150
3285
  ]
3151
3286
  },
3152
- "face:attributes": {
3287
+ "keys:list": {
3153
3288
  "aliases": [],
3154
3289
  "args": {},
3155
- "description": "List all supported attribute keys",
3290
+ "description": "List all API keys (JWT required)",
3156
3291
  "flags": {
3157
3292
  "json": {
3158
3293
  "description": "Format output as json.",
@@ -3188,7 +3323,7 @@
3188
3323
  },
3189
3324
  "hasDynamicHelp": false,
3190
3325
  "hiddenAliases": [],
3191
- "id": "face:attributes",
3326
+ "id": "keys:list",
3192
3327
  "pluginAlias": "faces-cli",
3193
3328
  "pluginName": "faces-cli",
3194
3329
  "pluginType": "core",
@@ -3198,14 +3333,20 @@
3198
3333
  "relativePath": [
3199
3334
  "dist",
3200
3335
  "commands",
3201
- "face",
3202
- "attributes.js"
3336
+ "keys",
3337
+ "list.js"
3203
3338
  ]
3204
3339
  },
3205
- "face:create": {
3340
+ "keys:revoke": {
3206
3341
  "aliases": [],
3207
- "args": {},
3208
- "description": "Create a new face",
3342
+ "args": {
3343
+ "key_id": {
3344
+ "description": "Key ID",
3345
+ "name": "key_id",
3346
+ "required": true
3347
+ }
3348
+ },
3349
+ "description": "Revoke an API key (JWT required)",
3209
3350
  "flags": {
3210
3351
  "json": {
3211
3352
  "description": "Format output as json.",
@@ -3225,81 +3366,29 @@
3225
3366
  "token": {
3226
3367
  "description": "JWT bearer token",
3227
3368
  "env": "FACES_TOKEN",
3228
- "name": "token",
3229
- "hasDynamicHelp": false,
3230
- "multiple": false,
3231
- "type": "option"
3232
- },
3233
- "api-key": {
3234
- "description": "API key",
3235
- "env": "FACES_API_KEY",
3236
- "name": "api-key",
3237
- "hasDynamicHelp": false,
3238
- "multiple": false,
3239
- "type": "option"
3240
- },
3241
- "name": {
3242
- "description": "Display name",
3243
- "name": "name",
3244
- "required": true,
3245
- "hasDynamicHelp": false,
3246
- "multiple": false,
3247
- "type": "option"
3248
- },
3249
- "alias": {
3250
- "description": "Unique alias slug",
3251
- "name": "alias",
3252
- "required": true,
3253
- "hasDynamicHelp": false,
3254
- "multiple": false,
3255
- "type": "option"
3256
- },
3257
- "description": {
3258
- "description": "Plain-text description / bio (max 1500 chars)",
3259
- "name": "description",
3260
- "hasDynamicHelp": false,
3261
- "multiple": false,
3262
- "type": "option"
3263
- },
3264
- "tag": {
3265
- "description": "Tag label (repeatable, lowercase)",
3266
- "name": "tag",
3267
- "hasDynamicHelp": false,
3268
- "multiple": true,
3269
- "type": "option"
3270
- },
3271
- "default-model": {
3272
- "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
3273
- "name": "default-model",
3274
- "hasDynamicHelp": false,
3275
- "multiple": false,
3276
- "type": "option"
3277
- },
3278
- "formula": {
3279
- "description": "Boolean formula over owned concrete face aliases (e.g. \"a | b\", \"(a | b) - c\"). Creates a composite face.",
3280
- "name": "formula",
3281
- "hasDynamicHelp": false,
3282
- "multiple": false,
3283
- "type": "option"
3284
- },
3285
- "attr": {
3286
- "description": "Attribute KEY=VALUE (repeatable)",
3287
- "name": "attr",
3369
+ "name": "token",
3288
3370
  "hasDynamicHelp": false,
3289
- "multiple": true,
3371
+ "multiple": false,
3290
3372
  "type": "option"
3291
3373
  },
3292
- "tool": {
3293
- "description": "Tool name to enable (repeatable)",
3294
- "name": "tool",
3374
+ "api-key": {
3375
+ "description": "API key",
3376
+ "env": "FACES_API_KEY",
3377
+ "name": "api-key",
3295
3378
  "hasDynamicHelp": false,
3296
- "multiple": true,
3379
+ "multiple": false,
3297
3380
  "type": "option"
3381
+ },
3382
+ "yes": {
3383
+ "description": "Skip confirmation",
3384
+ "name": "yes",
3385
+ "allowNo": false,
3386
+ "type": "boolean"
3298
3387
  }
3299
3388
  },
3300
3389
  "hasDynamicHelp": false,
3301
3390
  "hiddenAliases": [],
3302
- "id": "face:create",
3391
+ "id": "keys:revoke",
3303
3392
  "pluginAlias": "faces-cli",
3304
3393
  "pluginName": "faces-cli",
3305
3394
  "pluginType": "core",
@@ -3309,20 +3398,20 @@
3309
3398
  "relativePath": [
3310
3399
  "dist",
3311
3400
  "commands",
3312
- "face",
3313
- "create.js"
3401
+ "keys",
3402
+ "revoke.js"
3314
3403
  ]
3315
3404
  },
3316
- "face:delete": {
3405
+ "keys:update": {
3317
3406
  "aliases": [],
3318
3407
  "args": {
3319
- "face_id": {
3320
- "description": "Face alias",
3321
- "name": "face_id",
3408
+ "key_id": {
3409
+ "description": "Key ID",
3410
+ "name": "key_id",
3322
3411
  "required": true
3323
3412
  }
3324
3413
  },
3325
- "description": "Delete a face permanently",
3414
+ "description": "Update API key metadata (JWT required)",
3326
3415
  "flags": {
3327
3416
  "json": {
3328
3417
  "description": "Format output as json.",
@@ -3355,16 +3444,30 @@
3355
3444
  "multiple": false,
3356
3445
  "type": "option"
3357
3446
  },
3358
- "yes": {
3359
- "description": "Skip confirmation",
3360
- "name": "yes",
3447
+ "name": {
3448
+ "description": "New key name",
3449
+ "name": "name",
3450
+ "hasDynamicHelp": false,
3451
+ "multiple": false,
3452
+ "type": "option"
3453
+ },
3454
+ "budget": {
3455
+ "description": "New spend budget in USD",
3456
+ "name": "budget",
3457
+ "hasDynamicHelp": false,
3458
+ "multiple": false,
3459
+ "type": "option"
3460
+ },
3461
+ "reset-spent": {
3462
+ "description": "Reset spent amount to zero",
3463
+ "name": "reset-spent",
3361
3464
  "allowNo": false,
3362
3465
  "type": "boolean"
3363
3466
  }
3364
3467
  },
3365
3468
  "hasDynamicHelp": false,
3366
3469
  "hiddenAliases": [],
3367
- "id": "face:delete",
3470
+ "id": "keys:update",
3368
3471
  "pluginAlias": "faces-cli",
3369
3472
  "pluginName": "faces-cli",
3370
3473
  "pluginType": "core",
@@ -3374,14 +3477,20 @@
3374
3477
  "relativePath": [
3375
3478
  "dist",
3376
3479
  "commands",
3377
- "face",
3378
- "delete.js"
3480
+ "keys",
3481
+ "update.js"
3379
3482
  ]
3380
3483
  },
3381
- "face:diff": {
3484
+ "team:add": {
3382
3485
  "aliases": [],
3383
- "args": {},
3384
- "description": "Compare owned faces pairwise across all centroid components",
3486
+ "args": {
3487
+ "team_id": {
3488
+ "description": "Team ID",
3489
+ "name": "team_id",
3490
+ "required": true
3491
+ }
3492
+ },
3493
+ "description": "Add face(s) to a team",
3385
3494
  "flags": {
3386
3495
  "json": {
3387
3496
  "description": "Format output as json.",
@@ -3415,7 +3524,7 @@
3415
3524
  "type": "option"
3416
3525
  },
3417
3526
  "face": {
3418
- "description": "Face alias to include (repeatable, min 2)",
3527
+ "description": "Face alias to add (repeatable)",
3419
3528
  "name": "face",
3420
3529
  "required": true,
3421
3530
  "hasDynamicHelp": false,
@@ -3425,7 +3534,7 @@
3425
3534
  },
3426
3535
  "hasDynamicHelp": false,
3427
3536
  "hiddenAliases": [],
3428
- "id": "face:diff",
3537
+ "id": "team:add",
3429
3538
  "pluginAlias": "faces-cli",
3430
3539
  "pluginName": "faces-cli",
3431
3540
  "pluginType": "core",
@@ -3435,20 +3544,14 @@
3435
3544
  "relativePath": [
3436
3545
  "dist",
3437
3546
  "commands",
3438
- "face",
3439
- "diff.js"
3547
+ "team",
3548
+ "add.js"
3440
3549
  ]
3441
3550
  },
3442
- "face:edit": {
3551
+ "team:create": {
3443
3552
  "aliases": [],
3444
- "args": {
3445
- "face_id": {
3446
- "description": "Face alias",
3447
- "name": "face_id",
3448
- "required": true
3449
- }
3450
- },
3451
- "description": "Edit a face's metadata",
3553
+ "args": {},
3554
+ "description": "Create a new team",
3452
3555
  "flags": {
3453
3556
  "json": {
3454
3557
  "description": "Format output as json.",
@@ -3482,50 +3585,37 @@
3482
3585
  "type": "option"
3483
3586
  },
3484
3587
  "name": {
3485
- "description": "New display name",
3588
+ "description": "Team name",
3486
3589
  "name": "name",
3590
+ "required": true,
3487
3591
  "hasDynamicHelp": false,
3488
3592
  "multiple": false,
3489
3593
  "type": "option"
3490
3594
  },
3491
3595
  "description": {
3492
- "description": "Plain-text description / bio (max 1500 chars)",
3596
+ "description": "Plain-text team description (max 1500 chars)",
3493
3597
  "name": "description",
3494
3598
  "hasDynamicHelp": false,
3495
3599
  "multiple": false,
3496
3600
  "type": "option"
3497
3601
  },
3498
- "tag": {
3499
- "description": "Replace all tags (repeatable, lowercase)",
3500
- "name": "tag",
3501
- "hasDynamicHelp": false,
3502
- "multiple": true,
3503
- "type": "option"
3504
- },
3505
- "default-model": {
3506
- "description": "Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)",
3507
- "name": "default-model",
3602
+ "protocol": {
3603
+ "description": "Protocol content (mermaid diagram or markdown, max 1000 words)",
3604
+ "name": "protocol",
3508
3605
  "hasDynamicHelp": false,
3509
3606
  "multiple": false,
3510
3607
  "type": "option"
3511
3608
  },
3512
- "formula": {
3513
- "description": "New boolean formula (synthetic faces only)",
3514
- "name": "formula",
3609
+ "protocol-file": {
3610
+ "description": "Read protocol from file",
3611
+ "name": "protocol-file",
3515
3612
  "hasDynamicHelp": false,
3516
3613
  "multiple": false,
3517
3614
  "type": "option"
3518
3615
  },
3519
- "attr": {
3520
- "description": "Update attribute KEY=VALUE (repeatable)",
3521
- "name": "attr",
3522
- "hasDynamicHelp": false,
3523
- "multiple": true,
3524
- "type": "option"
3525
- },
3526
- "tool": {
3527
- "description": "Tool names to set (replaces list, repeatable)",
3528
- "name": "tool",
3616
+ "tag": {
3617
+ "description": "Tag label (repeatable, lowercase)",
3618
+ "name": "tag",
3529
3619
  "hasDynamicHelp": false,
3530
3620
  "multiple": true,
3531
3621
  "type": "option"
@@ -3533,7 +3623,7 @@
3533
3623
  },
3534
3624
  "hasDynamicHelp": false,
3535
3625
  "hiddenAliases": [],
3536
- "id": "face:edit",
3626
+ "id": "team:create",
3537
3627
  "pluginAlias": "faces-cli",
3538
3628
  "pluginName": "faces-cli",
3539
3629
  "pluginType": "core",
@@ -3543,20 +3633,20 @@
3543
3633
  "relativePath": [
3544
3634
  "dist",
3545
3635
  "commands",
3546
- "face",
3547
- "edit.js"
3636
+ "team",
3637
+ "create.js"
3548
3638
  ]
3549
3639
  },
3550
- "face:get": {
3640
+ "team:delete": {
3551
3641
  "aliases": [],
3552
3642
  "args": {
3553
- "face_id": {
3554
- "description": "Face alias",
3555
- "name": "face_id",
3643
+ "team_id": {
3644
+ "description": "Team ID",
3645
+ "name": "team_id",
3556
3646
  "required": true
3557
3647
  }
3558
3648
  },
3559
- "description": "Get details for a face by alias",
3649
+ "description": "Delete a team",
3560
3650
  "flags": {
3561
3651
  "json": {
3562
3652
  "description": "Format output as json.",
@@ -3589,17 +3679,16 @@
3589
3679
  "multiple": false,
3590
3680
  "type": "option"
3591
3681
  },
3592
- "include": {
3593
- "description": "Include extra fields: tags, teams (comma-separated)",
3594
- "name": "include",
3595
- "hasDynamicHelp": false,
3596
- "multiple": false,
3597
- "type": "option"
3682
+ "yes": {
3683
+ "description": "Skip confirmation",
3684
+ "name": "yes",
3685
+ "allowNo": false,
3686
+ "type": "boolean"
3598
3687
  }
3599
3688
  },
3600
3689
  "hasDynamicHelp": false,
3601
3690
  "hiddenAliases": [],
3602
- "id": "face:get",
3691
+ "id": "team:delete",
3603
3692
  "pluginAlias": "faces-cli",
3604
3693
  "pluginName": "faces-cli",
3605
3694
  "pluginType": "core",
@@ -3609,14 +3698,20 @@
3609
3698
  "relativePath": [
3610
3699
  "dist",
3611
3700
  "commands",
3612
- "face",
3613
- "get.js"
3701
+ "team",
3702
+ "delete.js"
3614
3703
  ]
3615
3704
  },
3616
- "face:list": {
3705
+ "team:edit": {
3617
3706
  "aliases": [],
3618
- "args": {},
3619
- "description": "List all owned faces",
3707
+ "args": {
3708
+ "team_id": {
3709
+ "description": "Team ID",
3710
+ "name": "team_id",
3711
+ "required": true
3712
+ }
3713
+ },
3714
+ "description": "Edit a team",
3620
3715
  "flags": {
3621
3716
  "json": {
3622
3717
  "description": "Format output as json.",
@@ -3649,23 +3744,30 @@
3649
3744
  "multiple": false,
3650
3745
  "type": "option"
3651
3746
  },
3652
- "tag": {
3653
- "description": "Filter by tag (repeatable, AND logic)",
3654
- "name": "tag",
3747
+ "name": {
3748
+ "description": "New team name",
3749
+ "name": "name",
3655
3750
  "hasDynamicHelp": false,
3656
- "multiple": true,
3751
+ "multiple": false,
3657
3752
  "type": "option"
3658
3753
  },
3659
- "team": {
3660
- "description": "Filter by team ID (repeatable, OR logic)",
3661
- "name": "team",
3754
+ "description": {
3755
+ "description": "New description (max 1500 chars)",
3756
+ "name": "description",
3662
3757
  "hasDynamicHelp": false,
3663
- "multiple": true,
3758
+ "multiple": false,
3664
3759
  "type": "option"
3665
3760
  },
3666
- "include": {
3667
- "description": "Include extra fields: tags, teams (comma-separated)",
3668
- "name": "include",
3761
+ "protocol": {
3762
+ "description": "New protocol content",
3763
+ "name": "protocol",
3764
+ "hasDynamicHelp": false,
3765
+ "multiple": false,
3766
+ "type": "option"
3767
+ },
3768
+ "protocol-file": {
3769
+ "description": "Read protocol from file",
3770
+ "name": "protocol-file",
3669
3771
  "hasDynamicHelp": false,
3670
3772
  "multiple": false,
3671
3773
  "type": "option"
@@ -3673,7 +3775,7 @@
3673
3775
  },
3674
3776
  "hasDynamicHelp": false,
3675
3777
  "hiddenAliases": [],
3676
- "id": "face:list",
3778
+ "id": "team:edit",
3677
3779
  "pluginAlias": "faces-cli",
3678
3780
  "pluginName": "faces-cli",
3679
3781
  "pluginType": "core",
@@ -3683,20 +3785,20 @@
3683
3785
  "relativePath": [
3684
3786
  "dist",
3685
3787
  "commands",
3686
- "face",
3687
- "list.js"
3788
+ "team",
3789
+ "edit.js"
3688
3790
  ]
3689
3791
  },
3690
- "face:neighbors": {
3792
+ "team:get": {
3691
3793
  "aliases": [],
3692
3794
  "args": {
3693
- "face_id": {
3694
- "description": "Face alias",
3695
- "name": "face_id",
3795
+ "team_id": {
3796
+ "description": "Team ID",
3797
+ "name": "team_id",
3696
3798
  "required": true
3697
3799
  }
3698
3800
  },
3699
- "description": "Find the most similar or dissimilar owned faces to a given face",
3801
+ "description": "Get a team by ID",
3700
3802
  "flags": {
3701
3803
  "json": {
3702
3804
  "description": "Format output as json.",
@@ -3728,45 +3830,11 @@
3728
3830
  "hasDynamicHelp": false,
3729
3831
  "multiple": false,
3730
3832
  "type": "option"
3731
- },
3732
- "k": {
3733
- "description": "Number of results (1–20)",
3734
- "name": "k",
3735
- "default": 5,
3736
- "hasDynamicHelp": false,
3737
- "multiple": false,
3738
- "type": "option"
3739
- },
3740
- "component": {
3741
- "description": "Centroid component to rank on (beta, delta, epsilon are the principal components of a face; face is their composite)",
3742
- "name": "component",
3743
- "default": "face",
3744
- "hasDynamicHelp": false,
3745
- "multiple": false,
3746
- "options": [
3747
- "face",
3748
- "beta",
3749
- "delta",
3750
- "epsilon"
3751
- ],
3752
- "type": "option"
3753
- },
3754
- "direction": {
3755
- "description": "nearest (most similar) or furthest (most dissimilar)",
3756
- "name": "direction",
3757
- "default": "nearest",
3758
- "hasDynamicHelp": false,
3759
- "multiple": false,
3760
- "options": [
3761
- "nearest",
3762
- "furthest"
3763
- ],
3764
- "type": "option"
3765
3833
  }
3766
3834
  },
3767
3835
  "hasDynamicHelp": false,
3768
3836
  "hiddenAliases": [],
3769
- "id": "face:neighbors",
3837
+ "id": "team:get",
3770
3838
  "pluginAlias": "faces-cli",
3771
3839
  "pluginName": "faces-cli",
3772
3840
  "pluginType": "core",
@@ -3776,14 +3844,14 @@
3776
3844
  "relativePath": [
3777
3845
  "dist",
3778
3846
  "commands",
3779
- "face",
3780
- "neighbors.js"
3847
+ "team",
3848
+ "get.js"
3781
3849
  ]
3782
3850
  },
3783
- "face:stats": {
3851
+ "team:list": {
3784
3852
  "aliases": [],
3785
3853
  "args": {},
3786
- "description": "Compile and chat stats for all owned faces",
3854
+ "description": "List your teams",
3787
3855
  "flags": {
3788
3856
  "json": {
3789
3857
  "description": "Format output as json.",
@@ -3819,7 +3887,7 @@
3819
3887
  },
3820
3888
  "hasDynamicHelp": false,
3821
3889
  "hiddenAliases": [],
3822
- "id": "face:stats",
3890
+ "id": "team:list",
3823
3891
  "pluginAlias": "faces-cli",
3824
3892
  "pluginName": "faces-cli",
3825
3893
  "pluginType": "core",
@@ -3829,20 +3897,20 @@
3829
3897
  "relativePath": [
3830
3898
  "dist",
3831
3899
  "commands",
3832
- "face",
3833
- "stats.js"
3900
+ "team",
3901
+ "list.js"
3834
3902
  ]
3835
3903
  },
3836
- "face:teams": {
3904
+ "team:members": {
3837
3905
  "aliases": [],
3838
3906
  "args": {
3839
- "alias": {
3840
- "description": "Face alias",
3841
- "name": "alias",
3907
+ "team_id": {
3908
+ "description": "Team ID",
3909
+ "name": "team_id",
3842
3910
  "required": true
3843
3911
  }
3844
3912
  },
3845
- "description": "Set a face's team memberships (replaces all)",
3913
+ "description": "List members of a team",
3846
3914
  "flags": {
3847
3915
  "json": {
3848
3916
  "description": "Format output as json.",
@@ -3874,19 +3942,11 @@
3874
3942
  "hasDynamicHelp": false,
3875
3943
  "multiple": false,
3876
3944
  "type": "option"
3877
- },
3878
- "team": {
3879
- "description": "Team ID (repeatable, replaces all memberships)",
3880
- "name": "team",
3881
- "required": true,
3882
- "hasDynamicHelp": false,
3883
- "multiple": true,
3884
- "type": "option"
3885
3945
  }
3886
3946
  },
3887
3947
  "hasDynamicHelp": false,
3888
3948
  "hiddenAliases": [],
3889
- "id": "face:teams",
3949
+ "id": "team:members",
3890
3950
  "pluginAlias": "faces-cli",
3891
3951
  "pluginName": "faces-cli",
3892
3952
  "pluginType": "core",
@@ -3896,20 +3956,25 @@
3896
3956
  "relativePath": [
3897
3957
  "dist",
3898
3958
  "commands",
3899
- "face",
3900
- "teams.js"
3959
+ "team",
3960
+ "members.js"
3901
3961
  ]
3902
3962
  },
3903
- "face:upload": {
3963
+ "team:remove": {
3904
3964
  "aliases": [],
3905
3965
  "args": {
3906
- "face_id": {
3907
- "description": "Face alias",
3908
- "name": "face_id",
3966
+ "team_id": {
3967
+ "description": "Team ID",
3968
+ "name": "team_id",
3969
+ "required": true
3970
+ },
3971
+ "alias": {
3972
+ "description": "Face alias to remove",
3973
+ "name": "alias",
3909
3974
  "required": true
3910
3975
  }
3911
3976
  },
3912
- "description": "Upload a file (text/PDF/audio/video) to a face",
3977
+ "description": "Remove a face from a team",
3913
3978
  "flags": {
3914
3979
  "json": {
3915
3980
  "description": "Format output as json.",
@@ -3941,50 +4006,11 @@
3941
4006
  "hasDynamicHelp": false,
3942
4007
  "multiple": false,
3943
4008
  "type": "option"
3944
- },
3945
- "file": {
3946
- "description": "File to upload",
3947
- "name": "file",
3948
- "required": true,
3949
- "hasDynamicHelp": false,
3950
- "multiple": false,
3951
- "type": "option"
3952
- },
3953
- "kind": {
3954
- "description": "Upload kind: document or thread",
3955
- "name": "kind",
3956
- "default": "document",
3957
- "hasDynamicHelp": false,
3958
- "multiple": false,
3959
- "options": [
3960
- "document",
3961
- "thread"
3962
- ],
3963
- "type": "option"
3964
- },
3965
- "perspective": {
3966
- "description": "Perspective (document only)",
3967
- "name": "perspective",
3968
- "default": "third-person",
3969
- "hasDynamicHelp": false,
3970
- "multiple": false,
3971
- "options": [
3972
- "first-person",
3973
- "third-person"
3974
- ],
3975
- "type": "option"
3976
- },
3977
- "face-speaker": {
3978
- "description": "Speaker name to map to the face (thread only). If omitted, first speaker is used.",
3979
- "name": "face-speaker",
3980
- "hasDynamicHelp": false,
3981
- "multiple": false,
3982
- "type": "option"
3983
4009
  }
3984
4010
  },
3985
4011
  "hasDynamicHelp": false,
3986
4012
  "hiddenAliases": [],
3987
- "id": "face:upload",
4013
+ "id": "team:remove",
3988
4014
  "pluginAlias": "faces-cli",
3989
4015
  "pluginName": "faces-cli",
3990
4016
  "pluginType": "core",
@@ -3994,8 +4020,8 @@
3994
4020
  "relativePath": [
3995
4021
  "dist",
3996
4022
  "commands",
3997
- "face",
3998
- "upload.js"
4023
+ "team",
4024
+ "remove.js"
3999
4025
  ]
4000
4026
  },
4001
4027
  "billing:subscription:activate": {
@@ -5463,16 +5489,16 @@
5463
5489
  "sync.js"
5464
5490
  ]
5465
5491
  },
5466
- "team:tag:add": {
5492
+ "face:tag:add": {
5467
5493
  "aliases": [],
5468
5494
  "args": {
5469
- "team_id": {
5470
- "description": "Team ID",
5471
- "name": "team_id",
5495
+ "alias": {
5496
+ "description": "Face alias",
5497
+ "name": "alias",
5472
5498
  "required": true
5473
5499
  }
5474
5500
  },
5475
- "description": "Add tags to a team (appends, idempotent)",
5501
+ "description": "Add tags to a face (appends, idempotent)",
5476
5502
  "flags": {
5477
5503
  "json": {
5478
5504
  "description": "Format output as json.",
@@ -5516,7 +5542,7 @@
5516
5542
  },
5517
5543
  "hasDynamicHelp": false,
5518
5544
  "hiddenAliases": [],
5519
- "id": "team:tag:add",
5545
+ "id": "face:tag:add",
5520
5546
  "pluginAlias": "faces-cli",
5521
5547
  "pluginName": "faces-cli",
5522
5548
  "pluginType": "core",
@@ -5526,21 +5552,15 @@
5526
5552
  "relativePath": [
5527
5553
  "dist",
5528
5554
  "commands",
5529
- "team",
5555
+ "face",
5530
5556
  "tag",
5531
5557
  "add.js"
5532
5558
  ]
5533
5559
  },
5534
- "team:tag:list": {
5560
+ "face:tag:all": {
5535
5561
  "aliases": [],
5536
- "args": {
5537
- "team_id": {
5538
- "description": "Team ID",
5539
- "name": "team_id",
5540
- "required": true
5541
- }
5542
- },
5543
- "description": "List tags on a team",
5562
+ "args": {},
5563
+ "description": "List all tags across all your faces",
5544
5564
  "flags": {
5545
5565
  "json": {
5546
5566
  "description": "Format output as json.",
@@ -5576,7 +5596,7 @@
5576
5596
  },
5577
5597
  "hasDynamicHelp": false,
5578
5598
  "hiddenAliases": [],
5579
- "id": "team:tag:list",
5599
+ "id": "face:tag:all",
5580
5600
  "pluginAlias": "faces-cli",
5581
5601
  "pluginName": "faces-cli",
5582
5602
  "pluginType": "core",
@@ -5586,26 +5606,21 @@
5586
5606
  "relativePath": [
5587
5607
  "dist",
5588
5608
  "commands",
5589
- "team",
5609
+ "face",
5590
5610
  "tag",
5591
- "list.js"
5611
+ "all.js"
5592
5612
  ]
5593
5613
  },
5594
- "team:tag:remove": {
5614
+ "face:tag:list": {
5595
5615
  "aliases": [],
5596
5616
  "args": {
5597
- "team_id": {
5598
- "description": "Team ID",
5599
- "name": "team_id",
5600
- "required": true
5601
- },
5602
- "tag": {
5603
- "description": "Tag to remove",
5604
- "name": "tag",
5617
+ "alias": {
5618
+ "description": "Face alias",
5619
+ "name": "alias",
5605
5620
  "required": true
5606
5621
  }
5607
5622
  },
5608
- "description": "Remove a tag from a team",
5623
+ "description": "List tags on a face",
5609
5624
  "flags": {
5610
5625
  "json": {
5611
5626
  "description": "Format output as json.",
@@ -5641,7 +5656,7 @@
5641
5656
  },
5642
5657
  "hasDynamicHelp": false,
5643
5658
  "hiddenAliases": [],
5644
- "id": "team:tag:remove",
5659
+ "id": "face:tag:list",
5645
5660
  "pluginAlias": "faces-cli",
5646
5661
  "pluginName": "faces-cli",
5647
5662
  "pluginType": "core",
@@ -5651,21 +5666,26 @@
5651
5666
  "relativePath": [
5652
5667
  "dist",
5653
5668
  "commands",
5654
- "team",
5669
+ "face",
5655
5670
  "tag",
5656
- "remove.js"
5671
+ "list.js"
5657
5672
  ]
5658
5673
  },
5659
- "team:tag:set": {
5674
+ "face:tag:remove": {
5660
5675
  "aliases": [],
5661
5676
  "args": {
5662
- "team_id": {
5663
- "description": "Team ID",
5664
- "name": "team_id",
5677
+ "alias": {
5678
+ "description": "Face alias",
5679
+ "name": "alias",
5680
+ "required": true
5681
+ },
5682
+ "tag": {
5683
+ "description": "Tag to remove",
5684
+ "name": "tag",
5665
5685
  "required": true
5666
5686
  }
5667
5687
  },
5668
- "description": "Replace all tags on a team",
5688
+ "description": "Remove a tag from a face",
5669
5689
  "flags": {
5670
5690
  "json": {
5671
5691
  "description": "Format output as json.",
@@ -5697,19 +5717,11 @@
5697
5717
  "hasDynamicHelp": false,
5698
5718
  "multiple": false,
5699
5719
  "type": "option"
5700
- },
5701
- "tag": {
5702
- "description": "Tag to set (repeatable, replaces all)",
5703
- "name": "tag",
5704
- "required": true,
5705
- "hasDynamicHelp": false,
5706
- "multiple": true,
5707
- "type": "option"
5708
5720
  }
5709
5721
  },
5710
5722
  "hasDynamicHelp": false,
5711
5723
  "hiddenAliases": [],
5712
- "id": "team:tag:set",
5724
+ "id": "face:tag:remove",
5713
5725
  "pluginAlias": "faces-cli",
5714
5726
  "pluginName": "faces-cli",
5715
5727
  "pluginType": "core",
@@ -5719,12 +5731,12 @@
5719
5731
  "relativePath": [
5720
5732
  "dist",
5721
5733
  "commands",
5722
- "team",
5734
+ "face",
5723
5735
  "tag",
5724
- "set.js"
5736
+ "remove.js"
5725
5737
  ]
5726
5738
  },
5727
- "face:tag:add": {
5739
+ "face:tag:set": {
5728
5740
  "aliases": [],
5729
5741
  "args": {
5730
5742
  "alias": {
@@ -5733,7 +5745,7 @@
5733
5745
  "required": true
5734
5746
  }
5735
5747
  },
5736
- "description": "Add tags to a face (appends, idempotent)",
5748
+ "description": "Replace all tags on a face",
5737
5749
  "flags": {
5738
5750
  "json": {
5739
5751
  "description": "Format output as json.",
@@ -5767,7 +5779,7 @@
5767
5779
  "type": "option"
5768
5780
  },
5769
5781
  "tag": {
5770
- "description": "Tag to add (repeatable)",
5782
+ "description": "Tag to set (repeatable, replaces all)",
5771
5783
  "name": "tag",
5772
5784
  "required": true,
5773
5785
  "hasDynamicHelp": false,
@@ -5777,7 +5789,7 @@
5777
5789
  },
5778
5790
  "hasDynamicHelp": false,
5779
5791
  "hiddenAliases": [],
5780
- "id": "face:tag:add",
5792
+ "id": "face:tag:set",
5781
5793
  "pluginAlias": "faces-cli",
5782
5794
  "pluginName": "faces-cli",
5783
5795
  "pluginType": "core",
@@ -5789,13 +5801,19 @@
5789
5801
  "commands",
5790
5802
  "face",
5791
5803
  "tag",
5792
- "add.js"
5804
+ "set.js"
5793
5805
  ]
5794
5806
  },
5795
- "face:tag:all": {
5807
+ "team:tag:add": {
5796
5808
  "aliases": [],
5797
- "args": {},
5798
- "description": "List all tags across all your faces",
5809
+ "args": {
5810
+ "team_id": {
5811
+ "description": "Team ID",
5812
+ "name": "team_id",
5813
+ "required": true
5814
+ }
5815
+ },
5816
+ "description": "Add tags to a team (appends, idempotent)",
5799
5817
  "flags": {
5800
5818
  "json": {
5801
5819
  "description": "Format output as json.",
@@ -5827,11 +5845,19 @@
5827
5845
  "hasDynamicHelp": false,
5828
5846
  "multiple": false,
5829
5847
  "type": "option"
5848
+ },
5849
+ "tag": {
5850
+ "description": "Tag to add (repeatable)",
5851
+ "name": "tag",
5852
+ "required": true,
5853
+ "hasDynamicHelp": false,
5854
+ "multiple": true,
5855
+ "type": "option"
5830
5856
  }
5831
5857
  },
5832
5858
  "hasDynamicHelp": false,
5833
5859
  "hiddenAliases": [],
5834
- "id": "face:tag:all",
5860
+ "id": "team:tag:add",
5835
5861
  "pluginAlias": "faces-cli",
5836
5862
  "pluginName": "faces-cli",
5837
5863
  "pluginType": "core",
@@ -5841,21 +5867,21 @@
5841
5867
  "relativePath": [
5842
5868
  "dist",
5843
5869
  "commands",
5844
- "face",
5870
+ "team",
5845
5871
  "tag",
5846
- "all.js"
5872
+ "add.js"
5847
5873
  ]
5848
5874
  },
5849
- "face:tag:list": {
5875
+ "team:tag:list": {
5850
5876
  "aliases": [],
5851
5877
  "args": {
5852
- "alias": {
5853
- "description": "Face alias",
5854
- "name": "alias",
5878
+ "team_id": {
5879
+ "description": "Team ID",
5880
+ "name": "team_id",
5855
5881
  "required": true
5856
5882
  }
5857
5883
  },
5858
- "description": "List tags on a face",
5884
+ "description": "List tags on a team",
5859
5885
  "flags": {
5860
5886
  "json": {
5861
5887
  "description": "Format output as json.",
@@ -5891,7 +5917,7 @@
5891
5917
  },
5892
5918
  "hasDynamicHelp": false,
5893
5919
  "hiddenAliases": [],
5894
- "id": "face:tag:list",
5920
+ "id": "team:tag:list",
5895
5921
  "pluginAlias": "faces-cli",
5896
5922
  "pluginName": "faces-cli",
5897
5923
  "pluginType": "core",
@@ -5901,17 +5927,17 @@
5901
5927
  "relativePath": [
5902
5928
  "dist",
5903
5929
  "commands",
5904
- "face",
5930
+ "team",
5905
5931
  "tag",
5906
5932
  "list.js"
5907
5933
  ]
5908
5934
  },
5909
- "face:tag:remove": {
5935
+ "team:tag:remove": {
5910
5936
  "aliases": [],
5911
5937
  "args": {
5912
- "alias": {
5913
- "description": "Face alias",
5914
- "name": "alias",
5938
+ "team_id": {
5939
+ "description": "Team ID",
5940
+ "name": "team_id",
5915
5941
  "required": true
5916
5942
  },
5917
5943
  "tag": {
@@ -5920,7 +5946,7 @@
5920
5946
  "required": true
5921
5947
  }
5922
5948
  },
5923
- "description": "Remove a tag from a face",
5949
+ "description": "Remove a tag from a team",
5924
5950
  "flags": {
5925
5951
  "json": {
5926
5952
  "description": "Format output as json.",
@@ -5956,7 +5982,7 @@
5956
5982
  },
5957
5983
  "hasDynamicHelp": false,
5958
5984
  "hiddenAliases": [],
5959
- "id": "face:tag:remove",
5985
+ "id": "team:tag:remove",
5960
5986
  "pluginAlias": "faces-cli",
5961
5987
  "pluginName": "faces-cli",
5962
5988
  "pluginType": "core",
@@ -5966,21 +5992,21 @@
5966
5992
  "relativePath": [
5967
5993
  "dist",
5968
5994
  "commands",
5969
- "face",
5995
+ "team",
5970
5996
  "tag",
5971
5997
  "remove.js"
5972
5998
  ]
5973
5999
  },
5974
- "face:tag:set": {
6000
+ "team:tag:set": {
5975
6001
  "aliases": [],
5976
6002
  "args": {
5977
- "alias": {
5978
- "description": "Face alias",
5979
- "name": "alias",
6003
+ "team_id": {
6004
+ "description": "Team ID",
6005
+ "name": "team_id",
5980
6006
  "required": true
5981
6007
  }
5982
6008
  },
5983
- "description": "Replace all tags on a face",
6009
+ "description": "Replace all tags on a team",
5984
6010
  "flags": {
5985
6011
  "json": {
5986
6012
  "description": "Format output as json.",
@@ -6024,7 +6050,7 @@
6024
6050
  },
6025
6051
  "hasDynamicHelp": false,
6026
6052
  "hiddenAliases": [],
6027
- "id": "face:tag:set",
6053
+ "id": "team:tag:set",
6028
6054
  "pluginAlias": "faces-cli",
6029
6055
  "pluginName": "faces-cli",
6030
6056
  "pluginType": "core",
@@ -6034,11 +6060,11 @@
6034
6060
  "relativePath": [
6035
6061
  "dist",
6036
6062
  "commands",
6037
- "face",
6063
+ "team",
6038
6064
  "tag",
6039
6065
  "set.js"
6040
6066
  ]
6041
6067
  }
6042
6068
  },
6043
- "version": "1.7.0"
6069
+ "version": "1.7.1"
6044
6070
  }