@trillboards/cli 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +414 -43
  2. package/dist/ads-client.d.ts +146 -0
  3. package/dist/ads-client.js +310 -0
  4. package/dist/agent-hook.d.ts +64 -0
  5. package/dist/agent-hook.js +96 -0
  6. package/dist/capability.d.ts +31 -0
  7. package/dist/capability.js +67 -0
  8. package/dist/claude-settings.d.ts +64 -0
  9. package/dist/claude-settings.js +126 -0
  10. package/dist/commands/ads/disable.d.ts +10 -0
  11. package/dist/commands/ads/disable.js +25 -0
  12. package/dist/commands/ads/enable.d.ts +11 -0
  13. package/dist/commands/ads/enable.js +32 -0
  14. package/dist/commands/ads/hook.d.ts +16 -0
  15. package/dist/commands/ads/hook.js +90 -0
  16. package/dist/commands/ads/login.d.ts +21 -0
  17. package/dist/commands/ads/login.js +108 -0
  18. package/dist/commands/ads/start.d.ts +20 -0
  19. package/dist/commands/ads/start.js +175 -0
  20. package/dist/commands/code.d.ts +12 -0
  21. package/dist/commands/code.js +84 -0
  22. package/dist/commands/devices/reconcile.d.ts +10 -0
  23. package/dist/commands/devices/reconcile.js +94 -0
  24. package/dist/commands/generated/generated-device-heartbeat-get.d.ts +14 -0
  25. package/dist/commands/generated/generated-device-heartbeat-get.js +32 -0
  26. package/dist/commands/generated/generated-federated-get-latest-model-descriptor.d.ts +19 -0
  27. package/dist/commands/generated/generated-federated-get-latest-model-descriptor.js +47 -0
  28. package/dist/commands/generated/generated-federated-get-model-weights.d.ts +19 -0
  29. package/dist/commands/generated/generated-federated-get-model-weights.js +47 -0
  30. package/dist/commands/generated/generated-federated-gradient-upload.d.ts +13 -0
  31. package/dist/commands/generated/generated-federated-gradient-upload.js +32 -0
  32. package/dist/commands/generated/generated-federated-performance-upload.d.ts +13 -0
  33. package/dist/commands/generated/generated-federated-performance-upload.js +32 -0
  34. package/dist/commands/generated/generated-federated-taste-upload.d.ts +13 -0
  35. package/dist/commands/generated/generated-federated-taste-upload.js +32 -0
  36. package/dist/commands/generated/generated-post-device-heartbeat.d.ts +15 -0
  37. package/dist/commands/generated/generated-post-device-heartbeat.js +35 -0
  38. package/dist/commands/listen.js +9 -1
  39. package/dist/commands/logs/tail.js +10 -1
  40. package/dist/config.d.ts +21 -0
  41. package/dist/config.js +34 -9
  42. package/dist/dead-time.d.ts +51 -0
  43. package/dist/dead-time.js +119 -0
  44. package/dist/format-helpers.d.ts +6 -0
  45. package/dist/format-helpers.js +10 -0
  46. package/dist/http.d.ts +8 -1
  47. package/dist/http.js +6 -1
  48. package/dist/machine-id.d.ts +12 -0
  49. package/dist/machine-id.js +22 -0
  50. package/dist/pty-wrapper.d.ts +46 -0
  51. package/dist/pty-wrapper.js +245 -0
  52. package/dist/render-runner.d.ts +48 -0
  53. package/dist/render-runner.js +151 -0
  54. package/dist/render.d.ts +82 -0
  55. package/dist/render.js +124 -0
  56. package/dist/user-auth.d.ts +57 -0
  57. package/dist/user-auth.js +110 -0
  58. package/oclif.manifest.json +1140 -255
  59. package/package.json +9 -2
@@ -133,6 +133,60 @@
133
133
  "billing.js"
134
134
  ]
135
135
  },
136
+ "code": {
137
+ "aliases": [],
138
+ "args": {},
139
+ "description": "Wrap your coding agent and earn from its dead-time (plays text/image/video ads while it thinks)",
140
+ "examples": [
141
+ "<%= config.bin %> code",
142
+ "<%= config.bin %> code claude",
143
+ "<%= config.bin %> code -- codex --foo"
144
+ ],
145
+ "flags": {
146
+ "api-key": {
147
+ "description": "API key (or set TRILLBOARDS_API_KEY env var)",
148
+ "env": "TRILLBOARDS_API_KEY",
149
+ "name": "api-key",
150
+ "hasDynamicHelp": false,
151
+ "multiple": false,
152
+ "type": "option"
153
+ },
154
+ "base-url": {
155
+ "description": "API base URL",
156
+ "name": "base-url",
157
+ "default": "https://api.trillboards.com",
158
+ "hasDynamicHelp": false,
159
+ "multiple": false,
160
+ "type": "option"
161
+ },
162
+ "format": {
163
+ "description": "Output format",
164
+ "name": "format",
165
+ "hasDynamicHelp": false,
166
+ "multiple": false,
167
+ "options": [
168
+ "json",
169
+ "table",
170
+ "yaml"
171
+ ],
172
+ "type": "option"
173
+ }
174
+ },
175
+ "hasDynamicHelp": false,
176
+ "hiddenAliases": [],
177
+ "id": "code",
178
+ "pluginAlias": "@trillboards/cli",
179
+ "pluginName": "@trillboards/cli",
180
+ "pluginType": "core",
181
+ "strict": false,
182
+ "enableJsonFlag": false,
183
+ "isESM": true,
184
+ "relativePath": [
185
+ "dist",
186
+ "commands",
187
+ "code.js"
188
+ ]
189
+ },
136
190
  "debug": {
137
191
  "aliases": [],
138
192
  "args": {
@@ -754,20 +808,12 @@
754
808
  "whoami.js"
755
809
  ]
756
810
  },
757
- "audience:live": {
811
+ "ads:disable": {
758
812
  "aliases": [],
759
- "args": {
760
- "screen_id": {
761
- "description": "Screen ID to monitor",
762
- "name": "screen_id",
763
- "required": true
764
- }
765
- },
766
- "description": "Real-time audience sensing data for a screen",
813
+ "args": {},
814
+ "description": "Turn off the in-place sponsored lines (removes the Claude Code dead-time hook).",
767
815
  "examples": [
768
- "<%= config.bin %> audience live scr_abc123",
769
- "<%= config.bin %> audience live scr_abc123 --format json",
770
- "<%= config.bin %> audience live scr_abc123 --interval 3"
816
+ "<%= config.bin %> ads disable"
771
817
  ],
772
818
  "flags": {
773
819
  "api-key": {
@@ -797,19 +843,11 @@
797
843
  "yaml"
798
844
  ],
799
845
  "type": "option"
800
- },
801
- "interval": {
802
- "description": "Polling interval in seconds",
803
- "name": "interval",
804
- "default": 5,
805
- "hasDynamicHelp": false,
806
- "multiple": false,
807
- "type": "option"
808
846
  }
809
847
  },
810
848
  "hasDynamicHelp": false,
811
849
  "hiddenAliases": [],
812
- "id": "audience:live",
850
+ "id": "ads:disable",
813
851
  "pluginAlias": "@trillboards/cli",
814
852
  "pluginName": "@trillboards/cli",
815
853
  "pluginType": "core",
@@ -819,18 +857,16 @@
819
857
  "relativePath": [
820
858
  "dist",
821
859
  "commands",
822
- "audience",
823
- "live.js"
860
+ "ads",
861
+ "disable.js"
824
862
  ]
825
863
  },
826
- "billing:usage": {
864
+ "ads:enable": {
827
865
  "aliases": [],
828
866
  "args": {},
829
- "description": "Billing usage details with optional per-product breakdown",
867
+ "description": "Turn on in-place sponsored lines in Claude Code (installs the dead-time hook). Opt-in; undo with `ads disable`.",
830
868
  "examples": [
831
- "<%= config.bin %> billing usage",
832
- "<%= config.bin %> billing usage --breakdown",
833
- "<%= config.bin %> billing usage --format json"
869
+ "<%= config.bin %> ads enable"
834
870
  ],
835
871
  "flags": {
836
872
  "api-key": {
@@ -860,17 +896,11 @@
860
896
  "yaml"
861
897
  ],
862
898
  "type": "option"
863
- },
864
- "breakdown": {
865
- "description": "Show per-product breakdown table",
866
- "name": "breakdown",
867
- "allowNo": false,
868
- "type": "boolean"
869
899
  }
870
900
  },
871
901
  "hasDynamicHelp": false,
872
902
  "hiddenAliases": [],
873
- "id": "billing:usage",
903
+ "id": "ads:enable",
874
904
  "pluginAlias": "@trillboards/cli",
875
905
  "pluginName": "@trillboards/cli",
876
906
  "pluginType": "core",
@@ -880,24 +910,40 @@
880
910
  "relativePath": [
881
911
  "dist",
882
912
  "commands",
883
- "billing",
884
- "usage.js"
913
+ "ads",
914
+ "enable.js"
885
915
  ]
886
916
  },
887
- "errors": {
917
+ "ads:hook": {
888
918
  "aliases": [],
889
- "args": {
890
- "code": {
891
- "description": "Error code to look up (e.g. screen_not_found)",
892
- "name": "code",
893
- "required": false
894
- }
895
- },
896
- "description": "Look up error codes from the error catalog",
919
+ "args": {},
920
+ "description": "Internal: Claude Code dead-time hook handler (renders an in-place sponsor line).",
921
+ "flags": {},
922
+ "hasDynamicHelp": false,
923
+ "hidden": true,
924
+ "hiddenAliases": [],
925
+ "id": "ads:hook",
926
+ "pluginAlias": "@trillboards/cli",
927
+ "pluginName": "@trillboards/cli",
928
+ "pluginType": "core",
929
+ "strict": false,
930
+ "enableJsonFlag": false,
931
+ "isESM": true,
932
+ "relativePath": [
933
+ "dist",
934
+ "commands",
935
+ "ads",
936
+ "hook.js"
937
+ ]
938
+ },
939
+ "ads:login": {
940
+ "aliases": [],
941
+ "args": {},
942
+ "description": "Log in to the agent-ads program with your Trillboards account (email + password)",
897
943
  "examples": [
898
- "<%= config.bin %> errors",
899
- "<%= config.bin %> errors screen_not_found",
900
- "<%= config.bin %> errors --format json"
944
+ "<%= config.bin %> ads login",
945
+ "<%= config.bin %> ads login --email you@example.com",
946
+ "TRILLBOARDS_USER_TOKEN=<jwt> <%= config.bin %> ads login"
901
947
  ],
902
948
  "flags": {
903
949
  "api-key": {
@@ -927,11 +973,25 @@
927
973
  "yaml"
928
974
  ],
929
975
  "type": "option"
976
+ },
977
+ "email": {
978
+ "description": "Account email (prompts if omitted)",
979
+ "name": "email",
980
+ "hasDynamicHelp": false,
981
+ "multiple": false,
982
+ "type": "option"
983
+ },
984
+ "password": {
985
+ "description": "Account password (prompts hidden if omitted; avoid passing on the command line)",
986
+ "name": "password",
987
+ "hasDynamicHelp": false,
988
+ "multiple": false,
989
+ "type": "option"
930
990
  }
931
991
  },
932
992
  "hasDynamicHelp": false,
933
993
  "hiddenAliases": [],
934
- "id": "errors",
994
+ "id": "ads:login",
935
995
  "pluginAlias": "@trillboards/cli",
936
996
  "pluginName": "@trillboards/cli",
937
997
  "pluginType": "core",
@@ -941,18 +1001,18 @@
941
1001
  "relativePath": [
942
1002
  "dist",
943
1003
  "commands",
944
- "errors",
945
- "index.js"
1004
+ "ads",
1005
+ "login.js"
946
1006
  ]
947
1007
  },
948
- "endpoints": {
1008
+ "ads:start": {
949
1009
  "aliases": [],
950
1010
  "args": {},
951
- "description": "Discover available API endpoints",
1011
+ "description": "Register this machine as a virtual screen and rent its AI-coding-agent dead-time for money",
952
1012
  "examples": [
953
- "<%= config.bin %> endpoints",
954
- "<%= config.bin %> endpoints --search screens",
955
- "<%= config.bin %> endpoints --format json"
1013
+ "<%= config.bin %> ads start",
1014
+ "<%= config.bin %> ads start --once",
1015
+ "<%= config.bin %> ads start --simulate --interval 30"
956
1016
  ],
957
1017
  "flags": {
958
1018
  "api-key": {
@@ -983,10 +1043,28 @@
983
1043
  ],
984
1044
  "type": "option"
985
1045
  },
986
- "search": {
987
- "char": "s",
988
- "description": "Search query to filter endpoints",
989
- "name": "search",
1046
+ "name": {
1047
+ "description": "Display name for this virtual screen (defaults to \"Claude Code on <hostname>\")",
1048
+ "name": "name",
1049
+ "hasDynamicHelp": false,
1050
+ "multiple": false,
1051
+ "type": "option"
1052
+ },
1053
+ "once": {
1054
+ "description": "Register, heartbeat once, serve a single ad, then exit (great for testing)",
1055
+ "name": "once",
1056
+ "allowNo": false,
1057
+ "type": "boolean"
1058
+ },
1059
+ "simulate": {
1060
+ "description": "Treat each interval tick as a dead-time trigger (v0 stand-in for real detection)",
1061
+ "name": "simulate",
1062
+ "allowNo": false,
1063
+ "type": "boolean"
1064
+ },
1065
+ "interval": {
1066
+ "description": "Seconds between dead-time fills in --simulate mode (default 60)",
1067
+ "name": "interval",
990
1068
  "hasDynamicHelp": false,
991
1069
  "multiple": false,
992
1070
  "type": "option"
@@ -994,7 +1072,7 @@
994
1072
  },
995
1073
  "hasDynamicHelp": false,
996
1074
  "hiddenAliases": [],
997
- "id": "endpoints",
1075
+ "id": "ads:start",
998
1076
  "pluginAlias": "@trillboards/cli",
999
1077
  "pluginName": "@trillboards/cli",
1000
1078
  "pluginType": "core",
@@ -1004,19 +1082,24 @@
1004
1082
  "relativePath": [
1005
1083
  "dist",
1006
1084
  "commands",
1007
- "endpoints",
1008
- "index.js"
1085
+ "ads",
1086
+ "start.js"
1009
1087
  ]
1010
1088
  },
1011
- "logs:tail": {
1089
+ "audience:live": {
1012
1090
  "aliases": [],
1013
- "args": {},
1014
- "description": "Tail real-time request logs via server-sent events",
1091
+ "args": {
1092
+ "screen_id": {
1093
+ "description": "Screen ID to monitor",
1094
+ "name": "screen_id",
1095
+ "required": true
1096
+ }
1097
+ },
1098
+ "description": "Real-time audience sensing data for a screen",
1015
1099
  "examples": [
1016
- "<%= config.bin %> logs tail",
1017
- "<%= config.bin %> logs tail --events error.occurred",
1018
- "<%= config.bin %> logs tail --status 4xx,5xx",
1019
- "<%= config.bin %> logs tail --events request.logged,error.occurred --status 5xx"
1100
+ "<%= config.bin %> audience live scr_abc123",
1101
+ "<%= config.bin %> audience live scr_abc123 --format json",
1102
+ "<%= config.bin %> audience live scr_abc123 --interval 3"
1020
1103
  ],
1021
1104
  "flags": {
1022
1105
  "api-key": {
@@ -1047,17 +1130,10 @@
1047
1130
  ],
1048
1131
  "type": "option"
1049
1132
  },
1050
- "events": {
1051
- "description": "Comma-separated SSE event types to subscribe to",
1052
- "name": "events",
1053
- "default": "request.logged,error.occurred",
1054
- "hasDynamicHelp": false,
1055
- "multiple": false,
1056
- "type": "option"
1057
- },
1058
- "status": {
1059
- "description": "Filter by status code pattern (e.g. \"4xx\", \"5xx\", \"4xx,5xx\", \"404\")",
1060
- "name": "status",
1133
+ "interval": {
1134
+ "description": "Polling interval in seconds",
1135
+ "name": "interval",
1136
+ "default": 5,
1061
1137
  "hasDynamicHelp": false,
1062
1138
  "multiple": false,
1063
1139
  "type": "option"
@@ -1065,7 +1141,7 @@
1065
1141
  },
1066
1142
  "hasDynamicHelp": false,
1067
1143
  "hiddenAliases": [],
1068
- "id": "logs:tail",
1144
+ "id": "audience:live",
1069
1145
  "pluginAlias": "@trillboards/cli",
1070
1146
  "pluginName": "@trillboards/cli",
1071
1147
  "pluginType": "core",
@@ -1075,19 +1151,18 @@
1075
1151
  "relativePath": [
1076
1152
  "dist",
1077
1153
  "commands",
1078
- "logs",
1079
- "tail.js"
1154
+ "audience",
1155
+ "live.js"
1080
1156
  ]
1081
1157
  },
1082
- "screens:watch": {
1158
+ "billing:usage": {
1083
1159
  "aliases": [],
1084
1160
  "args": {},
1085
- "description": "Live fleet dashboard — watch all screens in real-time",
1161
+ "description": "Billing usage details with optional per-product breakdown",
1086
1162
  "examples": [
1087
- "<%= config.bin %> screens watch",
1088
- "<%= config.bin %> screens watch --filter online",
1089
- "<%= config.bin %> screens watch --sort earnings",
1090
- "<%= config.bin %> screens watch --format json"
1163
+ "<%= config.bin %> billing usage",
1164
+ "<%= config.bin %> billing usage --breakdown",
1165
+ "<%= config.bin %> billing usage --format json"
1091
1166
  ],
1092
1167
  "flags": {
1093
1168
  "api-key": {
@@ -1118,42 +1193,16 @@
1118
1193
  ],
1119
1194
  "type": "option"
1120
1195
  },
1121
- "filter": {
1122
- "description": "Filter screens by status",
1123
- "name": "filter",
1124
- "hasDynamicHelp": false,
1125
- "multiple": false,
1126
- "options": [
1127
- "online",
1128
- "offline"
1129
- ],
1130
- "type": "option"
1131
- },
1132
- "interval": {
1133
- "description": "Refresh interval in seconds",
1134
- "name": "interval",
1135
- "default": 10,
1136
- "hasDynamicHelp": false,
1137
- "multiple": false,
1138
- "type": "option"
1139
- },
1140
- "sort": {
1141
- "description": "Sort column",
1142
- "name": "sort",
1143
- "default": "name",
1144
- "hasDynamicHelp": false,
1145
- "multiple": false,
1146
- "options": [
1147
- "name",
1148
- "earnings",
1149
- "fill-rate"
1150
- ],
1151
- "type": "option"
1196
+ "breakdown": {
1197
+ "description": "Show per-product breakdown table",
1198
+ "name": "breakdown",
1199
+ "allowNo": false,
1200
+ "type": "boolean"
1152
1201
  }
1153
1202
  },
1154
1203
  "hasDynamicHelp": false,
1155
1204
  "hiddenAliases": [],
1156
- "id": "screens:watch",
1205
+ "id": "billing:usage",
1157
1206
  "pluginAlias": "@trillboards/cli",
1158
1207
  "pluginName": "@trillboards/cli",
1159
1208
  "pluginType": "core",
@@ -1163,16 +1212,23 @@
1163
1212
  "relativePath": [
1164
1213
  "dist",
1165
1214
  "commands",
1166
- "screens",
1167
- "watch.js"
1215
+ "billing",
1216
+ "usage.js"
1168
1217
  ]
1169
1218
  },
1170
- "generated:generated-changelog-query": {
1219
+ "devices:reconcile": {
1171
1220
  "aliases": [],
1172
- "args": {},
1173
- "description": "Query API changelog",
1221
+ "args": {
1222
+ "file": {
1223
+ "description": "Path to your device external IDs — a JSON array, {\"external_ids\":[...]}, or one ID per line",
1224
+ "name": "file",
1225
+ "required": true
1226
+ }
1227
+ },
1228
+ "description": "Reconcile your device fleet — diff your external IDs against what Trillboards has registered (matched / missing / orphan / malformed / duplicate)",
1174
1229
  "examples": [
1175
- "$ trillboards generated changelog query"
1230
+ "<%= config.bin %> devices reconcile my-devices.json",
1231
+ "<%= config.bin %> devices reconcile ids.txt --format json"
1176
1232
  ],
1177
1233
  "flags": {
1178
1234
  "api-key": {
@@ -1202,12 +1258,579 @@
1202
1258
  "yaml"
1203
1259
  ],
1204
1260
  "type": "option"
1205
- },
1206
- "since": {
1207
- "description": "Only entries dated on or after this date (YYYY-MM-DD). Unreleased entries always included.",
1208
- "name": "since",
1209
- "hasDynamicHelp": false,
1210
- "multiple": false,
1261
+ }
1262
+ },
1263
+ "hasDynamicHelp": false,
1264
+ "hiddenAliases": [],
1265
+ "id": "devices:reconcile",
1266
+ "pluginAlias": "@trillboards/cli",
1267
+ "pluginName": "@trillboards/cli",
1268
+ "pluginType": "core",
1269
+ "strict": true,
1270
+ "enableJsonFlag": false,
1271
+ "isESM": true,
1272
+ "relativePath": [
1273
+ "dist",
1274
+ "commands",
1275
+ "devices",
1276
+ "reconcile.js"
1277
+ ]
1278
+ },
1279
+ "endpoints": {
1280
+ "aliases": [],
1281
+ "args": {},
1282
+ "description": "Discover available API endpoints",
1283
+ "examples": [
1284
+ "<%= config.bin %> endpoints",
1285
+ "<%= config.bin %> endpoints --search screens",
1286
+ "<%= config.bin %> endpoints --format json"
1287
+ ],
1288
+ "flags": {
1289
+ "api-key": {
1290
+ "description": "API key (or set TRILLBOARDS_API_KEY env var)",
1291
+ "env": "TRILLBOARDS_API_KEY",
1292
+ "name": "api-key",
1293
+ "hasDynamicHelp": false,
1294
+ "multiple": false,
1295
+ "type": "option"
1296
+ },
1297
+ "base-url": {
1298
+ "description": "API base URL",
1299
+ "name": "base-url",
1300
+ "default": "https://api.trillboards.com",
1301
+ "hasDynamicHelp": false,
1302
+ "multiple": false,
1303
+ "type": "option"
1304
+ },
1305
+ "format": {
1306
+ "description": "Output format",
1307
+ "name": "format",
1308
+ "hasDynamicHelp": false,
1309
+ "multiple": false,
1310
+ "options": [
1311
+ "json",
1312
+ "table",
1313
+ "yaml"
1314
+ ],
1315
+ "type": "option"
1316
+ },
1317
+ "search": {
1318
+ "char": "s",
1319
+ "description": "Search query to filter endpoints",
1320
+ "name": "search",
1321
+ "hasDynamicHelp": false,
1322
+ "multiple": false,
1323
+ "type": "option"
1324
+ }
1325
+ },
1326
+ "hasDynamicHelp": false,
1327
+ "hiddenAliases": [],
1328
+ "id": "endpoints",
1329
+ "pluginAlias": "@trillboards/cli",
1330
+ "pluginName": "@trillboards/cli",
1331
+ "pluginType": "core",
1332
+ "strict": true,
1333
+ "enableJsonFlag": false,
1334
+ "isESM": true,
1335
+ "relativePath": [
1336
+ "dist",
1337
+ "commands",
1338
+ "endpoints",
1339
+ "index.js"
1340
+ ]
1341
+ },
1342
+ "errors": {
1343
+ "aliases": [],
1344
+ "args": {
1345
+ "code": {
1346
+ "description": "Error code to look up (e.g. screen_not_found)",
1347
+ "name": "code",
1348
+ "required": false
1349
+ }
1350
+ },
1351
+ "description": "Look up error codes from the error catalog",
1352
+ "examples": [
1353
+ "<%= config.bin %> errors",
1354
+ "<%= config.bin %> errors screen_not_found",
1355
+ "<%= config.bin %> errors --format json"
1356
+ ],
1357
+ "flags": {
1358
+ "api-key": {
1359
+ "description": "API key (or set TRILLBOARDS_API_KEY env var)",
1360
+ "env": "TRILLBOARDS_API_KEY",
1361
+ "name": "api-key",
1362
+ "hasDynamicHelp": false,
1363
+ "multiple": false,
1364
+ "type": "option"
1365
+ },
1366
+ "base-url": {
1367
+ "description": "API base URL",
1368
+ "name": "base-url",
1369
+ "default": "https://api.trillboards.com",
1370
+ "hasDynamicHelp": false,
1371
+ "multiple": false,
1372
+ "type": "option"
1373
+ },
1374
+ "format": {
1375
+ "description": "Output format",
1376
+ "name": "format",
1377
+ "hasDynamicHelp": false,
1378
+ "multiple": false,
1379
+ "options": [
1380
+ "json",
1381
+ "table",
1382
+ "yaml"
1383
+ ],
1384
+ "type": "option"
1385
+ }
1386
+ },
1387
+ "hasDynamicHelp": false,
1388
+ "hiddenAliases": [],
1389
+ "id": "errors",
1390
+ "pluginAlias": "@trillboards/cli",
1391
+ "pluginName": "@trillboards/cli",
1392
+ "pluginType": "core",
1393
+ "strict": true,
1394
+ "enableJsonFlag": false,
1395
+ "isESM": true,
1396
+ "relativePath": [
1397
+ "dist",
1398
+ "commands",
1399
+ "errors",
1400
+ "index.js"
1401
+ ]
1402
+ },
1403
+ "logs:tail": {
1404
+ "aliases": [],
1405
+ "args": {},
1406
+ "description": "Tail real-time request logs via server-sent events",
1407
+ "examples": [
1408
+ "<%= config.bin %> logs tail",
1409
+ "<%= config.bin %> logs tail --events error.occurred",
1410
+ "<%= config.bin %> logs tail --status 4xx,5xx",
1411
+ "<%= config.bin %> logs tail --events request.logged,error.occurred --status 5xx"
1412
+ ],
1413
+ "flags": {
1414
+ "api-key": {
1415
+ "description": "API key (or set TRILLBOARDS_API_KEY env var)",
1416
+ "env": "TRILLBOARDS_API_KEY",
1417
+ "name": "api-key",
1418
+ "hasDynamicHelp": false,
1419
+ "multiple": false,
1420
+ "type": "option"
1421
+ },
1422
+ "base-url": {
1423
+ "description": "API base URL",
1424
+ "name": "base-url",
1425
+ "default": "https://api.trillboards.com",
1426
+ "hasDynamicHelp": false,
1427
+ "multiple": false,
1428
+ "type": "option"
1429
+ },
1430
+ "format": {
1431
+ "description": "Output format",
1432
+ "name": "format",
1433
+ "hasDynamicHelp": false,
1434
+ "multiple": false,
1435
+ "options": [
1436
+ "json",
1437
+ "table",
1438
+ "yaml"
1439
+ ],
1440
+ "type": "option"
1441
+ },
1442
+ "events": {
1443
+ "description": "Comma-separated SSE event types to subscribe to",
1444
+ "name": "events",
1445
+ "default": "request.logged,error.occurred",
1446
+ "hasDynamicHelp": false,
1447
+ "multiple": false,
1448
+ "type": "option"
1449
+ },
1450
+ "status": {
1451
+ "description": "Filter by status code pattern (e.g. \"4xx\", \"5xx\", \"4xx,5xx\", \"404\")",
1452
+ "name": "status",
1453
+ "hasDynamicHelp": false,
1454
+ "multiple": false,
1455
+ "type": "option"
1456
+ }
1457
+ },
1458
+ "hasDynamicHelp": false,
1459
+ "hiddenAliases": [],
1460
+ "id": "logs:tail",
1461
+ "pluginAlias": "@trillboards/cli",
1462
+ "pluginName": "@trillboards/cli",
1463
+ "pluginType": "core",
1464
+ "strict": true,
1465
+ "enableJsonFlag": false,
1466
+ "isESM": true,
1467
+ "relativePath": [
1468
+ "dist",
1469
+ "commands",
1470
+ "logs",
1471
+ "tail.js"
1472
+ ]
1473
+ },
1474
+ "screens:watch": {
1475
+ "aliases": [],
1476
+ "args": {},
1477
+ "description": "Live fleet dashboard — watch all screens in real-time",
1478
+ "examples": [
1479
+ "<%= config.bin %> screens watch",
1480
+ "<%= config.bin %> screens watch --filter online",
1481
+ "<%= config.bin %> screens watch --sort earnings",
1482
+ "<%= config.bin %> screens watch --format json"
1483
+ ],
1484
+ "flags": {
1485
+ "api-key": {
1486
+ "description": "API key (or set TRILLBOARDS_API_KEY env var)",
1487
+ "env": "TRILLBOARDS_API_KEY",
1488
+ "name": "api-key",
1489
+ "hasDynamicHelp": false,
1490
+ "multiple": false,
1491
+ "type": "option"
1492
+ },
1493
+ "base-url": {
1494
+ "description": "API base URL",
1495
+ "name": "base-url",
1496
+ "default": "https://api.trillboards.com",
1497
+ "hasDynamicHelp": false,
1498
+ "multiple": false,
1499
+ "type": "option"
1500
+ },
1501
+ "format": {
1502
+ "description": "Output format",
1503
+ "name": "format",
1504
+ "hasDynamicHelp": false,
1505
+ "multiple": false,
1506
+ "options": [
1507
+ "json",
1508
+ "table",
1509
+ "yaml"
1510
+ ],
1511
+ "type": "option"
1512
+ },
1513
+ "filter": {
1514
+ "description": "Filter screens by status",
1515
+ "name": "filter",
1516
+ "hasDynamicHelp": false,
1517
+ "multiple": false,
1518
+ "options": [
1519
+ "online",
1520
+ "offline"
1521
+ ],
1522
+ "type": "option"
1523
+ },
1524
+ "interval": {
1525
+ "description": "Refresh interval in seconds",
1526
+ "name": "interval",
1527
+ "default": 10,
1528
+ "hasDynamicHelp": false,
1529
+ "multiple": false,
1530
+ "type": "option"
1531
+ },
1532
+ "sort": {
1533
+ "description": "Sort column",
1534
+ "name": "sort",
1535
+ "default": "name",
1536
+ "hasDynamicHelp": false,
1537
+ "multiple": false,
1538
+ "options": [
1539
+ "name",
1540
+ "earnings",
1541
+ "fill-rate"
1542
+ ],
1543
+ "type": "option"
1544
+ }
1545
+ },
1546
+ "hasDynamicHelp": false,
1547
+ "hiddenAliases": [],
1548
+ "id": "screens:watch",
1549
+ "pluginAlias": "@trillboards/cli",
1550
+ "pluginName": "@trillboards/cli",
1551
+ "pluginType": "core",
1552
+ "strict": true,
1553
+ "enableJsonFlag": false,
1554
+ "isESM": true,
1555
+ "relativePath": [
1556
+ "dist",
1557
+ "commands",
1558
+ "screens",
1559
+ "watch.js"
1560
+ ]
1561
+ },
1562
+ "sandbox:create": {
1563
+ "aliases": [],
1564
+ "args": {},
1565
+ "description": "Create a sandbox test screen",
1566
+ "examples": [
1567
+ "<%= config.bin %> sandbox create",
1568
+ "<%= config.bin %> sandbox create --format json"
1569
+ ],
1570
+ "flags": {
1571
+ "api-key": {
1572
+ "description": "API key (or set TRILLBOARDS_API_KEY env var)",
1573
+ "env": "TRILLBOARDS_API_KEY",
1574
+ "name": "api-key",
1575
+ "hasDynamicHelp": false,
1576
+ "multiple": false,
1577
+ "type": "option"
1578
+ },
1579
+ "base-url": {
1580
+ "description": "API base URL",
1581
+ "name": "base-url",
1582
+ "default": "https://api.trillboards.com",
1583
+ "hasDynamicHelp": false,
1584
+ "multiple": false,
1585
+ "type": "option"
1586
+ },
1587
+ "format": {
1588
+ "description": "Output format",
1589
+ "name": "format",
1590
+ "hasDynamicHelp": false,
1591
+ "multiple": false,
1592
+ "options": [
1593
+ "json",
1594
+ "table",
1595
+ "yaml"
1596
+ ],
1597
+ "type": "option"
1598
+ }
1599
+ },
1600
+ "hasDynamicHelp": false,
1601
+ "hiddenAliases": [],
1602
+ "id": "sandbox:create",
1603
+ "pluginAlias": "@trillboards/cli",
1604
+ "pluginName": "@trillboards/cli",
1605
+ "pluginType": "core",
1606
+ "strict": true,
1607
+ "enableJsonFlag": false,
1608
+ "isESM": true,
1609
+ "relativePath": [
1610
+ "dist",
1611
+ "commands",
1612
+ "sandbox",
1613
+ "create.js"
1614
+ ]
1615
+ },
1616
+ "sandbox:emit": {
1617
+ "aliases": [],
1618
+ "args": {
1619
+ "event_type": {
1620
+ "description": "Event type to emit (e.g. impression.recorded, heartbeat)",
1621
+ "name": "event_type",
1622
+ "required": true
1623
+ }
1624
+ },
1625
+ "description": "Emit a test event in the sandbox",
1626
+ "examples": [
1627
+ "<%= config.bin %> sandbox emit impression.recorded",
1628
+ "<%= config.bin %> sandbox emit heartbeat",
1629
+ "<%= config.bin %> sandbox emit impression.recorded --data '{\"cpm\": 3.50}'"
1630
+ ],
1631
+ "flags": {
1632
+ "api-key": {
1633
+ "description": "API key (or set TRILLBOARDS_API_KEY env var)",
1634
+ "env": "TRILLBOARDS_API_KEY",
1635
+ "name": "api-key",
1636
+ "hasDynamicHelp": false,
1637
+ "multiple": false,
1638
+ "type": "option"
1639
+ },
1640
+ "base-url": {
1641
+ "description": "API base URL",
1642
+ "name": "base-url",
1643
+ "default": "https://api.trillboards.com",
1644
+ "hasDynamicHelp": false,
1645
+ "multiple": false,
1646
+ "type": "option"
1647
+ },
1648
+ "format": {
1649
+ "description": "Output format",
1650
+ "name": "format",
1651
+ "hasDynamicHelp": false,
1652
+ "multiple": false,
1653
+ "options": [
1654
+ "json",
1655
+ "table",
1656
+ "yaml"
1657
+ ],
1658
+ "type": "option"
1659
+ },
1660
+ "data": {
1661
+ "char": "d",
1662
+ "description": "Additional event data (JSON string)",
1663
+ "name": "data",
1664
+ "hasDynamicHelp": false,
1665
+ "multiple": false,
1666
+ "type": "option"
1667
+ }
1668
+ },
1669
+ "hasDynamicHelp": false,
1670
+ "hiddenAliases": [],
1671
+ "id": "sandbox:emit",
1672
+ "pluginAlias": "@trillboards/cli",
1673
+ "pluginName": "@trillboards/cli",
1674
+ "pluginType": "core",
1675
+ "strict": true,
1676
+ "enableJsonFlag": false,
1677
+ "isESM": true,
1678
+ "relativePath": [
1679
+ "dist",
1680
+ "commands",
1681
+ "sandbox",
1682
+ "emit.js"
1683
+ ]
1684
+ },
1685
+ "sandbox:reset": {
1686
+ "aliases": [],
1687
+ "args": {},
1688
+ "description": "Reset the sandbox — delete all test screens and events",
1689
+ "examples": [
1690
+ "<%= config.bin %> sandbox reset",
1691
+ "<%= config.bin %> sandbox reset --format json"
1692
+ ],
1693
+ "flags": {
1694
+ "api-key": {
1695
+ "description": "API key (or set TRILLBOARDS_API_KEY env var)",
1696
+ "env": "TRILLBOARDS_API_KEY",
1697
+ "name": "api-key",
1698
+ "hasDynamicHelp": false,
1699
+ "multiple": false,
1700
+ "type": "option"
1701
+ },
1702
+ "base-url": {
1703
+ "description": "API base URL",
1704
+ "name": "base-url",
1705
+ "default": "https://api.trillboards.com",
1706
+ "hasDynamicHelp": false,
1707
+ "multiple": false,
1708
+ "type": "option"
1709
+ },
1710
+ "format": {
1711
+ "description": "Output format",
1712
+ "name": "format",
1713
+ "hasDynamicHelp": false,
1714
+ "multiple": false,
1715
+ "options": [
1716
+ "json",
1717
+ "table",
1718
+ "yaml"
1719
+ ],
1720
+ "type": "option"
1721
+ }
1722
+ },
1723
+ "hasDynamicHelp": false,
1724
+ "hiddenAliases": [],
1725
+ "id": "sandbox:reset",
1726
+ "pluginAlias": "@trillboards/cli",
1727
+ "pluginName": "@trillboards/cli",
1728
+ "pluginType": "core",
1729
+ "strict": true,
1730
+ "enableJsonFlag": false,
1731
+ "isESM": true,
1732
+ "relativePath": [
1733
+ "dist",
1734
+ "commands",
1735
+ "sandbox",
1736
+ "reset.js"
1737
+ ]
1738
+ },
1739
+ "sandbox:status": {
1740
+ "aliases": [],
1741
+ "args": {},
1742
+ "description": "Show sandbox status — screens and recent events",
1743
+ "examples": [
1744
+ "<%= config.bin %> sandbox status",
1745
+ "<%= config.bin %> sandbox status --format json"
1746
+ ],
1747
+ "flags": {
1748
+ "api-key": {
1749
+ "description": "API key (or set TRILLBOARDS_API_KEY env var)",
1750
+ "env": "TRILLBOARDS_API_KEY",
1751
+ "name": "api-key",
1752
+ "hasDynamicHelp": false,
1753
+ "multiple": false,
1754
+ "type": "option"
1755
+ },
1756
+ "base-url": {
1757
+ "description": "API base URL",
1758
+ "name": "base-url",
1759
+ "default": "https://api.trillboards.com",
1760
+ "hasDynamicHelp": false,
1761
+ "multiple": false,
1762
+ "type": "option"
1763
+ },
1764
+ "format": {
1765
+ "description": "Output format",
1766
+ "name": "format",
1767
+ "hasDynamicHelp": false,
1768
+ "multiple": false,
1769
+ "options": [
1770
+ "json",
1771
+ "table",
1772
+ "yaml"
1773
+ ],
1774
+ "type": "option"
1775
+ }
1776
+ },
1777
+ "hasDynamicHelp": false,
1778
+ "hiddenAliases": [],
1779
+ "id": "sandbox:status",
1780
+ "pluginAlias": "@trillboards/cli",
1781
+ "pluginName": "@trillboards/cli",
1782
+ "pluginType": "core",
1783
+ "strict": true,
1784
+ "enableJsonFlag": false,
1785
+ "isESM": true,
1786
+ "relativePath": [
1787
+ "dist",
1788
+ "commands",
1789
+ "sandbox",
1790
+ "status.js"
1791
+ ]
1792
+ },
1793
+ "generated:generated-changelog-query": {
1794
+ "aliases": [],
1795
+ "args": {},
1796
+ "description": "Query API changelog",
1797
+ "examples": [
1798
+ "$ trillboards generated changelog query"
1799
+ ],
1800
+ "flags": {
1801
+ "api-key": {
1802
+ "description": "API key (or set TRILLBOARDS_API_KEY env var)",
1803
+ "env": "TRILLBOARDS_API_KEY",
1804
+ "name": "api-key",
1805
+ "hasDynamicHelp": false,
1806
+ "multiple": false,
1807
+ "type": "option"
1808
+ },
1809
+ "base-url": {
1810
+ "description": "API base URL",
1811
+ "name": "base-url",
1812
+ "default": "https://api.trillboards.com",
1813
+ "hasDynamicHelp": false,
1814
+ "multiple": false,
1815
+ "type": "option"
1816
+ },
1817
+ "format": {
1818
+ "description": "Output format",
1819
+ "name": "format",
1820
+ "hasDynamicHelp": false,
1821
+ "multiple": false,
1822
+ "options": [
1823
+ "json",
1824
+ "table",
1825
+ "yaml"
1826
+ ],
1827
+ "type": "option"
1828
+ },
1829
+ "since": {
1830
+ "description": "Only entries dated on or after this date (YYYY-MM-DD). Unreleased entries always included.",
1831
+ "name": "since",
1832
+ "hasDynamicHelp": false,
1833
+ "multiple": false,
1211
1834
  "type": "option"
1212
1835
  },
1213
1836
  "type": {
@@ -1923,12 +2546,197 @@
1923
2546
  "generated-data-api-usage.js"
1924
2547
  ]
1925
2548
  },
2549
+ "generated:generated-device-heartbeat-get": {
2550
+ "aliases": [],
2551
+ "args": {
2552
+ "deviceId": {
2553
+ "description": "Device fingerprint or external device ID.",
2554
+ "name": "deviceId",
2555
+ "required": true
2556
+ }
2557
+ },
2558
+ "description": "Read live device heartbeat state.",
2559
+ "examples": [
2560
+ "$ trillboards generated device-heartbeat get"
2561
+ ],
2562
+ "flags": {
2563
+ "api-key": {
2564
+ "description": "API key (or set TRILLBOARDS_API_KEY env var)",
2565
+ "env": "TRILLBOARDS_API_KEY",
2566
+ "name": "api-key",
2567
+ "hasDynamicHelp": false,
2568
+ "multiple": false,
2569
+ "type": "option"
2570
+ },
2571
+ "base-url": {
2572
+ "description": "API base URL",
2573
+ "name": "base-url",
2574
+ "default": "https://api.trillboards.com",
2575
+ "hasDynamicHelp": false,
2576
+ "multiple": false,
2577
+ "type": "option"
2578
+ },
2579
+ "format": {
2580
+ "description": "Output format",
2581
+ "name": "format",
2582
+ "hasDynamicHelp": false,
2583
+ "multiple": false,
2584
+ "options": [
2585
+ "json",
2586
+ "table",
2587
+ "yaml"
2588
+ ],
2589
+ "type": "option"
2590
+ }
2591
+ },
2592
+ "hasDynamicHelp": false,
2593
+ "hiddenAliases": [],
2594
+ "id": "generated:generated-device-heartbeat-get",
2595
+ "pluginAlias": "@trillboards/cli",
2596
+ "pluginName": "@trillboards/cli",
2597
+ "pluginType": "core",
2598
+ "strict": true,
2599
+ "enableJsonFlag": false,
2600
+ "isESM": true,
2601
+ "relativePath": [
2602
+ "dist",
2603
+ "commands",
2604
+ "generated",
2605
+ "generated-device-heartbeat-get.js"
2606
+ ]
2607
+ },
1926
2608
  "generated:generated-device-ota-manifest": {
1927
2609
  "aliases": [],
1928
2610
  "args": {},
1929
2611
  "description": "Signed OTA manifest for managed-device update clients.",
1930
2612
  "examples": [
1931
- "$ trillboards generated device-ota-manifest"
2613
+ "$ trillboards generated device-ota-manifest"
2614
+ ],
2615
+ "flags": {
2616
+ "api-key": {
2617
+ "description": "API key (or set TRILLBOARDS_API_KEY env var)",
2618
+ "env": "TRILLBOARDS_API_KEY",
2619
+ "name": "api-key",
2620
+ "hasDynamicHelp": false,
2621
+ "multiple": false,
2622
+ "type": "option"
2623
+ },
2624
+ "base-url": {
2625
+ "description": "API base URL",
2626
+ "name": "base-url",
2627
+ "default": "https://api.trillboards.com",
2628
+ "hasDynamicHelp": false,
2629
+ "multiple": false,
2630
+ "type": "option"
2631
+ },
2632
+ "format": {
2633
+ "description": "Output format",
2634
+ "name": "format",
2635
+ "hasDynamicHelp": false,
2636
+ "multiple": false,
2637
+ "options": [
2638
+ "json",
2639
+ "table",
2640
+ "yaml"
2641
+ ],
2642
+ "type": "option"
2643
+ },
2644
+ "agent": {
2645
+ "description": "Optional agent type filter (`agent-core`, `agent-core-lite`, etc.). When omitted the caller receives the default manifest bundle.",
2646
+ "name": "agent",
2647
+ "hasDynamicHelp": false,
2648
+ "multiple": false,
2649
+ "type": "option"
2650
+ }
2651
+ },
2652
+ "hasDynamicHelp": false,
2653
+ "hiddenAliases": [],
2654
+ "id": "generated:generated-device-ota-manifest",
2655
+ "pluginAlias": "@trillboards/cli",
2656
+ "pluginName": "@trillboards/cli",
2657
+ "pluginType": "core",
2658
+ "strict": true,
2659
+ "enableJsonFlag": false,
2660
+ "isESM": true,
2661
+ "relativePath": [
2662
+ "dist",
2663
+ "commands",
2664
+ "generated",
2665
+ "generated-device-ota-manifest.js"
2666
+ ]
2667
+ },
2668
+ "generated:generated-example-healthcheck": {
2669
+ "aliases": [],
2670
+ "args": {},
2671
+ "description": "Example healthcheck (Phase 3 pipeline proof)",
2672
+ "examples": [
2673
+ "$ trillboards generated example-healthcheck"
2674
+ ],
2675
+ "flags": {
2676
+ "api-key": {
2677
+ "description": "API key (or set TRILLBOARDS_API_KEY env var)",
2678
+ "env": "TRILLBOARDS_API_KEY",
2679
+ "name": "api-key",
2680
+ "hasDynamicHelp": false,
2681
+ "multiple": false,
2682
+ "type": "option"
2683
+ },
2684
+ "base-url": {
2685
+ "description": "API base URL",
2686
+ "name": "base-url",
2687
+ "default": "https://api.trillboards.com",
2688
+ "hasDynamicHelp": false,
2689
+ "multiple": false,
2690
+ "type": "option"
2691
+ },
2692
+ "format": {
2693
+ "description": "Output format",
2694
+ "name": "format",
2695
+ "hasDynamicHelp": false,
2696
+ "multiple": false,
2697
+ "options": [
2698
+ "json",
2699
+ "table",
2700
+ "yaml"
2701
+ ],
2702
+ "type": "option"
2703
+ },
2704
+ "verbose": {
2705
+ "description": "When `true`, include diagnostic fields in the response.",
2706
+ "name": "verbose",
2707
+ "hasDynamicHelp": false,
2708
+ "multiple": false,
2709
+ "type": "option"
2710
+ }
2711
+ },
2712
+ "hasDynamicHelp": false,
2713
+ "hiddenAliases": [],
2714
+ "id": "generated:generated-example-healthcheck",
2715
+ "pluginAlias": "@trillboards/cli",
2716
+ "pluginName": "@trillboards/cli",
2717
+ "pluginType": "core",
2718
+ "strict": true,
2719
+ "enableJsonFlag": false,
2720
+ "isESM": true,
2721
+ "relativePath": [
2722
+ "dist",
2723
+ "commands",
2724
+ "generated",
2725
+ "generated-example-healthcheck.js"
2726
+ ]
2727
+ },
2728
+ "generated:generated-federated-get-latest-model-descriptor": {
2729
+ "aliases": [],
2730
+ "args": {
2731
+ "modelType": {
2732
+ "description": "Federated model name.",
2733
+ "name": "modelType",
2734
+ "required": true
2735
+ }
2736
+ },
2737
+ "description": "Fetch the latest aggregated model descriptor (download URL + sha256 + version).",
2738
+ "examples": [
2739
+ "$ trillboards generated federated-get-latest-model-descriptor"
1932
2740
  ],
1933
2741
  "flags": {
1934
2742
  "api-key": {
@@ -1959,9 +2767,37 @@
1959
2767
  ],
1960
2768
  "type": "option"
1961
2769
  },
1962
- "agent": {
1963
- "description": "Optional agent type filter (`agent-core`, `agent-core-lite`, etc.). When omitted the caller receives the default manifest bundle.",
1964
- "name": "agent",
2770
+ "venue_type": {
2771
+ "description": "Venue category (required).",
2772
+ "name": "venue_type",
2773
+ "hasDynamicHelp": false,
2774
+ "multiple": false,
2775
+ "type": "option"
2776
+ },
2777
+ "venue_subtype": {
2778
+ "description": "venue_subtype",
2779
+ "name": "venue_subtype",
2780
+ "hasDynamicHelp": false,
2781
+ "multiple": false,
2782
+ "type": "option"
2783
+ },
2784
+ "daypart": {
2785
+ "description": "daypart",
2786
+ "name": "daypart",
2787
+ "hasDynamicHelp": false,
2788
+ "multiple": false,
2789
+ "type": "option"
2790
+ },
2791
+ "geo": {
2792
+ "description": "geo",
2793
+ "name": "geo",
2794
+ "hasDynamicHelp": false,
2795
+ "multiple": false,
2796
+ "type": "option"
2797
+ },
2798
+ "device_profile": {
2799
+ "description": "device_profile",
2800
+ "name": "device_profile",
1965
2801
  "hasDynamicHelp": false,
1966
2802
  "multiple": false,
1967
2803
  "type": "option"
@@ -1969,7 +2805,7 @@
1969
2805
  },
1970
2806
  "hasDynamicHelp": false,
1971
2807
  "hiddenAliases": [],
1972
- "id": "generated:generated-device-ota-manifest",
2808
+ "id": "generated:generated-federated-get-latest-model-descriptor",
1973
2809
  "pluginAlias": "@trillboards/cli",
1974
2810
  "pluginName": "@trillboards/cli",
1975
2811
  "pluginType": "core",
@@ -1980,15 +2816,21 @@
1980
2816
  "dist",
1981
2817
  "commands",
1982
2818
  "generated",
1983
- "generated-device-ota-manifest.js"
2819
+ "generated-federated-get-latest-model-descriptor.js"
1984
2820
  ]
1985
2821
  },
1986
- "generated:generated-example-healthcheck": {
2822
+ "generated:generated-federated-get-model-weights": {
1987
2823
  "aliases": [],
1988
- "args": {},
1989
- "description": "Example healthcheck (Phase 3 pipeline proof)",
2824
+ "args": {
2825
+ "modelType": {
2826
+ "description": "Federated model name.",
2827
+ "name": "modelType",
2828
+ "required": true
2829
+ }
2830
+ },
2831
+ "description": "Fetch aggregated weights for the device-specific slice.",
1990
2832
  "examples": [
1991
- "$ trillboards generated example-healthcheck"
2833
+ "$ trillboards generated federated-get-model-weights"
1992
2834
  ],
1993
2835
  "flags": {
1994
2836
  "api-key": {
@@ -2019,9 +2861,37 @@
2019
2861
  ],
2020
2862
  "type": "option"
2021
2863
  },
2022
- "verbose": {
2023
- "description": "When `true`, include diagnostic fields in the response.",
2024
- "name": "verbose",
2864
+ "venue_type": {
2865
+ "description": "Venue category for slice lookup. Snake_case query alias of venueType.",
2866
+ "name": "venue_type",
2867
+ "hasDynamicHelp": false,
2868
+ "multiple": false,
2869
+ "type": "option"
2870
+ },
2871
+ "venue_subtype": {
2872
+ "description": "venue_subtype",
2873
+ "name": "venue_subtype",
2874
+ "hasDynamicHelp": false,
2875
+ "multiple": false,
2876
+ "type": "option"
2877
+ },
2878
+ "daypart": {
2879
+ "description": "daypart",
2880
+ "name": "daypart",
2881
+ "hasDynamicHelp": false,
2882
+ "multiple": false,
2883
+ "type": "option"
2884
+ },
2885
+ "geo": {
2886
+ "description": "geo",
2887
+ "name": "geo",
2888
+ "hasDynamicHelp": false,
2889
+ "multiple": false,
2890
+ "type": "option"
2891
+ },
2892
+ "device_profile": {
2893
+ "description": "device_profile",
2894
+ "name": "device_profile",
2025
2895
  "hasDynamicHelp": false,
2026
2896
  "multiple": false,
2027
2897
  "type": "option"
@@ -2029,7 +2899,7 @@
2029
2899
  },
2030
2900
  "hasDynamicHelp": false,
2031
2901
  "hiddenAliases": [],
2032
- "id": "generated:generated-example-healthcheck",
2902
+ "id": "generated:generated-federated-get-model-weights",
2033
2903
  "pluginAlias": "@trillboards/cli",
2034
2904
  "pluginName": "@trillboards/cli",
2035
2905
  "pluginType": "core",
@@ -2040,21 +2910,15 @@
2040
2910
  "dist",
2041
2911
  "commands",
2042
2912
  "generated",
2043
- "generated-example-healthcheck.js"
2913
+ "generated-federated-get-model-weights.js"
2044
2914
  ]
2045
2915
  },
2046
- "generated:generated-playground-dry-run": {
2916
+ "generated:generated-federated-gradient-upload": {
2047
2917
  "aliases": [],
2048
- "args": {
2049
- "operation_id": {
2050
- "description": "The operationId of the endpoint to validate against.",
2051
- "name": "operation_id",
2052
- "required": true
2053
- }
2054
- },
2055
- "description": "Dry-run validate a request body against an operation schema",
2918
+ "args": {},
2919
+ "description": "Upload sparsified gradients for multi-slice federated aggregation.",
2056
2920
  "examples": [
2057
- "$ trillboards generated playground-dry-run"
2921
+ "$ trillboards generated federated-gradient-upload"
2058
2922
  ],
2059
2923
  "flags": {
2060
2924
  "api-key": {
@@ -2084,11 +2948,18 @@
2084
2948
  "yaml"
2085
2949
  ],
2086
2950
  "type": "option"
2951
+ },
2952
+ "data": {
2953
+ "description": "JSON request body",
2954
+ "name": "data",
2955
+ "hasDynamicHelp": false,
2956
+ "multiple": false,
2957
+ "type": "option"
2087
2958
  }
2088
2959
  },
2089
2960
  "hasDynamicHelp": false,
2090
2961
  "hiddenAliases": [],
2091
- "id": "generated:generated-playground-dry-run",
2962
+ "id": "generated:generated-federated-gradient-upload",
2092
2963
  "pluginAlias": "@trillboards/cli",
2093
2964
  "pluginName": "@trillboards/cli",
2094
2965
  "pluginType": "core",
@@ -2099,21 +2970,15 @@
2099
2970
  "dist",
2100
2971
  "commands",
2101
2972
  "generated",
2102
- "generated-playground-dry-run.js"
2973
+ "generated-federated-gradient-upload.js"
2103
2974
  ]
2104
2975
  },
2105
- "generated:generated-request-metadata-get": {
2976
+ "generated:generated-federated-performance-upload": {
2106
2977
  "aliases": [],
2107
- "args": {
2108
- "request_id": {
2109
- "description": "Server-generated request ID to look up.",
2110
- "name": "request_id",
2111
- "required": true
2112
- }
2113
- },
2114
- "description": "Look up metadata for a recent API request",
2978
+ "args": {},
2979
+ "description": "Report on-device model performance metrics.",
2115
2980
  "examples": [
2116
- "$ trillboards generated request-metadata get"
2981
+ "$ trillboards generated federated-performance-upload"
2117
2982
  ],
2118
2983
  "flags": {
2119
2984
  "api-key": {
@@ -2143,11 +3008,18 @@
2143
3008
  "yaml"
2144
3009
  ],
2145
3010
  "type": "option"
3011
+ },
3012
+ "data": {
3013
+ "description": "JSON request body",
3014
+ "name": "data",
3015
+ "hasDynamicHelp": false,
3016
+ "multiple": false,
3017
+ "type": "option"
2146
3018
  }
2147
3019
  },
2148
3020
  "hasDynamicHelp": false,
2149
3021
  "hiddenAliases": [],
2150
- "id": "generated:generated-request-metadata-get",
3022
+ "id": "generated:generated-federated-performance-upload",
2151
3023
  "pluginAlias": "@trillboards/cli",
2152
3024
  "pluginName": "@trillboards/cli",
2153
3025
  "pluginType": "core",
@@ -2158,15 +3030,15 @@
2158
3030
  "dist",
2159
3031
  "commands",
2160
3032
  "generated",
2161
- "generated-request-metadata-get.js"
3033
+ "generated-federated-performance-upload.js"
2162
3034
  ]
2163
3035
  },
2164
- "generated:generated-sdk-enrich": {
3036
+ "generated:generated-federated-taste-upload": {
2165
3037
  "aliases": [],
2166
3038
  "args": {},
2167
- "description": "Census + demographic enrichment from the request IP.",
3039
+ "description": "Upload a screen-taste embedding for content personalization aggregation.",
2168
3040
  "examples": [
2169
- "$ trillboards generated sdk-enrich"
3041
+ "$ trillboards generated federated-taste-upload"
2170
3042
  ],
2171
3043
  "flags": {
2172
3044
  "api-key": {
@@ -2207,7 +3079,7 @@
2207
3079
  },
2208
3080
  "hasDynamicHelp": false,
2209
3081
  "hiddenAliases": [],
2210
- "id": "generated:generated-sdk-enrich",
3082
+ "id": "generated:generated-federated-taste-upload",
2211
3083
  "pluginAlias": "@trillboards/cli",
2212
3084
  "pluginName": "@trillboards/cli",
2213
3085
  "pluginType": "core",
@@ -2218,15 +3090,21 @@
2218
3090
  "dist",
2219
3091
  "commands",
2220
3092
  "generated",
2221
- "generated-sdk-enrich.js"
3093
+ "generated-federated-taste-upload.js"
2222
3094
  ]
2223
3095
  },
2224
- "generated:generated-sdk-impression": {
3096
+ "generated:generated-playground-dry-run": {
2225
3097
  "aliases": [],
2226
- "args": {},
2227
- "description": "Ingest an enriched CTV/DOOH impression.",
3098
+ "args": {
3099
+ "operation_id": {
3100
+ "description": "The operationId of the endpoint to validate against.",
3101
+ "name": "operation_id",
3102
+ "required": true
3103
+ }
3104
+ },
3105
+ "description": "Dry-run validate a request body against an operation schema",
2228
3106
  "examples": [
2229
- "$ trillboards generated sdk-impression"
3107
+ "$ trillboards generated playground-dry-run"
2230
3108
  ],
2231
3109
  "flags": {
2232
3110
  "api-key": {
@@ -2256,18 +3134,11 @@
2256
3134
  "yaml"
2257
3135
  ],
2258
3136
  "type": "option"
2259
- },
2260
- "data": {
2261
- "description": "JSON request body",
2262
- "name": "data",
2263
- "hasDynamicHelp": false,
2264
- "multiple": false,
2265
- "type": "option"
2266
3137
  }
2267
3138
  },
2268
3139
  "hasDynamicHelp": false,
2269
3140
  "hiddenAliases": [],
2270
- "id": "generated:generated-sdk-impression",
3141
+ "id": "generated:generated-playground-dry-run",
2271
3142
  "pluginAlias": "@trillboards/cli",
2272
3143
  "pluginName": "@trillboards/cli",
2273
3144
  "pluginType": "core",
@@ -2278,15 +3149,21 @@
2278
3149
  "dist",
2279
3150
  "commands",
2280
3151
  "generated",
2281
- "generated-sdk-impression.js"
3152
+ "generated-playground-dry-run.js"
2282
3153
  ]
2283
3154
  },
2284
- "generated:generated-sdk-qr-beacon": {
3155
+ "generated:generated-post-device-heartbeat": {
2285
3156
  "aliases": [],
2286
- "args": {},
2287
- "description": "Process beacon signals associated with a prior QR scan.",
3157
+ "args": {
3158
+ "deviceId": {
3159
+ "description": "Device fingerprint or external device ID.",
3160
+ "name": "deviceId",
3161
+ "required": true
3162
+ }
3163
+ },
3164
+ "description": "Submit a device heartbeat.",
2288
3165
  "examples": [
2289
- "$ trillboards generated sdk-qr-beacon"
3166
+ "$ trillboards generated post-device-heartbeat"
2290
3167
  ],
2291
3168
  "flags": {
2292
3169
  "api-key": {
@@ -2327,7 +3204,7 @@
2327
3204
  },
2328
3205
  "hasDynamicHelp": false,
2329
3206
  "hiddenAliases": [],
2330
- "id": "generated:generated-sdk-qr-beacon",
3207
+ "id": "generated:generated-post-device-heartbeat",
2331
3208
  "pluginAlias": "@trillboards/cli",
2332
3209
  "pluginName": "@trillboards/cli",
2333
3210
  "pluginType": "core",
@@ -2338,15 +3215,21 @@
2338
3215
  "dist",
2339
3216
  "commands",
2340
3217
  "generated",
2341
- "generated-sdk-qr-beacon.js"
3218
+ "generated-post-device-heartbeat.js"
2342
3219
  ]
2343
3220
  },
2344
- "generated:generated-sdk-qr-scan": {
3221
+ "generated:generated-request-metadata-get": {
2345
3222
  "aliases": [],
2346
- "args": {},
2347
- "description": "Record a QR-code scan for physical-to-digital attribution.",
3223
+ "args": {
3224
+ "request_id": {
3225
+ "description": "Server-generated request ID to look up.",
3226
+ "name": "request_id",
3227
+ "required": true
3228
+ }
3229
+ },
3230
+ "description": "Look up metadata for a recent API request",
2348
3231
  "examples": [
2349
- "$ trillboards generated sdk-qr-scan"
3232
+ "$ trillboards generated request-metadata get"
2350
3233
  ],
2351
3234
  "flags": {
2352
3235
  "api-key": {
@@ -2376,18 +3259,11 @@
2376
3259
  "yaml"
2377
3260
  ],
2378
3261
  "type": "option"
2379
- },
2380
- "data": {
2381
- "description": "JSON request body",
2382
- "name": "data",
2383
- "hasDynamicHelp": false,
2384
- "multiple": false,
2385
- "type": "option"
2386
3262
  }
2387
3263
  },
2388
3264
  "hasDynamicHelp": false,
2389
3265
  "hiddenAliases": [],
2390
- "id": "generated:generated-sdk-qr-scan",
3266
+ "id": "generated:generated-request-metadata-get",
2391
3267
  "pluginAlias": "@trillboards/cli",
2392
3268
  "pluginName": "@trillboards/cli",
2393
3269
  "pluginType": "core",
@@ -2398,15 +3274,15 @@
2398
3274
  "dist",
2399
3275
  "commands",
2400
3276
  "generated",
2401
- "generated-sdk-qr-scan.js"
3277
+ "generated-request-metadata-get.js"
2402
3278
  ]
2403
3279
  },
2404
- "generated:generated-sensing-paired-training-upload": {
3280
+ "generated:generated-sdk-enrich": {
2405
3281
  "aliases": [],
2406
3282
  "args": {},
2407
- "description": "Upload a batch of paired camera/CSI training samples.",
3283
+ "description": "Census + demographic enrichment from the request IP.",
2408
3284
  "examples": [
2409
- "$ trillboards generated sensing-paired-training-upload"
3285
+ "$ trillboards generated sdk-enrich"
2410
3286
  ],
2411
3287
  "flags": {
2412
3288
  "api-key": {
@@ -2447,7 +3323,7 @@
2447
3323
  },
2448
3324
  "hasDynamicHelp": false,
2449
3325
  "hiddenAliases": [],
2450
- "id": "generated:generated-sensing-paired-training-upload",
3326
+ "id": "generated:generated-sdk-enrich",
2451
3327
  "pluginAlias": "@trillboards/cli",
2452
3328
  "pluginName": "@trillboards/cli",
2453
3329
  "pluginType": "core",
@@ -2458,16 +3334,15 @@
2458
3334
  "dist",
2459
3335
  "commands",
2460
3336
  "generated",
2461
- "generated-sensing-paired-training-upload.js"
3337
+ "generated-sdk-enrich.js"
2462
3338
  ]
2463
3339
  },
2464
- "sandbox:create": {
3340
+ "generated:generated-sdk-impression": {
2465
3341
  "aliases": [],
2466
3342
  "args": {},
2467
- "description": "Create a sandbox test screen",
3343
+ "description": "Ingest an enriched CTV/DOOH impression.",
2468
3344
  "examples": [
2469
- "<%= config.bin %> sandbox create",
2470
- "<%= config.bin %> sandbox create --format json"
3345
+ "$ trillboards generated sdk-impression"
2471
3346
  ],
2472
3347
  "flags": {
2473
3348
  "api-key": {
@@ -2497,11 +3372,18 @@
2497
3372
  "yaml"
2498
3373
  ],
2499
3374
  "type": "option"
3375
+ },
3376
+ "data": {
3377
+ "description": "JSON request body",
3378
+ "name": "data",
3379
+ "hasDynamicHelp": false,
3380
+ "multiple": false,
3381
+ "type": "option"
2500
3382
  }
2501
3383
  },
2502
3384
  "hasDynamicHelp": false,
2503
3385
  "hiddenAliases": [],
2504
- "id": "sandbox:create",
3386
+ "id": "generated:generated-sdk-impression",
2505
3387
  "pluginAlias": "@trillboards/cli",
2506
3388
  "pluginName": "@trillboards/cli",
2507
3389
  "pluginType": "core",
@@ -2511,24 +3393,16 @@
2511
3393
  "relativePath": [
2512
3394
  "dist",
2513
3395
  "commands",
2514
- "sandbox",
2515
- "create.js"
3396
+ "generated",
3397
+ "generated-sdk-impression.js"
2516
3398
  ]
2517
3399
  },
2518
- "sandbox:emit": {
3400
+ "generated:generated-sdk-qr-beacon": {
2519
3401
  "aliases": [],
2520
- "args": {
2521
- "event_type": {
2522
- "description": "Event type to emit (e.g. impression.recorded, heartbeat)",
2523
- "name": "event_type",
2524
- "required": true
2525
- }
2526
- },
2527
- "description": "Emit a test event in the sandbox",
3402
+ "args": {},
3403
+ "description": "Process beacon signals associated with a prior QR scan.",
2528
3404
  "examples": [
2529
- "<%= config.bin %> sandbox emit impression.recorded",
2530
- "<%= config.bin %> sandbox emit heartbeat",
2531
- "<%= config.bin %> sandbox emit impression.recorded --data '{\"cpm\": 3.50}'"
3405
+ "$ trillboards generated sdk-qr-beacon"
2532
3406
  ],
2533
3407
  "flags": {
2534
3408
  "api-key": {
@@ -2560,8 +3434,7 @@
2560
3434
  "type": "option"
2561
3435
  },
2562
3436
  "data": {
2563
- "char": "d",
2564
- "description": "Additional event data (JSON string)",
3437
+ "description": "JSON request body",
2565
3438
  "name": "data",
2566
3439
  "hasDynamicHelp": false,
2567
3440
  "multiple": false,
@@ -2570,7 +3443,7 @@
2570
3443
  },
2571
3444
  "hasDynamicHelp": false,
2572
3445
  "hiddenAliases": [],
2573
- "id": "sandbox:emit",
3446
+ "id": "generated:generated-sdk-qr-beacon",
2574
3447
  "pluginAlias": "@trillboards/cli",
2575
3448
  "pluginName": "@trillboards/cli",
2576
3449
  "pluginType": "core",
@@ -2580,17 +3453,16 @@
2580
3453
  "relativePath": [
2581
3454
  "dist",
2582
3455
  "commands",
2583
- "sandbox",
2584
- "emit.js"
3456
+ "generated",
3457
+ "generated-sdk-qr-beacon.js"
2585
3458
  ]
2586
3459
  },
2587
- "sandbox:reset": {
3460
+ "generated:generated-sdk-qr-scan": {
2588
3461
  "aliases": [],
2589
3462
  "args": {},
2590
- "description": "Reset the sandbox — delete all test screens and events",
3463
+ "description": "Record a QR-code scan for physical-to-digital attribution.",
2591
3464
  "examples": [
2592
- "<%= config.bin %> sandbox reset",
2593
- "<%= config.bin %> sandbox reset --format json"
3465
+ "$ trillboards generated sdk-qr-scan"
2594
3466
  ],
2595
3467
  "flags": {
2596
3468
  "api-key": {
@@ -2620,11 +3492,18 @@
2620
3492
  "yaml"
2621
3493
  ],
2622
3494
  "type": "option"
3495
+ },
3496
+ "data": {
3497
+ "description": "JSON request body",
3498
+ "name": "data",
3499
+ "hasDynamicHelp": false,
3500
+ "multiple": false,
3501
+ "type": "option"
2623
3502
  }
2624
3503
  },
2625
3504
  "hasDynamicHelp": false,
2626
3505
  "hiddenAliases": [],
2627
- "id": "sandbox:reset",
3506
+ "id": "generated:generated-sdk-qr-scan",
2628
3507
  "pluginAlias": "@trillboards/cli",
2629
3508
  "pluginName": "@trillboards/cli",
2630
3509
  "pluginType": "core",
@@ -2634,17 +3513,16 @@
2634
3513
  "relativePath": [
2635
3514
  "dist",
2636
3515
  "commands",
2637
- "sandbox",
2638
- "reset.js"
3516
+ "generated",
3517
+ "generated-sdk-qr-scan.js"
2639
3518
  ]
2640
3519
  },
2641
- "sandbox:status": {
3520
+ "generated:generated-sensing-paired-training-upload": {
2642
3521
  "aliases": [],
2643
3522
  "args": {},
2644
- "description": "Show sandbox status — screens and recent events",
3523
+ "description": "Upload a batch of paired camera/CSI training samples.",
2645
3524
  "examples": [
2646
- "<%= config.bin %> sandbox status",
2647
- "<%= config.bin %> sandbox status --format json"
3525
+ "$ trillboards generated sensing-paired-training-upload"
2648
3526
  ],
2649
3527
  "flags": {
2650
3528
  "api-key": {
@@ -2674,11 +3552,18 @@
2674
3552
  "yaml"
2675
3553
  ],
2676
3554
  "type": "option"
3555
+ },
3556
+ "data": {
3557
+ "description": "JSON request body",
3558
+ "name": "data",
3559
+ "hasDynamicHelp": false,
3560
+ "multiple": false,
3561
+ "type": "option"
2677
3562
  }
2678
3563
  },
2679
3564
  "hasDynamicHelp": false,
2680
3565
  "hiddenAliases": [],
2681
- "id": "sandbox:status",
3566
+ "id": "generated:generated-sensing-paired-training-upload",
2682
3567
  "pluginAlias": "@trillboards/cli",
2683
3568
  "pluginName": "@trillboards/cli",
2684
3569
  "pluginType": "core",
@@ -2688,10 +3573,10 @@
2688
3573
  "relativePath": [
2689
3574
  "dist",
2690
3575
  "commands",
2691
- "sandbox",
2692
- "status.js"
3576
+ "generated",
3577
+ "generated-sensing-paired-training-upload.js"
2693
3578
  ]
2694
3579
  }
2695
3580
  },
2696
- "version": "0.1.0"
3581
+ "version": "0.1.1"
2697
3582
  }