@formant/formant-cli 0.1.0 → 0.3.0

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 (56) hide show
  1. package/README.md +380 -116
  2. package/dist/base-command.d.ts +5 -0
  3. package/dist/base-command.js +9 -0
  4. package/dist/base-command.js.map +1 -1
  5. package/dist/commands/devices/create.d.ts +13 -0
  6. package/dist/commands/devices/create.js +62 -0
  7. package/dist/commands/devices/create.js.map +1 -0
  8. package/dist/commands/devices/delete.d.ts +10 -0
  9. package/dist/commands/devices/delete.js +49 -0
  10. package/dist/commands/devices/delete.js.map +1 -0
  11. package/dist/commands/devices/rename.d.ts +11 -0
  12. package/dist/commands/devices/rename.js +42 -0
  13. package/dist/commands/devices/rename.js.map +1 -0
  14. package/dist/commands/devices/tag.d.ts +13 -0
  15. package/dist/commands/devices/tag.js +69 -0
  16. package/dist/commands/devices/tag.js.map +1 -0
  17. package/dist/commands/devices/untag.d.ts +13 -0
  18. package/dist/commands/devices/untag.js +79 -0
  19. package/dist/commands/devices/untag.js.map +1 -0
  20. package/dist/commands/ingest/batch.d.ts +21 -0
  21. package/dist/commands/ingest/batch.js +170 -0
  22. package/dist/commands/ingest/batch.js.map +1 -0
  23. package/dist/commands/ingest/bitset.d.ts +15 -0
  24. package/dist/commands/ingest/bitset.js +128 -0
  25. package/dist/commands/ingest/bitset.js.map +1 -0
  26. package/dist/commands/ingest/health.d.ts +15 -0
  27. package/dist/commands/ingest/health.js +94 -0
  28. package/dist/commands/ingest/health.js.map +1 -0
  29. package/dist/commands/ingest/image.d.ts +15 -0
  30. package/dist/commands/ingest/image.js +99 -0
  31. package/dist/commands/ingest/image.js.map +1 -0
  32. package/dist/commands/ingest/json.d.ts +16 -0
  33. package/dist/commands/ingest/json.js +92 -0
  34. package/dist/commands/ingest/json.js.map +1 -0
  35. package/dist/commands/ingest/numeric.d.ts +16 -0
  36. package/dist/commands/ingest/numeric.js +83 -0
  37. package/dist/commands/ingest/numeric.js.map +1 -0
  38. package/dist/commands/ingest/text.d.ts +16 -0
  39. package/dist/commands/ingest/text.js +80 -0
  40. package/dist/commands/ingest/text.js.map +1 -0
  41. package/dist/commands/ingest/video.d.ts +16 -0
  42. package/dist/commands/ingest/video.js +120 -0
  43. package/dist/commands/ingest/video.js.map +1 -0
  44. package/dist/commands/org/get.d.ts +7 -0
  45. package/dist/commands/org/get.js +54 -0
  46. package/dist/commands/org/get.js.map +1 -0
  47. package/dist/commands/org/update.d.ts +11 -0
  48. package/dist/commands/org/update.js +75 -0
  49. package/dist/commands/org/update.js.map +1 -0
  50. package/dist/help.js +103 -53
  51. package/dist/help.js.map +1 -1
  52. package/dist/lib/api.d.ts +1 -1
  53. package/dist/lib/api.js +3 -0
  54. package/dist/lib/api.js.map +1 -1
  55. package/oclif.manifest.json +1861 -612
  56. package/package.json +7 -1
@@ -307,120 +307,6 @@
307
307
  "list.js"
308
308
  ]
309
309
  },
310
- "event-triggers:get": {
311
- "aliases": [],
312
- "args": {
313
- "id": {
314
- "description": "Event trigger ID (UUID)",
315
- "name": "id",
316
- "required": true
317
- }
318
- },
319
- "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.",
320
- "examples": [
321
- "<%= config.bin %> event-triggers get <trigger-id>",
322
- "<%= config.bin %> event-triggers get <trigger-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": "event-triggers:get",
356
- "pluginAlias": "@formant/formant-cli",
357
- "pluginName": "@formant/formant-cli",
358
- "pluginType": "core",
359
- "strict": true,
360
- "summary": "Get event trigger details",
361
- "enableJsonFlag": true,
362
- "isESM": true,
363
- "relativePath": [
364
- "dist",
365
- "commands",
366
- "event-triggers",
367
- "get.js"
368
- ]
369
- },
370
- "event-triggers:list": {
371
- "aliases": [],
372
- "args": {},
373
- "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.",
374
- "examples": [
375
- "<%= config.bin %> event-triggers list",
376
- "<%= config.bin %> event-triggers 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": "event-triggers:list",
410
- "pluginAlias": "@formant/formant-cli",
411
- "pluginName": "@formant/formant-cli",
412
- "pluginType": "core",
413
- "strict": true,
414
- "summary": "List event trigger rules",
415
- "enableJsonFlag": true,
416
- "isESM": true,
417
- "relativePath": [
418
- "dist",
419
- "commands",
420
- "event-triggers",
421
- "list.js"
422
- ]
423
- },
424
310
  "commands:for-device": {
425
311
  "aliases": [],
426
312
  "args": {
@@ -871,19 +757,19 @@
871
757
  "list.js"
872
758
  ]
873
759
  },
874
- "kv:get": {
760
+ "event-triggers:get": {
875
761
  "aliases": [],
876
762
  "args": {
877
- "key": {
878
- "description": "Key to retrieve",
879
- "name": "key",
763
+ "id": {
764
+ "description": "Event trigger ID (UUID)",
765
+ "name": "id",
880
766
  "required": true
881
767
  }
882
768
  },
883
- "description": "Get a value from the key-value store.\n\nThe key-value store allows devices and applications to store metadata.",
769
+ "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.",
884
770
  "examples": [
885
- "<%= config.bin %> kv get my-key",
886
- "<%= config.bin %> kv get my-key --json"
771
+ "<%= config.bin %> event-triggers get <trigger-id>",
772
+ "<%= config.bin %> event-triggers get <trigger-id> --json"
887
773
  ],
888
774
  "flags": {
889
775
  "json": {
@@ -916,30 +802,28 @@
916
802
  },
917
803
  "hasDynamicHelp": false,
918
804
  "hiddenAliases": [],
919
- "id": "kv:get",
805
+ "id": "event-triggers:get",
920
806
  "pluginAlias": "@formant/formant-cli",
921
807
  "pluginName": "@formant/formant-cli",
922
808
  "pluginType": "core",
923
809
  "strict": true,
924
- "summary": "Get key-value",
810
+ "summary": "Get event trigger details",
925
811
  "enableJsonFlag": true,
926
812
  "isESM": true,
927
813
  "relativePath": [
928
814
  "dist",
929
815
  "commands",
930
- "kv",
816
+ "event-triggers",
931
817
  "get.js"
932
818
  ]
933
819
  },
934
- "kv:list": {
820
+ "event-triggers:list": {
935
821
  "aliases": [],
936
822
  "args": {},
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.",
823
+ "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.",
938
824
  "examples": [
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"
825
+ "<%= config.bin %> event-triggers list",
826
+ "<%= config.bin %> event-triggers list --json"
943
827
  ],
944
828
  "flags": {
945
829
  "json": {
@@ -968,59 +852,34 @@
968
852
  "name": "stage",
969
853
  "allowNo": false,
970
854
  "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"
987
855
  }
988
856
  },
989
857
  "hasDynamicHelp": false,
990
858
  "hiddenAliases": [],
991
- "id": "kv:list",
859
+ "id": "event-triggers:list",
992
860
  "pluginAlias": "@formant/formant-cli",
993
861
  "pluginName": "@formant/formant-cli",
994
862
  "pluginType": "core",
995
863
  "strict": true,
996
- "summary": "List key-value keys",
864
+ "summary": "List event trigger rules",
997
865
  "enableJsonFlag": true,
998
866
  "isESM": true,
999
867
  "relativePath": [
1000
868
  "dist",
1001
869
  "commands",
1002
- "kv",
870
+ "event-triggers",
1003
871
  "list.js"
1004
872
  ]
1005
873
  },
1006
- "kv:set": {
874
+ "ingest:batch": {
1007
875
  "aliases": [],
1008
- "args": {
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",
1017
- "required": true
1018
- }
1019
- },
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.",
876
+ "args": {},
877
+ "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).",
1021
878
  "examples": [
1022
- "<%= config.bin %> kv set my-key '{\"data\": \"value\"}'",
1023
- "<%= config.bin %> kv set config '{\"setting\": true}'"
879
+ "<%= config.bin %> ingest batch --file data.json",
880
+ "<%= config.bin %> ingest batch --stdin < data.json",
881
+ "cat payload.json | <%= config.bin %> ingest batch --stdin",
882
+ "# 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}"
1024
883
  ],
1025
884
  "flags": {
1026
885
  "json": {
@@ -1049,34 +908,53 @@
1049
908
  "name": "stage",
1050
909
  "allowNo": false,
1051
910
  "type": "boolean"
911
+ },
912
+ "file": {
913
+ "char": "f",
914
+ "description": "Path to JSON file containing batch payload",
915
+ "exclusive": [
916
+ "stdin"
917
+ ],
918
+ "name": "file",
919
+ "hasDynamicHelp": false,
920
+ "multiple": false,
921
+ "type": "option"
922
+ },
923
+ "stdin": {
924
+ "description": "Read JSON payload from stdin",
925
+ "exclusive": [
926
+ "file"
927
+ ],
928
+ "name": "stdin",
929
+ "allowNo": false,
930
+ "type": "boolean"
1052
931
  }
1053
932
  },
1054
933
  "hasDynamicHelp": false,
1055
934
  "hiddenAliases": [],
1056
- "id": "kv:set",
935
+ "id": "ingest:batch",
1057
936
  "pluginAlias": "@formant/formant-cli",
1058
937
  "pluginName": "@formant/formant-cli",
1059
938
  "pluginType": "core",
1060
939
  "strict": true,
1061
- "summary": "Set key-value",
940
+ "summary": "Ingest batch data from file or stdin",
1062
941
  "enableJsonFlag": true,
1063
942
  "isESM": true,
1064
943
  "relativePath": [
1065
944
  "dist",
1066
945
  "commands",
1067
- "kv",
1068
- "set.js"
946
+ "ingest",
947
+ "batch.js"
1069
948
  ]
1070
949
  },
1071
- "query": {
950
+ "ingest:bitset": {
1072
951
  "aliases": [],
1073
952
  "args": {},
1074
- "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.",
953
+ "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",
1075
954
  "examples": [
1076
- "<%= config.bin %> query --device <id> --stream battery_level --start 2026-01-01 --end 2026-01-02",
1077
- "<%= config.bin %> query --device <id> --stream speed --aggregate hour --start 2026-01-01 --end 2026-02-01",
1078
- "<%= config.bin %> query --device <id> --stream battery_level --latest",
1079
- "<%= config.bin %> query --device <id> --stream temperature --type numeric --json"
955
+ "<%= config.bin %> ingest bitset --device <device-id> --stream sensors --keys \"door,window,motion\" --values \"true,false,true\"",
956
+ "<%= config.bin %> ingest bitset --device <device-id> --stream flags --keys \"active,paused,error\" --values \"true,false,false\" --tag system=main",
957
+ "<%= config.bin %> ingest bitset --device <device-id> --stream states --keys \"a,b\" --values \"false,true\""
1080
958
  ],
1081
959
  "flags": {
1082
960
  "json": {
@@ -1106,14 +984,6 @@
1106
984
  "allowNo": false,
1107
985
  "type": "boolean"
1108
986
  },
1109
- "aggregate": {
1110
- "char": "a",
1111
- "description": "Aggregation level for downsampling",
1112
- "name": "aggregate",
1113
- "hasDynamicHelp": false,
1114
- "multiple": false,
1115
- "type": "option"
1116
- },
1117
987
  "device": {
1118
988
  "char": "d",
1119
989
  "description": "Device ID (UUID)",
@@ -1123,46 +993,44 @@
1123
993
  "multiple": false,
1124
994
  "type": "option"
1125
995
  },
1126
- "end": {
1127
- "description": "End time (ISO 8601)",
1128
- "name": "end",
996
+ "stream": {
997
+ "char": "s",
998
+ "description": "Stream name",
999
+ "name": "stream",
1000
+ "required": true,
1129
1001
  "hasDynamicHelp": false,
1130
1002
  "multiple": false,
1131
1003
  "type": "option"
1132
1004
  },
1133
- "latest": {
1134
- "description": "Only return the most recent value per stream",
1135
- "name": "latest",
1136
- "allowNo": false,
1137
- "type": "boolean"
1138
- },
1139
- "limit": {
1140
- "char": "l",
1141
- "description": "Maximum number of datapoints",
1142
- "name": "limit",
1005
+ "keys": {
1006
+ "char": "k",
1007
+ "description": "Comma-separated list of key names (1-1000 keys, max 255 chars each)",
1008
+ "name": "keys",
1009
+ "required": true,
1143
1010
  "hasDynamicHelp": false,
1144
1011
  "multiple": false,
1145
1012
  "type": "option"
1146
1013
  },
1147
- "start": {
1148
- "description": "Start time (ISO 8601)",
1149
- "name": "start",
1014
+ "values": {
1015
+ "char": "v",
1016
+ "description": "Comma-separated list of boolean values (true/false, must match key count)",
1017
+ "name": "values",
1018
+ "required": true,
1150
1019
  "hasDynamicHelp": false,
1151
1020
  "multiple": false,
1152
1021
  "type": "option"
1153
1022
  },
1154
- "stream": {
1155
- "char": "s",
1156
- "description": "Stream name(s), can be specified multiple times",
1157
- "name": "stream",
1158
- "required": true,
1023
+ "tag": {
1024
+ "char": "t",
1025
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
1026
+ "name": "tag",
1159
1027
  "hasDynamicHelp": false,
1160
1028
  "multiple": true,
1161
1029
  "type": "option"
1162
1030
  },
1163
- "type": {
1164
- "description": "Filter by stream type",
1165
- "name": "type",
1031
+ "timestamp": {
1032
+ "description": "Unix timestamp in milliseconds (defaults to now)",
1033
+ "name": "timestamp",
1166
1034
  "hasDynamicHelp": false,
1167
1035
  "multiple": false,
1168
1036
  "type": "option"
@@ -1170,30 +1038,29 @@
1170
1038
  },
1171
1039
  "hasDynamicHelp": false,
1172
1040
  "hiddenAliases": [],
1173
- "id": "query",
1041
+ "id": "ingest:bitset",
1174
1042
  "pluginAlias": "@formant/formant-cli",
1175
1043
  "pluginName": "@formant/formant-cli",
1176
1044
  "pluginType": "core",
1177
1045
  "strict": true,
1178
- "summary": "Query telemetry stream data",
1046
+ "summary": "Ingest bitset data",
1179
1047
  "enableJsonFlag": true,
1180
1048
  "isESM": true,
1181
1049
  "relativePath": [
1182
1050
  "dist",
1183
1051
  "commands",
1184
- "query",
1185
- "index.js"
1052
+ "ingest",
1053
+ "bitset.js"
1186
1054
  ]
1187
1055
  },
1188
- "query:latest-values": {
1056
+ "ingest:health": {
1189
1057
  "aliases": [],
1190
1058
  "args": {},
1191
- "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.",
1059
+ "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.",
1192
1060
  "examples": [
1193
- "<%= config.bin %> query latest-values --device <id> --stream battery_level",
1194
- "<%= config.bin %> query latest-values --device <id> --stream temperature --stream humidity",
1195
- "<%= config.bin %> query latest-values --device <id> --all-streams",
1196
- "<%= config.bin %> query latest-values --device <id> --all-streams --json"
1061
+ "<%= config.bin %> ingest health --device <device-id> --stream system_health --status operational",
1062
+ "<%= config.bin %> ingest health --device <device-id> --stream health --status error --tag component=motor",
1063
+ "<%= config.bin %> ingest health --device <device-id> --stream sync --status operational --clock-skew 150"
1197
1064
  ],
1198
1065
  "flags": {
1199
1066
  "json": {
@@ -1223,60 +1090,86 @@
1223
1090
  "allowNo": false,
1224
1091
  "type": "boolean"
1225
1092
  },
1226
- "all-streams": {
1227
- "description": "Query all configured streams for the device (requires single --device)",
1228
- "name": "all-streams",
1229
- "allowNo": false,
1230
- "type": "boolean"
1231
- },
1232
1093
  "device": {
1233
1094
  "char": "d",
1234
1095
  "description": "Device ID (UUID)",
1235
1096
  "name": "device",
1236
1097
  "required": true,
1237
1098
  "hasDynamicHelp": false,
1238
- "multiple": true,
1099
+ "multiple": false,
1239
1100
  "type": "option"
1240
1101
  },
1241
1102
  "stream": {
1242
1103
  "char": "s",
1243
- "description": "Stream name(s), can be specified multiple times",
1104
+ "description": "Stream name",
1244
1105
  "name": "stream",
1106
+ "required": true,
1107
+ "hasDynamicHelp": false,
1108
+ "multiple": false,
1109
+ "type": "option"
1110
+ },
1111
+ "status": {
1112
+ "description": "Health status (unknown, operational, offline, or error)",
1113
+ "name": "status",
1114
+ "required": true,
1115
+ "hasDynamicHelp": false,
1116
+ "multiple": false,
1117
+ "options": [
1118
+ "unknown",
1119
+ "operational",
1120
+ "offline",
1121
+ "error"
1122
+ ],
1123
+ "type": "option"
1124
+ },
1125
+ "clock-skew": {
1126
+ "description": "Clock skew in milliseconds (optional)",
1127
+ "name": "clock-skew",
1128
+ "hasDynamicHelp": false,
1129
+ "multiple": false,
1130
+ "type": "option"
1131
+ },
1132
+ "tag": {
1133
+ "char": "t",
1134
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
1135
+ "name": "tag",
1245
1136
  "hasDynamicHelp": false,
1246
1137
  "multiple": true,
1247
1138
  "type": "option"
1139
+ },
1140
+ "timestamp": {
1141
+ "description": "Unix timestamp in milliseconds (defaults to now)",
1142
+ "name": "timestamp",
1143
+ "hasDynamicHelp": false,
1144
+ "multiple": false,
1145
+ "type": "option"
1248
1146
  }
1249
1147
  },
1250
1148
  "hasDynamicHelp": false,
1251
1149
  "hiddenAliases": [],
1252
- "id": "query:latest-values",
1150
+ "id": "ingest:health",
1253
1151
  "pluginAlias": "@formant/formant-cli",
1254
1152
  "pluginName": "@formant/formant-cli",
1255
1153
  "pluginType": "core",
1256
1154
  "strict": true,
1257
- "summary": "Get latest stream values",
1155
+ "summary": "Ingest health status data",
1258
1156
  "enableJsonFlag": true,
1259
1157
  "isESM": true,
1260
1158
  "relativePath": [
1261
1159
  "dist",
1262
1160
  "commands",
1263
- "query",
1264
- "latest-values.js"
1161
+ "ingest",
1162
+ "health.js"
1265
1163
  ]
1266
1164
  },
1267
- "devices:config": {
1165
+ "ingest:image": {
1268
1166
  "aliases": [],
1269
- "args": {
1270
- "id": {
1271
- "description": "Device ID (UUID)",
1272
- "name": "id",
1273
- "required": true
1274
- }
1275
- },
1276
- "description": "Get the device configuration including stream definitions.\n\nShows the device's current configuration including telemetry streams, commands,\nand other settings.",
1167
+ "args": {},
1168
+ "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.",
1277
1169
  "examples": [
1278
- "<%= config.bin %> devices config <device-id>",
1279
- "<%= config.bin %> devices config <device-id> --json"
1170
+ "<%= config.bin %> ingest image --device <device-id> --stream camera_front --url https://example.com/image.jpg",
1171
+ "<%= config.bin %> ingest image --device <device-id> --stream snapshot --url https://example.com/snap.png --size 1024000",
1172
+ "<%= config.bin %> ingest image --device <device-id> --stream detection --url https://example.com/detect.jpg --tag frame=123"
1280
1173
  ],
1281
1174
  "flags": {
1282
1175
  "json": {
@@ -1305,38 +1198,88 @@
1305
1198
  "name": "stage",
1306
1199
  "allowNo": false,
1307
1200
  "type": "boolean"
1201
+ },
1202
+ "device": {
1203
+ "char": "d",
1204
+ "description": "Device ID (UUID)",
1205
+ "name": "device",
1206
+ "required": true,
1207
+ "hasDynamicHelp": false,
1208
+ "multiple": false,
1209
+ "type": "option"
1210
+ },
1211
+ "stream": {
1212
+ "char": "s",
1213
+ "description": "Stream name",
1214
+ "name": "stream",
1215
+ "required": true,
1216
+ "hasDynamicHelp": false,
1217
+ "multiple": false,
1218
+ "type": "option"
1219
+ },
1220
+ "url": {
1221
+ "char": "u",
1222
+ "description": "Image URL (must be http:// or https://)",
1223
+ "name": "url",
1224
+ "required": true,
1225
+ "hasDynamicHelp": false,
1226
+ "multiple": false,
1227
+ "type": "option"
1228
+ },
1229
+ "size": {
1230
+ "description": "Image size in bytes (optional)",
1231
+ "name": "size",
1232
+ "hasDynamicHelp": false,
1233
+ "multiple": false,
1234
+ "type": "option"
1235
+ },
1236
+ "tag": {
1237
+ "char": "t",
1238
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
1239
+ "name": "tag",
1240
+ "hasDynamicHelp": false,
1241
+ "multiple": true,
1242
+ "type": "option"
1243
+ },
1244
+ "timestamp": {
1245
+ "description": "Unix timestamp in milliseconds (defaults to now)",
1246
+ "name": "timestamp",
1247
+ "hasDynamicHelp": false,
1248
+ "multiple": false,
1249
+ "type": "option"
1308
1250
  }
1309
1251
  },
1310
1252
  "hasDynamicHelp": false,
1311
1253
  "hiddenAliases": [],
1312
- "id": "devices:config",
1254
+ "id": "ingest:image",
1313
1255
  "pluginAlias": "@formant/formant-cli",
1314
1256
  "pluginName": "@formant/formant-cli",
1315
1257
  "pluginType": "core",
1316
1258
  "strict": true,
1317
- "summary": "Get device configuration",
1259
+ "summary": "Ingest image data",
1318
1260
  "enableJsonFlag": true,
1319
1261
  "isESM": true,
1320
1262
  "relativePath": [
1321
1263
  "dist",
1322
1264
  "commands",
1323
- "devices",
1324
- "config.js"
1265
+ "ingest",
1266
+ "image.js"
1325
1267
  ]
1326
1268
  },
1327
- "devices:get": {
1269
+ "ingest:json": {
1328
1270
  "aliases": [],
1329
1271
  "args": {
1330
- "id": {
1331
- "description": "Device ID (UUID)",
1332
- "name": "id",
1272
+ "value": {
1273
+ "description": "JSON value to ingest (as a JSON string)",
1274
+ "name": "value",
1333
1275
  "required": true
1334
1276
  }
1335
1277
  },
1336
- "description": "Get detailed information about a specific device by its ID.",
1278
+ "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.",
1337
1279
  "examples": [
1338
- "<%= config.bin %> devices get <device-id>",
1339
- "<%= config.bin %> devices get <device-id> --json"
1280
+ "<%= config.bin %> ingest json '{\"x\":1,\"y\":2}' --device <device-id> --stream position",
1281
+ "<%= config.bin %> ingest json '{\"status\":\"active\",\"mode\":\"auto\"}' --device <device-id> --stream config",
1282
+ "<%= config.bin %> ingest json '[1,2,3,4,5]' --device <device-id> --stream array_data"
1340
1283
  ],
1341
1284
  "flags": {
1342
1285
  "json": {
@@ -1365,38 +1308,72 @@
1365
1308
  "name": "stage",
1366
1309
  "allowNo": false,
1367
1310
  "type": "boolean"
1311
+ },
1312
+ "device": {
1313
+ "char": "d",
1314
+ "description": "Device ID (UUID)",
1315
+ "name": "device",
1316
+ "required": true,
1317
+ "hasDynamicHelp": false,
1318
+ "multiple": false,
1319
+ "type": "option"
1320
+ },
1321
+ "stream": {
1322
+ "char": "s",
1323
+ "description": "Stream name",
1324
+ "name": "stream",
1325
+ "required": true,
1326
+ "hasDynamicHelp": false,
1327
+ "multiple": false,
1328
+ "type": "option"
1329
+ },
1330
+ "tag": {
1331
+ "char": "t",
1332
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
1333
+ "name": "tag",
1334
+ "hasDynamicHelp": false,
1335
+ "multiple": true,
1336
+ "type": "option"
1337
+ },
1338
+ "timestamp": {
1339
+ "description": "Unix timestamp in milliseconds (defaults to now)",
1340
+ "name": "timestamp",
1341
+ "hasDynamicHelp": false,
1342
+ "multiple": false,
1343
+ "type": "option"
1368
1344
  }
1369
1345
  },
1370
1346
  "hasDynamicHelp": false,
1371
1347
  "hiddenAliases": [],
1372
- "id": "devices:get",
1348
+ "id": "ingest:json",
1373
1349
  "pluginAlias": "@formant/formant-cli",
1374
1350
  "pluginName": "@formant/formant-cli",
1375
1351
  "pluginType": "core",
1376
1352
  "strict": true,
1377
- "summary": "Get a device by ID",
1353
+ "summary": "Ingest JSON data",
1378
1354
  "enableJsonFlag": true,
1379
1355
  "isESM": true,
1380
1356
  "relativePath": [
1381
1357
  "dist",
1382
1358
  "commands",
1383
- "devices",
1384
- "get.js"
1359
+ "ingest",
1360
+ "json.js"
1385
1361
  ]
1386
1362
  },
1387
- "devices:last-seen": {
1363
+ "ingest:numeric": {
1388
1364
  "aliases": [],
1389
1365
  "args": {
1390
- "id": {
1391
- "description": "Device ID (UUID)",
1392
- "name": "id",
1366
+ "value": {
1367
+ "description": "Numeric value to ingest",
1368
+ "name": "value",
1393
1369
  "required": true
1394
1370
  }
1395
1371
  },
1396
- "description": "Get when a device was last seen online.\n\nShows the most recent timestamp when the device was detected as online.",
1372
+ "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.",
1397
1373
  "examples": [
1398
- "<%= config.bin %> devices last-seen <device-id>",
1399
- "<%= config.bin %> devices last-seen <device-id> --json"
1374
+ "<%= config.bin %> ingest numeric 42.5 --device <device-id> --stream battery_level",
1375
+ "<%= config.bin %> ingest numeric 98.6 --device <device-id> --stream temperature --tag unit=fahrenheit",
1376
+ "<%= config.bin %> ingest numeric 1500 --device <device-id> --stream rpm --timestamp 1700000000000"
1400
1377
  ],
1401
1378
  "flags": {
1402
1379
  "json": {
@@ -1425,35 +1402,72 @@
1425
1402
  "name": "stage",
1426
1403
  "allowNo": false,
1427
1404
  "type": "boolean"
1405
+ },
1406
+ "device": {
1407
+ "char": "d",
1408
+ "description": "Device ID (UUID)",
1409
+ "name": "device",
1410
+ "required": true,
1411
+ "hasDynamicHelp": false,
1412
+ "multiple": false,
1413
+ "type": "option"
1414
+ },
1415
+ "stream": {
1416
+ "char": "s",
1417
+ "description": "Stream name",
1418
+ "name": "stream",
1419
+ "required": true,
1420
+ "hasDynamicHelp": false,
1421
+ "multiple": false,
1422
+ "type": "option"
1423
+ },
1424
+ "tag": {
1425
+ "char": "t",
1426
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
1427
+ "name": "tag",
1428
+ "hasDynamicHelp": false,
1429
+ "multiple": true,
1430
+ "type": "option"
1431
+ },
1432
+ "timestamp": {
1433
+ "description": "Unix timestamp in milliseconds (defaults to now)",
1434
+ "name": "timestamp",
1435
+ "hasDynamicHelp": false,
1436
+ "multiple": false,
1437
+ "type": "option"
1428
1438
  }
1429
1439
  },
1430
1440
  "hasDynamicHelp": false,
1431
1441
  "hiddenAliases": [],
1432
- "id": "devices:last-seen",
1442
+ "id": "ingest:numeric",
1433
1443
  "pluginAlias": "@formant/formant-cli",
1434
1444
  "pluginName": "@formant/formant-cli",
1435
1445
  "pluginType": "core",
1436
1446
  "strict": true,
1437
- "summary": "Get device last seen timestamp",
1447
+ "summary": "Ingest numeric data",
1438
1448
  "enableJsonFlag": true,
1439
1449
  "isESM": true,
1440
1450
  "relativePath": [
1441
1451
  "dist",
1442
1452
  "commands",
1443
- "devices",
1444
- "last-seen.js"
1453
+ "ingest",
1454
+ "numeric.js"
1445
1455
  ]
1446
1456
  },
1447
- "devices:list": {
1457
+ "ingest:text": {
1448
1458
  "aliases": [],
1449
- "args": {},
1450
- "description": "List robots and sensors in your fleet. Shows only online devices by default.\n\nUse --all to include offline devices.",
1459
+ "args": {
1460
+ "value": {
1461
+ "description": "Text value to ingest",
1462
+ "name": "value",
1463
+ "required": true
1464
+ }
1465
+ },
1466
+ "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.",
1451
1467
  "examples": [
1452
- "<%= config.bin %> devices list",
1453
- "<%= config.bin %> devices list --all",
1454
- "<%= config.bin %> devices list --all --limit 100",
1455
- "<%= config.bin %> devices list --tag location=warehouse",
1456
- "<%= config.bin %> devices list --name robot --dev --json"
1468
+ "<%= config.bin %> ingest text \"Robot started successfully\" --device <device-id> --stream status",
1469
+ "<%= config.bin %> ingest text \"Error: sensor offline\" --device <device-id> --stream errors --tag severity=high",
1470
+ "<%= config.bin %> ingest text \"Checkpoint A reached\" --device <device-id> --stream waypoints"
1457
1471
  ],
1458
1472
  "flags": {
1459
1473
  "json": {
@@ -1483,69 +1497,65 @@
1483
1497
  "allowNo": false,
1484
1498
  "type": "boolean"
1485
1499
  },
1486
- "all": {
1487
- "char": "a",
1488
- "description": "Show all devices (online and offline)",
1489
- "name": "all",
1490
- "allowNo": false,
1491
- "type": "boolean"
1492
- },
1493
- "limit": {
1494
- "char": "l",
1495
- "description": "Maximum number of devices to return",
1496
- "name": "limit",
1497
- "default": 50,
1500
+ "device": {
1501
+ "char": "d",
1502
+ "description": "Device ID (UUID)",
1503
+ "name": "device",
1504
+ "required": true,
1498
1505
  "hasDynamicHelp": false,
1499
1506
  "multiple": false,
1500
1507
  "type": "option"
1501
1508
  },
1502
- "name": {
1503
- "char": "n",
1504
- "description": "Filter devices by name (search)",
1505
- "name": "name",
1509
+ "stream": {
1510
+ "char": "s",
1511
+ "description": "Stream name",
1512
+ "name": "stream",
1513
+ "required": true,
1506
1514
  "hasDynamicHelp": false,
1507
1515
  "multiple": false,
1508
1516
  "type": "option"
1509
1517
  },
1510
1518
  "tag": {
1511
1519
  "char": "t",
1512
- "description": "Filter by tag (key=value), can be specified multiple times",
1520
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
1513
1521
  "name": "tag",
1514
1522
  "hasDynamicHelp": false,
1515
1523
  "multiple": true,
1516
1524
  "type": "option"
1525
+ },
1526
+ "timestamp": {
1527
+ "description": "Unix timestamp in milliseconds (defaults to now)",
1528
+ "name": "timestamp",
1529
+ "hasDynamicHelp": false,
1530
+ "multiple": false,
1531
+ "type": "option"
1517
1532
  }
1518
1533
  },
1519
1534
  "hasDynamicHelp": false,
1520
1535
  "hiddenAliases": [],
1521
- "id": "devices:list",
1536
+ "id": "ingest:text",
1522
1537
  "pluginAlias": "@formant/formant-cli",
1523
1538
  "pluginName": "@formant/formant-cli",
1524
1539
  "pluginType": "core",
1525
1540
  "strict": true,
1526
- "summary": "List robots and sensors in your fleet",
1541
+ "summary": "Ingest text data",
1527
1542
  "enableJsonFlag": true,
1528
1543
  "isESM": true,
1529
1544
  "relativePath": [
1530
1545
  "dist",
1531
1546
  "commands",
1532
- "devices",
1533
- "list.js"
1547
+ "ingest",
1548
+ "text.js"
1534
1549
  ]
1535
1550
  },
1536
- "devices:streams": {
1551
+ "ingest:video": {
1537
1552
  "aliases": [],
1538
- "args": {
1539
- "id": {
1540
- "description": "Device ID (UUID)",
1541
- "name": "id",
1542
- "required": true
1543
- }
1544
- },
1545
- "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.",
1553
+ "args": {},
1554
+ "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).",
1546
1555
  "examples": [
1547
- "<%= config.bin %> devices streams <device-id>",
1548
- "<%= config.bin %> devices streams <device-id> --json"
1556
+ "<%= config.bin %> ingest video --device <device-id> --stream recordings --url https://example.com/video.mp4 --duration 5000",
1557
+ "<%= config.bin %> ingest video --device <device-id> --stream clips --url https://example.com/clip.webm --duration 3500 --size 2048000",
1558
+ "<%= config.bin %> ingest video --device <device-id> --stream event_video --url https://example.com/event.mov --duration 10000 --tag event=collision"
1549
1559
  ],
1550
1560
  "flags": {
1551
1561
  "json": {
@@ -1574,33 +1584,89 @@
1574
1584
  "name": "stage",
1575
1585
  "allowNo": false,
1576
1586
  "type": "boolean"
1577
- }
1578
- },
1579
- "hasDynamicHelp": false,
1580
- "hiddenAliases": [],
1581
- "id": "devices:streams",
1582
- "pluginAlias": "@formant/formant-cli",
1583
- "pluginName": "@formant/formant-cli",
1584
- "pluginType": "core",
1585
- "strict": true,
1586
- "summary": "List device streams",
1587
- "enableJsonFlag": true,
1588
- "isESM": true,
1589
- "relativePath": [
1590
- "dist",
1591
- "commands",
1592
- "devices",
1593
- "streams.js"
1594
- ]
1595
- },
1596
- "investigations:analytics": {
1597
- "aliases": [],
1598
- "args": {},
1599
- "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.",
1587
+ },
1588
+ "device": {
1589
+ "char": "d",
1590
+ "description": "Device ID (UUID)",
1591
+ "name": "device",
1592
+ "required": true,
1593
+ "hasDynamicHelp": false,
1594
+ "multiple": false,
1595
+ "type": "option"
1596
+ },
1597
+ "stream": {
1598
+ "char": "s",
1599
+ "description": "Stream name",
1600
+ "name": "stream",
1601
+ "required": true,
1602
+ "hasDynamicHelp": false,
1603
+ "multiple": false,
1604
+ "type": "option"
1605
+ },
1606
+ "url": {
1607
+ "char": "u",
1608
+ "description": "Video URL (must be http:// or https://)",
1609
+ "name": "url",
1610
+ "required": true,
1611
+ "hasDynamicHelp": false,
1612
+ "multiple": false,
1613
+ "type": "option"
1614
+ },
1615
+ "duration": {
1616
+ "description": "Video duration in milliseconds (required)",
1617
+ "name": "duration",
1618
+ "required": true,
1619
+ "hasDynamicHelp": false,
1620
+ "multiple": false,
1621
+ "type": "option"
1622
+ },
1623
+ "size": {
1624
+ "description": "Video size in bytes (optional)",
1625
+ "name": "size",
1626
+ "hasDynamicHelp": false,
1627
+ "multiple": false,
1628
+ "type": "option"
1629
+ },
1630
+ "tag": {
1631
+ "char": "t",
1632
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
1633
+ "name": "tag",
1634
+ "hasDynamicHelp": false,
1635
+ "multiple": true,
1636
+ "type": "option"
1637
+ },
1638
+ "timestamp": {
1639
+ "description": "Unix timestamp in milliseconds (defaults to now)",
1640
+ "name": "timestamp",
1641
+ "hasDynamicHelp": false,
1642
+ "multiple": false,
1643
+ "type": "option"
1644
+ }
1645
+ },
1646
+ "hasDynamicHelp": false,
1647
+ "hiddenAliases": [],
1648
+ "id": "ingest:video",
1649
+ "pluginAlias": "@formant/formant-cli",
1650
+ "pluginName": "@formant/formant-cli",
1651
+ "pluginType": "core",
1652
+ "strict": true,
1653
+ "summary": "Ingest video data",
1654
+ "enableJsonFlag": true,
1655
+ "isESM": true,
1656
+ "relativePath": [
1657
+ "dist",
1658
+ "commands",
1659
+ "ingest",
1660
+ "video.js"
1661
+ ]
1662
+ },
1663
+ "org:get": {
1664
+ "aliases": [],
1665
+ "args": {},
1666
+ "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.",
1600
1667
  "examples": [
1601
- "<%= config.bin %> investigations analytics --start 2026-01-01 --end 2026-02-01",
1602
- "<%= config.bin %> investigations analytics --start 2026-01-01 --end 2026-02-01 --interval hourly",
1603
- "<%= config.bin %> investigations analytics --start 2026-01-01 --end 2026-02-01 --group-by resultType --json"
1668
+ "<%= config.bin %> org get",
1669
+ "<%= config.bin %> org get --json"
1604
1670
  ],
1605
1671
  "flags": {
1606
1672
  "json": {
@@ -1629,42 +1695,75 @@
1629
1695
  "name": "stage",
1630
1696
  "allowNo": false,
1631
1697
  "type": "boolean"
1698
+ }
1699
+ },
1700
+ "hasDynamicHelp": false,
1701
+ "hiddenAliases": [],
1702
+ "id": "org:get",
1703
+ "pluginAlias": "@formant/formant-cli",
1704
+ "pluginName": "@formant/formant-cli",
1705
+ "pluginType": "core",
1706
+ "strict": true,
1707
+ "summary": "Get your organization",
1708
+ "enableJsonFlag": true,
1709
+ "isESM": true,
1710
+ "relativePath": [
1711
+ "dist",
1712
+ "commands",
1713
+ "org",
1714
+ "get.js"
1715
+ ]
1716
+ },
1717
+ "org:update": {
1718
+ "aliases": [],
1719
+ "args": {},
1720
+ "description": "Update your organization's details.\n\nAt least one of --name or --description must be provided.",
1721
+ "examples": [
1722
+ "<%= config.bin %> org update --name \"My Fleet\"",
1723
+ "<%= config.bin %> org update --description \"Production robot fleet\"",
1724
+ "<%= config.bin %> org update --name \"My Fleet\" --description \"Production robot fleet\"",
1725
+ "<%= config.bin %> org update --name \"My Fleet\" --json"
1726
+ ],
1727
+ "flags": {
1728
+ "json": {
1729
+ "description": "Format output as json.",
1730
+ "helpGroup": "GLOBAL",
1731
+ "name": "json",
1732
+ "allowNo": false,
1733
+ "type": "boolean"
1632
1734
  },
1633
- "end": {
1634
- "description": "End time (ISO 8601)",
1635
- "name": "end",
1636
- "required": true,
1637
- "hasDynamicHelp": false,
1638
- "multiple": false,
1639
- "type": "option"
1735
+ "dev": {
1736
+ "description": "Target the dev environment",
1737
+ "exclusive": [
1738
+ "stage"
1739
+ ],
1740
+ "helpGroup": "GLOBAL",
1741
+ "name": "dev",
1742
+ "allowNo": false,
1743
+ "type": "boolean"
1640
1744
  },
1641
- "group-by": {
1642
- "description": "Group results by",
1643
- "name": "group-by",
1644
- "hasDynamicHelp": false,
1645
- "multiple": false,
1646
- "options": [
1647
- "resultType",
1648
- "signalType"
1745
+ "stage": {
1746
+ "description": "Target the stage environment",
1747
+ "exclusive": [
1748
+ "dev"
1649
1749
  ],
1650
- "type": "option"
1750
+ "helpGroup": "GLOBAL",
1751
+ "name": "stage",
1752
+ "allowNo": false,
1753
+ "type": "boolean"
1651
1754
  },
1652
- "interval": {
1653
- "description": "Time interval for aggregation",
1654
- "name": "interval",
1655
- "default": "daily",
1755
+ "description": {
1756
+ "char": "d",
1757
+ "description": "New description for the organization",
1758
+ "name": "description",
1656
1759
  "hasDynamicHelp": false,
1657
1760
  "multiple": false,
1658
- "options": [
1659
- "daily",
1660
- "hourly"
1661
- ],
1662
1761
  "type": "option"
1663
1762
  },
1664
- "start": {
1665
- "description": "Start time (ISO 8601)",
1666
- "name": "start",
1667
- "required": true,
1763
+ "name": {
1764
+ "char": "n",
1765
+ "description": "New name for the organization",
1766
+ "name": "name",
1668
1767
  "hasDynamicHelp": false,
1669
1768
  "multiple": false,
1670
1769
  "type": "option"
@@ -1672,34 +1771,1125 @@
1672
1771
  },
1673
1772
  "hasDynamicHelp": false,
1674
1773
  "hiddenAliases": [],
1675
- "id": "investigations:analytics",
1774
+ "id": "org:update",
1676
1775
  "pluginAlias": "@formant/formant-cli",
1677
1776
  "pluginName": "@formant/formant-cli",
1678
1777
  "pluginType": "core",
1679
1778
  "strict": true,
1680
- "summary": "Get investigation analytics",
1779
+ "summary": "Update your organization",
1681
1780
  "enableJsonFlag": true,
1682
1781
  "isESM": true,
1683
1782
  "relativePath": [
1684
1783
  "dist",
1685
1784
  "commands",
1686
- "investigations",
1687
- "analytics.js"
1785
+ "org",
1786
+ "update.js"
1787
+ ]
1788
+ },
1789
+ "kv:get": {
1790
+ "aliases": [],
1791
+ "args": {
1792
+ "key": {
1793
+ "description": "Key to retrieve",
1794
+ "name": "key",
1795
+ "required": true
1796
+ }
1797
+ },
1798
+ "description": "Get a value from the key-value store.\n\nThe key-value store allows devices and applications to store metadata.",
1799
+ "examples": [
1800
+ "<%= config.bin %> kv get my-key",
1801
+ "<%= config.bin %> kv get my-key --json"
1802
+ ],
1803
+ "flags": {
1804
+ "json": {
1805
+ "description": "Format output as json.",
1806
+ "helpGroup": "GLOBAL",
1807
+ "name": "json",
1808
+ "allowNo": false,
1809
+ "type": "boolean"
1810
+ },
1811
+ "dev": {
1812
+ "description": "Target the dev environment",
1813
+ "exclusive": [
1814
+ "stage"
1815
+ ],
1816
+ "helpGroup": "GLOBAL",
1817
+ "name": "dev",
1818
+ "allowNo": false,
1819
+ "type": "boolean"
1820
+ },
1821
+ "stage": {
1822
+ "description": "Target the stage environment",
1823
+ "exclusive": [
1824
+ "dev"
1825
+ ],
1826
+ "helpGroup": "GLOBAL",
1827
+ "name": "stage",
1828
+ "allowNo": false,
1829
+ "type": "boolean"
1830
+ }
1831
+ },
1832
+ "hasDynamicHelp": false,
1833
+ "hiddenAliases": [],
1834
+ "id": "kv:get",
1835
+ "pluginAlias": "@formant/formant-cli",
1836
+ "pluginName": "@formant/formant-cli",
1837
+ "pluginType": "core",
1838
+ "strict": true,
1839
+ "summary": "Get key-value",
1840
+ "enableJsonFlag": true,
1841
+ "isESM": true,
1842
+ "relativePath": [
1843
+ "dist",
1844
+ "commands",
1845
+ "kv",
1846
+ "get.js"
1847
+ ]
1848
+ },
1849
+ "kv:list": {
1850
+ "aliases": [],
1851
+ "args": {},
1852
+ "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.",
1853
+ "examples": [
1854
+ "<%= config.bin %> kv list",
1855
+ "<%= config.bin %> kv list --prefix config",
1856
+ "<%= config.bin %> kv list --keys key1 --keys key2 --keys key3",
1857
+ "<%= config.bin %> kv list --json"
1858
+ ],
1859
+ "flags": {
1860
+ "json": {
1861
+ "description": "Format output as json.",
1862
+ "helpGroup": "GLOBAL",
1863
+ "name": "json",
1864
+ "allowNo": false,
1865
+ "type": "boolean"
1866
+ },
1867
+ "dev": {
1868
+ "description": "Target the dev environment",
1869
+ "exclusive": [
1870
+ "stage"
1871
+ ],
1872
+ "helpGroup": "GLOBAL",
1873
+ "name": "dev",
1874
+ "allowNo": false,
1875
+ "type": "boolean"
1876
+ },
1877
+ "stage": {
1878
+ "description": "Target the stage environment",
1879
+ "exclusive": [
1880
+ "dev"
1881
+ ],
1882
+ "helpGroup": "GLOBAL",
1883
+ "name": "stage",
1884
+ "allowNo": false,
1885
+ "type": "boolean"
1886
+ },
1887
+ "keys": {
1888
+ "char": "k",
1889
+ "description": "Specific keys to query (can be specified multiple times)",
1890
+ "name": "keys",
1891
+ "hasDynamicHelp": false,
1892
+ "multiple": true,
1893
+ "type": "option"
1894
+ },
1895
+ "prefix": {
1896
+ "char": "p",
1897
+ "description": "Filter keys by prefix",
1898
+ "name": "prefix",
1899
+ "hasDynamicHelp": false,
1900
+ "multiple": false,
1901
+ "type": "option"
1902
+ }
1903
+ },
1904
+ "hasDynamicHelp": false,
1905
+ "hiddenAliases": [],
1906
+ "id": "kv:list",
1907
+ "pluginAlias": "@formant/formant-cli",
1908
+ "pluginName": "@formant/formant-cli",
1909
+ "pluginType": "core",
1910
+ "strict": true,
1911
+ "summary": "List key-value keys",
1912
+ "enableJsonFlag": true,
1913
+ "isESM": true,
1914
+ "relativePath": [
1915
+ "dist",
1916
+ "commands",
1917
+ "kv",
1918
+ "list.js"
1919
+ ]
1920
+ },
1921
+ "kv:set": {
1922
+ "aliases": [],
1923
+ "args": {
1924
+ "key": {
1925
+ "description": "Key to set",
1926
+ "name": "key",
1927
+ "required": true
1928
+ },
1929
+ "value": {
1930
+ "description": "Value to store (JSON string)",
1931
+ "name": "value",
1932
+ "required": true
1933
+ }
1934
+ },
1935
+ "description": "Set a value in the key-value store.\n\nStores a value associated with a key. The value should be a JSON string.",
1936
+ "examples": [
1937
+ "<%= config.bin %> kv set my-key '{\"data\": \"value\"}'",
1938
+ "<%= config.bin %> kv set config '{\"setting\": true}'"
1939
+ ],
1940
+ "flags": {
1941
+ "json": {
1942
+ "description": "Format output as json.",
1943
+ "helpGroup": "GLOBAL",
1944
+ "name": "json",
1945
+ "allowNo": false,
1946
+ "type": "boolean"
1947
+ },
1948
+ "dev": {
1949
+ "description": "Target the dev environment",
1950
+ "exclusive": [
1951
+ "stage"
1952
+ ],
1953
+ "helpGroup": "GLOBAL",
1954
+ "name": "dev",
1955
+ "allowNo": false,
1956
+ "type": "boolean"
1957
+ },
1958
+ "stage": {
1959
+ "description": "Target the stage environment",
1960
+ "exclusive": [
1961
+ "dev"
1962
+ ],
1963
+ "helpGroup": "GLOBAL",
1964
+ "name": "stage",
1965
+ "allowNo": false,
1966
+ "type": "boolean"
1967
+ }
1968
+ },
1969
+ "hasDynamicHelp": false,
1970
+ "hiddenAliases": [],
1971
+ "id": "kv:set",
1972
+ "pluginAlias": "@formant/formant-cli",
1973
+ "pluginName": "@formant/formant-cli",
1974
+ "pluginType": "core",
1975
+ "strict": true,
1976
+ "summary": "Set key-value",
1977
+ "enableJsonFlag": true,
1978
+ "isESM": true,
1979
+ "relativePath": [
1980
+ "dist",
1981
+ "commands",
1982
+ "kv",
1983
+ "set.js"
1984
+ ]
1985
+ },
1986
+ "investigations:analytics": {
1987
+ "aliases": [],
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.",
1990
+ "examples": [
1991
+ "<%= config.bin %> investigations analytics --start 2026-01-01 --end 2026-02-01",
1992
+ "<%= config.bin %> investigations analytics --start 2026-01-01 --end 2026-02-01 --interval hourly",
1993
+ "<%= config.bin %> investigations analytics --start 2026-01-01 --end 2026-02-01 --group-by resultType --json"
1994
+ ],
1995
+ "flags": {
1996
+ "json": {
1997
+ "description": "Format output as json.",
1998
+ "helpGroup": "GLOBAL",
1999
+ "name": "json",
2000
+ "allowNo": false,
2001
+ "type": "boolean"
2002
+ },
2003
+ "dev": {
2004
+ "description": "Target the dev environment",
2005
+ "exclusive": [
2006
+ "stage"
2007
+ ],
2008
+ "helpGroup": "GLOBAL",
2009
+ "name": "dev",
2010
+ "allowNo": false,
2011
+ "type": "boolean"
2012
+ },
2013
+ "stage": {
2014
+ "description": "Target the stage environment",
2015
+ "exclusive": [
2016
+ "dev"
2017
+ ],
2018
+ "helpGroup": "GLOBAL",
2019
+ "name": "stage",
2020
+ "allowNo": false,
2021
+ "type": "boolean"
2022
+ },
2023
+ "end": {
2024
+ "description": "End time (ISO 8601)",
2025
+ "name": "end",
2026
+ "required": true,
2027
+ "hasDynamicHelp": false,
2028
+ "multiple": false,
2029
+ "type": "option"
2030
+ },
2031
+ "group-by": {
2032
+ "description": "Group results by",
2033
+ "name": "group-by",
2034
+ "hasDynamicHelp": false,
2035
+ "multiple": false,
2036
+ "options": [
2037
+ "resultType",
2038
+ "signalType"
2039
+ ],
2040
+ "type": "option"
2041
+ },
2042
+ "interval": {
2043
+ "description": "Time interval for aggregation",
2044
+ "name": "interval",
2045
+ "default": "daily",
2046
+ "hasDynamicHelp": false,
2047
+ "multiple": false,
2048
+ "options": [
2049
+ "daily",
2050
+ "hourly"
2051
+ ],
2052
+ "type": "option"
2053
+ },
2054
+ "start": {
2055
+ "description": "Start time (ISO 8601)",
2056
+ "name": "start",
2057
+ "required": true,
2058
+ "hasDynamicHelp": false,
2059
+ "multiple": false,
2060
+ "type": "option"
2061
+ }
2062
+ },
2063
+ "hasDynamicHelp": false,
2064
+ "hiddenAliases": [],
2065
+ "id": "investigations:analytics",
2066
+ "pluginAlias": "@formant/formant-cli",
2067
+ "pluginName": "@formant/formant-cli",
2068
+ "pluginType": "core",
2069
+ "strict": true,
2070
+ "summary": "Get investigation analytics",
2071
+ "enableJsonFlag": true,
2072
+ "isESM": true,
2073
+ "relativePath": [
2074
+ "dist",
2075
+ "commands",
2076
+ "investigations",
2077
+ "analytics.js"
2078
+ ]
2079
+ },
2080
+ "investigations:get": {
2081
+ "aliases": [],
2082
+ "args": {
2083
+ "id": {
2084
+ "description": "Investigation (taskflow) ID",
2085
+ "name": "id",
2086
+ "required": true
2087
+ }
2088
+ },
2089
+ "description": "Get detailed information about a specific investigation by ID.",
2090
+ "examples": [
2091
+ "<%= config.bin %> investigations get <id>",
2092
+ "<%= config.bin %> investigations get <id> --json"
2093
+ ],
2094
+ "flags": {
2095
+ "json": {
2096
+ "description": "Format output as json.",
2097
+ "helpGroup": "GLOBAL",
2098
+ "name": "json",
2099
+ "allowNo": false,
2100
+ "type": "boolean"
2101
+ },
2102
+ "dev": {
2103
+ "description": "Target the dev environment",
2104
+ "exclusive": [
2105
+ "stage"
2106
+ ],
2107
+ "helpGroup": "GLOBAL",
2108
+ "name": "dev",
2109
+ "allowNo": false,
2110
+ "type": "boolean"
2111
+ },
2112
+ "stage": {
2113
+ "description": "Target the stage environment",
2114
+ "exclusive": [
2115
+ "dev"
2116
+ ],
2117
+ "helpGroup": "GLOBAL",
2118
+ "name": "stage",
2119
+ "allowNo": false,
2120
+ "type": "boolean"
2121
+ }
2122
+ },
2123
+ "hasDynamicHelp": false,
2124
+ "hiddenAliases": [],
2125
+ "id": "investigations:get",
2126
+ "pluginAlias": "@formant/formant-cli",
2127
+ "pluginName": "@formant/formant-cli",
2128
+ "pluginType": "core",
2129
+ "strict": true,
2130
+ "summary": "Get an investigation by ID",
2131
+ "enableJsonFlag": true,
2132
+ "isESM": true,
2133
+ "relativePath": [
2134
+ "dist",
2135
+ "commands",
2136
+ "investigations",
2137
+ "get.js"
2138
+ ]
2139
+ },
2140
+ "investigations:list": {
2141
+ "aliases": [],
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.",
2144
+ "examples": [
2145
+ "<%= config.bin %> investigations list",
2146
+ "<%= config.bin %> investigations list --signal-handler",
2147
+ "<%= config.bin %> investigations list --json"
2148
+ ],
2149
+ "flags": {
2150
+ "json": {
2151
+ "description": "Format output as json.",
2152
+ "helpGroup": "GLOBAL",
2153
+ "name": "json",
2154
+ "allowNo": false,
2155
+ "type": "boolean"
2156
+ },
2157
+ "dev": {
2158
+ "description": "Target the dev environment",
2159
+ "exclusive": [
2160
+ "stage"
2161
+ ],
2162
+ "helpGroup": "GLOBAL",
2163
+ "name": "dev",
2164
+ "allowNo": false,
2165
+ "type": "boolean"
2166
+ },
2167
+ "stage": {
2168
+ "description": "Target the stage environment",
2169
+ "exclusive": [
2170
+ "dev"
2171
+ ],
2172
+ "helpGroup": "GLOBAL",
2173
+ "name": "stage",
2174
+ "allowNo": false,
2175
+ "type": "boolean"
2176
+ },
2177
+ "signal-handler": {
2178
+ "description": "Only show investigations that handle signals",
2179
+ "name": "signal-handler",
2180
+ "allowNo": false,
2181
+ "type": "boolean"
2182
+ }
2183
+ },
2184
+ "hasDynamicHelp": false,
2185
+ "hiddenAliases": [],
2186
+ "id": "investigations:list",
2187
+ "pluginAlias": "@formant/formant-cli",
2188
+ "pluginName": "@formant/formant-cli",
2189
+ "pluginType": "core",
2190
+ "strict": true,
2191
+ "summary": "List investigations",
2192
+ "enableJsonFlag": true,
2193
+ "isESM": true,
2194
+ "relativePath": [
2195
+ "dist",
2196
+ "commands",
2197
+ "investigations",
2198
+ "list.js"
2199
+ ]
2200
+ },
2201
+ "investigations:run": {
2202
+ "aliases": [],
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.",
2216
+ "examples": [
2217
+ "<%= config.bin %> investigations run <investigation-id> <run-id>",
2218
+ "<%= config.bin %> investigations run <investigation-id> <run-id> --log-only",
2219
+ "<%= config.bin %> investigations run <investigation-id> <run-id> --json"
2220
+ ],
2221
+ "flags": {
2222
+ "json": {
2223
+ "description": "Format output as json.",
2224
+ "helpGroup": "GLOBAL",
2225
+ "name": "json",
2226
+ "allowNo": false,
2227
+ "type": "boolean"
2228
+ },
2229
+ "dev": {
2230
+ "description": "Target the dev environment",
2231
+ "exclusive": [
2232
+ "stage"
2233
+ ],
2234
+ "helpGroup": "GLOBAL",
2235
+ "name": "dev",
2236
+ "allowNo": false,
2237
+ "type": "boolean"
2238
+ },
2239
+ "stage": {
2240
+ "description": "Target the stage environment",
2241
+ "exclusive": [
2242
+ "dev"
2243
+ ],
2244
+ "helpGroup": "GLOBAL",
2245
+ "name": "stage",
2246
+ "allowNo": false,
2247
+ "type": "boolean"
2248
+ },
2249
+ "log-only": {
2250
+ "description": "Only show the execution log (skip run details)",
2251
+ "name": "log-only",
2252
+ "allowNo": false,
2253
+ "type": "boolean"
2254
+ },
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"
2260
+ }
2261
+ },
2262
+ "hasDynamicHelp": false,
2263
+ "hiddenAliases": [],
2264
+ "id": "investigations:run",
2265
+ "pluginAlias": "@formant/formant-cli",
2266
+ "pluginName": "@formant/formant-cli",
2267
+ "pluginType": "core",
2268
+ "strict": true,
2269
+ "summary": "Get investigation run details and execution log",
2270
+ "enableJsonFlag": true,
2271
+ "isESM": true,
2272
+ "relativePath": [
2273
+ "dist",
2274
+ "commands",
2275
+ "investigations",
2276
+ "run.js"
2277
+ ]
2278
+ },
2279
+ "investigations:runs-list": {
2280
+ "aliases": [],
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.",
2289
+ "examples": [
2290
+ "<%= config.bin %> investigations runs-list <id>",
2291
+ "<%= config.bin %> investigations runs-list <id> --limit 50",
2292
+ "<%= config.bin %> investigations runs-list <id> --details --json"
2293
+ ],
2294
+ "flags": {
2295
+ "json": {
2296
+ "description": "Format output as json.",
2297
+ "helpGroup": "GLOBAL",
2298
+ "name": "json",
2299
+ "allowNo": false,
2300
+ "type": "boolean"
2301
+ },
2302
+ "dev": {
2303
+ "description": "Target the dev environment",
2304
+ "exclusive": [
2305
+ "stage"
2306
+ ],
2307
+ "helpGroup": "GLOBAL",
2308
+ "name": "dev",
2309
+ "allowNo": false,
2310
+ "type": "boolean"
2311
+ },
2312
+ "stage": {
2313
+ "description": "Target the stage environment",
2314
+ "exclusive": [
2315
+ "dev"
2316
+ ],
2317
+ "helpGroup": "GLOBAL",
2318
+ "name": "stage",
2319
+ "allowNo": false,
2320
+ "type": "boolean"
2321
+ },
2322
+ "details": {
2323
+ "description": "Include detailed information about each run",
2324
+ "name": "details",
2325
+ "allowNo": false,
2326
+ "type": "boolean"
2327
+ },
2328
+ "limit": {
2329
+ "char": "l",
2330
+ "description": "Maximum number of runs to return",
2331
+ "name": "limit",
2332
+ "default": 20,
2333
+ "hasDynamicHelp": false,
2334
+ "multiple": false,
2335
+ "type": "option"
2336
+ },
2337
+ "offset": {
2338
+ "char": "o",
2339
+ "description": "Offset for pagination",
2340
+ "name": "offset",
2341
+ "default": 0,
2342
+ "hasDynamicHelp": false,
2343
+ "multiple": false,
2344
+ "type": "option"
2345
+ }
2346
+ },
2347
+ "hasDynamicHelp": false,
2348
+ "hiddenAliases": [],
2349
+ "id": "investigations:runs-list",
2350
+ "pluginAlias": "@formant/formant-cli",
2351
+ "pluginName": "@formant/formant-cli",
2352
+ "pluginType": "core",
2353
+ "strict": true,
2354
+ "summary": "List actual investigation runs",
2355
+ "enableJsonFlag": true,
2356
+ "isESM": true,
2357
+ "relativePath": [
2358
+ "dist",
2359
+ "commands",
2360
+ "investigations",
2361
+ "runs-list.js"
2362
+ ]
2363
+ },
2364
+ "investigations:runs": {
2365
+ "aliases": [],
2366
+ "args": {
2367
+ "id": {
2368
+ "description": "Investigation (taskflow) ID",
2369
+ "name": "id",
2370
+ "required": true
2371
+ }
2372
+ },
2373
+ "description": "List evaluation runs for a specific investigation.",
2374
+ "examples": [
2375
+ "<%= config.bin %> investigations runs <id>",
2376
+ "<%= config.bin %> investigations runs <id> --json"
2377
+ ],
2378
+ "flags": {
2379
+ "json": {
2380
+ "description": "Format output as json.",
2381
+ "helpGroup": "GLOBAL",
2382
+ "name": "json",
2383
+ "allowNo": false,
2384
+ "type": "boolean"
2385
+ },
2386
+ "dev": {
2387
+ "description": "Target the dev environment",
2388
+ "exclusive": [
2389
+ "stage"
2390
+ ],
2391
+ "helpGroup": "GLOBAL",
2392
+ "name": "dev",
2393
+ "allowNo": false,
2394
+ "type": "boolean"
2395
+ },
2396
+ "stage": {
2397
+ "description": "Target the stage environment",
2398
+ "exclusive": [
2399
+ "dev"
2400
+ ],
2401
+ "helpGroup": "GLOBAL",
2402
+ "name": "stage",
2403
+ "allowNo": false,
2404
+ "type": "boolean"
2405
+ }
2406
+ },
2407
+ "hasDynamicHelp": false,
2408
+ "hiddenAliases": [],
2409
+ "id": "investigations:runs",
2410
+ "pluginAlias": "@formant/formant-cli",
2411
+ "pluginName": "@formant/formant-cli",
2412
+ "pluginType": "core",
2413
+ "strict": true,
2414
+ "summary": "List runs for an investigation",
2415
+ "enableJsonFlag": true,
2416
+ "isESM": true,
2417
+ "relativePath": [
2418
+ "dist",
2419
+ "commands",
2420
+ "investigations",
2421
+ "runs.js"
2422
+ ]
2423
+ },
2424
+ "investigations:stats": {
2425
+ "aliases": [],
2426
+ "args": {},
2427
+ "description": "Get investigation statistics for a time range.",
2428
+ "examples": [
2429
+ "<%= config.bin %> investigations stats --start 2026-01-01 --end 2026-02-01",
2430
+ "<%= config.bin %> investigations stats --start 2026-01-01 --end 2026-02-01 --json"
2431
+ ],
2432
+ "flags": {
2433
+ "json": {
2434
+ "description": "Format output as json.",
2435
+ "helpGroup": "GLOBAL",
2436
+ "name": "json",
2437
+ "allowNo": false,
2438
+ "type": "boolean"
2439
+ },
2440
+ "dev": {
2441
+ "description": "Target the dev environment",
2442
+ "exclusive": [
2443
+ "stage"
2444
+ ],
2445
+ "helpGroup": "GLOBAL",
2446
+ "name": "dev",
2447
+ "allowNo": false,
2448
+ "type": "boolean"
2449
+ },
2450
+ "stage": {
2451
+ "description": "Target the stage environment",
2452
+ "exclusive": [
2453
+ "dev"
2454
+ ],
2455
+ "helpGroup": "GLOBAL",
2456
+ "name": "stage",
2457
+ "allowNo": false,
2458
+ "type": "boolean"
2459
+ },
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"
2475
+ }
2476
+ },
2477
+ "hasDynamicHelp": false,
2478
+ "hiddenAliases": [],
2479
+ "id": "investigations:stats",
2480
+ "pluginAlias": "@formant/formant-cli",
2481
+ "pluginName": "@formant/formant-cli",
2482
+ "pluginType": "core",
2483
+ "strict": true,
2484
+ "summary": "Get investigation stats",
2485
+ "enableJsonFlag": true,
2486
+ "isESM": true,
2487
+ "relativePath": [
2488
+ "dist",
2489
+ "commands",
2490
+ "investigations",
2491
+ "stats.js"
2492
+ ]
2493
+ },
2494
+ "investigations:trigger": {
2495
+ "aliases": [],
2496
+ "args": {
2497
+ "id": {
2498
+ "description": "Investigation (taskflow) ID",
2499
+ "name": "id",
2500
+ "required": true
2501
+ }
2502
+ },
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.",
2504
+ "examples": [
2505
+ "<%= config.bin %> investigations trigger <id> --input \"Robot stopped responding\"",
2506
+ "<%= config.bin %> investigations trigger <id> --input \"Battery draining fast on device X\" --json"
2507
+ ],
2508
+ "flags": {
2509
+ "json": {
2510
+ "description": "Format output as json.",
2511
+ "helpGroup": "GLOBAL",
2512
+ "name": "json",
2513
+ "allowNo": false,
2514
+ "type": "boolean"
2515
+ },
2516
+ "dev": {
2517
+ "description": "Target the dev environment",
2518
+ "exclusive": [
2519
+ "stage"
2520
+ ],
2521
+ "helpGroup": "GLOBAL",
2522
+ "name": "dev",
2523
+ "allowNo": false,
2524
+ "type": "boolean"
2525
+ },
2526
+ "stage": {
2527
+ "description": "Target the stage environment",
2528
+ "exclusive": [
2529
+ "dev"
2530
+ ],
2531
+ "helpGroup": "GLOBAL",
2532
+ "name": "stage",
2533
+ "allowNo": false,
2534
+ "type": "boolean"
2535
+ },
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"
2544
+ },
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"
2551
+ }
2552
+ },
2553
+ "hasDynamicHelp": false,
2554
+ "hiddenAliases": [],
2555
+ "id": "investigations:trigger",
2556
+ "pluginAlias": "@formant/formant-cli",
2557
+ "pluginName": "@formant/formant-cli",
2558
+ "pluginType": "core",
2559
+ "strict": true,
2560
+ "summary": "Trigger an investigation",
2561
+ "enableJsonFlag": true,
2562
+ "isESM": true,
2563
+ "relativePath": [
2564
+ "dist",
2565
+ "commands",
2566
+ "investigations",
2567
+ "trigger.js"
2568
+ ]
2569
+ },
2570
+ "query": {
2571
+ "aliases": [],
2572
+ "args": {},
2573
+ "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.",
2574
+ "examples": [
2575
+ "<%= config.bin %> query --device <id> --stream battery_level --start 2026-01-01 --end 2026-01-02",
2576
+ "<%= config.bin %> query --device <id> --stream speed --aggregate hour --start 2026-01-01 --end 2026-02-01",
2577
+ "<%= config.bin %> query --device <id> --stream battery_level --latest",
2578
+ "<%= config.bin %> query --device <id> --stream temperature --type numeric --json"
2579
+ ],
2580
+ "flags": {
2581
+ "json": {
2582
+ "description": "Format output as json.",
2583
+ "helpGroup": "GLOBAL",
2584
+ "name": "json",
2585
+ "allowNo": false,
2586
+ "type": "boolean"
2587
+ },
2588
+ "dev": {
2589
+ "description": "Target the dev environment",
2590
+ "exclusive": [
2591
+ "stage"
2592
+ ],
2593
+ "helpGroup": "GLOBAL",
2594
+ "name": "dev",
2595
+ "allowNo": false,
2596
+ "type": "boolean"
2597
+ },
2598
+ "stage": {
2599
+ "description": "Target the stage environment",
2600
+ "exclusive": [
2601
+ "dev"
2602
+ ],
2603
+ "helpGroup": "GLOBAL",
2604
+ "name": "stage",
2605
+ "allowNo": false,
2606
+ "type": "boolean"
2607
+ },
2608
+ "aggregate": {
2609
+ "char": "a",
2610
+ "description": "Aggregation level for downsampling",
2611
+ "name": "aggregate",
2612
+ "hasDynamicHelp": false,
2613
+ "multiple": false,
2614
+ "type": "option"
2615
+ },
2616
+ "device": {
2617
+ "char": "d",
2618
+ "description": "Device ID (UUID)",
2619
+ "name": "device",
2620
+ "required": true,
2621
+ "hasDynamicHelp": false,
2622
+ "multiple": false,
2623
+ "type": "option"
2624
+ },
2625
+ "end": {
2626
+ "description": "End time (ISO 8601)",
2627
+ "name": "end",
2628
+ "hasDynamicHelp": false,
2629
+ "multiple": false,
2630
+ "type": "option"
2631
+ },
2632
+ "latest": {
2633
+ "description": "Only return the most recent value per stream",
2634
+ "name": "latest",
2635
+ "allowNo": false,
2636
+ "type": "boolean"
2637
+ },
2638
+ "limit": {
2639
+ "char": "l",
2640
+ "description": "Maximum number of datapoints",
2641
+ "name": "limit",
2642
+ "hasDynamicHelp": false,
2643
+ "multiple": false,
2644
+ "type": "option"
2645
+ },
2646
+ "start": {
2647
+ "description": "Start time (ISO 8601)",
2648
+ "name": "start",
2649
+ "hasDynamicHelp": false,
2650
+ "multiple": false,
2651
+ "type": "option"
2652
+ },
2653
+ "stream": {
2654
+ "char": "s",
2655
+ "description": "Stream name(s), can be specified multiple times",
2656
+ "name": "stream",
2657
+ "required": true,
2658
+ "hasDynamicHelp": false,
2659
+ "multiple": true,
2660
+ "type": "option"
2661
+ },
2662
+ "type": {
2663
+ "description": "Filter by stream type",
2664
+ "name": "type",
2665
+ "hasDynamicHelp": false,
2666
+ "multiple": false,
2667
+ "type": "option"
2668
+ }
2669
+ },
2670
+ "hasDynamicHelp": false,
2671
+ "hiddenAliases": [],
2672
+ "id": "query",
2673
+ "pluginAlias": "@formant/formant-cli",
2674
+ "pluginName": "@formant/formant-cli",
2675
+ "pluginType": "core",
2676
+ "strict": true,
2677
+ "summary": "Query telemetry stream data",
2678
+ "enableJsonFlag": true,
2679
+ "isESM": true,
2680
+ "relativePath": [
2681
+ "dist",
2682
+ "commands",
2683
+ "query",
2684
+ "index.js"
2685
+ ]
2686
+ },
2687
+ "query:latest-values": {
2688
+ "aliases": [],
2689
+ "args": {},
2690
+ "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.",
2691
+ "examples": [
2692
+ "<%= config.bin %> query latest-values --device <id> --stream battery_level",
2693
+ "<%= config.bin %> query latest-values --device <id> --stream temperature --stream humidity",
2694
+ "<%= config.bin %> query latest-values --device <id> --all-streams",
2695
+ "<%= config.bin %> query latest-values --device <id> --all-streams --json"
2696
+ ],
2697
+ "flags": {
2698
+ "json": {
2699
+ "description": "Format output as json.",
2700
+ "helpGroup": "GLOBAL",
2701
+ "name": "json",
2702
+ "allowNo": false,
2703
+ "type": "boolean"
2704
+ },
2705
+ "dev": {
2706
+ "description": "Target the dev environment",
2707
+ "exclusive": [
2708
+ "stage"
2709
+ ],
2710
+ "helpGroup": "GLOBAL",
2711
+ "name": "dev",
2712
+ "allowNo": false,
2713
+ "type": "boolean"
2714
+ },
2715
+ "stage": {
2716
+ "description": "Target the stage environment",
2717
+ "exclusive": [
2718
+ "dev"
2719
+ ],
2720
+ "helpGroup": "GLOBAL",
2721
+ "name": "stage",
2722
+ "allowNo": false,
2723
+ "type": "boolean"
2724
+ },
2725
+ "all-streams": {
2726
+ "description": "Query all configured streams for the device (requires single --device)",
2727
+ "name": "all-streams",
2728
+ "allowNo": false,
2729
+ "type": "boolean"
2730
+ },
2731
+ "device": {
2732
+ "char": "d",
2733
+ "description": "Device ID (UUID)",
2734
+ "name": "device",
2735
+ "required": true,
2736
+ "hasDynamicHelp": false,
2737
+ "multiple": true,
2738
+ "type": "option"
2739
+ },
2740
+ "stream": {
2741
+ "char": "s",
2742
+ "description": "Stream name(s), can be specified multiple times",
2743
+ "name": "stream",
2744
+ "hasDynamicHelp": false,
2745
+ "multiple": true,
2746
+ "type": "option"
2747
+ }
2748
+ },
2749
+ "hasDynamicHelp": false,
2750
+ "hiddenAliases": [],
2751
+ "id": "query:latest-values",
2752
+ "pluginAlias": "@formant/formant-cli",
2753
+ "pluginName": "@formant/formant-cli",
2754
+ "pluginType": "core",
2755
+ "strict": true,
2756
+ "summary": "Get latest stream values",
2757
+ "enableJsonFlag": true,
2758
+ "isESM": true,
2759
+ "relativePath": [
2760
+ "dist",
2761
+ "commands",
2762
+ "query",
2763
+ "latest-values.js"
2764
+ ]
2765
+ },
2766
+ "schedules:get": {
2767
+ "aliases": [],
2768
+ "args": {
2769
+ "id": {
2770
+ "description": "Schedule ID (UUID)",
2771
+ "name": "id",
2772
+ "required": true
2773
+ }
2774
+ },
2775
+ "description": "Get detailed information about a schedule.\n\nShows the full schedule configuration including cron expression, command template,\ninvestigation link, and execution settings.",
2776
+ "examples": [
2777
+ "<%= config.bin %> schedules get <schedule-id>",
2778
+ "<%= config.bin %> schedules get <schedule-id> --json"
2779
+ ],
2780
+ "flags": {
2781
+ "json": {
2782
+ "description": "Format output as json.",
2783
+ "helpGroup": "GLOBAL",
2784
+ "name": "json",
2785
+ "allowNo": false,
2786
+ "type": "boolean"
2787
+ },
2788
+ "dev": {
2789
+ "description": "Target the dev environment",
2790
+ "exclusive": [
2791
+ "stage"
2792
+ ],
2793
+ "helpGroup": "GLOBAL",
2794
+ "name": "dev",
2795
+ "allowNo": false,
2796
+ "type": "boolean"
2797
+ },
2798
+ "stage": {
2799
+ "description": "Target the stage environment",
2800
+ "exclusive": [
2801
+ "dev"
2802
+ ],
2803
+ "helpGroup": "GLOBAL",
2804
+ "name": "stage",
2805
+ "allowNo": false,
2806
+ "type": "boolean"
2807
+ }
2808
+ },
2809
+ "hasDynamicHelp": false,
2810
+ "hiddenAliases": [],
2811
+ "id": "schedules:get",
2812
+ "pluginAlias": "@formant/formant-cli",
2813
+ "pluginName": "@formant/formant-cli",
2814
+ "pluginType": "core",
2815
+ "strict": true,
2816
+ "summary": "Get schedule details",
2817
+ "enableJsonFlag": true,
2818
+ "isESM": true,
2819
+ "relativePath": [
2820
+ "dist",
2821
+ "commands",
2822
+ "schedules",
2823
+ "get.js"
2824
+ ]
2825
+ },
2826
+ "schedules:list": {
2827
+ "aliases": [],
2828
+ "args": {},
2829
+ "description": "List all schedules in your organization.\n\nSchedules can trigger commands or investigations on a recurring (cron) or one-time basis.",
2830
+ "examples": [
2831
+ "<%= config.bin %> schedules list",
2832
+ "<%= config.bin %> schedules list --json"
2833
+ ],
2834
+ "flags": {
2835
+ "json": {
2836
+ "description": "Format output as json.",
2837
+ "helpGroup": "GLOBAL",
2838
+ "name": "json",
2839
+ "allowNo": false,
2840
+ "type": "boolean"
2841
+ },
2842
+ "dev": {
2843
+ "description": "Target the dev environment",
2844
+ "exclusive": [
2845
+ "stage"
2846
+ ],
2847
+ "helpGroup": "GLOBAL",
2848
+ "name": "dev",
2849
+ "allowNo": false,
2850
+ "type": "boolean"
2851
+ },
2852
+ "stage": {
2853
+ "description": "Target the stage environment",
2854
+ "exclusive": [
2855
+ "dev"
2856
+ ],
2857
+ "helpGroup": "GLOBAL",
2858
+ "name": "stage",
2859
+ "allowNo": false,
2860
+ "type": "boolean"
2861
+ }
2862
+ },
2863
+ "hasDynamicHelp": false,
2864
+ "hiddenAliases": [],
2865
+ "id": "schedules:list",
2866
+ "pluginAlias": "@formant/formant-cli",
2867
+ "pluginName": "@formant/formant-cli",
2868
+ "pluginType": "core",
2869
+ "strict": true,
2870
+ "summary": "List schedules",
2871
+ "enableJsonFlag": true,
2872
+ "isESM": true,
2873
+ "relativePath": [
2874
+ "dist",
2875
+ "commands",
2876
+ "schedules",
2877
+ "list.js"
1688
2878
  ]
1689
2879
  },
1690
- "investigations:get": {
2880
+ "users:get": {
1691
2881
  "aliases": [],
1692
2882
  "args": {
1693
2883
  "id": {
1694
- "description": "Investigation (taskflow) ID",
2884
+ "description": "User ID (UUID)",
1695
2885
  "name": "id",
1696
2886
  "required": true
1697
2887
  }
1698
2888
  },
1699
- "description": "Get detailed information about a specific investigation by ID.",
2889
+ "description": "Get detailed information about a user.\n\nShows user details including email, name, roles, and account settings.",
1700
2890
  "examples": [
1701
- "<%= config.bin %> investigations get <id>",
1702
- "<%= config.bin %> investigations get <id> --json"
2891
+ "<%= config.bin %> users get <user-id>",
2892
+ "<%= config.bin %> users get <user-id> --json"
1703
2893
  ],
1704
2894
  "flags": {
1705
2895
  "json": {
@@ -1732,29 +2922,28 @@
1732
2922
  },
1733
2923
  "hasDynamicHelp": false,
1734
2924
  "hiddenAliases": [],
1735
- "id": "investigations:get",
2925
+ "id": "users:get",
1736
2926
  "pluginAlias": "@formant/formant-cli",
1737
2927
  "pluginName": "@formant/formant-cli",
1738
2928
  "pluginType": "core",
1739
2929
  "strict": true,
1740
- "summary": "Get an investigation by ID",
2930
+ "summary": "Get user details",
1741
2931
  "enableJsonFlag": true,
1742
2932
  "isESM": true,
1743
2933
  "relativePath": [
1744
2934
  "dist",
1745
2935
  "commands",
1746
- "investigations",
2936
+ "users",
1747
2937
  "get.js"
1748
2938
  ]
1749
2939
  },
1750
- "investigations:list": {
2940
+ "users:list": {
1751
2941
  "aliases": [],
1752
2942
  "args": {},
1753
- "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.",
2943
+ "description": "List all users in your organization.\n\nShows user accounts, their email addresses, and account status.",
1754
2944
  "examples": [
1755
- "<%= config.bin %> investigations list",
1756
- "<%= config.bin %> investigations list --signal-handler",
1757
- "<%= config.bin %> investigations list --json"
2945
+ "<%= config.bin %> users list",
2946
+ "<%= config.bin %> users list --json"
1758
2947
  ],
1759
2948
  "flags": {
1760
2949
  "json": {
@@ -1783,50 +2972,33 @@
1783
2972
  "name": "stage",
1784
2973
  "allowNo": false,
1785
2974
  "type": "boolean"
1786
- },
1787
- "signal-handler": {
1788
- "description": "Only show investigations that handle signals",
1789
- "name": "signal-handler",
1790
- "allowNo": false,
1791
- "type": "boolean"
1792
2975
  }
1793
2976
  },
1794
2977
  "hasDynamicHelp": false,
1795
2978
  "hiddenAliases": [],
1796
- "id": "investigations:list",
2979
+ "id": "users:list",
1797
2980
  "pluginAlias": "@formant/formant-cli",
1798
2981
  "pluginName": "@formant/formant-cli",
1799
2982
  "pluginType": "core",
1800
2983
  "strict": true,
1801
- "summary": "List investigations",
2984
+ "summary": "List users",
1802
2985
  "enableJsonFlag": true,
1803
2986
  "isESM": true,
1804
2987
  "relativePath": [
1805
2988
  "dist",
1806
2989
  "commands",
1807
- "investigations",
2990
+ "users",
1808
2991
  "list.js"
1809
2992
  ]
1810
2993
  },
1811
- "investigations:run": {
2994
+ "signals:count": {
1812
2995
  "aliases": [],
1813
- "args": {
1814
- "investigationId": {
1815
- "description": "Investigation (taskflow) ID",
1816
- "name": "investigationId",
1817
- "required": true
1818
- },
1819
- "runId": {
1820
- "description": "Run ID",
1821
- "name": "runId",
1822
- "required": true
1823
- }
1824
- },
1825
- "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.",
2996
+ "args": {},
2997
+ "description": "Get counts of signals grouped by type.\n\nReturns total counts and per-type breakdowns (manual, eventTrigger, schedule, slack).",
1826
2998
  "examples": [
1827
- "<%= config.bin %> investigations run <investigation-id> <run-id>",
1828
- "<%= config.bin %> investigations run <investigation-id> <run-id> --log-only",
1829
- "<%= config.bin %> investigations run <investigation-id> <run-id> --json"
2999
+ "<%= config.bin %> signals count",
3000
+ "<%= config.bin %> signals count --start 2026-01-01 --end 2026-02-01",
3001
+ "<%= config.bin %> signals count --json"
1830
3002
  ],
1831
3003
  "flags": {
1832
3004
  "json": {
@@ -1856,50 +3028,52 @@
1856
3028
  "allowNo": false,
1857
3029
  "type": "boolean"
1858
3030
  },
1859
- "log-only": {
1860
- "description": "Only show the execution log (skip run details)",
1861
- "name": "log-only",
1862
- "allowNo": false,
1863
- "type": "boolean"
3031
+ "end": {
3032
+ "description": "End time (ISO 8601)",
3033
+ "name": "end",
3034
+ "hasDynamicHelp": false,
3035
+ "multiple": false,
3036
+ "type": "option"
1864
3037
  },
1865
- "trace-signal": {
1866
- "description": "Fetch and display the signal and event information for this run",
1867
- "name": "trace-signal",
1868
- "allowNo": false,
1869
- "type": "boolean"
3038
+ "start": {
3039
+ "description": "Start time (ISO 8601)",
3040
+ "name": "start",
3041
+ "hasDynamicHelp": false,
3042
+ "multiple": false,
3043
+ "type": "option"
1870
3044
  }
1871
3045
  },
1872
3046
  "hasDynamicHelp": false,
1873
3047
  "hiddenAliases": [],
1874
- "id": "investigations:run",
3048
+ "id": "signals:count",
1875
3049
  "pluginAlias": "@formant/formant-cli",
1876
3050
  "pluginName": "@formant/formant-cli",
1877
3051
  "pluginType": "core",
1878
3052
  "strict": true,
1879
- "summary": "Get investigation run details and execution log",
3053
+ "summary": "Get signal counts by type",
1880
3054
  "enableJsonFlag": true,
1881
3055
  "isESM": true,
1882
3056
  "relativePath": [
1883
3057
  "dist",
1884
3058
  "commands",
1885
- "investigations",
1886
- "run.js"
3059
+ "signals",
3060
+ "count.js"
1887
3061
  ]
1888
3062
  },
1889
- "investigations:runs-list": {
3063
+ "signals:get": {
1890
3064
  "aliases": [],
1891
3065
  "args": {
1892
3066
  "id": {
1893
- "description": "Investigation (taskflow) ID",
3067
+ "description": "Signal ID (UUID)",
1894
3068
  "name": "id",
1895
3069
  "required": true
1896
3070
  }
1897
3071
  },
1898
- "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.",
3072
+ "description": "Get detailed information about a specific signal by its ID.\n\nShows signal details including the triggering event, goal, status, and type (manual, \neventTrigger, schedule, slack). Use --trace to also fetch the event and event trigger \ninformation.",
1899
3073
  "examples": [
1900
- "<%= config.bin %> investigations runs-list <id>",
1901
- "<%= config.bin %> investigations runs-list <id> --limit 50",
1902
- "<%= config.bin %> investigations runs-list <id> --details --json"
3074
+ "<%= config.bin %> signals get <signal-id>",
3075
+ "<%= config.bin %> signals get <signal-id> --trace",
3076
+ "<%= config.bin %> signals get <signal-id> --json"
1903
3077
  ],
1904
3078
  "flags": {
1905
3079
  "json": {
@@ -1929,61 +3103,37 @@
1929
3103
  "allowNo": false,
1930
3104
  "type": "boolean"
1931
3105
  },
1932
- "details": {
1933
- "description": "Include detailed information about each run",
1934
- "name": "details",
3106
+ "trace": {
3107
+ "description": "Fetch and display the triggering event and event trigger information",
3108
+ "name": "trace",
1935
3109
  "allowNo": false,
1936
3110
  "type": "boolean"
1937
- },
1938
- "limit": {
1939
- "char": "l",
1940
- "description": "Maximum number of runs to return",
1941
- "name": "limit",
1942
- "default": 20,
1943
- "hasDynamicHelp": false,
1944
- "multiple": false,
1945
- "type": "option"
1946
- },
1947
- "offset": {
1948
- "char": "o",
1949
- "description": "Offset for pagination",
1950
- "name": "offset",
1951
- "default": 0,
1952
- "hasDynamicHelp": false,
1953
- "multiple": false,
1954
- "type": "option"
1955
3111
  }
1956
3112
  },
1957
3113
  "hasDynamicHelp": false,
1958
3114
  "hiddenAliases": [],
1959
- "id": "investigations:runs-list",
3115
+ "id": "signals:get",
1960
3116
  "pluginAlias": "@formant/formant-cli",
1961
3117
  "pluginName": "@formant/formant-cli",
1962
3118
  "pluginType": "core",
1963
3119
  "strict": true,
1964
- "summary": "List actual investigation runs",
3120
+ "summary": "Get a signal by ID",
1965
3121
  "enableJsonFlag": true,
1966
3122
  "isESM": true,
1967
3123
  "relativePath": [
1968
3124
  "dist",
1969
3125
  "commands",
1970
- "investigations",
1971
- "runs-list.js"
3126
+ "signals",
3127
+ "get.js"
1972
3128
  ]
1973
3129
  },
1974
- "investigations:runs": {
3130
+ "signals:list": {
1975
3131
  "aliases": [],
1976
- "args": {
1977
- "id": {
1978
- "description": "Investigation (taskflow) ID",
1979
- "name": "id",
1980
- "required": true
1981
- }
1982
- },
1983
- "description": "List evaluation runs for a specific investigation.",
3132
+ "args": {},
3133
+ "description": "List all signals in your organization.\n\nSignals are points of interest that trigger AI-powered investigations. They can be\ncreated manually, generated from device events, scheduled, or from Slack/Teams integrations.",
1984
3134
  "examples": [
1985
- "<%= config.bin %> investigations runs <id>",
1986
- "<%= config.bin %> investigations runs <id> --json"
3135
+ "<%= config.bin %> signals list",
3136
+ "<%= config.bin %> signals list --json"
1987
3137
  ],
1988
3138
  "flags": {
1989
3139
  "json": {
@@ -2016,28 +3166,29 @@
2016
3166
  },
2017
3167
  "hasDynamicHelp": false,
2018
3168
  "hiddenAliases": [],
2019
- "id": "investigations:runs",
3169
+ "id": "signals:list",
2020
3170
  "pluginAlias": "@formant/formant-cli",
2021
3171
  "pluginName": "@formant/formant-cli",
2022
3172
  "pluginType": "core",
2023
3173
  "strict": true,
2024
- "summary": "List runs for an investigation",
3174
+ "summary": "List all signals",
2025
3175
  "enableJsonFlag": true,
2026
3176
  "isESM": true,
2027
3177
  "relativePath": [
2028
3178
  "dist",
2029
3179
  "commands",
2030
- "investigations",
2031
- "runs.js"
3180
+ "signals",
3181
+ "list.js"
2032
3182
  ]
2033
3183
  },
2034
- "investigations:stats": {
3184
+ "signals:query": {
2035
3185
  "aliases": [],
2036
3186
  "args": {},
2037
- "description": "Get investigation statistics for a time range.",
3187
+ "description": "Query signals by time range and type.\n\nSignal types: manual, eventTrigger, schedule, slack.",
2038
3188
  "examples": [
2039
- "<%= config.bin %> investigations stats --start 2026-01-01 --end 2026-02-01",
2040
- "<%= config.bin %> investigations stats --start 2026-01-01 --end 2026-02-01 --json"
3189
+ "<%= config.bin %> signals query --start 2026-01-01",
3190
+ "<%= config.bin %> signals query --start 2026-01-01 --end 2026-02-01 --type eventTrigger",
3191
+ "<%= config.bin %> signals query --start 2026-01-01 --json"
2041
3192
  ],
2042
3193
  "flags": {
2043
3194
  "json": {
@@ -2070,7 +3221,6 @@
2070
3221
  "end": {
2071
3222
  "description": "End time (ISO 8601)",
2072
3223
  "name": "end",
2073
- "required": true,
2074
3224
  "hasDynamicHelp": false,
2075
3225
  "multiple": false,
2076
3226
  "type": "option"
@@ -2082,38 +3232,112 @@
2082
3232
  "hasDynamicHelp": false,
2083
3233
  "multiple": false,
2084
3234
  "type": "option"
3235
+ },
3236
+ "type": {
3237
+ "description": "Filter by signal type",
3238
+ "name": "type",
3239
+ "hasDynamicHelp": false,
3240
+ "multiple": false,
3241
+ "options": [
3242
+ "manual",
3243
+ "eventTrigger",
3244
+ "schedule",
3245
+ "slack"
3246
+ ],
3247
+ "type": "option"
2085
3248
  }
2086
3249
  },
2087
3250
  "hasDynamicHelp": false,
2088
3251
  "hiddenAliases": [],
2089
- "id": "investigations:stats",
3252
+ "id": "signals:query",
2090
3253
  "pluginAlias": "@formant/formant-cli",
2091
3254
  "pluginName": "@formant/formant-cli",
2092
3255
  "pluginType": "core",
2093
3256
  "strict": true,
2094
- "summary": "Get investigation stats",
3257
+ "summary": "Query signals by time range",
2095
3258
  "enableJsonFlag": true,
2096
3259
  "isESM": true,
2097
3260
  "relativePath": [
2098
3261
  "dist",
2099
3262
  "commands",
2100
- "investigations",
2101
- "stats.js"
3263
+ "signals",
3264
+ "query.js"
2102
3265
  ]
2103
3266
  },
2104
- "investigations:trigger": {
3267
+ "devices:config": {
2105
3268
  "aliases": [],
2106
3269
  "args": {
2107
3270
  "id": {
2108
- "description": "Investigation (taskflow) ID",
3271
+ "description": "Device ID (UUID)",
2109
3272
  "name": "id",
2110
3273
  "required": true
2111
3274
  }
2112
3275
  },
2113
- "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.",
3276
+ "description": "Get the device configuration including stream definitions.\n\nShows the device's current configuration including telemetry streams, commands,\nand other settings.",
2114
3277
  "examples": [
2115
- "<%= config.bin %> investigations trigger <id> --input \"Robot stopped responding\"",
2116
- "<%= config.bin %> investigations trigger <id> --input \"Battery draining fast on device X\" --json"
3278
+ "<%= config.bin %> devices config <device-id>",
3279
+ "<%= config.bin %> devices config <device-id> --json"
3280
+ ],
3281
+ "flags": {
3282
+ "json": {
3283
+ "description": "Format output as json.",
3284
+ "helpGroup": "GLOBAL",
3285
+ "name": "json",
3286
+ "allowNo": false,
3287
+ "type": "boolean"
3288
+ },
3289
+ "dev": {
3290
+ "description": "Target the dev environment",
3291
+ "exclusive": [
3292
+ "stage"
3293
+ ],
3294
+ "helpGroup": "GLOBAL",
3295
+ "name": "dev",
3296
+ "allowNo": false,
3297
+ "type": "boolean"
3298
+ },
3299
+ "stage": {
3300
+ "description": "Target the stage environment",
3301
+ "exclusive": [
3302
+ "dev"
3303
+ ],
3304
+ "helpGroup": "GLOBAL",
3305
+ "name": "stage",
3306
+ "allowNo": false,
3307
+ "type": "boolean"
3308
+ }
3309
+ },
3310
+ "hasDynamicHelp": false,
3311
+ "hiddenAliases": [],
3312
+ "id": "devices:config",
3313
+ "pluginAlias": "@formant/formant-cli",
3314
+ "pluginName": "@formant/formant-cli",
3315
+ "pluginType": "core",
3316
+ "strict": true,
3317
+ "summary": "Get device configuration",
3318
+ "enableJsonFlag": true,
3319
+ "isESM": true,
3320
+ "relativePath": [
3321
+ "dist",
3322
+ "commands",
3323
+ "devices",
3324
+ "config.js"
3325
+ ]
3326
+ },
3327
+ "devices:create": {
3328
+ "aliases": [],
3329
+ "args": {
3330
+ "name": {
3331
+ "description": "Name for the new device",
3332
+ "name": "name",
3333
+ "required": true
3334
+ }
3335
+ },
3336
+ "description": "Create a new device in your fleet.\n\nThe device is created as enabled by default. You can optionally specify tags.",
3337
+ "examples": [
3338
+ "<%= config.bin %> devices create my-robot",
3339
+ "<%= config.bin %> devices create my-robot --tag location=warehouse --tag env=prod",
3340
+ "<%= config.bin %> devices create my-robot --json"
2117
3341
  ],
2118
3342
  "flags": {
2119
3343
  "json": {
@@ -2143,53 +3367,45 @@
2143
3367
  "allowNo": false,
2144
3368
  "type": "boolean"
2145
3369
  },
2146
- "input": {
2147
- "char": "i",
2148
- "description": "Input text / problem description for the investigation",
2149
- "name": "input",
2150
- "required": true,
2151
- "hasDynamicHelp": false,
2152
- "multiple": false,
2153
- "type": "option"
2154
- },
2155
- "signal-id": {
2156
- "description": "Optional signal ID to associate with this run",
2157
- "name": "signal-id",
3370
+ "tag": {
3371
+ "char": "t",
3372
+ "description": "Tag to apply (key=value), can be specified multiple times",
3373
+ "name": "tag",
2158
3374
  "hasDynamicHelp": false,
2159
- "multiple": false,
3375
+ "multiple": true,
2160
3376
  "type": "option"
2161
3377
  }
2162
3378
  },
2163
3379
  "hasDynamicHelp": false,
2164
3380
  "hiddenAliases": [],
2165
- "id": "investigations:trigger",
3381
+ "id": "devices:create",
2166
3382
  "pluginAlias": "@formant/formant-cli",
2167
3383
  "pluginName": "@formant/formant-cli",
2168
3384
  "pluginType": "core",
2169
3385
  "strict": true,
2170
- "summary": "Trigger an investigation",
3386
+ "summary": "Create a new device",
2171
3387
  "enableJsonFlag": true,
2172
3388
  "isESM": true,
2173
3389
  "relativePath": [
2174
3390
  "dist",
2175
3391
  "commands",
2176
- "investigations",
2177
- "trigger.js"
3392
+ "devices",
3393
+ "create.js"
2178
3394
  ]
2179
3395
  },
2180
- "schedules:get": {
3396
+ "devices:delete": {
2181
3397
  "aliases": [],
2182
3398
  "args": {
2183
3399
  "id": {
2184
- "description": "Schedule ID (UUID)",
3400
+ "description": "Device ID (UUID)",
2185
3401
  "name": "id",
2186
3402
  "required": true
2187
3403
  }
2188
3404
  },
2189
- "description": "Get detailed information about a schedule.\n\nShows the full schedule configuration including cron expression, command template,\ninvestigation link, and execution settings.",
3405
+ "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.",
2190
3406
  "examples": [
2191
- "<%= config.bin %> schedules get <schedule-id>",
2192
- "<%= config.bin %> schedules get <schedule-id> --json"
3407
+ "<%= config.bin %> devices delete <device-id>",
3408
+ "<%= config.bin %> devices delete <device-id> --json"
2193
3409
  ],
2194
3410
  "flags": {
2195
3411
  "json": {
@@ -2222,28 +3438,34 @@
2222
3438
  },
2223
3439
  "hasDynamicHelp": false,
2224
3440
  "hiddenAliases": [],
2225
- "id": "schedules:get",
3441
+ "id": "devices:delete",
2226
3442
  "pluginAlias": "@formant/formant-cli",
2227
3443
  "pluginName": "@formant/formant-cli",
2228
3444
  "pluginType": "core",
2229
3445
  "strict": true,
2230
- "summary": "Get schedule details",
3446
+ "summary": "Delete (disable) a device",
2231
3447
  "enableJsonFlag": true,
2232
3448
  "isESM": true,
2233
3449
  "relativePath": [
2234
3450
  "dist",
2235
3451
  "commands",
2236
- "schedules",
2237
- "get.js"
3452
+ "devices",
3453
+ "delete.js"
2238
3454
  ]
2239
3455
  },
2240
- "schedules:list": {
3456
+ "devices:get": {
2241
3457
  "aliases": [],
2242
- "args": {},
2243
- "description": "List all schedules in your organization.\n\nSchedules can trigger commands or investigations on a recurring (cron) or one-time basis.",
3458
+ "args": {
3459
+ "id": {
3460
+ "description": "Device ID (UUID)",
3461
+ "name": "id",
3462
+ "required": true
3463
+ }
3464
+ },
3465
+ "description": "Get detailed information about a specific device by its ID.",
2244
3466
  "examples": [
2245
- "<%= config.bin %> schedules list",
2246
- "<%= config.bin %> schedules list --json"
3467
+ "<%= config.bin %> devices get <device-id>",
3468
+ "<%= config.bin %> devices get <device-id> --json"
2247
3469
  ],
2248
3470
  "flags": {
2249
3471
  "json": {
@@ -2276,34 +3498,34 @@
2276
3498
  },
2277
3499
  "hasDynamicHelp": false,
2278
3500
  "hiddenAliases": [],
2279
- "id": "schedules:list",
3501
+ "id": "devices:get",
2280
3502
  "pluginAlias": "@formant/formant-cli",
2281
3503
  "pluginName": "@formant/formant-cli",
2282
3504
  "pluginType": "core",
2283
3505
  "strict": true,
2284
- "summary": "List schedules",
3506
+ "summary": "Get a device by ID",
2285
3507
  "enableJsonFlag": true,
2286
3508
  "isESM": true,
2287
3509
  "relativePath": [
2288
3510
  "dist",
2289
3511
  "commands",
2290
- "schedules",
2291
- "list.js"
3512
+ "devices",
3513
+ "get.js"
2292
3514
  ]
2293
3515
  },
2294
- "users:get": {
3516
+ "devices:last-seen": {
2295
3517
  "aliases": [],
2296
3518
  "args": {
2297
3519
  "id": {
2298
- "description": "User ID (UUID)",
3520
+ "description": "Device ID (UUID)",
2299
3521
  "name": "id",
2300
3522
  "required": true
2301
3523
  }
2302
3524
  },
2303
- "description": "Get detailed information about a user.\n\nShows user details including email, name, roles, and account settings.",
3525
+ "description": "Get when a device was last seen online.\n\nShows the most recent timestamp when the device was detected as online.",
2304
3526
  "examples": [
2305
- "<%= config.bin %> users get <user-id>",
2306
- "<%= config.bin %> users get <user-id> --json"
3527
+ "<%= config.bin %> devices last-seen <device-id>",
3528
+ "<%= config.bin %> devices last-seen <device-id> --json"
2307
3529
  ],
2308
3530
  "flags": {
2309
3531
  "json": {
@@ -2336,28 +3558,31 @@
2336
3558
  },
2337
3559
  "hasDynamicHelp": false,
2338
3560
  "hiddenAliases": [],
2339
- "id": "users:get",
3561
+ "id": "devices:last-seen",
2340
3562
  "pluginAlias": "@formant/formant-cli",
2341
3563
  "pluginName": "@formant/formant-cli",
2342
3564
  "pluginType": "core",
2343
3565
  "strict": true,
2344
- "summary": "Get user details",
3566
+ "summary": "Get device last seen timestamp",
2345
3567
  "enableJsonFlag": true,
2346
3568
  "isESM": true,
2347
3569
  "relativePath": [
2348
3570
  "dist",
2349
3571
  "commands",
2350
- "users",
2351
- "get.js"
3572
+ "devices",
3573
+ "last-seen.js"
2352
3574
  ]
2353
3575
  },
2354
- "users:list": {
3576
+ "devices:list": {
2355
3577
  "aliases": [],
2356
3578
  "args": {},
2357
- "description": "List all users in your organization.\n\nShows user accounts, their email addresses, and account status.",
3579
+ "description": "List robots and sensors in your fleet. Shows only online devices by default.\n\nUse --all to include offline devices.",
2358
3580
  "examples": [
2359
- "<%= config.bin %> users list",
2360
- "<%= config.bin %> users list --json"
3581
+ "<%= config.bin %> devices list",
3582
+ "<%= config.bin %> devices list --all",
3583
+ "<%= config.bin %> devices list --all --limit 100",
3584
+ "<%= config.bin %> devices list --tag location=warehouse",
3585
+ "<%= config.bin %> devices list --name robot --dev --json"
2361
3586
  ],
2362
3587
  "flags": {
2363
3588
  "json": {
@@ -2386,33 +3611,75 @@
2386
3611
  "name": "stage",
2387
3612
  "allowNo": false,
2388
3613
  "type": "boolean"
3614
+ },
3615
+ "all": {
3616
+ "char": "a",
3617
+ "description": "Show all devices (online and offline)",
3618
+ "name": "all",
3619
+ "allowNo": false,
3620
+ "type": "boolean"
3621
+ },
3622
+ "limit": {
3623
+ "char": "l",
3624
+ "description": "Maximum number of devices to return",
3625
+ "name": "limit",
3626
+ "default": 50,
3627
+ "hasDynamicHelp": false,
3628
+ "multiple": false,
3629
+ "type": "option"
3630
+ },
3631
+ "name": {
3632
+ "char": "n",
3633
+ "description": "Filter devices by name (search)",
3634
+ "name": "name",
3635
+ "hasDynamicHelp": false,
3636
+ "multiple": false,
3637
+ "type": "option"
3638
+ },
3639
+ "tag": {
3640
+ "char": "t",
3641
+ "description": "Filter by tag (key=value), can be specified multiple times",
3642
+ "name": "tag",
3643
+ "hasDynamicHelp": false,
3644
+ "multiple": true,
3645
+ "type": "option"
2389
3646
  }
2390
3647
  },
2391
3648
  "hasDynamicHelp": false,
2392
3649
  "hiddenAliases": [],
2393
- "id": "users:list",
3650
+ "id": "devices:list",
2394
3651
  "pluginAlias": "@formant/formant-cli",
2395
3652
  "pluginName": "@formant/formant-cli",
2396
3653
  "pluginType": "core",
2397
3654
  "strict": true,
2398
- "summary": "List users",
3655
+ "summary": "List robots and sensors in your fleet",
2399
3656
  "enableJsonFlag": true,
2400
3657
  "isESM": true,
2401
3658
  "relativePath": [
2402
3659
  "dist",
2403
3660
  "commands",
2404
- "users",
3661
+ "devices",
2405
3662
  "list.js"
2406
3663
  ]
2407
3664
  },
2408
- "signals:count": {
3665
+ "devices:rename": {
2409
3666
  "aliases": [],
2410
- "args": {},
2411
- "description": "Get counts of signals grouped by type.\n\nReturns total counts and per-type breakdowns (manual, eventTrigger, schedule, slack).",
3667
+ "args": {
3668
+ "id": {
3669
+ "description": "Device ID (UUID)",
3670
+ "name": "id",
3671
+ "required": true
3672
+ },
3673
+ "name": {
3674
+ "description": "New name for the device",
3675
+ "name": "name",
3676
+ "required": true
3677
+ }
3678
+ },
3679
+ "description": "Rename a device by updating its name.",
2412
3680
  "examples": [
2413
- "<%= config.bin %> signals count",
2414
- "<%= config.bin %> signals count --start 2026-01-01 --end 2026-02-01",
2415
- "<%= config.bin %> signals count --json"
3681
+ "<%= config.bin %> devices rename <device-id> new-robot-name",
3682
+ "<%= config.bin %> devices rename <device-id> new-robot-name --json"
2416
3683
  ],
2417
3684
  "flags": {
2418
3685
  "json": {
@@ -2441,53 +3708,38 @@
2441
3708
  "name": "stage",
2442
3709
  "allowNo": false,
2443
3710
  "type": "boolean"
2444
- },
2445
- "end": {
2446
- "description": "End time (ISO 8601)",
2447
- "name": "end",
2448
- "hasDynamicHelp": false,
2449
- "multiple": false,
2450
- "type": "option"
2451
- },
2452
- "start": {
2453
- "description": "Start time (ISO 8601)",
2454
- "name": "start",
2455
- "hasDynamicHelp": false,
2456
- "multiple": false,
2457
- "type": "option"
2458
3711
  }
2459
3712
  },
2460
3713
  "hasDynamicHelp": false,
2461
3714
  "hiddenAliases": [],
2462
- "id": "signals:count",
3715
+ "id": "devices:rename",
2463
3716
  "pluginAlias": "@formant/formant-cli",
2464
3717
  "pluginName": "@formant/formant-cli",
2465
3718
  "pluginType": "core",
2466
3719
  "strict": true,
2467
- "summary": "Get signal counts by type",
3720
+ "summary": "Rename a device",
2468
3721
  "enableJsonFlag": true,
2469
3722
  "isESM": true,
2470
3723
  "relativePath": [
2471
3724
  "dist",
2472
3725
  "commands",
2473
- "signals",
2474
- "count.js"
3726
+ "devices",
3727
+ "rename.js"
2475
3728
  ]
2476
3729
  },
2477
- "signals:get": {
3730
+ "devices:streams": {
2478
3731
  "aliases": [],
2479
3732
  "args": {
2480
3733
  "id": {
2481
- "description": "Signal ID (UUID)",
3734
+ "description": "Device ID (UUID)",
2482
3735
  "name": "id",
2483
3736
  "required": true
2484
3737
  }
2485
3738
  },
2486
- "description": "Get detailed information about a specific signal by its ID.\n\nShows signal details including the triggering event, goal, status, and type (manual, \neventTrigger, schedule, slack). Use --trace to also fetch the event and event trigger \ninformation.",
3739
+ "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.",
2487
3740
  "examples": [
2488
- "<%= config.bin %> signals get <signal-id>",
2489
- "<%= config.bin %> signals get <signal-id> --trace",
2490
- "<%= config.bin %> signals get <signal-id> --json"
3741
+ "<%= config.bin %> devices streams <device-id>",
3742
+ "<%= config.bin %> devices streams <device-id> --json"
2491
3743
  ],
2492
3744
  "flags": {
2493
3745
  "json": {
@@ -2516,38 +3768,39 @@
2516
3768
  "name": "stage",
2517
3769
  "allowNo": false,
2518
3770
  "type": "boolean"
2519
- },
2520
- "trace": {
2521
- "description": "Fetch and display the triggering event and event trigger information",
2522
- "name": "trace",
2523
- "allowNo": false,
2524
- "type": "boolean"
2525
3771
  }
2526
3772
  },
2527
3773
  "hasDynamicHelp": false,
2528
3774
  "hiddenAliases": [],
2529
- "id": "signals:get",
3775
+ "id": "devices:streams",
2530
3776
  "pluginAlias": "@formant/formant-cli",
2531
3777
  "pluginName": "@formant/formant-cli",
2532
3778
  "pluginType": "core",
2533
3779
  "strict": true,
2534
- "summary": "Get a signal by ID",
3780
+ "summary": "List device streams",
2535
3781
  "enableJsonFlag": true,
2536
3782
  "isESM": true,
2537
3783
  "relativePath": [
2538
3784
  "dist",
2539
3785
  "commands",
2540
- "signals",
2541
- "get.js"
3786
+ "devices",
3787
+ "streams.js"
2542
3788
  ]
2543
3789
  },
2544
- "signals:list": {
3790
+ "devices:tag": {
2545
3791
  "aliases": [],
2546
- "args": {},
2547
- "description": "List all signals in your organization.\n\nSignals are points of interest that trigger AI-powered investigations. They can be\ncreated manually, generated from device events, scheduled, or from Slack/Teams integrations.",
3792
+ "args": {
3793
+ "id": {
3794
+ "description": "Device ID (UUID)",
3795
+ "name": "id",
3796
+ "required": true
3797
+ }
3798
+ },
3799
+ "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.",
2548
3800
  "examples": [
2549
- "<%= config.bin %> signals list",
2550
- "<%= config.bin %> signals list --json"
3801
+ "<%= config.bin %> devices tag <device-id> --tag location=warehouse",
3802
+ "<%= config.bin %> devices tag <device-id> --tag env=prod --tag region=us-east",
3803
+ "<%= config.bin %> devices tag <device-id> --tag location=factory --json"
2551
3804
  ],
2552
3805
  "flags": {
2553
3806
  "json": {
@@ -2576,33 +3829,48 @@
2576
3829
  "name": "stage",
2577
3830
  "allowNo": false,
2578
3831
  "type": "boolean"
3832
+ },
3833
+ "tag": {
3834
+ "char": "t",
3835
+ "description": "Tag to add or update (key=value), can be specified multiple times",
3836
+ "name": "tag",
3837
+ "required": true,
3838
+ "hasDynamicHelp": false,
3839
+ "multiple": true,
3840
+ "type": "option"
2579
3841
  }
2580
3842
  },
2581
3843
  "hasDynamicHelp": false,
2582
3844
  "hiddenAliases": [],
2583
- "id": "signals:list",
3845
+ "id": "devices:tag",
2584
3846
  "pluginAlias": "@formant/formant-cli",
2585
3847
  "pluginName": "@formant/formant-cli",
2586
3848
  "pluginType": "core",
2587
3849
  "strict": true,
2588
- "summary": "List all signals",
3850
+ "summary": "Add or update tags on a device",
2589
3851
  "enableJsonFlag": true,
2590
3852
  "isESM": true,
2591
3853
  "relativePath": [
2592
3854
  "dist",
2593
3855
  "commands",
2594
- "signals",
2595
- "list.js"
3856
+ "devices",
3857
+ "tag.js"
2596
3858
  ]
2597
3859
  },
2598
- "signals:query": {
3860
+ "devices:untag": {
2599
3861
  "aliases": [],
2600
- "args": {},
2601
- "description": "Query signals by time range and type.\n\nSignal types: manual, eventTrigger, schedule, slack.",
3862
+ "args": {
3863
+ "id": {
3864
+ "description": "Device ID (UUID)",
3865
+ "name": "id",
3866
+ "required": true
3867
+ }
3868
+ },
3869
+ "description": "Remove tags from a device.\n\nSpecify one or more tag keys to remove with --key.",
2602
3870
  "examples": [
2603
- "<%= config.bin %> signals query --start 2026-01-01",
2604
- "<%= config.bin %> signals query --start 2026-01-01 --end 2026-02-01 --type eventTrigger",
2605
- "<%= config.bin %> signals query --start 2026-01-01 --json"
3871
+ "<%= config.bin %> devices untag <device-id> --key location",
3872
+ "<%= config.bin %> devices untag <device-id> --key env --key region",
3873
+ "<%= config.bin %> devices untag <device-id> --key location --json"
2606
3874
  ],
2607
3875
  "flags": {
2608
3876
  "json": {
@@ -2632,52 +3900,33 @@
2632
3900
  "allowNo": false,
2633
3901
  "type": "boolean"
2634
3902
  },
2635
- "end": {
2636
- "description": "End time (ISO 8601)",
2637
- "name": "end",
2638
- "hasDynamicHelp": false,
2639
- "multiple": false,
2640
- "type": "option"
2641
- },
2642
- "start": {
2643
- "description": "Start time (ISO 8601)",
2644
- "name": "start",
3903
+ "key": {
3904
+ "char": "k",
3905
+ "description": "Tag key to remove, can be specified multiple times",
3906
+ "name": "key",
2645
3907
  "required": true,
2646
3908
  "hasDynamicHelp": false,
2647
- "multiple": false,
2648
- "type": "option"
2649
- },
2650
- "type": {
2651
- "description": "Filter by signal type",
2652
- "name": "type",
2653
- "hasDynamicHelp": false,
2654
- "multiple": false,
2655
- "options": [
2656
- "manual",
2657
- "eventTrigger",
2658
- "schedule",
2659
- "slack"
2660
- ],
3909
+ "multiple": true,
2661
3910
  "type": "option"
2662
3911
  }
2663
3912
  },
2664
3913
  "hasDynamicHelp": false,
2665
3914
  "hiddenAliases": [],
2666
- "id": "signals:query",
3915
+ "id": "devices:untag",
2667
3916
  "pluginAlias": "@formant/formant-cli",
2668
3917
  "pluginName": "@formant/formant-cli",
2669
3918
  "pluginType": "core",
2670
3919
  "strict": true,
2671
- "summary": "Query signals by time range",
3920
+ "summary": "Remove tags from a device",
2672
3921
  "enableJsonFlag": true,
2673
3922
  "isESM": true,
2674
3923
  "relativePath": [
2675
3924
  "dist",
2676
3925
  "commands",
2677
- "signals",
2678
- "query.js"
3926
+ "devices",
3927
+ "untag.js"
2679
3928
  ]
2680
3929
  }
2681
3930
  },
2682
- "version": "0.1.0"
3931
+ "version": "0.3.0"
2683
3932
  }