@formant/formant-cli 0.4.2 → 0.4.3

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.
@@ -140,173 +140,6 @@
140
140
  "tables.js"
141
141
  ]
142
142
  },
143
- "event:get": {
144
- "aliases": [],
145
- "args": {
146
- "id": {
147
- "description": "Event ID (UUID)",
148
- "name": "id",
149
- "required": true
150
- }
151
- },
152
- "description": "Get detailed information about a specific event by its ID.",
153
- "examples": [
154
- "<%= config.bin %> event get <event-id>",
155
- "<%= config.bin %> event get <event-id> --json"
156
- ],
157
- "flags": {
158
- "json": {
159
- "description": "Format output as json.",
160
- "helpGroup": "GLOBAL",
161
- "name": "json",
162
- "allowNo": false,
163
- "type": "boolean"
164
- },
165
- "dev": {
166
- "description": "Target the dev environment",
167
- "exclusive": [
168
- "stage"
169
- ],
170
- "helpGroup": "GLOBAL",
171
- "name": "dev",
172
- "allowNo": false,
173
- "type": "boolean"
174
- },
175
- "stage": {
176
- "description": "Target the stage environment",
177
- "exclusive": [
178
- "dev"
179
- ],
180
- "helpGroup": "GLOBAL",
181
- "name": "stage",
182
- "allowNo": false,
183
- "type": "boolean"
184
- }
185
- },
186
- "hasDynamicHelp": false,
187
- "hiddenAliases": [],
188
- "id": "event:get",
189
- "pluginAlias": "@formant/formant-cli",
190
- "pluginName": "@formant/formant-cli",
191
- "pluginType": "core",
192
- "strict": true,
193
- "summary": "Get an event by ID",
194
- "enableJsonFlag": true,
195
- "isESM": true,
196
- "relativePath": [
197
- "dist",
198
- "commands",
199
- "event",
200
- "get.js"
201
- ]
202
- },
203
- "event:list": {
204
- "aliases": [],
205
- "args": {},
206
- "description": "View important events emitted by devices with optional filters.\n\nEvents are significant occurrences from robots and sensors (e.g., device online/offline,\nerrors, state changes, commands). They can trigger signals for investigation.\n\nEvent types include: triggered-event, datapoint-event, device-online, device-offline,\nintervention-request, intervention-response, teleop-session-record, command-request,\ncommand-response, custom, comment, system, annotation, task-summary, stateful.\n\nSeverities: info, warning, error, critical.",
207
- "examples": [
208
- "<%= config.bin %> event list",
209
- "<%= config.bin %> event list --device <id> --severity critical",
210
- "<%= config.bin %> event list --type device-offline --start 2026-01-01 --end 2026-01-02",
211
- "<%= config.bin %> event list --limit 100 --json"
212
- ],
213
- "flags": {
214
- "json": {
215
- "description": "Format output as json.",
216
- "helpGroup": "GLOBAL",
217
- "name": "json",
218
- "allowNo": false,
219
- "type": "boolean"
220
- },
221
- "dev": {
222
- "description": "Target the dev environment",
223
- "exclusive": [
224
- "stage"
225
- ],
226
- "helpGroup": "GLOBAL",
227
- "name": "dev",
228
- "allowNo": false,
229
- "type": "boolean"
230
- },
231
- "stage": {
232
- "description": "Target the stage environment",
233
- "exclusive": [
234
- "dev"
235
- ],
236
- "helpGroup": "GLOBAL",
237
- "name": "stage",
238
- "allowNo": false,
239
- "type": "boolean"
240
- },
241
- "device": {
242
- "char": "d",
243
- "description": "Filter by device ID",
244
- "name": "device",
245
- "hasDynamicHelp": false,
246
- "multiple": false,
247
- "type": "option"
248
- },
249
- "end": {
250
- "description": "End time (ISO 8601)",
251
- "name": "end",
252
- "hasDynamicHelp": false,
253
- "multiple": false,
254
- "type": "option"
255
- },
256
- "limit": {
257
- "char": "l",
258
- "description": "Maximum number of events to return",
259
- "name": "limit",
260
- "default": 25,
261
- "hasDynamicHelp": false,
262
- "multiple": false,
263
- "type": "option"
264
- },
265
- "severity": {
266
- "description": "Filter by severity",
267
- "name": "severity",
268
- "hasDynamicHelp": false,
269
- "multiple": false,
270
- "options": [
271
- "info",
272
- "warning",
273
- "error",
274
- "critical"
275
- ],
276
- "type": "option"
277
- },
278
- "start": {
279
- "description": "Start time (ISO 8601)",
280
- "name": "start",
281
- "hasDynamicHelp": false,
282
- "multiple": false,
283
- "type": "option"
284
- },
285
- "type": {
286
- "description": "Filter by event type",
287
- "name": "type",
288
- "hasDynamicHelp": false,
289
- "multiple": false,
290
- "type": "option"
291
- }
292
- },
293
- "hasDynamicHelp": false,
294
- "hiddenAliases": [],
295
- "id": "event:list",
296
- "pluginAlias": "@formant/formant-cli",
297
- "pluginName": "@formant/formant-cli",
298
- "pluginType": "core",
299
- "strict": true,
300
- "summary": "View events emitted by devices",
301
- "enableJsonFlag": true,
302
- "isESM": true,
303
- "relativePath": [
304
- "dist",
305
- "commands",
306
- "event",
307
- "list.js"
308
- ]
309
- },
310
143
  "event-trigger:get": {
311
144
  "aliases": [],
312
145
  "args": {
@@ -871,19 +704,19 @@
871
704
  "send.js"
872
705
  ]
873
706
  },
874
- "kv:get": {
707
+ "device:config": {
875
708
  "aliases": [],
876
709
  "args": {
877
- "key": {
878
- "description": "Key to retrieve",
879
- "name": "key",
710
+ "id": {
711
+ "description": "Device ID (UUID)",
712
+ "name": "id",
880
713
  "required": true
881
714
  }
882
715
  },
883
- "description": "Get a value from the key-value store.\n\nThe key-value store allows devices and applications to store metadata.",
716
+ "description": "Get the device configuration including stream definitions.\n\nShows the device's current configuration including telemetry streams, commands,\nand other settings.",
884
717
  "examples": [
885
- "<%= config.bin %> kv get my-key",
886
- "<%= config.bin %> kv get my-key --json"
718
+ "<%= config.bin %> device config <device-id>",
719
+ "<%= config.bin %> device config <device-id> --json"
887
720
  ],
888
721
  "flags": {
889
722
  "json": {
@@ -916,30 +749,35 @@
916
749
  },
917
750
  "hasDynamicHelp": false,
918
751
  "hiddenAliases": [],
919
- "id": "kv:get",
752
+ "id": "device:config",
920
753
  "pluginAlias": "@formant/formant-cli",
921
754
  "pluginName": "@formant/formant-cli",
922
755
  "pluginType": "core",
923
756
  "strict": true,
924
- "summary": "Get key-value",
757
+ "summary": "Get device configuration",
925
758
  "enableJsonFlag": true,
926
759
  "isESM": true,
927
760
  "relativePath": [
928
761
  "dist",
929
762
  "commands",
930
- "kv",
931
- "get.js"
763
+ "device",
764
+ "config.js"
932
765
  ]
933
766
  },
934
- "kv:list": {
767
+ "device:create": {
935
768
  "aliases": [],
936
- "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.",
769
+ "args": {
770
+ "name": {
771
+ "description": "Name for the new device",
772
+ "name": "name",
773
+ "required": true
774
+ }
775
+ },
776
+ "description": "Create a new device in your fleet.\n\nThe device is created as enabled by default. You can optionally specify tags.",
938
777
  "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"
778
+ "<%= config.bin %> device create my-robot",
779
+ "<%= config.bin %> device create my-robot --tag location=warehouse --tag env=prod",
780
+ "<%= config.bin %> device create my-robot --json"
943
781
  ],
944
782
  "flags": {
945
783
  "json": {
@@ -969,58 +807,45 @@
969
807
  "allowNo": false,
970
808
  "type": "boolean"
971
809
  },
972
- "keys": {
973
- "char": "k",
974
- "description": "Specific keys to query (can be specified multiple times)",
975
- "name": "keys",
810
+ "tag": {
811
+ "char": "t",
812
+ "description": "Tag to apply (key=value), can be specified multiple times",
813
+ "name": "tag",
976
814
  "hasDynamicHelp": false,
977
815
  "multiple": true,
978
816
  "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
817
  }
988
818
  },
989
819
  "hasDynamicHelp": false,
990
820
  "hiddenAliases": [],
991
- "id": "kv:list",
821
+ "id": "device:create",
992
822
  "pluginAlias": "@formant/formant-cli",
993
823
  "pluginName": "@formant/formant-cli",
994
824
  "pluginType": "core",
995
825
  "strict": true,
996
- "summary": "List key-value keys",
826
+ "summary": "Create a new device",
997
827
  "enableJsonFlag": true,
998
828
  "isESM": true,
999
829
  "relativePath": [
1000
830
  "dist",
1001
831
  "commands",
1002
- "kv",
1003
- "list.js"
832
+ "device",
833
+ "create.js"
1004
834
  ]
1005
835
  },
1006
- "kv:set": {
836
+ "device:delete": {
1007
837
  "aliases": [],
1008
838
  "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",
839
+ "id": {
840
+ "description": "Device ID (UUID)",
841
+ "name": "id",
1017
842
  "required": true
1018
843
  }
1019
844
  },
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.",
845
+ "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.",
1021
846
  "examples": [
1022
- "<%= config.bin %> kv set my-key '{\"data\": \"value\"}'",
1023
- "<%= config.bin %> kv set config '{\"setting\": true}'"
847
+ "<%= config.bin %> device delete <device-id>",
848
+ "<%= config.bin %> device delete <device-id> --json"
1024
849
  ],
1025
850
  "flags": {
1026
851
  "json": {
@@ -1053,30 +878,34 @@
1053
878
  },
1054
879
  "hasDynamicHelp": false,
1055
880
  "hiddenAliases": [],
1056
- "id": "kv:set",
881
+ "id": "device:delete",
1057
882
  "pluginAlias": "@formant/formant-cli",
1058
883
  "pluginName": "@formant/formant-cli",
1059
884
  "pluginType": "core",
1060
885
  "strict": true,
1061
- "summary": "Set key-value",
886
+ "summary": "Delete (disable) a device",
1062
887
  "enableJsonFlag": true,
1063
888
  "isESM": true,
1064
889
  "relativePath": [
1065
890
  "dist",
1066
891
  "commands",
1067
- "kv",
1068
- "set.js"
892
+ "device",
893
+ "delete.js"
1069
894
  ]
1070
895
  },
1071
- "ingest:batch": {
896
+ "device:get": {
1072
897
  "aliases": [],
1073
- "args": {},
1074
- "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).",
898
+ "args": {
899
+ "id": {
900
+ "description": "Device ID (UUID)",
901
+ "name": "id",
902
+ "required": true
903
+ }
904
+ },
905
+ "description": "Get detailed information about a specific device by its ID.",
1075
906
  "examples": [
1076
- "<%= config.bin %> ingest batch --file data.json",
1077
- "<%= config.bin %> ingest batch --stdin < data.json",
1078
- "cat payload.json | <%= config.bin %> ingest batch --stdin",
1079
- "# 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}"
907
+ "<%= config.bin %> device get <device-id>",
908
+ "<%= config.bin %> device get <device-id> --json"
1080
909
  ],
1081
910
  "flags": {
1082
911
  "json": {
@@ -1105,53 +934,37 @@
1105
934
  "name": "stage",
1106
935
  "allowNo": false,
1107
936
  "type": "boolean"
1108
- },
1109
- "file": {
1110
- "char": "f",
1111
- "description": "Path to JSON file containing batch payload",
1112
- "exclusive": [
1113
- "stdin"
1114
- ],
1115
- "name": "file",
1116
- "hasDynamicHelp": false,
1117
- "multiple": false,
1118
- "type": "option"
1119
- },
1120
- "stdin": {
1121
- "description": "Read JSON payload from stdin",
1122
- "exclusive": [
1123
- "file"
1124
- ],
1125
- "name": "stdin",
1126
- "allowNo": false,
1127
- "type": "boolean"
1128
937
  }
1129
938
  },
1130
939
  "hasDynamicHelp": false,
1131
940
  "hiddenAliases": [],
1132
- "id": "ingest:batch",
941
+ "id": "device:get",
1133
942
  "pluginAlias": "@formant/formant-cli",
1134
943
  "pluginName": "@formant/formant-cli",
1135
944
  "pluginType": "core",
1136
945
  "strict": true,
1137
- "summary": "Ingest batch data from file or stdin",
946
+ "summary": "Get a device by ID",
1138
947
  "enableJsonFlag": true,
1139
948
  "isESM": true,
1140
949
  "relativePath": [
1141
950
  "dist",
1142
951
  "commands",
1143
- "ingest",
1144
- "batch.js"
952
+ "device",
953
+ "get.js"
1145
954
  ]
1146
955
  },
1147
- "ingest:bitset": {
956
+ "device:list": {
1148
957
  "aliases": [],
1149
958
  "args": {},
1150
- "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",
959
+ "description": "List robots and sensors in your fleet. Shows only online devices by default.\n\nUse --include-offline to include offline devices. Use --with-data to show only\ndevices that have ingested data. Each device is enriched with data-based last\nseen timestamp and datapoint count from analytics.",
1151
960
  "examples": [
1152
- "<%= config.bin %> ingest bitset --device <device-id> --stream sensors --keys \"door,window,motion\" --values \"true,false,true\"",
1153
- "<%= config.bin %> ingest bitset --device <device-id> --stream flags --keys \"active,paused,error\" --values \"true,false,false\" --tag system=main",
1154
- "<%= config.bin %> ingest bitset --device <device-id> --stream states --keys \"a,b\" --values \"false,true\""
961
+ "<%= config.bin %> device list",
962
+ "<%= config.bin %> device list --include-offline",
963
+ "<%= config.bin %> device list --with-data",
964
+ "<%= config.bin %> device list --with-data --days 90",
965
+ "<%= config.bin %> device list --include-offline --limit 100",
966
+ "<%= config.bin %> device list --tag location=warehouse",
967
+ "<%= config.bin %> device list --name robot --dev --json"
1155
968
  ],
1156
969
  "flags": {
1157
970
  "json": {
@@ -1181,83 +994,89 @@
1181
994
  "allowNo": false,
1182
995
  "type": "boolean"
1183
996
  },
1184
- "device": {
1185
- "char": "d",
1186
- "description": "Device ID (UUID)",
1187
- "name": "device",
1188
- "required": true,
1189
- "hasDynamicHelp": false,
1190
- "multiple": false,
1191
- "type": "option"
997
+ "include-offline": {
998
+ "char": "a",
999
+ "description": "Include offline devices",
1000
+ "name": "include-offline",
1001
+ "allowNo": false,
1002
+ "type": "boolean"
1192
1003
  },
1193
- "stream": {
1194
- "char": "s",
1195
- "description": "Stream name",
1196
- "name": "stream",
1197
- "required": true,
1004
+ "days": {
1005
+ "description": "How many days back to search for last seen data",
1006
+ "name": "days",
1007
+ "default": 30,
1198
1008
  "hasDynamicHelp": false,
1199
1009
  "multiple": false,
1200
1010
  "type": "option"
1201
1011
  },
1202
- "keys": {
1203
- "char": "k",
1204
- "description": "Comma-separated list of key names (1-1000 keys, max 255 chars each)",
1205
- "name": "keys",
1206
- "required": true,
1012
+ "limit": {
1013
+ "char": "l",
1014
+ "description": "Maximum number of devices to return",
1015
+ "name": "limit",
1016
+ "default": 50,
1207
1017
  "hasDynamicHelp": false,
1208
1018
  "multiple": false,
1209
1019
  "type": "option"
1210
1020
  },
1211
- "values": {
1212
- "char": "v",
1213
- "description": "Comma-separated list of boolean values (true/false, must match key count)",
1214
- "name": "values",
1215
- "required": true,
1021
+ "name": {
1022
+ "char": "n",
1023
+ "description": "Filter devices by name (search)",
1024
+ "name": "name",
1216
1025
  "hasDynamicHelp": false,
1217
1026
  "multiple": false,
1218
1027
  "type": "option"
1219
1028
  },
1029
+ "with-data": {
1030
+ "char": "w",
1031
+ "description": "Only show devices that have data in the last --days window",
1032
+ "name": "with-data",
1033
+ "allowNo": false,
1034
+ "type": "boolean"
1035
+ },
1220
1036
  "tag": {
1221
1037
  "char": "t",
1222
- "description": "Tag as key=value where both are strings (can be specified multiple times)",
1038
+ "description": "Filter by tag (key=value), can be specified multiple times",
1223
1039
  "name": "tag",
1224
1040
  "hasDynamicHelp": false,
1225
1041
  "multiple": true,
1226
1042
  "type": "option"
1227
- },
1228
- "timestamp": {
1229
- "description": "Unix timestamp in milliseconds (defaults to now)",
1230
- "name": "timestamp",
1231
- "hasDynamicHelp": false,
1232
- "multiple": false,
1233
- "type": "option"
1234
1043
  }
1235
1044
  },
1236
1045
  "hasDynamicHelp": false,
1237
1046
  "hiddenAliases": [],
1238
- "id": "ingest:bitset",
1047
+ "id": "device:list",
1239
1048
  "pluginAlias": "@formant/formant-cli",
1240
1049
  "pluginName": "@formant/formant-cli",
1241
1050
  "pluginType": "core",
1242
1051
  "strict": true,
1243
- "summary": "Ingest bitset data",
1052
+ "summary": "List robots and sensors in your fleet",
1244
1053
  "enableJsonFlag": true,
1245
1054
  "isESM": true,
1246
1055
  "relativePath": [
1247
1056
  "dist",
1248
1057
  "commands",
1249
- "ingest",
1250
- "bitset.js"
1058
+ "device",
1059
+ "list.js"
1251
1060
  ]
1252
1061
  },
1253
- "ingest:health": {
1062
+ "device:rename": {
1254
1063
  "aliases": [],
1255
- "args": {},
1256
- "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.",
1064
+ "args": {
1065
+ "id": {
1066
+ "description": "Device ID (UUID)",
1067
+ "name": "id",
1068
+ "required": true
1069
+ },
1070
+ "name": {
1071
+ "description": "New name for the device",
1072
+ "name": "name",
1073
+ "required": true
1074
+ }
1075
+ },
1076
+ "description": "Rename a device by updating its name.",
1257
1077
  "examples": [
1258
- "<%= config.bin %> ingest health --device <device-id> --stream system_health --status operational",
1259
- "<%= config.bin %> ingest health --device <device-id> --stream health --status error --tag component=motor",
1260
- "<%= config.bin %> ingest health --device <device-id> --stream sync --status operational --clock-skew 150"
1078
+ "<%= config.bin %> device rename <device-id> new-robot-name",
1079
+ "<%= config.bin %> device rename <device-id> new-robot-name --json"
1261
1080
  ],
1262
1081
  "flags": {
1263
1082
  "json": {
@@ -1286,87 +1105,40 @@
1286
1105
  "name": "stage",
1287
1106
  "allowNo": false,
1288
1107
  "type": "boolean"
1289
- },
1290
- "device": {
1291
- "char": "d",
1292
- "description": "Device ID (UUID)",
1293
- "name": "device",
1294
- "required": true,
1295
- "hasDynamicHelp": false,
1296
- "multiple": false,
1297
- "type": "option"
1298
- },
1299
- "stream": {
1300
- "char": "s",
1301
- "description": "Stream name",
1302
- "name": "stream",
1303
- "required": true,
1304
- "hasDynamicHelp": false,
1305
- "multiple": false,
1306
- "type": "option"
1307
- },
1308
- "status": {
1309
- "description": "Health status (unknown, operational, offline, or error)",
1310
- "name": "status",
1311
- "required": true,
1312
- "hasDynamicHelp": false,
1313
- "multiple": false,
1314
- "options": [
1315
- "unknown",
1316
- "operational",
1317
- "offline",
1318
- "error"
1319
- ],
1320
- "type": "option"
1321
- },
1322
- "clock-skew": {
1323
- "description": "Clock skew in milliseconds (optional)",
1324
- "name": "clock-skew",
1325
- "hasDynamicHelp": false,
1326
- "multiple": false,
1327
- "type": "option"
1328
- },
1329
- "tag": {
1330
- "char": "t",
1331
- "description": "Tag as key=value where both are strings (can be specified multiple times)",
1332
- "name": "tag",
1333
- "hasDynamicHelp": false,
1334
- "multiple": true,
1335
- "type": "option"
1336
- },
1337
- "timestamp": {
1338
- "description": "Unix timestamp in milliseconds (defaults to now)",
1339
- "name": "timestamp",
1340
- "hasDynamicHelp": false,
1341
- "multiple": false,
1342
- "type": "option"
1343
1108
  }
1344
1109
  },
1345
1110
  "hasDynamicHelp": false,
1346
1111
  "hiddenAliases": [],
1347
- "id": "ingest:health",
1112
+ "id": "device:rename",
1348
1113
  "pluginAlias": "@formant/formant-cli",
1349
1114
  "pluginName": "@formant/formant-cli",
1350
1115
  "pluginType": "core",
1351
1116
  "strict": true,
1352
- "summary": "Ingest health status data",
1117
+ "summary": "Rename a device",
1353
1118
  "enableJsonFlag": true,
1354
1119
  "isESM": true,
1355
1120
  "relativePath": [
1356
1121
  "dist",
1357
1122
  "commands",
1358
- "ingest",
1359
- "health.js"
1123
+ "device",
1124
+ "rename.js"
1360
1125
  ]
1361
1126
  },
1362
- "ingest:image": {
1127
+ "device:streams": {
1363
1128
  "aliases": [],
1364
- "args": {},
1365
- "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.",
1129
+ "args": {
1130
+ "id": {
1131
+ "description": "Device ID (UUID)",
1132
+ "name": "id",
1133
+ "required": true
1134
+ }
1135
+ },
1136
+ "description": "List telemetry streams for a device with data presence.\n\nShows streams from the device configuration and any streams discovered from\ningested data. Each stream is enriched with presence info from the analytics\nbackend: data point count, last seen time, and a freshness indicator\n(active/recent/stale/dormant).\n\nUnconfigured streams (discovered from data only) are marked with SOURCE \"data\".",
1366
1137
  "examples": [
1367
- "<%= config.bin %> ingest image --device <device-id> --stream camera_front --url https://example.com/image.jpg",
1368
- "<%= config.bin %> ingest image --device <device-id> --stream snapshot --url https://example.com/snap.png --size 1024000",
1369
- "<%= config.bin %> ingest image --device <device-id> --stream detection --url https://example.com/detect.jpg --tag frame=123"
1138
+ "<%= config.bin %> device streams <device-id>",
1139
+ "<%= config.bin %> device streams <device-id> --with-data",
1140
+ "<%= config.bin %> device streams <device-id> --with-data --days 30",
1141
+ "<%= config.bin %> device streams <device-id> --json"
1370
1142
  ],
1371
1143
  "flags": {
1372
1144
  "json": {
@@ -1396,87 +1168,53 @@
1396
1168
  "allowNo": false,
1397
1169
  "type": "boolean"
1398
1170
  },
1399
- "device": {
1400
- "char": "d",
1401
- "description": "Device ID (UUID)",
1402
- "name": "device",
1403
- "required": true,
1404
- "hasDynamicHelp": false,
1405
- "multiple": false,
1406
- "type": "option"
1407
- },
1408
- "stream": {
1409
- "char": "s",
1410
- "description": "Stream name",
1411
- "name": "stream",
1412
- "required": true,
1413
- "hasDynamicHelp": false,
1414
- "multiple": false,
1415
- "type": "option"
1416
- },
1417
- "url": {
1418
- "char": "u",
1419
- "description": "Image URL (must be http:// or https://)",
1420
- "name": "url",
1421
- "required": true,
1422
- "hasDynamicHelp": false,
1423
- "multiple": false,
1424
- "type": "option"
1425
- },
1426
- "size": {
1427
- "description": "Image size in bytes (optional)",
1428
- "name": "size",
1171
+ "days": {
1172
+ "description": "How many days back to look for stream data presence",
1173
+ "name": "days",
1174
+ "default": 7,
1429
1175
  "hasDynamicHelp": false,
1430
1176
  "multiple": false,
1431
1177
  "type": "option"
1432
1178
  },
1433
- "tag": {
1434
- "char": "t",
1435
- "description": "Tag as key=value where both are strings (can be specified multiple times)",
1436
- "name": "tag",
1437
- "hasDynamicHelp": false,
1438
- "multiple": true,
1439
- "type": "option"
1440
- },
1441
- "timestamp": {
1442
- "description": "Unix timestamp in milliseconds (defaults to now)",
1443
- "name": "timestamp",
1444
- "hasDynamicHelp": false,
1445
- "multiple": false,
1446
- "type": "option"
1179
+ "with-data": {
1180
+ "char": "w",
1181
+ "description": "Only show streams that have data in the --days window",
1182
+ "name": "with-data",
1183
+ "allowNo": false,
1184
+ "type": "boolean"
1447
1185
  }
1448
1186
  },
1449
1187
  "hasDynamicHelp": false,
1450
1188
  "hiddenAliases": [],
1451
- "id": "ingest:image",
1189
+ "id": "device:streams",
1452
1190
  "pluginAlias": "@formant/formant-cli",
1453
1191
  "pluginName": "@formant/formant-cli",
1454
1192
  "pluginType": "core",
1455
1193
  "strict": true,
1456
- "summary": "Ingest image data",
1194
+ "summary": "List device streams with data presence",
1457
1195
  "enableJsonFlag": true,
1458
1196
  "isESM": true,
1459
1197
  "relativePath": [
1460
1198
  "dist",
1461
1199
  "commands",
1462
- "ingest",
1463
- "image.js"
1200
+ "device",
1201
+ "streams.js"
1464
1202
  ]
1465
1203
  },
1466
- "ingest:json": {
1204
+ "device:tag": {
1467
1205
  "aliases": [],
1468
1206
  "args": {
1469
- "value": {
1470
- "description": "JSON value to ingest (as a JSON string)",
1471
- "name": "value",
1207
+ "id": {
1208
+ "description": "Device ID (UUID)",
1209
+ "name": "id",
1472
1210
  "required": true
1473
1211
  }
1474
1212
  },
1475
- "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.",
1213
+ "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.",
1476
1214
  "examples": [
1477
- "<%= config.bin %> ingest json '{\"x\":1,\"y\":2}' --device <device-id> --stream position",
1478
- "<%= config.bin %> ingest json '{\"status\":\"active\",\"mode\":\"auto\"}' --device <device-id> --stream config",
1479
- "<%= config.bin %> ingest json '[1,2,3,4,5]' --device <device-id> --stream array_data"
1215
+ "<%= config.bin %> device tag <device-id> --tag location=warehouse",
1216
+ "<%= config.bin %> device tag <device-id> --tag env=prod --tag region=us-east",
1217
+ "<%= config.bin %> device tag <device-id> --tag location=factory --json"
1480
1218
  ],
1481
1219
  "flags": {
1482
1220
  "json": {
@@ -1506,71 +1244,47 @@
1506
1244
  "allowNo": false,
1507
1245
  "type": "boolean"
1508
1246
  },
1509
- "device": {
1510
- "char": "d",
1511
- "description": "Device ID (UUID)",
1512
- "name": "device",
1513
- "required": true,
1514
- "hasDynamicHelp": false,
1515
- "multiple": false,
1516
- "type": "option"
1517
- },
1518
- "stream": {
1519
- "char": "s",
1520
- "description": "Stream name",
1521
- "name": "stream",
1522
- "required": true,
1523
- "hasDynamicHelp": false,
1524
- "multiple": false,
1525
- "type": "option"
1526
- },
1527
1247
  "tag": {
1528
1248
  "char": "t",
1529
- "description": "Tag as key=value where both are strings (can be specified multiple times)",
1249
+ "description": "Tag to add or update (key=value), can be specified multiple times",
1530
1250
  "name": "tag",
1251
+ "required": true,
1531
1252
  "hasDynamicHelp": false,
1532
1253
  "multiple": true,
1533
1254
  "type": "option"
1534
- },
1535
- "timestamp": {
1536
- "description": "Unix timestamp in milliseconds (defaults to now)",
1537
- "name": "timestamp",
1538
- "hasDynamicHelp": false,
1539
- "multiple": false,
1540
- "type": "option"
1541
1255
  }
1542
1256
  },
1543
1257
  "hasDynamicHelp": false,
1544
1258
  "hiddenAliases": [],
1545
- "id": "ingest:json",
1259
+ "id": "device:tag",
1546
1260
  "pluginAlias": "@formant/formant-cli",
1547
1261
  "pluginName": "@formant/formant-cli",
1548
1262
  "pluginType": "core",
1549
1263
  "strict": true,
1550
- "summary": "Ingest JSON data",
1264
+ "summary": "Add or update tags on a device",
1551
1265
  "enableJsonFlag": true,
1552
1266
  "isESM": true,
1553
1267
  "relativePath": [
1554
1268
  "dist",
1555
1269
  "commands",
1556
- "ingest",
1557
- "json.js"
1270
+ "device",
1271
+ "tag.js"
1558
1272
  ]
1559
1273
  },
1560
- "ingest:numeric": {
1274
+ "device:untag": {
1561
1275
  "aliases": [],
1562
1276
  "args": {
1563
- "value": {
1564
- "description": "Numeric value to ingest",
1565
- "name": "value",
1277
+ "id": {
1278
+ "description": "Device ID (UUID)",
1279
+ "name": "id",
1566
1280
  "required": true
1567
1281
  }
1568
1282
  },
1569
- "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.",
1283
+ "description": "Remove tags from a device.\n\nSpecify one or more tag keys to remove with --key.",
1570
1284
  "examples": [
1571
- "<%= config.bin %> ingest numeric 42.5 --device <device-id> --stream battery_level",
1572
- "<%= config.bin %> ingest numeric 98.6 --device <device-id> --stream temperature --tag unit=fahrenheit",
1573
- "<%= config.bin %> ingest numeric 1500 --device <device-id> --stream rpm --timestamp 1700000000000"
1285
+ "<%= config.bin %> device untag <device-id> --key location",
1286
+ "<%= config.bin %> device untag <device-id> --key env --key region",
1287
+ "<%= config.bin %> device untag <device-id> --key location --json"
1574
1288
  ],
1575
1289
  "flags": {
1576
1290
  "json": {
@@ -1600,71 +1314,46 @@
1600
1314
  "allowNo": false,
1601
1315
  "type": "boolean"
1602
1316
  },
1603
- "device": {
1604
- "char": "d",
1605
- "description": "Device ID (UUID)",
1606
- "name": "device",
1607
- "required": true,
1608
- "hasDynamicHelp": false,
1609
- "multiple": false,
1610
- "type": "option"
1611
- },
1612
- "stream": {
1613
- "char": "s",
1614
- "description": "Stream name",
1615
- "name": "stream",
1317
+ "key": {
1318
+ "char": "k",
1319
+ "description": "Tag key to remove, can be specified multiple times",
1320
+ "name": "key",
1616
1321
  "required": true,
1617
1322
  "hasDynamicHelp": false,
1618
- "multiple": false,
1619
- "type": "option"
1620
- },
1621
- "tag": {
1622
- "char": "t",
1623
- "description": "Tag as key=value where both are strings (can be specified multiple times)",
1624
- "name": "tag",
1625
- "hasDynamicHelp": false,
1626
1323
  "multiple": true,
1627
1324
  "type": "option"
1628
- },
1629
- "timestamp": {
1630
- "description": "Unix timestamp in milliseconds (defaults to now)",
1631
- "name": "timestamp",
1632
- "hasDynamicHelp": false,
1633
- "multiple": false,
1634
- "type": "option"
1635
1325
  }
1636
1326
  },
1637
1327
  "hasDynamicHelp": false,
1638
1328
  "hiddenAliases": [],
1639
- "id": "ingest:numeric",
1329
+ "id": "device:untag",
1640
1330
  "pluginAlias": "@formant/formant-cli",
1641
1331
  "pluginName": "@formant/formant-cli",
1642
1332
  "pluginType": "core",
1643
1333
  "strict": true,
1644
- "summary": "Ingest numeric data",
1334
+ "summary": "Remove tags from a device",
1645
1335
  "enableJsonFlag": true,
1646
1336
  "isESM": true,
1647
1337
  "relativePath": [
1648
1338
  "dist",
1649
1339
  "commands",
1650
- "ingest",
1651
- "numeric.js"
1340
+ "device",
1341
+ "untag.js"
1652
1342
  ]
1653
1343
  },
1654
- "ingest:text": {
1344
+ "event:get": {
1655
1345
  "aliases": [],
1656
1346
  "args": {
1657
- "value": {
1658
- "description": "Text value to ingest",
1659
- "name": "value",
1347
+ "id": {
1348
+ "description": "Event ID (UUID)",
1349
+ "name": "id",
1660
1350
  "required": true
1661
1351
  }
1662
1352
  },
1663
- "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.",
1353
+ "description": "Get detailed information about a specific event by its ID.",
1664
1354
  "examples": [
1665
- "<%= config.bin %> ingest text \"Robot started successfully\" --device <device-id> --stream status",
1666
- "<%= config.bin %> ingest text \"Error: sensor offline\" --device <device-id> --stream errors --tag severity=high",
1667
- "<%= config.bin %> ingest text \"Checkpoint A reached\" --device <device-id> --stream waypoints"
1355
+ "<%= config.bin %> event get <event-id>",
1356
+ "<%= config.bin %> event get <event-id> --json"
1668
1357
  ],
1669
1358
  "flags": {
1670
1359
  "json": {
@@ -1693,66 +1382,34 @@
1693
1382
  "name": "stage",
1694
1383
  "allowNo": false,
1695
1384
  "type": "boolean"
1696
- },
1697
- "device": {
1698
- "char": "d",
1699
- "description": "Device ID (UUID)",
1700
- "name": "device",
1701
- "required": true,
1702
- "hasDynamicHelp": false,
1703
- "multiple": false,
1704
- "type": "option"
1705
- },
1706
- "stream": {
1707
- "char": "s",
1708
- "description": "Stream name",
1709
- "name": "stream",
1710
- "required": true,
1711
- "hasDynamicHelp": false,
1712
- "multiple": false,
1713
- "type": "option"
1714
- },
1715
- "tag": {
1716
- "char": "t",
1717
- "description": "Tag as key=value where both are strings (can be specified multiple times)",
1718
- "name": "tag",
1719
- "hasDynamicHelp": false,
1720
- "multiple": true,
1721
- "type": "option"
1722
- },
1723
- "timestamp": {
1724
- "description": "Unix timestamp in milliseconds (defaults to now)",
1725
- "name": "timestamp",
1726
- "hasDynamicHelp": false,
1727
- "multiple": false,
1728
- "type": "option"
1729
1385
  }
1730
1386
  },
1731
1387
  "hasDynamicHelp": false,
1732
1388
  "hiddenAliases": [],
1733
- "id": "ingest:text",
1389
+ "id": "event:get",
1734
1390
  "pluginAlias": "@formant/formant-cli",
1735
1391
  "pluginName": "@formant/formant-cli",
1736
1392
  "pluginType": "core",
1737
1393
  "strict": true,
1738
- "summary": "Ingest text data",
1394
+ "summary": "Get an event by ID",
1739
1395
  "enableJsonFlag": true,
1740
1396
  "isESM": true,
1741
1397
  "relativePath": [
1742
1398
  "dist",
1743
1399
  "commands",
1744
- "ingest",
1745
- "text.js"
1400
+ "event",
1401
+ "get.js"
1746
1402
  ]
1747
1403
  },
1748
- "ingest:video": {
1404
+ "event:list": {
1749
1405
  "aliases": [],
1750
1406
  "args": {},
1751
- "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).",
1407
+ "description": "View important events emitted by devices with optional filters.\n\nEvents are significant occurrences from robots and sensors (e.g., device online/offline,\nerrors, state changes, commands). They can trigger signals for investigation.\n\nEvent types include: triggered-event, datapoint-event, device-online, device-offline,\nintervention-request, intervention-response, teleop-session-record, command-request,\ncommand-response, custom, comment, system, annotation, task-summary, stateful.\n\nSeverities: info, warning, error, critical.",
1752
1408
  "examples": [
1753
- "<%= config.bin %> ingest video --device <device-id> --stream recordings --url https://example.com/video.mp4 --duration 5000",
1754
- "<%= config.bin %> ingest video --device <device-id> --stream clips --url https://example.com/clip.webm --duration 3500 --size 2048000",
1755
- "<%= config.bin %> ingest video --device <device-id> --stream event_video --url https://example.com/event.mov --duration 10000 --tag event=collision"
1409
+ "<%= config.bin %> event list",
1410
+ "<%= config.bin %> event list --device <id> --severity critical",
1411
+ "<%= config.bin %> event list --type device-offline --start 2026-01-01 --end 2026-01-02",
1412
+ "<%= config.bin %> event list --limit 100 --json"
1756
1413
  ],
1757
1414
  "flags": {
1758
1415
  "json": {
@@ -1784,57 +1441,51 @@
1784
1441
  },
1785
1442
  "device": {
1786
1443
  "char": "d",
1787
- "description": "Device ID (UUID)",
1444
+ "description": "Filter by device ID",
1788
1445
  "name": "device",
1789
- "required": true,
1790
1446
  "hasDynamicHelp": false,
1791
1447
  "multiple": false,
1792
1448
  "type": "option"
1793
1449
  },
1794
- "stream": {
1795
- "char": "s",
1796
- "description": "Stream name",
1797
- "name": "stream",
1798
- "required": true,
1450
+ "end": {
1451
+ "description": "End time (ISO 8601)",
1452
+ "name": "end",
1799
1453
  "hasDynamicHelp": false,
1800
1454
  "multiple": false,
1801
1455
  "type": "option"
1802
1456
  },
1803
- "url": {
1804
- "char": "u",
1805
- "description": "Video URL (must be http:// or https://)",
1806
- "name": "url",
1807
- "required": true,
1457
+ "limit": {
1458
+ "char": "l",
1459
+ "description": "Maximum number of events to return",
1460
+ "name": "limit",
1461
+ "default": 25,
1808
1462
  "hasDynamicHelp": false,
1809
1463
  "multiple": false,
1810
1464
  "type": "option"
1811
1465
  },
1812
- "duration": {
1813
- "description": "Video duration in milliseconds (required)",
1814
- "name": "duration",
1815
- "required": true,
1466
+ "severity": {
1467
+ "description": "Filter by severity",
1468
+ "name": "severity",
1816
1469
  "hasDynamicHelp": false,
1817
1470
  "multiple": false,
1471
+ "options": [
1472
+ "info",
1473
+ "warning",
1474
+ "error",
1475
+ "critical"
1476
+ ],
1818
1477
  "type": "option"
1819
1478
  },
1820
- "size": {
1821
- "description": "Video size in bytes (optional)",
1822
- "name": "size",
1479
+ "start": {
1480
+ "description": "Start time (ISO 8601)",
1481
+ "name": "start",
1823
1482
  "hasDynamicHelp": false,
1824
1483
  "multiple": false,
1825
1484
  "type": "option"
1826
1485
  },
1827
- "tag": {
1828
- "char": "t",
1829
- "description": "Tag as key=value where both are strings (can be specified multiple times)",
1830
- "name": "tag",
1831
- "hasDynamicHelp": false,
1832
- "multiple": true,
1833
- "type": "option"
1834
- },
1835
- "timestamp": {
1836
- "description": "Unix timestamp in milliseconds (defaults to now)",
1837
- "name": "timestamp",
1486
+ "type": {
1487
+ "description": "Filter by event type",
1488
+ "name": "type",
1838
1489
  "hasDynamicHelp": false,
1839
1490
  "multiple": false,
1840
1491
  "type": "option"
@@ -1842,19 +1493,19 @@
1842
1493
  },
1843
1494
  "hasDynamicHelp": false,
1844
1495
  "hiddenAliases": [],
1845
- "id": "ingest:video",
1496
+ "id": "event:list",
1846
1497
  "pluginAlias": "@formant/formant-cli",
1847
1498
  "pluginName": "@formant/formant-cli",
1848
1499
  "pluginType": "core",
1849
1500
  "strict": true,
1850
- "summary": "Ingest video data",
1501
+ "summary": "View events emitted by devices",
1851
1502
  "enableJsonFlag": true,
1852
1503
  "isESM": true,
1853
1504
  "relativePath": [
1854
1505
  "dist",
1855
1506
  "commands",
1856
- "ingest",
1857
- "video.js"
1507
+ "event",
1508
+ "list.js"
1858
1509
  ]
1859
1510
  },
1860
1511
  "org:get": {
@@ -1983,14 +1634,19 @@
1983
1634
  "update.js"
1984
1635
  ]
1985
1636
  },
1986
- "investigation:analytics": {
1637
+ "kv:get": {
1987
1638
  "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 %> investigation analytics --start 2026-01-01 --end 2026-02-01",
1992
- "<%= config.bin %> investigation analytics --start 2026-01-01 --end 2026-02-01 --interval hourly",
1993
- "<%= config.bin %> investigation analytics --start 2026-01-01 --end 2026-02-01 --group-by resultType --json"
1639
+ "args": {
1640
+ "key": {
1641
+ "description": "Key to retrieve",
1642
+ "name": "key",
1643
+ "required": true
1644
+ }
1645
+ },
1646
+ "description": "Get a value from the key-value store.\n\nThe key-value store allows devices and applications to store metadata.",
1647
+ "examples": [
1648
+ "<%= config.bin %> kv get my-key",
1649
+ "<%= config.bin %> kv get my-key --json"
1994
1650
  ],
1995
1651
  "flags": {
1996
1652
  "json": {
@@ -2019,42 +1675,75 @@
2019
1675
  "name": "stage",
2020
1676
  "allowNo": false,
2021
1677
  "type": "boolean"
1678
+ }
1679
+ },
1680
+ "hasDynamicHelp": false,
1681
+ "hiddenAliases": [],
1682
+ "id": "kv:get",
1683
+ "pluginAlias": "@formant/formant-cli",
1684
+ "pluginName": "@formant/formant-cli",
1685
+ "pluginType": "core",
1686
+ "strict": true,
1687
+ "summary": "Get key-value",
1688
+ "enableJsonFlag": true,
1689
+ "isESM": true,
1690
+ "relativePath": [
1691
+ "dist",
1692
+ "commands",
1693
+ "kv",
1694
+ "get.js"
1695
+ ]
1696
+ },
1697
+ "kv:list": {
1698
+ "aliases": [],
1699
+ "args": {},
1700
+ "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.",
1701
+ "examples": [
1702
+ "<%= config.bin %> kv list",
1703
+ "<%= config.bin %> kv list --prefix config",
1704
+ "<%= config.bin %> kv list --keys key1 --keys key2 --keys key3",
1705
+ "<%= config.bin %> kv list --json"
1706
+ ],
1707
+ "flags": {
1708
+ "json": {
1709
+ "description": "Format output as json.",
1710
+ "helpGroup": "GLOBAL",
1711
+ "name": "json",
1712
+ "allowNo": false,
1713
+ "type": "boolean"
2022
1714
  },
2023
- "end": {
2024
- "description": "End time (ISO 8601)",
2025
- "name": "end",
2026
- "required": true,
2027
- "hasDynamicHelp": false,
2028
- "multiple": false,
2029
- "type": "option"
1715
+ "dev": {
1716
+ "description": "Target the dev environment",
1717
+ "exclusive": [
1718
+ "stage"
1719
+ ],
1720
+ "helpGroup": "GLOBAL",
1721
+ "name": "dev",
1722
+ "allowNo": false,
1723
+ "type": "boolean"
2030
1724
  },
2031
- "group-by": {
2032
- "description": "Group results by",
2033
- "name": "group-by",
2034
- "hasDynamicHelp": false,
2035
- "multiple": false,
2036
- "options": [
2037
- "resultType",
2038
- "signalType"
1725
+ "stage": {
1726
+ "description": "Target the stage environment",
1727
+ "exclusive": [
1728
+ "dev"
2039
1729
  ],
2040
- "type": "option"
1730
+ "helpGroup": "GLOBAL",
1731
+ "name": "stage",
1732
+ "allowNo": false,
1733
+ "type": "boolean"
2041
1734
  },
2042
- "interval": {
2043
- "description": "Time interval for aggregation",
2044
- "name": "interval",
2045
- "default": "daily",
1735
+ "keys": {
1736
+ "char": "k",
1737
+ "description": "Specific keys to query (can be specified multiple times)",
1738
+ "name": "keys",
2046
1739
  "hasDynamicHelp": false,
2047
- "multiple": false,
2048
- "options": [
2049
- "daily",
2050
- "hourly"
2051
- ],
1740
+ "multiple": true,
2052
1741
  "type": "option"
2053
1742
  },
2054
- "start": {
2055
- "description": "Start time (ISO 8601)",
2056
- "name": "start",
2057
- "required": true,
1743
+ "prefix": {
1744
+ "char": "p",
1745
+ "description": "Filter keys by prefix",
1746
+ "name": "prefix",
2058
1747
  "hasDynamicHelp": false,
2059
1748
  "multiple": false,
2060
1749
  "type": "option"
@@ -2062,34 +1751,39 @@
2062
1751
  },
2063
1752
  "hasDynamicHelp": false,
2064
1753
  "hiddenAliases": [],
2065
- "id": "investigation:analytics",
1754
+ "id": "kv:list",
2066
1755
  "pluginAlias": "@formant/formant-cli",
2067
1756
  "pluginName": "@formant/formant-cli",
2068
1757
  "pluginType": "core",
2069
1758
  "strict": true,
2070
- "summary": "Get investigation analytics",
1759
+ "summary": "List key-value keys",
2071
1760
  "enableJsonFlag": true,
2072
1761
  "isESM": true,
2073
1762
  "relativePath": [
2074
1763
  "dist",
2075
1764
  "commands",
2076
- "investigation",
2077
- "analytics.js"
1765
+ "kv",
1766
+ "list.js"
2078
1767
  ]
2079
1768
  },
2080
- "investigation:get": {
1769
+ "kv:set": {
2081
1770
  "aliases": [],
2082
1771
  "args": {
2083
- "id": {
2084
- "description": "Investigation (taskflow) ID",
2085
- "name": "id",
1772
+ "key": {
1773
+ "description": "Key to set",
1774
+ "name": "key",
1775
+ "required": true
1776
+ },
1777
+ "value": {
1778
+ "description": "Value to store (JSON string)",
1779
+ "name": "value",
2086
1780
  "required": true
2087
1781
  }
2088
1782
  },
2089
- "description": "Get detailed information about a specific investigation by ID.",
1783
+ "description": "Set a value in the key-value store.\n\nStores a value associated with a key. The value should be a JSON string.",
2090
1784
  "examples": [
2091
- "<%= config.bin %> investigation get <id>",
2092
- "<%= config.bin %> investigation get <id> --json"
1785
+ "<%= config.bin %> kv set my-key '{\"data\": \"value\"}'",
1786
+ "<%= config.bin %> kv set config '{\"setting\": true}'"
2093
1787
  ],
2094
1788
  "flags": {
2095
1789
  "json": {
@@ -2122,29 +1816,30 @@
2122
1816
  },
2123
1817
  "hasDynamicHelp": false,
2124
1818
  "hiddenAliases": [],
2125
- "id": "investigation:get",
1819
+ "id": "kv:set",
2126
1820
  "pluginAlias": "@formant/formant-cli",
2127
1821
  "pluginName": "@formant/formant-cli",
2128
1822
  "pluginType": "core",
2129
1823
  "strict": true,
2130
- "summary": "Get an investigation by ID",
1824
+ "summary": "Set key-value",
2131
1825
  "enableJsonFlag": true,
2132
1826
  "isESM": true,
2133
1827
  "relativePath": [
2134
1828
  "dist",
2135
1829
  "commands",
2136
- "investigation",
2137
- "get.js"
1830
+ "kv",
1831
+ "set.js"
2138
1832
  ]
2139
1833
  },
2140
- "investigation:list": {
1834
+ "ingest:batch": {
2141
1835
  "aliases": [],
2142
1836
  "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.",
1837
+ "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).",
2144
1838
  "examples": [
2145
- "<%= config.bin %> investigation list",
2146
- "<%= config.bin %> investigation list --signal-handler",
2147
- "<%= config.bin %> investigation list --json"
1839
+ "<%= config.bin %> ingest batch --file data.json",
1840
+ "<%= config.bin %> ingest batch --stdin < data.json",
1841
+ "cat payload.json | <%= config.bin %> ingest batch --stdin",
1842
+ "# 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}"
2148
1843
  ],
2149
1844
  "flags": {
2150
1845
  "json": {
@@ -2174,49 +1869,52 @@
2174
1869
  "allowNo": false,
2175
1870
  "type": "boolean"
2176
1871
  },
2177
- "signal-handler": {
2178
- "description": "Only show investigations that handle signals",
2179
- "name": "signal-handler",
1872
+ "file": {
1873
+ "char": "f",
1874
+ "description": "Path to JSON file containing batch payload",
1875
+ "exclusive": [
1876
+ "stdin"
1877
+ ],
1878
+ "name": "file",
1879
+ "hasDynamicHelp": false,
1880
+ "multiple": false,
1881
+ "type": "option"
1882
+ },
1883
+ "stdin": {
1884
+ "description": "Read JSON payload from stdin",
1885
+ "exclusive": [
1886
+ "file"
1887
+ ],
1888
+ "name": "stdin",
2180
1889
  "allowNo": false,
2181
1890
  "type": "boolean"
2182
1891
  }
2183
1892
  },
2184
1893
  "hasDynamicHelp": false,
2185
1894
  "hiddenAliases": [],
2186
- "id": "investigation:list",
1895
+ "id": "ingest:batch",
2187
1896
  "pluginAlias": "@formant/formant-cli",
2188
1897
  "pluginName": "@formant/formant-cli",
2189
1898
  "pluginType": "core",
2190
1899
  "strict": true,
2191
- "summary": "List investigations",
1900
+ "summary": "Ingest batch data from file or stdin",
2192
1901
  "enableJsonFlag": true,
2193
1902
  "isESM": true,
2194
1903
  "relativePath": [
2195
1904
  "dist",
2196
1905
  "commands",
2197
- "investigation",
2198
- "list.js"
1906
+ "ingest",
1907
+ "batch.js"
2199
1908
  ]
2200
1909
  },
2201
- "investigation:run": {
1910
+ "ingest:bitset": {
2202
1911
  "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.",
1912
+ "args": {},
1913
+ "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",
2216
1914
  "examples": [
2217
- "<%= config.bin %> investigation run <investigation-id> <run-id>",
2218
- "<%= config.bin %> investigation run <investigation-id> <run-id> --log-only",
2219
- "<%= config.bin %> investigation run <investigation-id> <run-id> --json"
1915
+ "<%= config.bin %> ingest bitset --device <device-id> --stream sensors --keys \"door,window,motion\" --values \"true,false,true\"",
1916
+ "<%= config.bin %> ingest bitset --device <device-id> --stream flags --keys \"active,paused,error\" --values \"true,false,false\" --tag system=main",
1917
+ "<%= config.bin %> ingest bitset --device <device-id> --stream states --keys \"a,b\" --values \"false,true\""
2220
1918
  ],
2221
1919
  "flags": {
2222
1920
  "json": {
@@ -2246,50 +1944,83 @@
2246
1944
  "allowNo": false,
2247
1945
  "type": "boolean"
2248
1946
  },
2249
- "log-only": {
2250
- "description": "Only show the execution log (skip run details)",
2251
- "name": "log-only",
2252
- "allowNo": false,
2253
- "type": "boolean"
1947
+ "device": {
1948
+ "char": "d",
1949
+ "description": "Device ID (UUID)",
1950
+ "name": "device",
1951
+ "required": true,
1952
+ "hasDynamicHelp": false,
1953
+ "multiple": false,
1954
+ "type": "option"
2254
1955
  },
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"
1956
+ "stream": {
1957
+ "char": "s",
1958
+ "description": "Stream name",
1959
+ "name": "stream",
1960
+ "required": true,
1961
+ "hasDynamicHelp": false,
1962
+ "multiple": false,
1963
+ "type": "option"
1964
+ },
1965
+ "keys": {
1966
+ "char": "k",
1967
+ "description": "Comma-separated list of key names (1-1000 keys, max 255 chars each)",
1968
+ "name": "keys",
1969
+ "required": true,
1970
+ "hasDynamicHelp": false,
1971
+ "multiple": false,
1972
+ "type": "option"
1973
+ },
1974
+ "values": {
1975
+ "char": "v",
1976
+ "description": "Comma-separated list of boolean values (true/false, must match key count)",
1977
+ "name": "values",
1978
+ "required": true,
1979
+ "hasDynamicHelp": false,
1980
+ "multiple": false,
1981
+ "type": "option"
1982
+ },
1983
+ "tag": {
1984
+ "char": "t",
1985
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
1986
+ "name": "tag",
1987
+ "hasDynamicHelp": false,
1988
+ "multiple": true,
1989
+ "type": "option"
1990
+ },
1991
+ "timestamp": {
1992
+ "description": "Unix timestamp in milliseconds (defaults to now)",
1993
+ "name": "timestamp",
1994
+ "hasDynamicHelp": false,
1995
+ "multiple": false,
1996
+ "type": "option"
2260
1997
  }
2261
1998
  },
2262
1999
  "hasDynamicHelp": false,
2263
2000
  "hiddenAliases": [],
2264
- "id": "investigation:run",
2001
+ "id": "ingest:bitset",
2265
2002
  "pluginAlias": "@formant/formant-cli",
2266
2003
  "pluginName": "@formant/formant-cli",
2267
2004
  "pluginType": "core",
2268
2005
  "strict": true,
2269
- "summary": "Get investigation run details and execution log",
2006
+ "summary": "Ingest bitset data",
2270
2007
  "enableJsonFlag": true,
2271
2008
  "isESM": true,
2272
2009
  "relativePath": [
2273
2010
  "dist",
2274
2011
  "commands",
2275
- "investigation",
2276
- "run.js"
2012
+ "ingest",
2013
+ "bitset.js"
2277
2014
  ]
2278
2015
  },
2279
- "investigation:runs-list": {
2016
+ "ingest:health": {
2280
2017
  "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.",
2018
+ "args": {},
2019
+ "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.",
2289
2020
  "examples": [
2290
- "<%= config.bin %> investigation runs-list <id>",
2291
- "<%= config.bin %> investigation runs-list <id> --limit 50",
2292
- "<%= config.bin %> investigation runs-list <id> --details --json"
2021
+ "<%= config.bin %> ingest health --device <device-id> --stream system_health --status operational",
2022
+ "<%= config.bin %> ingest health --device <device-id> --stream health --status error --tag component=motor",
2023
+ "<%= config.bin %> ingest health --device <device-id> --stream sync --status operational --clock-skew 150"
2293
2024
  ],
2294
2025
  "flags": {
2295
2026
  "json": {
@@ -2319,26 +2050,56 @@
2319
2050
  "allowNo": false,
2320
2051
  "type": "boolean"
2321
2052
  },
2322
- "details": {
2323
- "description": "Include detailed information about each run",
2324
- "name": "details",
2325
- "allowNo": false,
2326
- "type": "boolean"
2053
+ "device": {
2054
+ "char": "d",
2055
+ "description": "Device ID (UUID)",
2056
+ "name": "device",
2057
+ "required": true,
2058
+ "hasDynamicHelp": false,
2059
+ "multiple": false,
2060
+ "type": "option"
2327
2061
  },
2328
- "limit": {
2329
- "char": "l",
2330
- "description": "Maximum number of runs to return",
2331
- "name": "limit",
2332
- "default": 20,
2062
+ "stream": {
2063
+ "char": "s",
2064
+ "description": "Stream name",
2065
+ "name": "stream",
2066
+ "required": true,
2333
2067
  "hasDynamicHelp": false,
2334
2068
  "multiple": false,
2335
2069
  "type": "option"
2336
2070
  },
2337
- "offset": {
2338
- "char": "o",
2339
- "description": "Offset for pagination",
2340
- "name": "offset",
2341
- "default": 0,
2071
+ "status": {
2072
+ "description": "Health status (unknown, operational, offline, or error)",
2073
+ "name": "status",
2074
+ "required": true,
2075
+ "hasDynamicHelp": false,
2076
+ "multiple": false,
2077
+ "options": [
2078
+ "unknown",
2079
+ "operational",
2080
+ "offline",
2081
+ "error"
2082
+ ],
2083
+ "type": "option"
2084
+ },
2085
+ "clock-skew": {
2086
+ "description": "Clock skew in milliseconds (optional)",
2087
+ "name": "clock-skew",
2088
+ "hasDynamicHelp": false,
2089
+ "multiple": false,
2090
+ "type": "option"
2091
+ },
2092
+ "tag": {
2093
+ "char": "t",
2094
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
2095
+ "name": "tag",
2096
+ "hasDynamicHelp": false,
2097
+ "multiple": true,
2098
+ "type": "option"
2099
+ },
2100
+ "timestamp": {
2101
+ "description": "Unix timestamp in milliseconds (defaults to now)",
2102
+ "name": "timestamp",
2342
2103
  "hasDynamicHelp": false,
2343
2104
  "multiple": false,
2344
2105
  "type": "option"
@@ -2346,34 +2107,29 @@
2346
2107
  },
2347
2108
  "hasDynamicHelp": false,
2348
2109
  "hiddenAliases": [],
2349
- "id": "investigation:runs-list",
2110
+ "id": "ingest:health",
2350
2111
  "pluginAlias": "@formant/formant-cli",
2351
2112
  "pluginName": "@formant/formant-cli",
2352
2113
  "pluginType": "core",
2353
2114
  "strict": true,
2354
- "summary": "List actual investigation runs",
2115
+ "summary": "Ingest health status data",
2355
2116
  "enableJsonFlag": true,
2356
2117
  "isESM": true,
2357
2118
  "relativePath": [
2358
2119
  "dist",
2359
2120
  "commands",
2360
- "investigation",
2361
- "runs-list.js"
2121
+ "ingest",
2122
+ "health.js"
2362
2123
  ]
2363
2124
  },
2364
- "investigation:runs": {
2125
+ "ingest:image": {
2365
2126
  "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.",
2127
+ "args": {},
2128
+ "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.",
2374
2129
  "examples": [
2375
- "<%= config.bin %> investigation runs <id>",
2376
- "<%= config.bin %> investigation runs <id> --json"
2130
+ "<%= config.bin %> ingest image --device <device-id> --stream camera_front --url https://example.com/image.jpg",
2131
+ "<%= config.bin %> ingest image --device <device-id> --stream snapshot --url https://example.com/snap.png --size 1024000",
2132
+ "<%= config.bin %> ingest image --device <device-id> --stream detection --url https://example.com/detect.jpg --tag frame=123"
2377
2133
  ],
2378
2134
  "flags": {
2379
2135
  "json": {
@@ -2393,41 +2149,97 @@
2393
2149
  "allowNo": false,
2394
2150
  "type": "boolean"
2395
2151
  },
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"
2152
+ "stage": {
2153
+ "description": "Target the stage environment",
2154
+ "exclusive": [
2155
+ "dev"
2156
+ ],
2157
+ "helpGroup": "GLOBAL",
2158
+ "name": "stage",
2159
+ "allowNo": false,
2160
+ "type": "boolean"
2161
+ },
2162
+ "device": {
2163
+ "char": "d",
2164
+ "description": "Device ID (UUID)",
2165
+ "name": "device",
2166
+ "required": true,
2167
+ "hasDynamicHelp": false,
2168
+ "multiple": false,
2169
+ "type": "option"
2170
+ },
2171
+ "stream": {
2172
+ "char": "s",
2173
+ "description": "Stream name",
2174
+ "name": "stream",
2175
+ "required": true,
2176
+ "hasDynamicHelp": false,
2177
+ "multiple": false,
2178
+ "type": "option"
2179
+ },
2180
+ "url": {
2181
+ "char": "u",
2182
+ "description": "Image URL (must be http:// or https://)",
2183
+ "name": "url",
2184
+ "required": true,
2185
+ "hasDynamicHelp": false,
2186
+ "multiple": false,
2187
+ "type": "option"
2188
+ },
2189
+ "size": {
2190
+ "description": "Image size in bytes (optional)",
2191
+ "name": "size",
2192
+ "hasDynamicHelp": false,
2193
+ "multiple": false,
2194
+ "type": "option"
2195
+ },
2196
+ "tag": {
2197
+ "char": "t",
2198
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
2199
+ "name": "tag",
2200
+ "hasDynamicHelp": false,
2201
+ "multiple": true,
2202
+ "type": "option"
2203
+ },
2204
+ "timestamp": {
2205
+ "description": "Unix timestamp in milliseconds (defaults to now)",
2206
+ "name": "timestamp",
2207
+ "hasDynamicHelp": false,
2208
+ "multiple": false,
2209
+ "type": "option"
2405
2210
  }
2406
2211
  },
2407
2212
  "hasDynamicHelp": false,
2408
2213
  "hiddenAliases": [],
2409
- "id": "investigation:runs",
2214
+ "id": "ingest:image",
2410
2215
  "pluginAlias": "@formant/formant-cli",
2411
2216
  "pluginName": "@formant/formant-cli",
2412
2217
  "pluginType": "core",
2413
2218
  "strict": true,
2414
- "summary": "List runs for an investigation",
2219
+ "summary": "Ingest image data",
2415
2220
  "enableJsonFlag": true,
2416
2221
  "isESM": true,
2417
2222
  "relativePath": [
2418
2223
  "dist",
2419
2224
  "commands",
2420
- "investigation",
2421
- "runs.js"
2225
+ "ingest",
2226
+ "image.js"
2422
2227
  ]
2423
2228
  },
2424
- "investigation:stats": {
2229
+ "ingest:json": {
2425
2230
  "aliases": [],
2426
- "args": {},
2427
- "description": "Get investigation statistics for a time range.",
2231
+ "args": {
2232
+ "value": {
2233
+ "description": "JSON value to ingest (as a JSON string)",
2234
+ "name": "value",
2235
+ "required": true
2236
+ }
2237
+ },
2238
+ "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.",
2428
2239
  "examples": [
2429
- "<%= config.bin %> investigation stats --start 2026-01-01 --end 2026-02-01",
2430
- "<%= config.bin %> investigation stats --start 2026-01-01 --end 2026-02-01 --json"
2240
+ "<%= config.bin %> ingest json '{\"x\":1,\"y\":2}' --device <device-id> --stream position",
2241
+ "<%= config.bin %> ingest json '{\"status\":\"active\",\"mode\":\"auto\"}' --device <device-id> --stream config",
2242
+ "<%= config.bin %> ingest json '[1,2,3,4,5]' --device <device-id> --stream array_data"
2431
2243
  ],
2432
2244
  "flags": {
2433
2245
  "json": {
@@ -2457,53 +2269,71 @@
2457
2269
  "allowNo": false,
2458
2270
  "type": "boolean"
2459
2271
  },
2460
- "end": {
2461
- "description": "End time (ISO 8601)",
2462
- "name": "end",
2272
+ "device": {
2273
+ "char": "d",
2274
+ "description": "Device ID (UUID)",
2275
+ "name": "device",
2463
2276
  "required": true,
2464
2277
  "hasDynamicHelp": false,
2465
2278
  "multiple": false,
2466
2279
  "type": "option"
2467
2280
  },
2468
- "start": {
2469
- "description": "Start time (ISO 8601)",
2470
- "name": "start",
2281
+ "stream": {
2282
+ "char": "s",
2283
+ "description": "Stream name",
2284
+ "name": "stream",
2471
2285
  "required": true,
2472
2286
  "hasDynamicHelp": false,
2473
2287
  "multiple": false,
2474
2288
  "type": "option"
2289
+ },
2290
+ "tag": {
2291
+ "char": "t",
2292
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
2293
+ "name": "tag",
2294
+ "hasDynamicHelp": false,
2295
+ "multiple": true,
2296
+ "type": "option"
2297
+ },
2298
+ "timestamp": {
2299
+ "description": "Unix timestamp in milliseconds (defaults to now)",
2300
+ "name": "timestamp",
2301
+ "hasDynamicHelp": false,
2302
+ "multiple": false,
2303
+ "type": "option"
2475
2304
  }
2476
2305
  },
2477
2306
  "hasDynamicHelp": false,
2478
2307
  "hiddenAliases": [],
2479
- "id": "investigation:stats",
2308
+ "id": "ingest:json",
2480
2309
  "pluginAlias": "@formant/formant-cli",
2481
2310
  "pluginName": "@formant/formant-cli",
2482
2311
  "pluginType": "core",
2483
2312
  "strict": true,
2484
- "summary": "Get investigation stats",
2313
+ "summary": "Ingest JSON data",
2485
2314
  "enableJsonFlag": true,
2486
2315
  "isESM": true,
2487
2316
  "relativePath": [
2488
2317
  "dist",
2489
2318
  "commands",
2490
- "investigation",
2491
- "stats.js"
2319
+ "ingest",
2320
+ "json.js"
2492
2321
  ]
2493
2322
  },
2494
- "investigation:trigger": {
2323
+ "ingest:numeric": {
2495
2324
  "aliases": [],
2496
2325
  "args": {
2497
- "id": {
2498
- "description": "Investigation (taskflow) ID",
2499
- "name": "id",
2326
+ "value": {
2327
+ "description": "Numeric value to ingest",
2328
+ "name": "value",
2500
2329
  "required": true
2501
2330
  }
2502
2331
  },
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.",
2332
+ "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.",
2504
2333
  "examples": [
2505
- "<%= config.bin %> investigation trigger <id> --input \"Robot stopped responding\"",
2506
- "<%= config.bin %> investigation trigger <id> --input \"Battery draining fast on device X\" --json"
2334
+ "<%= config.bin %> ingest numeric 42.5 --device <device-id> --stream battery_level",
2335
+ "<%= config.bin %> ingest numeric 98.6 --device <device-id> --stream temperature --tag unit=fahrenheit",
2336
+ "<%= config.bin %> ingest numeric 1500 --device <device-id> --stream rpm --timestamp 1700000000000"
2507
2337
  ],
2508
2338
  "flags": {
2509
2339
  "json": {
@@ -2533,18 +2363,35 @@
2533
2363
  "allowNo": false,
2534
2364
  "type": "boolean"
2535
2365
  },
2536
- "input": {
2537
- "char": "i",
2538
- "description": "Input text / problem description for the investigation",
2539
- "name": "input",
2366
+ "device": {
2367
+ "char": "d",
2368
+ "description": "Device ID (UUID)",
2369
+ "name": "device",
2540
2370
  "required": true,
2541
2371
  "hasDynamicHelp": false,
2542
2372
  "multiple": false,
2543
2373
  "type": "option"
2544
2374
  },
2545
- "signal-id": {
2546
- "description": "Optional signal ID to associate with this run",
2547
- "name": "signal-id",
2375
+ "stream": {
2376
+ "char": "s",
2377
+ "description": "Stream name",
2378
+ "name": "stream",
2379
+ "required": true,
2380
+ "hasDynamicHelp": false,
2381
+ "multiple": false,
2382
+ "type": "option"
2383
+ },
2384
+ "tag": {
2385
+ "char": "t",
2386
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
2387
+ "name": "tag",
2388
+ "hasDynamicHelp": false,
2389
+ "multiple": true,
2390
+ "type": "option"
2391
+ },
2392
+ "timestamp": {
2393
+ "description": "Unix timestamp in milliseconds (defaults to now)",
2394
+ "name": "timestamp",
2548
2395
  "hasDynamicHelp": false,
2549
2396
  "multiple": false,
2550
2397
  "type": "option"
@@ -2552,34 +2399,35 @@
2552
2399
  },
2553
2400
  "hasDynamicHelp": false,
2554
2401
  "hiddenAliases": [],
2555
- "id": "investigation:trigger",
2402
+ "id": "ingest:numeric",
2556
2403
  "pluginAlias": "@formant/formant-cli",
2557
2404
  "pluginName": "@formant/formant-cli",
2558
2405
  "pluginType": "core",
2559
2406
  "strict": true,
2560
- "summary": "Trigger an investigation",
2407
+ "summary": "Ingest numeric data",
2561
2408
  "enableJsonFlag": true,
2562
2409
  "isESM": true,
2563
2410
  "relativePath": [
2564
2411
  "dist",
2565
2412
  "commands",
2566
- "investigation",
2567
- "trigger.js"
2413
+ "ingest",
2414
+ "numeric.js"
2568
2415
  ]
2569
2416
  },
2570
- "device:config": {
2417
+ "ingest:text": {
2571
2418
  "aliases": [],
2572
2419
  "args": {
2573
- "id": {
2574
- "description": "Device ID (UUID)",
2575
- "name": "id",
2420
+ "value": {
2421
+ "description": "Text value to ingest",
2422
+ "name": "value",
2576
2423
  "required": true
2577
2424
  }
2578
2425
  },
2579
- "description": "Get the device configuration including stream definitions.\n\nShows the device's current configuration including telemetry streams, commands,\nand other settings.",
2426
+ "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.",
2580
2427
  "examples": [
2581
- "<%= config.bin %> device config <device-id>",
2582
- "<%= config.bin %> device config <device-id> --json"
2428
+ "<%= config.bin %> ingest text \"Robot started successfully\" --device <device-id> --stream status",
2429
+ "<%= config.bin %> ingest text \"Error: sensor offline\" --device <device-id> --stream errors --tag severity=high",
2430
+ "<%= config.bin %> ingest text \"Checkpoint A reached\" --device <device-id> --stream waypoints"
2583
2431
  ],
2584
2432
  "flags": {
2585
2433
  "json": {
@@ -2608,39 +2456,66 @@
2608
2456
  "name": "stage",
2609
2457
  "allowNo": false,
2610
2458
  "type": "boolean"
2459
+ },
2460
+ "device": {
2461
+ "char": "d",
2462
+ "description": "Device ID (UUID)",
2463
+ "name": "device",
2464
+ "required": true,
2465
+ "hasDynamicHelp": false,
2466
+ "multiple": false,
2467
+ "type": "option"
2468
+ },
2469
+ "stream": {
2470
+ "char": "s",
2471
+ "description": "Stream name",
2472
+ "name": "stream",
2473
+ "required": true,
2474
+ "hasDynamicHelp": false,
2475
+ "multiple": false,
2476
+ "type": "option"
2477
+ },
2478
+ "tag": {
2479
+ "char": "t",
2480
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
2481
+ "name": "tag",
2482
+ "hasDynamicHelp": false,
2483
+ "multiple": true,
2484
+ "type": "option"
2485
+ },
2486
+ "timestamp": {
2487
+ "description": "Unix timestamp in milliseconds (defaults to now)",
2488
+ "name": "timestamp",
2489
+ "hasDynamicHelp": false,
2490
+ "multiple": false,
2491
+ "type": "option"
2611
2492
  }
2612
2493
  },
2613
2494
  "hasDynamicHelp": false,
2614
2495
  "hiddenAliases": [],
2615
- "id": "device:config",
2496
+ "id": "ingest:text",
2616
2497
  "pluginAlias": "@formant/formant-cli",
2617
2498
  "pluginName": "@formant/formant-cli",
2618
2499
  "pluginType": "core",
2619
2500
  "strict": true,
2620
- "summary": "Get device configuration",
2501
+ "summary": "Ingest text data",
2621
2502
  "enableJsonFlag": true,
2622
2503
  "isESM": true,
2623
2504
  "relativePath": [
2624
2505
  "dist",
2625
2506
  "commands",
2626
- "device",
2627
- "config.js"
2507
+ "ingest",
2508
+ "text.js"
2628
2509
  ]
2629
2510
  },
2630
- "device:create": {
2511
+ "ingest:video": {
2631
2512
  "aliases": [],
2632
- "args": {
2633
- "name": {
2634
- "description": "Name for the new device",
2635
- "name": "name",
2636
- "required": true
2637
- }
2638
- },
2639
- "description": "Create a new device in your fleet.\n\nThe device is created as enabled by default. You can optionally specify tags.",
2513
+ "args": {},
2514
+ "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).",
2640
2515
  "examples": [
2641
- "<%= config.bin %> device create my-robot",
2642
- "<%= config.bin %> device create my-robot --tag location=warehouse --tag env=prod",
2643
- "<%= config.bin %> device create my-robot --json"
2516
+ "<%= config.bin %> ingest video --device <device-id> --stream recordings --url https://example.com/video.mp4 --duration 5000",
2517
+ "<%= config.bin %> ingest video --device <device-id> --stream clips --url https://example.com/clip.webm --duration 3500 --size 2048000",
2518
+ "<%= config.bin %> ingest video --device <device-id> --stream event_video --url https://example.com/event.mov --duration 10000 --tag event=collision"
2644
2519
  ],
2645
2520
  "flags": {
2646
2521
  "json": {
@@ -2670,45 +2545,89 @@
2670
2545
  "allowNo": false,
2671
2546
  "type": "boolean"
2672
2547
  },
2548
+ "device": {
2549
+ "char": "d",
2550
+ "description": "Device ID (UUID)",
2551
+ "name": "device",
2552
+ "required": true,
2553
+ "hasDynamicHelp": false,
2554
+ "multiple": false,
2555
+ "type": "option"
2556
+ },
2557
+ "stream": {
2558
+ "char": "s",
2559
+ "description": "Stream name",
2560
+ "name": "stream",
2561
+ "required": true,
2562
+ "hasDynamicHelp": false,
2563
+ "multiple": false,
2564
+ "type": "option"
2565
+ },
2566
+ "url": {
2567
+ "char": "u",
2568
+ "description": "Video URL (must be http:// or https://)",
2569
+ "name": "url",
2570
+ "required": true,
2571
+ "hasDynamicHelp": false,
2572
+ "multiple": false,
2573
+ "type": "option"
2574
+ },
2575
+ "duration": {
2576
+ "description": "Video duration in milliseconds (required)",
2577
+ "name": "duration",
2578
+ "required": true,
2579
+ "hasDynamicHelp": false,
2580
+ "multiple": false,
2581
+ "type": "option"
2582
+ },
2583
+ "size": {
2584
+ "description": "Video size in bytes (optional)",
2585
+ "name": "size",
2586
+ "hasDynamicHelp": false,
2587
+ "multiple": false,
2588
+ "type": "option"
2589
+ },
2673
2590
  "tag": {
2674
2591
  "char": "t",
2675
- "description": "Tag to apply (key=value), can be specified multiple times",
2592
+ "description": "Tag as key=value where both are strings (can be specified multiple times)",
2676
2593
  "name": "tag",
2677
2594
  "hasDynamicHelp": false,
2678
2595
  "multiple": true,
2679
2596
  "type": "option"
2597
+ },
2598
+ "timestamp": {
2599
+ "description": "Unix timestamp in milliseconds (defaults to now)",
2600
+ "name": "timestamp",
2601
+ "hasDynamicHelp": false,
2602
+ "multiple": false,
2603
+ "type": "option"
2680
2604
  }
2681
2605
  },
2682
2606
  "hasDynamicHelp": false,
2683
2607
  "hiddenAliases": [],
2684
- "id": "device:create",
2608
+ "id": "ingest:video",
2685
2609
  "pluginAlias": "@formant/formant-cli",
2686
2610
  "pluginName": "@formant/formant-cli",
2687
2611
  "pluginType": "core",
2688
2612
  "strict": true,
2689
- "summary": "Create a new device",
2613
+ "summary": "Ingest video data",
2690
2614
  "enableJsonFlag": true,
2691
2615
  "isESM": true,
2692
2616
  "relativePath": [
2693
2617
  "dist",
2694
2618
  "commands",
2695
- "device",
2696
- "create.js"
2619
+ "ingest",
2620
+ "video.js"
2697
2621
  ]
2698
2622
  },
2699
- "device:delete": {
2623
+ "investigation:analytics": {
2700
2624
  "aliases": [],
2701
- "args": {
2702
- "id": {
2703
- "description": "Device ID (UUID)",
2704
- "name": "id",
2705
- "required": true
2706
- }
2707
- },
2708
- "description": "Delete (disable) a device from your fleet.\n\nThis performs a soft-delete by disabling the device. The device and its telemetry\nhistory are preserved but it will no longer appear in device listings.",
2625
+ "args": {},
2626
+ "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.",
2709
2627
  "examples": [
2710
- "<%= config.bin %> device delete <device-id>",
2711
- "<%= config.bin %> device delete <device-id> --json"
2628
+ "<%= config.bin %> investigation analytics --start 2026-01-01 --end 2026-02-01",
2629
+ "<%= config.bin %> investigation analytics --start 2026-01-01 --end 2026-02-01 --interval hourly",
2630
+ "<%= config.bin %> investigation analytics --start 2026-01-01 --end 2026-02-01 --group-by resultType --json"
2712
2631
  ],
2713
2632
  "flags": {
2714
2633
  "json": {
@@ -2737,38 +2656,77 @@
2737
2656
  "name": "stage",
2738
2657
  "allowNo": false,
2739
2658
  "type": "boolean"
2659
+ },
2660
+ "end": {
2661
+ "description": "End time (ISO 8601)",
2662
+ "name": "end",
2663
+ "required": true,
2664
+ "hasDynamicHelp": false,
2665
+ "multiple": false,
2666
+ "type": "option"
2667
+ },
2668
+ "group-by": {
2669
+ "description": "Group results by",
2670
+ "name": "group-by",
2671
+ "hasDynamicHelp": false,
2672
+ "multiple": false,
2673
+ "options": [
2674
+ "resultType",
2675
+ "signalType"
2676
+ ],
2677
+ "type": "option"
2678
+ },
2679
+ "interval": {
2680
+ "description": "Time interval for aggregation",
2681
+ "name": "interval",
2682
+ "default": "daily",
2683
+ "hasDynamicHelp": false,
2684
+ "multiple": false,
2685
+ "options": [
2686
+ "daily",
2687
+ "hourly"
2688
+ ],
2689
+ "type": "option"
2690
+ },
2691
+ "start": {
2692
+ "description": "Start time (ISO 8601)",
2693
+ "name": "start",
2694
+ "required": true,
2695
+ "hasDynamicHelp": false,
2696
+ "multiple": false,
2697
+ "type": "option"
2740
2698
  }
2741
2699
  },
2742
2700
  "hasDynamicHelp": false,
2743
2701
  "hiddenAliases": [],
2744
- "id": "device:delete",
2702
+ "id": "investigation:analytics",
2745
2703
  "pluginAlias": "@formant/formant-cli",
2746
2704
  "pluginName": "@formant/formant-cli",
2747
2705
  "pluginType": "core",
2748
2706
  "strict": true,
2749
- "summary": "Delete (disable) a device",
2707
+ "summary": "Get investigation analytics",
2750
2708
  "enableJsonFlag": true,
2751
2709
  "isESM": true,
2752
2710
  "relativePath": [
2753
2711
  "dist",
2754
2712
  "commands",
2755
- "device",
2756
- "delete.js"
2713
+ "investigation",
2714
+ "analytics.js"
2757
2715
  ]
2758
2716
  },
2759
- "device:get": {
2717
+ "investigation:get": {
2760
2718
  "aliases": [],
2761
2719
  "args": {
2762
2720
  "id": {
2763
- "description": "Device ID (UUID)",
2721
+ "description": "Investigation (taskflow) ID",
2764
2722
  "name": "id",
2765
2723
  "required": true
2766
2724
  }
2767
2725
  },
2768
- "description": "Get detailed information about a specific device by its ID.",
2726
+ "description": "Get detailed information about a specific investigation by ID.",
2769
2727
  "examples": [
2770
- "<%= config.bin %> device get <device-id>",
2771
- "<%= config.bin %> device get <device-id> --json"
2728
+ "<%= config.bin %> investigation get <id>",
2729
+ "<%= config.bin %> investigation get <id> --json"
2772
2730
  ],
2773
2731
  "flags": {
2774
2732
  "json": {
@@ -2801,34 +2759,29 @@
2801
2759
  },
2802
2760
  "hasDynamicHelp": false,
2803
2761
  "hiddenAliases": [],
2804
- "id": "device:get",
2762
+ "id": "investigation:get",
2805
2763
  "pluginAlias": "@formant/formant-cli",
2806
2764
  "pluginName": "@formant/formant-cli",
2807
2765
  "pluginType": "core",
2808
2766
  "strict": true,
2809
- "summary": "Get a device by ID",
2767
+ "summary": "Get an investigation by ID",
2810
2768
  "enableJsonFlag": true,
2811
2769
  "isESM": true,
2812
2770
  "relativePath": [
2813
2771
  "dist",
2814
2772
  "commands",
2815
- "device",
2773
+ "investigation",
2816
2774
  "get.js"
2817
2775
  ]
2818
2776
  },
2819
- "device:last-seen": {
2777
+ "investigation:list": {
2820
2778
  "aliases": [],
2821
- "args": {
2822
- "id": {
2823
- "description": "Device ID (UUID)",
2824
- "name": "id",
2825
- "required": true
2826
- }
2827
- },
2828
- "description": "Get when a device was last seen online.\n\nShows the most recent timestamp when the device was detected as online.",
2779
+ "args": {},
2780
+ "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.",
2829
2781
  "examples": [
2830
- "<%= config.bin %> device last-seen <device-id>",
2831
- "<%= config.bin %> device last-seen <device-id> --json"
2782
+ "<%= config.bin %> investigation list",
2783
+ "<%= config.bin %> investigation list --signal-handler",
2784
+ "<%= config.bin %> investigation list --json"
2832
2785
  ],
2833
2786
  "flags": {
2834
2787
  "json": {
@@ -2857,35 +2810,50 @@
2857
2810
  "name": "stage",
2858
2811
  "allowNo": false,
2859
2812
  "type": "boolean"
2813
+ },
2814
+ "signal-handler": {
2815
+ "description": "Only show investigations that handle signals",
2816
+ "name": "signal-handler",
2817
+ "allowNo": false,
2818
+ "type": "boolean"
2860
2819
  }
2861
2820
  },
2862
2821
  "hasDynamicHelp": false,
2863
2822
  "hiddenAliases": [],
2864
- "id": "device:last-seen",
2823
+ "id": "investigation:list",
2865
2824
  "pluginAlias": "@formant/formant-cli",
2866
2825
  "pluginName": "@formant/formant-cli",
2867
2826
  "pluginType": "core",
2868
2827
  "strict": true,
2869
- "summary": "Get device last seen timestamp",
2828
+ "summary": "List investigations",
2870
2829
  "enableJsonFlag": true,
2871
2830
  "isESM": true,
2872
2831
  "relativePath": [
2873
2832
  "dist",
2874
2833
  "commands",
2875
- "device",
2876
- "last-seen.js"
2834
+ "investigation",
2835
+ "list.js"
2877
2836
  ]
2878
2837
  },
2879
- "device:list": {
2838
+ "investigation:run": {
2880
2839
  "aliases": [],
2881
- "args": {},
2882
- "description": "List robots and sensors in your fleet. Shows only online devices by default.\n\nUse --all to include offline devices.",
2840
+ "args": {
2841
+ "investigationId": {
2842
+ "description": "Investigation (taskflow) ID",
2843
+ "name": "investigationId",
2844
+ "required": true
2845
+ },
2846
+ "runId": {
2847
+ "description": "Run ID",
2848
+ "name": "runId",
2849
+ "required": true
2850
+ }
2851
+ },
2852
+ "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.",
2883
2853
  "examples": [
2884
- "<%= config.bin %> device list",
2885
- "<%= config.bin %> device list --all",
2886
- "<%= config.bin %> device list --all --limit 100",
2887
- "<%= config.bin %> device list --tag location=warehouse",
2888
- "<%= config.bin %> device list --name robot --dev --json"
2854
+ "<%= config.bin %> investigation run <investigation-id> <run-id>",
2855
+ "<%= config.bin %> investigation run <investigation-id> <run-id> --log-only",
2856
+ "<%= config.bin %> investigation run <investigation-id> <run-id> --json"
2889
2857
  ],
2890
2858
  "flags": {
2891
2859
  "json": {
@@ -2915,74 +2883,50 @@
2915
2883
  "allowNo": false,
2916
2884
  "type": "boolean"
2917
2885
  },
2918
- "all": {
2919
- "char": "a",
2920
- "description": "Show all devices (online and offline)",
2921
- "name": "all",
2886
+ "log-only": {
2887
+ "description": "Only show the execution log (skip run details)",
2888
+ "name": "log-only",
2922
2889
  "allowNo": false,
2923
2890
  "type": "boolean"
2924
2891
  },
2925
- "limit": {
2926
- "char": "l",
2927
- "description": "Maximum number of devices to return",
2928
- "name": "limit",
2929
- "default": 50,
2930
- "hasDynamicHelp": false,
2931
- "multiple": false,
2932
- "type": "option"
2933
- },
2934
- "name": {
2935
- "char": "n",
2936
- "description": "Filter devices by name (search)",
2937
- "name": "name",
2938
- "hasDynamicHelp": false,
2939
- "multiple": false,
2940
- "type": "option"
2941
- },
2942
- "tag": {
2943
- "char": "t",
2944
- "description": "Filter by tag (key=value), can be specified multiple times",
2945
- "name": "tag",
2946
- "hasDynamicHelp": false,
2947
- "multiple": true,
2948
- "type": "option"
2892
+ "trace-signal": {
2893
+ "description": "Fetch and display the signal and event information for this run",
2894
+ "name": "trace-signal",
2895
+ "allowNo": false,
2896
+ "type": "boolean"
2949
2897
  }
2950
2898
  },
2951
2899
  "hasDynamicHelp": false,
2952
2900
  "hiddenAliases": [],
2953
- "id": "device:list",
2901
+ "id": "investigation:run",
2954
2902
  "pluginAlias": "@formant/formant-cli",
2955
2903
  "pluginName": "@formant/formant-cli",
2956
2904
  "pluginType": "core",
2957
2905
  "strict": true,
2958
- "summary": "List robots and sensors in your fleet",
2906
+ "summary": "Get investigation run details and execution log",
2959
2907
  "enableJsonFlag": true,
2960
2908
  "isESM": true,
2961
2909
  "relativePath": [
2962
2910
  "dist",
2963
2911
  "commands",
2964
- "device",
2965
- "list.js"
2912
+ "investigation",
2913
+ "run.js"
2966
2914
  ]
2967
2915
  },
2968
- "device:rename": {
2916
+ "investigation:runs-list": {
2969
2917
  "aliases": [],
2970
2918
  "args": {
2971
2919
  "id": {
2972
- "description": "Device ID (UUID)",
2920
+ "description": "Investigation (taskflow) ID",
2973
2921
  "name": "id",
2974
2922
  "required": true
2975
- },
2976
- "name": {
2977
- "description": "New name for the device",
2978
- "name": "name",
2979
- "required": true
2980
2923
  }
2981
2924
  },
2982
- "description": "Rename a device by updating its name.",
2925
+ "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.",
2983
2926
  "examples": [
2984
- "<%= config.bin %> device rename <device-id> new-robot-name",
2985
- "<%= config.bin %> device rename <device-id> new-robot-name --json"
2927
+ "<%= config.bin %> investigation runs-list <id>",
2928
+ "<%= config.bin %> investigation runs-list <id> --limit 50",
2929
+ "<%= config.bin %> investigation runs-list <id> --details --json"
2986
2930
  ],
2987
2931
  "flags": {
2988
2932
  "json": {
@@ -3011,39 +2955,62 @@
3011
2955
  "name": "stage",
3012
2956
  "allowNo": false,
3013
2957
  "type": "boolean"
2958
+ },
2959
+ "details": {
2960
+ "description": "Include detailed information about each run",
2961
+ "name": "details",
2962
+ "allowNo": false,
2963
+ "type": "boolean"
2964
+ },
2965
+ "limit": {
2966
+ "char": "l",
2967
+ "description": "Maximum number of runs to return",
2968
+ "name": "limit",
2969
+ "default": 20,
2970
+ "hasDynamicHelp": false,
2971
+ "multiple": false,
2972
+ "type": "option"
2973
+ },
2974
+ "offset": {
2975
+ "char": "o",
2976
+ "description": "Offset for pagination",
2977
+ "name": "offset",
2978
+ "default": 0,
2979
+ "hasDynamicHelp": false,
2980
+ "multiple": false,
2981
+ "type": "option"
3014
2982
  }
3015
2983
  },
3016
2984
  "hasDynamicHelp": false,
3017
2985
  "hiddenAliases": [],
3018
- "id": "device:rename",
2986
+ "id": "investigation:runs-list",
3019
2987
  "pluginAlias": "@formant/formant-cli",
3020
2988
  "pluginName": "@formant/formant-cli",
3021
2989
  "pluginType": "core",
3022
2990
  "strict": true,
3023
- "summary": "Rename a device",
2991
+ "summary": "List actual investigation runs",
3024
2992
  "enableJsonFlag": true,
3025
2993
  "isESM": true,
3026
2994
  "relativePath": [
3027
2995
  "dist",
3028
2996
  "commands",
3029
- "device",
3030
- "rename.js"
2997
+ "investigation",
2998
+ "runs-list.js"
3031
2999
  ]
3032
3000
  },
3033
- "device:streams": {
3001
+ "investigation:runs": {
3034
3002
  "aliases": [],
3035
3003
  "args": {
3036
3004
  "id": {
3037
- "description": "Device ID (UUID)",
3005
+ "description": "Investigation (taskflow) ID",
3038
3006
  "name": "id",
3039
3007
  "required": true
3040
3008
  }
3041
3009
  },
3042
- "description": "List telemetry streams for a device.\n\nShows streams parsed from the device configuration as well as any streams\ndiscovered from actual ingested data (even if not explicitly configured).\nUnconfigured streams are marked with a SOURCE of \"data\" in the output.",
3010
+ "description": "List evaluation runs for a specific investigation.",
3043
3011
  "examples": [
3044
- "<%= config.bin %> device streams <device-id>",
3045
- "<%= config.bin %> device streams <device-id> --json",
3046
- "<%= config.bin %> device streams <device-id> --days 30"
3012
+ "<%= config.bin %> investigation runs <id>",
3013
+ "<%= config.bin %> investigation runs <id> --json"
3047
3014
  ],
3048
3015
  "flags": {
3049
3016
  "json": {
@@ -3067,52 +3034,37 @@
3067
3034
  "description": "Target the stage environment",
3068
3035
  "exclusive": [
3069
3036
  "dev"
3070
- ],
3071
- "helpGroup": "GLOBAL",
3072
- "name": "stage",
3073
- "allowNo": false,
3074
- "type": "boolean"
3075
- },
3076
- "days": {
3077
- "description": "How many days back to look for unconfigured streams in ingested data",
3078
- "name": "days",
3079
- "default": 14,
3080
- "hasDynamicHelp": false,
3081
- "multiple": false,
3082
- "type": "option"
3037
+ ],
3038
+ "helpGroup": "GLOBAL",
3039
+ "name": "stage",
3040
+ "allowNo": false,
3041
+ "type": "boolean"
3083
3042
  }
3084
3043
  },
3085
3044
  "hasDynamicHelp": false,
3086
3045
  "hiddenAliases": [],
3087
- "id": "device:streams",
3046
+ "id": "investigation:runs",
3088
3047
  "pluginAlias": "@formant/formant-cli",
3089
3048
  "pluginName": "@formant/formant-cli",
3090
3049
  "pluginType": "core",
3091
3050
  "strict": true,
3092
- "summary": "List device streams",
3051
+ "summary": "List runs for an investigation",
3093
3052
  "enableJsonFlag": true,
3094
3053
  "isESM": true,
3095
3054
  "relativePath": [
3096
3055
  "dist",
3097
3056
  "commands",
3098
- "device",
3099
- "streams.js"
3057
+ "investigation",
3058
+ "runs.js"
3100
3059
  ]
3101
3060
  },
3102
- "device:tag": {
3061
+ "investigation:stats": {
3103
3062
  "aliases": [],
3104
- "args": {
3105
- "id": {
3106
- "description": "Device ID (UUID)",
3107
- "name": "id",
3108
- "required": true
3109
- }
3110
- },
3111
- "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.",
3063
+ "args": {},
3064
+ "description": "Get investigation statistics for a time range.",
3112
3065
  "examples": [
3113
- "<%= config.bin %> device tag <device-id> --tag location=warehouse",
3114
- "<%= config.bin %> device tag <device-id> --tag env=prod --tag region=us-east",
3115
- "<%= config.bin %> device tag <device-id> --tag location=factory --json"
3066
+ "<%= config.bin %> investigation stats --start 2026-01-01 --end 2026-02-01",
3067
+ "<%= config.bin %> investigation stats --start 2026-01-01 --end 2026-02-01 --json"
3116
3068
  ],
3117
3069
  "flags": {
3118
3070
  "json": {
@@ -3142,47 +3094,53 @@
3142
3094
  "allowNo": false,
3143
3095
  "type": "boolean"
3144
3096
  },
3145
- "tag": {
3146
- "char": "t",
3147
- "description": "Tag to add or update (key=value), can be specified multiple times",
3148
- "name": "tag",
3097
+ "end": {
3098
+ "description": "End time (ISO 8601)",
3099
+ "name": "end",
3149
3100
  "required": true,
3150
3101
  "hasDynamicHelp": false,
3151
- "multiple": true,
3102
+ "multiple": false,
3103
+ "type": "option"
3104
+ },
3105
+ "start": {
3106
+ "description": "Start time (ISO 8601)",
3107
+ "name": "start",
3108
+ "required": true,
3109
+ "hasDynamicHelp": false,
3110
+ "multiple": false,
3152
3111
  "type": "option"
3153
3112
  }
3154
3113
  },
3155
3114
  "hasDynamicHelp": false,
3156
3115
  "hiddenAliases": [],
3157
- "id": "device:tag",
3116
+ "id": "investigation:stats",
3158
3117
  "pluginAlias": "@formant/formant-cli",
3159
3118
  "pluginName": "@formant/formant-cli",
3160
3119
  "pluginType": "core",
3161
3120
  "strict": true,
3162
- "summary": "Add or update tags on a device",
3121
+ "summary": "Get investigation stats",
3163
3122
  "enableJsonFlag": true,
3164
3123
  "isESM": true,
3165
3124
  "relativePath": [
3166
3125
  "dist",
3167
3126
  "commands",
3168
- "device",
3169
- "tag.js"
3127
+ "investigation",
3128
+ "stats.js"
3170
3129
  ]
3171
3130
  },
3172
- "device:untag": {
3131
+ "investigation:trigger": {
3173
3132
  "aliases": [],
3174
3133
  "args": {
3175
3134
  "id": {
3176
- "description": "Device ID (UUID)",
3135
+ "description": "Investigation (taskflow) ID",
3177
3136
  "name": "id",
3178
3137
  "required": true
3179
3138
  }
3180
3139
  },
3181
- "description": "Remove tags from a device.\n\nSpecify one or more tag keys to remove with --key.",
3140
+ "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.",
3182
3141
  "examples": [
3183
- "<%= config.bin %> device untag <device-id> --key location",
3184
- "<%= config.bin %> device untag <device-id> --key env --key region",
3185
- "<%= config.bin %> device untag <device-id> --key location --json"
3142
+ "<%= config.bin %> investigation trigger <id> --input \"Robot stopped responding\"",
3143
+ "<%= config.bin %> investigation trigger <id> --input \"Battery draining fast on device X\" --json"
3186
3144
  ],
3187
3145
  "flags": {
3188
3146
  "json": {
@@ -3212,31 +3170,38 @@
3212
3170
  "allowNo": false,
3213
3171
  "type": "boolean"
3214
3172
  },
3215
- "key": {
3216
- "char": "k",
3217
- "description": "Tag key to remove, can be specified multiple times",
3218
- "name": "key",
3173
+ "input": {
3174
+ "char": "i",
3175
+ "description": "Input text / problem description for the investigation",
3176
+ "name": "input",
3219
3177
  "required": true,
3220
3178
  "hasDynamicHelp": false,
3221
- "multiple": true,
3179
+ "multiple": false,
3180
+ "type": "option"
3181
+ },
3182
+ "signal-id": {
3183
+ "description": "Optional signal ID to associate with this run",
3184
+ "name": "signal-id",
3185
+ "hasDynamicHelp": false,
3186
+ "multiple": false,
3222
3187
  "type": "option"
3223
3188
  }
3224
3189
  },
3225
3190
  "hasDynamicHelp": false,
3226
3191
  "hiddenAliases": [],
3227
- "id": "device:untag",
3192
+ "id": "investigation:trigger",
3228
3193
  "pluginAlias": "@formant/formant-cli",
3229
3194
  "pluginName": "@formant/formant-cli",
3230
3195
  "pluginType": "core",
3231
3196
  "strict": true,
3232
- "summary": "Remove tags from a device",
3197
+ "summary": "Trigger an investigation",
3233
3198
  "enableJsonFlag": true,
3234
3199
  "isESM": true,
3235
3200
  "relativePath": [
3236
3201
  "dist",
3237
3202
  "commands",
3238
- "device",
3239
- "untag.js"
3203
+ "investigation",
3204
+ "trigger.js"
3240
3205
  ]
3241
3206
  },
3242
3207
  "query": {
@@ -3443,19 +3408,25 @@
3443
3408
  "latest-values.js"
3444
3409
  ]
3445
3410
  },
3446
- "schedule:get": {
3411
+ "persona:delegate-task": {
3447
3412
  "aliases": [],
3448
3413
  "args": {
3449
3414
  "id": {
3450
- "description": "Schedule ID (UUID)",
3415
+ "description": "Persona ID (UUID)",
3451
3416
  "name": "id",
3452
3417
  "required": true
3418
+ },
3419
+ "goal": {
3420
+ "description": "The task goal / instruction for the persona",
3421
+ "name": "goal",
3422
+ "required": true
3453
3423
  }
3454
3424
  },
3455
- "description": "Get detailed information about a schedule.\n\nShows the full schedule configuration including cron expression, command template,\ninvestigation link, and execution settings.",
3425
+ "description": "Delegate a task to a persona for async execution.\n\nCreates a task with the given goal, assigns it to the persona, and queues it to run in the background. Returns immediately with a task ID you can use to check status later via \"persona task-status\".",
3456
3426
  "examples": [
3457
- "<%= config.bin %> schedule get <schedule-id>",
3458
- "<%= config.bin %> schedule get <schedule-id> --json"
3427
+ "<%= config.bin %> persona delegate-task <persona-id> \"Analyze recent device failures and summarize findings\"",
3428
+ "<%= config.bin %> persona delegate-task <persona-id> \"Generate a daily report of fleet health\" --name \"Daily Fleet Report\"",
3429
+ "<%= config.bin %> persona delegate-task <persona-id> \"Check all offline devices\" --dev"
3459
3430
  ],
3460
3431
  "flags": {
3461
3432
  "json": {
@@ -3484,32 +3455,47 @@
3484
3455
  "name": "stage",
3485
3456
  "allowNo": false,
3486
3457
  "type": "boolean"
3458
+ },
3459
+ "name": {
3460
+ "char": "n",
3461
+ "description": "Task name (defaults to first 50 chars of goal)",
3462
+ "name": "name",
3463
+ "hasDynamicHelp": false,
3464
+ "multiple": false,
3465
+ "type": "option"
3487
3466
  }
3488
3467
  },
3489
3468
  "hasDynamicHelp": false,
3490
3469
  "hiddenAliases": [],
3491
- "id": "schedule:get",
3470
+ "id": "persona:delegate-task",
3492
3471
  "pluginAlias": "@formant/formant-cli",
3493
3472
  "pluginName": "@formant/formant-cli",
3494
3473
  "pluginType": "core",
3495
3474
  "strict": true,
3496
- "summary": "Get schedule details",
3475
+ "summary": "Delegate an async task to a persona",
3497
3476
  "enableJsonFlag": true,
3498
3477
  "isESM": true,
3499
3478
  "relativePath": [
3500
3479
  "dist",
3501
3480
  "commands",
3502
- "schedule",
3503
- "get.js"
3481
+ "persona",
3482
+ "delegate-task.js"
3504
3483
  ]
3505
3484
  },
3506
- "schedule:list": {
3485
+ "persona:get": {
3507
3486
  "aliases": [],
3508
- "args": {},
3509
- "description": "List all schedules in your organization.\n\nSchedules can trigger commands or investigations on a recurring (cron) or one-time basis.",
3487
+ "args": {
3488
+ "id": {
3489
+ "description": "Persona ID (UUID)",
3490
+ "name": "id",
3491
+ "required": true
3492
+ }
3493
+ },
3494
+ "description": "Get detailed information about a persona including its integrations and available tools.\n\nUses the user-level persona endpoint which merges org, persona, and user configurations.",
3510
3495
  "examples": [
3511
- "<%= config.bin %> schedule list",
3512
- "<%= config.bin %> schedule list --json"
3496
+ "<%= config.bin %> personas get <persona-id>",
3497
+ "<%= config.bin %> personas get <persona-id> --json",
3498
+ "<%= config.bin %> personas get <persona-id> --dev"
3513
3499
  ],
3514
3500
  "flags": {
3515
3501
  "json": {
@@ -3542,40 +3528,29 @@
3542
3528
  },
3543
3529
  "hasDynamicHelp": false,
3544
3530
  "hiddenAliases": [],
3545
- "id": "schedule:list",
3531
+ "id": "persona:get",
3546
3532
  "pluginAlias": "@formant/formant-cli",
3547
3533
  "pluginName": "@formant/formant-cli",
3548
3534
  "pluginType": "core",
3549
3535
  "strict": true,
3550
- "summary": "List schedules",
3536
+ "summary": "Get persona details and tools",
3551
3537
  "enableJsonFlag": true,
3552
3538
  "isESM": true,
3553
3539
  "relativePath": [
3554
3540
  "dist",
3555
3541
  "commands",
3556
- "schedule",
3557
- "list.js"
3542
+ "persona",
3543
+ "get.js"
3558
3544
  ]
3559
3545
  },
3560
- "persona:delegate-task": {
3546
+ "persona:list": {
3561
3547
  "aliases": [],
3562
- "args": {
3563
- "id": {
3564
- "description": "Persona ID (UUID)",
3565
- "name": "id",
3566
- "required": true
3567
- },
3568
- "goal": {
3569
- "description": "The task goal / instruction for the persona",
3570
- "name": "goal",
3571
- "required": true
3572
- }
3573
- },
3574
- "description": "Delegate a task to a persona for async execution.\n\nCreates a task with the given goal, assigns it to the persona, and queues it to run in the background. Returns immediately with a task ID you can use to check status later via \"persona task-status\".",
3548
+ "args": {},
3549
+ "description": "List AI personas available in your organization.\n\nShows both built-in and custom personas with their ID, name, and description.",
3575
3550
  "examples": [
3576
- "<%= config.bin %> persona delegate-task <persona-id> \"Analyze recent device failures and summarize findings\"",
3577
- "<%= config.bin %> persona delegate-task <persona-id> \"Generate a daily report of fleet health\" --name \"Daily Fleet Report\"",
3578
- "<%= config.bin %> persona delegate-task <persona-id> \"Check all offline devices\" --dev"
3551
+ "<%= config.bin %> personas list",
3552
+ "<%= config.bin %> personas list --json",
3553
+ "<%= config.bin %> personas list --dev"
3579
3554
  ],
3580
3555
  "flags": {
3581
3556
  "json": {
@@ -3604,47 +3579,39 @@
3604
3579
  "name": "stage",
3605
3580
  "allowNo": false,
3606
3581
  "type": "boolean"
3607
- },
3608
- "name": {
3609
- "char": "n",
3610
- "description": "Task name (defaults to first 50 chars of goal)",
3611
- "name": "name",
3612
- "hasDynamicHelp": false,
3613
- "multiple": false,
3614
- "type": "option"
3615
3582
  }
3616
3583
  },
3617
3584
  "hasDynamicHelp": false,
3618
3585
  "hiddenAliases": [],
3619
- "id": "persona:delegate-task",
3586
+ "id": "persona:list",
3620
3587
  "pluginAlias": "@formant/formant-cli",
3621
3588
  "pluginName": "@formant/formant-cli",
3622
3589
  "pluginType": "core",
3623
3590
  "strict": true,
3624
- "summary": "Delegate an async task to a persona",
3591
+ "summary": "List AI personas",
3625
3592
  "enableJsonFlag": true,
3626
3593
  "isESM": true,
3627
3594
  "relativePath": [
3628
3595
  "dist",
3629
3596
  "commands",
3630
3597
  "persona",
3631
- "delegate-task.js"
3598
+ "list.js"
3632
3599
  ]
3633
3600
  },
3634
- "persona:get": {
3601
+ "persona:task-status": {
3635
3602
  "aliases": [],
3636
3603
  "args": {
3637
- "id": {
3638
- "description": "Persona ID (UUID)",
3639
- "name": "id",
3604
+ "taskId": {
3605
+ "description": "Task ID (from delegate-task output)",
3606
+ "name": "taskId",
3640
3607
  "required": true
3641
3608
  }
3642
3609
  },
3643
- "description": "Get detailed information about a persona including its integrations and available tools.\n\nUses the user-level persona endpoint which merges org, persona, and user configurations.",
3610
+ "description": "Check the status and results of a delegated task.\n\nShows all runs for a task including their status, result summary, and timestamps.",
3644
3611
  "examples": [
3645
- "<%= config.bin %> personas get <persona-id>",
3646
- "<%= config.bin %> personas get <persona-id> --json",
3647
- "<%= config.bin %> personas get <persona-id> --dev"
3612
+ "<%= config.bin %> persona task-status <task-id>",
3613
+ "<%= config.bin %> persona task-status <task-id> --json",
3614
+ "<%= config.bin %> persona task-status <task-id> --dev"
3648
3615
  ],
3649
3616
  "flags": {
3650
3617
  "json": {
@@ -3677,29 +3644,34 @@
3677
3644
  },
3678
3645
  "hasDynamicHelp": false,
3679
3646
  "hiddenAliases": [],
3680
- "id": "persona:get",
3647
+ "id": "persona:task-status",
3681
3648
  "pluginAlias": "@formant/formant-cli",
3682
3649
  "pluginName": "@formant/formant-cli",
3683
3650
  "pluginType": "core",
3684
3651
  "strict": true,
3685
- "summary": "Get persona details and tools",
3652
+ "summary": "Check status of a delegated task",
3686
3653
  "enableJsonFlag": true,
3687
3654
  "isESM": true,
3688
3655
  "relativePath": [
3689
3656
  "dist",
3690
3657
  "commands",
3691
3658
  "persona",
3692
- "get.js"
3659
+ "task-status.js"
3693
3660
  ]
3694
3661
  },
3695
- "persona:list": {
3662
+ "schedule:get": {
3696
3663
  "aliases": [],
3697
- "args": {},
3698
- "description": "List AI personas available in your organization.\n\nShows both built-in and custom personas with their ID, name, and description.",
3664
+ "args": {
3665
+ "id": {
3666
+ "description": "Schedule ID (UUID)",
3667
+ "name": "id",
3668
+ "required": true
3669
+ }
3670
+ },
3671
+ "description": "Get detailed information about a schedule.\n\nShows the full schedule configuration including cron expression, command template,\ninvestigation link, and execution settings.",
3699
3672
  "examples": [
3700
- "<%= config.bin %> personas list",
3701
- "<%= config.bin %> personas list --json",
3702
- "<%= config.bin %> personas list --dev"
3673
+ "<%= config.bin %> schedule get <schedule-id>",
3674
+ "<%= config.bin %> schedule get <schedule-id> --json"
3703
3675
  ],
3704
3676
  "flags": {
3705
3677
  "json": {
@@ -3732,35 +3704,28 @@
3732
3704
  },
3733
3705
  "hasDynamicHelp": false,
3734
3706
  "hiddenAliases": [],
3735
- "id": "persona:list",
3707
+ "id": "schedule:get",
3736
3708
  "pluginAlias": "@formant/formant-cli",
3737
3709
  "pluginName": "@formant/formant-cli",
3738
3710
  "pluginType": "core",
3739
3711
  "strict": true,
3740
- "summary": "List AI personas",
3712
+ "summary": "Get schedule details",
3741
3713
  "enableJsonFlag": true,
3742
3714
  "isESM": true,
3743
3715
  "relativePath": [
3744
3716
  "dist",
3745
3717
  "commands",
3746
- "persona",
3747
- "list.js"
3718
+ "schedule",
3719
+ "get.js"
3748
3720
  ]
3749
3721
  },
3750
- "persona:task-status": {
3722
+ "schedule:list": {
3751
3723
  "aliases": [],
3752
- "args": {
3753
- "taskId": {
3754
- "description": "Task ID (from delegate-task output)",
3755
- "name": "taskId",
3756
- "required": true
3757
- }
3758
- },
3759
- "description": "Check the status and results of a delegated task.\n\nShows all runs for a task including their status, result summary, and timestamps.",
3724
+ "args": {},
3725
+ "description": "List all schedules in your organization.\n\nSchedules can trigger commands or investigations on a recurring (cron) or one-time basis.",
3760
3726
  "examples": [
3761
- "<%= config.bin %> persona task-status <task-id>",
3762
- "<%= config.bin %> persona task-status <task-id> --json",
3763
- "<%= config.bin %> persona task-status <task-id> --dev"
3727
+ "<%= config.bin %> schedule list",
3728
+ "<%= config.bin %> schedule list --json"
3764
3729
  ],
3765
3730
  "flags": {
3766
3731
  "json": {
@@ -3793,19 +3758,19 @@
3793
3758
  },
3794
3759
  "hasDynamicHelp": false,
3795
3760
  "hiddenAliases": [],
3796
- "id": "persona:task-status",
3761
+ "id": "schedule:list",
3797
3762
  "pluginAlias": "@formant/formant-cli",
3798
3763
  "pluginName": "@formant/formant-cli",
3799
3764
  "pluginType": "core",
3800
3765
  "strict": true,
3801
- "summary": "Check status of a delegated task",
3766
+ "summary": "List schedules",
3802
3767
  "enableJsonFlag": true,
3803
3768
  "isESM": true,
3804
3769
  "relativePath": [
3805
3770
  "dist",
3806
3771
  "commands",
3807
- "persona",
3808
- "task-status.js"
3772
+ "schedule",
3773
+ "list.js"
3809
3774
  ]
3810
3775
  },
3811
3776
  "user:get": {
@@ -4382,5 +4347,5 @@
4382
4347
  ]
4383
4348
  }
4384
4349
  },
4385
- "version": "0.4.2"
4350
+ "version": "0.4.3"
4386
4351
  }