@camstack/addon-model-studio 1.1.203 → 1.1.204

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-f-Rb4FPx.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-CxaNRx4y.mjs → PrivacyMaskSettings-DzrwiikK.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-6Njva8QD.mjs → SceneMonitorEditor-pr_u7JDi.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-DD6MdVfP.mjs} +3 -3
  6. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Cjm3a0Rl.mjs +26 -0
  7. package/dist/{hostInit-wXzg-Tk8.mjs → hostInit-dZ-iNlYE.mjs} +2 -2
  8. package/dist/model-studio.addon.js +246 -424
  9. package/dist/model-studio.addon.mjs +246 -424
  10. package/dist/{player-overlays-DXZiCaYb.mjs → player-overlays-DyoPwbMr.mjs} +1 -1
  11. package/dist/remoteEntry.js +1 -1
  12. package/dist/{responsive-CTK4xC09.mjs → responsive-_Hjo-SPS.mjs} +1 -1
  13. package/dist/{scene-monitor-copy-FMv2Ek7A.mjs → scene-monitor-copy-DxG4-n1Z.mjs} +1 -1
  14. package/dist/{square-CB2wuPUO.mjs → square-BIirO7Z1.mjs} +1 -1
  15. package/dist/{trash-2-JwXG4MxN.mjs → trash-2-B9qboTSI.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-DExLMP5B.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
@@ -10900,394 +10900,30 @@ var ClipSearchStrictnessSchema = _enum([
10900
10900
  "balanced",
10901
10901
  "strict"
10902
10902
  ]);
10903
- var COCO_80_LABELS = [
10904
- {
10905
- id: "person",
10906
- name: "Person"
10907
- },
10908
- {
10909
- id: "bicycle",
10910
- name: "Bicycle"
10911
- },
10912
- {
10913
- id: "car",
10914
- name: "Car"
10915
- },
10916
- {
10917
- id: "motorcycle",
10918
- name: "Motorcycle"
10919
- },
10920
- {
10921
- id: "airplane",
10922
- name: "Airplane"
10923
- },
10924
- {
10925
- id: "bus",
10926
- name: "Bus"
10927
- },
10928
- {
10929
- id: "train",
10930
- name: "Train"
10931
- },
10932
- {
10933
- id: "truck",
10934
- name: "Truck"
10935
- },
10936
- {
10937
- id: "boat",
10938
- name: "Boat"
10939
- },
10940
- {
10941
- id: "traffic light",
10942
- name: "Traffic Light"
10943
- },
10944
- {
10945
- id: "fire hydrant",
10946
- name: "Fire Hydrant"
10947
- },
10948
- {
10949
- id: "stop sign",
10950
- name: "Stop Sign"
10951
- },
10952
- {
10953
- id: "parking meter",
10954
- name: "Parking Meter"
10955
- },
10956
- {
10957
- id: "bench",
10958
- name: "Bench"
10959
- },
10960
- {
10961
- id: "bird",
10962
- name: "Bird"
10963
- },
10964
- {
10965
- id: "cat",
10966
- name: "Cat"
10967
- },
10968
- {
10969
- id: "dog",
10970
- name: "Dog"
10971
- },
10972
- {
10973
- id: "horse",
10974
- name: "Horse"
10975
- },
10976
- {
10977
- id: "sheep",
10978
- name: "Sheep"
10979
- },
10980
- {
10981
- id: "cow",
10982
- name: "Cow"
10983
- },
10984
- {
10985
- id: "elephant",
10986
- name: "Elephant"
10987
- },
10988
- {
10989
- id: "bear",
10990
- name: "Bear"
10991
- },
10992
- {
10993
- id: "zebra",
10994
- name: "Zebra"
10995
- },
10996
- {
10997
- id: "giraffe",
10998
- name: "Giraffe"
10999
- },
11000
- {
11001
- id: "backpack",
11002
- name: "Backpack"
11003
- },
11004
- {
11005
- id: "umbrella",
11006
- name: "Umbrella"
11007
- },
11008
- {
11009
- id: "handbag",
11010
- name: "Handbag"
11011
- },
11012
- {
11013
- id: "tie",
11014
- name: "Tie"
11015
- },
11016
- {
11017
- id: "suitcase",
11018
- name: "Suitcase"
11019
- },
11020
- {
11021
- id: "frisbee",
11022
- name: "Frisbee"
11023
- },
11024
- {
11025
- id: "skis",
11026
- name: "Skis"
11027
- },
11028
- {
11029
- id: "snowboard",
11030
- name: "Snowboard"
11031
- },
11032
- {
11033
- id: "sports ball",
11034
- name: "Sports Ball"
11035
- },
11036
- {
11037
- id: "kite",
11038
- name: "Kite"
11039
- },
11040
- {
11041
- id: "baseball bat",
11042
- name: "Baseball Bat"
11043
- },
11044
- {
11045
- id: "baseball glove",
11046
- name: "Baseball Glove"
11047
- },
11048
- {
11049
- id: "skateboard",
11050
- name: "Skateboard"
11051
- },
11052
- {
11053
- id: "surfboard",
11054
- name: "Surfboard"
11055
- },
11056
- {
11057
- id: "tennis racket",
11058
- name: "Tennis Racket"
11059
- },
11060
- {
11061
- id: "bottle",
11062
- name: "Bottle"
11063
- },
11064
- {
11065
- id: "wine glass",
11066
- name: "Wine Glass"
11067
- },
11068
- {
11069
- id: "cup",
11070
- name: "Cup"
11071
- },
11072
- {
11073
- id: "fork",
11074
- name: "Fork"
11075
- },
11076
- {
11077
- id: "knife",
11078
- name: "Knife"
11079
- },
11080
- {
11081
- id: "spoon",
11082
- name: "Spoon"
11083
- },
11084
- {
11085
- id: "bowl",
11086
- name: "Bowl"
11087
- },
11088
- {
11089
- id: "banana",
11090
- name: "Banana"
11091
- },
11092
- {
11093
- id: "apple",
11094
- name: "Apple"
11095
- },
11096
- {
11097
- id: "sandwich",
11098
- name: "Sandwich"
11099
- },
11100
- {
11101
- id: "orange",
11102
- name: "Orange"
11103
- },
11104
- {
11105
- id: "broccoli",
11106
- name: "Broccoli"
11107
- },
11108
- {
11109
- id: "carrot",
11110
- name: "Carrot"
11111
- },
11112
- {
11113
- id: "hot dog",
11114
- name: "Hot Dog"
11115
- },
11116
- {
11117
- id: "pizza",
11118
- name: "Pizza"
11119
- },
11120
- {
11121
- id: "donut",
11122
- name: "Donut"
11123
- },
11124
- {
11125
- id: "cake",
11126
- name: "Cake"
11127
- },
11128
- {
11129
- id: "chair",
11130
- name: "Chair"
11131
- },
11132
- {
11133
- id: "couch",
11134
- name: "Couch"
11135
- },
11136
- {
11137
- id: "potted plant",
11138
- name: "Potted Plant"
11139
- },
11140
- {
11141
- id: "bed",
11142
- name: "Bed"
11143
- },
11144
- {
11145
- id: "dining table",
11146
- name: "Dining Table"
11147
- },
11148
- {
11149
- id: "toilet",
11150
- name: "Toilet"
11151
- },
11152
- {
11153
- id: "tv",
11154
- name: "TV"
11155
- },
11156
- {
11157
- id: "laptop",
11158
- name: "Laptop"
11159
- },
11160
- {
11161
- id: "mouse",
11162
- name: "Mouse"
11163
- },
11164
- {
11165
- id: "remote",
11166
- name: "Remote"
11167
- },
11168
- {
11169
- id: "keyboard",
11170
- name: "Keyboard"
11171
- },
11172
- {
11173
- id: "cell phone",
11174
- name: "Cell Phone"
11175
- },
11176
- {
11177
- id: "microwave",
11178
- name: "Microwave"
11179
- },
11180
- {
11181
- id: "oven",
11182
- name: "Oven"
11183
- },
11184
- {
11185
- id: "toaster",
11186
- name: "Toaster"
11187
- },
11188
- {
11189
- id: "sink",
11190
- name: "Sink"
11191
- },
11192
- {
11193
- id: "refrigerator",
11194
- name: "Refrigerator"
11195
- },
11196
- {
11197
- id: "book",
11198
- name: "Book"
11199
- },
11200
- {
11201
- id: "clock",
11202
- name: "Clock"
11203
- },
11204
- {
11205
- id: "vase",
11206
- name: "Vase"
11207
- },
11208
- {
11209
- id: "scissors",
11210
- name: "Scissors"
11211
- },
11212
- {
11213
- id: "teddy bear",
11214
- name: "Teddy Bear"
11215
- },
11216
- {
11217
- id: "hair drier",
11218
- name: "Hair Drier"
11219
- },
11220
- {
11221
- id: "toothbrush",
11222
- name: "Toothbrush"
11223
- }
11224
- ];
11225
- new Set([
11226
- {
11227
- id: "person",
11228
- name: "Person"
11229
- },
11230
- {
11231
- id: "vehicle",
11232
- name: "Vehicle"
11233
- },
11234
- {
11235
- id: "animal",
11236
- name: "Animal"
11237
- },
11238
- {
11239
- id: "package",
11240
- name: "Package"
11241
- }
11242
- ].map((l) => l.id));
11243
- var COCO_TO_MACRO = {
11244
- mapping: {
11245
- person: "person",
11246
- bicycle: "vehicle",
11247
- car: "vehicle",
11248
- motorcycle: "vehicle",
11249
- airplane: "vehicle",
11250
- bus: "vehicle",
11251
- train: "vehicle",
11252
- truck: "vehicle",
11253
- boat: "vehicle",
11254
- bird: "animal",
11255
- cat: "animal",
11256
- dog: "animal",
11257
- horse: "animal",
11258
- sheep: "animal",
11259
- cow: "animal",
11260
- elephant: "animal",
11261
- bear: "animal",
11262
- zebra: "animal",
11263
- giraffe: "animal",
11264
- suitcase: "package",
11265
- backpack: "package",
11266
- handbag: "package"
11267
- },
11268
- preserveOriginal: false
11269
- };
11270
- /** Steps a root detector may declare it fills. */
11271
- var FILLABLE_STEP_IDS = [
10903
+ /** Steps whose effect a root label can BE. */
10904
+ var LABEL_SUPPLY_STEP_IDS = [
11272
10905
  "animal-classifier",
11273
10906
  "vehicle-classifier",
11274
10907
  "package-detection"
11275
10908
  ];
10909
+ /** Steps whose box a root detection can BE. */
10910
+ var CROP_SUPPLY_STEP_IDS = ["plate-detection", "face-detection"];
10911
+ [...LABEL_SUPPLY_STEP_IDS, ...CROP_SUPPLY_STEP_IDS];
11276
10912
  /**
11277
- * The EFFECT vocabulary of each fillable step: exactly the strings the step
10913
+ * The EFFECT vocabulary of each label-kind step: exactly the strings the step
11278
10914
  * itself emits, in its own spelling. A linked label is one of these and nothing
11279
10915
  * else, so a tier-1 value means the same thing whichever writer produced it.
11280
10916
  *
11281
10917
  * - `animal-classifier`: the PRIMARY model's `-labels.json` (Open Images V7,
11282
10918
  * 8 classes) — also the species allow-list the step offers.
11283
- * - `vehicle-classifier`: `vehicle-type-v1-labels.json`, capitalised as the
11284
- * model emits them (the classifier writes `winner.class` verbatim).
10919
+ * - `vehicle-classifier`: the classifier's labels, capitalised as it emits them
10920
+ * (it writes `winner.class` verbatim).
11285
10921
  * - `package-detection`: its one output class.
11286
10922
  *
11287
- * `scripts/check-label-link-vocabulary.ts` fails the build if a model entry's
10923
+ * `scripts/check-label-link-vocabulary.ts` fails the build if a declared
11288
10924
  * `labelToEffect` names anything outside this table.
11289
10925
  */
11290
- var FILLABLE_STEP_VOCABULARIES = {
10926
+ var LABEL_SUPPLY_VOCABULARIES = {
11291
10927
  "animal-classifier": [
11292
10928
  "bird",
11293
10929
  "cat",
@@ -11310,8 +10946,8 @@ var FILLABLE_STEP_VOCABULARIES = {
11310
10946
  ],
11311
10947
  "package-detection": ["package"]
11312
10948
  };
11313
- /** The macro a detection must carry for the step to apply to it. */
11314
- var FILLABLE_STEP_MACRO = {
10949
+ /** The macro a detection must carry for a label-kind step to apply to it. */
10950
+ var LABEL_SUPPLY_MACRO = {
11315
10951
  "animal-classifier": "animal",
11316
10952
  "vehicle-classifier": "vehicle",
11317
10953
  "package-detection": "package"
@@ -11328,49 +10964,75 @@ var EFFECT_ALIASES = {
11328
10964
  },
11329
10965
  "package-detection": {}
11330
10966
  };
11331
- /**
11332
- * A labelmap is COCO when it carries at least half of the COCO-80 classes. A
11333
- * COCO detector NEVER fills a step (operator decision, D715): its `dog` / `car`
11334
- * is the generic class the classifier exists to refine, and its six animal
11335
- * classes would otherwise read as "fills animal-classifier 6/8". Frigate+
11336
- * shares about a dozen COCO names; a COCO-80 or COCO-91 labelmap carries ~80.
11337
- */
11338
- function isCocoLabelmap(labels) {
11339
- const present = new Set(labels);
11340
- return COCO_80_LABELS.filter((l) => present.has(l.id)).length * 2 >= COCO_80_LABELS.length;
11341
- }
10967
+ var CROP_SUPPLY_SOURCES = {
10968
+ "plate-detection": {
10969
+ rootLabels: ["license_plate"],
10970
+ parentMacro: "vehicle",
10971
+ childClass: "plate",
10972
+ servedChildSteps: ["plate-ocr"],
10973
+ use: "as-output"
10974
+ },
10975
+ "face-detection": {
10976
+ rootLabels: ["face"],
10977
+ parentMacro: "person",
10978
+ childClass: "face",
10979
+ servedChildSteps: ["face-embedding"],
10980
+ use: "refine",
10981
+ minRootInputPx: 640
10982
+ }
10983
+ };
11342
10984
  function effectFor(stepId, label) {
11343
10985
  const alias = EFFECT_ALIASES[stepId][label];
11344
10986
  if (alias !== void 0) return alias;
11345
10987
  const folded = label.toLowerCase();
11346
- return FILLABLE_STEP_VOCABULARIES[stepId].find((v) => v.toLowerCase() === folded);
10988
+ return LABEL_SUPPLY_VOCABULARIES[stepId].find((v) => v.toLowerCase() === folded);
11347
10989
  }
11348
10990
  /**
11349
- * Which steps a root detector fills, from its labelmap and classMap. A label
11350
- * counts for a step only when the model's classMap sends it to that step's
11351
- * macro AND it names a vocabulary entry. A step none of the labels reach is
11352
- * not declared; a COCO labelmap declares nothing.
10991
+ * Which steps a root detector can supply, from its labelmap and classMap.
10992
+ *
10993
+ * - label kind: a label counts for a step only when the classMap sends it to
10994
+ * that step's macro AND it names a vocabulary entry. Every root is judged
10995
+ * the same way — a COCO model supplies the animal classifier with the six
10996
+ * species COCO names, exactly as a Frigate+ model supplies seven.
10997
+ * - crop kind: the labelmap carries one of the step's root labels. Those
10998
+ * labels are deliberately left out of the classMap, so they never make a
10999
+ * track of their own.
11000
+ *
11001
+ * No classMap ⇒ no label supply (nothing says which macro a label lives under).
11353
11002
  */
11354
- function deriveClassifierFills(labels, classMap) {
11355
- if (classMap === void 0 || isCocoLabelmap(labels)) return [];
11356
- const fills = [];
11357
- for (const stepId of FILLABLE_STEP_IDS) {
11003
+ function deriveRootSupplies(labels, classMap) {
11004
+ const supplies = [];
11005
+ if (classMap !== void 0) for (const stepId of LABEL_SUPPLY_STEP_IDS) {
11358
11006
  const labelToEffect = {};
11359
11007
  for (const label of labels) {
11360
- if (classMap.mapping[label] !== FILLABLE_STEP_MACRO[stepId]) continue;
11008
+ if (classMap.mapping[label] !== LABEL_SUPPLY_MACRO[stepId]) continue;
11361
11009
  const effect = effectFor(stepId, label);
11362
11010
  if (effect !== void 0) labelToEffect[label] = effect;
11363
11011
  }
11364
11012
  const covered = new Set(Object.values(labelToEffect));
11365
11013
  if (covered.size === 0) continue;
11366
- const uncovered = FILLABLE_STEP_VOCABULARIES[stepId].filter((v) => !covered.has(v));
11367
- fills.push({
11014
+ const uncovered = LABEL_SUPPLY_VOCABULARIES[stepId].filter((v) => !covered.has(v));
11015
+ supplies.push({
11016
+ kind: "label",
11368
11017
  stepId,
11369
11018
  labelToEffect,
11370
11019
  uncovered
11371
11020
  });
11372
11021
  }
11373
- return fills;
11022
+ const present = new Set(labels);
11023
+ for (const stepId of CROP_SUPPLY_STEP_IDS) {
11024
+ const source = CROP_SUPPLY_SOURCES[stepId];
11025
+ const rootLabels = source.rootLabels.filter((l) => present.has(l));
11026
+ if (rootLabels.length === 0) continue;
11027
+ supplies.push({
11028
+ kind: "crop",
11029
+ stepId,
11030
+ rootLabels,
11031
+ parentMacro: source.parentMacro,
11032
+ childClass: source.childClass
11033
+ });
11034
+ }
11035
+ return supplies;
11374
11036
  }
11375
11037
  var MODEL_FORMATS = [
11376
11038
  "onnx",
@@ -11504,12 +11166,35 @@ var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { wei
11504
11166
  /** True when the weights or their data forbid commercial use. */
11505
11167
  nonCommercial: boolean().optional()
11506
11168
  }));
11507
- /** One `fillsClassifierEffects` entry — see `ModelCatalogEntry.fillsClassifierEffects`. */
11508
- var FillsClassifierEffectSchema = object({
11509
- stepId: _enum(FILLABLE_STEP_IDS),
11169
+ /**
11170
+ * One step a ROOT detector can supply from its own output (D730) — see
11171
+ * `ModelCatalogEntry.suppliesSteps`.
11172
+ *
11173
+ * - `label`: the root's raw class IS the step's answer. `labelToEffect` maps
11174
+ * the root's label to the step's vocabulary; `uncovered` is the vocabulary
11175
+ * the root cannot produce (shown as unavailable, never a blocker).
11176
+ * - `crop`: the root draws the box the step would have found (`license_plate`
11177
+ * for plate-detection, `face` for face-detection). The box becomes a detail
11178
+ * child of the `parentMacro` detection that contains it — never a track.
11179
+ */
11180
+ var RootStepSupplySchema = discriminatedUnion("kind", [object({
11181
+ kind: literal("label"),
11182
+ stepId: _enum(LABEL_SUPPLY_STEP_IDS),
11510
11183
  labelToEffect: record(string(), string()),
11511
11184
  uncovered: array(string()).readonly()
11512
- });
11185
+ }), object({
11186
+ kind: literal("crop"),
11187
+ stepId: _enum(CROP_SUPPLY_STEP_IDS),
11188
+ rootLabels: array(string()).readonly(),
11189
+ parentMacro: _enum(["vehicle", "person"]),
11190
+ childClass: _enum(["plate", "face"]),
11191
+ /**
11192
+ * The root's smaller input side, stamped on read by `rootSuppliesOf` from
11193
+ * the model entry — what a step's `minRootInputPx` gate judges. Never
11194
+ * stored by an import.
11195
+ */
11196
+ rootInputPx: number().int().positive().optional()
11197
+ })]);
11513
11198
  var ModelCatalogEntrySchema = object({
11514
11199
  id: string(),
11515
11200
  name: string(),
@@ -11636,15 +11321,15 @@ var ModelCatalogEntrySchema = object({
11636
11321
  */
11637
11322
  classMap: DetectionCatalogClassMapSchema.optional(),
11638
11323
  /**
11639
- * The pipeline steps this ROOT detector already does the work of (D715):
11640
- * its labels name the effect the step exists to produce (`deer` for
11641
- * `animal-classifier`, `package` for `package-detection`). Derived from the
11642
- * labelmap by `deriveClassifierFills`, never hand-written; a COCO model
11643
- * declares none. Whether a declaration is honoured is the step's own
11644
- * `labelLink` policy (`resolveLabelLink`). `labelToEffect` values are in
11645
- * `FILLABLE_STEP_VOCABULARIES` (guard `check-label-link-vocabulary`).
11324
+ * The pipeline steps this ROOT detector can supply from its own output
11325
+ * (D730): its labels name a step's effect (`deer` for `animal-classifier`)
11326
+ * or draw a step's box (`license_plate` for `plate-detection`). Computed at
11327
+ * import from THIS model's labelmap by `deriveRootSupplies`, never written
11328
+ * by hand and never assumed per family; a row without it is derived on read
11329
+ * (`rootSuppliesOf`). Whether a camera uses it is the step's own
11330
+ * `useRootModel` flag (`resolveRootSupply`).
11646
11331
  */
11647
- fillsClassifierEffects: array(FillsClassifierEffectSchema).readonly().optional(),
11332
+ suppliesSteps: array(RootStepSupplySchema).readonly().optional(),
11648
11333
  /**
11649
11334
  * The model's CLIP feature-space contract (text encoder, dimension, vector
11650
11335
  * index, token window, search floor) — see `clip-model.ts`. Present ONLY on a
@@ -18606,6 +18291,51 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
18606
18291
  kind: "mutation",
18607
18292
  auth: "admin"
18608
18293
  });
18294
+ new Set([
18295
+ {
18296
+ id: "person",
18297
+ name: "Person"
18298
+ },
18299
+ {
18300
+ id: "vehicle",
18301
+ name: "Vehicle"
18302
+ },
18303
+ {
18304
+ id: "animal",
18305
+ name: "Animal"
18306
+ },
18307
+ {
18308
+ id: "package",
18309
+ name: "Package"
18310
+ }
18311
+ ].map((l) => l.id));
18312
+ var COCO_TO_MACRO = {
18313
+ mapping: {
18314
+ person: "person",
18315
+ bicycle: "vehicle",
18316
+ car: "vehicle",
18317
+ motorcycle: "vehicle",
18318
+ airplane: "vehicle",
18319
+ bus: "vehicle",
18320
+ train: "vehicle",
18321
+ truck: "vehicle",
18322
+ boat: "vehicle",
18323
+ bird: "animal",
18324
+ cat: "animal",
18325
+ dog: "animal",
18326
+ horse: "animal",
18327
+ sheep: "animal",
18328
+ cow: "animal",
18329
+ elephant: "animal",
18330
+ bear: "animal",
18331
+ zebra: "animal",
18332
+ giraffe: "animal",
18333
+ suitcase: "package",
18334
+ backpack: "package",
18335
+ handbag: "package"
18336
+ },
18337
+ preserveOriginal: false
18338
+ };
18609
18339
  var AUDIO_MACRO_LABELS = [
18610
18340
  {
18611
18341
  id: "speech",
@@ -23882,6 +23612,34 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
23882
23612
  timestamp: number()
23883
23613
  });
23884
23614
  /**
23615
+ * A root model's boxes standing in for one crop-kind step's own inference
23616
+ * (D730) — see `runPipeline.suppliedRoot`.
23617
+ */
23618
+ var SuppliedRootOutputSchema = object({
23619
+ stepId: string(),
23620
+ /** The root model that drew the boxes — stamped on the result. */
23621
+ modelId: string(),
23622
+ detections: array(object({
23623
+ /** `[x1, y1, x2, y2]` in the pixels of the call's image. */
23624
+ bbox: tuple([
23625
+ number(),
23626
+ number(),
23627
+ number(),
23628
+ number()
23629
+ ]),
23630
+ score: number(),
23631
+ /**
23632
+ * Five facial landmarks in the same pixels — a face the step's own
23633
+ * detector already re-found inside a root face box (D730), so its
23634
+ * embedder child aligns it exactly as it aligns any detected face.
23635
+ */
23636
+ landmarks: array(object({
23637
+ x: number(),
23638
+ y: number()
23639
+ })).optional()
23640
+ })).min(1)
23641
+ });
23642
+ /**
23885
23643
  * Reference to the frame's retained NATIVE surface + the parent crop's placement
23886
23644
  * within the frame, so the executor can re-cut a leaf child ROI at native
23887
23645
  * resolution on the detail plane. See the `runPipeline` `nativeCropRef` field.
@@ -24012,7 +23770,7 @@ var PipelineModelOptionSchema = object({
24012
23770
  legacy: boolean().optional(),
24013
23771
  provider: ModelProviderIdSchema.optional(),
24014
23772
  defaultConfidence: number().optional(),
24015
- fillsClassifierEffects: array(FillsClassifierEffectSchema).readonly().optional()
23773
+ suppliesSteps: array(RootStepSupplySchema).readonly().optional()
24016
23774
  });
24017
23775
  var ConfigFieldBridge = custom();
24018
23776
  var PipelineAddonSchemaSchema = object({
@@ -24280,7 +24038,16 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
24280
24038
  * `device-not-servable`), and nothing reaches the camera's live
24281
24039
  * trace stream. Absent ⇒ unchanged behaviour.
24282
24040
  */
24283
- replay: literal(true).optional()
24041
+ replay: literal(true).optional(),
24042
+ /**
24043
+ * Root-supplied detections for the tree's ROOT step (D730). Set by
24044
+ * `runDetailSubtree` when the camera's root model supplies a crop-kind
24045
+ * step (a Frigate+ `license_plate` for `plate-detection`): the step is
24046
+ * NOT inferred, these boxes are its output, and its children (the plate
24047
+ * reader) run on them through their own crop policy. Boxes are in the
24048
+ * PIXELS of the image this call carries. Absent ⇒ the root step runs.
24049
+ */
24050
+ suppliedRoot: SuppliedRootOutputSchema.optional()
24284
24051
  }), PipelineRunResultBridge, { kind: "mutation" }), method(object({
24285
24052
  steps: array(PipelineStepInputSchema).min(1),
24286
24053
  frames: array(FrameInputSchema).min(1).max(255),
@@ -25382,7 +25149,22 @@ method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mu
25382
25149
  */
25383
25150
  cropJpeg: string().optional(),
25384
25151
  parent: DetailParentSchema,
25385
- steps: array(string()).optional()
25152
+ steps: array(string()).optional(),
25153
+ /**
25154
+ * The camera's root model already drew this step's boxes (D730): a
25155
+ * `license_plate` inside the parent vehicle. The named step is NOT
25156
+ * inferred — these FRAME-space boxes are its output — and its
25157
+ * requested children (the plate reader) run on them. Absent ⇒ every
25158
+ * requested step infers as before.
25159
+ */
25160
+ supplied: object({
25161
+ stepId: string(),
25162
+ modelId: string(),
25163
+ boxes: array(object({
25164
+ bbox: NativeCropBboxSchema,
25165
+ score: number()
25166
+ })).min(1)
25167
+ }).optional()
25386
25168
  }), object({ details: array(DetailResultSchema) }).nullable(), { kind: "mutation" }), method(object({
25387
25169
  /** Catalog step id, e.g. `clip-embedding`. */
25388
25170
  stepId: string(),
@@ -31460,6 +31242,27 @@ var ViewerEndpointsSchema = object({
31460
31242
  /** What the ranking currently resolves to (may be empty if nothing is up). */
31461
31243
  resolved: array(string()).readonly()
31462
31244
  });
31245
+ /**
31246
+ * One audience's hub address (see `hub-address.ts`): the operator's stored
31247
+ * override, the address in use, and where it came from.
31248
+ */
31249
+ var HubAddressSnapshotSchema = object({
31250
+ /** The operator's override, or null for automatic. */
31251
+ override: string().nullable(),
31252
+ /** The address in use, or null when nothing qualifies (never loopback). */
31253
+ resolved: string().nullable(),
31254
+ source: _enum([
31255
+ "override",
31256
+ "auto",
31257
+ "none"
31258
+ ])
31259
+ });
31260
+ var HubAddressesSchema = object({
31261
+ /** "Hub address for agents" — agents' bundle/model pulls, LAN devices. */
31262
+ cluster: HubAddressSnapshotSchema,
31263
+ /** "Public address for sign-in links" — e-mail links, OIDC, WebAuthn, OAuth2. */
31264
+ browser: HubAddressSnapshotSchema
31265
+ });
31463
31266
  var AllowedAddressesSchema = object({
31464
31267
  /**
31465
31268
  * Allowlist of interface addresses operators have explicitly opted
@@ -31506,7 +31309,13 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
31506
31309
  * an address notification links can be flagged with, not a hub
31507
31310
  * route. Default `false`: racers and rankers never see it. */
31508
31311
  includeAppLink: boolean().optional()
31509
- }), 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, {
31312
+ }), 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(), HubAddressesSchema), method(object({
31313
+ audience: _enum(["cluster", "browser"]),
31314
+ baseUrl: string().nullable()
31315
+ }), HubAddressesSchema, {
31316
+ kind: "mutation",
31317
+ auth: "admin"
31318
+ }), 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, {
31510
31319
  kind: "mutation",
31511
31320
  auth: "admin"
31512
31321
  }), method(object({
@@ -37091,17 +36900,18 @@ function buildFrigateClassMap(labels) {
37091
36900
  };
37092
36901
  }
37093
36902
  /**
37094
- * Everything a Frigate / Frigate+ entry derives from its labelmap: the classMap
37095
- * and the steps it fills (D715). Every Frigate builder spreads this, so the two
37096
- * cannot be derived from different label lists. A COCO labelmap gets its map
37097
- * and no fill.
36903
+ * Everything a Frigate / Frigate+ entry derives from ITS OWN labelmap: the
36904
+ * classMap and the steps it can supply (D730) — label and crop kinds alike.
36905
+ * Every Frigate builder spreads this at import, so the two cannot be derived
36906
+ * from different label lists, and no family is assumed to carry a label it
36907
+ * does not list.
37098
36908
  */
37099
36909
  function frigateLabelFields(labels) {
37100
36910
  const classMap = buildFrigateClassMap(labels);
37101
- const fills = deriveClassifierFills(labels, classMap);
37102
- return fills.length > 0 ? {
36911
+ const supplies = deriveRootSupplies(labels, classMap);
36912
+ return supplies.length > 0 ? {
37103
36913
  classMap,
37104
- fillsClassifierEffects: fills
36914
+ suppliesSteps: supplies
37105
36915
  } : { classMap };
37106
36916
  }
37107
36917
  /**
@@ -40050,6 +39860,12 @@ Object.freeze({
40050
39860
  addonId: null,
40051
39861
  access: "view"
40052
39862
  },
39863
+ "localNetwork.getHubAddresses": {
39864
+ capName: "local-network",
39865
+ capScope: "system",
39866
+ addonId: null,
39867
+ access: "view"
39868
+ },
40053
39869
  "localNetwork.getNotificationEndpoint": {
40054
39870
  capName: "local-network",
40055
39871
  capScope: "system",
@@ -40104,6 +39920,12 @@ Object.freeze({
40104
39920
  addonId: null,
40105
39921
  access: "create"
40106
39922
  },
39923
+ "localNetwork.setHubAddress": {
39924
+ capName: "local-network",
39925
+ capScope: "system",
39926
+ addonId: null,
39927
+ access: "create"
39928
+ },
40107
39929
  "localNetwork.setNotificationEndpoint": {
40108
39930
  capName: "local-network",
40109
39931
  capScope: "system",
@@ -48807,7 +48629,7 @@ var STATE_SUMMARY_VARS = [
48807
48629
  {
48808
48630
  name: "summarySection",
48809
48631
  label: "Summary: this section",
48810
- description: "The section a per-section summary row is about (D698); on a summary sent as one message, every section it reports, comma-separated.",
48632
+ description: "The section a per-section summary row is about; on a summary sent as one message, every section it reports, comma-separated.",
48811
48633
  example: "Batterie scariche",
48812
48634
  group: "system",
48813
48635
  families: ["rule"],