@camstack/addon-model-studio 1.1.158 → 1.1.160

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 (20) hide show
  1. package/dist/MotionZonesSettings-DIQ8WQL_.mjs +310 -0
  2. package/dist/{PrivacyMaskSettings-HGPEYu4p.mjs → PrivacyMaskSettings-CkwY1O7I.mjs} +26 -26
  3. package/dist/{SceneMonitorEditor-CdIUY6nw.mjs → SceneMonitorEditor-CiIMWyUb.mjs} +295 -295
  4. package/dist/_stub.js +402 -402
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-Bc-pU5-a.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-Dl57Gf_x.mjs} +3 -3
  6. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DtTWe8FC.mjs +26 -0
  7. package/dist/addon-model-studio.css +1 -1
  8. package/dist/{responsive-DKi_zUXE.mjs → cap-error-DHkvpvpc.mjs} +8 -8
  9. package/dist/{hostInit-Ds1parg7.mjs → hostInit-Dw6HUDk0.mjs} +2 -2
  10. package/dist/model-studio.addon.js +71 -64
  11. package/dist/model-studio.addon.mjs +71 -64
  12. package/dist/{player-overlays-BNT83Pmw.mjs → player-overlays-DdDSY-tk.mjs} +1 -1
  13. package/dist/remoteEntry.js +1 -1
  14. package/dist/{scene-monitor-copy-CG5RB7vj.mjs → scene-monitor-copy-BKbPs3_1.mjs} +1 -1
  15. package/dist/{square-COXTMEPf.mjs → square-BWowq2yB.mjs} +1 -1
  16. package/dist/{trash-2-Dr234XUH.mjs → trash-2-B6STAYa8.mjs} +1 -1
  17. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BHgDHVD9.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DodCXtYd.mjs} +1 -1
  18. package/package.json +1 -1
  19. package/dist/MotionZonesSettings-C9YymEfU.mjs +0 -310
  20. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-cAfFVRZp.mjs +0 -26
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.234",
39
+ version: "1.2.236",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,
@@ -81,7 +81,7 @@ async function r() {
81
81
  }
82
82
  },
83
83
  "@camstack/ui-library": {
84
- version: "1.2.190",
84
+ version: "1.2.192",
85
85
  scope: "default",
86
86
  shareConfig: {
87
87
  singleton: !0,
@@ -5884,7 +5884,7 @@ var ZodIssueCode = {
5884
5884
  var ZodFirstPartyTypeKind;
5885
5885
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5886
5886
  //#endregion
5887
- //#region ../types/dist/sleep-CopaBJss.mjs
5887
+ //#region ../types/dist/sleep-CaB_hL5g.mjs
5888
5888
  /**
5889
5889
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5890
5890
  * window to float samples (D455).
@@ -6084,12 +6084,6 @@ Object.fromEntries([
6084
6084
  icon: "circle-dot",
6085
6085
  order: 40
6086
6086
  },
6087
- {
6088
- id: "clips",
6089
- label: "Clips",
6090
- icon: "clapperboard",
6091
- order: 41
6092
- },
6093
6087
  {
6094
6088
  id: "engine",
6095
6089
  label: "Inference Engine",
@@ -7956,6 +7950,8 @@ var EVENT_OWNER_TYPES = [
7956
7950
  * nothing failing until a caller asked.
7957
7951
  */
7958
7952
  var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
7953
+ /** The same list as a Zod enum, for the cap input that carries it. */
7954
+ var MediaPresenceOwnerKindSchema = _enum([...EVENT_OWNER_TYPES, "track"]);
7959
7955
  new Set(EVENT_OWNER_TYPES);
7960
7956
  var EncodeProfileSchema = object({
7961
7957
  video: object({
@@ -14684,8 +14680,6 @@ method(object({
14684
14680
  deviceId: number(),
14685
14681
  capName: string(),
14686
14682
  wrapperAddonId: string(),
14687
- /** The `ClipSource.source` id to toggle. Absent = all of the addon's. */
14688
- sourceId: string().optional(),
14689
14683
  active: boolean()
14690
14684
  }), _void(), {
14691
14685
  kind: "mutation",
@@ -21602,7 +21596,11 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
21602
21596
  ownerType: EventOwnerTypeSchema,
21603
21597
  eventId: number().int(),
21604
21598
  deviceId: number()
21605
- }), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
21599
+ }), array(MediaFileInfoSchema).readonly()), method(object({
21600
+ deviceId: number(),
21601
+ ownerKind: MediaPresenceOwnerKindSchema,
21602
+ ownerIds: array(string()).max(5e3)
21603
+ }), array(string()).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
21606
21604
  kind: "mutation",
21607
21605
  auth: "admin"
21608
21606
  }), method(RebuildObjectEmbeddingsInput, RebuildObjectEmbeddingsResultSchema, {
@@ -24596,6 +24594,18 @@ method(VectorDeclareIndexInputSchema, _void(), {
24596
24594
  kind: "mutation",
24597
24595
  auth: "admin"
24598
24596
  }), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
24597
+ _enum([
24598
+ "queue-full",
24599
+ "camera-backoff",
24600
+ "sleeping",
24601
+ "camera-refused",
24602
+ "no-keyframe",
24603
+ "no-catalog-row",
24604
+ "unsupported",
24605
+ "unknown-device",
24606
+ "uid-missing"
24607
+ ]);
24608
+ _enum(["deferred", "final"]);
24599
24609
  var ClipSchema = object({
24600
24610
  /** Opaque, provider-namespaced id. The default provider encodes the time
24601
24611
  * window so `getClipPlayback` is self-contained (no event re-query). */
@@ -24746,7 +24756,25 @@ var ClipSchema = object({
24746
24756
  */
24747
24757
  playable: boolean().optional(),
24748
24758
  /** Why {@link playable} is false, verbatim (`no-file-for-window`). */
24749
- unplayableReason: string().optional()
24759
+ unplayableReason: string().optional(),
24760
+ /**
24761
+ * This clip is STILL BEING WRITTEN, so {@link ClipSchema.timeRange}`.endMs`
24762
+ * is not its end.
24763
+ *
24764
+ * Absent — the common case — means the row is closed and its `endMs` is the
24765
+ * end of the recording. Present and `true` means the source told us the file
24766
+ * has no end yet, and the `endMs` we carry is whatever the camera's index
24767
+ * entry happened to hold: on a Reolink E1 Outdoor PoE (592, measured
24768
+ * 2026-09-20) the newest file `…_192927_000000_…_0.mp4` reported an `endTime`
24769
+ * of 19:29:56 and STILL reported it eight minutes later, while the file went
24770
+ * on growing. A surface that drew 29 s there was lying about a clip that
24771
+ * plays for minutes, on the one row the operator looks at first.
24772
+ *
24773
+ * `endMs` is deliberately still a number: it is the best bound anything has
24774
+ * for a mint window or a byte fetch, and every consumer already requires it.
24775
+ * This flag says what it is WORTH, and a duration is not drawn from it.
24776
+ */
24777
+ inProgress: boolean().optional()
24750
24778
  });
24751
24779
  var ClipPlaybackSchema = object({
24752
24780
  /**
@@ -24829,59 +24857,17 @@ var ClipSourceSchema = object({
24829
24857
  * alternative — a `native:reolink:* → provider-reolink` table inside the
24830
24858
  * widget — is a second authority on provider identity living in the one
24831
24859
  * package with no business knowing it, wrong the day a third source appears
24832
- * (D557). One addon may serve SEVERAL sources: `addon-provider-reolink`
24833
- * answers a hub child with both `native:reolink:onboard` and
24834
- * `native:reolink:hub`, which is why the per-device switch is keyed by
24835
- * SOURCE and not by this (D555).
24860
+ * (D557). One addon may serve SEVERAL sources, which is why the per-device
24861
+ * switch is keyed by SOURCE and not by this (D555) — `addon-provider-reolink`
24862
+ * served a hub child two of them until the two views were measured to be one
24863
+ * store read twice (D555) and then read ONE way (D565).
24836
24864
  *
24837
24865
  * Optional for version skew only. The collection dispatcher stamps it from
24838
24866
  * the registry, so a row that travelled through the fan-out carries the
24839
24867
  * authoritative id whatever the provider filled in.
24840
24868
  */
24841
24869
  addonId: string().optional(),
24842
- /**
24843
- * Which API this source resolved to FOR THIS CAMERA, when it has a choice.
24844
- *
24845
- * A source may cover one store through more than one surface — the Reolink
24846
- * provider reads a hub child through the parent's event log and a standalone
24847
- * through its own file list, because that is what each camera answers. The
24848
- * CHOICE is the provider's, made from what the camera is, and is never a row
24849
- * the operator has to understand; but it is REPORTED, because a source that
24850
- * silently reads a different API on two cameras and then behaves differently
24851
- * is the thing nobody can debug later. Absent when the source has only one
24852
- * way to read its store.
24853
- */
24854
- via: string().optional(),
24855
- availability: ClipSourceAvailabilitySchema,
24856
- /**
24857
- * The operator switched this source OFF for this camera.
24858
- *
24859
- * Deliberately NOT a member of {@link ClipSourceAvailabilitySchema}'s
24860
- * vocabulary. That enum models what the source CAN do — a sleeping camera, an
24861
- * unmounted card, an index that disagrees with its own calendar — and a
24862
- * switched-off source could answer perfectly well; the operator decided it
24863
- * should not. Folding the choice in is how `disabled` and `broken` stop being
24864
- * distinguishable, which is the D62 rule this repo has already paid for twice:
24865
- * an off switch is REPORTED off (`CameraStatus.switchedOff`, the same word),
24866
- * and disabled must never look like broken. It is also what lets every
24867
- * exhaustive consumer of the availability enum keep compiling.
24868
- *
24869
- * A switched-off source contributes NO clips (`listClips` never calls it) and
24870
- * its row carries no `catalogAsOf`: nothing confirms a catalog it is not
24871
- * allowed to serve, and a frozen age that can only grow draws a stalling
24872
- * source rather than an off switch.
24873
- *
24874
- * The row survives BECAUSE it is the control the operator switches the source
24875
- * back on from — D554 decision 4's rule ("a source that cannot answer
24876
- * produces a ROW, not an absence") applied to the one case D556 carved out of
24877
- * it, and D557's own kept property ("a source is never hidden, only its
24878
- * rows"). Absent means on.
24879
- *
24880
- * A provider never sets this — like {@link ClipSourceSchema.addonId} it is
24881
- * stamped by the collection dispatcher, which holds the registry's projection
24882
- * of the persisted authority (D556) and is the only place that knows it.
24883
- */
24884
- switchedOff: boolean().optional()
24870
+ availability: ClipSourceAvailabilitySchema
24885
24871
  });
24886
24872
  DeviceType.Camera, method(object({
24887
24873
  deviceId: number(),
@@ -24889,13 +24875,23 @@ DeviceType.Camera, method(object({
24889
24875
  until: number(),
24890
24876
  limit: number().int().positive().optional(),
24891
24877
  /**
24892
- * View filter over {@link ClipSourceSchema.source} values — the
24893
- * picker's selection, forwarded so a provider need not list what
24894
- * nobody is looking at. ABSENT means every source this camera has,
24895
- * which is the honest default for a surface whose whole point is that
24896
- * nothing is hidden (D554 3). A provider with one source ignores it.
24878
+ * WHICH provider to ask — the `addonId` a {@link ClipSourceSchema} row
24879
+ * carries, never a source id and never a list.
24880
+ *
24881
+ * Absent means the device's BOUND provider, which is CamStack on every
24882
+ * camera today because that is what `deviceManager.getBindings`
24883
+ * answers with. A provider the device is not bound to is refused by
24884
+ * name rather than answered by another one (D552's
24885
+ * `rejectUnresolvedAddonPin` rule).
24886
+ *
24887
+ * It replaced `sources?: string[]`, a VIEW filter over source ids that
24888
+ * assumed the answer was a fan-out over everything a camera has. The
24889
+ * operator settled otherwise on 2026-09-20 — *"il get videoclips
24890
+ * prendere un provider opzionale, di default va su camstack"*,
24891
+ * *"l'utilizzatore è uno solo"* — so the list is asked of one provider
24892
+ * at a time and there is nothing to filter out of it.
24897
24893
  */
24898
- sources: array(string()).optional()
24894
+ provider: string().optional()
24899
24895
  }), array(ClipSchema).readonly(), {
24900
24896
  kind: "query",
24901
24897
  auth: "protected"
@@ -36299,6 +36295,12 @@ Object.freeze({
36299
36295
  addonId: null,
36300
36296
  access: "view"
36301
36297
  },
36298
+ "pipelineAnalytics.ownersWithMedia": {
36299
+ capName: "pipeline-analytics",
36300
+ capScope: "device",
36301
+ addonId: null,
36302
+ access: "view"
36303
+ },
36302
36304
  "pipelineAnalytics.pauseForStorageMigration": {
36303
36305
  capName: "pipeline-analytics",
36304
36306
  capScope: "device",
@@ -40199,6 +40201,11 @@ Object.freeze({
40199
40201
  form: "single",
40200
40202
  optional: false
40201
40203
  }],
40204
+ "pipelineAnalytics.ownersWithMedia": [{
40205
+ name: "deviceId",
40206
+ form: "single",
40207
+ optional: false
40208
+ }],
40202
40209
  "pipelineAnalytics.proposeRetrainAnnotations": [{
40203
40210
  name: "deviceId",
40204
40211
  form: "single",
@@ -5863,7 +5863,7 @@ var ZodIssueCode = {
5863
5863
  var ZodFirstPartyTypeKind;
5864
5864
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5865
5865
  //#endregion
5866
- //#region ../types/dist/sleep-CopaBJss.mjs
5866
+ //#region ../types/dist/sleep-CaB_hL5g.mjs
5867
5867
  /**
5868
5868
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5869
5869
  * window to float samples (D455).
@@ -6063,12 +6063,6 @@ Object.fromEntries([
6063
6063
  icon: "circle-dot",
6064
6064
  order: 40
6065
6065
  },
6066
- {
6067
- id: "clips",
6068
- label: "Clips",
6069
- icon: "clapperboard",
6070
- order: 41
6071
- },
6072
6066
  {
6073
6067
  id: "engine",
6074
6068
  label: "Inference Engine",
@@ -7935,6 +7929,8 @@ var EVENT_OWNER_TYPES = [
7935
7929
  * nothing failing until a caller asked.
7936
7930
  */
7937
7931
  var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
7932
+ /** The same list as a Zod enum, for the cap input that carries it. */
7933
+ var MediaPresenceOwnerKindSchema = _enum([...EVENT_OWNER_TYPES, "track"]);
7938
7934
  new Set(EVENT_OWNER_TYPES);
7939
7935
  var EncodeProfileSchema = object({
7940
7936
  video: object({
@@ -14663,8 +14659,6 @@ method(object({
14663
14659
  deviceId: number(),
14664
14660
  capName: string(),
14665
14661
  wrapperAddonId: string(),
14666
- /** The `ClipSource.source` id to toggle. Absent = all of the addon's. */
14667
- sourceId: string().optional(),
14668
14662
  active: boolean()
14669
14663
  }), _void(), {
14670
14664
  kind: "mutation",
@@ -21581,7 +21575,11 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
21581
21575
  ownerType: EventOwnerTypeSchema,
21582
21576
  eventId: number().int(),
21583
21577
  deviceId: number()
21584
- }), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
21578
+ }), array(MediaFileInfoSchema).readonly()), method(object({
21579
+ deviceId: number(),
21580
+ ownerKind: MediaPresenceOwnerKindSchema,
21581
+ ownerIds: array(string()).max(5e3)
21582
+ }), array(string()).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
21585
21583
  kind: "mutation",
21586
21584
  auth: "admin"
21587
21585
  }), method(RebuildObjectEmbeddingsInput, RebuildObjectEmbeddingsResultSchema, {
@@ -24575,6 +24573,18 @@ method(VectorDeclareIndexInputSchema, _void(), {
24575
24573
  kind: "mutation",
24576
24574
  auth: "admin"
24577
24575
  }), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
24576
+ _enum([
24577
+ "queue-full",
24578
+ "camera-backoff",
24579
+ "sleeping",
24580
+ "camera-refused",
24581
+ "no-keyframe",
24582
+ "no-catalog-row",
24583
+ "unsupported",
24584
+ "unknown-device",
24585
+ "uid-missing"
24586
+ ]);
24587
+ _enum(["deferred", "final"]);
24578
24588
  var ClipSchema = object({
24579
24589
  /** Opaque, provider-namespaced id. The default provider encodes the time
24580
24590
  * window so `getClipPlayback` is self-contained (no event re-query). */
@@ -24725,7 +24735,25 @@ var ClipSchema = object({
24725
24735
  */
24726
24736
  playable: boolean().optional(),
24727
24737
  /** Why {@link playable} is false, verbatim (`no-file-for-window`). */
24728
- unplayableReason: string().optional()
24738
+ unplayableReason: string().optional(),
24739
+ /**
24740
+ * This clip is STILL BEING WRITTEN, so {@link ClipSchema.timeRange}`.endMs`
24741
+ * is not its end.
24742
+ *
24743
+ * Absent — the common case — means the row is closed and its `endMs` is the
24744
+ * end of the recording. Present and `true` means the source told us the file
24745
+ * has no end yet, and the `endMs` we carry is whatever the camera's index
24746
+ * entry happened to hold: on a Reolink E1 Outdoor PoE (592, measured
24747
+ * 2026-09-20) the newest file `…_192927_000000_…_0.mp4` reported an `endTime`
24748
+ * of 19:29:56 and STILL reported it eight minutes later, while the file went
24749
+ * on growing. A surface that drew 29 s there was lying about a clip that
24750
+ * plays for minutes, on the one row the operator looks at first.
24751
+ *
24752
+ * `endMs` is deliberately still a number: it is the best bound anything has
24753
+ * for a mint window or a byte fetch, and every consumer already requires it.
24754
+ * This flag says what it is WORTH, and a duration is not drawn from it.
24755
+ */
24756
+ inProgress: boolean().optional()
24729
24757
  });
24730
24758
  var ClipPlaybackSchema = object({
24731
24759
  /**
@@ -24808,59 +24836,17 @@ var ClipSourceSchema = object({
24808
24836
  * alternative — a `native:reolink:* → provider-reolink` table inside the
24809
24837
  * widget — is a second authority on provider identity living in the one
24810
24838
  * package with no business knowing it, wrong the day a third source appears
24811
- * (D557). One addon may serve SEVERAL sources: `addon-provider-reolink`
24812
- * answers a hub child with both `native:reolink:onboard` and
24813
- * `native:reolink:hub`, which is why the per-device switch is keyed by
24814
- * SOURCE and not by this (D555).
24839
+ * (D557). One addon may serve SEVERAL sources, which is why the per-device
24840
+ * switch is keyed by SOURCE and not by this (D555) — `addon-provider-reolink`
24841
+ * served a hub child two of them until the two views were measured to be one
24842
+ * store read twice (D555) and then read ONE way (D565).
24815
24843
  *
24816
24844
  * Optional for version skew only. The collection dispatcher stamps it from
24817
24845
  * the registry, so a row that travelled through the fan-out carries the
24818
24846
  * authoritative id whatever the provider filled in.
24819
24847
  */
24820
24848
  addonId: string().optional(),
24821
- /**
24822
- * Which API this source resolved to FOR THIS CAMERA, when it has a choice.
24823
- *
24824
- * A source may cover one store through more than one surface — the Reolink
24825
- * provider reads a hub child through the parent's event log and a standalone
24826
- * through its own file list, because that is what each camera answers. The
24827
- * CHOICE is the provider's, made from what the camera is, and is never a row
24828
- * the operator has to understand; but it is REPORTED, because a source that
24829
- * silently reads a different API on two cameras and then behaves differently
24830
- * is the thing nobody can debug later. Absent when the source has only one
24831
- * way to read its store.
24832
- */
24833
- via: string().optional(),
24834
- availability: ClipSourceAvailabilitySchema,
24835
- /**
24836
- * The operator switched this source OFF for this camera.
24837
- *
24838
- * Deliberately NOT a member of {@link ClipSourceAvailabilitySchema}'s
24839
- * vocabulary. That enum models what the source CAN do — a sleeping camera, an
24840
- * unmounted card, an index that disagrees with its own calendar — and a
24841
- * switched-off source could answer perfectly well; the operator decided it
24842
- * should not. Folding the choice in is how `disabled` and `broken` stop being
24843
- * distinguishable, which is the D62 rule this repo has already paid for twice:
24844
- * an off switch is REPORTED off (`CameraStatus.switchedOff`, the same word),
24845
- * and disabled must never look like broken. It is also what lets every
24846
- * exhaustive consumer of the availability enum keep compiling.
24847
- *
24848
- * A switched-off source contributes NO clips (`listClips` never calls it) and
24849
- * its row carries no `catalogAsOf`: nothing confirms a catalog it is not
24850
- * allowed to serve, and a frozen age that can only grow draws a stalling
24851
- * source rather than an off switch.
24852
- *
24853
- * The row survives BECAUSE it is the control the operator switches the source
24854
- * back on from — D554 decision 4's rule ("a source that cannot answer
24855
- * produces a ROW, not an absence") applied to the one case D556 carved out of
24856
- * it, and D557's own kept property ("a source is never hidden, only its
24857
- * rows"). Absent means on.
24858
- *
24859
- * A provider never sets this — like {@link ClipSourceSchema.addonId} it is
24860
- * stamped by the collection dispatcher, which holds the registry's projection
24861
- * of the persisted authority (D556) and is the only place that knows it.
24862
- */
24863
- switchedOff: boolean().optional()
24849
+ availability: ClipSourceAvailabilitySchema
24864
24850
  });
24865
24851
  DeviceType.Camera, method(object({
24866
24852
  deviceId: number(),
@@ -24868,13 +24854,23 @@ DeviceType.Camera, method(object({
24868
24854
  until: number(),
24869
24855
  limit: number().int().positive().optional(),
24870
24856
  /**
24871
- * View filter over {@link ClipSourceSchema.source} values — the
24872
- * picker's selection, forwarded so a provider need not list what
24873
- * nobody is looking at. ABSENT means every source this camera has,
24874
- * which is the honest default for a surface whose whole point is that
24875
- * nothing is hidden (D554 3). A provider with one source ignores it.
24857
+ * WHICH provider to ask — the `addonId` a {@link ClipSourceSchema} row
24858
+ * carries, never a source id and never a list.
24859
+ *
24860
+ * Absent means the device's BOUND provider, which is CamStack on every
24861
+ * camera today because that is what `deviceManager.getBindings`
24862
+ * answers with. A provider the device is not bound to is refused by
24863
+ * name rather than answered by another one (D552's
24864
+ * `rejectUnresolvedAddonPin` rule).
24865
+ *
24866
+ * It replaced `sources?: string[]`, a VIEW filter over source ids that
24867
+ * assumed the answer was a fan-out over everything a camera has. The
24868
+ * operator settled otherwise on 2026-09-20 — *"il get videoclips
24869
+ * prendere un provider opzionale, di default va su camstack"*,
24870
+ * *"l'utilizzatore è uno solo"* — so the list is asked of one provider
24871
+ * at a time and there is nothing to filter out of it.
24876
24872
  */
24877
- sources: array(string()).optional()
24873
+ provider: string().optional()
24878
24874
  }), array(ClipSchema).readonly(), {
24879
24875
  kind: "query",
24880
24876
  auth: "protected"
@@ -36278,6 +36274,12 @@ Object.freeze({
36278
36274
  addonId: null,
36279
36275
  access: "view"
36280
36276
  },
36277
+ "pipelineAnalytics.ownersWithMedia": {
36278
+ capName: "pipeline-analytics",
36279
+ capScope: "device",
36280
+ addonId: null,
36281
+ access: "view"
36282
+ },
36281
36283
  "pipelineAnalytics.pauseForStorageMigration": {
36282
36284
  capName: "pipeline-analytics",
36283
36285
  capScope: "device",
@@ -40178,6 +40180,11 @@ Object.freeze({
40178
40180
  form: "single",
40179
40181
  optional: false
40180
40182
  }],
40183
+ "pipelineAnalytics.ownersWithMedia": [{
40184
+ name: "deviceId",
40185
+ form: "single",
40186
+ optional: false
40187
+ }],
40181
40188
  "pipelineAnalytics.proposeRetrainAnnotations": [{
40182
40189
  name: "deviceId",
40183
40190
  form: "single",
@@ -1,5 +1,5 @@
1
1
  import { h as e, l as t, u as n, y as r } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DJDHChgO.mjs";
2
- import { o as i, s as a } from "./responsive-DKi_zUXE.mjs";
2
+ import { o as i, s as a } from "./cap-error-DHkvpvpc.mjs";
3
3
  import { n as o, r as s, t as c } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
4
4
  var l = a("chevron-down", [["path", {
5
5
  d: "m6 9 6 6 6-6",
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BHgDHVD9.mjs";
1
+ import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DodCXtYd.mjs";
2
2
  export { t as get, e as init };
@@ -1,5 +1,5 @@
1
1
  import { c as e, h as t, p as n, y as r } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DJDHChgO.mjs";
2
- import { s as i } from "./responsive-DKi_zUXE.mjs";
2
+ import { s as i } from "./cap-error-DHkvpvpc.mjs";
3
3
  var a = i("camera", [["path", {
4
4
  d: "M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z",
5
5
  key: "18u6gg"
@@ -1,4 +1,4 @@
1
- import { s as e } from "./responsive-DKi_zUXE.mjs";
1
+ import { s as e } from "./cap-error-DHkvpvpc.mjs";
2
2
  var t = e("eye-off", [
3
3
  ["path", {
4
4
  d: "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",
@@ -1,4 +1,4 @@
1
- import { s as e } from "./responsive-DKi_zUXE.mjs";
1
+ import { s as e } from "./cap-error-DHkvpvpc.mjs";
2
2
  var t = e("trash-2", [
3
3
  ["path", {
4
4
  d: "M10 11v6",
@@ -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-Bc-pU5-a.mjs")).catch((e) => {
2756
+ return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-Dl57Gf_x.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.158",
3
+ "version": "1.1.160",
4
4
  "description": "Custom detection model registry, conversion & distribution for CamStack",
5
5
  "keywords": [
6
6
  "camstack",