@formant/formant-cli 0.4.4 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -307,6 +307,120 @@
307
307
  "list.js"
308
308
  ]
309
309
  },
310
+ "fleet:get": {
311
+ "aliases": [],
312
+ "args": {
313
+ "id": {
314
+ "description": "Fleet (group) ID (UUID)",
315
+ "name": "id",
316
+ "required": true
317
+ }
318
+ },
319
+ "description": "Get detailed information about a device group (fleet).\n\nShows the full fleet configuration including member devices and settings.",
320
+ "examples": [
321
+ "<%= config.bin %> fleet get <fleet-id>",
322
+ "<%= config.bin %> fleet get <fleet-id> --json"
323
+ ],
324
+ "flags": {
325
+ "json": {
326
+ "description": "Format output as json.",
327
+ "helpGroup": "GLOBAL",
328
+ "name": "json",
329
+ "allowNo": false,
330
+ "type": "boolean"
331
+ },
332
+ "dev": {
333
+ "description": "Target the dev environment",
334
+ "exclusive": [
335
+ "stage"
336
+ ],
337
+ "helpGroup": "GLOBAL",
338
+ "name": "dev",
339
+ "allowNo": false,
340
+ "type": "boolean"
341
+ },
342
+ "stage": {
343
+ "description": "Target the stage environment",
344
+ "exclusive": [
345
+ "dev"
346
+ ],
347
+ "helpGroup": "GLOBAL",
348
+ "name": "stage",
349
+ "allowNo": false,
350
+ "type": "boolean"
351
+ }
352
+ },
353
+ "hasDynamicHelp": false,
354
+ "hiddenAliases": [],
355
+ "id": "fleet:get",
356
+ "pluginAlias": "@formant/formant-cli",
357
+ "pluginName": "@formant/formant-cli",
358
+ "pluginType": "core",
359
+ "strict": true,
360
+ "summary": "Get fleet details",
361
+ "enableJsonFlag": true,
362
+ "isESM": true,
363
+ "relativePath": [
364
+ "dist",
365
+ "commands",
366
+ "fleet",
367
+ "get.js"
368
+ ]
369
+ },
370
+ "fleet:list": {
371
+ "aliases": [],
372
+ "args": {},
373
+ "description": "List all device groups (fleets) in your organization.\n\nDevice groups allow you to organize and manage sets of devices together.",
374
+ "examples": [
375
+ "<%= config.bin %> fleet list",
376
+ "<%= config.bin %> fleet list --json"
377
+ ],
378
+ "flags": {
379
+ "json": {
380
+ "description": "Format output as json.",
381
+ "helpGroup": "GLOBAL",
382
+ "name": "json",
383
+ "allowNo": false,
384
+ "type": "boolean"
385
+ },
386
+ "dev": {
387
+ "description": "Target the dev environment",
388
+ "exclusive": [
389
+ "stage"
390
+ ],
391
+ "helpGroup": "GLOBAL",
392
+ "name": "dev",
393
+ "allowNo": false,
394
+ "type": "boolean"
395
+ },
396
+ "stage": {
397
+ "description": "Target the stage environment",
398
+ "exclusive": [
399
+ "dev"
400
+ ],
401
+ "helpGroup": "GLOBAL",
402
+ "name": "stage",
403
+ "allowNo": false,
404
+ "type": "boolean"
405
+ }
406
+ },
407
+ "hasDynamicHelp": false,
408
+ "hiddenAliases": [],
409
+ "id": "fleet:list",
410
+ "pluginAlias": "@formant/formant-cli",
411
+ "pluginName": "@formant/formant-cli",
412
+ "pluginType": "core",
413
+ "strict": true,
414
+ "summary": "List device groups",
415
+ "enableJsonFlag": true,
416
+ "isESM": true,
417
+ "relativePath": [
418
+ "dist",
419
+ "commands",
420
+ "fleet",
421
+ "list.js"
422
+ ]
423
+ },
310
424
  "event-trigger:get": {
311
425
  "aliases": [],
312
426
  "args": {
@@ -757,19 +871,19 @@
757
871
  "send.js"
758
872
  ]
759
873
  },
760
- "fleet:get": {
874
+ "kv:get": {
761
875
  "aliases": [],
762
876
  "args": {
763
- "id": {
764
- "description": "Fleet (group) ID (UUID)",
765
- "name": "id",
877
+ "key": {
878
+ "description": "Key to retrieve",
879
+ "name": "key",
766
880
  "required": true
767
881
  }
768
882
  },
769
- "description": "Get detailed information about a device group (fleet).\n\nShows the full fleet configuration including member devices and settings.",
883
+ "description": "Get a value from the key-value store.\n\nThe key-value store allows devices and applications to store metadata.",
770
884
  "examples": [
771
- "<%= config.bin %> fleet get <fleet-id>",
772
- "<%= config.bin %> fleet get <fleet-id> --json"
885
+ "<%= config.bin %> kv get my-key",
886
+ "<%= config.bin %> kv get my-key --json"
773
887
  ],
774
888
  "flags": {
775
889
  "json": {
@@ -802,28 +916,30 @@
802
916
  },
803
917
  "hasDynamicHelp": false,
804
918
  "hiddenAliases": [],
805
- "id": "fleet:get",
919
+ "id": "kv:get",
806
920
  "pluginAlias": "@formant/formant-cli",
807
921
  "pluginName": "@formant/formant-cli",
808
922
  "pluginType": "core",
809
923
  "strict": true,
810
- "summary": "Get fleet details",
924
+ "summary": "Get key-value",
811
925
  "enableJsonFlag": true,
812
926
  "isESM": true,
813
927
  "relativePath": [
814
928
  "dist",
815
929
  "commands",
816
- "fleet",
930
+ "kv",
817
931
  "get.js"
818
932
  ]
819
933
  },
820
- "fleet:list": {
934
+ "kv:list": {
821
935
  "aliases": [],
822
936
  "args": {},
823
- "description": "List all device groups (fleets) in your organization.\n\nDevice groups allow you to organize and manage sets of devices together.",
937
+ "description": "List all keys in the key-value store.\n\nShows all stored keys in the organization's key-value store. Use --prefix to filter\nkeys that start with a specific prefix, or --keys to query specific keys.",
824
938
  "examples": [
825
- "<%= config.bin %> fleet list",
826
- "<%= config.bin %> fleet list --json"
939
+ "<%= config.bin %> kv list",
940
+ "<%= config.bin %> kv list --prefix config",
941
+ "<%= config.bin %> kv list --keys key1 --keys key2 --keys key3",
942
+ "<%= config.bin %> kv list --json"
827
943
  ],
828
944
  "flags": {
829
945
  "json": {
@@ -852,38 +968,59 @@
852
968
  "name": "stage",
853
969
  "allowNo": false,
854
970
  "type": "boolean"
971
+ },
972
+ "keys": {
973
+ "char": "k",
974
+ "description": "Specific keys to query (can be specified multiple times)",
975
+ "name": "keys",
976
+ "hasDynamicHelp": false,
977
+ "multiple": true,
978
+ "type": "option"
979
+ },
980
+ "prefix": {
981
+ "char": "p",
982
+ "description": "Filter keys by prefix",
983
+ "name": "prefix",
984
+ "hasDynamicHelp": false,
985
+ "multiple": false,
986
+ "type": "option"
855
987
  }
856
988
  },
857
989
  "hasDynamicHelp": false,
858
990
  "hiddenAliases": [],
859
- "id": "fleet:list",
991
+ "id": "kv:list",
860
992
  "pluginAlias": "@formant/formant-cli",
861
993
  "pluginName": "@formant/formant-cli",
862
994
  "pluginType": "core",
863
995
  "strict": true,
864
- "summary": "List device groups",
996
+ "summary": "List key-value keys",
865
997
  "enableJsonFlag": true,
866
998
  "isESM": true,
867
999
  "relativePath": [
868
1000
  "dist",
869
1001
  "commands",
870
- "fleet",
1002
+ "kv",
871
1003
  "list.js"
872
1004
  ]
873
1005
  },
874
- "device:config": {
1006
+ "kv:set": {
875
1007
  "aliases": [],
876
1008
  "args": {
877
- "id": {
878
- "description": "Device ID (UUID)",
879
- "name": "id",
1009
+ "key": {
1010
+ "description": "Key to set",
1011
+ "name": "key",
1012
+ "required": true
1013
+ },
1014
+ "value": {
1015
+ "description": "Value to store (JSON string)",
1016
+ "name": "value",
880
1017
  "required": true
881
1018
  }
882
1019
  },
883
- "description": "Get the device configuration including stream definitions.\n\nShows the device's current configuration including telemetry streams, commands,\nand other settings.",
1020
+ "description": "Set a value in the key-value store.\n\nStores a value associated with a key. The value should be a JSON string.",
884
1021
  "examples": [
885
- "<%= config.bin %> device config <device-id>",
886
- "<%= config.bin %> device config <device-id> --json"
1022
+ "<%= config.bin %> kv set my-key '{\"data\": \"value\"}'",
1023
+ "<%= config.bin %> kv set config '{\"setting\": true}'"
887
1024
  ],
888
1025
  "flags": {
889
1026
  "json": {
@@ -916,35 +1053,28 @@
916
1053
  },
917
1054
  "hasDynamicHelp": false,
918
1055
  "hiddenAliases": [],
919
- "id": "device:config",
1056
+ "id": "kv:set",
920
1057
  "pluginAlias": "@formant/formant-cli",
921
1058
  "pluginName": "@formant/formant-cli",
922
1059
  "pluginType": "core",
923
1060
  "strict": true,
924
- "summary": "Get device configuration",
1061
+ "summary": "Set key-value",
925
1062
  "enableJsonFlag": true,
926
1063
  "isESM": true,
927
1064
  "relativePath": [
928
1065
  "dist",
929
1066
  "commands",
930
- "device",
931
- "config.js"
1067
+ "kv",
1068
+ "set.js"
932
1069
  ]
933
1070
  },
934
- "device:create": {
1071
+ "org:get": {
935
1072
  "aliases": [],
936
- "args": {
937
- "name": {
938
- "description": "Name for the new device",
939
- "name": "name",
940
- "required": true
941
- }
942
- },
943
- "description": "Create a new device in your fleet.\n\nThe device is created as enabled by default. You can optionally specify tags.",
1073
+ "args": {},
1074
+ "description": "Get information about your organization.\n\nDisplays the organization associated with your authenticated account.\nNo ID is needed — it is resolved automatically from your credentials.",
944
1075
  "examples": [
945
- "<%= config.bin %> device create my-robot",
946
- "<%= config.bin %> device create my-robot --tag location=warehouse --tag env=prod",
947
- "<%= config.bin %> device create my-robot --json"
1076
+ "<%= config.bin %> org get",
1077
+ "<%= config.bin %> org get --json"
948
1078
  ],
949
1079
  "flags": {
950
1080
  "json": {
@@ -973,46 +1103,34 @@
973
1103
  "name": "stage",
974
1104
  "allowNo": false,
975
1105
  "type": "boolean"
976
- },
977
- "tag": {
978
- "char": "t",
979
- "description": "Tag to apply (key=value), can be specified multiple times",
980
- "name": "tag",
981
- "hasDynamicHelp": false,
982
- "multiple": true,
983
- "type": "option"
984
1106
  }
985
1107
  },
986
1108
  "hasDynamicHelp": false,
987
1109
  "hiddenAliases": [],
988
- "id": "device:create",
1110
+ "id": "org:get",
989
1111
  "pluginAlias": "@formant/formant-cli",
990
1112
  "pluginName": "@formant/formant-cli",
991
1113
  "pluginType": "core",
992
1114
  "strict": true,
993
- "summary": "Create a new device",
1115
+ "summary": "Get your organization",
994
1116
  "enableJsonFlag": true,
995
1117
  "isESM": true,
996
1118
  "relativePath": [
997
1119
  "dist",
998
1120
  "commands",
999
- "device",
1000
- "create.js"
1121
+ "org",
1122
+ "get.js"
1001
1123
  ]
1002
1124
  },
1003
- "device:delete": {
1125
+ "org:update": {
1004
1126
  "aliases": [],
1005
- "args": {
1006
- "id": {
1007
- "description": "Device ID (UUID)",
1008
- "name": "id",
1009
- "required": true
1010
- }
1011
- },
1012
- "description": "Delete (disable) a device from your fleet.\n\nThis performs a soft-delete by disabling the device. The device and its telemetry\nhistory are preserved but it will no longer appear in device listings.",
1127
+ "args": {},
1128
+ "description": "Update your organization's details.\n\nAt least one of --name or --description must be provided.",
1013
1129
  "examples": [
1014
- "<%= config.bin %> device delete <device-id>",
1015
- "<%= config.bin %> device delete <device-id> --json"
1130
+ "<%= config.bin %> org update --name \"My Fleet\"",
1131
+ "<%= config.bin %> org update --description \"Production robot fleet\"",
1132
+ "<%= config.bin %> org update --name \"My Fleet\" --description \"Production robot fleet\"",
1133
+ "<%= config.bin %> org update --name \"My Fleet\" --json"
1016
1134
  ],
1017
1135
  "flags": {
1018
1136
  "json": {
@@ -1041,417 +1159,50 @@
1041
1159
  "name": "stage",
1042
1160
  "allowNo": false,
1043
1161
  "type": "boolean"
1044
- }
1045
- },
1046
- "hasDynamicHelp": false,
1047
- "hiddenAliases": [],
1048
- "id": "device:delete",
1049
- "pluginAlias": "@formant/formant-cli",
1050
- "pluginName": "@formant/formant-cli",
1051
- "pluginType": "core",
1052
- "strict": true,
1053
- "summary": "Delete (disable) a device",
1054
- "enableJsonFlag": true,
1055
- "isESM": true,
1056
- "relativePath": [
1057
- "dist",
1058
- "commands",
1059
- "device",
1060
- "delete.js"
1061
- ]
1062
- },
1063
- "device:get": {
1064
- "aliases": [],
1065
- "args": {
1066
- "id": {
1067
- "description": "Device ID (UUID)",
1068
- "name": "id",
1069
- "required": true
1070
- }
1071
- },
1072
- "description": "Get detailed information about a specific device by its ID.",
1073
- "examples": [
1074
- "<%= config.bin %> device get <device-id>",
1075
- "<%= config.bin %> device get <device-id> --json"
1076
- ],
1077
- "flags": {
1078
- "json": {
1079
- "description": "Format output as json.",
1080
- "helpGroup": "GLOBAL",
1081
- "name": "json",
1082
- "allowNo": false,
1083
- "type": "boolean"
1084
- },
1085
- "dev": {
1086
- "description": "Target the dev environment",
1087
- "exclusive": [
1088
- "stage"
1089
- ],
1090
- "helpGroup": "GLOBAL",
1091
- "name": "dev",
1092
- "allowNo": false,
1093
- "type": "boolean"
1094
- },
1095
- "stage": {
1096
- "description": "Target the stage environment",
1097
- "exclusive": [
1098
- "dev"
1099
- ],
1100
- "helpGroup": "GLOBAL",
1101
- "name": "stage",
1102
- "allowNo": false,
1103
- "type": "boolean"
1104
- }
1105
- },
1106
- "hasDynamicHelp": false,
1107
- "hiddenAliases": [],
1108
- "id": "device:get",
1109
- "pluginAlias": "@formant/formant-cli",
1110
- "pluginName": "@formant/formant-cli",
1111
- "pluginType": "core",
1112
- "strict": true,
1113
- "summary": "Get a device by ID",
1114
- "enableJsonFlag": true,
1115
- "isESM": true,
1116
- "relativePath": [
1117
- "dist",
1118
- "commands",
1119
- "device",
1120
- "get.js"
1121
- ]
1122
- },
1123
- "device:list": {
1124
- "aliases": [],
1125
- "args": {},
1126
- "description": "List robots and sensors in your fleet. Shows only online devices by default.\n\nUse --include-offline to include offline devices. Use --with-data to show only\ndevices that have ingested data. Each device is enriched with data-based last\nseen timestamp and datapoint count from analytics.",
1127
- "examples": [
1128
- "<%= config.bin %> device list",
1129
- "<%= config.bin %> device list --include-offline",
1130
- "<%= config.bin %> device list --with-data",
1131
- "<%= config.bin %> device list --with-data --days 90",
1132
- "<%= config.bin %> device list --include-offline --limit 100",
1133
- "<%= config.bin %> device list --tag location=warehouse",
1134
- "<%= config.bin %> device list --name robot --dev --json"
1135
- ],
1136
- "flags": {
1137
- "json": {
1138
- "description": "Format output as json.",
1139
- "helpGroup": "GLOBAL",
1140
- "name": "json",
1141
- "allowNo": false,
1142
- "type": "boolean"
1143
- },
1144
- "dev": {
1145
- "description": "Target the dev environment",
1146
- "exclusive": [
1147
- "stage"
1148
- ],
1149
- "helpGroup": "GLOBAL",
1150
- "name": "dev",
1151
- "allowNo": false,
1152
- "type": "boolean"
1153
- },
1154
- "stage": {
1155
- "description": "Target the stage environment",
1156
- "exclusive": [
1157
- "dev"
1158
- ],
1159
- "helpGroup": "GLOBAL",
1160
- "name": "stage",
1161
- "allowNo": false,
1162
- "type": "boolean"
1163
- },
1164
- "include-offline": {
1165
- "char": "a",
1166
- "description": "Include offline devices",
1167
- "name": "include-offline",
1168
- "allowNo": false,
1169
- "type": "boolean"
1170
- },
1171
- "days": {
1172
- "description": "How many days back to search for last seen data",
1173
- "name": "days",
1174
- "default": 30,
1175
- "hasDynamicHelp": false,
1176
- "multiple": false,
1177
- "type": "option"
1178
1162
  },
1179
- "limit": {
1180
- "char": "l",
1181
- "description": "Maximum number of devices to return",
1182
- "name": "limit",
1183
- "default": 50,
1163
+ "description": {
1164
+ "char": "d",
1165
+ "description": "New description for the organization",
1166
+ "name": "description",
1184
1167
  "hasDynamicHelp": false,
1185
1168
  "multiple": false,
1186
1169
  "type": "option"
1187
1170
  },
1188
1171
  "name": {
1189
1172
  "char": "n",
1190
- "description": "Filter devices by name (search)",
1173
+ "description": "New name for the organization",
1191
1174
  "name": "name",
1192
1175
  "hasDynamicHelp": false,
1193
1176
  "multiple": false,
1194
1177
  "type": "option"
1195
- },
1196
- "with-data": {
1197
- "char": "w",
1198
- "description": "Only show devices that have data in the last --days window",
1199
- "name": "with-data",
1200
- "allowNo": false,
1201
- "type": "boolean"
1202
- },
1203
- "tag": {
1204
- "char": "t",
1205
- "description": "Filter by tag (key=value), can be specified multiple times",
1206
- "name": "tag",
1207
- "hasDynamicHelp": false,
1208
- "multiple": true,
1209
- "type": "option"
1210
1178
  }
1211
1179
  },
1212
1180
  "hasDynamicHelp": false,
1213
1181
  "hiddenAliases": [],
1214
- "id": "device:list",
1215
- "pluginAlias": "@formant/formant-cli",
1216
- "pluginName": "@formant/formant-cli",
1217
- "pluginType": "core",
1218
- "strict": true,
1219
- "summary": "List robots and sensors in your fleet",
1220
- "enableJsonFlag": true,
1221
- "isESM": true,
1222
- "relativePath": [
1223
- "dist",
1224
- "commands",
1225
- "device",
1226
- "list.js"
1227
- ]
1228
- },
1229
- "device:rename": {
1230
- "aliases": [],
1231
- "args": {
1232
- "id": {
1233
- "description": "Device ID (UUID)",
1234
- "name": "id",
1235
- "required": true
1236
- },
1237
- "name": {
1238
- "description": "New name for the device",
1239
- "name": "name",
1240
- "required": true
1241
- }
1242
- },
1243
- "description": "Rename a device by updating its name.",
1244
- "examples": [
1245
- "<%= config.bin %> device rename <device-id> new-robot-name",
1246
- "<%= config.bin %> device rename <device-id> new-robot-name --json"
1247
- ],
1248
- "flags": {
1249
- "json": {
1250
- "description": "Format output as json.",
1251
- "helpGroup": "GLOBAL",
1252
- "name": "json",
1253
- "allowNo": false,
1254
- "type": "boolean"
1255
- },
1256
- "dev": {
1257
- "description": "Target the dev environment",
1258
- "exclusive": [
1259
- "stage"
1260
- ],
1261
- "helpGroup": "GLOBAL",
1262
- "name": "dev",
1263
- "allowNo": false,
1264
- "type": "boolean"
1265
- },
1266
- "stage": {
1267
- "description": "Target the stage environment",
1268
- "exclusive": [
1269
- "dev"
1270
- ],
1271
- "helpGroup": "GLOBAL",
1272
- "name": "stage",
1273
- "allowNo": false,
1274
- "type": "boolean"
1275
- }
1276
- },
1277
- "hasDynamicHelp": false,
1278
- "hiddenAliases": [],
1279
- "id": "device:rename",
1280
- "pluginAlias": "@formant/formant-cli",
1281
- "pluginName": "@formant/formant-cli",
1282
- "pluginType": "core",
1283
- "strict": true,
1284
- "summary": "Rename a device",
1285
- "enableJsonFlag": true,
1286
- "isESM": true,
1287
- "relativePath": [
1288
- "dist",
1289
- "commands",
1290
- "device",
1291
- "rename.js"
1292
- ]
1293
- },
1294
- "device:streams": {
1295
- "aliases": [],
1296
- "args": {
1297
- "id": {
1298
- "description": "Device ID (UUID)",
1299
- "name": "id",
1300
- "required": true
1301
- }
1302
- },
1303
- "description": "List telemetry streams for a device with data presence.\n\nShows streams from the device configuration and any streams discovered from\ningested data. Each stream is enriched with presence info from the analytics\nbackend: data point count, last seen time, and a freshness indicator\n(active/recent/stale/dormant).\n\nUnconfigured streams (discovered from data only) are marked with SOURCE \"data\".",
1304
- "examples": [
1305
- "<%= config.bin %> device streams <device-id>",
1306
- "<%= config.bin %> device streams <device-id> --with-data",
1307
- "<%= config.bin %> device streams <device-id> --with-data --days 30",
1308
- "<%= config.bin %> device streams <device-id> --json"
1309
- ],
1310
- "flags": {
1311
- "json": {
1312
- "description": "Format output as json.",
1313
- "helpGroup": "GLOBAL",
1314
- "name": "json",
1315
- "allowNo": false,
1316
- "type": "boolean"
1317
- },
1318
- "dev": {
1319
- "description": "Target the dev environment",
1320
- "exclusive": [
1321
- "stage"
1322
- ],
1323
- "helpGroup": "GLOBAL",
1324
- "name": "dev",
1325
- "allowNo": false,
1326
- "type": "boolean"
1327
- },
1328
- "stage": {
1329
- "description": "Target the stage environment",
1330
- "exclusive": [
1331
- "dev"
1332
- ],
1333
- "helpGroup": "GLOBAL",
1334
- "name": "stage",
1335
- "allowNo": false,
1336
- "type": "boolean"
1337
- },
1338
- "days": {
1339
- "description": "How many days back to look for stream data presence",
1340
- "name": "days",
1341
- "default": 7,
1342
- "hasDynamicHelp": false,
1343
- "multiple": false,
1344
- "type": "option"
1345
- },
1346
- "with-data": {
1347
- "char": "w",
1348
- "description": "Only show streams that have data in the --days window",
1349
- "name": "with-data",
1350
- "allowNo": false,
1351
- "type": "boolean"
1352
- }
1353
- },
1354
- "hasDynamicHelp": false,
1355
- "hiddenAliases": [],
1356
- "id": "device:streams",
1357
- "pluginAlias": "@formant/formant-cli",
1358
- "pluginName": "@formant/formant-cli",
1359
- "pluginType": "core",
1360
- "strict": true,
1361
- "summary": "List device streams with data presence",
1362
- "enableJsonFlag": true,
1363
- "isESM": true,
1364
- "relativePath": [
1365
- "dist",
1366
- "commands",
1367
- "device",
1368
- "streams.js"
1369
- ]
1370
- },
1371
- "device:tag": {
1372
- "aliases": [],
1373
- "args": {
1374
- "id": {
1375
- "description": "Device ID (UUID)",
1376
- "name": "id",
1377
- "required": true
1378
- }
1379
- },
1380
- "description": "Add or update tags on a device.\n\nTags are key-value pairs. If a tag key already exists, its value will be updated.\nSpecify one or more tags with --tag key=value.",
1381
- "examples": [
1382
- "<%= config.bin %> device tag <device-id> --tag location=warehouse",
1383
- "<%= config.bin %> device tag <device-id> --tag env=prod --tag region=us-east",
1384
- "<%= config.bin %> device tag <device-id> --tag location=factory --json"
1385
- ],
1386
- "flags": {
1387
- "json": {
1388
- "description": "Format output as json.",
1389
- "helpGroup": "GLOBAL",
1390
- "name": "json",
1391
- "allowNo": false,
1392
- "type": "boolean"
1393
- },
1394
- "dev": {
1395
- "description": "Target the dev environment",
1396
- "exclusive": [
1397
- "stage"
1398
- ],
1399
- "helpGroup": "GLOBAL",
1400
- "name": "dev",
1401
- "allowNo": false,
1402
- "type": "boolean"
1403
- },
1404
- "stage": {
1405
- "description": "Target the stage environment",
1406
- "exclusive": [
1407
- "dev"
1408
- ],
1409
- "helpGroup": "GLOBAL",
1410
- "name": "stage",
1411
- "allowNo": false,
1412
- "type": "boolean"
1413
- },
1414
- "tag": {
1415
- "char": "t",
1416
- "description": "Tag to add or update (key=value), can be specified multiple times",
1417
- "name": "tag",
1418
- "required": true,
1419
- "hasDynamicHelp": false,
1420
- "multiple": true,
1421
- "type": "option"
1422
- }
1423
- },
1424
- "hasDynamicHelp": false,
1425
- "hiddenAliases": [],
1426
- "id": "device:tag",
1182
+ "id": "org:update",
1427
1183
  "pluginAlias": "@formant/formant-cli",
1428
1184
  "pluginName": "@formant/formant-cli",
1429
1185
  "pluginType": "core",
1430
1186
  "strict": true,
1431
- "summary": "Add or update tags on a device",
1187
+ "summary": "Update your organization",
1432
1188
  "enableJsonFlag": true,
1433
1189
  "isESM": true,
1434
1190
  "relativePath": [
1435
1191
  "dist",
1436
- "commands",
1437
- "device",
1438
- "tag.js"
1439
- ]
1440
- },
1441
- "device:untag": {
1442
- "aliases": [],
1443
- "args": {
1444
- "id": {
1445
- "description": "Device ID (UUID)",
1446
- "name": "id",
1447
- "required": true
1448
- }
1449
- },
1450
- "description": "Remove tags from a device.\n\nSpecify one or more tag keys to remove with --key.",
1192
+ "commands",
1193
+ "org",
1194
+ "update.js"
1195
+ ]
1196
+ },
1197
+ "ingest:batch": {
1198
+ "aliases": [],
1199
+ "args": {},
1200
+ "description": "Ingest multiple data points in a single batch request.\n\nReads a JSON file (or stdin) containing a batch ingestion payload and sends all data points\nin a single API request. This is more efficient than sending individual data points when you\nhave multiple values to ingest.\n\nINPUT FORMAT:\nThe input JSON must have the following structure:\n{\n \"items\": [\n {\n \"deviceId\": \"device-uuid\", // Required: Device ID (UUID)\n \"name\": \"stream-name\", // Required: Stream name\n \"type\": \"numeric|text|json|...\", // Required: Data type (see below)\n \"tags\": {\"key\": \"value\"}, // Optional: Tags object (string key-value pairs)\n \"points\": [[timestamp_ms, value]] // Required: Array of [timestamp, value] pairs\n }\n ]\n}\n\nSUPPORTED TYPES AND VALUE FORMATS:\n- numeric: Number value\n Example: \"points\": [[1708272000000, 42.5]]\n\n- text: String value\n Example: \"points\": [[1708272000000, \"hello world\"]]\n\n- json: JSON object encoded as string\n Example: \"points\": [[1708272000000, \"{\\\"x\\\":10,\\\"y\\\":20}\"]]\n\n- image: Object with url (required), size and annotations (optional)\n Example: \"points\": [[1708272000000, {\"url\": \"https://example.com/img.jpg\", \"size\": 102400}]]\n\n- video: Object with url, duration, mimeType (required), size (optional)\n Example: \"points\": [[1708272000000, {\"url\": \"https://example.com/vid.mp4\", \"duration\": 30000, \"mimeType\": \"video/mp4\"}]]\n\n- bitset: Object with keys array and values array (1-1000 pairs)\n Example: \"points\": [[1708272000000, {\"keys\": [\"door\", \"window\"], \"values\": [true, false]}]]\n\n- health: Object with status (required) and clockSkewMs (optional)\n Example: \"points\": [[1708272000000, {\"status\": \"operational\", \"clockSkewMs\": 150}]]\n Valid status values: \"unknown\", \"operational\", \"offline\", \"error\"\n\nEach item can have multiple points (timestamp/value pairs) for the same stream.\nTimestamps are Unix milliseconds (use Date.now() for current time).",
1451
1201
  "examples": [
1452
- "<%= config.bin %> device untag <device-id> --key location",
1453
- "<%= config.bin %> device untag <device-id> --key env --key region",
1454
- "<%= config.bin %> device untag <device-id> --key location --json"
1202
+ "<%= config.bin %> ingest batch --file data.json",
1203
+ "<%= config.bin %> ingest batch --stdin < data.json",
1204
+ "cat payload.json | <%= config.bin %> ingest batch --stdin",
1205
+ "# Example payload.json with multiple types:\n{\n \"items\": [\n {\n \"deviceId\": \"abc-123\",\n \"name\": \"battery_level\",\n \"type\": \"numeric\",\n \"tags\": {\"env\": \"prod\"},\n \"points\": [[1708272000000, 42.5], [1708272060000, 41.8]]\n },\n {\n \"deviceId\": \"abc-123\",\n \"name\": \"status\",\n \"type\": \"text\",\n \"tags\": {\"env\": \"prod\"},\n \"points\": [[1708272000000, \"operational\"]]\n },\n {\n \"deviceId\": \"abc-123\",\n \"name\": \"health\",\n \"type\": \"health\",\n \"tags\": {},\n \"points\": [[1708272000000, {\"status\": \"operational\"}]]\n }\n ]\n}"
1455
1206
  ],
1456
1207
  "flags": {
1457
1208
  "json": {
@@ -1481,46 +1232,52 @@
1481
1232
  "allowNo": false,
1482
1233
  "type": "boolean"
1483
1234
  },
1484
- "key": {
1485
- "char": "k",
1486
- "description": "Tag key to remove, can be specified multiple times",
1487
- "name": "key",
1488
- "required": true,
1235
+ "file": {
1236
+ "char": "f",
1237
+ "description": "Path to JSON file containing batch payload",
1238
+ "exclusive": [
1239
+ "stdin"
1240
+ ],
1241
+ "name": "file",
1489
1242
  "hasDynamicHelp": false,
1490
- "multiple": true,
1243
+ "multiple": false,
1491
1244
  "type": "option"
1245
+ },
1246
+ "stdin": {
1247
+ "description": "Read JSON payload from stdin",
1248
+ "exclusive": [
1249
+ "file"
1250
+ ],
1251
+ "name": "stdin",
1252
+ "allowNo": false,
1253
+ "type": "boolean"
1492
1254
  }
1493
1255
  },
1494
1256
  "hasDynamicHelp": false,
1495
1257
  "hiddenAliases": [],
1496
- "id": "device:untag",
1258
+ "id": "ingest:batch",
1497
1259
  "pluginAlias": "@formant/formant-cli",
1498
1260
  "pluginName": "@formant/formant-cli",
1499
1261
  "pluginType": "core",
1500
1262
  "strict": true,
1501
- "summary": "Remove tags from a device",
1263
+ "summary": "Ingest batch data from file or stdin",
1502
1264
  "enableJsonFlag": true,
1503
1265
  "isESM": true,
1504
1266
  "relativePath": [
1505
1267
  "dist",
1506
1268
  "commands",
1507
- "device",
1508
- "untag.js"
1269
+ "ingest",
1270
+ "batch.js"
1509
1271
  ]
1510
1272
  },
1511
- "kv:get": {
1273
+ "ingest:bitset": {
1512
1274
  "aliases": [],
1513
- "args": {
1514
- "key": {
1515
- "description": "Key to retrieve",
1516
- "name": "key",
1517
- "required": true
1518
- }
1519
- },
1520
- "description": "Get a value from the key-value store.\n\nThe key-value store allows devices and applications to store metadata.",
1275
+ "args": {},
1276
+ "description": "Ingest a bitset data point to a device stream.\n\nSends a bitset (array of named boolean values) to the specified device stream. A bitset\nconsists of parallel arrays of keys (strings) and values (booleans).\n\nBitsets are useful for representing sets of binary states, flags, or boolean sensor readings\nwhere you have multiple named on/off states.\n\nConstraints:\n- Must have 1-1000 key/value pairs\n- Keys must be max 255 characters each\n- Keys and values arrays must have the same length",
1521
1277
  "examples": [
1522
- "<%= config.bin %> kv get my-key",
1523
- "<%= config.bin %> kv get my-key --json"
1278
+ "<%= config.bin %> ingest bitset --device <device-id> --stream sensors --keys \"door,window,motion\" --values \"true,false,true\"",
1279
+ "<%= config.bin %> ingest bitset --device <device-id> --stream flags --keys \"active,paused,error\" --values \"true,false,false\" --tag system=main",
1280
+ "<%= config.bin %> ingest bitset --device <device-id> --stream states --keys \"a,b\" --values \"false,true\""
1524
1281
  ],
1525
1282
  "flags": {
1526
1283
  "json": {
@@ -1549,34 +1306,84 @@
1549
1306
  "name": "stage",
1550
1307
  "allowNo": false,
1551
1308
  "type": "boolean"
1309
+ },
1310
+ "device": {
1311
+ "char": "d",
1312
+ "description": "Device ID (UUID)",
1313
+ "name": "device",
1314
+ "required": true,
1315
+ "hasDynamicHelp": false,
1316
+ "multiple": false,
1317
+ "type": "option"
1318
+ },
1319
+ "stream": {
1320
+ "char": "s",
1321
+ "description": "Stream name",
1322
+ "name": "stream",
1323
+ "required": true,
1324
+ "hasDynamicHelp": false,
1325
+ "multiple": false,
1326
+ "type": "option"
1327
+ },
1328
+ "keys": {
1329
+ "char": "k",
1330
+ "description": "Comma-separated list of key names (1-1000 keys, max 255 chars each)",
1331
+ "name": "keys",
1332
+ "required": true,
1333
+ "hasDynamicHelp": false,
1334
+ "multiple": false,
1335
+ "type": "option"
1336
+ },
1337
+ "values": {
1338
+ "char": "v",
1339
+ "description": "Comma-separated list of boolean values (true/false, must match key count)",
1340
+ "name": "values",
1341
+ "required": true,
1342
+ "hasDynamicHelp": false,
1343
+ "multiple": false,
1344
+ "type": "option"
1345
+ },
1346
+ "tag": {
1347
+ "char": "t",
1348
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
1349
+ "name": "tag",
1350
+ "hasDynamicHelp": false,
1351
+ "multiple": true,
1352
+ "type": "option"
1353
+ },
1354
+ "timestamp": {
1355
+ "description": "Unix timestamp in milliseconds (defaults to now)",
1356
+ "name": "timestamp",
1357
+ "hasDynamicHelp": false,
1358
+ "multiple": false,
1359
+ "type": "option"
1552
1360
  }
1553
1361
  },
1554
1362
  "hasDynamicHelp": false,
1555
1363
  "hiddenAliases": [],
1556
- "id": "kv:get",
1364
+ "id": "ingest:bitset",
1557
1365
  "pluginAlias": "@formant/formant-cli",
1558
1366
  "pluginName": "@formant/formant-cli",
1559
1367
  "pluginType": "core",
1560
1368
  "strict": true,
1561
- "summary": "Get key-value",
1369
+ "summary": "Ingest bitset data",
1562
1370
  "enableJsonFlag": true,
1563
1371
  "isESM": true,
1564
1372
  "relativePath": [
1565
1373
  "dist",
1566
1374
  "commands",
1567
- "kv",
1568
- "get.js"
1375
+ "ingest",
1376
+ "bitset.js"
1569
1377
  ]
1570
1378
  },
1571
- "kv:list": {
1379
+ "ingest:health": {
1572
1380
  "aliases": [],
1573
1381
  "args": {},
1574
- "description": "List all keys in the key-value store.\n\nShows all stored keys in the organization's key-value store. Use --prefix to filter\nkeys that start with a specific prefix, or --keys to query specific keys.",
1382
+ "description": "Ingest a health status data point to a device stream.\n\nSends device health status information to the specified stream. Health data consists of:\n- status: One of \"unknown\", \"operational\", \"offline\", or \"error\"\n- clockSkewMs (optional): Clock skew in milliseconds between device and server\n\nHealth streams are used to track device operational state, system health, and time synchronization.",
1575
1383
  "examples": [
1576
- "<%= config.bin %> kv list",
1577
- "<%= config.bin %> kv list --prefix config",
1578
- "<%= config.bin %> kv list --keys key1 --keys key2 --keys key3",
1579
- "<%= config.bin %> kv list --json"
1384
+ "<%= config.bin %> ingest health --device <device-id> --stream system_health --status operational",
1385
+ "<%= config.bin %> ingest health --device <device-id> --stream health --status error --tag component=motor",
1386
+ "<%= config.bin %> ingest health --device <device-id> --stream sync --status operational --clock-skew 150"
1580
1387
  ],
1581
1388
  "flags": {
1582
1389
  "json": {
@@ -1606,18 +1413,56 @@
1606
1413
  "allowNo": false,
1607
1414
  "type": "boolean"
1608
1415
  },
1609
- "keys": {
1610
- "char": "k",
1611
- "description": "Specific keys to query (can be specified multiple times)",
1612
- "name": "keys",
1416
+ "device": {
1417
+ "char": "d",
1418
+ "description": "Device ID (UUID)",
1419
+ "name": "device",
1420
+ "required": true,
1421
+ "hasDynamicHelp": false,
1422
+ "multiple": false,
1423
+ "type": "option"
1424
+ },
1425
+ "stream": {
1426
+ "char": "s",
1427
+ "description": "Stream name",
1428
+ "name": "stream",
1429
+ "required": true,
1430
+ "hasDynamicHelp": false,
1431
+ "multiple": false,
1432
+ "type": "option"
1433
+ },
1434
+ "status": {
1435
+ "description": "Health status (unknown, operational, offline, or error)",
1436
+ "name": "status",
1437
+ "required": true,
1438
+ "hasDynamicHelp": false,
1439
+ "multiple": false,
1440
+ "options": [
1441
+ "unknown",
1442
+ "operational",
1443
+ "offline",
1444
+ "error"
1445
+ ],
1446
+ "type": "option"
1447
+ },
1448
+ "clock-skew": {
1449
+ "description": "Clock skew in milliseconds (optional)",
1450
+ "name": "clock-skew",
1451
+ "hasDynamicHelp": false,
1452
+ "multiple": false,
1453
+ "type": "option"
1454
+ },
1455
+ "tag": {
1456
+ "char": "t",
1457
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
1458
+ "name": "tag",
1613
1459
  "hasDynamicHelp": false,
1614
1460
  "multiple": true,
1615
1461
  "type": "option"
1616
1462
  },
1617
- "prefix": {
1618
- "char": "p",
1619
- "description": "Filter keys by prefix",
1620
- "name": "prefix",
1463
+ "timestamp": {
1464
+ "description": "Unix timestamp in milliseconds (defaults to now)",
1465
+ "name": "timestamp",
1621
1466
  "hasDynamicHelp": false,
1622
1467
  "multiple": false,
1623
1468
  "type": "option"
@@ -1625,39 +1470,29 @@
1625
1470
  },
1626
1471
  "hasDynamicHelp": false,
1627
1472
  "hiddenAliases": [],
1628
- "id": "kv:list",
1473
+ "id": "ingest:health",
1629
1474
  "pluginAlias": "@formant/formant-cli",
1630
1475
  "pluginName": "@formant/formant-cli",
1631
1476
  "pluginType": "core",
1632
1477
  "strict": true,
1633
- "summary": "List key-value keys",
1478
+ "summary": "Ingest health status data",
1634
1479
  "enableJsonFlag": true,
1635
1480
  "isESM": true,
1636
1481
  "relativePath": [
1637
1482
  "dist",
1638
1483
  "commands",
1639
- "kv",
1640
- "list.js"
1484
+ "ingest",
1485
+ "health.js"
1641
1486
  ]
1642
1487
  },
1643
- "kv:set": {
1488
+ "ingest:image": {
1644
1489
  "aliases": [],
1645
- "args": {
1646
- "key": {
1647
- "description": "Key to set",
1648
- "name": "key",
1649
- "required": true
1650
- },
1651
- "value": {
1652
- "description": "Value to store (JSON string)",
1653
- "name": "value",
1654
- "required": true
1655
- }
1656
- },
1657
- "description": "Set a value in the key-value store.\n\nStores a value associated with a key. The value should be a JSON string.",
1490
+ "args": {},
1491
+ "description": "Ingest an image URL to a device stream.\n\nSends an image reference (by URL) to the specified device stream. The image must be accessible\nvia HTTP/HTTPS. Formant will fetch and store the image from the provided URL.\n\nImage streams are used for camera feeds, snapshots, diagnostic images, etc.",
1658
1492
  "examples": [
1659
- "<%= config.bin %> kv set my-key '{\"data\": \"value\"}'",
1660
- "<%= config.bin %> kv set config '{\"setting\": true}'"
1493
+ "<%= config.bin %> ingest image --device <device-id> --stream camera_front --url https://example.com/image.jpg",
1494
+ "<%= config.bin %> ingest image --device <device-id> --stream snapshot --url https://example.com/snap.png --size 1024000",
1495
+ "<%= config.bin %> ingest image --device <device-id> --stream detection --url https://example.com/detect.jpg --tag frame=123"
1661
1496
  ],
1662
1497
  "flags": {
1663
1498
  "json": {
@@ -1677,43 +1512,97 @@
1677
1512
  "allowNo": false,
1678
1513
  "type": "boolean"
1679
1514
  },
1680
- "stage": {
1681
- "description": "Target the stage environment",
1682
- "exclusive": [
1683
- "dev"
1684
- ],
1685
- "helpGroup": "GLOBAL",
1686
- "name": "stage",
1687
- "allowNo": false,
1688
- "type": "boolean"
1515
+ "stage": {
1516
+ "description": "Target the stage environment",
1517
+ "exclusive": [
1518
+ "dev"
1519
+ ],
1520
+ "helpGroup": "GLOBAL",
1521
+ "name": "stage",
1522
+ "allowNo": false,
1523
+ "type": "boolean"
1524
+ },
1525
+ "device": {
1526
+ "char": "d",
1527
+ "description": "Device ID (UUID)",
1528
+ "name": "device",
1529
+ "required": true,
1530
+ "hasDynamicHelp": false,
1531
+ "multiple": false,
1532
+ "type": "option"
1533
+ },
1534
+ "stream": {
1535
+ "char": "s",
1536
+ "description": "Stream name",
1537
+ "name": "stream",
1538
+ "required": true,
1539
+ "hasDynamicHelp": false,
1540
+ "multiple": false,
1541
+ "type": "option"
1542
+ },
1543
+ "url": {
1544
+ "char": "u",
1545
+ "description": "Image URL (must be http:// or https://)",
1546
+ "name": "url",
1547
+ "required": true,
1548
+ "hasDynamicHelp": false,
1549
+ "multiple": false,
1550
+ "type": "option"
1551
+ },
1552
+ "size": {
1553
+ "description": "Image size in bytes (optional)",
1554
+ "name": "size",
1555
+ "hasDynamicHelp": false,
1556
+ "multiple": false,
1557
+ "type": "option"
1558
+ },
1559
+ "tag": {
1560
+ "char": "t",
1561
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
1562
+ "name": "tag",
1563
+ "hasDynamicHelp": false,
1564
+ "multiple": true,
1565
+ "type": "option"
1566
+ },
1567
+ "timestamp": {
1568
+ "description": "Unix timestamp in milliseconds (defaults to now)",
1569
+ "name": "timestamp",
1570
+ "hasDynamicHelp": false,
1571
+ "multiple": false,
1572
+ "type": "option"
1689
1573
  }
1690
1574
  },
1691
1575
  "hasDynamicHelp": false,
1692
1576
  "hiddenAliases": [],
1693
- "id": "kv:set",
1577
+ "id": "ingest:image",
1694
1578
  "pluginAlias": "@formant/formant-cli",
1695
1579
  "pluginName": "@formant/formant-cli",
1696
1580
  "pluginType": "core",
1697
1581
  "strict": true,
1698
- "summary": "Set key-value",
1582
+ "summary": "Ingest image data",
1699
1583
  "enableJsonFlag": true,
1700
1584
  "isESM": true,
1701
1585
  "relativePath": [
1702
1586
  "dist",
1703
1587
  "commands",
1704
- "kv",
1705
- "set.js"
1588
+ "ingest",
1589
+ "image.js"
1706
1590
  ]
1707
1591
  },
1708
- "ingest:batch": {
1592
+ "ingest:json": {
1709
1593
  "aliases": [],
1710
- "args": {},
1711
- "description": "Ingest multiple data points in a single batch request.\n\nReads a JSON file (or stdin) containing a batch ingestion payload and sends all data points\nin a single API request. This is more efficient than sending individual data points when you\nhave multiple values to ingest.\n\nINPUT FORMAT:\nThe input JSON must have the following structure:\n{\n \"items\": [\n {\n \"deviceId\": \"device-uuid\", // Required: Device ID (UUID)\n \"name\": \"stream-name\", // Required: Stream name\n \"type\": \"numeric|text|json|...\", // Required: Data type (see below)\n \"tags\": {\"key\": \"value\"}, // Optional: Tags object (string key-value pairs)\n \"points\": [[timestamp_ms, value]] // Required: Array of [timestamp, value] pairs\n }\n ]\n}\n\nSUPPORTED TYPES AND VALUE FORMATS:\n- numeric: Number value\n Example: \"points\": [[1708272000000, 42.5]]\n\n- text: String value\n Example: \"points\": [[1708272000000, \"hello world\"]]\n\n- json: JSON object encoded as string\n Example: \"points\": [[1708272000000, \"{\\\"x\\\":10,\\\"y\\\":20}\"]]\n\n- image: Object with url (required), size and annotations (optional)\n Example: \"points\": [[1708272000000, {\"url\": \"https://example.com/img.jpg\", \"size\": 102400}]]\n\n- video: Object with url, duration, mimeType (required), size (optional)\n Example: \"points\": [[1708272000000, {\"url\": \"https://example.com/vid.mp4\", \"duration\": 30000, \"mimeType\": \"video/mp4\"}]]\n\n- bitset: Object with keys array and values array (1-1000 pairs)\n Example: \"points\": [[1708272000000, {\"keys\": [\"door\", \"window\"], \"values\": [true, false]}]]\n\n- health: Object with status (required) and clockSkewMs (optional)\n Example: \"points\": [[1708272000000, {\"status\": \"operational\", \"clockSkewMs\": 150}]]\n Valid status values: \"unknown\", \"operational\", \"offline\", \"error\"\n\nEach item can have multiple points (timestamp/value pairs) for the same stream.\nTimestamps are Unix milliseconds (use Date.now() for current time).",
1594
+ "args": {
1595
+ "value": {
1596
+ "description": "JSON value to ingest (as a JSON string)",
1597
+ "name": "value",
1598
+ "required": true
1599
+ }
1600
+ },
1601
+ "description": "Ingest a JSON data point to a device stream.\n\nSends structured JSON data to the specified device stream. The value must be valid JSON.\nJSON streams are used for complex structured data like configuration objects, state machines,\nnested telemetry, etc.\n\nNote: The JSON is sent as a JSON-encoded string to Formant.",
1712
1602
  "examples": [
1713
- "<%= config.bin %> ingest batch --file data.json",
1714
- "<%= config.bin %> ingest batch --stdin < data.json",
1715
- "cat payload.json | <%= config.bin %> ingest batch --stdin",
1716
- "# Example payload.json with multiple types:\n{\n \"items\": [\n {\n \"deviceId\": \"abc-123\",\n \"name\": \"battery_level\",\n \"type\": \"numeric\",\n \"tags\": {\"env\": \"prod\"},\n \"points\": [[1708272000000, 42.5], [1708272060000, 41.8]]\n },\n {\n \"deviceId\": \"abc-123\",\n \"name\": \"status\",\n \"type\": \"text\",\n \"tags\": {\"env\": \"prod\"},\n \"points\": [[1708272000000, \"operational\"]]\n },\n {\n \"deviceId\": \"abc-123\",\n \"name\": \"health\",\n \"type\": \"health\",\n \"tags\": {},\n \"points\": [[1708272000000, {\"status\": \"operational\"}]]\n }\n ]\n}"
1603
+ "<%= config.bin %> ingest json '{\"x\":1,\"y\":2}' --device <device-id> --stream position",
1604
+ "<%= config.bin %> ingest json '{\"status\":\"active\",\"mode\":\"auto\"}' --device <device-id> --stream config",
1605
+ "<%= config.bin %> ingest json '[1,2,3,4,5]' --device <device-id> --stream array_data"
1717
1606
  ],
1718
1607
  "flags": {
1719
1608
  "json": {
@@ -1743,52 +1632,71 @@
1743
1632
  "allowNo": false,
1744
1633
  "type": "boolean"
1745
1634
  },
1746
- "file": {
1747
- "char": "f",
1748
- "description": "Path to JSON file containing batch payload",
1749
- "exclusive": [
1750
- "stdin"
1751
- ],
1752
- "name": "file",
1635
+ "device": {
1636
+ "char": "d",
1637
+ "description": "Device ID (UUID)",
1638
+ "name": "device",
1639
+ "required": true,
1753
1640
  "hasDynamicHelp": false,
1754
1641
  "multiple": false,
1755
1642
  "type": "option"
1756
1643
  },
1757
- "stdin": {
1758
- "description": "Read JSON payload from stdin",
1759
- "exclusive": [
1760
- "file"
1761
- ],
1762
- "name": "stdin",
1763
- "allowNo": false,
1764
- "type": "boolean"
1644
+ "stream": {
1645
+ "char": "s",
1646
+ "description": "Stream name",
1647
+ "name": "stream",
1648
+ "required": true,
1649
+ "hasDynamicHelp": false,
1650
+ "multiple": false,
1651
+ "type": "option"
1652
+ },
1653
+ "tag": {
1654
+ "char": "t",
1655
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
1656
+ "name": "tag",
1657
+ "hasDynamicHelp": false,
1658
+ "multiple": true,
1659
+ "type": "option"
1660
+ },
1661
+ "timestamp": {
1662
+ "description": "Unix timestamp in milliseconds (defaults to now)",
1663
+ "name": "timestamp",
1664
+ "hasDynamicHelp": false,
1665
+ "multiple": false,
1666
+ "type": "option"
1765
1667
  }
1766
1668
  },
1767
1669
  "hasDynamicHelp": false,
1768
1670
  "hiddenAliases": [],
1769
- "id": "ingest:batch",
1671
+ "id": "ingest:json",
1770
1672
  "pluginAlias": "@formant/formant-cli",
1771
1673
  "pluginName": "@formant/formant-cli",
1772
1674
  "pluginType": "core",
1773
1675
  "strict": true,
1774
- "summary": "Ingest batch data from file or stdin",
1676
+ "summary": "Ingest JSON data",
1775
1677
  "enableJsonFlag": true,
1776
1678
  "isESM": true,
1777
1679
  "relativePath": [
1778
1680
  "dist",
1779
1681
  "commands",
1780
1682
  "ingest",
1781
- "batch.js"
1683
+ "json.js"
1782
1684
  ]
1783
1685
  },
1784
- "ingest:bitset": {
1686
+ "ingest:numeric": {
1785
1687
  "aliases": [],
1786
- "args": {},
1787
- "description": "Ingest a bitset data point to a device stream.\n\nSends a bitset (array of named boolean values) to the specified device stream. A bitset\nconsists of parallel arrays of keys (strings) and values (booleans).\n\nBitsets are useful for representing sets of binary states, flags, or boolean sensor readings\nwhere you have multiple named on/off states.\n\nConstraints:\n- Must have 1-1000 key/value pairs\n- Keys must be max 255 characters each\n- Keys and values arrays must have the same length",
1688
+ "args": {
1689
+ "value": {
1690
+ "description": "Numeric value to ingest",
1691
+ "name": "value",
1692
+ "required": true
1693
+ }
1694
+ },
1695
+ "description": "Ingest a numeric data point to a device stream.\n\nSends a single numeric value to the specified device stream. The value must be a valid number.\nNumeric streams are commonly used for sensor readings like battery level, temperature, speed, etc.",
1788
1696
  "examples": [
1789
- "<%= config.bin %> ingest bitset --device <device-id> --stream sensors --keys \"door,window,motion\" --values \"true,false,true\"",
1790
- "<%= config.bin %> ingest bitset --device <device-id> --stream flags --keys \"active,paused,error\" --values \"true,false,false\" --tag system=main",
1791
- "<%= config.bin %> ingest bitset --device <device-id> --stream states --keys \"a,b\" --values \"false,true\""
1697
+ "<%= config.bin %> ingest numeric 42.5 --device <device-id> --stream battery_level",
1698
+ "<%= config.bin %> ingest numeric 98.6 --device <device-id> --stream temperature --tag unit=fahrenheit",
1699
+ "<%= config.bin %> ingest numeric 1500 --device <device-id> --stream rpm --timestamp 1700000000000"
1792
1700
  ],
1793
1701
  "flags": {
1794
1702
  "json": {
@@ -1836,24 +1744,6 @@
1836
1744
  "multiple": false,
1837
1745
  "type": "option"
1838
1746
  },
1839
- "keys": {
1840
- "char": "k",
1841
- "description": "Comma-separated list of key names (1-1000 keys, max 255 chars each)",
1842
- "name": "keys",
1843
- "required": true,
1844
- "hasDynamicHelp": false,
1845
- "multiple": false,
1846
- "type": "option"
1847
- },
1848
- "values": {
1849
- "char": "v",
1850
- "description": "Comma-separated list of boolean values (true/false, must match key count)",
1851
- "name": "values",
1852
- "required": true,
1853
- "hasDynamicHelp": false,
1854
- "multiple": false,
1855
- "type": "option"
1856
- },
1857
1747
  "tag": {
1858
1748
  "char": "t",
1859
1749
  "description": "Tag as key=value where both are strings (can be specified multiple times)",
@@ -1872,29 +1762,35 @@
1872
1762
  },
1873
1763
  "hasDynamicHelp": false,
1874
1764
  "hiddenAliases": [],
1875
- "id": "ingest:bitset",
1765
+ "id": "ingest:numeric",
1876
1766
  "pluginAlias": "@formant/formant-cli",
1877
1767
  "pluginName": "@formant/formant-cli",
1878
1768
  "pluginType": "core",
1879
1769
  "strict": true,
1880
- "summary": "Ingest bitset data",
1770
+ "summary": "Ingest numeric data",
1881
1771
  "enableJsonFlag": true,
1882
1772
  "isESM": true,
1883
1773
  "relativePath": [
1884
1774
  "dist",
1885
1775
  "commands",
1886
1776
  "ingest",
1887
- "bitset.js"
1777
+ "numeric.js"
1888
1778
  ]
1889
1779
  },
1890
- "ingest:health": {
1780
+ "ingest:text": {
1891
1781
  "aliases": [],
1892
- "args": {},
1893
- "description": "Ingest a health status data point to a device stream.\n\nSends device health status information to the specified stream. Health data consists of:\n- status: One of \"unknown\", \"operational\", \"offline\", or \"error\"\n- clockSkewMs (optional): Clock skew in milliseconds between device and server\n\nHealth streams are used to track device operational state, system health, and time synchronization.",
1782
+ "args": {
1783
+ "value": {
1784
+ "description": "Text value to ingest",
1785
+ "name": "value",
1786
+ "required": true
1787
+ }
1788
+ },
1789
+ "description": "Ingest a text data point to a device stream.\n\nSends a single text/string value to the specified device stream. Text streams are commonly\nused for logs, status messages, error messages, and other string data.",
1894
1790
  "examples": [
1895
- "<%= config.bin %> ingest health --device <device-id> --stream system_health --status operational",
1896
- "<%= config.bin %> ingest health --device <device-id> --stream health --status error --tag component=motor",
1897
- "<%= config.bin %> ingest health --device <device-id> --stream sync --status operational --clock-skew 150"
1791
+ "<%= config.bin %> ingest text \"Robot started successfully\" --device <device-id> --stream status",
1792
+ "<%= config.bin %> ingest text \"Error: sensor offline\" --device <device-id> --stream errors --tag severity=high",
1793
+ "<%= config.bin %> ingest text \"Checkpoint A reached\" --device <device-id> --stream waypoints"
1898
1794
  ],
1899
1795
  "flags": {
1900
1796
  "json": {
@@ -1942,27 +1838,6 @@
1942
1838
  "multiple": false,
1943
1839
  "type": "option"
1944
1840
  },
1945
- "status": {
1946
- "description": "Health status (unknown, operational, offline, or error)",
1947
- "name": "status",
1948
- "required": true,
1949
- "hasDynamicHelp": false,
1950
- "multiple": false,
1951
- "options": [
1952
- "unknown",
1953
- "operational",
1954
- "offline",
1955
- "error"
1956
- ],
1957
- "type": "option"
1958
- },
1959
- "clock-skew": {
1960
- "description": "Clock skew in milliseconds (optional)",
1961
- "name": "clock-skew",
1962
- "hasDynamicHelp": false,
1963
- "multiple": false,
1964
- "type": "option"
1965
- },
1966
1841
  "tag": {
1967
1842
  "char": "t",
1968
1843
  "description": "Tag as key=value where both are strings (can be specified multiple times)",
@@ -1981,29 +1856,29 @@
1981
1856
  },
1982
1857
  "hasDynamicHelp": false,
1983
1858
  "hiddenAliases": [],
1984
- "id": "ingest:health",
1859
+ "id": "ingest:text",
1985
1860
  "pluginAlias": "@formant/formant-cli",
1986
1861
  "pluginName": "@formant/formant-cli",
1987
1862
  "pluginType": "core",
1988
1863
  "strict": true,
1989
- "summary": "Ingest health status data",
1864
+ "summary": "Ingest text data",
1990
1865
  "enableJsonFlag": true,
1991
1866
  "isESM": true,
1992
1867
  "relativePath": [
1993
1868
  "dist",
1994
1869
  "commands",
1995
1870
  "ingest",
1996
- "health.js"
1871
+ "text.js"
1997
1872
  ]
1998
1873
  },
1999
- "ingest:image": {
1874
+ "ingest:video": {
2000
1875
  "aliases": [],
2001
1876
  "args": {},
2002
- "description": "Ingest an image URL to a device stream.\n\nSends an image reference (by URL) to the specified device stream. The image must be accessible\nvia HTTP/HTTPS. Formant will fetch and store the image from the provided URL.\n\nImage streams are used for camera feeds, snapshots, diagnostic images, etc.",
1877
+ "description": "Ingest a video URL to a device stream.\n\nSends a video reference (by URL) to the specified device stream. The video must be accessible\nvia HTTP/HTTPS. You must provide the video duration in milliseconds.\n\nVideo streams are used for recorded video clips, timelapse videos, event recordings, etc.\n\nThe MIME type is auto-detected from the file extension (.mp4, .webm, .mov).",
2003
1878
  "examples": [
2004
- "<%= config.bin %> ingest image --device <device-id> --stream camera_front --url https://example.com/image.jpg",
2005
- "<%= config.bin %> ingest image --device <device-id> --stream snapshot --url https://example.com/snap.png --size 1024000",
2006
- "<%= config.bin %> ingest image --device <device-id> --stream detection --url https://example.com/detect.jpg --tag frame=123"
1879
+ "<%= config.bin %> ingest video --device <device-id> --stream recordings --url https://example.com/video.mp4 --duration 5000",
1880
+ "<%= config.bin %> ingest video --device <device-id> --stream clips --url https://example.com/clip.webm --duration 3500 --size 2048000",
1881
+ "<%= config.bin %> ingest video --device <device-id> --stream event_video --url https://example.com/event.mov --duration 10000 --tag event=collision"
2007
1882
  ],
2008
1883
  "flags": {
2009
1884
  "json": {
@@ -2053,15 +1928,23 @@
2053
1928
  },
2054
1929
  "url": {
2055
1930
  "char": "u",
2056
- "description": "Image URL (must be http:// or https://)",
1931
+ "description": "Video URL (must be http:// or https://)",
2057
1932
  "name": "url",
2058
1933
  "required": true,
2059
1934
  "hasDynamicHelp": false,
2060
1935
  "multiple": false,
2061
1936
  "type": "option"
2062
1937
  },
1938
+ "duration": {
1939
+ "description": "Video duration in milliseconds (required)",
1940
+ "name": "duration",
1941
+ "required": true,
1942
+ "hasDynamicHelp": false,
1943
+ "multiple": false,
1944
+ "type": "option"
1945
+ },
2063
1946
  "size": {
2064
- "description": "Image size in bytes (optional)",
1947
+ "description": "Video size in bytes (optional)",
2065
1948
  "name": "size",
2066
1949
  "hasDynamicHelp": false,
2067
1950
  "multiple": false,
@@ -2085,35 +1968,29 @@
2085
1968
  },
2086
1969
  "hasDynamicHelp": false,
2087
1970
  "hiddenAliases": [],
2088
- "id": "ingest:image",
1971
+ "id": "ingest:video",
2089
1972
  "pluginAlias": "@formant/formant-cli",
2090
1973
  "pluginName": "@formant/formant-cli",
2091
1974
  "pluginType": "core",
2092
1975
  "strict": true,
2093
- "summary": "Ingest image data",
1976
+ "summary": "Ingest video data",
2094
1977
  "enableJsonFlag": true,
2095
1978
  "isESM": true,
2096
1979
  "relativePath": [
2097
1980
  "dist",
2098
1981
  "commands",
2099
1982
  "ingest",
2100
- "image.js"
1983
+ "video.js"
2101
1984
  ]
2102
1985
  },
2103
- "ingest:json": {
1986
+ "investigation:analytics": {
2104
1987
  "aliases": [],
2105
- "args": {
2106
- "value": {
2107
- "description": "JSON value to ingest (as a JSON string)",
2108
- "name": "value",
2109
- "required": true
2110
- }
2111
- },
2112
- "description": "Ingest a JSON data point to a device stream.\n\nSends structured JSON data to the specified device stream. The value must be valid JSON.\nJSON streams are used for complex structured data like configuration objects, state machines,\nnested telemetry, etc.\n\nNote: The JSON is sent as a JSON-encoded string to Formant.",
1988
+ "args": {},
1989
+ "description": "Get investigation analytics with time-series data.\n\nReturns aggregated analytics about investigation runs over a time range,\noptionally grouped by result type or signal type.",
2113
1990
  "examples": [
2114
- "<%= config.bin %> ingest json '{\"x\":1,\"y\":2}' --device <device-id> --stream position",
2115
- "<%= config.bin %> ingest json '{\"status\":\"active\",\"mode\":\"auto\"}' --device <device-id> --stream config",
2116
- "<%= config.bin %> ingest json '[1,2,3,4,5]' --device <device-id> --stream array_data"
1991
+ "<%= config.bin %> investigation analytics --start 2026-01-01 --end 2026-02-01",
1992
+ "<%= config.bin %> investigation analytics --start 2026-01-01 --end 2026-02-01 --interval hourly",
1993
+ "<%= config.bin %> investigation analytics --start 2026-01-01 --end 2026-02-01 --group-by resultType --json"
2117
1994
  ],
2118
1995
  "flags": {
2119
1996
  "json": {
@@ -2143,35 +2020,41 @@
2143
2020
  "allowNo": false,
2144
2021
  "type": "boolean"
2145
2022
  },
2146
- "device": {
2147
- "char": "d",
2148
- "description": "Device ID (UUID)",
2149
- "name": "device",
2023
+ "end": {
2024
+ "description": "End time (ISO 8601)",
2025
+ "name": "end",
2150
2026
  "required": true,
2151
2027
  "hasDynamicHelp": false,
2152
2028
  "multiple": false,
2153
2029
  "type": "option"
2154
2030
  },
2155
- "stream": {
2156
- "char": "s",
2157
- "description": "Stream name",
2158
- "name": "stream",
2159
- "required": true,
2031
+ "group-by": {
2032
+ "description": "Group results by",
2033
+ "name": "group-by",
2160
2034
  "hasDynamicHelp": false,
2161
2035
  "multiple": false,
2036
+ "options": [
2037
+ "resultType",
2038
+ "signalType"
2039
+ ],
2162
2040
  "type": "option"
2163
2041
  },
2164
- "tag": {
2165
- "char": "t",
2166
- "description": "Tag as key=value where both are strings (can be specified multiple times)",
2167
- "name": "tag",
2042
+ "interval": {
2043
+ "description": "Time interval for aggregation",
2044
+ "name": "interval",
2045
+ "default": "daily",
2168
2046
  "hasDynamicHelp": false,
2169
- "multiple": true,
2047
+ "multiple": false,
2048
+ "options": [
2049
+ "daily",
2050
+ "hourly"
2051
+ ],
2170
2052
  "type": "option"
2171
2053
  },
2172
- "timestamp": {
2173
- "description": "Unix timestamp in milliseconds (defaults to now)",
2174
- "name": "timestamp",
2054
+ "start": {
2055
+ "description": "Start time (ISO 8601)",
2056
+ "name": "start",
2057
+ "required": true,
2175
2058
  "hasDynamicHelp": false,
2176
2059
  "multiple": false,
2177
2060
  "type": "option"
@@ -2179,35 +2062,34 @@
2179
2062
  },
2180
2063
  "hasDynamicHelp": false,
2181
2064
  "hiddenAliases": [],
2182
- "id": "ingest:json",
2065
+ "id": "investigation:analytics",
2183
2066
  "pluginAlias": "@formant/formant-cli",
2184
2067
  "pluginName": "@formant/formant-cli",
2185
2068
  "pluginType": "core",
2186
2069
  "strict": true,
2187
- "summary": "Ingest JSON data",
2070
+ "summary": "Get investigation analytics",
2188
2071
  "enableJsonFlag": true,
2189
2072
  "isESM": true,
2190
2073
  "relativePath": [
2191
2074
  "dist",
2192
2075
  "commands",
2193
- "ingest",
2194
- "json.js"
2076
+ "investigation",
2077
+ "analytics.js"
2195
2078
  ]
2196
2079
  },
2197
- "ingest:numeric": {
2080
+ "investigation:get": {
2198
2081
  "aliases": [],
2199
2082
  "args": {
2200
- "value": {
2201
- "description": "Numeric value to ingest",
2202
- "name": "value",
2083
+ "id": {
2084
+ "description": "Investigation (taskflow) ID",
2085
+ "name": "id",
2203
2086
  "required": true
2204
2087
  }
2205
2088
  },
2206
- "description": "Ingest a numeric data point to a device stream.\n\nSends a single numeric value to the specified device stream. The value must be a valid number.\nNumeric streams are commonly used for sensor readings like battery level, temperature, speed, etc.",
2089
+ "description": "Get detailed information about a specific investigation by ID.",
2207
2090
  "examples": [
2208
- "<%= config.bin %> ingest numeric 42.5 --device <device-id> --stream battery_level",
2209
- "<%= config.bin %> ingest numeric 98.6 --device <device-id> --stream temperature --tag unit=fahrenheit",
2210
- "<%= config.bin %> ingest numeric 1500 --device <device-id> --stream rpm --timestamp 1700000000000"
2091
+ "<%= config.bin %> investigation get <id>",
2092
+ "<%= config.bin %> investigation get <id> --json"
2211
2093
  ],
2212
2094
  "flags": {
2213
2095
  "json": {
@@ -2236,72 +2118,33 @@
2236
2118
  "name": "stage",
2237
2119
  "allowNo": false,
2238
2120
  "type": "boolean"
2239
- },
2240
- "device": {
2241
- "char": "d",
2242
- "description": "Device ID (UUID)",
2243
- "name": "device",
2244
- "required": true,
2245
- "hasDynamicHelp": false,
2246
- "multiple": false,
2247
- "type": "option"
2248
- },
2249
- "stream": {
2250
- "char": "s",
2251
- "description": "Stream name",
2252
- "name": "stream",
2253
- "required": true,
2254
- "hasDynamicHelp": false,
2255
- "multiple": false,
2256
- "type": "option"
2257
- },
2258
- "tag": {
2259
- "char": "t",
2260
- "description": "Tag as key=value where both are strings (can be specified multiple times)",
2261
- "name": "tag",
2262
- "hasDynamicHelp": false,
2263
- "multiple": true,
2264
- "type": "option"
2265
- },
2266
- "timestamp": {
2267
- "description": "Unix timestamp in milliseconds (defaults to now)",
2268
- "name": "timestamp",
2269
- "hasDynamicHelp": false,
2270
- "multiple": false,
2271
- "type": "option"
2272
2121
  }
2273
2122
  },
2274
2123
  "hasDynamicHelp": false,
2275
2124
  "hiddenAliases": [],
2276
- "id": "ingest:numeric",
2125
+ "id": "investigation:get",
2277
2126
  "pluginAlias": "@formant/formant-cli",
2278
2127
  "pluginName": "@formant/formant-cli",
2279
2128
  "pluginType": "core",
2280
2129
  "strict": true,
2281
- "summary": "Ingest numeric data",
2130
+ "summary": "Get an investigation by ID",
2282
2131
  "enableJsonFlag": true,
2283
2132
  "isESM": true,
2284
2133
  "relativePath": [
2285
2134
  "dist",
2286
2135
  "commands",
2287
- "ingest",
2288
- "numeric.js"
2136
+ "investigation",
2137
+ "get.js"
2289
2138
  ]
2290
2139
  },
2291
- "ingest:text": {
2140
+ "investigation:list": {
2292
2141
  "aliases": [],
2293
- "args": {
2294
- "value": {
2295
- "description": "Text value to ingest",
2296
- "name": "value",
2297
- "required": true
2298
- }
2299
- },
2300
- "description": "Ingest a text data point to a device stream.\n\nSends a single text/string value to the specified device stream. Text streams are commonly\nused for logs, status messages, error messages, and other string data.",
2142
+ "args": {},
2143
+ "description": "List investigations (AI-powered analysis workflows) in your organization.\n\nInvestigations are automated AI workflows that analyze signals, diagnose problems,\nand produce reports. Use --signal-handler to filter for investigations that are\ntriggered automatically by signals.",
2301
2144
  "examples": [
2302
- "<%= config.bin %> ingest text \"Robot started successfully\" --device <device-id> --stream status",
2303
- "<%= config.bin %> ingest text \"Error: sensor offline\" --device <device-id> --stream errors --tag severity=high",
2304
- "<%= config.bin %> ingest text \"Checkpoint A reached\" --device <device-id> --stream waypoints"
2145
+ "<%= config.bin %> investigation list",
2146
+ "<%= config.bin %> investigation list --signal-handler",
2147
+ "<%= config.bin %> investigation list --json"
2305
2148
  ],
2306
2149
  "flags": {
2307
2150
  "json": {
@@ -2331,65 +2174,49 @@
2331
2174
  "allowNo": false,
2332
2175
  "type": "boolean"
2333
2176
  },
2334
- "device": {
2335
- "char": "d",
2336
- "description": "Device ID (UUID)",
2337
- "name": "device",
2338
- "required": true,
2339
- "hasDynamicHelp": false,
2340
- "multiple": false,
2341
- "type": "option"
2342
- },
2343
- "stream": {
2344
- "char": "s",
2345
- "description": "Stream name",
2346
- "name": "stream",
2347
- "required": true,
2348
- "hasDynamicHelp": false,
2349
- "multiple": false,
2350
- "type": "option"
2351
- },
2352
- "tag": {
2353
- "char": "t",
2354
- "description": "Tag as key=value where both are strings (can be specified multiple times)",
2355
- "name": "tag",
2356
- "hasDynamicHelp": false,
2357
- "multiple": true,
2358
- "type": "option"
2359
- },
2360
- "timestamp": {
2361
- "description": "Unix timestamp in milliseconds (defaults to now)",
2362
- "name": "timestamp",
2363
- "hasDynamicHelp": false,
2364
- "multiple": false,
2365
- "type": "option"
2177
+ "signal-handler": {
2178
+ "description": "Only show investigations that handle signals",
2179
+ "name": "signal-handler",
2180
+ "allowNo": false,
2181
+ "type": "boolean"
2366
2182
  }
2367
2183
  },
2368
2184
  "hasDynamicHelp": false,
2369
2185
  "hiddenAliases": [],
2370
- "id": "ingest:text",
2186
+ "id": "investigation:list",
2371
2187
  "pluginAlias": "@formant/formant-cli",
2372
2188
  "pluginName": "@formant/formant-cli",
2373
2189
  "pluginType": "core",
2374
2190
  "strict": true,
2375
- "summary": "Ingest text data",
2191
+ "summary": "List investigations",
2376
2192
  "enableJsonFlag": true,
2377
2193
  "isESM": true,
2378
2194
  "relativePath": [
2379
2195
  "dist",
2380
2196
  "commands",
2381
- "ingest",
2382
- "text.js"
2197
+ "investigation",
2198
+ "list.js"
2383
2199
  ]
2384
2200
  },
2385
- "ingest:video": {
2201
+ "investigation:run": {
2386
2202
  "aliases": [],
2387
- "args": {},
2388
- "description": "Ingest a video URL to a device stream.\n\nSends a video reference (by URL) to the specified device stream. The video must be accessible\nvia HTTP/HTTPS. You must provide the video duration in milliseconds.\n\nVideo streams are used for recorded video clips, timelapse videos, event recordings, etc.\n\nThe MIME type is auto-detected from the file extension (.mp4, .webm, .mov).",
2203
+ "args": {
2204
+ "investigationId": {
2205
+ "description": "Investigation (taskflow) ID",
2206
+ "name": "investigationId",
2207
+ "required": true
2208
+ },
2209
+ "runId": {
2210
+ "description": "Run ID",
2211
+ "name": "runId",
2212
+ "required": true
2213
+ }
2214
+ },
2215
+ "description": "Get detailed information about a specific investigation run.\n\nShows run details including status, signal information, events, and the complete execution \nlog with node inputs/outputs, task messages, tool usage, and results.\n\nUse this to trace the investigation run back to its signal and triggering event.",
2389
2216
  "examples": [
2390
- "<%= config.bin %> ingest video --device <device-id> --stream recordings --url https://example.com/video.mp4 --duration 5000",
2391
- "<%= config.bin %> ingest video --device <device-id> --stream clips --url https://example.com/clip.webm --duration 3500 --size 2048000",
2392
- "<%= config.bin %> ingest video --device <device-id> --stream event_video --url https://example.com/event.mov --duration 10000 --tag event=collision"
2217
+ "<%= config.bin %> investigation run <investigation-id> <run-id>",
2218
+ "<%= config.bin %> investigation run <investigation-id> <run-id> --log-only",
2219
+ "<%= config.bin %> investigation run <investigation-id> <run-id> --json"
2393
2220
  ],
2394
2221
  "flags": {
2395
2222
  "json": {
@@ -2419,89 +2246,50 @@
2419
2246
  "allowNo": false,
2420
2247
  "type": "boolean"
2421
2248
  },
2422
- "device": {
2423
- "char": "d",
2424
- "description": "Device ID (UUID)",
2425
- "name": "device",
2426
- "required": true,
2427
- "hasDynamicHelp": false,
2428
- "multiple": false,
2429
- "type": "option"
2430
- },
2431
- "stream": {
2432
- "char": "s",
2433
- "description": "Stream name",
2434
- "name": "stream",
2435
- "required": true,
2436
- "hasDynamicHelp": false,
2437
- "multiple": false,
2438
- "type": "option"
2439
- },
2440
- "url": {
2441
- "char": "u",
2442
- "description": "Video URL (must be http:// or https://)",
2443
- "name": "url",
2444
- "required": true,
2445
- "hasDynamicHelp": false,
2446
- "multiple": false,
2447
- "type": "option"
2448
- },
2449
- "duration": {
2450
- "description": "Video duration in milliseconds (required)",
2451
- "name": "duration",
2452
- "required": true,
2453
- "hasDynamicHelp": false,
2454
- "multiple": false,
2455
- "type": "option"
2456
- },
2457
- "size": {
2458
- "description": "Video size in bytes (optional)",
2459
- "name": "size",
2460
- "hasDynamicHelp": false,
2461
- "multiple": false,
2462
- "type": "option"
2463
- },
2464
- "tag": {
2465
- "char": "t",
2466
- "description": "Tag as key=value where both are strings (can be specified multiple times)",
2467
- "name": "tag",
2468
- "hasDynamicHelp": false,
2469
- "multiple": true,
2470
- "type": "option"
2249
+ "log-only": {
2250
+ "description": "Only show the execution log (skip run details)",
2251
+ "name": "log-only",
2252
+ "allowNo": false,
2253
+ "type": "boolean"
2471
2254
  },
2472
- "timestamp": {
2473
- "description": "Unix timestamp in milliseconds (defaults to now)",
2474
- "name": "timestamp",
2475
- "hasDynamicHelp": false,
2476
- "multiple": false,
2477
- "type": "option"
2255
+ "trace-signal": {
2256
+ "description": "Fetch and display the signal and event information for this run",
2257
+ "name": "trace-signal",
2258
+ "allowNo": false,
2259
+ "type": "boolean"
2478
2260
  }
2479
2261
  },
2480
2262
  "hasDynamicHelp": false,
2481
2263
  "hiddenAliases": [],
2482
- "id": "ingest:video",
2264
+ "id": "investigation:run",
2483
2265
  "pluginAlias": "@formant/formant-cli",
2484
2266
  "pluginName": "@formant/formant-cli",
2485
2267
  "pluginType": "core",
2486
2268
  "strict": true,
2487
- "summary": "Ingest video data",
2269
+ "summary": "Get investigation run details and execution log",
2488
2270
  "enableJsonFlag": true,
2489
2271
  "isESM": true,
2490
2272
  "relativePath": [
2491
2273
  "dist",
2492
2274
  "commands",
2493
- "ingest",
2494
- "video.js"
2275
+ "investigation",
2276
+ "run.js"
2495
2277
  ]
2496
2278
  },
2497
- "investigation:analytics": {
2279
+ "investigation:runs-list": {
2498
2280
  "aliases": [],
2499
- "args": {},
2500
- "description": "Get investigation analytics with time-series data.\n\nReturns aggregated analytics about investigation runs over a time range,\noptionally grouped by result type or signal type.",
2281
+ "args": {
2282
+ "id": {
2283
+ "description": "Investigation (taskflow) ID",
2284
+ "name": "id",
2285
+ "required": true
2286
+ }
2287
+ },
2288
+ "description": "List actual investigation runs (not evaluation runs) for a specific investigation.\n\nShows runs with their status, signal IDs, and timestamps. Use 'investigations run' to see\ndetailed execution logs for a specific run.",
2501
2289
  "examples": [
2502
- "<%= config.bin %> investigation analytics --start 2026-01-01 --end 2026-02-01",
2503
- "<%= config.bin %> investigation analytics --start 2026-01-01 --end 2026-02-01 --interval hourly",
2504
- "<%= config.bin %> investigation analytics --start 2026-01-01 --end 2026-02-01 --group-by resultType --json"
2290
+ "<%= config.bin %> investigation runs-list <id>",
2291
+ "<%= config.bin %> investigation runs-list <id> --limit 50",
2292
+ "<%= config.bin %> investigation runs-list <id> --details --json"
2505
2293
  ],
2506
2294
  "flags": {
2507
2295
  "json": {
@@ -2531,41 +2319,26 @@
2531
2319
  "allowNo": false,
2532
2320
  "type": "boolean"
2533
2321
  },
2534
- "end": {
2535
- "description": "End time (ISO 8601)",
2536
- "name": "end",
2537
- "required": true,
2538
- "hasDynamicHelp": false,
2539
- "multiple": false,
2540
- "type": "option"
2541
- },
2542
- "group-by": {
2543
- "description": "Group results by",
2544
- "name": "group-by",
2545
- "hasDynamicHelp": false,
2546
- "multiple": false,
2547
- "options": [
2548
- "resultType",
2549
- "signalType"
2550
- ],
2551
- "type": "option"
2322
+ "details": {
2323
+ "description": "Include detailed information about each run",
2324
+ "name": "details",
2325
+ "allowNo": false,
2326
+ "type": "boolean"
2552
2327
  },
2553
- "interval": {
2554
- "description": "Time interval for aggregation",
2555
- "name": "interval",
2556
- "default": "daily",
2328
+ "limit": {
2329
+ "char": "l",
2330
+ "description": "Maximum number of runs to return",
2331
+ "name": "limit",
2332
+ "default": 20,
2557
2333
  "hasDynamicHelp": false,
2558
2334
  "multiple": false,
2559
- "options": [
2560
- "daily",
2561
- "hourly"
2562
- ],
2563
2335
  "type": "option"
2564
2336
  },
2565
- "start": {
2566
- "description": "Start time (ISO 8601)",
2567
- "name": "start",
2568
- "required": true,
2337
+ "offset": {
2338
+ "char": "o",
2339
+ "description": "Offset for pagination",
2340
+ "name": "offset",
2341
+ "default": 0,
2569
2342
  "hasDynamicHelp": false,
2570
2343
  "multiple": false,
2571
2344
  "type": "option"
@@ -2573,22 +2346,22 @@
2573
2346
  },
2574
2347
  "hasDynamicHelp": false,
2575
2348
  "hiddenAliases": [],
2576
- "id": "investigation:analytics",
2349
+ "id": "investigation:runs-list",
2577
2350
  "pluginAlias": "@formant/formant-cli",
2578
2351
  "pluginName": "@formant/formant-cli",
2579
2352
  "pluginType": "core",
2580
2353
  "strict": true,
2581
- "summary": "Get investigation analytics",
2354
+ "summary": "List actual investigation runs",
2582
2355
  "enableJsonFlag": true,
2583
2356
  "isESM": true,
2584
2357
  "relativePath": [
2585
2358
  "dist",
2586
2359
  "commands",
2587
2360
  "investigation",
2588
- "analytics.js"
2361
+ "runs-list.js"
2589
2362
  ]
2590
2363
  },
2591
- "investigation:get": {
2364
+ "investigation:runs": {
2592
2365
  "aliases": [],
2593
2366
  "args": {
2594
2367
  "id": {
@@ -2597,10 +2370,10 @@
2597
2370
  "required": true
2598
2371
  }
2599
2372
  },
2600
- "description": "Get detailed information about a specific investigation by ID.",
2373
+ "description": "List evaluation runs for a specific investigation.",
2601
2374
  "examples": [
2602
- "<%= config.bin %> investigation get <id>",
2603
- "<%= config.bin %> investigation get <id> --json"
2375
+ "<%= config.bin %> investigation runs <id>",
2376
+ "<%= config.bin %> investigation runs <id> --json"
2604
2377
  ],
2605
2378
  "flags": {
2606
2379
  "json": {
@@ -2633,29 +2406,28 @@
2633
2406
  },
2634
2407
  "hasDynamicHelp": false,
2635
2408
  "hiddenAliases": [],
2636
- "id": "investigation:get",
2409
+ "id": "investigation:runs",
2637
2410
  "pluginAlias": "@formant/formant-cli",
2638
2411
  "pluginName": "@formant/formant-cli",
2639
2412
  "pluginType": "core",
2640
2413
  "strict": true,
2641
- "summary": "Get an investigation by ID",
2414
+ "summary": "List runs for an investigation",
2642
2415
  "enableJsonFlag": true,
2643
2416
  "isESM": true,
2644
2417
  "relativePath": [
2645
2418
  "dist",
2646
2419
  "commands",
2647
2420
  "investigation",
2648
- "get.js"
2421
+ "runs.js"
2649
2422
  ]
2650
2423
  },
2651
- "investigation:list": {
2424
+ "investigation:stats": {
2652
2425
  "aliases": [],
2653
2426
  "args": {},
2654
- "description": "List investigations (AI-powered analysis workflows) in your organization.\n\nInvestigations are automated AI workflows that analyze signals, diagnose problems,\nand produce reports. Use --signal-handler to filter for investigations that are\ntriggered automatically by signals.",
2427
+ "description": "Get investigation statistics for a time range.",
2655
2428
  "examples": [
2656
- "<%= config.bin %> investigation list",
2657
- "<%= config.bin %> investigation list --signal-handler",
2658
- "<%= config.bin %> investigation list --json"
2429
+ "<%= config.bin %> investigation stats --start 2026-01-01 --end 2026-02-01",
2430
+ "<%= config.bin %> investigation stats --start 2026-01-01 --end 2026-02-01 --json"
2659
2431
  ],
2660
2432
  "flags": {
2661
2433
  "json": {
@@ -2685,49 +2457,53 @@
2685
2457
  "allowNo": false,
2686
2458
  "type": "boolean"
2687
2459
  },
2688
- "signal-handler": {
2689
- "description": "Only show investigations that handle signals",
2690
- "name": "signal-handler",
2691
- "allowNo": false,
2692
- "type": "boolean"
2460
+ "end": {
2461
+ "description": "End time (ISO 8601)",
2462
+ "name": "end",
2463
+ "required": true,
2464
+ "hasDynamicHelp": false,
2465
+ "multiple": false,
2466
+ "type": "option"
2467
+ },
2468
+ "start": {
2469
+ "description": "Start time (ISO 8601)",
2470
+ "name": "start",
2471
+ "required": true,
2472
+ "hasDynamicHelp": false,
2473
+ "multiple": false,
2474
+ "type": "option"
2693
2475
  }
2694
2476
  },
2695
2477
  "hasDynamicHelp": false,
2696
2478
  "hiddenAliases": [],
2697
- "id": "investigation:list",
2479
+ "id": "investigation:stats",
2698
2480
  "pluginAlias": "@formant/formant-cli",
2699
2481
  "pluginName": "@formant/formant-cli",
2700
2482
  "pluginType": "core",
2701
2483
  "strict": true,
2702
- "summary": "List investigations",
2484
+ "summary": "Get investigation stats",
2703
2485
  "enableJsonFlag": true,
2704
2486
  "isESM": true,
2705
2487
  "relativePath": [
2706
2488
  "dist",
2707
2489
  "commands",
2708
2490
  "investigation",
2709
- "list.js"
2491
+ "stats.js"
2710
2492
  ]
2711
2493
  },
2712
- "investigation:run": {
2494
+ "investigation:trigger": {
2713
2495
  "aliases": [],
2714
2496
  "args": {
2715
- "investigationId": {
2497
+ "id": {
2716
2498
  "description": "Investigation (taskflow) ID",
2717
- "name": "investigationId",
2718
- "required": true
2719
- },
2720
- "runId": {
2721
- "description": "Run ID",
2722
- "name": "runId",
2499
+ "name": "id",
2723
2500
  "required": true
2724
2501
  }
2725
2502
  },
2726
- "description": "Get detailed information about a specific investigation run.\n\nShows run details including status, signal information, events, and the complete execution \nlog with node inputs/outputs, task messages, tool usage, and results.\n\nUse this to trace the investigation run back to its signal and triggering event.",
2503
+ "description": "Trigger an investigation to run. Provide input text describing the problem\nor context for the investigation. The investigation runs asynchronously and\nreturns a run ID you can use to check results.",
2727
2504
  "examples": [
2728
- "<%= config.bin %> investigation run <investigation-id> <run-id>",
2729
- "<%= config.bin %> investigation run <investigation-id> <run-id> --log-only",
2730
- "<%= config.bin %> investigation run <investigation-id> <run-id> --json"
2505
+ "<%= config.bin %> investigation trigger <id> --input \"Robot stopped responding\"",
2506
+ "<%= config.bin %> investigation trigger <id> --input \"Battery draining fast on device X\" --json"
2731
2507
  ],
2732
2508
  "flags": {
2733
2509
  "json": {
@@ -2757,50 +2533,53 @@
2757
2533
  "allowNo": false,
2758
2534
  "type": "boolean"
2759
2535
  },
2760
- "log-only": {
2761
- "description": "Only show the execution log (skip run details)",
2762
- "name": "log-only",
2763
- "allowNo": false,
2764
- "type": "boolean"
2536
+ "input": {
2537
+ "char": "i",
2538
+ "description": "Input text / problem description for the investigation",
2539
+ "name": "input",
2540
+ "required": true,
2541
+ "hasDynamicHelp": false,
2542
+ "multiple": false,
2543
+ "type": "option"
2765
2544
  },
2766
- "trace-signal": {
2767
- "description": "Fetch and display the signal and event information for this run",
2768
- "name": "trace-signal",
2769
- "allowNo": false,
2770
- "type": "boolean"
2545
+ "signal-id": {
2546
+ "description": "Optional signal ID to associate with this run",
2547
+ "name": "signal-id",
2548
+ "hasDynamicHelp": false,
2549
+ "multiple": false,
2550
+ "type": "option"
2771
2551
  }
2772
2552
  },
2773
2553
  "hasDynamicHelp": false,
2774
2554
  "hiddenAliases": [],
2775
- "id": "investigation:run",
2555
+ "id": "investigation:trigger",
2776
2556
  "pluginAlias": "@formant/formant-cli",
2777
2557
  "pluginName": "@formant/formant-cli",
2778
2558
  "pluginType": "core",
2779
2559
  "strict": true,
2780
- "summary": "Get investigation run details and execution log",
2560
+ "summary": "Trigger an investigation",
2781
2561
  "enableJsonFlag": true,
2782
2562
  "isESM": true,
2783
2563
  "relativePath": [
2784
2564
  "dist",
2785
2565
  "commands",
2786
2566
  "investigation",
2787
- "run.js"
2567
+ "trigger.js"
2788
2568
  ]
2789
2569
  },
2790
- "investigation:runs-list": {
2570
+ "device:config": {
2791
2571
  "aliases": [],
2792
2572
  "args": {
2793
2573
  "id": {
2794
- "description": "Investigation (taskflow) ID",
2574
+ "description": "Device ID (UUID)",
2795
2575
  "name": "id",
2796
2576
  "required": true
2797
2577
  }
2798
2578
  },
2799
- "description": "List actual investigation runs (not evaluation runs) for a specific investigation.\n\nShows runs with their status, signal IDs, and timestamps. Use 'investigations run' to see\ndetailed execution logs for a specific run.",
2579
+ "description": "Get the device configuration including stream definitions.\n\nShows the device's current configuration including telemetry streams, commands,\nand other settings.",
2800
2580
  "examples": [
2801
- "<%= config.bin %> investigation runs-list <id>",
2802
- "<%= config.bin %> investigation runs-list <id> --limit 50",
2803
- "<%= config.bin %> investigation runs-list <id> --details --json"
2581
+ "<%= config.bin %> device config <device-id>",
2582
+ "<%= config.bin %> device config <device-id> --json"
2804
2583
  ],
2805
2584
  "flags": {
2806
2585
  "json": {
@@ -2829,62 +2608,107 @@
2829
2608
  "name": "stage",
2830
2609
  "allowNo": false,
2831
2610
  "type": "boolean"
2611
+ }
2612
+ },
2613
+ "hasDynamicHelp": false,
2614
+ "hiddenAliases": [],
2615
+ "id": "device:config",
2616
+ "pluginAlias": "@formant/formant-cli",
2617
+ "pluginName": "@formant/formant-cli",
2618
+ "pluginType": "core",
2619
+ "strict": true,
2620
+ "summary": "Get device configuration",
2621
+ "enableJsonFlag": true,
2622
+ "isESM": true,
2623
+ "relativePath": [
2624
+ "dist",
2625
+ "commands",
2626
+ "device",
2627
+ "config.js"
2628
+ ]
2629
+ },
2630
+ "device:create": {
2631
+ "aliases": [],
2632
+ "args": {
2633
+ "name": {
2634
+ "description": "Name for the new device",
2635
+ "name": "name",
2636
+ "required": true
2637
+ }
2638
+ },
2639
+ "description": "Create a new device in your fleet.\n\nThe device is created as enabled by default. You can optionally specify tags.",
2640
+ "examples": [
2641
+ "<%= config.bin %> device create my-robot",
2642
+ "<%= config.bin %> device create my-robot --tag location=warehouse --tag env=prod",
2643
+ "<%= config.bin %> device create my-robot --json"
2644
+ ],
2645
+ "flags": {
2646
+ "json": {
2647
+ "description": "Format output as json.",
2648
+ "helpGroup": "GLOBAL",
2649
+ "name": "json",
2650
+ "allowNo": false,
2651
+ "type": "boolean"
2832
2652
  },
2833
- "details": {
2834
- "description": "Include detailed information about each run",
2835
- "name": "details",
2653
+ "dev": {
2654
+ "description": "Target the dev environment",
2655
+ "exclusive": [
2656
+ "stage"
2657
+ ],
2658
+ "helpGroup": "GLOBAL",
2659
+ "name": "dev",
2836
2660
  "allowNo": false,
2837
2661
  "type": "boolean"
2838
2662
  },
2839
- "limit": {
2840
- "char": "l",
2841
- "description": "Maximum number of runs to return",
2842
- "name": "limit",
2843
- "default": 20,
2844
- "hasDynamicHelp": false,
2845
- "multiple": false,
2846
- "type": "option"
2663
+ "stage": {
2664
+ "description": "Target the stage environment",
2665
+ "exclusive": [
2666
+ "dev"
2667
+ ],
2668
+ "helpGroup": "GLOBAL",
2669
+ "name": "stage",
2670
+ "allowNo": false,
2671
+ "type": "boolean"
2847
2672
  },
2848
- "offset": {
2849
- "char": "o",
2850
- "description": "Offset for pagination",
2851
- "name": "offset",
2852
- "default": 0,
2673
+ "tag": {
2674
+ "char": "t",
2675
+ "description": "Tag to apply (key=value), can be specified multiple times",
2676
+ "name": "tag",
2853
2677
  "hasDynamicHelp": false,
2854
- "multiple": false,
2678
+ "multiple": true,
2855
2679
  "type": "option"
2856
2680
  }
2857
2681
  },
2858
2682
  "hasDynamicHelp": false,
2859
2683
  "hiddenAliases": [],
2860
- "id": "investigation:runs-list",
2684
+ "id": "device:create",
2861
2685
  "pluginAlias": "@formant/formant-cli",
2862
2686
  "pluginName": "@formant/formant-cli",
2863
2687
  "pluginType": "core",
2864
2688
  "strict": true,
2865
- "summary": "List actual investigation runs",
2689
+ "summary": "Create a new device",
2866
2690
  "enableJsonFlag": true,
2867
2691
  "isESM": true,
2868
2692
  "relativePath": [
2869
2693
  "dist",
2870
2694
  "commands",
2871
- "investigation",
2872
- "runs-list.js"
2695
+ "device",
2696
+ "create.js"
2873
2697
  ]
2874
2698
  },
2875
- "investigation:runs": {
2699
+ "device:delete": {
2876
2700
  "aliases": [],
2877
2701
  "args": {
2878
2702
  "id": {
2879
- "description": "Investigation (taskflow) ID",
2703
+ "description": "Device ID (UUID)",
2880
2704
  "name": "id",
2881
2705
  "required": true
2882
2706
  }
2883
2707
  },
2884
- "description": "List evaluation runs for a specific investigation.",
2708
+ "description": "Delete (disable) a device from your fleet.\n\nThis performs a soft-delete by disabling the device. The device and its telemetry\nhistory are preserved but it will no longer appear in device listings.",
2885
2709
  "examples": [
2886
- "<%= config.bin %> investigation runs <id>",
2887
- "<%= config.bin %> investigation runs <id> --json"
2710
+ "<%= config.bin %> device delete <device-id>",
2711
+ "<%= config.bin %> device delete <device-id> --json"
2888
2712
  ],
2889
2713
  "flags": {
2890
2714
  "json": {
@@ -2917,28 +2741,34 @@
2917
2741
  },
2918
2742
  "hasDynamicHelp": false,
2919
2743
  "hiddenAliases": [],
2920
- "id": "investigation:runs",
2744
+ "id": "device:delete",
2921
2745
  "pluginAlias": "@formant/formant-cli",
2922
2746
  "pluginName": "@formant/formant-cli",
2923
2747
  "pluginType": "core",
2924
2748
  "strict": true,
2925
- "summary": "List runs for an investigation",
2749
+ "summary": "Delete (disable) a device",
2926
2750
  "enableJsonFlag": true,
2927
2751
  "isESM": true,
2928
2752
  "relativePath": [
2929
2753
  "dist",
2930
2754
  "commands",
2931
- "investigation",
2932
- "runs.js"
2755
+ "device",
2756
+ "delete.js"
2933
2757
  ]
2934
2758
  },
2935
- "investigation:stats": {
2759
+ "device:get": {
2936
2760
  "aliases": [],
2937
- "args": {},
2938
- "description": "Get investigation statistics for a time range.",
2761
+ "args": {
2762
+ "id": {
2763
+ "description": "Device ID (UUID)",
2764
+ "name": "id",
2765
+ "required": true
2766
+ }
2767
+ },
2768
+ "description": "Get detailed information about a specific device by its ID.",
2939
2769
  "examples": [
2940
- "<%= config.bin %> investigation stats --start 2026-01-01 --end 2026-02-01",
2941
- "<%= config.bin %> investigation stats --start 2026-01-01 --end 2026-02-01 --json"
2770
+ "<%= config.bin %> device get <device-id>",
2771
+ "<%= config.bin %> device get <device-id> --json"
2942
2772
  ],
2943
2773
  "flags": {
2944
2774
  "json": {
@@ -2967,54 +2797,37 @@
2967
2797
  "name": "stage",
2968
2798
  "allowNo": false,
2969
2799
  "type": "boolean"
2970
- },
2971
- "end": {
2972
- "description": "End time (ISO 8601)",
2973
- "name": "end",
2974
- "required": true,
2975
- "hasDynamicHelp": false,
2976
- "multiple": false,
2977
- "type": "option"
2978
- },
2979
- "start": {
2980
- "description": "Start time (ISO 8601)",
2981
- "name": "start",
2982
- "required": true,
2983
- "hasDynamicHelp": false,
2984
- "multiple": false,
2985
- "type": "option"
2986
2800
  }
2987
2801
  },
2988
2802
  "hasDynamicHelp": false,
2989
2803
  "hiddenAliases": [],
2990
- "id": "investigation:stats",
2804
+ "id": "device:get",
2991
2805
  "pluginAlias": "@formant/formant-cli",
2992
2806
  "pluginName": "@formant/formant-cli",
2993
2807
  "pluginType": "core",
2994
2808
  "strict": true,
2995
- "summary": "Get investigation stats",
2809
+ "summary": "Get a device by ID",
2996
2810
  "enableJsonFlag": true,
2997
2811
  "isESM": true,
2998
2812
  "relativePath": [
2999
2813
  "dist",
3000
2814
  "commands",
3001
- "investigation",
3002
- "stats.js"
2815
+ "device",
2816
+ "get.js"
3003
2817
  ]
3004
2818
  },
3005
- "investigation:trigger": {
2819
+ "device:list": {
3006
2820
  "aliases": [],
3007
- "args": {
3008
- "id": {
3009
- "description": "Investigation (taskflow) ID",
3010
- "name": "id",
3011
- "required": true
3012
- }
3013
- },
3014
- "description": "Trigger an investigation to run. Provide input text describing the problem\nor context for the investigation. The investigation runs asynchronously and\nreturns a run ID you can use to check results.",
2821
+ "args": {},
2822
+ "description": "List robots and sensors in your fleet. Shows only online devices by default.\n\nUse --include-offline to include offline devices. Use --with-data to show only\ndevices that have ingested data. Each device is enriched with data-based last\nseen timestamp and datapoint count from analytics.",
3015
2823
  "examples": [
3016
- "<%= config.bin %> investigation trigger <id> --input \"Robot stopped responding\"",
3017
- "<%= config.bin %> investigation trigger <id> --input \"Battery draining fast on device X\" --json"
2824
+ "<%= config.bin %> device list",
2825
+ "<%= config.bin %> device list --include-offline",
2826
+ "<%= config.bin %> device list --with-data",
2827
+ "<%= config.bin %> device list --with-data --days 90",
2828
+ "<%= config.bin %> device list --include-offline --limit 100",
2829
+ "<%= config.bin %> device list --tag location=warehouse",
2830
+ "<%= config.bin %> device list --name robot --dev --json"
3018
2831
  ],
3019
2832
  "flags": {
3020
2833
  "json": {
@@ -3044,59 +2857,89 @@
3044
2857
  "allowNo": false,
3045
2858
  "type": "boolean"
3046
2859
  },
3047
- "input": {
3048
- "char": "i",
3049
- "description": "Input text / problem description for the investigation",
3050
- "name": "input",
3051
- "required": true,
2860
+ "include-offline": {
2861
+ "char": "a",
2862
+ "description": "Include offline devices",
2863
+ "name": "include-offline",
2864
+ "allowNo": false,
2865
+ "type": "boolean"
2866
+ },
2867
+ "days": {
2868
+ "description": "How many days back to search for last seen data",
2869
+ "name": "days",
2870
+ "default": 30,
3052
2871
  "hasDynamicHelp": false,
3053
2872
  "multiple": false,
3054
2873
  "type": "option"
3055
2874
  },
3056
- "signal-id": {
3057
- "description": "Optional signal ID to associate with this run",
3058
- "name": "signal-id",
2875
+ "limit": {
2876
+ "char": "l",
2877
+ "description": "Maximum number of devices to return",
2878
+ "name": "limit",
2879
+ "default": 50,
2880
+ "hasDynamicHelp": false,
2881
+ "multiple": false,
2882
+ "type": "option"
2883
+ },
2884
+ "name": {
2885
+ "char": "n",
2886
+ "description": "Filter devices by name (search)",
2887
+ "name": "name",
3059
2888
  "hasDynamicHelp": false,
3060
2889
  "multiple": false,
3061
2890
  "type": "option"
2891
+ },
2892
+ "with-data": {
2893
+ "char": "w",
2894
+ "description": "Only show devices that have data in the last --days window",
2895
+ "name": "with-data",
2896
+ "allowNo": false,
2897
+ "type": "boolean"
2898
+ },
2899
+ "tag": {
2900
+ "char": "t",
2901
+ "description": "Filter by tag (key=value), can be specified multiple times",
2902
+ "name": "tag",
2903
+ "hasDynamicHelp": false,
2904
+ "multiple": true,
2905
+ "type": "option"
3062
2906
  }
3063
2907
  },
3064
2908
  "hasDynamicHelp": false,
3065
2909
  "hiddenAliases": [],
3066
- "id": "investigation:trigger",
2910
+ "id": "device:list",
3067
2911
  "pluginAlias": "@formant/formant-cli",
3068
2912
  "pluginName": "@formant/formant-cli",
3069
2913
  "pluginType": "core",
3070
2914
  "strict": true,
3071
- "summary": "Trigger an investigation",
2915
+ "summary": "List robots and sensors in your fleet",
3072
2916
  "enableJsonFlag": true,
3073
2917
  "isESM": true,
3074
2918
  "relativePath": [
3075
2919
  "dist",
3076
2920
  "commands",
3077
- "investigation",
3078
- "trigger.js"
2921
+ "device",
2922
+ "list.js"
3079
2923
  ]
3080
2924
  },
3081
- "persona:delegate-task": {
2925
+ "device:rename": {
3082
2926
  "aliases": [],
3083
2927
  "args": {
3084
2928
  "id": {
3085
- "description": "Persona ID (UUID)",
2929
+ "description": "Device ID (UUID)",
3086
2930
  "name": "id",
3087
2931
  "required": true
3088
2932
  },
3089
- "goal": {
3090
- "description": "The task goal / instruction for the persona",
3091
- "name": "goal",
2933
+ "name": {
2934
+ "description": "New name for the device",
2935
+ "name": "name",
3092
2936
  "required": true
3093
2937
  }
3094
2938
  },
3095
- "description": "Delegate a task to a persona for async execution.\n\nCreates a task with the given goal, assigns it to the persona, and queues it to run in the background. Returns immediately with a task ID you can use to check status later via \"persona task-status\".",
2939
+ "description": "Rename a device by updating its name.",
3096
2940
  "examples": [
3097
- "<%= config.bin %> persona delegate-task <persona-id> \"Analyze recent device failures and summarize findings\"",
3098
- "<%= config.bin %> persona delegate-task <persona-id> \"Generate a daily report of fleet health\" --name \"Daily Fleet Report\"",
3099
- "<%= config.bin %> persona delegate-task <persona-id> \"Check all offline devices\" --dev"
2941
+ "<%= config.bin %> device rename <device-id> new-robot-name",
2942
+ "<%= config.bin %> device rename <device-id> new-robot-name --json"
3100
2943
  ],
3101
2944
  "flags": {
3102
2945
  "json": {
@@ -3125,47 +2968,40 @@
3125
2968
  "name": "stage",
3126
2969
  "allowNo": false,
3127
2970
  "type": "boolean"
3128
- },
3129
- "name": {
3130
- "char": "n",
3131
- "description": "Task name (defaults to first 50 chars of goal)",
3132
- "name": "name",
3133
- "hasDynamicHelp": false,
3134
- "multiple": false,
3135
- "type": "option"
3136
2971
  }
3137
2972
  },
3138
2973
  "hasDynamicHelp": false,
3139
2974
  "hiddenAliases": [],
3140
- "id": "persona:delegate-task",
2975
+ "id": "device:rename",
3141
2976
  "pluginAlias": "@formant/formant-cli",
3142
2977
  "pluginName": "@formant/formant-cli",
3143
2978
  "pluginType": "core",
3144
2979
  "strict": true,
3145
- "summary": "Delegate an async task to a persona",
2980
+ "summary": "Rename a device",
3146
2981
  "enableJsonFlag": true,
3147
2982
  "isESM": true,
3148
2983
  "relativePath": [
3149
2984
  "dist",
3150
2985
  "commands",
3151
- "persona",
3152
- "delegate-task.js"
2986
+ "device",
2987
+ "rename.js"
3153
2988
  ]
3154
2989
  },
3155
- "persona:get": {
2990
+ "device:streams": {
3156
2991
  "aliases": [],
3157
2992
  "args": {
3158
2993
  "id": {
3159
- "description": "Persona ID (UUID)",
2994
+ "description": "Device ID (UUID)",
3160
2995
  "name": "id",
3161
2996
  "required": true
3162
2997
  }
3163
2998
  },
3164
- "description": "Get detailed information about a persona including its integrations and available tools.\n\nUses the user-level persona endpoint which merges org, persona, and user configurations.",
2999
+ "description": "List telemetry streams for a device with data presence.\n\nShows streams from the device configuration and any streams discovered from\ningested data. Each stream is enriched with presence info from the analytics\nbackend: data point count, last seen time, and a freshness indicator\n(active/recent/stale/dormant).\n\nUnconfigured streams (discovered from data only) are marked with SOURCE \"data\".",
3165
3000
  "examples": [
3166
- "<%= config.bin %> personas get <persona-id>",
3167
- "<%= config.bin %> personas get <persona-id> --json",
3168
- "<%= config.bin %> personas get <persona-id> --dev"
3001
+ "<%= config.bin %> device streams <device-id>",
3002
+ "<%= config.bin %> device streams <device-id> --with-data",
3003
+ "<%= config.bin %> device streams <device-id> --with-data --days 30",
3004
+ "<%= config.bin %> device streams <device-id> --json"
3169
3005
  ],
3170
3006
  "flags": {
3171
3007
  "json": {
@@ -3194,33 +3030,54 @@
3194
3030
  "name": "stage",
3195
3031
  "allowNo": false,
3196
3032
  "type": "boolean"
3033
+ },
3034
+ "days": {
3035
+ "description": "How many days back to look for stream data presence",
3036
+ "name": "days",
3037
+ "default": 7,
3038
+ "hasDynamicHelp": false,
3039
+ "multiple": false,
3040
+ "type": "option"
3041
+ },
3042
+ "with-data": {
3043
+ "char": "w",
3044
+ "description": "Only show streams that have data in the --days window",
3045
+ "name": "with-data",
3046
+ "allowNo": false,
3047
+ "type": "boolean"
3197
3048
  }
3198
3049
  },
3199
3050
  "hasDynamicHelp": false,
3200
3051
  "hiddenAliases": [],
3201
- "id": "persona:get",
3052
+ "id": "device:streams",
3202
3053
  "pluginAlias": "@formant/formant-cli",
3203
3054
  "pluginName": "@formant/formant-cli",
3204
3055
  "pluginType": "core",
3205
3056
  "strict": true,
3206
- "summary": "Get persona details and tools",
3057
+ "summary": "List device streams with data presence",
3207
3058
  "enableJsonFlag": true,
3208
3059
  "isESM": true,
3209
3060
  "relativePath": [
3210
3061
  "dist",
3211
3062
  "commands",
3212
- "persona",
3213
- "get.js"
3063
+ "device",
3064
+ "streams.js"
3214
3065
  ]
3215
3066
  },
3216
- "persona:list": {
3067
+ "device:tag": {
3217
3068
  "aliases": [],
3218
- "args": {},
3219
- "description": "List AI personas available in your organization.\n\nShows both built-in and custom personas with their ID, name, and description.",
3069
+ "args": {
3070
+ "id": {
3071
+ "description": "Device ID (UUID)",
3072
+ "name": "id",
3073
+ "required": true
3074
+ }
3075
+ },
3076
+ "description": "Add or update tags on a device.\n\nTags are key-value pairs. If a tag key already exists, its value will be updated.\nSpecify one or more tags with --tag key=value.",
3220
3077
  "examples": [
3221
- "<%= config.bin %> personas list",
3222
- "<%= config.bin %> personas list --json",
3223
- "<%= config.bin %> personas list --dev"
3078
+ "<%= config.bin %> device tag <device-id> --tag location=warehouse",
3079
+ "<%= config.bin %> device tag <device-id> --tag env=prod --tag region=us-east",
3080
+ "<%= config.bin %> device tag <device-id> --tag location=factory --json"
3224
3081
  ],
3225
3082
  "flags": {
3226
3083
  "json": {
@@ -3249,39 +3106,48 @@
3249
3106
  "name": "stage",
3250
3107
  "allowNo": false,
3251
3108
  "type": "boolean"
3109
+ },
3110
+ "tag": {
3111
+ "char": "t",
3112
+ "description": "Tag to add or update (key=value), can be specified multiple times",
3113
+ "name": "tag",
3114
+ "required": true,
3115
+ "hasDynamicHelp": false,
3116
+ "multiple": true,
3117
+ "type": "option"
3252
3118
  }
3253
3119
  },
3254
3120
  "hasDynamicHelp": false,
3255
3121
  "hiddenAliases": [],
3256
- "id": "persona:list",
3122
+ "id": "device:tag",
3257
3123
  "pluginAlias": "@formant/formant-cli",
3258
3124
  "pluginName": "@formant/formant-cli",
3259
3125
  "pluginType": "core",
3260
3126
  "strict": true,
3261
- "summary": "List AI personas",
3127
+ "summary": "Add or update tags on a device",
3262
3128
  "enableJsonFlag": true,
3263
3129
  "isESM": true,
3264
3130
  "relativePath": [
3265
3131
  "dist",
3266
3132
  "commands",
3267
- "persona",
3268
- "list.js"
3133
+ "device",
3134
+ "tag.js"
3269
3135
  ]
3270
3136
  },
3271
- "persona:task-status": {
3137
+ "device:untag": {
3272
3138
  "aliases": [],
3273
3139
  "args": {
3274
- "taskId": {
3275
- "description": "Task ID (from delegate-task output)",
3276
- "name": "taskId",
3140
+ "id": {
3141
+ "description": "Device ID (UUID)",
3142
+ "name": "id",
3277
3143
  "required": true
3278
3144
  }
3279
3145
  },
3280
- "description": "Check the status and results of a delegated task.\n\nShows all runs for a task including their status, result summary, and timestamps.",
3146
+ "description": "Remove tags from a device.\n\nSpecify one or more tag keys to remove with --key.",
3281
3147
  "examples": [
3282
- "<%= config.bin %> persona task-status <task-id>",
3283
- "<%= config.bin %> persona task-status <task-id> --json",
3284
- "<%= config.bin %> persona task-status <task-id> --dev"
3148
+ "<%= config.bin %> device untag <device-id> --key location",
3149
+ "<%= config.bin %> device untag <device-id> --key env --key region",
3150
+ "<%= config.bin %> device untag <device-id> --key location --json"
3285
3151
  ],
3286
3152
  "flags": {
3287
3153
  "json": {
@@ -3310,35 +3176,45 @@
3310
3176
  "name": "stage",
3311
3177
  "allowNo": false,
3312
3178
  "type": "boolean"
3179
+ },
3180
+ "key": {
3181
+ "char": "k",
3182
+ "description": "Tag key to remove, can be specified multiple times",
3183
+ "name": "key",
3184
+ "required": true,
3185
+ "hasDynamicHelp": false,
3186
+ "multiple": true,
3187
+ "type": "option"
3313
3188
  }
3314
3189
  },
3315
3190
  "hasDynamicHelp": false,
3316
3191
  "hiddenAliases": [],
3317
- "id": "persona:task-status",
3192
+ "id": "device:untag",
3318
3193
  "pluginAlias": "@formant/formant-cli",
3319
3194
  "pluginName": "@formant/formant-cli",
3320
3195
  "pluginType": "core",
3321
3196
  "strict": true,
3322
- "summary": "Check status of a delegated task",
3197
+ "summary": "Remove tags from a device",
3323
3198
  "enableJsonFlag": true,
3324
3199
  "isESM": true,
3325
3200
  "relativePath": [
3326
3201
  "dist",
3327
3202
  "commands",
3328
- "persona",
3329
- "task-status.js"
3203
+ "device",
3204
+ "untag.js"
3330
3205
  ]
3331
3206
  },
3332
3207
  "query": {
3333
3208
  "aliases": [],
3334
3209
  "args": {},
3335
- "description": "Query telemetry stream data for a device over a time range.\n\nReturns time-series datapoints for the specified stream(s). Supports aggregation\nfor downsampling large datasets, and --latest to get only the most recent value.\n\nStream types: numeric, text, image, video, location, json, bitset, battery, health,\n\"numeric set\", \"point cloud\", localization, \"transform tree\", file.\n\nAggregate levels: second, 5 seconds, 30 seconds, minute, 5 minutes, 30 minutes,\nhour, 4 hours, 12 hours, day, week, month, year.",
3210
+ "description": "Query telemetry stream data for a device over a time range.\n\nReturns time-series datapoints for the specified stream(s). Supports aggregation\nfor downsampling large datasets, and --latest-values-only to get only the most recent value.\n\nUse --all-streams with --latest-values-only to automatically discover and query all\nstreams — both from the device configuration and from actual ingested data\n(unconfigured streams included).\n\nStream types: numeric, text, image, video, location, json, bitset, battery, health,\n\"numeric set\", \"point cloud\", localization, \"transform tree\", file.\n\nAggregate levels: second, 5 seconds, 30 seconds, minute, 5 minutes, 30 minutes,\nhour, 4 hours, 12 hours, day, week, month, year.",
3336
3211
  "examples": [
3337
3212
  "<%= config.bin %> query --device <id> --stream battery_level --start 2026-01-01 --end 2026-01-02",
3338
3213
  "<%= config.bin %> query --device <id> --stream speed --aggregate hour --start 2026-01-01 --end 2026-02-01",
3339
3214
  "<%= config.bin %> query --device <id> --stream battery_level --stream temperature --start 2026-01-01 --end 2026-01-02",
3340
3215
  "<%= config.bin %> query --device <id1> --device <id2> --stream battery_level --start 2026-01-01 --end 2026-01-02",
3341
- "<%= config.bin %> query --device <id> --stream battery_level --latest",
3216
+ "<%= config.bin %> query --device <id> --stream battery_level --start 2026-01-01 --end 2026-02-01 --latest-values-only",
3217
+ "<%= config.bin %> query --device <id> --all-streams --start 2026-01-01 --end 2026-02-01 --latest-values-only",
3342
3218
  "<%= config.bin %> query --device <id> --stream temperature --type numeric --json"
3343
3219
  ],
3344
3220
  "flags": {
@@ -3377,6 +3253,20 @@
3377
3253
  "multiple": false,
3378
3254
  "type": "option"
3379
3255
  },
3256
+ "all-streams": {
3257
+ "description": "Query all streams for the device — from config and from ingested data (requires single --device and --latest-values-only)",
3258
+ "name": "all-streams",
3259
+ "allowNo": false,
3260
+ "type": "boolean"
3261
+ },
3262
+ "days": {
3263
+ "description": "How many days back to look for unconfigured streams when using --all-streams",
3264
+ "name": "days",
3265
+ "default": 14,
3266
+ "hasDynamicHelp": false,
3267
+ "multiple": false,
3268
+ "type": "option"
3269
+ },
3380
3270
  "device": {
3381
3271
  "char": "d",
3382
3272
  "description": "Device ID(s), can be specified multiple times",
@@ -3389,13 +3279,14 @@
3389
3279
  "end": {
3390
3280
  "description": "End time (ISO 8601)",
3391
3281
  "name": "end",
3282
+ "required": true,
3392
3283
  "hasDynamicHelp": false,
3393
3284
  "multiple": false,
3394
3285
  "type": "option"
3395
3286
  },
3396
- "latest": {
3287
+ "latest-values-only": {
3397
3288
  "description": "Only return the most recent value per stream",
3398
- "name": "latest",
3289
+ "name": "latest-values-only",
3399
3290
  "allowNo": false,
3400
3291
  "type": "boolean"
3401
3292
  },
@@ -3410,6 +3301,7 @@
3410
3301
  "start": {
3411
3302
  "description": "Start time (ISO 8601)",
3412
3303
  "name": "start",
3304
+ "required": true,
3413
3305
  "hasDynamicHelp": false,
3414
3306
  "multiple": false,
3415
3307
  "type": "option"
@@ -3418,7 +3310,6 @@
3418
3310
  "char": "s",
3419
3311
  "description": "Stream name(s), can be specified multiple times",
3420
3312
  "name": "stream",
3421
- "required": true,
3422
3313
  "hasDynamicHelp": false,
3423
3314
  "multiple": true,
3424
3315
  "type": "option"
@@ -3448,15 +3339,25 @@
3448
3339
  "index.js"
3449
3340
  ]
3450
3341
  },
3451
- "query:latest-values": {
3342
+ "persona:delegate-task": {
3452
3343
  "aliases": [],
3453
- "args": {},
3454
- "description": "Get the latest values for streams across devices.\n\nReturns the most recent value for specified streams without needing to specify\na time range. Useful for checking current sensor readings.\n\nUse --all-streams with a single device to automatically discover and query all\nstreams — both from the device configuration and from actual ingested data\n(unconfigured streams included).",
3344
+ "args": {
3345
+ "id": {
3346
+ "description": "Persona ID (UUID)",
3347
+ "name": "id",
3348
+ "required": true
3349
+ },
3350
+ "goal": {
3351
+ "description": "The task goal / instruction for the persona",
3352
+ "name": "goal",
3353
+ "required": true
3354
+ }
3355
+ },
3356
+ "description": "Delegate a task to a persona for async execution.\n\nCreates a task with the given goal, assigns it to the persona, and queues it to run in the background. Returns immediately with a task ID you can use to check status later via \"persona task-status\".",
3455
3357
  "examples": [
3456
- "<%= config.bin %> query latest-values --device <id> --stream battery_level",
3457
- "<%= config.bin %> query latest-values --device <id> --stream temperature --stream humidity",
3458
- "<%= config.bin %> query latest-values --device <id> --all-streams",
3459
- "<%= config.bin %> query latest-values --device <id> --all-streams --json"
3358
+ "<%= config.bin %> persona delegate-task <persona-id> \"Analyze recent device failures and summarize findings\"",
3359
+ "<%= config.bin %> persona delegate-task <persona-id> \"Generate a daily report of fleet health\" --name \"Daily Fleet Report\"",
3360
+ "<%= config.bin %> persona delegate-task <persona-id> \"Check all offline devices\" --dev"
3460
3361
  ],
3461
3362
  "flags": {
3462
3363
  "json": {
@@ -3486,62 +3387,46 @@
3486
3387
  "allowNo": false,
3487
3388
  "type": "boolean"
3488
3389
  },
3489
- "all-streams": {
3490
- "description": "Query all streams for the device — from config and from ingested data (requires single --device)",
3491
- "name": "all-streams",
3492
- "allowNo": false,
3493
- "type": "boolean"
3494
- },
3495
- "days": {
3496
- "description": "How many days back to look for unconfigured streams when using --all-streams",
3497
- "name": "days",
3498
- "default": 14,
3390
+ "name": {
3391
+ "char": "n",
3392
+ "description": "Task name (defaults to first 50 chars of goal)",
3393
+ "name": "name",
3499
3394
  "hasDynamicHelp": false,
3500
3395
  "multiple": false,
3501
3396
  "type": "option"
3502
- },
3503
- "device": {
3504
- "char": "d",
3505
- "description": "Device ID (UUID)",
3506
- "name": "device",
3507
- "required": true,
3508
- "hasDynamicHelp": false,
3509
- "multiple": true,
3510
- "type": "option"
3511
- },
3512
- "stream": {
3513
- "char": "s",
3514
- "description": "Stream name(s), can be specified multiple times",
3515
- "name": "stream",
3516
- "hasDynamicHelp": false,
3517
- "multiple": true,
3518
- "type": "option"
3519
3397
  }
3520
3398
  },
3521
3399
  "hasDynamicHelp": false,
3522
3400
  "hiddenAliases": [],
3523
- "id": "query:latest-values",
3401
+ "id": "persona:delegate-task",
3524
3402
  "pluginAlias": "@formant/formant-cli",
3525
3403
  "pluginName": "@formant/formant-cli",
3526
3404
  "pluginType": "core",
3527
3405
  "strict": true,
3528
- "summary": "Get latest stream values",
3406
+ "summary": "Delegate an async task to a persona",
3529
3407
  "enableJsonFlag": true,
3530
3408
  "isESM": true,
3531
3409
  "relativePath": [
3532
3410
  "dist",
3533
3411
  "commands",
3534
- "query",
3535
- "latest-values.js"
3412
+ "persona",
3413
+ "delegate-task.js"
3536
3414
  ]
3537
3415
  },
3538
- "org:get": {
3416
+ "persona:get": {
3539
3417
  "aliases": [],
3540
- "args": {},
3541
- "description": "Get information about your organization.\n\nDisplays the organization associated with your authenticated account.\nNo ID is needed — it is resolved automatically from your credentials.",
3418
+ "args": {
3419
+ "id": {
3420
+ "description": "Persona ID (UUID)",
3421
+ "name": "id",
3422
+ "required": true
3423
+ }
3424
+ },
3425
+ "description": "Get detailed information about a persona including its integrations and available tools.\n\nUses the user-level persona endpoint which merges org, persona, and user configurations.",
3542
3426
  "examples": [
3543
- "<%= config.bin %> org get",
3544
- "<%= config.bin %> org get --json"
3427
+ "<%= config.bin %> personas get <persona-id>",
3428
+ "<%= config.bin %> personas get <persona-id> --json",
3429
+ "<%= config.bin %> personas get <persona-id> --dev"
3545
3430
  ],
3546
3431
  "flags": {
3547
3432
  "json": {
@@ -3574,30 +3459,29 @@
3574
3459
  },
3575
3460
  "hasDynamicHelp": false,
3576
3461
  "hiddenAliases": [],
3577
- "id": "org:get",
3462
+ "id": "persona:get",
3578
3463
  "pluginAlias": "@formant/formant-cli",
3579
3464
  "pluginName": "@formant/formant-cli",
3580
3465
  "pluginType": "core",
3581
3466
  "strict": true,
3582
- "summary": "Get your organization",
3467
+ "summary": "Get persona details and tools",
3583
3468
  "enableJsonFlag": true,
3584
3469
  "isESM": true,
3585
3470
  "relativePath": [
3586
3471
  "dist",
3587
3472
  "commands",
3588
- "org",
3473
+ "persona",
3589
3474
  "get.js"
3590
3475
  ]
3591
3476
  },
3592
- "org:update": {
3477
+ "persona:list": {
3593
3478
  "aliases": [],
3594
3479
  "args": {},
3595
- "description": "Update your organization's details.\n\nAt least one of --name or --description must be provided.",
3480
+ "description": "List AI personas available in your organization.\n\nShows both built-in and custom personas with their ID, name, and description.",
3596
3481
  "examples": [
3597
- "<%= config.bin %> org update --name \"My Fleet\"",
3598
- "<%= config.bin %> org update --description \"Production robot fleet\"",
3599
- "<%= config.bin %> org update --name \"My Fleet\" --description \"Production robot fleet\"",
3600
- "<%= config.bin %> org update --name \"My Fleet\" --json"
3482
+ "<%= config.bin %> personas list",
3483
+ "<%= config.bin %> personas list --json",
3484
+ "<%= config.bin %> personas list --dev"
3601
3485
  ],
3602
3486
  "flags": {
3603
3487
  "json": {
@@ -3626,54 +3510,99 @@
3626
3510
  "name": "stage",
3627
3511
  "allowNo": false,
3628
3512
  "type": "boolean"
3513
+ }
3514
+ },
3515
+ "hasDynamicHelp": false,
3516
+ "hiddenAliases": [],
3517
+ "id": "persona:list",
3518
+ "pluginAlias": "@formant/formant-cli",
3519
+ "pluginName": "@formant/formant-cli",
3520
+ "pluginType": "core",
3521
+ "strict": true,
3522
+ "summary": "List AI personas",
3523
+ "enableJsonFlag": true,
3524
+ "isESM": true,
3525
+ "relativePath": [
3526
+ "dist",
3527
+ "commands",
3528
+ "persona",
3529
+ "list.js"
3530
+ ]
3531
+ },
3532
+ "persona:task-status": {
3533
+ "aliases": [],
3534
+ "args": {
3535
+ "taskId": {
3536
+ "description": "Task ID (from delegate-task output)",
3537
+ "name": "taskId",
3538
+ "required": true
3539
+ }
3540
+ },
3541
+ "description": "Check the status and results of a delegated task.\n\nShows all runs for a task including their status, result summary, and timestamps.",
3542
+ "examples": [
3543
+ "<%= config.bin %> persona task-status <task-id>",
3544
+ "<%= config.bin %> persona task-status <task-id> --json",
3545
+ "<%= config.bin %> persona task-status <task-id> --dev"
3546
+ ],
3547
+ "flags": {
3548
+ "json": {
3549
+ "description": "Format output as json.",
3550
+ "helpGroup": "GLOBAL",
3551
+ "name": "json",
3552
+ "allowNo": false,
3553
+ "type": "boolean"
3629
3554
  },
3630
- "description": {
3631
- "char": "d",
3632
- "description": "New description for the organization",
3633
- "name": "description",
3634
- "hasDynamicHelp": false,
3635
- "multiple": false,
3636
- "type": "option"
3555
+ "dev": {
3556
+ "description": "Target the dev environment",
3557
+ "exclusive": [
3558
+ "stage"
3559
+ ],
3560
+ "helpGroup": "GLOBAL",
3561
+ "name": "dev",
3562
+ "allowNo": false,
3563
+ "type": "boolean"
3637
3564
  },
3638
- "name": {
3639
- "char": "n",
3640
- "description": "New name for the organization",
3641
- "name": "name",
3642
- "hasDynamicHelp": false,
3643
- "multiple": false,
3644
- "type": "option"
3565
+ "stage": {
3566
+ "description": "Target the stage environment",
3567
+ "exclusive": [
3568
+ "dev"
3569
+ ],
3570
+ "helpGroup": "GLOBAL",
3571
+ "name": "stage",
3572
+ "allowNo": false,
3573
+ "type": "boolean"
3645
3574
  }
3646
3575
  },
3647
3576
  "hasDynamicHelp": false,
3648
3577
  "hiddenAliases": [],
3649
- "id": "org:update",
3578
+ "id": "persona:task-status",
3650
3579
  "pluginAlias": "@formant/formant-cli",
3651
3580
  "pluginName": "@formant/formant-cli",
3652
3581
  "pluginType": "core",
3653
3582
  "strict": true,
3654
- "summary": "Update your organization",
3583
+ "summary": "Check status of a delegated task",
3655
3584
  "enableJsonFlag": true,
3656
3585
  "isESM": true,
3657
3586
  "relativePath": [
3658
3587
  "dist",
3659
3588
  "commands",
3660
- "org",
3661
- "update.js"
3589
+ "persona",
3590
+ "task-status.js"
3662
3591
  ]
3663
3592
  },
3664
- "user:get": {
3593
+ "schedule:get": {
3665
3594
  "aliases": [],
3666
3595
  "args": {
3667
3596
  "id": {
3668
- "description": "User ID (UUID)",
3597
+ "description": "Schedule ID (UUID)",
3669
3598
  "name": "id",
3670
3599
  "required": true
3671
3600
  }
3672
3601
  },
3673
- "description": "Get detailed information about a user.\n\nShows user details including email, name, roles, and account settings.",
3602
+ "description": "Get detailed information about a schedule.\n\nShows the full schedule configuration including cron expression, command template,\ninvestigation link, and execution settings.",
3674
3603
  "examples": [
3675
- "<%= config.bin %> user get <user-id>",
3676
- "<%= config.bin %> user get <user-id> --json"
3604
+ "<%= config.bin %> schedule get <schedule-id>",
3605
+ "<%= config.bin %> schedule get <schedule-id> --json"
3677
3606
  ],
3678
3607
  "flags": {
3679
3608
  "json": {
@@ -3706,28 +3635,28 @@
3706
3635
  },
3707
3636
  "hasDynamicHelp": false,
3708
3637
  "hiddenAliases": [],
3709
- "id": "user:get",
3638
+ "id": "schedule:get",
3710
3639
  "pluginAlias": "@formant/formant-cli",
3711
3640
  "pluginName": "@formant/formant-cli",
3712
3641
  "pluginType": "core",
3713
3642
  "strict": true,
3714
- "summary": "Get user details",
3643
+ "summary": "Get schedule details",
3715
3644
  "enableJsonFlag": true,
3716
3645
  "isESM": true,
3717
3646
  "relativePath": [
3718
3647
  "dist",
3719
3648
  "commands",
3720
- "user",
3649
+ "schedule",
3721
3650
  "get.js"
3722
3651
  ]
3723
3652
  },
3724
- "user:list": {
3653
+ "schedule:list": {
3725
3654
  "aliases": [],
3726
3655
  "args": {},
3727
- "description": "List all users in your organization.\n\nShows user accounts, their email addresses, and account status.",
3656
+ "description": "List all schedules in your organization.\n\nSchedules can trigger commands or investigations on a recurring (cron) or one-time basis.",
3728
3657
  "examples": [
3729
- "<%= config.bin %> user list",
3730
- "<%= config.bin %> user list --json"
3658
+ "<%= config.bin %> schedule list",
3659
+ "<%= config.bin %> schedule list --json"
3731
3660
  ],
3732
3661
  "flags": {
3733
3662
  "json": {
@@ -3760,34 +3689,34 @@
3760
3689
  },
3761
3690
  "hasDynamicHelp": false,
3762
3691
  "hiddenAliases": [],
3763
- "id": "user:list",
3692
+ "id": "schedule:list",
3764
3693
  "pluginAlias": "@formant/formant-cli",
3765
3694
  "pluginName": "@formant/formant-cli",
3766
3695
  "pluginType": "core",
3767
3696
  "strict": true,
3768
- "summary": "List users",
3697
+ "summary": "List schedules",
3769
3698
  "enableJsonFlag": true,
3770
3699
  "isESM": true,
3771
3700
  "relativePath": [
3772
3701
  "dist",
3773
3702
  "commands",
3774
- "user",
3703
+ "schedule",
3775
3704
  "list.js"
3776
3705
  ]
3777
3706
  },
3778
- "schedule:get": {
3707
+ "user:get": {
3779
3708
  "aliases": [],
3780
3709
  "args": {
3781
3710
  "id": {
3782
- "description": "Schedule ID (UUID)",
3711
+ "description": "User ID (UUID)",
3783
3712
  "name": "id",
3784
3713
  "required": true
3785
3714
  }
3786
3715
  },
3787
- "description": "Get detailed information about a schedule.\n\nShows the full schedule configuration including cron expression, command template,\ninvestigation link, and execution settings.",
3716
+ "description": "Get detailed information about a user.\n\nShows user details including email, name, roles, and account settings.",
3788
3717
  "examples": [
3789
- "<%= config.bin %> schedule get <schedule-id>",
3790
- "<%= config.bin %> schedule get <schedule-id> --json"
3718
+ "<%= config.bin %> user get <user-id>",
3719
+ "<%= config.bin %> user get <user-id> --json"
3791
3720
  ],
3792
3721
  "flags": {
3793
3722
  "json": {
@@ -3820,28 +3749,28 @@
3820
3749
  },
3821
3750
  "hasDynamicHelp": false,
3822
3751
  "hiddenAliases": [],
3823
- "id": "schedule:get",
3752
+ "id": "user:get",
3824
3753
  "pluginAlias": "@formant/formant-cli",
3825
3754
  "pluginName": "@formant/formant-cli",
3826
3755
  "pluginType": "core",
3827
3756
  "strict": true,
3828
- "summary": "Get schedule details",
3757
+ "summary": "Get user details",
3829
3758
  "enableJsonFlag": true,
3830
3759
  "isESM": true,
3831
3760
  "relativePath": [
3832
3761
  "dist",
3833
3762
  "commands",
3834
- "schedule",
3763
+ "user",
3835
3764
  "get.js"
3836
3765
  ]
3837
3766
  },
3838
- "schedule:list": {
3767
+ "user:list": {
3839
3768
  "aliases": [],
3840
3769
  "args": {},
3841
- "description": "List all schedules in your organization.\n\nSchedules can trigger commands or investigations on a recurring (cron) or one-time basis.",
3770
+ "description": "List all users in your organization.\n\nShows user accounts, their email addresses, and account status.",
3842
3771
  "examples": [
3843
- "<%= config.bin %> schedule list",
3844
- "<%= config.bin %> schedule list --json"
3772
+ "<%= config.bin %> user list",
3773
+ "<%= config.bin %> user list --json"
3845
3774
  ],
3846
3775
  "flags": {
3847
3776
  "json": {
@@ -3874,18 +3803,18 @@
3874
3803
  },
3875
3804
  "hasDynamicHelp": false,
3876
3805
  "hiddenAliases": [],
3877
- "id": "schedule:list",
3806
+ "id": "user:list",
3878
3807
  "pluginAlias": "@formant/formant-cli",
3879
3808
  "pluginName": "@formant/formant-cli",
3880
3809
  "pluginType": "core",
3881
3810
  "strict": true,
3882
- "summary": "List schedules",
3811
+ "summary": "List users",
3883
3812
  "enableJsonFlag": true,
3884
3813
  "isESM": true,
3885
3814
  "relativePath": [
3886
3815
  "dist",
3887
3816
  "commands",
3888
- "schedule",
3817
+ "user",
3889
3818
  "list.js"
3890
3819
  ]
3891
3820
  },
@@ -4349,5 +4278,5 @@
4349
4278
  ]
4350
4279
  }
4351
4280
  },
4352
- "version": "0.4.4"
4281
+ "version": "0.4.5"
4353
4282
  }