@formant/formant-cli 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +380 -116
  2. package/dist/commands/devices/streams.d.ts +3 -0
  3. package/dist/commands/devices/streams.js +71 -27
  4. package/dist/commands/devices/streams.js.map +1 -1
  5. package/dist/commands/ingest/batch.d.ts +21 -0
  6. package/dist/commands/ingest/batch.js +170 -0
  7. package/dist/commands/ingest/batch.js.map +1 -0
  8. package/dist/commands/ingest/bitset.d.ts +15 -0
  9. package/dist/commands/ingest/bitset.js +128 -0
  10. package/dist/commands/ingest/bitset.js.map +1 -0
  11. package/dist/commands/ingest/health.d.ts +15 -0
  12. package/dist/commands/ingest/health.js +94 -0
  13. package/dist/commands/ingest/health.js.map +1 -0
  14. package/dist/commands/ingest/image.d.ts +15 -0
  15. package/dist/commands/ingest/image.js +99 -0
  16. package/dist/commands/ingest/image.js.map +1 -0
  17. package/dist/commands/ingest/json.d.ts +16 -0
  18. package/dist/commands/ingest/json.js +92 -0
  19. package/dist/commands/ingest/json.js.map +1 -0
  20. package/dist/commands/ingest/numeric.d.ts +16 -0
  21. package/dist/commands/ingest/numeric.js +83 -0
  22. package/dist/commands/ingest/numeric.js.map +1 -0
  23. package/dist/commands/ingest/text.d.ts +16 -0
  24. package/dist/commands/ingest/text.js +80 -0
  25. package/dist/commands/ingest/text.js.map +1 -0
  26. package/dist/commands/ingest/video.d.ts +16 -0
  27. package/dist/commands/ingest/video.js +120 -0
  28. package/dist/commands/ingest/video.js.map +1 -0
  29. package/dist/commands/query/latest-values.d.ts +1 -0
  30. package/dist/commands/query/latest-values.js +41 -15
  31. package/dist/commands/query/latest-values.js.map +1 -1
  32. package/dist/help.js +103 -53
  33. package/dist/help.js.map +1 -1
  34. package/dist/lib/api.d.ts +1 -1
  35. package/dist/lib/api.js +3 -0
  36. package/dist/lib/api.js.map +1 -1
  37. package/oclif.manifest.json +1396 -590
  38. package/package.json +4 -1
@@ -140,120 +140,6 @@
140
140
  "tables.js"
141
141
  ]
142
142
  },
143
- "event-triggers:get": {
144
- "aliases": [],
145
- "args": {
146
- "id": {
147
- "description": "Event trigger ID (UUID)",
148
- "name": "id",
149
- "required": true
150
- }
151
- },
152
- "description": "Get detailed information about an event trigger.\n\nShows the full trigger configuration including conditions, exit conditions, commands\nit executes, and device targeting filters.",
153
- "examples": [
154
- "<%= config.bin %> event-triggers get <trigger-id>",
155
- "<%= config.bin %> event-triggers get <trigger-id> --json"
156
- ],
157
- "flags": {
158
- "json": {
159
- "description": "Format output as json.",
160
- "helpGroup": "GLOBAL",
161
- "name": "json",
162
- "allowNo": false,
163
- "type": "boolean"
164
- },
165
- "dev": {
166
- "description": "Target the dev environment",
167
- "exclusive": [
168
- "stage"
169
- ],
170
- "helpGroup": "GLOBAL",
171
- "name": "dev",
172
- "allowNo": false,
173
- "type": "boolean"
174
- },
175
- "stage": {
176
- "description": "Target the stage environment",
177
- "exclusive": [
178
- "dev"
179
- ],
180
- "helpGroup": "GLOBAL",
181
- "name": "stage",
182
- "allowNo": false,
183
- "type": "boolean"
184
- }
185
- },
186
- "hasDynamicHelp": false,
187
- "hiddenAliases": [],
188
- "id": "event-triggers:get",
189
- "pluginAlias": "@formant/formant-cli",
190
- "pluginName": "@formant/formant-cli",
191
- "pluginType": "core",
192
- "strict": true,
193
- "summary": "Get event trigger details",
194
- "enableJsonFlag": true,
195
- "isESM": true,
196
- "relativePath": [
197
- "dist",
198
- "commands",
199
- "event-triggers",
200
- "get.js"
201
- ]
202
- },
203
- "event-triggers:list": {
204
- "aliases": [],
205
- "args": {},
206
- "description": "List all event trigger rules in your organization.\n\nEvent triggers monitor device data and generate events/signals when conditions are met.\nThey can trigger investigations, send notifications, or execute commands.",
207
- "examples": [
208
- "<%= config.bin %> event-triggers list",
209
- "<%= config.bin %> event-triggers list --json"
210
- ],
211
- "flags": {
212
- "json": {
213
- "description": "Format output as json.",
214
- "helpGroup": "GLOBAL",
215
- "name": "json",
216
- "allowNo": false,
217
- "type": "boolean"
218
- },
219
- "dev": {
220
- "description": "Target the dev environment",
221
- "exclusive": [
222
- "stage"
223
- ],
224
- "helpGroup": "GLOBAL",
225
- "name": "dev",
226
- "allowNo": false,
227
- "type": "boolean"
228
- },
229
- "stage": {
230
- "description": "Target the stage environment",
231
- "exclusive": [
232
- "dev"
233
- ],
234
- "helpGroup": "GLOBAL",
235
- "name": "stage",
236
- "allowNo": false,
237
- "type": "boolean"
238
- }
239
- },
240
- "hasDynamicHelp": false,
241
- "hiddenAliases": [],
242
- "id": "event-triggers:list",
243
- "pluginAlias": "@formant/formant-cli",
244
- "pluginName": "@formant/formant-cli",
245
- "pluginType": "core",
246
- "strict": true,
247
- "summary": "List event trigger rules",
248
- "enableJsonFlag": true,
249
- "isESM": true,
250
- "relativePath": [
251
- "dist",
252
- "commands",
253
- "event-triggers",
254
- "list.js"
255
- ]
256
- },
257
143
  "commands:for-device": {
258
144
  "aliases": [],
259
145
  "args": {
@@ -590,120 +476,6 @@
590
476
  "send.js"
591
477
  ]
592
478
  },
593
- "fleets:get": {
594
- "aliases": [],
595
- "args": {
596
- "id": {
597
- "description": "Fleet (group) ID (UUID)",
598
- "name": "id",
599
- "required": true
600
- }
601
- },
602
- "description": "Get detailed information about a device group (fleet).\n\nShows the full fleet configuration including member devices and settings.",
603
- "examples": [
604
- "<%= config.bin %> fleets get <fleet-id>",
605
- "<%= config.bin %> fleets get <fleet-id> --json"
606
- ],
607
- "flags": {
608
- "json": {
609
- "description": "Format output as json.",
610
- "helpGroup": "GLOBAL",
611
- "name": "json",
612
- "allowNo": false,
613
- "type": "boolean"
614
- },
615
- "dev": {
616
- "description": "Target the dev environment",
617
- "exclusive": [
618
- "stage"
619
- ],
620
- "helpGroup": "GLOBAL",
621
- "name": "dev",
622
- "allowNo": false,
623
- "type": "boolean"
624
- },
625
- "stage": {
626
- "description": "Target the stage environment",
627
- "exclusive": [
628
- "dev"
629
- ],
630
- "helpGroup": "GLOBAL",
631
- "name": "stage",
632
- "allowNo": false,
633
- "type": "boolean"
634
- }
635
- },
636
- "hasDynamicHelp": false,
637
- "hiddenAliases": [],
638
- "id": "fleets:get",
639
- "pluginAlias": "@formant/formant-cli",
640
- "pluginName": "@formant/formant-cli",
641
- "pluginType": "core",
642
- "strict": true,
643
- "summary": "Get fleet details",
644
- "enableJsonFlag": true,
645
- "isESM": true,
646
- "relativePath": [
647
- "dist",
648
- "commands",
649
- "fleets",
650
- "get.js"
651
- ]
652
- },
653
- "fleets:list": {
654
- "aliases": [],
655
- "args": {},
656
- "description": "List all device groups (fleets) in your organization.\n\nDevice groups allow you to organize and manage sets of devices together.",
657
- "examples": [
658
- "<%= config.bin %> fleets list",
659
- "<%= config.bin %> fleets list --json"
660
- ],
661
- "flags": {
662
- "json": {
663
- "description": "Format output as json.",
664
- "helpGroup": "GLOBAL",
665
- "name": "json",
666
- "allowNo": false,
667
- "type": "boolean"
668
- },
669
- "dev": {
670
- "description": "Target the dev environment",
671
- "exclusive": [
672
- "stage"
673
- ],
674
- "helpGroup": "GLOBAL",
675
- "name": "dev",
676
- "allowNo": false,
677
- "type": "boolean"
678
- },
679
- "stage": {
680
- "description": "Target the stage environment",
681
- "exclusive": [
682
- "dev"
683
- ],
684
- "helpGroup": "GLOBAL",
685
- "name": "stage",
686
- "allowNo": false,
687
- "type": "boolean"
688
- }
689
- },
690
- "hasDynamicHelp": false,
691
- "hiddenAliases": [],
692
- "id": "fleets:list",
693
- "pluginAlias": "@formant/formant-cli",
694
- "pluginName": "@formant/formant-cli",
695
- "pluginType": "core",
696
- "strict": true,
697
- "summary": "List device groups",
698
- "enableJsonFlag": true,
699
- "isESM": true,
700
- "relativePath": [
701
- "dist",
702
- "commands",
703
- "fleets",
704
- "list.js"
705
- ]
706
- },
707
479
  "devices:config": {
708
480
  "aliases": [],
709
481
  "args": {
@@ -1176,10 +948,11 @@
1176
948
  "required": true
1177
949
  }
1178
950
  },
1179
- "description": "List telemetry streams configured on a device.\n\nShows a clean view of stream definitions parsed from the device configuration,\nincluding stream names, types, topics, and quality settings.",
951
+ "description": "List telemetry streams for a device.\n\nShows streams parsed from the device configuration as well as any streams\ndiscovered from actual ingested data (even if not explicitly configured).\nUnconfigured streams are marked with a SOURCE of \"data\" in the output.",
1180
952
  "examples": [
1181
953
  "<%= config.bin %> devices streams <device-id>",
1182
- "<%= config.bin %> devices streams <device-id> --json"
954
+ "<%= config.bin %> devices streams <device-id> --json",
955
+ "<%= config.bin %> devices streams <device-id> --days 30"
1183
956
  ],
1184
957
  "flags": {
1185
958
  "json": {
@@ -1208,6 +981,14 @@
1208
981
  "name": "stage",
1209
982
  "allowNo": false,
1210
983
  "type": "boolean"
984
+ },
985
+ "days": {
986
+ "description": "How many days back to look for unconfigured streams in ingested data",
987
+ "name": "days",
988
+ "default": 14,
989
+ "hasDynamicHelp": false,
990
+ "multiple": false,
991
+ "type": "option"
1211
992
  }
1212
993
  },
1213
994
  "hasDynamicHelp": false,
@@ -1367,19 +1148,19 @@
1367
1148
  "untag.js"
1368
1149
  ]
1369
1150
  },
1370
- "kv:get": {
1151
+ "event-triggers:get": {
1371
1152
  "aliases": [],
1372
1153
  "args": {
1373
- "key": {
1374
- "description": "Key to retrieve",
1375
- "name": "key",
1154
+ "id": {
1155
+ "description": "Event trigger ID (UUID)",
1156
+ "name": "id",
1376
1157
  "required": true
1377
1158
  }
1378
1159
  },
1379
- "description": "Get a value from the key-value store.\n\nThe key-value store allows devices and applications to store metadata.",
1160
+ "description": "Get detailed information about an event trigger.\n\nShows the full trigger configuration including conditions, exit conditions, commands\nit executes, and device targeting filters.",
1380
1161
  "examples": [
1381
- "<%= config.bin %> kv get my-key",
1382
- "<%= config.bin %> kv get my-key --json"
1162
+ "<%= config.bin %> event-triggers get <trigger-id>",
1163
+ "<%= config.bin %> event-triggers get <trigger-id> --json"
1383
1164
  ],
1384
1165
  "flags": {
1385
1166
  "json": {
@@ -1412,30 +1193,28 @@
1412
1193
  },
1413
1194
  "hasDynamicHelp": false,
1414
1195
  "hiddenAliases": [],
1415
- "id": "kv:get",
1196
+ "id": "event-triggers:get",
1416
1197
  "pluginAlias": "@formant/formant-cli",
1417
1198
  "pluginName": "@formant/formant-cli",
1418
1199
  "pluginType": "core",
1419
1200
  "strict": true,
1420
- "summary": "Get key-value",
1201
+ "summary": "Get event trigger details",
1421
1202
  "enableJsonFlag": true,
1422
1203
  "isESM": true,
1423
1204
  "relativePath": [
1424
1205
  "dist",
1425
1206
  "commands",
1426
- "kv",
1207
+ "event-triggers",
1427
1208
  "get.js"
1428
1209
  ]
1429
1210
  },
1430
- "kv:list": {
1211
+ "event-triggers:list": {
1431
1212
  "aliases": [],
1432
1213
  "args": {},
1433
- "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.",
1214
+ "description": "List all event trigger rules in your organization.\n\nEvent triggers monitor device data and generate events/signals when conditions are met.\nThey can trigger investigations, send notifications, or execute commands.",
1434
1215
  "examples": [
1435
- "<%= config.bin %> kv list",
1436
- "<%= config.bin %> kv list --prefix config",
1437
- "<%= config.bin %> kv list --keys key1 --keys key2 --keys key3",
1438
- "<%= config.bin %> kv list --json"
1216
+ "<%= config.bin %> event-triggers list",
1217
+ "<%= config.bin %> event-triggers list --json"
1439
1218
  ],
1440
1219
  "flags": {
1441
1220
  "json": {
@@ -1464,59 +1243,38 @@
1464
1243
  "name": "stage",
1465
1244
  "allowNo": false,
1466
1245
  "type": "boolean"
1467
- },
1468
- "keys": {
1469
- "char": "k",
1470
- "description": "Specific keys to query (can be specified multiple times)",
1471
- "name": "keys",
1472
- "hasDynamicHelp": false,
1473
- "multiple": true,
1474
- "type": "option"
1475
- },
1476
- "prefix": {
1477
- "char": "p",
1478
- "description": "Filter keys by prefix",
1479
- "name": "prefix",
1480
- "hasDynamicHelp": false,
1481
- "multiple": false,
1482
- "type": "option"
1483
1246
  }
1484
1247
  },
1485
1248
  "hasDynamicHelp": false,
1486
1249
  "hiddenAliases": [],
1487
- "id": "kv:list",
1250
+ "id": "event-triggers:list",
1488
1251
  "pluginAlias": "@formant/formant-cli",
1489
1252
  "pluginName": "@formant/formant-cli",
1490
1253
  "pluginType": "core",
1491
1254
  "strict": true,
1492
- "summary": "List key-value keys",
1255
+ "summary": "List event trigger rules",
1493
1256
  "enableJsonFlag": true,
1494
1257
  "isESM": true,
1495
1258
  "relativePath": [
1496
1259
  "dist",
1497
1260
  "commands",
1498
- "kv",
1261
+ "event-triggers",
1499
1262
  "list.js"
1500
1263
  ]
1501
1264
  },
1502
- "kv:set": {
1265
+ "events:get": {
1503
1266
  "aliases": [],
1504
1267
  "args": {
1505
- "key": {
1506
- "description": "Key to set",
1507
- "name": "key",
1508
- "required": true
1509
- },
1510
- "value": {
1511
- "description": "Value to store (JSON string)",
1512
- "name": "value",
1268
+ "id": {
1269
+ "description": "Event ID (UUID)",
1270
+ "name": "id",
1513
1271
  "required": true
1514
1272
  }
1515
1273
  },
1516
- "description": "Set a value in the key-value store.\n\nStores a value associated with a key. The value should be a JSON string.",
1274
+ "description": "Get detailed information about a specific event by its ID.",
1517
1275
  "examples": [
1518
- "<%= config.bin %> kv set my-key '{\"data\": \"value\"}'",
1519
- "<%= config.bin %> kv set config '{\"setting\": true}'"
1276
+ "<%= config.bin %> events get <event-id>",
1277
+ "<%= config.bin %> events get <event-id> --json"
1520
1278
  ],
1521
1279
  "flags": {
1522
1280
  "json": {
@@ -1549,28 +1307,30 @@
1549
1307
  },
1550
1308
  "hasDynamicHelp": false,
1551
1309
  "hiddenAliases": [],
1552
- "id": "kv:set",
1310
+ "id": "events:get",
1553
1311
  "pluginAlias": "@formant/formant-cli",
1554
1312
  "pluginName": "@formant/formant-cli",
1555
1313
  "pluginType": "core",
1556
1314
  "strict": true,
1557
- "summary": "Set key-value",
1315
+ "summary": "Get an event by ID",
1558
1316
  "enableJsonFlag": true,
1559
1317
  "isESM": true,
1560
1318
  "relativePath": [
1561
1319
  "dist",
1562
1320
  "commands",
1563
- "kv",
1564
- "set.js"
1321
+ "events",
1322
+ "get.js"
1565
1323
  ]
1566
1324
  },
1567
- "org:get": {
1325
+ "events:list": {
1568
1326
  "aliases": [],
1569
1327
  "args": {},
1570
- "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.",
1328
+ "description": "View important events emitted by devices with optional filters.\n\nEvents are significant occurrences from robots and sensors (e.g., device online/offline,\nerrors, state changes, commands). They can trigger signals for investigation.\n\nEvent types include: triggered-event, datapoint-event, device-online, device-offline,\nintervention-request, intervention-response, teleop-session-record, command-request,\ncommand-response, custom, comment, system, annotation, task-summary, stateful.\n\nSeverities: info, warning, error, critical.",
1571
1329
  "examples": [
1572
- "<%= config.bin %> org get",
1573
- "<%= config.bin %> org get --json"
1330
+ "<%= config.bin %> events list",
1331
+ "<%= config.bin %> events list --device <id> --severity critical",
1332
+ "<%= config.bin %> events list --type device-offline --start 2026-01-01 --end 2026-01-02",
1333
+ "<%= config.bin %> events list --limit 100 --json"
1574
1334
  ],
1575
1335
  "flags": {
1576
1336
  "json": {
@@ -1599,34 +1359,85 @@
1599
1359
  "name": "stage",
1600
1360
  "allowNo": false,
1601
1361
  "type": "boolean"
1362
+ },
1363
+ "device": {
1364
+ "char": "d",
1365
+ "description": "Filter by device ID",
1366
+ "name": "device",
1367
+ "hasDynamicHelp": false,
1368
+ "multiple": false,
1369
+ "type": "option"
1370
+ },
1371
+ "end": {
1372
+ "description": "End time (ISO 8601)",
1373
+ "name": "end",
1374
+ "hasDynamicHelp": false,
1375
+ "multiple": false,
1376
+ "type": "option"
1377
+ },
1378
+ "limit": {
1379
+ "char": "l",
1380
+ "description": "Maximum number of events to return",
1381
+ "name": "limit",
1382
+ "default": 25,
1383
+ "hasDynamicHelp": false,
1384
+ "multiple": false,
1385
+ "type": "option"
1386
+ },
1387
+ "severity": {
1388
+ "description": "Filter by severity",
1389
+ "name": "severity",
1390
+ "hasDynamicHelp": false,
1391
+ "multiple": false,
1392
+ "options": [
1393
+ "info",
1394
+ "warning",
1395
+ "error",
1396
+ "critical"
1397
+ ],
1398
+ "type": "option"
1399
+ },
1400
+ "start": {
1401
+ "description": "Start time (ISO 8601)",
1402
+ "name": "start",
1403
+ "hasDynamicHelp": false,
1404
+ "multiple": false,
1405
+ "type": "option"
1406
+ },
1407
+ "type": {
1408
+ "description": "Filter by event type",
1409
+ "name": "type",
1410
+ "hasDynamicHelp": false,
1411
+ "multiple": false,
1412
+ "type": "option"
1602
1413
  }
1603
1414
  },
1604
1415
  "hasDynamicHelp": false,
1605
1416
  "hiddenAliases": [],
1606
- "id": "org:get",
1417
+ "id": "events:list",
1607
1418
  "pluginAlias": "@formant/formant-cli",
1608
1419
  "pluginName": "@formant/formant-cli",
1609
1420
  "pluginType": "core",
1610
1421
  "strict": true,
1611
- "summary": "Get your organization",
1422
+ "summary": "View events emitted by devices",
1612
1423
  "enableJsonFlag": true,
1613
1424
  "isESM": true,
1614
1425
  "relativePath": [
1615
1426
  "dist",
1616
1427
  "commands",
1617
- "org",
1618
- "get.js"
1428
+ "events",
1429
+ "list.js"
1619
1430
  ]
1620
1431
  },
1621
- "org:update": {
1432
+ "ingest:batch": {
1622
1433
  "aliases": [],
1623
1434
  "args": {},
1624
- "description": "Update your organization's details.\n\nAt least one of --name or --description must be provided.",
1435
+ "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).",
1625
1436
  "examples": [
1626
- "<%= config.bin %> org update --name \"My Fleet\"",
1627
- "<%= config.bin %> org update --description \"Production robot fleet\"",
1628
- "<%= config.bin %> org update --name \"My Fleet\" --description \"Production robot fleet\"",
1629
- "<%= config.bin %> org update --name \"My Fleet\" --json"
1437
+ "<%= config.bin %> ingest batch --file data.json",
1438
+ "<%= config.bin %> ingest batch --stdin < data.json",
1439
+ "cat payload.json | <%= config.bin %> ingest batch --stdin",
1440
+ "# 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}"
1630
1441
  ],
1631
1442
  "flags": {
1632
1443
  "json": {
@@ -1656,53 +1467,52 @@
1656
1467
  "allowNo": false,
1657
1468
  "type": "boolean"
1658
1469
  },
1659
- "description": {
1660
- "char": "d",
1661
- "description": "New description for the organization",
1662
- "name": "description",
1470
+ "file": {
1471
+ "char": "f",
1472
+ "description": "Path to JSON file containing batch payload",
1473
+ "exclusive": [
1474
+ "stdin"
1475
+ ],
1476
+ "name": "file",
1663
1477
  "hasDynamicHelp": false,
1664
1478
  "multiple": false,
1665
1479
  "type": "option"
1666
1480
  },
1667
- "name": {
1668
- "char": "n",
1669
- "description": "New name for the organization",
1670
- "name": "name",
1671
- "hasDynamicHelp": false,
1672
- "multiple": false,
1673
- "type": "option"
1481
+ "stdin": {
1482
+ "description": "Read JSON payload from stdin",
1483
+ "exclusive": [
1484
+ "file"
1485
+ ],
1486
+ "name": "stdin",
1487
+ "allowNo": false,
1488
+ "type": "boolean"
1674
1489
  }
1675
1490
  },
1676
1491
  "hasDynamicHelp": false,
1677
1492
  "hiddenAliases": [],
1678
- "id": "org:update",
1493
+ "id": "ingest:batch",
1679
1494
  "pluginAlias": "@formant/formant-cli",
1680
1495
  "pluginName": "@formant/formant-cli",
1681
1496
  "pluginType": "core",
1682
1497
  "strict": true,
1683
- "summary": "Update your organization",
1498
+ "summary": "Ingest batch data from file or stdin",
1684
1499
  "enableJsonFlag": true,
1685
1500
  "isESM": true,
1686
1501
  "relativePath": [
1687
1502
  "dist",
1688
1503
  "commands",
1689
- "org",
1690
- "update.js"
1504
+ "ingest",
1505
+ "batch.js"
1691
1506
  ]
1692
1507
  },
1693
- "events:get": {
1508
+ "ingest:bitset": {
1694
1509
  "aliases": [],
1695
- "args": {
1696
- "id": {
1697
- "description": "Event ID (UUID)",
1698
- "name": "id",
1699
- "required": true
1700
- }
1701
- },
1702
- "description": "Get detailed information about a specific event by its ID.",
1510
+ "args": {},
1511
+ "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",
1703
1512
  "examples": [
1704
- "<%= config.bin %> events get <event-id>",
1705
- "<%= config.bin %> events get <event-id> --json"
1513
+ "<%= config.bin %> ingest bitset --device <device-id> --stream sensors --keys \"door,window,motion\" --values \"true,false,true\"",
1514
+ "<%= config.bin %> ingest bitset --device <device-id> --stream flags --keys \"active,paused,error\" --values \"true,false,false\" --tag system=main",
1515
+ "<%= config.bin %> ingest bitset --device <device-id> --stream states --keys \"a,b\" --values \"false,true\""
1706
1516
  ],
1707
1517
  "flags": {
1708
1518
  "json": {
@@ -1731,34 +1541,84 @@
1731
1541
  "name": "stage",
1732
1542
  "allowNo": false,
1733
1543
  "type": "boolean"
1544
+ },
1545
+ "device": {
1546
+ "char": "d",
1547
+ "description": "Device ID (UUID)",
1548
+ "name": "device",
1549
+ "required": true,
1550
+ "hasDynamicHelp": false,
1551
+ "multiple": false,
1552
+ "type": "option"
1553
+ },
1554
+ "stream": {
1555
+ "char": "s",
1556
+ "description": "Stream name",
1557
+ "name": "stream",
1558
+ "required": true,
1559
+ "hasDynamicHelp": false,
1560
+ "multiple": false,
1561
+ "type": "option"
1562
+ },
1563
+ "keys": {
1564
+ "char": "k",
1565
+ "description": "Comma-separated list of key names (1-1000 keys, max 255 chars each)",
1566
+ "name": "keys",
1567
+ "required": true,
1568
+ "hasDynamicHelp": false,
1569
+ "multiple": false,
1570
+ "type": "option"
1571
+ },
1572
+ "values": {
1573
+ "char": "v",
1574
+ "description": "Comma-separated list of boolean values (true/false, must match key count)",
1575
+ "name": "values",
1576
+ "required": true,
1577
+ "hasDynamicHelp": false,
1578
+ "multiple": false,
1579
+ "type": "option"
1580
+ },
1581
+ "tag": {
1582
+ "char": "t",
1583
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
1584
+ "name": "tag",
1585
+ "hasDynamicHelp": false,
1586
+ "multiple": true,
1587
+ "type": "option"
1588
+ },
1589
+ "timestamp": {
1590
+ "description": "Unix timestamp in milliseconds (defaults to now)",
1591
+ "name": "timestamp",
1592
+ "hasDynamicHelp": false,
1593
+ "multiple": false,
1594
+ "type": "option"
1734
1595
  }
1735
1596
  },
1736
1597
  "hasDynamicHelp": false,
1737
1598
  "hiddenAliases": [],
1738
- "id": "events:get",
1599
+ "id": "ingest:bitset",
1739
1600
  "pluginAlias": "@formant/formant-cli",
1740
1601
  "pluginName": "@formant/formant-cli",
1741
1602
  "pluginType": "core",
1742
1603
  "strict": true,
1743
- "summary": "Get an event by ID",
1604
+ "summary": "Ingest bitset data",
1744
1605
  "enableJsonFlag": true,
1745
1606
  "isESM": true,
1746
1607
  "relativePath": [
1747
1608
  "dist",
1748
1609
  "commands",
1749
- "events",
1750
- "get.js"
1610
+ "ingest",
1611
+ "bitset.js"
1751
1612
  ]
1752
1613
  },
1753
- "events:list": {
1614
+ "ingest:health": {
1754
1615
  "aliases": [],
1755
1616
  "args": {},
1756
- "description": "View important events emitted by devices with optional filters.\n\nEvents are significant occurrences from robots and sensors (e.g., device online/offline,\nerrors, state changes, commands). They can trigger signals for investigation.\n\nEvent types include: triggered-event, datapoint-event, device-online, device-offline,\nintervention-request, intervention-response, teleop-session-record, command-request,\ncommand-response, custom, comment, system, annotation, task-summary, stateful.\n\nSeverities: info, warning, error, critical.",
1617
+ "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.",
1757
1618
  "examples": [
1758
- "<%= config.bin %> events list",
1759
- "<%= config.bin %> events list --device <id> --severity critical",
1760
- "<%= config.bin %> events list --type device-offline --start 2026-01-01 --end 2026-01-02",
1761
- "<%= config.bin %> events list --limit 100 --json"
1619
+ "<%= config.bin %> ingest health --device <device-id> --stream system_health --status operational",
1620
+ "<%= config.bin %> ingest health --device <device-id> --stream health --status error --tag component=motor",
1621
+ "<%= config.bin %> ingest health --device <device-id> --stream sync --status operational --clock-skew 150"
1762
1622
  ],
1763
1623
  "flags": {
1764
1624
  "json": {
@@ -1790,51 +1650,54 @@
1790
1650
  },
1791
1651
  "device": {
1792
1652
  "char": "d",
1793
- "description": "Filter by device ID",
1653
+ "description": "Device ID (UUID)",
1794
1654
  "name": "device",
1655
+ "required": true,
1795
1656
  "hasDynamicHelp": false,
1796
1657
  "multiple": false,
1797
1658
  "type": "option"
1798
1659
  },
1799
- "end": {
1800
- "description": "End time (ISO 8601)",
1801
- "name": "end",
1660
+ "stream": {
1661
+ "char": "s",
1662
+ "description": "Stream name",
1663
+ "name": "stream",
1664
+ "required": true,
1802
1665
  "hasDynamicHelp": false,
1803
1666
  "multiple": false,
1804
1667
  "type": "option"
1805
1668
  },
1806
- "limit": {
1807
- "char": "l",
1808
- "description": "Maximum number of events to return",
1809
- "name": "limit",
1810
- "default": 25,
1669
+ "status": {
1670
+ "description": "Health status (unknown, operational, offline, or error)",
1671
+ "name": "status",
1672
+ "required": true,
1811
1673
  "hasDynamicHelp": false,
1812
1674
  "multiple": false,
1675
+ "options": [
1676
+ "unknown",
1677
+ "operational",
1678
+ "offline",
1679
+ "error"
1680
+ ],
1813
1681
  "type": "option"
1814
1682
  },
1815
- "severity": {
1816
- "description": "Filter by severity",
1817
- "name": "severity",
1683
+ "clock-skew": {
1684
+ "description": "Clock skew in milliseconds (optional)",
1685
+ "name": "clock-skew",
1818
1686
  "hasDynamicHelp": false,
1819
1687
  "multiple": false,
1820
- "options": [
1821
- "info",
1822
- "warning",
1823
- "error",
1824
- "critical"
1825
- ],
1826
1688
  "type": "option"
1827
1689
  },
1828
- "start": {
1829
- "description": "Start time (ISO 8601)",
1830
- "name": "start",
1690
+ "tag": {
1691
+ "char": "t",
1692
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
1693
+ "name": "tag",
1831
1694
  "hasDynamicHelp": false,
1832
- "multiple": false,
1695
+ "multiple": true,
1833
1696
  "type": "option"
1834
1697
  },
1835
- "type": {
1836
- "description": "Filter by event type",
1837
- "name": "type",
1698
+ "timestamp": {
1699
+ "description": "Unix timestamp in milliseconds (defaults to now)",
1700
+ "name": "timestamp",
1838
1701
  "hasDynamicHelp": false,
1839
1702
  "multiple": false,
1840
1703
  "type": "option"
@@ -1842,30 +1705,29 @@
1842
1705
  },
1843
1706
  "hasDynamicHelp": false,
1844
1707
  "hiddenAliases": [],
1845
- "id": "events:list",
1708
+ "id": "ingest:health",
1846
1709
  "pluginAlias": "@formant/formant-cli",
1847
1710
  "pluginName": "@formant/formant-cli",
1848
1711
  "pluginType": "core",
1849
1712
  "strict": true,
1850
- "summary": "View events emitted by devices",
1713
+ "summary": "Ingest health status data",
1851
1714
  "enableJsonFlag": true,
1852
1715
  "isESM": true,
1853
1716
  "relativePath": [
1854
1717
  "dist",
1855
1718
  "commands",
1856
- "events",
1857
- "list.js"
1719
+ "ingest",
1720
+ "health.js"
1858
1721
  ]
1859
1722
  },
1860
- "query": {
1723
+ "ingest:image": {
1861
1724
  "aliases": [],
1862
1725
  "args": {},
1863
- "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.",
1726
+ "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.",
1864
1727
  "examples": [
1865
- "<%= config.bin %> query --device <id> --stream battery_level --start 2026-01-01 --end 2026-01-02",
1866
- "<%= config.bin %> query --device <id> --stream speed --aggregate hour --start 2026-01-01 --end 2026-02-01",
1867
- "<%= config.bin %> query --device <id> --stream battery_level --latest",
1868
- "<%= config.bin %> query --device <id> --stream temperature --type numeric --json"
1728
+ "<%= config.bin %> ingest image --device <device-id> --stream camera_front --url https://example.com/image.jpg",
1729
+ "<%= config.bin %> ingest image --device <device-id> --stream snapshot --url https://example.com/snap.png --size 1024000",
1730
+ "<%= config.bin %> ingest image --device <device-id> --stream detection --url https://example.com/detect.jpg --tag frame=123"
1869
1731
  ],
1870
1732
  "flags": {
1871
1733
  "json": {
@@ -1895,14 +1757,6 @@
1895
1757
  "allowNo": false,
1896
1758
  "type": "boolean"
1897
1759
  },
1898
- "aggregate": {
1899
- "char": "a",
1900
- "description": "Aggregation level for downsampling",
1901
- "name": "aggregate",
1902
- "hasDynamicHelp": false,
1903
- "multiple": false,
1904
- "type": "option"
1905
- },
1906
1760
  "device": {
1907
1761
  "char": "d",
1908
1762
  "description": "Device ID (UUID)",
@@ -1912,46 +1766,42 @@
1912
1766
  "multiple": false,
1913
1767
  "type": "option"
1914
1768
  },
1915
- "end": {
1916
- "description": "End time (ISO 8601)",
1917
- "name": "end",
1769
+ "stream": {
1770
+ "char": "s",
1771
+ "description": "Stream name",
1772
+ "name": "stream",
1773
+ "required": true,
1918
1774
  "hasDynamicHelp": false,
1919
1775
  "multiple": false,
1920
1776
  "type": "option"
1921
1777
  },
1922
- "latest": {
1923
- "description": "Only return the most recent value per stream",
1924
- "name": "latest",
1925
- "allowNo": false,
1926
- "type": "boolean"
1927
- },
1928
- "limit": {
1929
- "char": "l",
1930
- "description": "Maximum number of datapoints",
1931
- "name": "limit",
1778
+ "url": {
1779
+ "char": "u",
1780
+ "description": "Image URL (must be http:// or https://)",
1781
+ "name": "url",
1782
+ "required": true,
1932
1783
  "hasDynamicHelp": false,
1933
1784
  "multiple": false,
1934
1785
  "type": "option"
1935
1786
  },
1936
- "start": {
1937
- "description": "Start time (ISO 8601)",
1938
- "name": "start",
1787
+ "size": {
1788
+ "description": "Image size in bytes (optional)",
1789
+ "name": "size",
1939
1790
  "hasDynamicHelp": false,
1940
1791
  "multiple": false,
1941
1792
  "type": "option"
1942
1793
  },
1943
- "stream": {
1944
- "char": "s",
1945
- "description": "Stream name(s), can be specified multiple times",
1946
- "name": "stream",
1947
- "required": true,
1794
+ "tag": {
1795
+ "char": "t",
1796
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
1797
+ "name": "tag",
1948
1798
  "hasDynamicHelp": false,
1949
1799
  "multiple": true,
1950
1800
  "type": "option"
1951
1801
  },
1952
- "type": {
1953
- "description": "Filter by stream type",
1954
- "name": "type",
1802
+ "timestamp": {
1803
+ "description": "Unix timestamp in milliseconds (defaults to now)",
1804
+ "name": "timestamp",
1955
1805
  "hasDynamicHelp": false,
1956
1806
  "multiple": false,
1957
1807
  "type": "option"
@@ -1959,30 +1809,35 @@
1959
1809
  },
1960
1810
  "hasDynamicHelp": false,
1961
1811
  "hiddenAliases": [],
1962
- "id": "query",
1812
+ "id": "ingest:image",
1963
1813
  "pluginAlias": "@formant/formant-cli",
1964
1814
  "pluginName": "@formant/formant-cli",
1965
1815
  "pluginType": "core",
1966
1816
  "strict": true,
1967
- "summary": "Query telemetry stream data",
1817
+ "summary": "Ingest image data",
1968
1818
  "enableJsonFlag": true,
1969
1819
  "isESM": true,
1970
1820
  "relativePath": [
1971
1821
  "dist",
1972
1822
  "commands",
1973
- "query",
1974
- "index.js"
1823
+ "ingest",
1824
+ "image.js"
1975
1825
  ]
1976
1826
  },
1977
- "query:latest-values": {
1827
+ "ingest:json": {
1978
1828
  "aliases": [],
1979
- "args": {},
1980
- "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\nconfigured streams from the device configuration.",
1829
+ "args": {
1830
+ "value": {
1831
+ "description": "JSON value to ingest (as a JSON string)",
1832
+ "name": "value",
1833
+ "required": true
1834
+ }
1835
+ },
1836
+ "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.",
1981
1837
  "examples": [
1982
- "<%= config.bin %> query latest-values --device <id> --stream battery_level",
1983
- "<%= config.bin %> query latest-values --device <id> --stream temperature --stream humidity",
1984
- "<%= config.bin %> query latest-values --device <id> --all-streams",
1985
- "<%= config.bin %> query latest-values --device <id> --all-streams --json"
1838
+ "<%= config.bin %> ingest json '{\"x\":1,\"y\":2}' --device <device-id> --stream position",
1839
+ "<%= config.bin %> ingest json '{\"status\":\"active\",\"mode\":\"auto\"}' --device <device-id> --stream config",
1840
+ "<%= config.bin %> ingest json '[1,2,3,4,5]' --device <device-id> --stream array_data"
1986
1841
  ],
1987
1842
  "flags": {
1988
1843
  "json": {
@@ -2012,55 +1867,71 @@
2012
1867
  "allowNo": false,
2013
1868
  "type": "boolean"
2014
1869
  },
2015
- "all-streams": {
2016
- "description": "Query all configured streams for the device (requires single --device)",
2017
- "name": "all-streams",
2018
- "allowNo": false,
2019
- "type": "boolean"
2020
- },
2021
1870
  "device": {
2022
1871
  "char": "d",
2023
1872
  "description": "Device ID (UUID)",
2024
1873
  "name": "device",
2025
1874
  "required": true,
2026
1875
  "hasDynamicHelp": false,
2027
- "multiple": true,
1876
+ "multiple": false,
2028
1877
  "type": "option"
2029
1878
  },
2030
1879
  "stream": {
2031
1880
  "char": "s",
2032
- "description": "Stream name(s), can be specified multiple times",
1881
+ "description": "Stream name",
2033
1882
  "name": "stream",
1883
+ "required": true,
1884
+ "hasDynamicHelp": false,
1885
+ "multiple": false,
1886
+ "type": "option"
1887
+ },
1888
+ "tag": {
1889
+ "char": "t",
1890
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
1891
+ "name": "tag",
2034
1892
  "hasDynamicHelp": false,
2035
1893
  "multiple": true,
2036
1894
  "type": "option"
1895
+ },
1896
+ "timestamp": {
1897
+ "description": "Unix timestamp in milliseconds (defaults to now)",
1898
+ "name": "timestamp",
1899
+ "hasDynamicHelp": false,
1900
+ "multiple": false,
1901
+ "type": "option"
2037
1902
  }
2038
1903
  },
2039
1904
  "hasDynamicHelp": false,
2040
1905
  "hiddenAliases": [],
2041
- "id": "query:latest-values",
1906
+ "id": "ingest:json",
2042
1907
  "pluginAlias": "@formant/formant-cli",
2043
1908
  "pluginName": "@formant/formant-cli",
2044
1909
  "pluginType": "core",
2045
1910
  "strict": true,
2046
- "summary": "Get latest stream values",
1911
+ "summary": "Ingest JSON data",
2047
1912
  "enableJsonFlag": true,
2048
1913
  "isESM": true,
2049
1914
  "relativePath": [
2050
1915
  "dist",
2051
1916
  "commands",
2052
- "query",
2053
- "latest-values.js"
1917
+ "ingest",
1918
+ "json.js"
2054
1919
  ]
2055
1920
  },
2056
- "investigations:analytics": {
1921
+ "ingest:numeric": {
2057
1922
  "aliases": [],
2058
- "args": {},
2059
- "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.",
1923
+ "args": {
1924
+ "value": {
1925
+ "description": "Numeric value to ingest",
1926
+ "name": "value",
1927
+ "required": true
1928
+ }
1929
+ },
1930
+ "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.",
2060
1931
  "examples": [
2061
- "<%= config.bin %> investigations analytics --start 2026-01-01 --end 2026-02-01",
2062
- "<%= config.bin %> investigations analytics --start 2026-01-01 --end 2026-02-01 --interval hourly",
2063
- "<%= config.bin %> investigations analytics --start 2026-01-01 --end 2026-02-01 --group-by resultType --json"
1932
+ "<%= config.bin %> ingest numeric 42.5 --device <device-id> --stream battery_level",
1933
+ "<%= config.bin %> ingest numeric 98.6 --device <device-id> --stream temperature --tag unit=fahrenheit",
1934
+ "<%= config.bin %> ingest numeric 1500 --device <device-id> --stream rpm --timestamp 1700000000000"
2064
1935
  ],
2065
1936
  "flags": {
2066
1937
  "json": {
@@ -2090,41 +1961,35 @@
2090
1961
  "allowNo": false,
2091
1962
  "type": "boolean"
2092
1963
  },
2093
- "end": {
2094
- "description": "End time (ISO 8601)",
2095
- "name": "end",
1964
+ "device": {
1965
+ "char": "d",
1966
+ "description": "Device ID (UUID)",
1967
+ "name": "device",
2096
1968
  "required": true,
2097
1969
  "hasDynamicHelp": false,
2098
1970
  "multiple": false,
2099
1971
  "type": "option"
2100
1972
  },
2101
- "group-by": {
2102
- "description": "Group results by",
2103
- "name": "group-by",
1973
+ "stream": {
1974
+ "char": "s",
1975
+ "description": "Stream name",
1976
+ "name": "stream",
1977
+ "required": true,
2104
1978
  "hasDynamicHelp": false,
2105
1979
  "multiple": false,
2106
- "options": [
2107
- "resultType",
2108
- "signalType"
2109
- ],
2110
1980
  "type": "option"
2111
1981
  },
2112
- "interval": {
2113
- "description": "Time interval for aggregation",
2114
- "name": "interval",
2115
- "default": "daily",
1982
+ "tag": {
1983
+ "char": "t",
1984
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
1985
+ "name": "tag",
2116
1986
  "hasDynamicHelp": false,
2117
- "multiple": false,
2118
- "options": [
2119
- "daily",
2120
- "hourly"
2121
- ],
1987
+ "multiple": true,
2122
1988
  "type": "option"
2123
1989
  },
2124
- "start": {
2125
- "description": "Start time (ISO 8601)",
2126
- "name": "start",
2127
- "required": true,
1990
+ "timestamp": {
1991
+ "description": "Unix timestamp in milliseconds (defaults to now)",
1992
+ "name": "timestamp",
2128
1993
  "hasDynamicHelp": false,
2129
1994
  "multiple": false,
2130
1995
  "type": "option"
@@ -2132,34 +1997,35 @@
2132
1997
  },
2133
1998
  "hasDynamicHelp": false,
2134
1999
  "hiddenAliases": [],
2135
- "id": "investigations:analytics",
2000
+ "id": "ingest:numeric",
2136
2001
  "pluginAlias": "@formant/formant-cli",
2137
2002
  "pluginName": "@formant/formant-cli",
2138
2003
  "pluginType": "core",
2139
2004
  "strict": true,
2140
- "summary": "Get investigation analytics",
2005
+ "summary": "Ingest numeric data",
2141
2006
  "enableJsonFlag": true,
2142
2007
  "isESM": true,
2143
2008
  "relativePath": [
2144
2009
  "dist",
2145
2010
  "commands",
2146
- "investigations",
2147
- "analytics.js"
2011
+ "ingest",
2012
+ "numeric.js"
2148
2013
  ]
2149
2014
  },
2150
- "investigations:get": {
2015
+ "ingest:text": {
2151
2016
  "aliases": [],
2152
2017
  "args": {
2153
- "id": {
2154
- "description": "Investigation (taskflow) ID",
2155
- "name": "id",
2018
+ "value": {
2019
+ "description": "Text value to ingest",
2020
+ "name": "value",
2156
2021
  "required": true
2157
2022
  }
2158
2023
  },
2159
- "description": "Get detailed information about a specific investigation by ID.",
2024
+ "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.",
2160
2025
  "examples": [
2161
- "<%= config.bin %> investigations get <id>",
2162
- "<%= config.bin %> investigations get <id> --json"
2026
+ "<%= config.bin %> ingest text \"Robot started successfully\" --device <device-id> --stream status",
2027
+ "<%= config.bin %> ingest text \"Error: sensor offline\" --device <device-id> --stream errors --tag severity=high",
2028
+ "<%= config.bin %> ingest text \"Checkpoint A reached\" --device <device-id> --stream waypoints"
2163
2029
  ],
2164
2030
  "flags": {
2165
2031
  "json": {
@@ -2188,33 +2054,66 @@
2188
2054
  "name": "stage",
2189
2055
  "allowNo": false,
2190
2056
  "type": "boolean"
2057
+ },
2058
+ "device": {
2059
+ "char": "d",
2060
+ "description": "Device ID (UUID)",
2061
+ "name": "device",
2062
+ "required": true,
2063
+ "hasDynamicHelp": false,
2064
+ "multiple": false,
2065
+ "type": "option"
2066
+ },
2067
+ "stream": {
2068
+ "char": "s",
2069
+ "description": "Stream name",
2070
+ "name": "stream",
2071
+ "required": true,
2072
+ "hasDynamicHelp": false,
2073
+ "multiple": false,
2074
+ "type": "option"
2075
+ },
2076
+ "tag": {
2077
+ "char": "t",
2078
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
2079
+ "name": "tag",
2080
+ "hasDynamicHelp": false,
2081
+ "multiple": true,
2082
+ "type": "option"
2083
+ },
2084
+ "timestamp": {
2085
+ "description": "Unix timestamp in milliseconds (defaults to now)",
2086
+ "name": "timestamp",
2087
+ "hasDynamicHelp": false,
2088
+ "multiple": false,
2089
+ "type": "option"
2191
2090
  }
2192
2091
  },
2193
2092
  "hasDynamicHelp": false,
2194
2093
  "hiddenAliases": [],
2195
- "id": "investigations:get",
2094
+ "id": "ingest:text",
2196
2095
  "pluginAlias": "@formant/formant-cli",
2197
2096
  "pluginName": "@formant/formant-cli",
2198
2097
  "pluginType": "core",
2199
2098
  "strict": true,
2200
- "summary": "Get an investigation by ID",
2099
+ "summary": "Ingest text data",
2201
2100
  "enableJsonFlag": true,
2202
2101
  "isESM": true,
2203
2102
  "relativePath": [
2204
2103
  "dist",
2205
2104
  "commands",
2206
- "investigations",
2207
- "get.js"
2105
+ "ingest",
2106
+ "text.js"
2208
2107
  ]
2209
2108
  },
2210
- "investigations:list": {
2109
+ "ingest:video": {
2211
2110
  "aliases": [],
2212
2111
  "args": {},
2213
- "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.",
2112
+ "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).",
2214
2113
  "examples": [
2215
- "<%= config.bin %> investigations list",
2216
- "<%= config.bin %> investigations list --signal-handler",
2217
- "<%= config.bin %> investigations list --json"
2114
+ "<%= config.bin %> ingest video --device <device-id> --stream recordings --url https://example.com/video.mp4 --duration 5000",
2115
+ "<%= config.bin %> ingest video --device <device-id> --stream clips --url https://example.com/clip.webm --duration 3500 --size 2048000",
2116
+ "<%= config.bin %> ingest video --device <device-id> --stream event_video --url https://example.com/event.mov --duration 10000 --tag event=collision"
2218
2117
  ],
2219
2118
  "flags": {
2220
2119
  "json": {
@@ -2244,49 +2143,94 @@
2244
2143
  "allowNo": false,
2245
2144
  "type": "boolean"
2246
2145
  },
2247
- "signal-handler": {
2248
- "description": "Only show investigations that handle signals",
2249
- "name": "signal-handler",
2250
- "allowNo": false,
2251
- "type": "boolean"
2146
+ "device": {
2147
+ "char": "d",
2148
+ "description": "Device ID (UUID)",
2149
+ "name": "device",
2150
+ "required": true,
2151
+ "hasDynamicHelp": false,
2152
+ "multiple": false,
2153
+ "type": "option"
2154
+ },
2155
+ "stream": {
2156
+ "char": "s",
2157
+ "description": "Stream name",
2158
+ "name": "stream",
2159
+ "required": true,
2160
+ "hasDynamicHelp": false,
2161
+ "multiple": false,
2162
+ "type": "option"
2163
+ },
2164
+ "url": {
2165
+ "char": "u",
2166
+ "description": "Video URL (must be http:// or https://)",
2167
+ "name": "url",
2168
+ "required": true,
2169
+ "hasDynamicHelp": false,
2170
+ "multiple": false,
2171
+ "type": "option"
2172
+ },
2173
+ "duration": {
2174
+ "description": "Video duration in milliseconds (required)",
2175
+ "name": "duration",
2176
+ "required": true,
2177
+ "hasDynamicHelp": false,
2178
+ "multiple": false,
2179
+ "type": "option"
2180
+ },
2181
+ "size": {
2182
+ "description": "Video size in bytes (optional)",
2183
+ "name": "size",
2184
+ "hasDynamicHelp": false,
2185
+ "multiple": false,
2186
+ "type": "option"
2187
+ },
2188
+ "tag": {
2189
+ "char": "t",
2190
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
2191
+ "name": "tag",
2192
+ "hasDynamicHelp": false,
2193
+ "multiple": true,
2194
+ "type": "option"
2195
+ },
2196
+ "timestamp": {
2197
+ "description": "Unix timestamp in milliseconds (defaults to now)",
2198
+ "name": "timestamp",
2199
+ "hasDynamicHelp": false,
2200
+ "multiple": false,
2201
+ "type": "option"
2252
2202
  }
2253
2203
  },
2254
2204
  "hasDynamicHelp": false,
2255
2205
  "hiddenAliases": [],
2256
- "id": "investigations:list",
2206
+ "id": "ingest:video",
2257
2207
  "pluginAlias": "@formant/formant-cli",
2258
2208
  "pluginName": "@formant/formant-cli",
2259
2209
  "pluginType": "core",
2260
2210
  "strict": true,
2261
- "summary": "List investigations",
2211
+ "summary": "Ingest video data",
2262
2212
  "enableJsonFlag": true,
2263
2213
  "isESM": true,
2264
2214
  "relativePath": [
2265
2215
  "dist",
2266
2216
  "commands",
2267
- "investigations",
2268
- "list.js"
2217
+ "ingest",
2218
+ "video.js"
2269
2219
  ]
2270
2220
  },
2271
- "investigations:run": {
2221
+ "kv:get": {
2272
2222
  "aliases": [],
2273
2223
  "args": {
2274
- "investigationId": {
2275
- "description": "Investigation (taskflow) ID",
2276
- "name": "investigationId",
2277
- "required": true
2278
- },
2279
- "runId": {
2280
- "description": "Run ID",
2281
- "name": "runId",
2224
+ "key": {
2225
+ "description": "Key to retrieve",
2226
+ "name": "key",
2282
2227
  "required": true
2283
2228
  }
2284
2229
  },
2285
- "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.",
2230
+ "description": "Get a value from the key-value store.\n\nThe key-value store allows devices and applications to store metadata.",
2286
2231
  "examples": [
2287
- "<%= config.bin %> investigations run <investigation-id> <run-id>",
2288
- "<%= config.bin %> investigations run <investigation-id> <run-id> --log-only",
2289
- "<%= config.bin %> investigations run <investigation-id> <run-id> --json"
2232
+ "<%= config.bin %> kv get my-key",
2233
+ "<%= config.bin %> kv get my-key --json"
2290
2234
  ],
2291
2235
  "flags": {
2292
2236
  "json": {
@@ -2315,51 +2259,34 @@
2315
2259
  "name": "stage",
2316
2260
  "allowNo": false,
2317
2261
  "type": "boolean"
2318
- },
2319
- "log-only": {
2320
- "description": "Only show the execution log (skip run details)",
2321
- "name": "log-only",
2322
- "allowNo": false,
2323
- "type": "boolean"
2324
- },
2325
- "trace-signal": {
2326
- "description": "Fetch and display the signal and event information for this run",
2327
- "name": "trace-signal",
2328
- "allowNo": false,
2329
- "type": "boolean"
2330
2262
  }
2331
2263
  },
2332
2264
  "hasDynamicHelp": false,
2333
2265
  "hiddenAliases": [],
2334
- "id": "investigations:run",
2266
+ "id": "kv:get",
2335
2267
  "pluginAlias": "@formant/formant-cli",
2336
2268
  "pluginName": "@formant/formant-cli",
2337
2269
  "pluginType": "core",
2338
2270
  "strict": true,
2339
- "summary": "Get investigation run details and execution log",
2271
+ "summary": "Get key-value",
2340
2272
  "enableJsonFlag": true,
2341
2273
  "isESM": true,
2342
2274
  "relativePath": [
2343
2275
  "dist",
2344
2276
  "commands",
2345
- "investigations",
2346
- "run.js"
2277
+ "kv",
2278
+ "get.js"
2347
2279
  ]
2348
2280
  },
2349
- "investigations:runs-list": {
2281
+ "kv:list": {
2350
2282
  "aliases": [],
2351
- "args": {
2352
- "id": {
2353
- "description": "Investigation (taskflow) ID",
2354
- "name": "id",
2355
- "required": true
2356
- }
2357
- },
2358
- "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.",
2283
+ "args": {},
2284
+ "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.",
2359
2285
  "examples": [
2360
- "<%= config.bin %> investigations runs-list <id>",
2361
- "<%= config.bin %> investigations runs-list <id> --limit 50",
2362
- "<%= config.bin %> investigations runs-list <id> --details --json"
2286
+ "<%= config.bin %> kv list",
2287
+ "<%= config.bin %> kv list --prefix config",
2288
+ "<%= config.bin %> kv list --keys key1 --keys key2 --keys key3",
2289
+ "<%= config.bin %> kv list --json"
2363
2290
  ],
2364
2291
  "flags": {
2365
2292
  "json": {
@@ -2389,26 +2316,18 @@
2389
2316
  "allowNo": false,
2390
2317
  "type": "boolean"
2391
2318
  },
2392
- "details": {
2393
- "description": "Include detailed information about each run",
2394
- "name": "details",
2395
- "allowNo": false,
2396
- "type": "boolean"
2397
- },
2398
- "limit": {
2399
- "char": "l",
2400
- "description": "Maximum number of runs to return",
2401
- "name": "limit",
2402
- "default": 20,
2319
+ "keys": {
2320
+ "char": "k",
2321
+ "description": "Specific keys to query (can be specified multiple times)",
2322
+ "name": "keys",
2403
2323
  "hasDynamicHelp": false,
2404
- "multiple": false,
2324
+ "multiple": true,
2405
2325
  "type": "option"
2406
2326
  },
2407
- "offset": {
2408
- "char": "o",
2409
- "description": "Offset for pagination",
2410
- "name": "offset",
2411
- "default": 0,
2327
+ "prefix": {
2328
+ "char": "p",
2329
+ "description": "Filter keys by prefix",
2330
+ "name": "prefix",
2412
2331
  "hasDynamicHelp": false,
2413
2332
  "multiple": false,
2414
2333
  "type": "option"
@@ -2416,34 +2335,39 @@
2416
2335
  },
2417
2336
  "hasDynamicHelp": false,
2418
2337
  "hiddenAliases": [],
2419
- "id": "investigations:runs-list",
2338
+ "id": "kv:list",
2420
2339
  "pluginAlias": "@formant/formant-cli",
2421
2340
  "pluginName": "@formant/formant-cli",
2422
2341
  "pluginType": "core",
2423
2342
  "strict": true,
2424
- "summary": "List actual investigation runs",
2343
+ "summary": "List key-value keys",
2425
2344
  "enableJsonFlag": true,
2426
2345
  "isESM": true,
2427
2346
  "relativePath": [
2428
2347
  "dist",
2429
2348
  "commands",
2430
- "investigations",
2431
- "runs-list.js"
2349
+ "kv",
2350
+ "list.js"
2432
2351
  ]
2433
2352
  },
2434
- "investigations:runs": {
2353
+ "kv:set": {
2435
2354
  "aliases": [],
2436
2355
  "args": {
2437
- "id": {
2438
- "description": "Investigation (taskflow) ID",
2439
- "name": "id",
2356
+ "key": {
2357
+ "description": "Key to set",
2358
+ "name": "key",
2359
+ "required": true
2360
+ },
2361
+ "value": {
2362
+ "description": "Value to store (JSON string)",
2363
+ "name": "value",
2440
2364
  "required": true
2441
2365
  }
2442
2366
  },
2443
- "description": "List evaluation runs for a specific investigation.",
2367
+ "description": "Set a value in the key-value store.\n\nStores a value associated with a key. The value should be a JSON string.",
2444
2368
  "examples": [
2445
- "<%= config.bin %> investigations runs <id>",
2446
- "<%= config.bin %> investigations runs <id> --json"
2369
+ "<%= config.bin %> kv set my-key '{\"data\": \"value\"}'",
2370
+ "<%= config.bin %> kv set config '{\"setting\": true}'"
2447
2371
  ],
2448
2372
  "flags": {
2449
2373
  "json": {
@@ -2476,28 +2400,84 @@
2476
2400
  },
2477
2401
  "hasDynamicHelp": false,
2478
2402
  "hiddenAliases": [],
2479
- "id": "investigations:runs",
2403
+ "id": "kv:set",
2480
2404
  "pluginAlias": "@formant/formant-cli",
2481
2405
  "pluginName": "@formant/formant-cli",
2482
2406
  "pluginType": "core",
2483
2407
  "strict": true,
2484
- "summary": "List runs for an investigation",
2408
+ "summary": "Set key-value",
2485
2409
  "enableJsonFlag": true,
2486
2410
  "isESM": true,
2487
2411
  "relativePath": [
2488
2412
  "dist",
2489
2413
  "commands",
2490
- "investigations",
2491
- "runs.js"
2414
+ "kv",
2415
+ "set.js"
2492
2416
  ]
2493
2417
  },
2494
- "investigations:stats": {
2418
+ "org:get": {
2495
2419
  "aliases": [],
2496
2420
  "args": {},
2497
- "description": "Get investigation statistics for a time range.",
2421
+ "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.",
2498
2422
  "examples": [
2499
- "<%= config.bin %> investigations stats --start 2026-01-01 --end 2026-02-01",
2500
- "<%= config.bin %> investigations stats --start 2026-01-01 --end 2026-02-01 --json"
2423
+ "<%= config.bin %> org get",
2424
+ "<%= config.bin %> org get --json"
2425
+ ],
2426
+ "flags": {
2427
+ "json": {
2428
+ "description": "Format output as json.",
2429
+ "helpGroup": "GLOBAL",
2430
+ "name": "json",
2431
+ "allowNo": false,
2432
+ "type": "boolean"
2433
+ },
2434
+ "dev": {
2435
+ "description": "Target the dev environment",
2436
+ "exclusive": [
2437
+ "stage"
2438
+ ],
2439
+ "helpGroup": "GLOBAL",
2440
+ "name": "dev",
2441
+ "allowNo": false,
2442
+ "type": "boolean"
2443
+ },
2444
+ "stage": {
2445
+ "description": "Target the stage environment",
2446
+ "exclusive": [
2447
+ "dev"
2448
+ ],
2449
+ "helpGroup": "GLOBAL",
2450
+ "name": "stage",
2451
+ "allowNo": false,
2452
+ "type": "boolean"
2453
+ }
2454
+ },
2455
+ "hasDynamicHelp": false,
2456
+ "hiddenAliases": [],
2457
+ "id": "org:get",
2458
+ "pluginAlias": "@formant/formant-cli",
2459
+ "pluginName": "@formant/formant-cli",
2460
+ "pluginType": "core",
2461
+ "strict": true,
2462
+ "summary": "Get your organization",
2463
+ "enableJsonFlag": true,
2464
+ "isESM": true,
2465
+ "relativePath": [
2466
+ "dist",
2467
+ "commands",
2468
+ "org",
2469
+ "get.js"
2470
+ ]
2471
+ },
2472
+ "org:update": {
2473
+ "aliases": [],
2474
+ "args": {},
2475
+ "description": "Update your organization's details.\n\nAt least one of --name or --description must be provided.",
2476
+ "examples": [
2477
+ "<%= config.bin %> org update --name \"My Fleet\"",
2478
+ "<%= config.bin %> org update --description \"Production robot fleet\"",
2479
+ "<%= config.bin %> org update --name \"My Fleet\" --description \"Production robot fleet\"",
2480
+ "<%= config.bin %> org update --name \"My Fleet\" --json"
2501
2481
  ],
2502
2482
  "flags": {
2503
2483
  "json": {
@@ -2527,18 +2507,18 @@
2527
2507
  "allowNo": false,
2528
2508
  "type": "boolean"
2529
2509
  },
2530
- "end": {
2531
- "description": "End time (ISO 8601)",
2532
- "name": "end",
2533
- "required": true,
2510
+ "description": {
2511
+ "char": "d",
2512
+ "description": "New description for the organization",
2513
+ "name": "description",
2534
2514
  "hasDynamicHelp": false,
2535
2515
  "multiple": false,
2536
2516
  "type": "option"
2537
2517
  },
2538
- "start": {
2539
- "description": "Start time (ISO 8601)",
2540
- "name": "start",
2541
- "required": true,
2518
+ "name": {
2519
+ "char": "n",
2520
+ "description": "New name for the organization",
2521
+ "name": "name",
2542
2522
  "hasDynamicHelp": false,
2543
2523
  "multiple": false,
2544
2524
  "type": "option"
@@ -2546,34 +2526,29 @@
2546
2526
  },
2547
2527
  "hasDynamicHelp": false,
2548
2528
  "hiddenAliases": [],
2549
- "id": "investigations:stats",
2529
+ "id": "org:update",
2550
2530
  "pluginAlias": "@formant/formant-cli",
2551
2531
  "pluginName": "@formant/formant-cli",
2552
2532
  "pluginType": "core",
2553
2533
  "strict": true,
2554
- "summary": "Get investigation stats",
2534
+ "summary": "Update your organization",
2555
2535
  "enableJsonFlag": true,
2556
2536
  "isESM": true,
2557
2537
  "relativePath": [
2558
2538
  "dist",
2559
2539
  "commands",
2560
- "investigations",
2561
- "stats.js"
2540
+ "org",
2541
+ "update.js"
2562
2542
  ]
2563
2543
  },
2564
- "investigations:trigger": {
2544
+ "investigations:analytics": {
2565
2545
  "aliases": [],
2566
- "args": {
2567
- "id": {
2568
- "description": "Investigation (taskflow) ID",
2569
- "name": "id",
2570
- "required": true
2571
- }
2572
- },
2573
- "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.",
2546
+ "args": {},
2547
+ "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.",
2574
2548
  "examples": [
2575
- "<%= config.bin %> investigations trigger <id> --input \"Robot stopped responding\"",
2576
- "<%= config.bin %> investigations trigger <id> --input \"Battery draining fast on device X\" --json"
2549
+ "<%= config.bin %> investigations analytics --start 2026-01-01 --end 2026-02-01",
2550
+ "<%= config.bin %> investigations analytics --start 2026-01-01 --end 2026-02-01 --interval hourly",
2551
+ "<%= config.bin %> investigations analytics --start 2026-01-01 --end 2026-02-01 --group-by resultType --json"
2577
2552
  ],
2578
2553
  "flags": {
2579
2554
  "json": {
@@ -2603,18 +2578,41 @@
2603
2578
  "allowNo": false,
2604
2579
  "type": "boolean"
2605
2580
  },
2606
- "input": {
2607
- "char": "i",
2608
- "description": "Input text / problem description for the investigation",
2609
- "name": "input",
2581
+ "end": {
2582
+ "description": "End time (ISO 8601)",
2583
+ "name": "end",
2610
2584
  "required": true,
2611
2585
  "hasDynamicHelp": false,
2612
2586
  "multiple": false,
2613
2587
  "type": "option"
2614
2588
  },
2615
- "signal-id": {
2616
- "description": "Optional signal ID to associate with this run",
2617
- "name": "signal-id",
2589
+ "group-by": {
2590
+ "description": "Group results by",
2591
+ "name": "group-by",
2592
+ "hasDynamicHelp": false,
2593
+ "multiple": false,
2594
+ "options": [
2595
+ "resultType",
2596
+ "signalType"
2597
+ ],
2598
+ "type": "option"
2599
+ },
2600
+ "interval": {
2601
+ "description": "Time interval for aggregation",
2602
+ "name": "interval",
2603
+ "default": "daily",
2604
+ "hasDynamicHelp": false,
2605
+ "multiple": false,
2606
+ "options": [
2607
+ "daily",
2608
+ "hourly"
2609
+ ],
2610
+ "type": "option"
2611
+ },
2612
+ "start": {
2613
+ "description": "Start time (ISO 8601)",
2614
+ "name": "start",
2615
+ "required": true,
2618
2616
  "hasDynamicHelp": false,
2619
2617
  "multiple": false,
2620
2618
  "type": "option"
@@ -2622,19 +2620,827 @@
2622
2620
  },
2623
2621
  "hasDynamicHelp": false,
2624
2622
  "hiddenAliases": [],
2625
- "id": "investigations:trigger",
2623
+ "id": "investigations:analytics",
2626
2624
  "pluginAlias": "@formant/formant-cli",
2627
2625
  "pluginName": "@formant/formant-cli",
2628
2626
  "pluginType": "core",
2629
2627
  "strict": true,
2630
- "summary": "Trigger an investigation",
2628
+ "summary": "Get investigation analytics",
2631
2629
  "enableJsonFlag": true,
2632
2630
  "isESM": true,
2633
2631
  "relativePath": [
2634
2632
  "dist",
2635
2633
  "commands",
2636
2634
  "investigations",
2637
- "trigger.js"
2635
+ "analytics.js"
2636
+ ]
2637
+ },
2638
+ "investigations:get": {
2639
+ "aliases": [],
2640
+ "args": {
2641
+ "id": {
2642
+ "description": "Investigation (taskflow) ID",
2643
+ "name": "id",
2644
+ "required": true
2645
+ }
2646
+ },
2647
+ "description": "Get detailed information about a specific investigation by ID.",
2648
+ "examples": [
2649
+ "<%= config.bin %> investigations get <id>",
2650
+ "<%= config.bin %> investigations get <id> --json"
2651
+ ],
2652
+ "flags": {
2653
+ "json": {
2654
+ "description": "Format output as json.",
2655
+ "helpGroup": "GLOBAL",
2656
+ "name": "json",
2657
+ "allowNo": false,
2658
+ "type": "boolean"
2659
+ },
2660
+ "dev": {
2661
+ "description": "Target the dev environment",
2662
+ "exclusive": [
2663
+ "stage"
2664
+ ],
2665
+ "helpGroup": "GLOBAL",
2666
+ "name": "dev",
2667
+ "allowNo": false,
2668
+ "type": "boolean"
2669
+ },
2670
+ "stage": {
2671
+ "description": "Target the stage environment",
2672
+ "exclusive": [
2673
+ "dev"
2674
+ ],
2675
+ "helpGroup": "GLOBAL",
2676
+ "name": "stage",
2677
+ "allowNo": false,
2678
+ "type": "boolean"
2679
+ }
2680
+ },
2681
+ "hasDynamicHelp": false,
2682
+ "hiddenAliases": [],
2683
+ "id": "investigations:get",
2684
+ "pluginAlias": "@formant/formant-cli",
2685
+ "pluginName": "@formant/formant-cli",
2686
+ "pluginType": "core",
2687
+ "strict": true,
2688
+ "summary": "Get an investigation by ID",
2689
+ "enableJsonFlag": true,
2690
+ "isESM": true,
2691
+ "relativePath": [
2692
+ "dist",
2693
+ "commands",
2694
+ "investigations",
2695
+ "get.js"
2696
+ ]
2697
+ },
2698
+ "investigations:list": {
2699
+ "aliases": [],
2700
+ "args": {},
2701
+ "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.",
2702
+ "examples": [
2703
+ "<%= config.bin %> investigations list",
2704
+ "<%= config.bin %> investigations list --signal-handler",
2705
+ "<%= config.bin %> investigations list --json"
2706
+ ],
2707
+ "flags": {
2708
+ "json": {
2709
+ "description": "Format output as json.",
2710
+ "helpGroup": "GLOBAL",
2711
+ "name": "json",
2712
+ "allowNo": false,
2713
+ "type": "boolean"
2714
+ },
2715
+ "dev": {
2716
+ "description": "Target the dev environment",
2717
+ "exclusive": [
2718
+ "stage"
2719
+ ],
2720
+ "helpGroup": "GLOBAL",
2721
+ "name": "dev",
2722
+ "allowNo": false,
2723
+ "type": "boolean"
2724
+ },
2725
+ "stage": {
2726
+ "description": "Target the stage environment",
2727
+ "exclusive": [
2728
+ "dev"
2729
+ ],
2730
+ "helpGroup": "GLOBAL",
2731
+ "name": "stage",
2732
+ "allowNo": false,
2733
+ "type": "boolean"
2734
+ },
2735
+ "signal-handler": {
2736
+ "description": "Only show investigations that handle signals",
2737
+ "name": "signal-handler",
2738
+ "allowNo": false,
2739
+ "type": "boolean"
2740
+ }
2741
+ },
2742
+ "hasDynamicHelp": false,
2743
+ "hiddenAliases": [],
2744
+ "id": "investigations:list",
2745
+ "pluginAlias": "@formant/formant-cli",
2746
+ "pluginName": "@formant/formant-cli",
2747
+ "pluginType": "core",
2748
+ "strict": true,
2749
+ "summary": "List investigations",
2750
+ "enableJsonFlag": true,
2751
+ "isESM": true,
2752
+ "relativePath": [
2753
+ "dist",
2754
+ "commands",
2755
+ "investigations",
2756
+ "list.js"
2757
+ ]
2758
+ },
2759
+ "investigations:run": {
2760
+ "aliases": [],
2761
+ "args": {
2762
+ "investigationId": {
2763
+ "description": "Investigation (taskflow) ID",
2764
+ "name": "investigationId",
2765
+ "required": true
2766
+ },
2767
+ "runId": {
2768
+ "description": "Run ID",
2769
+ "name": "runId",
2770
+ "required": true
2771
+ }
2772
+ },
2773
+ "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.",
2774
+ "examples": [
2775
+ "<%= config.bin %> investigations run <investigation-id> <run-id>",
2776
+ "<%= config.bin %> investigations run <investigation-id> <run-id> --log-only",
2777
+ "<%= config.bin %> investigations run <investigation-id> <run-id> --json"
2778
+ ],
2779
+ "flags": {
2780
+ "json": {
2781
+ "description": "Format output as json.",
2782
+ "helpGroup": "GLOBAL",
2783
+ "name": "json",
2784
+ "allowNo": false,
2785
+ "type": "boolean"
2786
+ },
2787
+ "dev": {
2788
+ "description": "Target the dev environment",
2789
+ "exclusive": [
2790
+ "stage"
2791
+ ],
2792
+ "helpGroup": "GLOBAL",
2793
+ "name": "dev",
2794
+ "allowNo": false,
2795
+ "type": "boolean"
2796
+ },
2797
+ "stage": {
2798
+ "description": "Target the stage environment",
2799
+ "exclusive": [
2800
+ "dev"
2801
+ ],
2802
+ "helpGroup": "GLOBAL",
2803
+ "name": "stage",
2804
+ "allowNo": false,
2805
+ "type": "boolean"
2806
+ },
2807
+ "log-only": {
2808
+ "description": "Only show the execution log (skip run details)",
2809
+ "name": "log-only",
2810
+ "allowNo": false,
2811
+ "type": "boolean"
2812
+ },
2813
+ "trace-signal": {
2814
+ "description": "Fetch and display the signal and event information for this run",
2815
+ "name": "trace-signal",
2816
+ "allowNo": false,
2817
+ "type": "boolean"
2818
+ }
2819
+ },
2820
+ "hasDynamicHelp": false,
2821
+ "hiddenAliases": [],
2822
+ "id": "investigations:run",
2823
+ "pluginAlias": "@formant/formant-cli",
2824
+ "pluginName": "@formant/formant-cli",
2825
+ "pluginType": "core",
2826
+ "strict": true,
2827
+ "summary": "Get investigation run details and execution log",
2828
+ "enableJsonFlag": true,
2829
+ "isESM": true,
2830
+ "relativePath": [
2831
+ "dist",
2832
+ "commands",
2833
+ "investigations",
2834
+ "run.js"
2835
+ ]
2836
+ },
2837
+ "investigations:runs-list": {
2838
+ "aliases": [],
2839
+ "args": {
2840
+ "id": {
2841
+ "description": "Investigation (taskflow) ID",
2842
+ "name": "id",
2843
+ "required": true
2844
+ }
2845
+ },
2846
+ "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.",
2847
+ "examples": [
2848
+ "<%= config.bin %> investigations runs-list <id>",
2849
+ "<%= config.bin %> investigations runs-list <id> --limit 50",
2850
+ "<%= config.bin %> investigations runs-list <id> --details --json"
2851
+ ],
2852
+ "flags": {
2853
+ "json": {
2854
+ "description": "Format output as json.",
2855
+ "helpGroup": "GLOBAL",
2856
+ "name": "json",
2857
+ "allowNo": false,
2858
+ "type": "boolean"
2859
+ },
2860
+ "dev": {
2861
+ "description": "Target the dev environment",
2862
+ "exclusive": [
2863
+ "stage"
2864
+ ],
2865
+ "helpGroup": "GLOBAL",
2866
+ "name": "dev",
2867
+ "allowNo": false,
2868
+ "type": "boolean"
2869
+ },
2870
+ "stage": {
2871
+ "description": "Target the stage environment",
2872
+ "exclusive": [
2873
+ "dev"
2874
+ ],
2875
+ "helpGroup": "GLOBAL",
2876
+ "name": "stage",
2877
+ "allowNo": false,
2878
+ "type": "boolean"
2879
+ },
2880
+ "details": {
2881
+ "description": "Include detailed information about each run",
2882
+ "name": "details",
2883
+ "allowNo": false,
2884
+ "type": "boolean"
2885
+ },
2886
+ "limit": {
2887
+ "char": "l",
2888
+ "description": "Maximum number of runs to return",
2889
+ "name": "limit",
2890
+ "default": 20,
2891
+ "hasDynamicHelp": false,
2892
+ "multiple": false,
2893
+ "type": "option"
2894
+ },
2895
+ "offset": {
2896
+ "char": "o",
2897
+ "description": "Offset for pagination",
2898
+ "name": "offset",
2899
+ "default": 0,
2900
+ "hasDynamicHelp": false,
2901
+ "multiple": false,
2902
+ "type": "option"
2903
+ }
2904
+ },
2905
+ "hasDynamicHelp": false,
2906
+ "hiddenAliases": [],
2907
+ "id": "investigations:runs-list",
2908
+ "pluginAlias": "@formant/formant-cli",
2909
+ "pluginName": "@formant/formant-cli",
2910
+ "pluginType": "core",
2911
+ "strict": true,
2912
+ "summary": "List actual investigation runs",
2913
+ "enableJsonFlag": true,
2914
+ "isESM": true,
2915
+ "relativePath": [
2916
+ "dist",
2917
+ "commands",
2918
+ "investigations",
2919
+ "runs-list.js"
2920
+ ]
2921
+ },
2922
+ "investigations:runs": {
2923
+ "aliases": [],
2924
+ "args": {
2925
+ "id": {
2926
+ "description": "Investigation (taskflow) ID",
2927
+ "name": "id",
2928
+ "required": true
2929
+ }
2930
+ },
2931
+ "description": "List evaluation runs for a specific investigation.",
2932
+ "examples": [
2933
+ "<%= config.bin %> investigations runs <id>",
2934
+ "<%= config.bin %> investigations runs <id> --json"
2935
+ ],
2936
+ "flags": {
2937
+ "json": {
2938
+ "description": "Format output as json.",
2939
+ "helpGroup": "GLOBAL",
2940
+ "name": "json",
2941
+ "allowNo": false,
2942
+ "type": "boolean"
2943
+ },
2944
+ "dev": {
2945
+ "description": "Target the dev environment",
2946
+ "exclusive": [
2947
+ "stage"
2948
+ ],
2949
+ "helpGroup": "GLOBAL",
2950
+ "name": "dev",
2951
+ "allowNo": false,
2952
+ "type": "boolean"
2953
+ },
2954
+ "stage": {
2955
+ "description": "Target the stage environment",
2956
+ "exclusive": [
2957
+ "dev"
2958
+ ],
2959
+ "helpGroup": "GLOBAL",
2960
+ "name": "stage",
2961
+ "allowNo": false,
2962
+ "type": "boolean"
2963
+ }
2964
+ },
2965
+ "hasDynamicHelp": false,
2966
+ "hiddenAliases": [],
2967
+ "id": "investigations:runs",
2968
+ "pluginAlias": "@formant/formant-cli",
2969
+ "pluginName": "@formant/formant-cli",
2970
+ "pluginType": "core",
2971
+ "strict": true,
2972
+ "summary": "List runs for an investigation",
2973
+ "enableJsonFlag": true,
2974
+ "isESM": true,
2975
+ "relativePath": [
2976
+ "dist",
2977
+ "commands",
2978
+ "investigations",
2979
+ "runs.js"
2980
+ ]
2981
+ },
2982
+ "investigations:stats": {
2983
+ "aliases": [],
2984
+ "args": {},
2985
+ "description": "Get investigation statistics for a time range.",
2986
+ "examples": [
2987
+ "<%= config.bin %> investigations stats --start 2026-01-01 --end 2026-02-01",
2988
+ "<%= config.bin %> investigations stats --start 2026-01-01 --end 2026-02-01 --json"
2989
+ ],
2990
+ "flags": {
2991
+ "json": {
2992
+ "description": "Format output as json.",
2993
+ "helpGroup": "GLOBAL",
2994
+ "name": "json",
2995
+ "allowNo": false,
2996
+ "type": "boolean"
2997
+ },
2998
+ "dev": {
2999
+ "description": "Target the dev environment",
3000
+ "exclusive": [
3001
+ "stage"
3002
+ ],
3003
+ "helpGroup": "GLOBAL",
3004
+ "name": "dev",
3005
+ "allowNo": false,
3006
+ "type": "boolean"
3007
+ },
3008
+ "stage": {
3009
+ "description": "Target the stage environment",
3010
+ "exclusive": [
3011
+ "dev"
3012
+ ],
3013
+ "helpGroup": "GLOBAL",
3014
+ "name": "stage",
3015
+ "allowNo": false,
3016
+ "type": "boolean"
3017
+ },
3018
+ "end": {
3019
+ "description": "End time (ISO 8601)",
3020
+ "name": "end",
3021
+ "required": true,
3022
+ "hasDynamicHelp": false,
3023
+ "multiple": false,
3024
+ "type": "option"
3025
+ },
3026
+ "start": {
3027
+ "description": "Start time (ISO 8601)",
3028
+ "name": "start",
3029
+ "required": true,
3030
+ "hasDynamicHelp": false,
3031
+ "multiple": false,
3032
+ "type": "option"
3033
+ }
3034
+ },
3035
+ "hasDynamicHelp": false,
3036
+ "hiddenAliases": [],
3037
+ "id": "investigations:stats",
3038
+ "pluginAlias": "@formant/formant-cli",
3039
+ "pluginName": "@formant/formant-cli",
3040
+ "pluginType": "core",
3041
+ "strict": true,
3042
+ "summary": "Get investigation stats",
3043
+ "enableJsonFlag": true,
3044
+ "isESM": true,
3045
+ "relativePath": [
3046
+ "dist",
3047
+ "commands",
3048
+ "investigations",
3049
+ "stats.js"
3050
+ ]
3051
+ },
3052
+ "investigations:trigger": {
3053
+ "aliases": [],
3054
+ "args": {
3055
+ "id": {
3056
+ "description": "Investigation (taskflow) ID",
3057
+ "name": "id",
3058
+ "required": true
3059
+ }
3060
+ },
3061
+ "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.",
3062
+ "examples": [
3063
+ "<%= config.bin %> investigations trigger <id> --input \"Robot stopped responding\"",
3064
+ "<%= config.bin %> investigations trigger <id> --input \"Battery draining fast on device X\" --json"
3065
+ ],
3066
+ "flags": {
3067
+ "json": {
3068
+ "description": "Format output as json.",
3069
+ "helpGroup": "GLOBAL",
3070
+ "name": "json",
3071
+ "allowNo": false,
3072
+ "type": "boolean"
3073
+ },
3074
+ "dev": {
3075
+ "description": "Target the dev environment",
3076
+ "exclusive": [
3077
+ "stage"
3078
+ ],
3079
+ "helpGroup": "GLOBAL",
3080
+ "name": "dev",
3081
+ "allowNo": false,
3082
+ "type": "boolean"
3083
+ },
3084
+ "stage": {
3085
+ "description": "Target the stage environment",
3086
+ "exclusive": [
3087
+ "dev"
3088
+ ],
3089
+ "helpGroup": "GLOBAL",
3090
+ "name": "stage",
3091
+ "allowNo": false,
3092
+ "type": "boolean"
3093
+ },
3094
+ "input": {
3095
+ "char": "i",
3096
+ "description": "Input text / problem description for the investigation",
3097
+ "name": "input",
3098
+ "required": true,
3099
+ "hasDynamicHelp": false,
3100
+ "multiple": false,
3101
+ "type": "option"
3102
+ },
3103
+ "signal-id": {
3104
+ "description": "Optional signal ID to associate with this run",
3105
+ "name": "signal-id",
3106
+ "hasDynamicHelp": false,
3107
+ "multiple": false,
3108
+ "type": "option"
3109
+ }
3110
+ },
3111
+ "hasDynamicHelp": false,
3112
+ "hiddenAliases": [],
3113
+ "id": "investigations:trigger",
3114
+ "pluginAlias": "@formant/formant-cli",
3115
+ "pluginName": "@formant/formant-cli",
3116
+ "pluginType": "core",
3117
+ "strict": true,
3118
+ "summary": "Trigger an investigation",
3119
+ "enableJsonFlag": true,
3120
+ "isESM": true,
3121
+ "relativePath": [
3122
+ "dist",
3123
+ "commands",
3124
+ "investigations",
3125
+ "trigger.js"
3126
+ ]
3127
+ },
3128
+ "query": {
3129
+ "aliases": [],
3130
+ "args": {},
3131
+ "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.",
3132
+ "examples": [
3133
+ "<%= config.bin %> query --device <id> --stream battery_level --start 2026-01-01 --end 2026-01-02",
3134
+ "<%= config.bin %> query --device <id> --stream speed --aggregate hour --start 2026-01-01 --end 2026-02-01",
3135
+ "<%= config.bin %> query --device <id> --stream battery_level --latest",
3136
+ "<%= config.bin %> query --device <id> --stream temperature --type numeric --json"
3137
+ ],
3138
+ "flags": {
3139
+ "json": {
3140
+ "description": "Format output as json.",
3141
+ "helpGroup": "GLOBAL",
3142
+ "name": "json",
3143
+ "allowNo": false,
3144
+ "type": "boolean"
3145
+ },
3146
+ "dev": {
3147
+ "description": "Target the dev environment",
3148
+ "exclusive": [
3149
+ "stage"
3150
+ ],
3151
+ "helpGroup": "GLOBAL",
3152
+ "name": "dev",
3153
+ "allowNo": false,
3154
+ "type": "boolean"
3155
+ },
3156
+ "stage": {
3157
+ "description": "Target the stage environment",
3158
+ "exclusive": [
3159
+ "dev"
3160
+ ],
3161
+ "helpGroup": "GLOBAL",
3162
+ "name": "stage",
3163
+ "allowNo": false,
3164
+ "type": "boolean"
3165
+ },
3166
+ "aggregate": {
3167
+ "char": "a",
3168
+ "description": "Aggregation level for downsampling",
3169
+ "name": "aggregate",
3170
+ "hasDynamicHelp": false,
3171
+ "multiple": false,
3172
+ "type": "option"
3173
+ },
3174
+ "device": {
3175
+ "char": "d",
3176
+ "description": "Device ID (UUID)",
3177
+ "name": "device",
3178
+ "required": true,
3179
+ "hasDynamicHelp": false,
3180
+ "multiple": false,
3181
+ "type": "option"
3182
+ },
3183
+ "end": {
3184
+ "description": "End time (ISO 8601)",
3185
+ "name": "end",
3186
+ "hasDynamicHelp": false,
3187
+ "multiple": false,
3188
+ "type": "option"
3189
+ },
3190
+ "latest": {
3191
+ "description": "Only return the most recent value per stream",
3192
+ "name": "latest",
3193
+ "allowNo": false,
3194
+ "type": "boolean"
3195
+ },
3196
+ "limit": {
3197
+ "char": "l",
3198
+ "description": "Maximum number of datapoints",
3199
+ "name": "limit",
3200
+ "hasDynamicHelp": false,
3201
+ "multiple": false,
3202
+ "type": "option"
3203
+ },
3204
+ "start": {
3205
+ "description": "Start time (ISO 8601)",
3206
+ "name": "start",
3207
+ "hasDynamicHelp": false,
3208
+ "multiple": false,
3209
+ "type": "option"
3210
+ },
3211
+ "stream": {
3212
+ "char": "s",
3213
+ "description": "Stream name(s), can be specified multiple times",
3214
+ "name": "stream",
3215
+ "required": true,
3216
+ "hasDynamicHelp": false,
3217
+ "multiple": true,
3218
+ "type": "option"
3219
+ },
3220
+ "type": {
3221
+ "description": "Filter by stream type",
3222
+ "name": "type",
3223
+ "hasDynamicHelp": false,
3224
+ "multiple": false,
3225
+ "type": "option"
3226
+ }
3227
+ },
3228
+ "hasDynamicHelp": false,
3229
+ "hiddenAliases": [],
3230
+ "id": "query",
3231
+ "pluginAlias": "@formant/formant-cli",
3232
+ "pluginName": "@formant/formant-cli",
3233
+ "pluginType": "core",
3234
+ "strict": true,
3235
+ "summary": "Query telemetry stream data",
3236
+ "enableJsonFlag": true,
3237
+ "isESM": true,
3238
+ "relativePath": [
3239
+ "dist",
3240
+ "commands",
3241
+ "query",
3242
+ "index.js"
3243
+ ]
3244
+ },
3245
+ "query:latest-values": {
3246
+ "aliases": [],
3247
+ "args": {},
3248
+ "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).",
3249
+ "examples": [
3250
+ "<%= config.bin %> query latest-values --device <id> --stream battery_level",
3251
+ "<%= config.bin %> query latest-values --device <id> --stream temperature --stream humidity",
3252
+ "<%= config.bin %> query latest-values --device <id> --all-streams",
3253
+ "<%= config.bin %> query latest-values --device <id> --all-streams --json"
3254
+ ],
3255
+ "flags": {
3256
+ "json": {
3257
+ "description": "Format output as json.",
3258
+ "helpGroup": "GLOBAL",
3259
+ "name": "json",
3260
+ "allowNo": false,
3261
+ "type": "boolean"
3262
+ },
3263
+ "dev": {
3264
+ "description": "Target the dev environment",
3265
+ "exclusive": [
3266
+ "stage"
3267
+ ],
3268
+ "helpGroup": "GLOBAL",
3269
+ "name": "dev",
3270
+ "allowNo": false,
3271
+ "type": "boolean"
3272
+ },
3273
+ "stage": {
3274
+ "description": "Target the stage environment",
3275
+ "exclusive": [
3276
+ "dev"
3277
+ ],
3278
+ "helpGroup": "GLOBAL",
3279
+ "name": "stage",
3280
+ "allowNo": false,
3281
+ "type": "boolean"
3282
+ },
3283
+ "all-streams": {
3284
+ "description": "Query all streams for the device — from config and from ingested data (requires single --device)",
3285
+ "name": "all-streams",
3286
+ "allowNo": false,
3287
+ "type": "boolean"
3288
+ },
3289
+ "days": {
3290
+ "description": "How many days back to look for unconfigured streams when using --all-streams",
3291
+ "name": "days",
3292
+ "default": 14,
3293
+ "hasDynamicHelp": false,
3294
+ "multiple": false,
3295
+ "type": "option"
3296
+ },
3297
+ "device": {
3298
+ "char": "d",
3299
+ "description": "Device ID (UUID)",
3300
+ "name": "device",
3301
+ "required": true,
3302
+ "hasDynamicHelp": false,
3303
+ "multiple": true,
3304
+ "type": "option"
3305
+ },
3306
+ "stream": {
3307
+ "char": "s",
3308
+ "description": "Stream name(s), can be specified multiple times",
3309
+ "name": "stream",
3310
+ "hasDynamicHelp": false,
3311
+ "multiple": true,
3312
+ "type": "option"
3313
+ }
3314
+ },
3315
+ "hasDynamicHelp": false,
3316
+ "hiddenAliases": [],
3317
+ "id": "query:latest-values",
3318
+ "pluginAlias": "@formant/formant-cli",
3319
+ "pluginName": "@formant/formant-cli",
3320
+ "pluginType": "core",
3321
+ "strict": true,
3322
+ "summary": "Get latest stream values",
3323
+ "enableJsonFlag": true,
3324
+ "isESM": true,
3325
+ "relativePath": [
3326
+ "dist",
3327
+ "commands",
3328
+ "query",
3329
+ "latest-values.js"
3330
+ ]
3331
+ },
3332
+ "fleets:get": {
3333
+ "aliases": [],
3334
+ "args": {
3335
+ "id": {
3336
+ "description": "Fleet (group) ID (UUID)",
3337
+ "name": "id",
3338
+ "required": true
3339
+ }
3340
+ },
3341
+ "description": "Get detailed information about a device group (fleet).\n\nShows the full fleet configuration including member devices and settings.",
3342
+ "examples": [
3343
+ "<%= config.bin %> fleets get <fleet-id>",
3344
+ "<%= config.bin %> fleets get <fleet-id> --json"
3345
+ ],
3346
+ "flags": {
3347
+ "json": {
3348
+ "description": "Format output as json.",
3349
+ "helpGroup": "GLOBAL",
3350
+ "name": "json",
3351
+ "allowNo": false,
3352
+ "type": "boolean"
3353
+ },
3354
+ "dev": {
3355
+ "description": "Target the dev environment",
3356
+ "exclusive": [
3357
+ "stage"
3358
+ ],
3359
+ "helpGroup": "GLOBAL",
3360
+ "name": "dev",
3361
+ "allowNo": false,
3362
+ "type": "boolean"
3363
+ },
3364
+ "stage": {
3365
+ "description": "Target the stage environment",
3366
+ "exclusive": [
3367
+ "dev"
3368
+ ],
3369
+ "helpGroup": "GLOBAL",
3370
+ "name": "stage",
3371
+ "allowNo": false,
3372
+ "type": "boolean"
3373
+ }
3374
+ },
3375
+ "hasDynamicHelp": false,
3376
+ "hiddenAliases": [],
3377
+ "id": "fleets:get",
3378
+ "pluginAlias": "@formant/formant-cli",
3379
+ "pluginName": "@formant/formant-cli",
3380
+ "pluginType": "core",
3381
+ "strict": true,
3382
+ "summary": "Get fleet details",
3383
+ "enableJsonFlag": true,
3384
+ "isESM": true,
3385
+ "relativePath": [
3386
+ "dist",
3387
+ "commands",
3388
+ "fleets",
3389
+ "get.js"
3390
+ ]
3391
+ },
3392
+ "fleets:list": {
3393
+ "aliases": [],
3394
+ "args": {},
3395
+ "description": "List all device groups (fleets) in your organization.\n\nDevice groups allow you to organize and manage sets of devices together.",
3396
+ "examples": [
3397
+ "<%= config.bin %> fleets list",
3398
+ "<%= config.bin %> fleets list --json"
3399
+ ],
3400
+ "flags": {
3401
+ "json": {
3402
+ "description": "Format output as json.",
3403
+ "helpGroup": "GLOBAL",
3404
+ "name": "json",
3405
+ "allowNo": false,
3406
+ "type": "boolean"
3407
+ },
3408
+ "dev": {
3409
+ "description": "Target the dev environment",
3410
+ "exclusive": [
3411
+ "stage"
3412
+ ],
3413
+ "helpGroup": "GLOBAL",
3414
+ "name": "dev",
3415
+ "allowNo": false,
3416
+ "type": "boolean"
3417
+ },
3418
+ "stage": {
3419
+ "description": "Target the stage environment",
3420
+ "exclusive": [
3421
+ "dev"
3422
+ ],
3423
+ "helpGroup": "GLOBAL",
3424
+ "name": "stage",
3425
+ "allowNo": false,
3426
+ "type": "boolean"
3427
+ }
3428
+ },
3429
+ "hasDynamicHelp": false,
3430
+ "hiddenAliases": [],
3431
+ "id": "fleets:list",
3432
+ "pluginAlias": "@formant/formant-cli",
3433
+ "pluginName": "@formant/formant-cli",
3434
+ "pluginType": "core",
3435
+ "strict": true,
3436
+ "summary": "List device groups",
3437
+ "enableJsonFlag": true,
3438
+ "isESM": true,
3439
+ "relativePath": [
3440
+ "dist",
3441
+ "commands",
3442
+ "fleets",
3443
+ "list.js"
2638
3444
  ]
2639
3445
  },
2640
3446
  "schedules:get": {
@@ -3139,5 +3945,5 @@
3139
3945
  ]
3140
3946
  }
3141
3947
  },
3142
- "version": "0.2.0"
3948
+ "version": "0.3.1"
3143
3949
  }