@camstack/addon-model-studio 1.1.132 → 1.1.133

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.
package/dist/_stub.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import "./virtualExposes-CWSi4E_g.mjs";
2
- import "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BV_S8-Wd.mjs";
2
+ import "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-xG0NvnSj.mjs";
3
3
  import { _ as e, c as t, d as n, h as r, i, l as a, m as o, p as s, r as c, t as l, u, y as d } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DJDHChgO.mjs";
4
4
  import { a as f, i as p, o as m, r as h, s as g } from "./responsive-DT6S57fY.mjs";
5
5
  import { d as _, l as v, u as y } from "./use-device-snapshot-Be2Q6jle.mjs";
@@ -1,9 +1,9 @@
1
- import "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BV_S8-Wd.mjs";
1
+ import "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-xG0NvnSj.mjs";
2
2
  //#region \0virtual:mf-localSharedImportMap:__mfe_internal__addon_model_studio_page
3
3
  var e = {
4
4
  "@camstack/sdk": {
5
5
  name: "@camstack/sdk",
6
- version: "1.2.106",
6
+ version: "1.2.107",
7
7
  scope: ["default"],
8
8
  loaded: !1,
9
9
  from: "addon_model_studio_page",
@@ -18,7 +18,7 @@ var e = {
18
18
  },
19
19
  "@camstack/types": {
20
20
  name: "@camstack/types",
21
- version: "1.2.200",
21
+ version: "1.2.201",
22
22
  scope: ["default"],
23
23
  loaded: !1,
24
24
  from: "addon_model_studio_page",
@@ -33,7 +33,7 @@ var e = {
33
33
  },
34
34
  "@camstack/ui-library": {
35
35
  name: "@camstack/ui-library",
36
- version: "1.2.165",
36
+ version: "1.2.166",
37
37
  scope: ["default"],
38
38
  loaded: !1,
39
39
  from: "addon_model_studio_page",
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.200",
39
+ version: "1.2.201",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,
@@ -45,7 +45,7 @@ async function r() {
45
45
  }
46
46
  },
47
47
  "@camstack/sdk": {
48
- version: "1.2.106",
48
+ version: "1.2.107",
49
49
  scope: "default",
50
50
  shareConfig: {
51
51
  singleton: !0,
@@ -81,7 +81,7 @@ async function r() {
81
81
  }
82
82
  },
83
83
  "@camstack/ui-library": {
84
- version: "1.2.165",
84
+ version: "1.2.166",
85
85
  scope: "default",
86
86
  shareConfig: {
87
87
  singleton: !0,
@@ -19670,13 +19670,26 @@ var TrackAudioLabelSchema = object({
19670
19670
  * - `audio` — an audio event on the camera itself that was anomalous for
19671
19671
  * THAT camera, loud, and heard while nothing visual was happening (D62).
19672
19672
  *
19673
+ * - `onboard` — the CAMERA's own firmware, paired with a decoded frame in
19674
+ * that frame's pixel space. A real root detector and a SPATIAL one: its
19675
+ * boxes are the same kind of fact `pipeline`'s are, produced by a different
19676
+ * detector.
19677
+ *
19678
+ * `onboard` was missing here while `DetectionSourceSchema` already had it, so
19679
+ * a persisted onboard track failed `safeParse` on read and came back with NO
19680
+ * source at all — which `isSpatialTrack` then admitted by accident, through the
19681
+ * `undefined` arm rather than by anybody's decision, and which `excludeSources`
19682
+ * could not name.
19683
+ *
19673
19684
  * The spatial subsystems (tracker association, occupancy count, re-id /
19674
19685
  * embedding, resurrection) MUST skip every synthetic source. Test for that
19675
- * with `isSpatialTrack`, which allow-lists `pipeline` — a `!== 'sensor'`
19676
- * check silently readmits every source added after it was written.
19686
+ * with `isSpatialTrack`, which allow-lists the spatial sources explicitly — a
19687
+ * `!== 'sensor'` check silently readmits every source added after it was
19688
+ * written.
19677
19689
  */
19678
19690
  var TrackSourceSchema = _enum([
19679
19691
  "pipeline",
19692
+ "onboard",
19680
19693
  "sensor",
19681
19694
  "audio"
19682
19695
  ]);
@@ -21758,13 +21771,39 @@ var MotionSourceEnum = _enum([
21758
21771
  */
21759
21772
  var MotionSourcesSchema = array(MotionSourceEnum);
21760
21773
  /**
21761
- * Which root detectors a camera runs. Deliberately the SAME vocabulary
21762
- * post-analysis already tags every detection with (`DetectionSource`) rather
21763
- * than a second spelling of the same two ideas the value an operator picks
21764
- * here is the value that comes back on the track, the overlay and the debug
21765
- * row.
21774
+ * Which root detector a camera runs EXACTLY ONE.
21775
+ *
21776
+ * Deliberately the SAME vocabulary post-analysis already tags every detection
21777
+ * with (`DetectionSource`) rather than a second spelling of the same two
21778
+ * ideas: the value an operator picks here is the value that comes back on the
21779
+ * track, the overlay and the debug row.
21780
+ *
21781
+ * ## Why one, and why it is still an array
21782
+ *
21783
+ * Two roots on one camera is a capability nobody asked for and the operator has
21784
+ * since ruled out. It was never free: both planes feed the SAME per-device
21785
+ * stationary registry, both can promote the same parked object, and the two
21786
+ * detectors disagree about the same box by construction — which is the
21787
+ * disagreement D505 had to arbitrate. Removing the case removes the arbitration.
21788
+ *
21789
+ * The ARRAY shape survives because the stored settings and the attach payload
21790
+ * already speak it on every camera of every fleet, and a cap input that
21791
+ * suddenly refuses a stored value makes the camera un-attachable — a fail-closed
21792
+ * in the one direction that costs an operator their cameras. So the wire stays
21793
+ * tolerant and the TYPE is exact: a longer list is truncated to its first
21794
+ * element rather than refused, and `max(1)` is what every consumer can then
21795
+ * rely on.
21796
+ *
21797
+ * AT MOST one, not exactly one. The EMPTY list is a legal, deliberate pick —
21798
+ * a camera an operator left with no root detector — and `planDetectionSources`
21799
+ * has always said so: inventing a root for them is how a default acts without
21800
+ * anybody choosing it. Tightening this to `length(1)` broke that, and the
21801
+ * suite caught it.
21802
+ *
21803
+ * Measured before tightening (2026-09-15, this fleet, 6 h of attaches): 3327
21804
+ * `["pipeline"]` and 2 `["onboard"]`. Not one camera had two.
21766
21805
  */
21767
- var DetectionSourcesSchema = array(DetectionSourceSchema);
21806
+ var DetectionSourcesSchema = preprocess((value) => Array.isArray(value) && value.length > 1 ? value.slice(0, 1) : value, array(DetectionSourceSchema).max(1));
21768
21807
  /**
21769
21808
  * Input shape for `pipeline-runner.reportMotion` cap method. Exported
21770
21809
  * so cap-side consumers (the orchestrator forward, the runner addon's
@@ -19649,13 +19649,26 @@ var TrackAudioLabelSchema = object({
19649
19649
  * - `audio` — an audio event on the camera itself that was anomalous for
19650
19650
  * THAT camera, loud, and heard while nothing visual was happening (D62).
19651
19651
  *
19652
+ * - `onboard` — the CAMERA's own firmware, paired with a decoded frame in
19653
+ * that frame's pixel space. A real root detector and a SPATIAL one: its
19654
+ * boxes are the same kind of fact `pipeline`'s are, produced by a different
19655
+ * detector.
19656
+ *
19657
+ * `onboard` was missing here while `DetectionSourceSchema` already had it, so
19658
+ * a persisted onboard track failed `safeParse` on read and came back with NO
19659
+ * source at all — which `isSpatialTrack` then admitted by accident, through the
19660
+ * `undefined` arm rather than by anybody's decision, and which `excludeSources`
19661
+ * could not name.
19662
+ *
19652
19663
  * The spatial subsystems (tracker association, occupancy count, re-id /
19653
19664
  * embedding, resurrection) MUST skip every synthetic source. Test for that
19654
- * with `isSpatialTrack`, which allow-lists `pipeline` — a `!== 'sensor'`
19655
- * check silently readmits every source added after it was written.
19665
+ * with `isSpatialTrack`, which allow-lists the spatial sources explicitly — a
19666
+ * `!== 'sensor'` check silently readmits every source added after it was
19667
+ * written.
19656
19668
  */
19657
19669
  var TrackSourceSchema = _enum([
19658
19670
  "pipeline",
19671
+ "onboard",
19659
19672
  "sensor",
19660
19673
  "audio"
19661
19674
  ]);
@@ -21737,13 +21750,39 @@ var MotionSourceEnum = _enum([
21737
21750
  */
21738
21751
  var MotionSourcesSchema = array(MotionSourceEnum);
21739
21752
  /**
21740
- * Which root detectors a camera runs. Deliberately the SAME vocabulary
21741
- * post-analysis already tags every detection with (`DetectionSource`) rather
21742
- * than a second spelling of the same two ideas the value an operator picks
21743
- * here is the value that comes back on the track, the overlay and the debug
21744
- * row.
21753
+ * Which root detector a camera runs EXACTLY ONE.
21754
+ *
21755
+ * Deliberately the SAME vocabulary post-analysis already tags every detection
21756
+ * with (`DetectionSource`) rather than a second spelling of the same two
21757
+ * ideas: the value an operator picks here is the value that comes back on the
21758
+ * track, the overlay and the debug row.
21759
+ *
21760
+ * ## Why one, and why it is still an array
21761
+ *
21762
+ * Two roots on one camera is a capability nobody asked for and the operator has
21763
+ * since ruled out. It was never free: both planes feed the SAME per-device
21764
+ * stationary registry, both can promote the same parked object, and the two
21765
+ * detectors disagree about the same box by construction — which is the
21766
+ * disagreement D505 had to arbitrate. Removing the case removes the arbitration.
21767
+ *
21768
+ * The ARRAY shape survives because the stored settings and the attach payload
21769
+ * already speak it on every camera of every fleet, and a cap input that
21770
+ * suddenly refuses a stored value makes the camera un-attachable — a fail-closed
21771
+ * in the one direction that costs an operator their cameras. So the wire stays
21772
+ * tolerant and the TYPE is exact: a longer list is truncated to its first
21773
+ * element rather than refused, and `max(1)` is what every consumer can then
21774
+ * rely on.
21775
+ *
21776
+ * AT MOST one, not exactly one. The EMPTY list is a legal, deliberate pick —
21777
+ * a camera an operator left with no root detector — and `planDetectionSources`
21778
+ * has always said so: inventing a root for them is how a default acts without
21779
+ * anybody choosing it. Tightening this to `length(1)` broke that, and the
21780
+ * suite caught it.
21781
+ *
21782
+ * Measured before tightening (2026-09-15, this fleet, 6 h of attaches): 3327
21783
+ * `["pipeline"]` and 2 `["onboard"]`. Not one camera had two.
21745
21784
  */
21746
- var DetectionSourcesSchema = array(DetectionSourceSchema);
21785
+ var DetectionSourcesSchema = preprocess((value) => Array.isArray(value) && value.length > 1 ? value.slice(0, 1) : value, array(DetectionSourceSchema).max(1));
21747
21786
  /**
21748
21787
  * Input shape for `pipeline-runner.reportMotion` cap method. Exported
21749
21788
  * so cap-side consumers (the orchestrator forward, the runner addon's
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BV_S8-Wd.mjs";
1
+ import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-xG0NvnSj.mjs";
2
2
  export { t as get, e as init };
@@ -2753,7 +2753,7 @@ async function rr(e) {
2753
2753
  }
2754
2754
  }
2755
2755
  async function ir() {
2756
- return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-DtLTKuOQ.mjs")).catch((e) => {
2756
+ return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-i_0AIEsA.mjs")).catch((e) => {
2757
2757
  throw tr = void 0, e;
2758
2758
  }), tr;
2759
2759
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-model-studio",
3
- "version": "1.1.132",
3
+ "version": "1.1.133",
4
4
  "description": "Custom detection model registry, conversion & distribution for CamStack",
5
5
  "keywords": [
6
6
  "camstack",