@camstack/addon-pipeline-orchestrator 1.2.56 → 1.2.57

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 (23) hide show
  1. package/assets/viewer/.viewer-version +1 -1
  2. package/assets/viewer/_expo/static/js/web/{Clipboard-dbfb8d2b9b663367bf606c4e4156c5ed.js → Clipboard-2a9c34a2d9e4522a4b07afe082f73a11.js} +8 -8
  3. package/assets/viewer/_expo/static/js/web/{Haptics-3fc6898fa899589be5efd6c4561b70a1.js → Haptics-d691ef5c23765594fc76d7d0159e12a9.js} +3 -3
  4. package/assets/viewer/_expo/static/js/web/{index-f066fed82c1011c63951f43a4c81626f.js → index-cdddfaafe98f9abb2eed34c2d3ea7fce.js} +80 -78
  5. package/assets/viewer/_expo/static/js/web/{node-fs-3444d48a73ceb72dd0e6a45d4ba686f4.js → node-fs-fbe6ecbf78f47e60bf5606ef62613a4d.js} +1 -1
  6. package/assets/viewer/_expo/static/js/web/{node-path-31d2d4f03c0bb8e91685e0b2170248e7.js → node-path-88d7caa558342a85e438efa999e4aecd.js} +1 -1
  7. package/assets/viewer/embed/assets/{MaskShapeCanvas-DI4BY7W2-BPL877bq.js → MaskShapeCanvas-DI4BY7W2-BG9b15XX.js} +1 -1
  8. package/assets/viewer/embed/assets/{MotionZonesSettings-NcxxQN8r-9o1vTDhU.js → MotionZonesSettings-NcxxQN8r-6tRLDb49.js} +1 -1
  9. package/assets/viewer/embed/assets/{PrivacyMaskSettings-APgPLF7p-BgXKxbFU.js → PrivacyMaskSettings-APgPLF7p-Bbna4XaY.js} +1 -1
  10. package/assets/viewer/embed/assets/index-IodqkuCI.js +116 -0
  11. package/assets/viewer/embed/index.html +1 -1
  12. package/assets/viewer/index.html +1 -1
  13. package/dist/_stub.js +2 -2
  14. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_orchestrator_widgets-CIgtalSC.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_orchestrator_widgets-D4ElH3_I.mjs} +3 -3
  15. package/dist/{_virtual_mf___mfe_internal__addon_pipeline_orchestrator_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-B5aOYEp_.mjs → _virtual_mf___mfe_internal__addon_pipeline_orchestrator_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CoB82Qob.mjs} +1 -1
  16. package/dist/_virtual_mf___mfe_internal__addon_pipeline_orchestrator_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DUDj4-xm.mjs +26 -0
  17. package/dist/{hostInit-BfvdbNXJ.mjs → hostInit-CDG9B2az.mjs} +3 -3
  18. package/dist/index.js +121 -5
  19. package/dist/index.mjs +121 -5
  20. package/dist/remoteEntry.js +1 -1
  21. package/package.json +1 -1
  22. package/assets/viewer/embed/assets/index-CN50_nGz.js +0 -116
  23. package/dist/_virtual_mf___mfe_internal__addon_pipeline_orchestrator_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Dea44qi5.mjs +0 -26
package/dist/index.mjs CHANGED
@@ -5400,6 +5400,12 @@ Object.fromEntries([
5400
5400
  icon: "shapes",
5401
5401
  order: 38
5402
5402
  },
5403
+ {
5404
+ id: "scenes",
5405
+ label: "Scenes",
5406
+ icon: "scan-eye",
5407
+ order: 36
5408
+ },
5403
5409
  {
5404
5410
  id: "analytics",
5405
5411
  label: "Analytics",
@@ -25674,9 +25680,33 @@ method(object({
25674
25680
  * settings-contribution methods. `status.kind:'push'` — the engine pushes on
25675
25681
  * every hysteresis flip / availability change; consumers never poll.
25676
25682
  */
25677
- /** Extensible condition tag. Seeded 'day' | 'night'; open by design so more can
25678
- * be added without a wire break (matching falls back to any-condition refs). */
25683
+ /** Extensible condition tag. Seeded 'day' | 'ir' (the two variants the operator
25684
+ * captures) plus 'night' | 'dawn' | 'dusk' from the resolver's sun-times band.
25685
+ * Open by design so more can be added without a wire break.
25686
+ *
25687
+ * Matching does NOT fall back across conditions: cross-condition cosines are
25688
+ * not comparable, so "I have never seen this scene in this light" is reported
25689
+ * as `unknown`, never guessed. A day reference scored against an IR frame
25690
+ * collapses the cosine and would latch a false alarm every single night. */
25679
25691
  var SceneConditionSchema = string();
25692
+ /** `matched` = the baseline is what we see; `diverged` = it demonstrably is not;
25693
+ * `unknown` = we cannot judge (no reference for this condition, encoder model
25694
+ * changed, view shifted, no snapshot). `unknown` is a real value, not a null,
25695
+ * and never counts toward hysteresis in either direction. */
25696
+ var SceneVerdictSchema = _enum([
25697
+ "matched",
25698
+ "diverged",
25699
+ "unknown"
25700
+ ]);
25701
+ /** Why a scene cannot judge. Named, because this feature's failure mode is
25702
+ * silence that reads as "nothing has happened". */
25703
+ var SceneUnavailableSchema = _enum([
25704
+ "no-reference-for-condition",
25705
+ "view-shifted",
25706
+ "no-vision-profile",
25707
+ "encoder-model-changed",
25708
+ "no-snapshot"
25709
+ ]);
25680
25710
  /** One captured reference — condition-tagged, model-version-gated. `embedding`
25681
25711
  * is `number[]` (Float32Array does NOT survive MsgPack/UDS). */
25682
25712
  var SceneReferenceSchema = object({
@@ -25684,7 +25714,14 @@ var SceneReferenceSchema = object({
25684
25714
  modelId: string(),
25685
25715
  condition: SceneConditionSchema,
25686
25716
  capturedAt: number(),
25687
- thumbnailMediaId: string().optional()
25717
+ thumbnailMediaId: string().optional(),
25718
+ /** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
25719
+ * anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
25720
+ * normalized rect frame a different piece of world, and the scene would
25721
+ * diverge forever with a perfectly plausible cosine. Checked LAZILY, only
25722
+ * when hysteresis is about to flip — one extra encode per candidate
25723
+ * transition, not per poll. */
25724
+ anchorEmbedding: array(number()).optional()
25688
25725
  });
25689
25726
  var SceneMonitorStateSchema = object({
25690
25727
  id: string(),
@@ -25706,6 +25743,25 @@ var SceneCheckSchema = discriminatedUnion("mode", [object({
25706
25743
  profileId: string().optional(),
25707
25744
  hysteresisCount: number().int().positive()
25708
25745
  })]);
25746
+ var SCENE_DEFAULT_ANCHOR_THRESHOLD = .85;
25747
+ /**
25748
+ * Vision-model adjudication of a candidate flip. Field names deliberately
25749
+ * mirror `NcConfirmSchema` so an operator meets one vocabulary, not two.
25750
+ *
25751
+ * `onTimeout` defaults to **'hold'**, the OPPOSITE of `NcConfirmGate`'s
25752
+ * fail-open: a notification suppressed is the worse error there, but a vision
25753
+ * model that timed out has not told us the bin is gone, and a latch is a
25754
+ * stateful claim that costs the operator a trip to reset.
25755
+ */
25756
+ var SceneConfirmSchema = object({
25757
+ enabled: boolean().default(false),
25758
+ prompt: string().min(1).max(1e3),
25759
+ profileId: string().optional(),
25760
+ timeoutMs: number().int().min(1e3).max(2e4).default(8e3),
25761
+ maxImagePx: number().int().min(64).max(2048).default(448),
25762
+ /** What a timeout / unavailable model means for the PENDING flip. */
25763
+ onTimeout: _enum(["flip", "hold"]).default("hold")
25764
+ });
25709
25765
  var SceneMonitorSchema = object({
25710
25766
  id: string(),
25711
25767
  label: string(),
@@ -25724,7 +25780,41 @@ var SceneMonitorSchema = object({
25724
25780
  lastConfidence: number().nullable(),
25725
25781
  currentCondition: SceneConditionSchema.nullable(),
25726
25782
  availability: _enum(["ok", "unavailable"]),
25727
- unavailableReason: string().nullable()
25783
+ unavailableReason: string().nullable(),
25784
+ /** Which state is "the initial screen". `null` until the first capture. */
25785
+ baselineStateId: string().nullable(),
25786
+ /** Which boolean drives notification rules and any export. */
25787
+ emit: _enum(["latched", "live"]).default("latched"),
25788
+ /** Live: does the region match the baseline RIGHT NOW. */
25789
+ verdict: SceneVerdictSchema,
25790
+ /** Has it been `diverged` at least once since `armedAt` — the operator's boolean. */
25791
+ latched: boolean(),
25792
+ /** Last reset (or creation). */
25793
+ armedAt: number(),
25794
+ divergedAt: number().nullable(),
25795
+ restoredAt: number().nullable(),
25796
+ /** A check is only COUNTED when the device has been quiet this long. Motion
25797
+ * during the window DISCARDS the observation — a car pulling up in front of
25798
+ * the bin must not be able to spend hysteresis credit. */
25799
+ quietSeconds: number().int().min(0).max(3600).default(60),
25800
+ /** An observation only advances the pending count when it is at least this
25801
+ * far from the previously counted one, so N agreeing checks span real time
25802
+ * rather than N adjacent polls inside one occlusion. */
25803
+ minObservationSpacingSec: number().int().min(0).max(3600).default(120),
25804
+ /** Vision-model adjudication of a candidate flip. Similarity primary only. */
25805
+ confirm: SceneConfirmSchema.optional(),
25806
+ /** Whole-frame anchor cosine below which a flip is REFUSED as `view-shifted`. */
25807
+ anchorThreshold: number().min(0).max(1).default(SCENE_DEFAULT_ANCHOR_THRESHOLD),
25808
+ /** Clear the latch on its own when the scene matches again? Default false —
25809
+ * `restoredAt` and the `scene-restored` edge are recorded regardless, so an
25810
+ * automation can react to the bin coming back without the operator's own
25811
+ * alarm silently clearing itself. */
25812
+ autoRestore: boolean().default(false),
25813
+ /** Named cause when `verdict === 'unknown'`. */
25814
+ unavailable: SceneUnavailableSchema.nullable(),
25815
+ /** Conditions that have at least one comparable reference — the coverage line
25816
+ * ("day ✓ · ir ✓ · dusk ✗") that turns a silent fallback into a visible fact. */
25817
+ coveredConditions: array(SceneConditionSchema)
25728
25818
  });
25729
25819
  var SceneMonitorStatusSchema = object({
25730
25820
  monitors: array(SceneMonitorSchema),
@@ -25757,7 +25847,14 @@ DeviceType.Camera, method(object({ deviceId: number() }), SceneMonitorStatusSche
25757
25847
  "both"
25758
25848
  ]).optional(),
25759
25849
  checkIntervalSec: number().optional(),
25760
- check: SceneCheckSchema.optional()
25850
+ check: SceneCheckSchema.optional(),
25851
+ emit: _enum(["latched", "live"]).optional(),
25852
+ quietSeconds: number().int().min(0).max(3600).optional(),
25853
+ minObservationSpacingSec: number().int().min(0).max(3600).optional(),
25854
+ anchorThreshold: number().min(0).max(1).optional(),
25855
+ autoRestore: boolean().optional(),
25856
+ /** `null` clears the vision-model adjudicator. */
25857
+ confirm: SceneConfirmSchema.nullable().optional()
25761
25858
  })
25762
25859
  }), _void(), {
25763
25860
  kind: "mutation",
@@ -25794,6 +25891,14 @@ DeviceType.Camera, method(object({ deviceId: number() }), SceneMonitorStatusSche
25794
25891
  }), _void(), {
25795
25892
  kind: "mutation",
25796
25893
  auth: "admin"
25894
+ }), method(object({
25895
+ deviceId: number(),
25896
+ monitorId: string(),
25897
+ /** Defaults to TRUE at the provider seam — see `SCENE_RESET_RECAPTURES`. */
25898
+ recapture: boolean().optional()
25899
+ }), _void(), {
25900
+ kind: "mutation",
25901
+ auth: "admin"
25797
25902
  });
25798
25903
  /**
25799
25904
  * Per-stage gating mode applied to the zones a rule references.
@@ -31171,6 +31276,12 @@ Object.freeze({
31171
31276
  addonId: null,
31172
31277
  access: "create"
31173
31278
  },
31279
+ "sceneMonitor.resetScene": {
31280
+ capName: "scene-monitor",
31281
+ capScope: "device",
31282
+ addonId: null,
31283
+ access: "delete"
31284
+ },
31174
31285
  "sceneMonitor.updateScene": {
31175
31286
  capName: "scene-monitor",
31176
31287
  capScope: "device",
@@ -33853,6 +33964,11 @@ Object.freeze({
33853
33964
  form: "single",
33854
33965
  optional: false
33855
33966
  }],
33967
+ "sceneMonitor.resetScene": [{
33968
+ name: "deviceId",
33969
+ form: "single",
33970
+ optional: false
33971
+ }],
33856
33972
  "sceneMonitor.updateScene": [{
33857
33973
  name: "deviceId",
33858
33974
  form: "single",
@@ -30,7 +30,7 @@ async function d(e) {
30
30
  }
31
31
  }
32
32
  async function f() {
33
- return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_orchestrator_widgets-CIgtalSC.mjs")).catch((e) => {
33
+ return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_orchestrator_widgets-D4ElH3_I.mjs")).catch((e) => {
34
34
  throw l = void 0, e;
35
35
  }), l;
36
36
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-pipeline-orchestrator",
3
- "version": "1.2.56",
3
+ "version": "1.2.57",
4
4
  "description": "Hub-side camera-to-agent load balancer — tracks runner capacity and dispatches attachCamera calls to the optimal pipeline-runner instance",
5
5
  "keywords": [
6
6
  "camstack",