@trillboards/edge-sdk 0.2.98 → 0.2.101

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 (39) hide show
  1. package/deploy/systemd/install.sh +78 -0
  2. package/deploy/systemd/setup-litertlm.sh +17 -0
  3. package/dist/CloudSensingManager.d.ts +48 -0
  4. package/dist/CloudSensingManager.d.ts.map +1 -1
  5. package/dist/CloudSensingManager.js +101 -0
  6. package/dist/CloudSensingManager.js.map +1 -1
  7. package/dist/EdgeAgent.js +1 -1
  8. package/dist/EdgeAgent.js.map +1 -1
  9. package/dist/SceneChangeDetector.d.ts +48 -0
  10. package/dist/SceneChangeDetector.d.ts.map +1 -1
  11. package/dist/SceneChangeDetector.js +65 -6
  12. package/dist/SceneChangeDetector.js.map +1 -1
  13. package/dist/SensingProfileClient.d.ts +34 -0
  14. package/dist/SensingProfileClient.d.ts.map +1 -1
  15. package/dist/SensingProfileClient.js +33 -0
  16. package/dist/SensingProfileClient.js.map +1 -1
  17. package/dist/config.d.ts +26 -0
  18. package/dist/config.d.ts.map +1 -1
  19. package/dist/config.js.map +1 -1
  20. package/dist/deployedCadenceSource.d.ts +22 -0
  21. package/dist/deployedCadenceSource.d.ts.map +1 -1
  22. package/dist/deployedCadenceSource.js +36 -0
  23. package/dist/deployedCadenceSource.js.map +1 -1
  24. package/dist/detectorCascadeGate.d.ts +216 -0
  25. package/dist/detectorCascadeGate.d.ts.map +1 -0
  26. package/dist/detectorCascadeGate.js +84 -0
  27. package/dist/detectorCascadeGate.js.map +1 -0
  28. package/dist/diagnose.d.ts +1 -1
  29. package/dist/diagnose.d.ts.map +1 -1
  30. package/dist/diagnose.js +1 -1
  31. package/dist/diagnose.js.map +1 -1
  32. package/dist/sensingCatchRate.d.ts +156 -8
  33. package/dist/sensingCatchRate.d.ts.map +1 -1
  34. package/dist/sensingCatchRate.js +165 -7
  35. package/dist/sensingCatchRate.js.map +1 -1
  36. package/dist/sensingRunMode.d.ts.map +1 -1
  37. package/dist/sensingRunMode.js +77 -2
  38. package/dist/sensingRunMode.js.map +1 -1
  39. package/package.json +2 -2
@@ -53,6 +53,84 @@ sudo -u trillboards HOME=/opt/trillboards bash \
53
53
  *** itself as 'waiting for the on-device model' until it does — it will NOT
54
54
  *** fall back to paid cloud inference. Re-run install.sh to retry."
55
55
 
56
+ # START IT HERE, THEN LET THE PROVISIONER VERIFY — in that order, and the order
57
+ # is the whole fix.
58
+ #
59
+ # `systemctl enable` above only enables; it does NOT start. The provisioner runs
60
+ # as the unprivileged `trillboards` service user (nologin, no sudoers entry:
61
+ # `sudo -n` returns "a password is required"), so `restart_litertlm_serve`
62
+ # cannot start the unit either — it logs a WARN and continues.
63
+ #
64
+ # That matters because `setup-litertlm.sh` writes `vision_backend=gpu` and then
65
+ # VERIFIES it with one real image inference, falling back to the CPU encoder
66
+ # only when the delegate does not apply. The cascade is gated on the serve being
67
+ # up. With the serve dead it is SKIPPED, and the box keeps an unverified `gpu`
68
+ # that survives the reboot which finally starts the enabled unit:
69
+ #
70
+ # GET /v1/models -> 200, lists the model
71
+ # POST /v1/chat/completions with an image -> 500 Failed to create conversation
72
+ #
73
+ # every frame, forever, with every health signal green. Measured on two fresh
74
+ # boxes, two zones, two machine families (c4-standard-8 us-central1-a,
75
+ # n2-standard-8 us-central1-b).
76
+ #
77
+ # STARTING IT IS NOT ENOUGH ON ITS OWN. The first provisioner pass has already
78
+ # run by then, so its fallback has already reset `vision_backend` to CPU — and a
79
+ # `--now` alone would start that CPU config and never revisit it, costing every
80
+ # Linux box the GPU vision encoder (measured: image encode 0.804 s -> 0.175 s
81
+ # p50, 76% of a SOP frame). Trading a broken box for a permanently slow one is
82
+ # not a fix.
83
+ #
84
+ # So: start the unit, then run the provisioner a SECOND time. The second pass is
85
+ # cheap and idempotent — it finds the pinned CLI healthy and keeps the current
86
+ # install ("litert-lm CLI is healthy at pinned 0.16.0 — keeping current
87
+ # install"), no 2.4 GB re-download — but this time the serve is up, so the
88
+ # verification cascade actually runs and decides GPU-vs-CPU on evidence.
89
+ sudo systemctl enable --now trillboards-litertlm \
90
+ || echo " *** The LiteRT-LM unit did not start. The connector will report itself as
91
+ *** 'waiting for the on-device model'. Check: sudo systemctl status trillboards-litertlm"
92
+
93
+ # The verification pass. Idempotent; the serve is up now, so the GPU probe runs.
94
+ VERIFY_OK=1
95
+ sudo -u trillboards HOME=/opt/trillboards bash \
96
+ node_modules/@trillboards/edge-sdk/deploy/systemd/setup-litertlm.sh \
97
+ || { VERIFY_OK=0; echo " *** Vision-backend verification did not finish. The connector still runs;
98
+ *** re-run install.sh to retry."; }
99
+
100
+ # APPLY WHAT THE VERIFICATION DECIDED. The pass above can DECIDE but it cannot
101
+ # ACT: `write_litertlm_config` succeeds as the `trillboards` user, and the
102
+ # `restart_litertlm_serve` that would make the process re-read it does not —
103
+ # same nologin / no-sudoers reason as the start. Measured on a fresh box, the
104
+ # verification pass logs exactly this and then leaves the running engine on the
105
+ # old backend:
106
+ #
107
+ # WARN: GPU vision encoder did not answer a probe inference - falling back to
108
+ # the CPU encoder
109
+ # WARN: could not restart trillboards-litertlm
110
+ # local AI healthy on the CPU vision encoder (slower, but serving)
111
+ # -> config on disk says CPU, the loaded engine is still GPU, and a real image
112
+ # call still returns 500 Failed to create conversation
113
+ #
114
+ # A config the process never re-read is a decision nobody acted on. So the whole
115
+ # sequence needs THREE root actions around one unprivileged provisioner: START
116
+ # it (so the probe can run), let it VERIFY, then RESTART it (so the verdict is
117
+ # loaded). install.sh holds root at each point; the provisioner holds it at none.
118
+ # ONLY WHEN THE VERIFICATION ACTUALLY SUCCEEDED. If that pass exited nonzero —
119
+ # `uv tool install --force` failing while repairing a drifted install is the
120
+ # realistic case — there is no verdict to apply, and on an UPGRADE the old
121
+ # in-memory engine is still serving. Restarting into a half-installed state
122
+ # turns a degraded-but-serving box into a dead one, which is a worse outcome
123
+ # than the bug this whole change fixes.
124
+ if [ "$VERIFY_OK" -eq 1 ]; then
125
+ sudo systemctl restart trillboards-litertlm \
126
+ || echo " *** Could not restart LiteRT-LM to apply the verified vision backend.
127
+ *** Run: sudo systemctl restart trillboards-litertlm"
128
+ else
129
+ echo " *** Skipping the LiteRT-LM restart: verification did not complete, so there is
130
+ *** no verified backend to apply and the running engine is left as it is."
131
+ fi
132
+
133
+
56
134
  # The on-device OBJECT DETECTOR cascade gate (RF-DETR, 127.0.0.1:9380). Its own
57
135
  # uv tool, its own venv, its own unit — never a package added into litert-lm's,
58
136
  # which `uv tool install --force` rebuilds from scratch on any drift.
@@ -399,6 +399,23 @@ if [ "$HEALTHY" -eq 1 ]; then
399
399
  fi
400
400
 
401
401
  if [ "$HEALTHY" -ne 1 ]; then
402
+ # AN UNVERIFIED OPTIMISM MUST NOT BE LEFT ON DISK.
403
+ #
404
+ # We wrote `vision_backend=gpu` above and the cascade that checks it never got
405
+ # to run, because it is gated on a serve that did not come up. The config then
406
+ # OUTLIVES this install: the unit is enabled, so the next boot starts it on a
407
+ # backend nobody confirmed, and if the delegate does not apply every image call
408
+ # 500s with `Failed to create conversation` while `/v1/models` keeps answering
409
+ # 200. Measured on two fresh boxes, two zones, two machine families.
410
+ #
411
+ # So fall back to the CPU default HERE. It is the slower encoder and it always
412
+ # works, which is the right trade for a value we could not check: a box that is
413
+ # slow is a box that is serving, and `setup-litertlm.sh` re-runs on every
414
+ # install.sh, which will promote it to GPU the moment it can prove GPU works.
415
+ write_litertlm_config "" \
416
+ || log "WARN: could not rewrite $CONFIG_JSON to the CPU default"
417
+ log "vision_backend left UNVERIFIED, so it was reset to the CPU encoder"
418
+
402
419
  # NOT fatal. auto-sense waits and beacons, so an install that gets this far
403
420
  # with the model on disk recovers by itself once the serve comes up.
404
421
  log "WARN: Gemma is installed but the serve did not answer yet; auto-sense will"
@@ -10,6 +10,7 @@ import { type MotionGateOptions, type MotionGateReason } from './SceneChangeDete
10
10
  import { type VlmCandidateBufferOptions, type VlmCandidateBufferStats } from './VlmCandidateBuffer';
11
11
  import { type DurableVlmCandidateSpoolOptions } from './DurableVlmCandidateSpool';
12
12
  import { DetectorShadowProbe, type DetectorShadowStats } from './DetectorShadowProbe';
13
+ import { type CascadeGateStats } from './detectorCascadeGate';
13
14
  import type { DeployedCadence } from './deployedCadence';
14
15
  import { type CaptureMode } from './connectorCadence';
15
16
  import type { LiteRtAccelerator, LiteRtAcceleratorHealth } from './LiteRtVlmProvider';
@@ -410,6 +411,14 @@ export declare class CloudSensingManager extends EventEmitter {
410
411
  * existed, which is the property the existing suites assert by not changing.
411
412
  */
412
413
  private readonly detectorShadow;
414
+ /**
415
+ * What the ARMED gate actually did, connector-wide.
416
+ *
417
+ * Connector-wide and not per feed because the question it answers is "is this
418
+ * box suppressing anything, and why" — a support question about the machine.
419
+ * The per-feed suppression counts live on `LoopState` for the health beacon.
420
+ */
421
+ private readonly cascadeGateStats;
413
422
  private readonly motionDrivesCadence;
414
423
  /** Retained so a cadence change can rebuild each feed's gate heartbeat. */
415
424
  private readonly audioSensingOptions;
@@ -697,12 +706,29 @@ export declare class CloudSensingManager extends EventEmitter {
697
706
  * wedged".
698
707
  */
699
708
  detectorShadow: DetectorShadowStats;
709
+ /**
710
+ * What the ARMED gate did. `suppressed` is the only number that represents
711
+ * work NOT done; every other counter is an admission and therefore a frame
712
+ * that reached the model exactly as it would have before this shipped.
713
+ *
714
+ * Read `admittedUnavailable` beside `suppressed`: a box with both high is a
715
+ * box whose detector is flapping, and the suppressions it did make were
716
+ * decided by a service that is not reliably answering.
717
+ */
718
+ detectorCascade: CascadeGateStats;
700
719
  perFeed: Array<{
701
720
  name: string;
702
721
  captures: number;
703
722
  analyses: number;
704
723
  admissionDenied: number;
705
724
  motionSkipped: number;
725
+ /**
726
+ * Frames the ARMED cascade removed this run. 0 on every connector whose
727
+ * screens are not armed, which is the fleet default.
728
+ */
729
+ cascadeSuppressed: number;
730
+ /** Whether the armed gate is live on THIS feed. Per screen, server-decided. */
731
+ cascadeArmed: boolean;
706
732
  /**
707
733
  * Uploads the SERVER rejected this run. Present because a rejected feed is
708
734
  * otherwise indistinguishable from a quiet one: `analyses` simply stops
@@ -758,6 +784,28 @@ export declare class CloudSensingManager extends EventEmitter {
758
784
  }>;
759
785
  /** Stop all loops and close cameras. */
760
786
  stop(): Promise<void>;
787
+ /**
788
+ * Arm or disarm the detector cascade for ONE feed.
789
+ *
790
+ * Per feed because arming is per SCREEN, and one connector runs N screens: a
791
+ * bay camera watching for a forklift and a corridor camera watching for
792
+ * people share a box and cannot share this answer. Driven by the
793
+ * sensing-profile poll, which is the only channel that knows the operator's
794
+ * routes.
795
+ *
796
+ * Returns false for an unknown feed name rather than throwing: this is called
797
+ * from a best-effort background refresh, and a profile that names a camera
798
+ * this connector no longer runs must not take the poll down.
799
+ *
800
+ * NOTE the asymmetry, and that it is deliberate — DISARMING takes effect on
801
+ * the next frame, and so does arming, but only arming needs a server to say
802
+ * so. A connector that loses the API keeps whatever it last heard for the
803
+ * feeds it already has, and every NEW feed starts disarmed. There is no path
804
+ * by which silence turns suppression ON.
805
+ */
806
+ setCascadeArmed(loopName: string, armed: boolean): boolean;
807
+ /** Whether the armed gate is live on a feed. `false` for an unknown feed. */
808
+ isCascadeArmed(loopName: string): boolean;
761
809
  /**
762
810
  * Notify a loop (by feed name) that its face-detection state changed —
763
811
  * switches that loop between the periodic and face-triggered cadence.
@@ -1 +1 @@
1
- {"version":3,"file":"CloudSensingManager.d.ts","sourceRoot":"","sources":["../src/CloudSensingManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CloudSensingManager.d.ts","sourceRoot":"","sources":["../src/CloudSensingManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EACL,qBAAqB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EAGvB,KAAK,UAAU,EAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAA2B,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAoB,MAAM,gBAAgB,CAAC;AAErE,OAAO,KAAK,EAAoB,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEhG,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAoB,KAAK,mBAAmB,EAA6B,MAAM,oBAAoB,CAAC;AAC3G,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAGL,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,mBAAmB,EACnB,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAgD,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAmNtF,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,wBAAwB,CAS/E;AAqBD;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,OAAO,CACL,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACpC,kBAAkB,CAAC,CAAC,YAAY,EAAE,kBAAkB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACxF,WAAW,IAAI,MAAM,CAAC;IACtB;;;;;;;;;;;;OAYG;IACH,sBAAsB,CAAC,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxG;;;;;;;;;;OAUG;IACH,oBAAoB,CAAC,IAAI,uBAAuB,CAAC;CAClD;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,kGAAkG;IAClG,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjC;;;OAGG;IACH,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC;IACzC;;;;;;OAMG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAC3B;;;;;;OAMG;IACH,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,+EAA+E;IAC/E,UAAU,EAAE,OAAO,CAAC;IACpB,8FAA8F;IAC9F,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,mFAAmF;IACnF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,aAAa,CAAC;IACtB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,0BAA0B;IACzC,8BAA8B;IAC9B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,4DAA4D;IAC5D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qEAAqE;IACrE,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,sEAAsE;IACtE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACvD;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,4EAA4E;IAC5E,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;;;;;;;;;;;OAeG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;;;;;;;;;;;;;;OAkBG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG;QACxC,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB;;;;;;WAMG;QACH,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB;;;;;;WAMG;QACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF;;;;;;;;;;;;;;;;;;;OAmBG;IACH,eAAe,CAAC,EAAE,yBAAyB,GAAG;QAC5C,uDAAuD;QACvD,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB;;;;;WAKG;QACH,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB;;;;WAIG;QACH,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,+BAA+B,CAAC,GAAG;YACtD,OAAO,CAAC,EAAE,OAAO,CAAC;YAClB,SAAS,CAAC,EAAE,MAAM,CAAC;SACpB,CAAC,CAAC;KACJ,CAAC;IACF;;;;;;;;;;;;;;;;OAgBG;IACH,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,0EAA0E;IAC1E,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;CAC5C;AA+ED,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB,CAAS;IACnC,wEAAwE;IACxE,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAS;IAClD,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAS;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAU;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAS;IACjD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAS;IACvD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqC;IACvE;;;;;;;;OAQG;IACH,OAAO,CAAC,mBAAmB,CAAoC;IAC/D,OAAO,CAAC,yBAAyB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAS;IACrD,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAS;IACzD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmB;IACjD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAS;IAC/C;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuD;IAClF,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAS;IACjD,OAAO,CAAC,kBAAkB,CAA8C;IACxE;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqD;IACtF,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAU;IAC9C,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAkC;IACtE,iFAAiF;IACjF,OAAO,CAAC,gBAAgB,CAA8B;IACtD,OAAO,CAAC,iBAAiB,CAET;IAChB;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,6EAA6E;IAC7E,OAAO,CAAC,oBAAoB,CAAuB;IACnD,6EAA6E;IAC7E,OAAO,CAAC,qBAAqB,CAAuB;IACpD,OAAO,CAAC,iBAAiB,CAAuC;IAChE,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,cAAc,CAAuB;IAC7C,wEAAwE;IACxE,OAAO,CAAC,qBAAqB,CAAS;IACtC;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,cAAc,CAAS;gBAEnB,OAAO,EAAE,0BAA0B;IA0N/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAoBlD,kDAAkD;IAClD,qBAAqB,IAAI,MAAM;IAI/B;;;;;OAKG;IACG,sBAAsB,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAsB/D,uEAAuE;IACvE,YAAY,IAAI,MAAM;IAItB,sEAAsE;IACtE,QAAQ,IAAI,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB;sFAC8E;QAC9E,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,OAAO,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,oBAAoB,EAAE,MAAM,CAAC;QAC7B,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IAaF,2EAA2E;IAC3E,iBAAiB,IAAI,iBAAiB;IAItC;;;;;;;;OAQG;IACH,gBAAgB,IAAI;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,qBAAqB,EAAE,MAAM,CAAC;QAC9B,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB;;;;;;WAMG;QACH,eAAe,EAAE,MAAM,CAAC;QACxB;;;;;;;;;;;;;WAaG;QACH,YAAY,EAAE;YAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3D,iBAAiB,EAAE,MAAM,CAAC;QAC1B,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;QACzC,mFAAmF;QACnF,kBAAkB,EAAE,MAAM,CAAC;QAC3B;;;;;;WAMG;QACH,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;QACxC,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB;;;;;WAKG;QACH,OAAO,EAAE;YACP,OAAO,EAAE,OAAO,CAAC;YACjB,wEAAwE;YACxE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;YAC9B,mDAAmD;YACnD,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;YAC/B,WAAW,EAAE,MAAM,CAAC;YACpB,8EAA8E;YAC9E,WAAW,EAAE,OAAO,CAAC;YACrB,gEAAgE;YAChE,SAAS,EAAE,MAAM,CAAC;YAClB,QAAQ,EAAE,MAAM,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;SAC5C,CAAC;QACF;;;;;;;;;;;;;;;;;WAiBG;QACH,OAAO,EAAE;YACP,yCAAyC;YACzC,IAAI,EAAE,WAAW,CAAC;YAClB,mDAAmD;YACnD,eAAe,EAAE,MAAM,CAAC;YACxB,yEAAyE;YACzE,YAAY,EAAE,MAAM,CAAC;YACrB,yEAAyE;YACzE,YAAY,EAAE,MAAM,CAAC;YACrB,gDAAgD;YAChD,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACzC;;;;;;;;;;eAUG;YACH,SAAS,EAAE,MAAM,CAAC;YAClB,0EAA0E;YAC1E,UAAU,EAAE,MAAM,CAAC;YACnB,4EAA4E;YAC5E,eAAe,EAAE,MAAM,CAAC;YACxB,4EAA4E;YAC5E,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;SACjC,CAAC;QACF;;;;;;;WAOG;QACH,eAAe,EAAE;YACf,OAAO,EAAE,OAAO,CAAC;YACjB,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC;YAC3B,sBAAsB;YACtB,QAAQ,EAAE,MAAM,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;YACd,SAAS,EAAE,MAAM,CAAC;YAClB,UAAU,EAAE,MAAM,CAAC;YACnB,aAAa,EAAE,MAAM,CAAC;YACtB,YAAY,EAAE,MAAM,CAAC;YACrB,QAAQ,EAAE,MAAM,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;YACd,QAAQ,EAAE,MAAM,CAAC;YACjB,MAAM,EAAE,MAAM,CAAC;YACf,uEAAuE;YACvE,SAAS,EAAE,MAAM,CAAC;YAClB,OAAO,EAAE,MAAM,CAAC;YAChB,OAAO,EAAE,MAAM,CAAC;YAChB,8DAA8D;YAC9D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;YAC3B,OAAO,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;YAC5C,SAAS,EAAE,MAAM,CAAC;YAClB,SAAS,EAAE,MAAM,CAAC;YAClB,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;YACjB,WAAW,EAAE,MAAM,CAAC;YACpB,UAAU,EAAE,MAAM,CAAC;YACnB,YAAY,EAAE,MAAM,CAAC;SACtB,CAAC;QACF;;;;;;;;;;;WAWG;QACH,WAAW,EAAE,wBAAwB,CAAC;QACtC;;;;;;;;;;;;WAYG;QACH,cAAc,EAAE,mBAAmB,CAAC;QACpC;;;;;;;;WAQG;QACH,eAAe,EAAE,gBAAgB,CAAC;QAClC,OAAO,EAAE,KAAK,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,CAAC;YACjB,QAAQ,EAAE,MAAM,CAAC;YACjB,eAAe,EAAE,MAAM,CAAC;YACxB,aAAa,EAAE,MAAM,CAAC;YACtB;;;eAGG;YACH,iBAAiB,EAAE,MAAM,CAAC;YAC1B,+EAA+E;YAC/E,YAAY,EAAE,OAAO,CAAC;YACtB;;;;;eAKG;YACH,QAAQ,EAAE,MAAM,CAAC;YACjB,yEAAyE;YACzE,qBAAqB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;YACxD,0EAA0E;YAC1E,kBAAkB,EAAE,MAAM,CAAC;YAC3B,sEAAsE;YACtE,gBAAgB,EAAE,MAAM,CAAC;YACzB,YAAY,EAAE,OAAO,CAAC;YACtB,iBAAiB,EAAE,MAAM,CAAC;SAC3B,CAAC,CAAC;KACJ;IAmKD,SAAS,IAAI,OAAO;IAIpB,oGAAoG;IAC9F,KAAK,CAAC,IAAI,GAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA2C/D;;;;;OAKG;YACW,kBAAkB;IAyBhC;;;;;;;;;;OAUG;IACH,qBAAqB,IAAI;QACvB,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,yBAAyB,CAAC,EAAE,MAAM,CAAC;QACnC,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;QAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,GAAG,IAAI;IAYR,yDAAyD;IACzD,oBAAoB,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC;IAQrF,wCAAwC;IAClC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6C3B;;;;;;;;;;;;;;;;;;OAkBG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO;IAS1D,6EAA6E;IAC7E,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIzC;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAuB1D;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;;;;;;OAOG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;IAQ3E,OAAO,CAAC,cAAc;YAIR,SAAS;YAwET,kBAAkB;IAUhC;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;IAyBnB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,UAAU;IAKlB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,YAAY;IAUpB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,YAAY;IAepB;;;;;;;;;;OAUG;YACW,gBAAgB;IA6B9B;;;;;OAKG;YACW,SAAS;IA6BvB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,mBAAmB;IA8B3B;;;;;;;;OAQG;IACH,OAAO,CAAC,0BAA0B;IAiBlC,OAAO,CAAC,kBAAkB;IAY1B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,gBAAgB;IA2CxB,OAAO,CAAC,cAAc;IAOtB;;;OAGG;YACW,kBAAkB;IAsBhC;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,WAAW;IAOnB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,cAAc;IAYtB;;;;;;;OAOG;YACW,aAAa;IAkO3B;;;;;;;OAOG;YACW,aAAa;IAgG3B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,cAAc;IAqEtB;;;;;;;;;OASG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;IA2CtB,uEAAuE;YACzD,cAAc;IA6D5B;;;;;;;;;;;;;OAaG;YACW,MAAM;CAiCrB;AAiKD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,eAAe,EACvB,IAAI,CAAC,EAAE;IACL,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,cAAc,CAAC;IAC7D,iBAAiB,CAAC,EAAE,CAClB,IAAI,EAAE,YAAY,EAClB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,KAAK,KACT,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5B,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,qBAAqB,CAAC;IAC9D,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;mFAC+E;IAC/E,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAChD,GACA,eAAe,EAAE,CA8EnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EAAE,EACrB,WAAW,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,cAAc,EACnD,IAAI,CAAC,EAAE;IACL,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC/C;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACrC,GACA,KAAK,CAAC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,CAAC,CA+EvD;AAED,kEAAkE;AAClE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,YAAY,EAAE,CA4EpE"}
@@ -16,6 +16,7 @@ const SceneChangeDetector_1 = require("./SceneChangeDetector");
16
16
  const VlmCandidateBuffer_1 = require("./VlmCandidateBuffer");
17
17
  const DurableVlmCandidateSpool_1 = require("./DurableVlmCandidateSpool");
18
18
  const DetectorShadowProbe_1 = require("./DetectorShadowProbe");
19
+ const detectorCascadeGate_1 = require("./detectorCascadeGate");
19
20
  const connectorCadence_1 = require("./connectorCadence");
20
21
  /**
21
22
  * Thin cloud-sensing run mode.
@@ -265,6 +266,14 @@ class CloudSensingManager extends events_1.EventEmitter {
265
266
  this.localNetworkVerdict = null;
266
267
  this.localNetworkProbeInFlight = false;
267
268
  this.candidatePumpTimer = null;
269
+ /**
270
+ * What the ARMED gate actually did, connector-wide.
271
+ *
272
+ * Connector-wide and not per feed because the question it answers is "is this
273
+ * box suppressing anything, and why" — a support question about the machine.
274
+ * The per-feed suppression counts live on `LoopState` for the health beacon.
275
+ */
276
+ this.cascadeGateStats = { ...detectorCascadeGate_1.EMPTY_CASCADE_GATE_STATS };
268
277
  /** Live audio attachments, keyed by feed name. Empty unless audio is enabled. */
269
278
  this.audioAttachments = [];
270
279
  this.motionGateOptions = null;
@@ -325,6 +334,12 @@ class CloudSensingManager extends events_1.EventEmitter {
325
334
  lastCaptureAtMs: null,
326
335
  lastHealthReportAtMs: null,
327
336
  lastSensingState: null,
337
+ // Never armed at construction. Arming is a server decision this connector
338
+ // has not heard yet, and defaulting to `true` anywhere would make a
339
+ // connector that cannot reach the API suppress on a stale belief.
340
+ cascadeArmed: false,
341
+ cascadeSuppressedCount: 0,
342
+ runCascadeSuppressed: 0,
328
343
  }));
329
344
  this.periodicIntervalMs = options.periodicIntervalMs ?? DEFAULT_PERIODIC_MS;
330
345
  this.faceTriggeredIntervalMs = options.faceTriggeredIntervalMs ?? DEFAULT_FACE_MS;
@@ -704,6 +719,7 @@ class CloudSensingManager extends events_1.EventEmitter {
704
719
  },
705
720
  accelerator: foldAcceleratorHealth(this.loops.map((s) => acceleratorHealthFor(s)).filter((a) => a !== null)),
706
721
  detectorShadow: this.detectorShadow?.getStats() ?? EMPTY_DETECTOR_SHADOW_STATS,
722
+ detectorCascade: { ...this.cascadeGateStats },
707
723
  perFeed: this.loops.map((s, i) => ({
708
724
  name: s.deps.name,
709
725
  captures: s.captureCount,
@@ -712,6 +728,8 @@ class CloudSensingManager extends events_1.EventEmitter {
712
728
  rejected: s.runPostRejected,
713
729
  admissionDenied: s.runAdmissionDenied,
714
730
  motionSkipped: s.runMotionSkipped,
731
+ cascadeSuppressed: s.runCascadeSuppressed,
732
+ cascadeArmed: s.cascadeArmed,
715
733
  motionSkippedByReason: gateStats[i]
716
734
  ? { ...emptyMotionReasonCounts(), ...gateStats[i].byReason }
717
735
  : emptyMotionReasonCounts(),
@@ -747,6 +765,7 @@ class CloudSensingManager extends events_1.EventEmitter {
747
765
  s.runPostRejected = 0;
748
766
  s.runAdmissionDenied = 0;
749
767
  s.runMotionSkipped = 0;
768
+ s.runCascadeSuppressed = 0;
750
769
  void this.startLoop(s, generation).catch((err) => this.emitLoopError(s, err));
751
770
  }
752
771
  // Acoustic sensing, when the operator has turned it on. Attaching is
@@ -881,6 +900,39 @@ class CloudSensingManager extends events_1.EventEmitter {
881
900
  }
882
901
  }
883
902
  }
903
+ /**
904
+ * Arm or disarm the detector cascade for ONE feed.
905
+ *
906
+ * Per feed because arming is per SCREEN, and one connector runs N screens: a
907
+ * bay camera watching for a forklift and a corridor camera watching for
908
+ * people share a box and cannot share this answer. Driven by the
909
+ * sensing-profile poll, which is the only channel that knows the operator's
910
+ * routes.
911
+ *
912
+ * Returns false for an unknown feed name rather than throwing: this is called
913
+ * from a best-effort background refresh, and a profile that names a camera
914
+ * this connector no longer runs must not take the poll down.
915
+ *
916
+ * NOTE the asymmetry, and that it is deliberate — DISARMING takes effect on
917
+ * the next frame, and so does arming, but only arming needs a server to say
918
+ * so. A connector that loses the API keeps whatever it last heard for the
919
+ * feeds it already has, and every NEW feed starts disarmed. There is no path
920
+ * by which silence turns suppression ON.
921
+ */
922
+ setCascadeArmed(loopName, armed) {
923
+ const s = this.loops.find((l) => l.deps.name === loopName);
924
+ if (!s)
925
+ return false;
926
+ if (s.cascadeArmed === armed)
927
+ return true;
928
+ s.cascadeArmed = armed;
929
+ this.emit('cascadeArmChanged', { name: s.deps.name, armed });
930
+ return true;
931
+ }
932
+ /** Whether the armed gate is live on a feed. `false` for an unknown feed. */
933
+ isCascadeArmed(loopName) {
934
+ return this.loops.find((l) => l.deps.name === loopName)?.cascadeArmed ?? false;
935
+ }
884
936
  /**
885
937
  * Notify a loop (by feed name) that its face-detection state changed —
886
938
  * switches that loop between the periodic and face-triggered cadence.
@@ -1518,6 +1570,55 @@ class CloudSensingManager extends events_1.EventEmitter {
1518
1570
  const detectorShadow = shadowObservation
1519
1571
  ? DetectorShadowProbe_1.DetectorShadowProbe.toWire(shadowObservation)
1520
1572
  : undefined;
1573
+ // ── THE ARMED GATE ──────────────────────────────────────────────────────
1574
+ //
1575
+ // The one place a detector verdict is allowed to remove a VLM call. It sits
1576
+ // between the shadow reading and `tryAcquire` because that is where the
1577
+ // saving is: a suppressed frame costs no admission slot, no inference and
1578
+ // no upload. See `detectorCascadeGate.ts` for why five of its six rules
1579
+ // admit, and why the ONLY suppressible reason is `motion`: a heartbeat is a
1580
+ // promise about TIME rather than about content, and suppressing one is an
1581
+ // absorbing state that takes the whole feed dark.
1582
+ //
1583
+ // `armed` is per FEED and server-decided. A connector cannot see
1584
+ // `sensing_routes`, so it cannot know whether this screen's operator is
1585
+ // watching for a forklift, a spill or a fire — none of which a PERSON
1586
+ // detector can vouch for. Deciding that here would be guessing about
1587
+ // whether somebody's fire alarm still works.
1588
+ const cascade = (0, detectorCascadeGate_1.decideCascadeGate)({
1589
+ armed: s.cascadeArmed,
1590
+ verdict: shadowObservation ? shadowObservation.verdict : null,
1591
+ motion: verdict,
1592
+ });
1593
+ (0, detectorCascadeGate_1.foldCascadeGateStats)(this.cascadeGateStats, cascade);
1594
+ if (cascade.outcome === 'suppress') {
1595
+ s.cascadeSuppressedCount++;
1596
+ s.runCascadeSuppressed++;
1597
+ // Advance the MOTION throttle — and only it. Without this the feed is
1598
+ // pathological rather than cheap: `markAnalyzed()` never fires on a
1599
+ // suppressed frame, so the 30 s motion floor expires and never re-arms,
1600
+ // every 500 ms look then returns `analyze: true`, and the shadow probe's
1601
+ // own 15 s per-feed bound answers one of them and lets the other ~29
1602
+ // through as `no_reading` — which ADMIT. Arming would increase analyses.
1603
+ // `markSuppressed` deliberately does NOT touch the heartbeat clock or the
1604
+ // stationary baseline; see its docblock for why those want the opposite
1605
+ // answer about the same event.
1606
+ s.motionGate?.markSuppressed();
1607
+ // Reported as its OWN state, never as an analysis. A suppression that
1608
+ // rendered as "analyzing" would be the runtime-edge-cases defect wearing
1609
+ // a new face: the portal's "AI active" tile would stay green on a
1610
+ // connector that had stopped looking at anything. The frame is NOT
1611
+ // offered to the candidate buffer either — holding a frame we decided not
1612
+ // to analyze would spend a slot later on the same decision.
1613
+ this.emit('cascadeSuppressed', {
1614
+ name: s.deps.name,
1615
+ reason: cascade.reason,
1616
+ motionReason: verdict.reason,
1617
+ minConfidence: shadowObservation ? shadowObservation.minConfidence : null,
1618
+ });
1619
+ this.reportCameraOpen(s, { sensingState: this.idleSensingState() });
1620
+ return null;
1621
+ }
1521
1622
  const ticket = this.admissionGate.tryAcquire(s.deps.name);
1522
1623
  if (!ticket) {
1523
1624
  s.admissionDeniedCount++;