@camstack/addon-model-studio 1.1.203 → 1.1.205

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 (18) hide show
  1. package/dist/{MotionZonesSettings-Bf3wXZlv.mjs → MotionZonesSettings-DbxM42-u.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-CxaNRx4y.mjs → PrivacyMaskSettings-B6QbcEYx.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-6Njva8QD.mjs → SceneMonitorEditor-C_sWam-G.mjs} +3 -3
  4. package/dist/_stub.js +3563 -3451
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BY8XezL8.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-CNTVW6pB.mjs} +3 -3
  6. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Cl1eNNmq.mjs +26 -0
  7. package/dist/{hostInit-wXzg-Tk8.mjs → hostInit-Cz9X-HIo.mjs} +2 -2
  8. package/dist/model-studio.addon.js +346 -426
  9. package/dist/model-studio.addon.mjs +346 -426
  10. package/dist/{player-overlays-DXZiCaYb.mjs → player-overlays-p1wcAk-U.mjs} +1 -1
  11. package/dist/remoteEntry.js +1 -1
  12. package/dist/{responsive-CTK4xC09.mjs → responsive-a5o_RHI6.mjs} +1 -1
  13. package/dist/{scene-monitor-copy-FMv2Ek7A.mjs → scene-monitor-copy-DRLPt6W9.mjs} +1 -1
  14. package/dist/{square-CB2wuPUO.mjs → square-Bfh8RaUF.mjs} +1 -1
  15. package/dist/{trash-2-JwXG4MxN.mjs → trash-2-D-9uzmfU.mjs} +1 -1
  16. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-C0ebXZ4C.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CrDmlyYW.mjs} +1 -1
  17. package/package.json +1 -1
  18. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-De0PN1jX.mjs +0 -26
@@ -5773,7 +5773,7 @@ var ZodIssueCode = {
5773
5773
  var ZodFirstPartyTypeKind;
5774
5774
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5775
5775
  //#endregion
5776
- //#region ../types/dist/sleep-DXKLNFvA.mjs
5776
+ //#region ../types/dist/sleep-C16NCZR2.mjs
5777
5777
  /**
5778
5778
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5779
5779
  * window to float samples (D455).
@@ -10926,394 +10926,30 @@ var ClipSearchStrictnessSchema = _enum([
10926
10926
  "balanced",
10927
10927
  "strict"
10928
10928
  ]);
10929
- var COCO_80_LABELS = [
10930
- {
10931
- id: "person",
10932
- name: "Person"
10933
- },
10934
- {
10935
- id: "bicycle",
10936
- name: "Bicycle"
10937
- },
10938
- {
10939
- id: "car",
10940
- name: "Car"
10941
- },
10942
- {
10943
- id: "motorcycle",
10944
- name: "Motorcycle"
10945
- },
10946
- {
10947
- id: "airplane",
10948
- name: "Airplane"
10949
- },
10950
- {
10951
- id: "bus",
10952
- name: "Bus"
10953
- },
10954
- {
10955
- id: "train",
10956
- name: "Train"
10957
- },
10958
- {
10959
- id: "truck",
10960
- name: "Truck"
10961
- },
10962
- {
10963
- id: "boat",
10964
- name: "Boat"
10965
- },
10966
- {
10967
- id: "traffic light",
10968
- name: "Traffic Light"
10969
- },
10970
- {
10971
- id: "fire hydrant",
10972
- name: "Fire Hydrant"
10973
- },
10974
- {
10975
- id: "stop sign",
10976
- name: "Stop Sign"
10977
- },
10978
- {
10979
- id: "parking meter",
10980
- name: "Parking Meter"
10981
- },
10982
- {
10983
- id: "bench",
10984
- name: "Bench"
10985
- },
10986
- {
10987
- id: "bird",
10988
- name: "Bird"
10989
- },
10990
- {
10991
- id: "cat",
10992
- name: "Cat"
10993
- },
10994
- {
10995
- id: "dog",
10996
- name: "Dog"
10997
- },
10998
- {
10999
- id: "horse",
11000
- name: "Horse"
11001
- },
11002
- {
11003
- id: "sheep",
11004
- name: "Sheep"
11005
- },
11006
- {
11007
- id: "cow",
11008
- name: "Cow"
11009
- },
11010
- {
11011
- id: "elephant",
11012
- name: "Elephant"
11013
- },
11014
- {
11015
- id: "bear",
11016
- name: "Bear"
11017
- },
11018
- {
11019
- id: "zebra",
11020
- name: "Zebra"
11021
- },
11022
- {
11023
- id: "giraffe",
11024
- name: "Giraffe"
11025
- },
11026
- {
11027
- id: "backpack",
11028
- name: "Backpack"
11029
- },
11030
- {
11031
- id: "umbrella",
11032
- name: "Umbrella"
11033
- },
11034
- {
11035
- id: "handbag",
11036
- name: "Handbag"
11037
- },
11038
- {
11039
- id: "tie",
11040
- name: "Tie"
11041
- },
11042
- {
11043
- id: "suitcase",
11044
- name: "Suitcase"
11045
- },
11046
- {
11047
- id: "frisbee",
11048
- name: "Frisbee"
11049
- },
11050
- {
11051
- id: "skis",
11052
- name: "Skis"
11053
- },
11054
- {
11055
- id: "snowboard",
11056
- name: "Snowboard"
11057
- },
11058
- {
11059
- id: "sports ball",
11060
- name: "Sports Ball"
11061
- },
11062
- {
11063
- id: "kite",
11064
- name: "Kite"
11065
- },
11066
- {
11067
- id: "baseball bat",
11068
- name: "Baseball Bat"
11069
- },
11070
- {
11071
- id: "baseball glove",
11072
- name: "Baseball Glove"
11073
- },
11074
- {
11075
- id: "skateboard",
11076
- name: "Skateboard"
11077
- },
11078
- {
11079
- id: "surfboard",
11080
- name: "Surfboard"
11081
- },
11082
- {
11083
- id: "tennis racket",
11084
- name: "Tennis Racket"
11085
- },
11086
- {
11087
- id: "bottle",
11088
- name: "Bottle"
11089
- },
11090
- {
11091
- id: "wine glass",
11092
- name: "Wine Glass"
11093
- },
11094
- {
11095
- id: "cup",
11096
- name: "Cup"
11097
- },
11098
- {
11099
- id: "fork",
11100
- name: "Fork"
11101
- },
11102
- {
11103
- id: "knife",
11104
- name: "Knife"
11105
- },
11106
- {
11107
- id: "spoon",
11108
- name: "Spoon"
11109
- },
11110
- {
11111
- id: "bowl",
11112
- name: "Bowl"
11113
- },
11114
- {
11115
- id: "banana",
11116
- name: "Banana"
11117
- },
11118
- {
11119
- id: "apple",
11120
- name: "Apple"
11121
- },
11122
- {
11123
- id: "sandwich",
11124
- name: "Sandwich"
11125
- },
11126
- {
11127
- id: "orange",
11128
- name: "Orange"
11129
- },
11130
- {
11131
- id: "broccoli",
11132
- name: "Broccoli"
11133
- },
11134
- {
11135
- id: "carrot",
11136
- name: "Carrot"
11137
- },
11138
- {
11139
- id: "hot dog",
11140
- name: "Hot Dog"
11141
- },
11142
- {
11143
- id: "pizza",
11144
- name: "Pizza"
11145
- },
11146
- {
11147
- id: "donut",
11148
- name: "Donut"
11149
- },
11150
- {
11151
- id: "cake",
11152
- name: "Cake"
11153
- },
11154
- {
11155
- id: "chair",
11156
- name: "Chair"
11157
- },
11158
- {
11159
- id: "couch",
11160
- name: "Couch"
11161
- },
11162
- {
11163
- id: "potted plant",
11164
- name: "Potted Plant"
11165
- },
11166
- {
11167
- id: "bed",
11168
- name: "Bed"
11169
- },
11170
- {
11171
- id: "dining table",
11172
- name: "Dining Table"
11173
- },
11174
- {
11175
- id: "toilet",
11176
- name: "Toilet"
11177
- },
11178
- {
11179
- id: "tv",
11180
- name: "TV"
11181
- },
11182
- {
11183
- id: "laptop",
11184
- name: "Laptop"
11185
- },
11186
- {
11187
- id: "mouse",
11188
- name: "Mouse"
11189
- },
11190
- {
11191
- id: "remote",
11192
- name: "Remote"
11193
- },
11194
- {
11195
- id: "keyboard",
11196
- name: "Keyboard"
11197
- },
11198
- {
11199
- id: "cell phone",
11200
- name: "Cell Phone"
11201
- },
11202
- {
11203
- id: "microwave",
11204
- name: "Microwave"
11205
- },
11206
- {
11207
- id: "oven",
11208
- name: "Oven"
11209
- },
11210
- {
11211
- id: "toaster",
11212
- name: "Toaster"
11213
- },
11214
- {
11215
- id: "sink",
11216
- name: "Sink"
11217
- },
11218
- {
11219
- id: "refrigerator",
11220
- name: "Refrigerator"
11221
- },
11222
- {
11223
- id: "book",
11224
- name: "Book"
11225
- },
11226
- {
11227
- id: "clock",
11228
- name: "Clock"
11229
- },
11230
- {
11231
- id: "vase",
11232
- name: "Vase"
11233
- },
11234
- {
11235
- id: "scissors",
11236
- name: "Scissors"
11237
- },
11238
- {
11239
- id: "teddy bear",
11240
- name: "Teddy Bear"
11241
- },
11242
- {
11243
- id: "hair drier",
11244
- name: "Hair Drier"
11245
- },
11246
- {
11247
- id: "toothbrush",
11248
- name: "Toothbrush"
11249
- }
11250
- ];
11251
- new Set([
11252
- {
11253
- id: "person",
11254
- name: "Person"
11255
- },
11256
- {
11257
- id: "vehicle",
11258
- name: "Vehicle"
11259
- },
11260
- {
11261
- id: "animal",
11262
- name: "Animal"
11263
- },
11264
- {
11265
- id: "package",
11266
- name: "Package"
11267
- }
11268
- ].map((l) => l.id));
11269
- var COCO_TO_MACRO = {
11270
- mapping: {
11271
- person: "person",
11272
- bicycle: "vehicle",
11273
- car: "vehicle",
11274
- motorcycle: "vehicle",
11275
- airplane: "vehicle",
11276
- bus: "vehicle",
11277
- train: "vehicle",
11278
- truck: "vehicle",
11279
- boat: "vehicle",
11280
- bird: "animal",
11281
- cat: "animal",
11282
- dog: "animal",
11283
- horse: "animal",
11284
- sheep: "animal",
11285
- cow: "animal",
11286
- elephant: "animal",
11287
- bear: "animal",
11288
- zebra: "animal",
11289
- giraffe: "animal",
11290
- suitcase: "package",
11291
- backpack: "package",
11292
- handbag: "package"
11293
- },
11294
- preserveOriginal: false
11295
- };
11296
- /** Steps a root detector may declare it fills. */
11297
- var FILLABLE_STEP_IDS = [
10929
+ /** Steps whose effect a root label can BE. */
10930
+ var LABEL_SUPPLY_STEP_IDS = [
11298
10931
  "animal-classifier",
11299
10932
  "vehicle-classifier",
11300
10933
  "package-detection"
11301
10934
  ];
10935
+ /** Steps whose box a root detection can BE. */
10936
+ var CROP_SUPPLY_STEP_IDS = ["plate-detection", "face-detection"];
10937
+ [...LABEL_SUPPLY_STEP_IDS, ...CROP_SUPPLY_STEP_IDS];
11302
10938
  /**
11303
- * The EFFECT vocabulary of each fillable step: exactly the strings the step
10939
+ * The EFFECT vocabulary of each label-kind step: exactly the strings the step
11304
10940
  * itself emits, in its own spelling. A linked label is one of these and nothing
11305
10941
  * else, so a tier-1 value means the same thing whichever writer produced it.
11306
10942
  *
11307
10943
  * - `animal-classifier`: the PRIMARY model's `-labels.json` (Open Images V7,
11308
10944
  * 8 classes) — also the species allow-list the step offers.
11309
- * - `vehicle-classifier`: `vehicle-type-v1-labels.json`, capitalised as the
11310
- * model emits them (the classifier writes `winner.class` verbatim).
10945
+ * - `vehicle-classifier`: the classifier's labels, capitalised as it emits them
10946
+ * (it writes `winner.class` verbatim).
11311
10947
  * - `package-detection`: its one output class.
11312
10948
  *
11313
- * `scripts/check-label-link-vocabulary.ts` fails the build if a model entry's
10949
+ * `scripts/check-label-link-vocabulary.ts` fails the build if a declared
11314
10950
  * `labelToEffect` names anything outside this table.
11315
10951
  */
11316
- var FILLABLE_STEP_VOCABULARIES = {
10952
+ var LABEL_SUPPLY_VOCABULARIES = {
11317
10953
  "animal-classifier": [
11318
10954
  "bird",
11319
10955
  "cat",
@@ -11336,8 +10972,8 @@ var FILLABLE_STEP_VOCABULARIES = {
11336
10972
  ],
11337
10973
  "package-detection": ["package"]
11338
10974
  };
11339
- /** The macro a detection must carry for the step to apply to it. */
11340
- var FILLABLE_STEP_MACRO = {
10975
+ /** The macro a detection must carry for a label-kind step to apply to it. */
10976
+ var LABEL_SUPPLY_MACRO = {
11341
10977
  "animal-classifier": "animal",
11342
10978
  "vehicle-classifier": "vehicle",
11343
10979
  "package-detection": "package"
@@ -11354,49 +10990,75 @@ var EFFECT_ALIASES = {
11354
10990
  },
11355
10991
  "package-detection": {}
11356
10992
  };
11357
- /**
11358
- * A labelmap is COCO when it carries at least half of the COCO-80 classes. A
11359
- * COCO detector NEVER fills a step (operator decision, D715): its `dog` / `car`
11360
- * is the generic class the classifier exists to refine, and its six animal
11361
- * classes would otherwise read as "fills animal-classifier 6/8". Frigate+
11362
- * shares about a dozen COCO names; a COCO-80 or COCO-91 labelmap carries ~80.
11363
- */
11364
- function isCocoLabelmap(labels) {
11365
- const present = new Set(labels);
11366
- return COCO_80_LABELS.filter((l) => present.has(l.id)).length * 2 >= COCO_80_LABELS.length;
11367
- }
10993
+ var CROP_SUPPLY_SOURCES = {
10994
+ "plate-detection": {
10995
+ rootLabels: ["license_plate"],
10996
+ parentMacro: "vehicle",
10997
+ childClass: "plate",
10998
+ servedChildSteps: ["plate-ocr"],
10999
+ use: "as-output"
11000
+ },
11001
+ "face-detection": {
11002
+ rootLabels: ["face"],
11003
+ parentMacro: "person",
11004
+ childClass: "face",
11005
+ servedChildSteps: ["face-embedding"],
11006
+ use: "refine",
11007
+ minRootInputPx: 640
11008
+ }
11009
+ };
11368
11010
  function effectFor(stepId, label) {
11369
11011
  const alias = EFFECT_ALIASES[stepId][label];
11370
11012
  if (alias !== void 0) return alias;
11371
11013
  const folded = label.toLowerCase();
11372
- return FILLABLE_STEP_VOCABULARIES[stepId].find((v) => v.toLowerCase() === folded);
11014
+ return LABEL_SUPPLY_VOCABULARIES[stepId].find((v) => v.toLowerCase() === folded);
11373
11015
  }
11374
11016
  /**
11375
- * Which steps a root detector fills, from its labelmap and classMap. A label
11376
- * counts for a step only when the model's classMap sends it to that step's
11377
- * macro AND it names a vocabulary entry. A step none of the labels reach is
11378
- * not declared; a COCO labelmap declares nothing.
11017
+ * Which steps a root detector can supply, from its labelmap and classMap.
11018
+ *
11019
+ * - label kind: a label counts for a step only when the classMap sends it to
11020
+ * that step's macro AND it names a vocabulary entry. Every root is judged
11021
+ * the same way — a COCO model supplies the animal classifier with the six
11022
+ * species COCO names, exactly as a Frigate+ model supplies seven.
11023
+ * - crop kind: the labelmap carries one of the step's root labels. Those
11024
+ * labels are deliberately left out of the classMap, so they never make a
11025
+ * track of their own.
11026
+ *
11027
+ * No classMap ⇒ no label supply (nothing says which macro a label lives under).
11379
11028
  */
11380
- function deriveClassifierFills(labels, classMap) {
11381
- if (classMap === void 0 || isCocoLabelmap(labels)) return [];
11382
- const fills = [];
11383
- for (const stepId of FILLABLE_STEP_IDS) {
11029
+ function deriveRootSupplies(labels, classMap) {
11030
+ const supplies = [];
11031
+ if (classMap !== void 0) for (const stepId of LABEL_SUPPLY_STEP_IDS) {
11384
11032
  const labelToEffect = {};
11385
11033
  for (const label of labels) {
11386
- if (classMap.mapping[label] !== FILLABLE_STEP_MACRO[stepId]) continue;
11034
+ if (classMap.mapping[label] !== LABEL_SUPPLY_MACRO[stepId]) continue;
11387
11035
  const effect = effectFor(stepId, label);
11388
11036
  if (effect !== void 0) labelToEffect[label] = effect;
11389
11037
  }
11390
11038
  const covered = new Set(Object.values(labelToEffect));
11391
11039
  if (covered.size === 0) continue;
11392
- const uncovered = FILLABLE_STEP_VOCABULARIES[stepId].filter((v) => !covered.has(v));
11393
- fills.push({
11040
+ const uncovered = LABEL_SUPPLY_VOCABULARIES[stepId].filter((v) => !covered.has(v));
11041
+ supplies.push({
11042
+ kind: "label",
11394
11043
  stepId,
11395
11044
  labelToEffect,
11396
11045
  uncovered
11397
11046
  });
11398
11047
  }
11399
- return fills;
11048
+ const present = new Set(labels);
11049
+ for (const stepId of CROP_SUPPLY_STEP_IDS) {
11050
+ const source = CROP_SUPPLY_SOURCES[stepId];
11051
+ const rootLabels = source.rootLabels.filter((l) => present.has(l));
11052
+ if (rootLabels.length === 0) continue;
11053
+ supplies.push({
11054
+ kind: "crop",
11055
+ stepId,
11056
+ rootLabels,
11057
+ parentMacro: source.parentMacro,
11058
+ childClass: source.childClass
11059
+ });
11060
+ }
11061
+ return supplies;
11400
11062
  }
11401
11063
  var MODEL_FORMATS = [
11402
11064
  "onnx",
@@ -11530,12 +11192,35 @@ var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { wei
11530
11192
  /** True when the weights or their data forbid commercial use. */
11531
11193
  nonCommercial: boolean().optional()
11532
11194
  }));
11533
- /** One `fillsClassifierEffects` entry — see `ModelCatalogEntry.fillsClassifierEffects`. */
11534
- var FillsClassifierEffectSchema = object({
11535
- stepId: _enum(FILLABLE_STEP_IDS),
11195
+ /**
11196
+ * One step a ROOT detector can supply from its own output (D730) — see
11197
+ * `ModelCatalogEntry.suppliesSteps`.
11198
+ *
11199
+ * - `label`: the root's raw class IS the step's answer. `labelToEffect` maps
11200
+ * the root's label to the step's vocabulary; `uncovered` is the vocabulary
11201
+ * the root cannot produce (shown as unavailable, never a blocker).
11202
+ * - `crop`: the root draws the box the step would have found (`license_plate`
11203
+ * for plate-detection, `face` for face-detection). The box becomes a detail
11204
+ * child of the `parentMacro` detection that contains it — never a track.
11205
+ */
11206
+ var RootStepSupplySchema = discriminatedUnion("kind", [object({
11207
+ kind: literal("label"),
11208
+ stepId: _enum(LABEL_SUPPLY_STEP_IDS),
11536
11209
  labelToEffect: record(string(), string()),
11537
11210
  uncovered: array(string()).readonly()
11538
- });
11211
+ }), object({
11212
+ kind: literal("crop"),
11213
+ stepId: _enum(CROP_SUPPLY_STEP_IDS),
11214
+ rootLabels: array(string()).readonly(),
11215
+ parentMacro: _enum(["vehicle", "person"]),
11216
+ childClass: _enum(["plate", "face"]),
11217
+ /**
11218
+ * The root's smaller input side, stamped on read by `rootSuppliesOf` from
11219
+ * the model entry — what a step's `minRootInputPx` gate judges. Never
11220
+ * stored by an import.
11221
+ */
11222
+ rootInputPx: number().int().positive().optional()
11223
+ })]);
11539
11224
  var ModelCatalogEntrySchema = object({
11540
11225
  id: string(),
11541
11226
  name: string(),
@@ -11662,15 +11347,15 @@ var ModelCatalogEntrySchema = object({
11662
11347
  */
11663
11348
  classMap: DetectionCatalogClassMapSchema.optional(),
11664
11349
  /**
11665
- * The pipeline steps this ROOT detector already does the work of (D715):
11666
- * its labels name the effect the step exists to produce (`deer` for
11667
- * `animal-classifier`, `package` for `package-detection`). Derived from the
11668
- * labelmap by `deriveClassifierFills`, never hand-written; a COCO model
11669
- * declares none. Whether a declaration is honoured is the step's own
11670
- * `labelLink` policy (`resolveLabelLink`). `labelToEffect` values are in
11671
- * `FILLABLE_STEP_VOCABULARIES` (guard `check-label-link-vocabulary`).
11350
+ * The pipeline steps this ROOT detector can supply from its own output
11351
+ * (D730): its labels name a step's effect (`deer` for `animal-classifier`)
11352
+ * or draw a step's box (`license_plate` for `plate-detection`). Computed at
11353
+ * import from THIS model's labelmap by `deriveRootSupplies`, never written
11354
+ * by hand and never assumed per family; a row without it is derived on read
11355
+ * (`rootSuppliesOf`). Whether a camera uses it is the step's own
11356
+ * `useRootModel` flag (`resolveRootSupply`).
11672
11357
  */
11673
- fillsClassifierEffects: array(FillsClassifierEffectSchema).readonly().optional(),
11358
+ suppliesSteps: array(RootStepSupplySchema).readonly().optional(),
11674
11359
  /**
11675
11360
  * The model's CLIP feature-space contract (text encoder, dimension, vector
11676
11361
  * index, token window, search floor) — see `clip-model.ts`. Present ONLY on a
@@ -18632,6 +18317,51 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
18632
18317
  kind: "mutation",
18633
18318
  auth: "admin"
18634
18319
  });
18320
+ new Set([
18321
+ {
18322
+ id: "person",
18323
+ name: "Person"
18324
+ },
18325
+ {
18326
+ id: "vehicle",
18327
+ name: "Vehicle"
18328
+ },
18329
+ {
18330
+ id: "animal",
18331
+ name: "Animal"
18332
+ },
18333
+ {
18334
+ id: "package",
18335
+ name: "Package"
18336
+ }
18337
+ ].map((l) => l.id));
18338
+ var COCO_TO_MACRO = {
18339
+ mapping: {
18340
+ person: "person",
18341
+ bicycle: "vehicle",
18342
+ car: "vehicle",
18343
+ motorcycle: "vehicle",
18344
+ airplane: "vehicle",
18345
+ bus: "vehicle",
18346
+ train: "vehicle",
18347
+ truck: "vehicle",
18348
+ boat: "vehicle",
18349
+ bird: "animal",
18350
+ cat: "animal",
18351
+ dog: "animal",
18352
+ horse: "animal",
18353
+ sheep: "animal",
18354
+ cow: "animal",
18355
+ elephant: "animal",
18356
+ bear: "animal",
18357
+ zebra: "animal",
18358
+ giraffe: "animal",
18359
+ suitcase: "package",
18360
+ backpack: "package",
18361
+ handbag: "package"
18362
+ },
18363
+ preserveOriginal: false
18364
+ };
18635
18365
  var AUDIO_MACRO_LABELS = [
18636
18366
  {
18637
18367
  id: "speech",
@@ -23908,6 +23638,34 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
23908
23638
  timestamp: number()
23909
23639
  });
23910
23640
  /**
23641
+ * A root model's boxes standing in for one crop-kind step's own inference
23642
+ * (D730) — see `runPipeline.suppliedRoot`.
23643
+ */
23644
+ var SuppliedRootOutputSchema = object({
23645
+ stepId: string(),
23646
+ /** The root model that drew the boxes — stamped on the result. */
23647
+ modelId: string(),
23648
+ detections: array(object({
23649
+ /** `[x1, y1, x2, y2]` in the pixels of the call's image. */
23650
+ bbox: tuple([
23651
+ number(),
23652
+ number(),
23653
+ number(),
23654
+ number()
23655
+ ]),
23656
+ score: number(),
23657
+ /**
23658
+ * Five facial landmarks in the same pixels — a face the step's own
23659
+ * detector already re-found inside a root face box (D730), so its
23660
+ * embedder child aligns it exactly as it aligns any detected face.
23661
+ */
23662
+ landmarks: array(object({
23663
+ x: number(),
23664
+ y: number()
23665
+ })).optional()
23666
+ })).min(1)
23667
+ });
23668
+ /**
23911
23669
  * Reference to the frame's retained NATIVE surface + the parent crop's placement
23912
23670
  * within the frame, so the executor can re-cut a leaf child ROI at native
23913
23671
  * resolution on the detail plane. See the `runPipeline` `nativeCropRef` field.
@@ -24038,7 +23796,7 @@ var PipelineModelOptionSchema = object({
24038
23796
  legacy: boolean().optional(),
24039
23797
  provider: ModelProviderIdSchema.optional(),
24040
23798
  defaultConfidence: number().optional(),
24041
- fillsClassifierEffects: array(FillsClassifierEffectSchema).readonly().optional()
23799
+ suppliesSteps: array(RootStepSupplySchema).readonly().optional()
24042
23800
  });
24043
23801
  var ConfigFieldBridge = custom();
24044
23802
  var PipelineAddonSchemaSchema = object({
@@ -24306,7 +24064,16 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
24306
24064
  * `device-not-servable`), and nothing reaches the camera's live
24307
24065
  * trace stream. Absent ⇒ unchanged behaviour.
24308
24066
  */
24309
- replay: literal(true).optional()
24067
+ replay: literal(true).optional(),
24068
+ /**
24069
+ * Root-supplied detections for the tree's ROOT step (D730). Set by
24070
+ * `runDetailSubtree` when the camera's root model supplies a crop-kind
24071
+ * step (a Frigate+ `license_plate` for `plate-detection`): the step is
24072
+ * NOT inferred, these boxes are its output, and its children (the plate
24073
+ * reader) run on them through their own crop policy. Boxes are in the
24074
+ * PIXELS of the image this call carries. Absent ⇒ the root step runs.
24075
+ */
24076
+ suppliedRoot: SuppliedRootOutputSchema.optional()
24310
24077
  }), PipelineRunResultBridge, { kind: "mutation" }), method(object({
24311
24078
  steps: array(PipelineStepInputSchema).min(1),
24312
24079
  frames: array(FrameInputSchema).min(1).max(255),
@@ -25408,7 +25175,22 @@ method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mu
25408
25175
  */
25409
25176
  cropJpeg: string().optional(),
25410
25177
  parent: DetailParentSchema,
25411
- steps: array(string()).optional()
25178
+ steps: array(string()).optional(),
25179
+ /**
25180
+ * The camera's root model already drew this step's boxes (D730): a
25181
+ * `license_plate` inside the parent vehicle. The named step is NOT
25182
+ * inferred — these FRAME-space boxes are its output — and its
25183
+ * requested children (the plate reader) run on them. Absent ⇒ every
25184
+ * requested step infers as before.
25185
+ */
25186
+ supplied: object({
25187
+ stepId: string(),
25188
+ modelId: string(),
25189
+ boxes: array(object({
25190
+ bbox: NativeCropBboxSchema,
25191
+ score: number()
25192
+ })).min(1)
25193
+ }).optional()
25412
25194
  }), object({ details: array(DetailResultSchema) }).nullable(), { kind: "mutation" }), method(object({
25413
25195
  /** Catalog step id, e.g. `clip-embedding`. */
25414
25196
  stepId: string(),
@@ -28709,6 +28491,14 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
28709
28491
  */
28710
28492
  alive: boolean()
28711
28493
  })), method(object({
28494
+ deviceId: number().int().nonnegative(),
28495
+ sessionId: string(),
28496
+ downlinkMbps: number().nonnegative()
28497
+ }), object({
28498
+ outcome: _enum(["switching", "held"]),
28499
+ tier: CamProfileSchema.nullable(),
28500
+ reason: string()
28501
+ }), { kind: "mutation" }), method(object({
28712
28502
  deviceId: number().int().nonnegative(),
28713
28503
  sessionId: string()
28714
28504
  }), WebrtcSessionDebugSchema, { kind: "query" });
@@ -31384,7 +31174,8 @@ var ConnectionEndpointSchema = object({
31384
31174
  "lan-ipv6",
31385
31175
  "public",
31386
31176
  "loopback",
31387
- "app-link"
31177
+ "app-link",
31178
+ "custom"
31388
31179
  ]),
31389
31180
  /**
31390
31181
  * Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
@@ -31486,6 +31277,76 @@ var ViewerEndpointsSchema = object({
31486
31277
  /** What the ranking currently resolves to (may be empty if nothing is up). */
31487
31278
  resolved: array(string()).readonly()
31488
31279
  });
31280
+ /**
31281
+ * DEPRECATED compatibility shape of `getHubAddresses` (D729 amendment, kept
31282
+ * one release for addons built against it): `cluster` is the `agents` role,
31283
+ * `browser` the `signIn` role; `override` is the flagged address.
31284
+ */
31285
+ var HubAddressSnapshotSchema = object({
31286
+ override: string().nullable(),
31287
+ resolved: string().nullable(),
31288
+ source: _enum([
31289
+ "override",
31290
+ "auto",
31291
+ "none"
31292
+ ])
31293
+ });
31294
+ var HubAddressesSchema = object({
31295
+ cluster: HubAddressSnapshotSchema,
31296
+ browser: HubAddressSnapshotSchema
31297
+ });
31298
+ /**
31299
+ * What an address is used for (`hub-address.ts`). `viewer` is many-valued;
31300
+ * `notifications`, `agents` and `signIn` are carried by at most one address.
31301
+ */
31302
+ var HubAddressRoleSchema = _enum([
31303
+ "viewer",
31304
+ "notifications",
31305
+ "agents",
31306
+ "signIn"
31307
+ ]);
31308
+ var RoleSourceSchema = _enum([
31309
+ "flagged",
31310
+ "auto",
31311
+ "none"
31312
+ ]);
31313
+ /** One single-valued role: the flagged address, the one in use, and why. */
31314
+ var HubAddressRoleResolutionSchema = object({
31315
+ /** The address carrying the flag, or null = automatic. */
31316
+ flagged: string().nullable(),
31317
+ /** The address in use, or null when nothing qualifies (never loopback). */
31318
+ resolved: string().nullable(),
31319
+ source: RoleSourceSchema
31320
+ });
31321
+ var HubViewerResolutionSchema = object({
31322
+ /** The addresses flagged `viewer`, or empty = automatic. */
31323
+ flagged: array(string()).readonly(),
31324
+ /** What the apps race right now. */
31325
+ resolved: array(string()).readonly(),
31326
+ source: RoleSourceSchema
31327
+ });
31328
+ var HubAddressBookSchema = object({
31329
+ rows: array(ConnectionEndpointSchema.extend({
31330
+ /** In the hub's detected palette right now. */
31331
+ detected: boolean(),
31332
+ /** Entered by the operator (removable). */
31333
+ custom: boolean(),
31334
+ /** The roles explicitly flagged on this address. */
31335
+ flags: array(HubAddressRoleSchema).readonly(),
31336
+ /** The roles this address serves right now — flagged or automatic. */
31337
+ inUse: array(HubAddressRoleSchema).readonly(),
31338
+ /** The roles this address may be flagged with. */
31339
+ eligible: array(HubAddressRoleSchema).readonly()
31340
+ })).readonly(),
31341
+ roles: object({
31342
+ viewer: HubViewerResolutionSchema,
31343
+ notifications: HubAddressRoleResolutionSchema,
31344
+ agents: HubAddressRoleResolutionSchema,
31345
+ signIn: HubAddressRoleResolutionSchema
31346
+ }),
31347
+ /** The `hub=` an app link carries (D709), or null. */
31348
+ appLinkHub: string().nullable()
31349
+ });
31489
31350
  var AllowedAddressesSchema = object({
31490
31351
  /**
31491
31352
  * Allowlist of interface addresses operators have explicitly opted
@@ -31532,7 +31393,24 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
31532
31393
  * an address notification links can be flagged with, not a hub
31533
31394
  * route. Default `false`: racers and rankers never see it. */
31534
31395
  includeAppLink: boolean().optional()
31535
- }), GetConnectionEndpointsResultSchema), method(_void(), NotificationEndpointSchema), method(object({ baseUrl: string().nullable() }), NotificationEndpointSchema, { kind: "mutation" }), method(_void(), ViewerEndpointsSchema), method(object({ baseUrls: array(string()).readonly() }), ViewerEndpointsSchema, { kind: "mutation" }), method(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" }), method(_void(), TlsStatusSchema), method(object({ reason: string().optional() }), TlsStatusSchema, {
31396
+ }), GetConnectionEndpointsResultSchema), method(_void(), NotificationEndpointSchema), method(object({ baseUrl: string().nullable() }), NotificationEndpointSchema, { kind: "mutation" }), method(_void(), ViewerEndpointsSchema), method(object({ baseUrls: array(string()).readonly() }), ViewerEndpointsSchema, { kind: "mutation" }), method(object({ scheme: _enum(["http", "https"]).optional() }).optional(), HubAddressBookSchema), method(object({
31397
+ baseUrl: string(),
31398
+ label: string().max(80)
31399
+ }), HubAddressBookSchema, {
31400
+ kind: "mutation",
31401
+ auth: "admin"
31402
+ }), method(object({ baseUrl: string() }), HubAddressBookSchema, {
31403
+ kind: "mutation",
31404
+ auth: "admin"
31405
+ }), method(object({
31406
+ role: HubAddressRoleSchema,
31407
+ baseUrl: string().nullable(),
31408
+ enabled: boolean(),
31409
+ acceptInsecureHttp: boolean().optional()
31410
+ }), HubAddressBookSchema, {
31411
+ kind: "mutation",
31412
+ auth: "admin"
31413
+ }), method(_void(), HubAddressesSchema), method(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" }), method(_void(), TlsStatusSchema), method(object({ reason: string().optional() }), TlsStatusSchema, {
31536
31414
  kind: "mutation",
31537
31415
  auth: "admin"
31538
31416
  }), method(object({
@@ -37117,17 +36995,18 @@ function buildFrigateClassMap(labels) {
37117
36995
  };
37118
36996
  }
37119
36997
  /**
37120
- * Everything a Frigate / Frigate+ entry derives from its labelmap: the classMap
37121
- * and the steps it fills (D715). Every Frigate builder spreads this, so the two
37122
- * cannot be derived from different label lists. A COCO labelmap gets its map
37123
- * and no fill.
36998
+ * Everything a Frigate / Frigate+ entry derives from ITS OWN labelmap: the
36999
+ * classMap and the steps it can supply (D730) — label and crop kinds alike.
37000
+ * Every Frigate builder spreads this at import, so the two cannot be derived
37001
+ * from different label lists, and no family is assumed to carry a label it
37002
+ * does not list.
37124
37003
  */
37125
37004
  function frigateLabelFields(labels) {
37126
37005
  const classMap = buildFrigateClassMap(labels);
37127
- const fills = deriveClassifierFills(labels, classMap);
37128
- return fills.length > 0 ? {
37006
+ const supplies = deriveRootSupplies(labels, classMap);
37007
+ return supplies.length > 0 ? {
37129
37008
  classMap,
37130
- fillsClassifierEffects: fills
37009
+ suppliesSteps: supplies
37131
37010
  } : { classMap };
37132
37011
  }
37133
37012
  /**
@@ -40058,12 +39937,24 @@ Object.freeze({
40058
39937
  addonId: null,
40059
39938
  access: "view"
40060
39939
  },
39940
+ "localNetwork.addCustomAddress": {
39941
+ capName: "local-network",
39942
+ capScope: "system",
39943
+ addonId: null,
39944
+ access: "create"
39945
+ },
40061
39946
  "localNetwork.downloadCa": {
40062
39947
  capName: "local-network",
40063
39948
  capScope: "system",
40064
39949
  addonId: null,
40065
39950
  access: "view"
40066
39951
  },
39952
+ "localNetwork.getAddresses": {
39953
+ capName: "local-network",
39954
+ capScope: "system",
39955
+ addonId: null,
39956
+ access: "view"
39957
+ },
40067
39958
  "localNetwork.getAllowedAddresses": {
40068
39959
  capName: "local-network",
40069
39960
  capScope: "system",
@@ -40076,6 +39967,12 @@ Object.freeze({
40076
39967
  addonId: null,
40077
39968
  access: "view"
40078
39969
  },
39970
+ "localNetwork.getHubAddresses": {
39971
+ capName: "local-network",
39972
+ capScope: "system",
39973
+ addonId: null,
39974
+ access: "view"
39975
+ },
40079
39976
  "localNetwork.getNotificationEndpoint": {
40080
39977
  capName: "local-network",
40081
39978
  capScope: "system",
@@ -40112,6 +40009,12 @@ Object.freeze({
40112
40009
  addonId: null,
40113
40010
  access: "create"
40114
40011
  },
40012
+ "localNetwork.removeCustomAddress": {
40013
+ capName: "local-network",
40014
+ capScope: "system",
40015
+ addonId: null,
40016
+ access: "delete"
40017
+ },
40115
40018
  "localNetwork.resetAllowlistToBestMatch": {
40116
40019
  capName: "local-network",
40117
40020
  capScope: "system",
@@ -40124,6 +40027,12 @@ Object.freeze({
40124
40027
  addonId: null,
40125
40028
  access: "create"
40126
40029
  },
40030
+ "localNetwork.setAddressRole": {
40031
+ capName: "local-network",
40032
+ capScope: "system",
40033
+ addonId: null,
40034
+ access: "create"
40035
+ },
40127
40036
  "localNetwork.setAllowedAddresses": {
40128
40037
  capName: "local-network",
40129
40038
  capScope: "system",
@@ -44378,6 +44287,12 @@ Object.freeze({
44378
44287
  addonId: null,
44379
44288
  access: "create"
44380
44289
  },
44290
+ "webrtcSession.applyDownlinkProbe": {
44291
+ capName: "webrtc-session",
44292
+ capScope: "device",
44293
+ addonId: null,
44294
+ access: "create"
44295
+ },
44381
44296
  "webrtcSession.closeSession": {
44382
44297
  capName: "webrtc-session",
44383
44298
  capScope: "device",
@@ -48300,6 +48215,11 @@ Object.freeze({
48300
48215
  form: "single",
48301
48216
  optional: false
48302
48217
  }],
48218
+ "webrtcSession.applyDownlinkProbe": [{
48219
+ name: "deviceId",
48220
+ form: "single",
48221
+ optional: false
48222
+ }],
48303
48223
  "webrtcSession.closeSession": [{
48304
48224
  name: "deviceId",
48305
48225
  form: "single",
@@ -48833,7 +48753,7 @@ var STATE_SUMMARY_VARS = [
48833
48753
  {
48834
48754
  name: "summarySection",
48835
48755
  label: "Summary: this section",
48836
- description: "The section a per-section summary row is about (D698); on a summary sent as one message, every section it reports, comma-separated.",
48756
+ description: "The section a per-section summary row is about; on a summary sent as one message, every section it reports, comma-separated.",
48837
48757
  example: "Batterie scariche",
48838
48758
  group: "system",
48839
48759
  families: ["rule"],