@camstack/addon-post-analysis 1.2.312 → 1.2.313
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/{clip-model-registry-CRkjjUyj.js → clip-model-registry-DBUJMS9d.js} +73 -73
- package/dist/{clip-model-registry-ivwvxxex.mjs → clip-model-registry-ltmel0yE.mjs} +73 -73
- package/dist/embedding-encoder/index.js +1 -1
- package/dist/embedding-encoder/index.mjs +1 -1
- package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-BocOElW2.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-Bjj5m6Qi.mjs} +2 -2
- package/dist/pipeline-analytics/{hostInit-CRloCh1h.mjs → hostInit-DV0ug7z3.mjs} +2 -2
- package/dist/pipeline-analytics/index.js +11 -11
- package/dist/pipeline-analytics/index.mjs +11 -11
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +1 -1
|
@@ -7677,7 +7677,7 @@ function errMsg(err) {
|
|
|
7677
7677
|
return String(err);
|
|
7678
7678
|
}
|
|
7679
7679
|
//#endregion
|
|
7680
|
-
//#region ../types/dist/composition-
|
|
7680
|
+
//#region ../types/dist/composition-D7ULvLdD.mjs
|
|
7681
7681
|
/**
|
|
7682
7682
|
* Deterministic SHA-256 hash of an arbitrary serialisable value. The
|
|
7683
7683
|
* canonical form sorts object keys alphabetically at every depth so two
|
|
@@ -7762,20 +7762,20 @@ function portable(target) {
|
|
|
7762
7762
|
}
|
|
7763
7763
|
portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64");
|
|
7764
7764
|
/**
|
|
7765
|
-
*
|
|
7766
|
-
*
|
|
7765
|
+
* THE table "which boolean of this device type counts as HIGH", and the
|
|
7766
|
+
* pure evaluator of its EDGE.
|
|
7767
7767
|
*
|
|
7768
|
-
*
|
|
7769
|
-
*
|
|
7770
|
-
*
|
|
7771
|
-
*
|
|
7772
|
-
*
|
|
7773
|
-
*
|
|
7768
|
+
* ONE table for everyone who asks "is this device HIGH?": the
|
|
7769
|
+
* recorder's `RecordingTriggers.sensorDeviceIds` trigger, the post-analysis
|
|
7770
|
+
* sensor markers, the orchestrator's camera-sensors bridge and
|
|
7771
|
+
* the sources of a composite doorbell (`doorbellFeatureSources`, D671).
|
|
7772
|
+
* A second copy would diverge at the first cap added, and the symptom — "the
|
|
7773
|
+
* sensor rings the doorbell but does not record" — is exactly D62.
|
|
7774
7774
|
*
|
|
7775
|
-
* ⚠
|
|
7776
|
-
*
|
|
7777
|
-
*
|
|
7778
|
-
*
|
|
7775
|
+
* ⚠ NOT `DEVICE_STATE_READERS` (`catalogs/device-state-vocabulary.ts`), and the
|
|
7776
|
+
* two must not be unified: that one answers "what is the state WORD for a
|
|
7777
|
+
* rule" (and includes `presence`, `cover`, `alarm-panel`), this one "which
|
|
7778
|
+
* boolean's EDGE counts". Deliberately different vocabularies.
|
|
7779
7779
|
*/
|
|
7780
7780
|
/**
|
|
7781
7781
|
* Known binary / switch source caps → the boolean slice field whose
|
|
@@ -7867,17 +7867,17 @@ function evaluateSensorLevelEdge(input) {
|
|
|
7867
7867
|
};
|
|
7868
7868
|
}
|
|
7869
7869
|
/**
|
|
7870
|
-
*
|
|
7871
|
-
*
|
|
7870
|
+
* THE edge. Pure: no clock of its own, no memory — the caller
|
|
7871
|
+
* brings `prior`, `nowMs` and its own `startedAtMs`.
|
|
7872
7872
|
*
|
|
7873
|
-
*
|
|
7874
|
-
*
|
|
7875
|
-
* `startedAtMs` **
|
|
7876
|
-
*
|
|
7877
|
-
*
|
|
7878
|
-
*
|
|
7879
|
-
*
|
|
7880
|
-
*
|
|
7873
|
+
* The case of the FIRST slice already active is treated explicitly and counts as an
|
|
7874
|
+
* edge only if the UPSTREAM timestamp of the transition is later than
|
|
7875
|
+
* `startedAtMs` **and** within `firstSightingFreshnessMs`. Both halves
|
|
7876
|
+
* are needed: freshness alone would fire on a boot-time hydration of a
|
|
7877
|
+
* state flipped a few seconds before the restart, and "after we started"
|
|
7878
|
+
* alone would fire, on a long-lived process, for a source
|
|
7879
|
+
* adopted today whose state changed yesterday. The ambiguous case ERRS TOWARD
|
|
7880
|
+
* SILENCE and declares it (`baseline-seeded-stale-active`).
|
|
7881
7881
|
*/
|
|
7882
7882
|
function evaluateSensorEdge(input) {
|
|
7883
7883
|
const value = sliceActiveValue(input.capName, input.slice);
|
|
@@ -9777,22 +9777,22 @@ var CLASS_MAP_MACRO_TARGETS = [
|
|
|
9777
9777
|
"package"
|
|
9778
9778
|
];
|
|
9779
9779
|
/**
|
|
9780
|
-
*
|
|
9781
|
-
*
|
|
9780
|
+
* The FIRST-LEVEL macro classes: those an object detector emits and that
|
|
9781
|
+
* an operator can select.
|
|
9782
9782
|
*
|
|
9783
|
-
*
|
|
9783
|
+
* They are the three offered by the `object-detection` step
|
|
9784
9784
|
* (`addon-pipeline/src/detection-pipeline/registry/step-definitions.ts`,
|
|
9785
|
-
* `enabledMacroClasses`). `package`
|
|
9786
|
-
* `MACRO_LABELS` —
|
|
9787
|
-
* `package-detection`,
|
|
9788
|
-
*
|
|
9785
|
+
* `enabledMacroClasses`). `package` is in {@link CLASS_MAP_MACRO_TARGETS} and in
|
|
9786
|
+
* `MACRO_LABELS` — it is a true macro — but NOT here: it belongs to the step
|
|
9787
|
+
* `package-detection`, whose enablement is driven by zones, and offering the
|
|
9788
|
+
* same word twice has already made an operator turn on the COCO proxy
|
|
9789
9789
|
* (suitcase/backpack/handbag) lasciando spento il detector dedicato.
|
|
9790
9790
|
*
|
|
9791
|
-
*
|
|
9792
|
-
*
|
|
9793
|
-
* (`types/detection.ts`);
|
|
9794
|
-
* (`RecordingTriggers.objectClasses`)
|
|
9795
|
-
*
|
|
9791
|
+
* ONE list. Before today the same three were hand-written in the step's offer
|
|
9792
|
+
* and a second time as the union `FirstLevelMacro`
|
|
9793
|
+
* (`types/detection.ts`); a third copy for the recording trigger
|
|
9794
|
+
* (`RecordingTriggers.objectClasses`) would have made the later divergence
|
|
9795
|
+
* invisible.
|
|
9796
9796
|
*/
|
|
9797
9797
|
var FIRST_LEVEL_MACRO_CLASSES = [
|
|
9798
9798
|
"person",
|
|
@@ -9857,17 +9857,17 @@ var RecordingStorageModeSchema = _enum([
|
|
|
9857
9857
|
"on-device-decision"
|
|
9858
9858
|
]);
|
|
9859
9859
|
/**
|
|
9860
|
-
*
|
|
9861
|
-
*
|
|
9860
|
+
* The macro classes that can open a recording window — the same
|
|
9861
|
+
* three offered by the `object-detection` step, from ONE list
|
|
9862
9862
|
* ({@link FIRST_LEVEL_MACRO_CLASSES}).
|
|
9863
9863
|
*/
|
|
9864
9864
|
var RecordingObjectTriggerClassSchema = _enum(FIRST_LEVEL_MACRO_CLASSES);
|
|
9865
9865
|
/**
|
|
9866
|
-
* True
|
|
9866
|
+
* True when `values` does not repeat an element.
|
|
9867
9867
|
*
|
|
9868
|
-
*
|
|
9869
|
-
*
|
|
9870
|
-
*
|
|
9868
|
+
* A duplicate is not harmless: every entry of `objectClasses` / `sensorDeviceIds`
|
|
9869
|
+
* becomes a SOURCE in `bandTriggerSources`, and the same source twice
|
|
9870
|
+
* would count its windows twice in `segmentMissedByMs`.
|
|
9871
9871
|
*/
|
|
9872
9872
|
var noDuplicates = (values) => new Set(values).size === values.length;
|
|
9873
9873
|
/** Which detectors trigger an `events`-mode band. */
|
|
@@ -9875,34 +9875,34 @@ var RecordingTriggersSchema = object({
|
|
|
9875
9875
|
motion: boolean().optional(),
|
|
9876
9876
|
audioThresholdDbfs: number().optional(),
|
|
9877
9877
|
/**
|
|
9878
|
-
*
|
|
9879
|
-
*
|
|
9880
|
-
*
|
|
9881
|
-
*
|
|
9878
|
+
* The macro classes whose detection opens a window. ABSENT = the source
|
|
9879
|
+
* is not listened to; an EMPTY array is rejected, because "events band, object
|
|
9880
|
+
* trigger on, no class" is the same shape "enabled and records
|
|
9881
|
+
* nothing, forever" that `eventsBandCanEverDemand` is written against.
|
|
9882
9882
|
*
|
|
9883
|
-
*
|
|
9884
|
-
*
|
|
9885
|
-
* `minConfidence<Macro>`
|
|
9886
|
-
* (`source: 'onboard'`)
|
|
9887
|
-
*
|
|
9883
|
+
* The signal read is ALREADY FILTERED: only `source: 'pipeline'` detections, i.e.
|
|
9884
|
+
* those that went through `enabledMacroClasses`, the
|
|
9885
|
+
* `minConfidence<Macro>` and the full-frame guard. The camera's onboard AI
|
|
9886
|
+
* (`source: 'onboard'`) goes through none of those gates and does NOT open
|
|
9887
|
+
* windows — see `recorder/object-trigger.ts`.
|
|
9888
9888
|
*/
|
|
9889
9889
|
objectClasses: array(RecordingObjectTriggerClassSchema).min(1).refine(noDuplicates, { message: "objectClasses must not repeat a class" }).optional(),
|
|
9890
9890
|
/**
|
|
9891
|
-
*
|
|
9892
|
-
*
|
|
9891
|
+
* The LINKED devices whose RISING EDGE opens a window. Absent = the source
|
|
9892
|
+
* is not listened to; an empty array is rejected for the same reason as
|
|
9893
9893
|
* `objectClasses`.
|
|
9894
9894
|
*
|
|
9895
|
-
*
|
|
9896
|
-
*
|
|
9897
|
-
*
|
|
9898
|
-
*
|
|
9899
|
-
* device (D12) —
|
|
9895
|
+
* These are SOURCE device ids, not cameras: the band names them, so the
|
|
9896
|
+
* hot path (`DeviceStateChanged`, at bus rate across the whole fleet)
|
|
9897
|
+
* does no RPC. The OFFER from which the operator picks them is another question, and
|
|
9898
|
+
* is resolved with `deviceManager.getLinkedDevices` + `getBindingsBatch` per
|
|
9899
|
+
* device (D12) — never a global list of caps.
|
|
9900
9900
|
*
|
|
9901
|
-
*
|
|
9902
|
-
* `SOURCE_CAP_ACTIVE_FIELD` (`catalogs/sensor-active-state.ts`)
|
|
9903
|
-
*
|
|
9904
|
-
*
|
|
9905
|
-
*
|
|
9901
|
+
* What "high" means depends on the device TYPE and is not decided here:
|
|
9902
|
+
* `SOURCE_CAP_ACTIVE_FIELD` (`catalogs/sensor-active-state.ts`) is THE table,
|
|
9903
|
+
* the same one as the composite doorbell (D671). And it is the EDGE, not
|
|
9904
|
+
* the level: a contact found already open at runner restart does not
|
|
9905
|
+
* record.
|
|
9906
9906
|
*/
|
|
9907
9907
|
sensorDeviceIds: array(number().int().positive()).min(1).max(16).refine(noDuplicates, { message: "sensorDeviceIds must not repeat a device" }).optional()
|
|
9908
9908
|
});
|
|
@@ -11076,7 +11076,7 @@ var DecoderSessionConfigSchema = object({
|
|
|
11076
11076
|
* - **VALUE** — at which level, for which scope, until when. That stays ONE
|
|
11077
11077
|
* thing: the logging settings document on the `system` cap. Two authorities
|
|
11078
11078
|
* over the values is the exact defect
|
|
11079
|
-
* `docs/design/plans/2026-08-26-
|
|
11079
|
+
* `docs/design/plans/2026-08-26-per-component-logging.md` was written to
|
|
11080
11080
|
* remove; re-introducing it from the cure side would be grotesque.
|
|
11081
11081
|
*
|
|
11082
11082
|
* Nothing in this file reads a clock, an env var or a store. The registry is
|
|
@@ -14799,7 +14799,7 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
14799
14799
|
*
|
|
14800
14800
|
* ⚠ An earlier version of this comment blamed Zod stripping, and that
|
|
14801
14801
|
* was wrong — corrected 2026-08-26 after the hop map
|
|
14802
|
-
* (`docs/design/2026-08-26-
|
|
14802
|
+
* (`docs/design/2026-08-26-topic-hop-map.md`) traced the path.
|
|
14803
14803
|
* There is **no Zod parse at all** between the door and the engine: the
|
|
14804
14804
|
* dispatcher forwards the payload verbatim and UDS carries it whole. A
|
|
14805
14805
|
* field declared here reaches `SqliteSettingsBackend` either way.
|
|
@@ -16879,7 +16879,7 @@ var embeddingEncoderCapability = {
|
|
|
16879
16879
|
* per-device window, `KeyFrameCaptureLog`, `bumpCropMetric`. Every one of them
|
|
16880
16880
|
* ends in a log line, and a log line is the thing the operator asked to stop
|
|
16881
16881
|
* needing: *"possiamo armare questi errori intanto? Così al prossimo giro
|
|
16882
|
-
* ricontrolliamo tutti questi punti"
|
|
16882
|
+
* ricontrolliamo tutti questi punti"* [can we instrument these errors in the meantime? That way next round we recheck all these points]. Reading them meant grepping Loki and
|
|
16883
16883
|
* hand-correlating timestamps, which is how a 22% thumbnail gap and a 3-hour
|
|
16884
16884
|
* media blackout were both diagnosed. The counters stay; this is where they can
|
|
16885
16885
|
* be READ.
|
|
@@ -23508,14 +23508,14 @@ var TrackSchema = object({
|
|
|
23508
23508
|
* `derive-returned-null tile=standin`,
|
|
23509
23509
|
* `native-tile tile=native no-key-frame-at-close`, …) written at close and
|
|
23510
23510
|
* CLEARED by the late-keyFrame upgrade when a native tile lands after all.
|
|
23511
|
-
* The operator-facing answer to "perché manca l'immagine?" on a track whose
|
|
23511
|
+
* The operator-facing answer to "perché manca l'immagine?" [why is the image missing?] on a track whose
|
|
23512
23512
|
* tile is a face/plate stand-in, a raster crop, or an icon.
|
|
23513
23513
|
*
|
|
23514
23514
|
* **`no-key-frame-at-close` (D400).** The line used to be written ONLY when
|
|
23515
23515
|
* the TILE ranked below native, so a track whose thumbnail landed natively
|
|
23516
23516
|
* while its key frame missed carried no reason at all — three of the four
|
|
23517
23517
|
* `MISSING_KEYFRAME` tracks in the 2026-09-07 operator audit were exactly
|
|
23518
|
-
* that shape, and their "niente ultimo" had no cause anywhere on the row.
|
|
23518
|
+
* that shape, and their "niente ultimo" [no last frame] had no cause anywhere on the row.
|
|
23519
23519
|
* The key frame is the head of a cascade (`keyFrame ⇒ keyFrameSmall ⇒ the
|
|
23520
23520
|
* lastFrame copy source`), so its absence is now on this line whatever the
|
|
23521
23521
|
* tile ended up being.
|
|
@@ -23602,7 +23602,7 @@ var MotionEventSchema = object({
|
|
|
23602
23602
|
/**
|
|
23603
23603
|
* Ms offsets from `timestamp` (the episode's own first rising edge, so the
|
|
23604
23604
|
* first entry is always `0`) of every genuine off→on transition the
|
|
23605
|
-
* episode saw — "ogni evento on si deve salvare" (D475). NOT one entry per
|
|
23605
|
+
* episode saw — "ogni evento on si deve salvare" [every ON event must be saved] (D475). NOT one entry per
|
|
23606
23606
|
* push: a firmware source that keepalives at ~1 Hz for the whole burst
|
|
23607
23607
|
* (Reolink, Hikvision) produces exactly one edge; a source that reports an
|
|
23608
23608
|
* explicit `false` mid-episode and then resumes before the quiet window
|
|
@@ -29659,7 +29659,7 @@ var ClipPlaybackSchema = object({
|
|
|
29659
29659
|
* **One authorised yes is one wake.** `next-natural` — take the clip the next
|
|
29660
29660
|
* time the camera is awake for its own reasons — is deliberately not a member:
|
|
29661
29661
|
* it was proposed, it is free on the battery, and the operator declined it on
|
|
29662
|
-
* 2026-09-20 (*"Quando un export viene richiesto si sveglia la camera."
|
|
29662
|
+
* 2026-09-20 (*"Quando un export viene richiesto si sveglia la camera."* [When an export is requested the camera wakes up],
|
|
29663
29663
|
* D558 "Considered and not taken").
|
|
29664
29664
|
*/
|
|
29665
29665
|
var ClipWakeSchema = _enum(["authorised"]);
|
|
@@ -29920,7 +29920,7 @@ DeviceType.Camera, method(object({
|
|
|
29920
29920
|
* It replaced `sources?: string[]`, a VIEW filter over source ids that
|
|
29921
29921
|
* assumed the answer was a fan-out over everything a camera has. The
|
|
29922
29922
|
* operator settled otherwise on 2026-09-20 — *"l'utilizzatore è uno
|
|
29923
|
-
* solo"* — so the list is asked of one provider at a time and there is
|
|
29923
|
+
* solo"* [there is only one user] — so the list is asked of one provider at a time and there is
|
|
29924
29924
|
* nothing to filter out of it.
|
|
29925
29925
|
*/
|
|
29926
29926
|
provider: string().min(1)
|
|
@@ -34814,7 +34814,7 @@ authKey: string().optional() }), object({
|
|
|
34814
34814
|
*/
|
|
34815
34815
|
/**
|
|
34816
34816
|
* How long after a camera's last rising edge `pipeline-analytics` closes the
|
|
34817
|
-
* motion EPISODE row it kept open for it (D475) — "il delay della cap", in
|
|
34817
|
+
* motion EPISODE row it kept open for it (D475) — "il delay della cap" [the cap's delay], in
|
|
34818
34818
|
* the operator's words. One authority for the whole system: the writer of a
|
|
34819
34819
|
* `Camera` device's slice (the orchestrator, D696) writes this SAME constant
|
|
34820
34820
|
* in `autoClearAfterMs` while `detected: true` (never a camera's own clock —
|
|
@@ -38054,7 +38054,7 @@ var ReadGopBytesResultSchema = object({
|
|
|
38054
38054
|
/**
|
|
38055
38055
|
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
38056
38056
|
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
38057
|
-
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-
|
|
38057
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-clip-replay-on-pipeline.md`):
|
|
38058
38058
|
* a replay needs several seconds of native pixels, not one frame.
|
|
38059
38059
|
*
|
|
38060
38060
|
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
@@ -55163,7 +55163,7 @@ var PreviewTextField = string().max(200);
|
|
|
55163
55163
|
* Whether the notification's preview is a STILL or a short animation.
|
|
55164
55164
|
*
|
|
55165
55165
|
* The operator's ask, verbatim: *"inviato come gif o video (come per le altre
|
|
55166
|
-
* rule)"* — the other rules already offer an animated preview, and a ten-hour
|
|
55166
|
+
* rule)"* [sent as a gif or video (as for the other rules)] — the other rules already offer an animated preview, and a ten-hour
|
|
55167
55167
|
* night reads better as three seconds of motion than as one frame of it. Both
|
|
55168
55168
|
* modes get the SAME treatment (blurred frame, large centred title); `'gif'`
|
|
55169
55169
|
* simply applies it to a dozen frames sampled across the render and assembles
|
|
@@ -7646,7 +7646,7 @@ function errMsg(err) {
|
|
|
7646
7646
|
return String(err);
|
|
7647
7647
|
}
|
|
7648
7648
|
//#endregion
|
|
7649
|
-
//#region ../types/dist/composition-
|
|
7649
|
+
//#region ../types/dist/composition-D7ULvLdD.mjs
|
|
7650
7650
|
/**
|
|
7651
7651
|
* Deterministic SHA-256 hash of an arbitrary serialisable value. The
|
|
7652
7652
|
* canonical form sorts object keys alphabetically at every depth so two
|
|
@@ -7731,20 +7731,20 @@ function portable(target) {
|
|
|
7731
7731
|
}
|
|
7732
7732
|
portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64");
|
|
7733
7733
|
/**
|
|
7734
|
-
*
|
|
7735
|
-
*
|
|
7734
|
+
* THE table "which boolean of this device type counts as HIGH", and the
|
|
7735
|
+
* pure evaluator of its EDGE.
|
|
7736
7736
|
*
|
|
7737
|
-
*
|
|
7738
|
-
*
|
|
7739
|
-
*
|
|
7740
|
-
*
|
|
7741
|
-
*
|
|
7742
|
-
*
|
|
7737
|
+
* ONE table for everyone who asks "is this device HIGH?": the
|
|
7738
|
+
* recorder's `RecordingTriggers.sensorDeviceIds` trigger, the post-analysis
|
|
7739
|
+
* sensor markers, the orchestrator's camera-sensors bridge and
|
|
7740
|
+
* the sources of a composite doorbell (`doorbellFeatureSources`, D671).
|
|
7741
|
+
* A second copy would diverge at the first cap added, and the symptom — "the
|
|
7742
|
+
* sensor rings the doorbell but does not record" — is exactly D62.
|
|
7743
7743
|
*
|
|
7744
|
-
* ⚠
|
|
7745
|
-
*
|
|
7746
|
-
*
|
|
7747
|
-
*
|
|
7744
|
+
* ⚠ NOT `DEVICE_STATE_READERS` (`catalogs/device-state-vocabulary.ts`), and the
|
|
7745
|
+
* two must not be unified: that one answers "what is the state WORD for a
|
|
7746
|
+
* rule" (and includes `presence`, `cover`, `alarm-panel`), this one "which
|
|
7747
|
+
* boolean's EDGE counts". Deliberately different vocabularies.
|
|
7748
7748
|
*/
|
|
7749
7749
|
/**
|
|
7750
7750
|
* Known binary / switch source caps → the boolean slice field whose
|
|
@@ -7836,17 +7836,17 @@ function evaluateSensorLevelEdge(input) {
|
|
|
7836
7836
|
};
|
|
7837
7837
|
}
|
|
7838
7838
|
/**
|
|
7839
|
-
*
|
|
7840
|
-
*
|
|
7839
|
+
* THE edge. Pure: no clock of its own, no memory — the caller
|
|
7840
|
+
* brings `prior`, `nowMs` and its own `startedAtMs`.
|
|
7841
7841
|
*
|
|
7842
|
-
*
|
|
7843
|
-
*
|
|
7844
|
-
* `startedAtMs` **
|
|
7845
|
-
*
|
|
7846
|
-
*
|
|
7847
|
-
*
|
|
7848
|
-
*
|
|
7849
|
-
*
|
|
7842
|
+
* The case of the FIRST slice already active is treated explicitly and counts as an
|
|
7843
|
+
* edge only if the UPSTREAM timestamp of the transition is later than
|
|
7844
|
+
* `startedAtMs` **and** within `firstSightingFreshnessMs`. Both halves
|
|
7845
|
+
* are needed: freshness alone would fire on a boot-time hydration of a
|
|
7846
|
+
* state flipped a few seconds before the restart, and "after we started"
|
|
7847
|
+
* alone would fire, on a long-lived process, for a source
|
|
7848
|
+
* adopted today whose state changed yesterday. The ambiguous case ERRS TOWARD
|
|
7849
|
+
* SILENCE and declares it (`baseline-seeded-stale-active`).
|
|
7850
7850
|
*/
|
|
7851
7851
|
function evaluateSensorEdge(input) {
|
|
7852
7852
|
const value = sliceActiveValue(input.capName, input.slice);
|
|
@@ -9746,22 +9746,22 @@ var CLASS_MAP_MACRO_TARGETS = [
|
|
|
9746
9746
|
"package"
|
|
9747
9747
|
];
|
|
9748
9748
|
/**
|
|
9749
|
-
*
|
|
9750
|
-
*
|
|
9749
|
+
* The FIRST-LEVEL macro classes: those an object detector emits and that
|
|
9750
|
+
* an operator can select.
|
|
9751
9751
|
*
|
|
9752
|
-
*
|
|
9752
|
+
* They are the three offered by the `object-detection` step
|
|
9753
9753
|
* (`addon-pipeline/src/detection-pipeline/registry/step-definitions.ts`,
|
|
9754
|
-
* `enabledMacroClasses`). `package`
|
|
9755
|
-
* `MACRO_LABELS` —
|
|
9756
|
-
* `package-detection`,
|
|
9757
|
-
*
|
|
9754
|
+
* `enabledMacroClasses`). `package` is in {@link CLASS_MAP_MACRO_TARGETS} and in
|
|
9755
|
+
* `MACRO_LABELS` — it is a true macro — but NOT here: it belongs to the step
|
|
9756
|
+
* `package-detection`, whose enablement is driven by zones, and offering the
|
|
9757
|
+
* same word twice has already made an operator turn on the COCO proxy
|
|
9758
9758
|
* (suitcase/backpack/handbag) lasciando spento il detector dedicato.
|
|
9759
9759
|
*
|
|
9760
|
-
*
|
|
9761
|
-
*
|
|
9762
|
-
* (`types/detection.ts`);
|
|
9763
|
-
* (`RecordingTriggers.objectClasses`)
|
|
9764
|
-
*
|
|
9760
|
+
* ONE list. Before today the same three were hand-written in the step's offer
|
|
9761
|
+
* and a second time as the union `FirstLevelMacro`
|
|
9762
|
+
* (`types/detection.ts`); a third copy for the recording trigger
|
|
9763
|
+
* (`RecordingTriggers.objectClasses`) would have made the later divergence
|
|
9764
|
+
* invisible.
|
|
9765
9765
|
*/
|
|
9766
9766
|
var FIRST_LEVEL_MACRO_CLASSES = [
|
|
9767
9767
|
"person",
|
|
@@ -9826,17 +9826,17 @@ var RecordingStorageModeSchema = _enum([
|
|
|
9826
9826
|
"on-device-decision"
|
|
9827
9827
|
]);
|
|
9828
9828
|
/**
|
|
9829
|
-
*
|
|
9830
|
-
*
|
|
9829
|
+
* The macro classes that can open a recording window — the same
|
|
9830
|
+
* three offered by the `object-detection` step, from ONE list
|
|
9831
9831
|
* ({@link FIRST_LEVEL_MACRO_CLASSES}).
|
|
9832
9832
|
*/
|
|
9833
9833
|
var RecordingObjectTriggerClassSchema = _enum(FIRST_LEVEL_MACRO_CLASSES);
|
|
9834
9834
|
/**
|
|
9835
|
-
* True
|
|
9835
|
+
* True when `values` does not repeat an element.
|
|
9836
9836
|
*
|
|
9837
|
-
*
|
|
9838
|
-
*
|
|
9839
|
-
*
|
|
9837
|
+
* A duplicate is not harmless: every entry of `objectClasses` / `sensorDeviceIds`
|
|
9838
|
+
* becomes a SOURCE in `bandTriggerSources`, and the same source twice
|
|
9839
|
+
* would count its windows twice in `segmentMissedByMs`.
|
|
9840
9840
|
*/
|
|
9841
9841
|
var noDuplicates = (values) => new Set(values).size === values.length;
|
|
9842
9842
|
/** Which detectors trigger an `events`-mode band. */
|
|
@@ -9844,34 +9844,34 @@ var RecordingTriggersSchema = object({
|
|
|
9844
9844
|
motion: boolean().optional(),
|
|
9845
9845
|
audioThresholdDbfs: number().optional(),
|
|
9846
9846
|
/**
|
|
9847
|
-
*
|
|
9848
|
-
*
|
|
9849
|
-
*
|
|
9850
|
-
*
|
|
9847
|
+
* The macro classes whose detection opens a window. ABSENT = the source
|
|
9848
|
+
* is not listened to; an EMPTY array is rejected, because "events band, object
|
|
9849
|
+
* trigger on, no class" is the same shape "enabled and records
|
|
9850
|
+
* nothing, forever" that `eventsBandCanEverDemand` is written against.
|
|
9851
9851
|
*
|
|
9852
|
-
*
|
|
9853
|
-
*
|
|
9854
|
-
* `minConfidence<Macro>`
|
|
9855
|
-
* (`source: 'onboard'`)
|
|
9856
|
-
*
|
|
9852
|
+
* The signal read is ALREADY FILTERED: only `source: 'pipeline'` detections, i.e.
|
|
9853
|
+
* those that went through `enabledMacroClasses`, the
|
|
9854
|
+
* `minConfidence<Macro>` and the full-frame guard. The camera's onboard AI
|
|
9855
|
+
* (`source: 'onboard'`) goes through none of those gates and does NOT open
|
|
9856
|
+
* windows — see `recorder/object-trigger.ts`.
|
|
9857
9857
|
*/
|
|
9858
9858
|
objectClasses: array(RecordingObjectTriggerClassSchema).min(1).refine(noDuplicates, { message: "objectClasses must not repeat a class" }).optional(),
|
|
9859
9859
|
/**
|
|
9860
|
-
*
|
|
9861
|
-
*
|
|
9860
|
+
* The LINKED devices whose RISING EDGE opens a window. Absent = the source
|
|
9861
|
+
* is not listened to; an empty array is rejected for the same reason as
|
|
9862
9862
|
* `objectClasses`.
|
|
9863
9863
|
*
|
|
9864
|
-
*
|
|
9865
|
-
*
|
|
9866
|
-
*
|
|
9867
|
-
*
|
|
9868
|
-
* device (D12) —
|
|
9864
|
+
* These are SOURCE device ids, not cameras: the band names them, so the
|
|
9865
|
+
* hot path (`DeviceStateChanged`, at bus rate across the whole fleet)
|
|
9866
|
+
* does no RPC. The OFFER from which the operator picks them is another question, and
|
|
9867
|
+
* is resolved with `deviceManager.getLinkedDevices` + `getBindingsBatch` per
|
|
9868
|
+
* device (D12) — never a global list of caps.
|
|
9869
9869
|
*
|
|
9870
|
-
*
|
|
9871
|
-
* `SOURCE_CAP_ACTIVE_FIELD` (`catalogs/sensor-active-state.ts`)
|
|
9872
|
-
*
|
|
9873
|
-
*
|
|
9874
|
-
*
|
|
9870
|
+
* What "high" means depends on the device TYPE and is not decided here:
|
|
9871
|
+
* `SOURCE_CAP_ACTIVE_FIELD` (`catalogs/sensor-active-state.ts`) is THE table,
|
|
9872
|
+
* the same one as the composite doorbell (D671). And it is the EDGE, not
|
|
9873
|
+
* the level: a contact found already open at runner restart does not
|
|
9874
|
+
* record.
|
|
9875
9875
|
*/
|
|
9876
9876
|
sensorDeviceIds: array(number().int().positive()).min(1).max(16).refine(noDuplicates, { message: "sensorDeviceIds must not repeat a device" }).optional()
|
|
9877
9877
|
});
|
|
@@ -11045,7 +11045,7 @@ var DecoderSessionConfigSchema = object({
|
|
|
11045
11045
|
* - **VALUE** — at which level, for which scope, until when. That stays ONE
|
|
11046
11046
|
* thing: the logging settings document on the `system` cap. Two authorities
|
|
11047
11047
|
* over the values is the exact defect
|
|
11048
|
-
* `docs/design/plans/2026-08-26-
|
|
11048
|
+
* `docs/design/plans/2026-08-26-per-component-logging.md` was written to
|
|
11049
11049
|
* remove; re-introducing it from the cure side would be grotesque.
|
|
11050
11050
|
*
|
|
11051
11051
|
* Nothing in this file reads a clock, an env var or a store. The registry is
|
|
@@ -14768,7 +14768,7 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
14768
14768
|
*
|
|
14769
14769
|
* ⚠ An earlier version of this comment blamed Zod stripping, and that
|
|
14770
14770
|
* was wrong — corrected 2026-08-26 after the hop map
|
|
14771
|
-
* (`docs/design/2026-08-26-
|
|
14771
|
+
* (`docs/design/2026-08-26-topic-hop-map.md`) traced the path.
|
|
14772
14772
|
* There is **no Zod parse at all** between the door and the engine: the
|
|
14773
14773
|
* dispatcher forwards the payload verbatim and UDS carries it whole. A
|
|
14774
14774
|
* field declared here reaches `SqliteSettingsBackend` either way.
|
|
@@ -16848,7 +16848,7 @@ var embeddingEncoderCapability = {
|
|
|
16848
16848
|
* per-device window, `KeyFrameCaptureLog`, `bumpCropMetric`. Every one of them
|
|
16849
16849
|
* ends in a log line, and a log line is the thing the operator asked to stop
|
|
16850
16850
|
* needing: *"possiamo armare questi errori intanto? Così al prossimo giro
|
|
16851
|
-
* ricontrolliamo tutti questi punti"
|
|
16851
|
+
* ricontrolliamo tutti questi punti"* [can we instrument these errors in the meantime? That way next round we recheck all these points]. Reading them meant grepping Loki and
|
|
16852
16852
|
* hand-correlating timestamps, which is how a 22% thumbnail gap and a 3-hour
|
|
16853
16853
|
* media blackout were both diagnosed. The counters stay; this is where they can
|
|
16854
16854
|
* be READ.
|
|
@@ -23477,14 +23477,14 @@ var TrackSchema = object({
|
|
|
23477
23477
|
* `derive-returned-null tile=standin`,
|
|
23478
23478
|
* `native-tile tile=native no-key-frame-at-close`, …) written at close and
|
|
23479
23479
|
* CLEARED by the late-keyFrame upgrade when a native tile lands after all.
|
|
23480
|
-
* The operator-facing answer to "perché manca l'immagine?" on a track whose
|
|
23480
|
+
* The operator-facing answer to "perché manca l'immagine?" [why is the image missing?] on a track whose
|
|
23481
23481
|
* tile is a face/plate stand-in, a raster crop, or an icon.
|
|
23482
23482
|
*
|
|
23483
23483
|
* **`no-key-frame-at-close` (D400).** The line used to be written ONLY when
|
|
23484
23484
|
* the TILE ranked below native, so a track whose thumbnail landed natively
|
|
23485
23485
|
* while its key frame missed carried no reason at all — three of the four
|
|
23486
23486
|
* `MISSING_KEYFRAME` tracks in the 2026-09-07 operator audit were exactly
|
|
23487
|
-
* that shape, and their "niente ultimo" had no cause anywhere on the row.
|
|
23487
|
+
* that shape, and their "niente ultimo" [no last frame] had no cause anywhere on the row.
|
|
23488
23488
|
* The key frame is the head of a cascade (`keyFrame ⇒ keyFrameSmall ⇒ the
|
|
23489
23489
|
* lastFrame copy source`), so its absence is now on this line whatever the
|
|
23490
23490
|
* tile ended up being.
|
|
@@ -23571,7 +23571,7 @@ var MotionEventSchema = object({
|
|
|
23571
23571
|
/**
|
|
23572
23572
|
* Ms offsets from `timestamp` (the episode's own first rising edge, so the
|
|
23573
23573
|
* first entry is always `0`) of every genuine off→on transition the
|
|
23574
|
-
* episode saw — "ogni evento on si deve salvare" (D475). NOT one entry per
|
|
23574
|
+
* episode saw — "ogni evento on si deve salvare" [every ON event must be saved] (D475). NOT one entry per
|
|
23575
23575
|
* push: a firmware source that keepalives at ~1 Hz for the whole burst
|
|
23576
23576
|
* (Reolink, Hikvision) produces exactly one edge; a source that reports an
|
|
23577
23577
|
* explicit `false` mid-episode and then resumes before the quiet window
|
|
@@ -29628,7 +29628,7 @@ var ClipPlaybackSchema = object({
|
|
|
29628
29628
|
* **One authorised yes is one wake.** `next-natural` — take the clip the next
|
|
29629
29629
|
* time the camera is awake for its own reasons — is deliberately not a member:
|
|
29630
29630
|
* it was proposed, it is free on the battery, and the operator declined it on
|
|
29631
|
-
* 2026-09-20 (*"Quando un export viene richiesto si sveglia la camera."
|
|
29631
|
+
* 2026-09-20 (*"Quando un export viene richiesto si sveglia la camera."* [When an export is requested the camera wakes up],
|
|
29632
29632
|
* D558 "Considered and not taken").
|
|
29633
29633
|
*/
|
|
29634
29634
|
var ClipWakeSchema = _enum(["authorised"]);
|
|
@@ -29889,7 +29889,7 @@ DeviceType.Camera, method(object({
|
|
|
29889
29889
|
* It replaced `sources?: string[]`, a VIEW filter over source ids that
|
|
29890
29890
|
* assumed the answer was a fan-out over everything a camera has. The
|
|
29891
29891
|
* operator settled otherwise on 2026-09-20 — *"l'utilizzatore è uno
|
|
29892
|
-
* solo"* — so the list is asked of one provider at a time and there is
|
|
29892
|
+
* solo"* [there is only one user] — so the list is asked of one provider at a time and there is
|
|
29893
29893
|
* nothing to filter out of it.
|
|
29894
29894
|
*/
|
|
29895
29895
|
provider: string().min(1)
|
|
@@ -34783,7 +34783,7 @@ authKey: string().optional() }), object({
|
|
|
34783
34783
|
*/
|
|
34784
34784
|
/**
|
|
34785
34785
|
* How long after a camera's last rising edge `pipeline-analytics` closes the
|
|
34786
|
-
* motion EPISODE row it kept open for it (D475) — "il delay della cap", in
|
|
34786
|
+
* motion EPISODE row it kept open for it (D475) — "il delay della cap" [the cap's delay], in
|
|
34787
34787
|
* the operator's words. One authority for the whole system: the writer of a
|
|
34788
34788
|
* `Camera` device's slice (the orchestrator, D696) writes this SAME constant
|
|
34789
34789
|
* in `autoClearAfterMs` while `detected: true` (never a camera's own clock —
|
|
@@ -38023,7 +38023,7 @@ var ReadGopBytesResultSchema = object({
|
|
|
38023
38023
|
/**
|
|
38024
38024
|
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
38025
38025
|
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
38026
|
-
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-
|
|
38026
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-clip-replay-on-pipeline.md`):
|
|
38027
38027
|
* a replay needs several seconds of native pixels, not one frame.
|
|
38028
38028
|
*
|
|
38029
38029
|
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
@@ -55132,7 +55132,7 @@ var PreviewTextField = string().max(200);
|
|
|
55132
55132
|
* Whether the notification's preview is a STILL or a short animation.
|
|
55133
55133
|
*
|
|
55134
55134
|
* The operator's ask, verbatim: *"inviato come gif o video (come per le altre
|
|
55135
|
-
* rule)"* — the other rules already offer an animated preview, and a ten-hour
|
|
55135
|
+
* rule)"* [sent as a gif or video (as for the other rules)] — the other rules already offer an animated preview, and a ten-hour
|
|
55136
55136
|
* night reads better as three seconds of motion than as one frame of it. Both
|
|
55137
55137
|
* modes get the SAME treatment (blurred frame, large centred title); `'gif'`
|
|
55138
55138
|
* simply applies it to a dozen frames sampled across the render and assembles
|
|
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_clip_model_registry = require("../clip-model-registry-
|
|
5
|
+
const require_clip_model_registry = require("../clip-model-registry-DBUJMS9d.js");
|
|
6
6
|
let node_fs = require("node:fs");
|
|
7
7
|
node_fs = require_clip_model_registry.__toESM(node_fs);
|
|
8
8
|
let node_path = require("node:path");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { En as embeddingModelFailedError, Lr as normalizeNodeId, On as embeddingRequirementsFailedError, Rt as PoolMemoryWatchdog, Tn as embeddingEncoderCapability, Xn as parseProcStatus, a as CLIP_EMBEDDING_STEP_ID, ar as resolvePoolMemoryPolicy, c as resolveClusterModelPin, i as CLIP_TEXT_MODELS, kn as embeddingRequirementsUnavailableError, kr as BaseAddon, n as DEFAULT_CLIP_MODEL, r as CLIP_IMAGE_MODELS, t as BUILTIN_CLIP_MODELS } from "../clip-model-registry-
|
|
1
|
+
import { En as embeddingModelFailedError, Lr as normalizeNodeId, On as embeddingRequirementsFailedError, Rt as PoolMemoryWatchdog, Tn as embeddingEncoderCapability, Xn as parseProcStatus, a as CLIP_EMBEDDING_STEP_ID, ar as resolvePoolMemoryPolicy, c as resolveClusterModelPin, i as CLIP_TEXT_MODELS, kn as embeddingRequirementsUnavailableError, kr as BaseAddon, n as DEFAULT_CLIP_MODEL, r as CLIP_IMAGE_MODELS, t as BUILTIN_CLIP_MODELS } from "../clip-model-registry-ltmel0yE.mjs";
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
3
|
import * as fs from "node:fs";
|
|
4
4
|
import * as path$1 from "node:path";
|
|
@@ -18,7 +18,7 @@ var e = {
|
|
|
18
18
|
},
|
|
19
19
|
"@camstack/types": {
|
|
20
20
|
name: "@camstack/types",
|
|
21
|
-
version: "1.2.
|
|
21
|
+
version: "1.2.287",
|
|
22
22
|
scope: ["default"],
|
|
23
23
|
loaded: !1,
|
|
24
24
|
from: "addon_pipeline_analytics_widgets",
|
|
@@ -33,7 +33,7 @@ var e = {
|
|
|
33
33
|
},
|
|
34
34
|
"@camstack/ui-library": {
|
|
35
35
|
name: "@camstack/ui-library",
|
|
36
|
-
version: "1.2.
|
|
36
|
+
version: "1.2.221",
|
|
37
37
|
scope: ["default"],
|
|
38
38
|
loaded: !1,
|
|
39
39
|
from: "addon_pipeline_analytics_widgets",
|
|
@@ -36,7 +36,7 @@ async function r() {
|
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
38
|
"@camstack/types": {
|
|
39
|
-
version: "1.2.
|
|
39
|
+
version: "1.2.287",
|
|
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.
|
|
84
|
+
version: "1.2.221",
|
|
85
85
|
scope: "default",
|
|
86
86
|
shareConfig: {
|
|
87
87
|
singleton: !0,
|
|
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_clip_model_registry = require("../clip-model-registry-
|
|
5
|
+
const require_clip_model_registry = require("../clip-model-registry-DBUJMS9d.js");
|
|
6
6
|
let node_fs = require("node:fs");
|
|
7
7
|
node_fs = require_clip_model_registry.__toESM(node_fs, 1);
|
|
8
8
|
let node_path = require("node:path");
|
|
@@ -28489,7 +28489,7 @@ function buildSummaryOutboxInputs(input) {
|
|
|
28489
28489
|
*
|
|
28490
28490
|
* A digest is retrospective. The operator's own framing, verbatim: *"ideale
|
|
28491
28491
|
* sarebbe considerare solo tracce che vengono alla fine promosse a tracce, dato
|
|
28492
|
-
* che il summary non è atteso di essere realtime"* — the window is closed
|
|
28492
|
+
* che il summary non è atteso di essere realtime"* [ideally we would consider only tracks that are eventually promoted to tracks, given that the summary is not expected to be realtime] — the window is closed
|
|
28493
28493
|
* before this function is called, so the selection may wait for the pipeline's
|
|
28494
28494
|
* verdict instead of guessing at it.
|
|
28495
28495
|
*
|
|
@@ -38798,13 +38798,13 @@ var DEFAULT_MEDIA_LOCATION = "eventMedia";
|
|
|
38798
38798
|
*
|
|
38799
38799
|
* And why it is not the addon's data dir either: from 2026-08-31 to 2026-09-04
|
|
38800
38800
|
* the gallery was pinned to `<dataDir>/gallery` (873b73e2c). The operator's
|
|
38801
|
-
* rule of 2026-09-04 — *"le cartelle addons non devono trasportare nulla"* —
|
|
38801
|
+
* rule of 2026-09-04 — *"le cartelle addons non devono trasportare nulla"* [the addons folders must not carry anything] —
|
|
38802
38802
|
* reversed that: media in an addon dir is swept into every system backup,
|
|
38803
38803
|
* sits on the constrained appdata disk, and is invisible to every
|
|
38804
38804
|
* storage-location surface (occupancy, relocation, the locations UI).
|
|
38805
38805
|
*
|
|
38806
38806
|
* Since 2026-09-04 the gallery is the THIRD TENANT of the shared `artifacts`
|
|
38807
|
-
* class ("no nessuna eccezione. Rimane li in artifacts."): its bytes live at
|
|
38807
|
+
* class ("no nessuna eccezione. Rimane li in artifacts." [no, no exception. It stays there in artifacts.]): its bytes live at
|
|
38808
38808
|
* `<artifactsRoot>/gallery/…` ({@link GALLERY_TENANT_SUBPATH}). This ref is
|
|
38809
38809
|
* therefore no longer a declared storage class — it is the rows' PERMANENT
|
|
38810
38810
|
* `locationId` value, which the media-storage wiring maps to the tenant
|
|
@@ -40697,7 +40697,7 @@ async function publishPreview(ports, input) {
|
|
|
40697
40697
|
* The timelapse PREVIEW frame: one still out of the finished video, titled.
|
|
40698
40698
|
*
|
|
40699
40699
|
* The operator's ask, verbatim: the timelapse notification must carry a
|
|
40700
|
-
* preview image *"come per le altre rule"* — every detection rule's card shows
|
|
40700
|
+
* preview image *"come per le altre rule"* [as for the other rules] — every detection rule's card shows
|
|
40701
40701
|
* a picture, and a timelapse's showed nothing but text. A notification with no
|
|
40702
40702
|
* image is a notification you have to open to understand.
|
|
40703
40703
|
*
|
|
@@ -41446,8 +41446,8 @@ function centralSquareContainmentFraction(bbox, frame, layout = wideCentralSquar
|
|
|
41446
41446
|
* padding) wherever the subject still lands ≥ {@link CENTRAL_SQUARE_CONTAINMENT_MIN}
|
|
41447
41447
|
* inside the delivered central square. Only when it does NOT — the
|
|
41448
41448
|
* subject-on-the-side case, where the square view would show no subject at all
|
|
41449
|
-
* — fall back to the contained layout: the subject
|
|
41450
|
-
*
|
|
41449
|
+
* — fall back to the contained layout: the subject MUST be in the delivered
|
|
41450
|
+
* media (operator, 2026-08-21), and a padding band in the lateral third
|
|
41451
41451
|
* is the price of the only crop that still shows it.
|
|
41452
41452
|
*/
|
|
41453
41453
|
function deliveredWideCentralSquareLayout(bbox, frame) {
|
|
@@ -45364,7 +45364,7 @@ async function pruneV1DetectedSamples(deps, options) {
|
|
|
45364
45364
|
*
|
|
45365
45365
|
* The operator's decision of 2026-09-26: "cancelliamo e ripartiamo, tieni 3
|
|
45366
45366
|
* esemplari migliori per soggetto … discard tutto il resto anche quelle
|
|
45367
|
-
* pending". The gallery after D643 is two alignments mixed, 518 detected
|
|
45367
|
+
* pending" [let us delete and restart, keep the 3 best exemplars per subject … discard everything else, including the pending ones]. The gallery after D643 is two alignments mixed, 518 detected
|
|
45368
45368
|
* samples of which none can be re-derived; starting again from a small, clean
|
|
45369
45369
|
* core is cheaper than pruning it into shape.
|
|
45370
45370
|
*
|
|
@@ -51562,7 +51562,7 @@ function clipPenaltyScale(alongClip, acrossClip) {
|
|
|
51562
51562
|
* bottom, and it is meaningless for an upright person: a 4K frame is 3840 px
|
|
51563
51563
|
* wide, a person clipped at the head is ~400 px wide, so `spanX = 0.104` and a
|
|
51564
51564
|
* decapitated person lost **5.2 %** of its score — the operator's "questi tagli
|
|
51565
|
-
* hanno uno score troppo alto, non si vedono il dorso e testa", with the number
|
|
51565
|
+
* hanno uno score troppo alto, non si vedono il dorso e testa" [these crops have too high a score, the back and head are not visible], with the number
|
|
51566
51566
|
* attached. The frame's width is not a fact about the subject. The remnant's
|
|
51567
51567
|
* own aspect is: the same person now loses 47.9 %, and the wide-subject case the
|
|
51568
51568
|
* old shape existed for is penalised MORE than before (a 900×400 vehicle flush
|
|
@@ -52217,7 +52217,7 @@ function intersection(a, b) {
|
|
|
52217
52217
|
* keyFrame→thumbnail derive — framed a motorcycle with its rider's head cut
|
|
52218
52218
|
* off. Operator, device 617, tracks `7f50622b` and `9cbc4791`, three minutes
|
|
52219
52219
|
* apart: "motocicli e veicoli a due ruote devono includere il conducente nel
|
|
52220
|
-
* keyframe" (D407).
|
|
52220
|
+
* keyframe" [motorcycles and two-wheeled vehicles must include the rider in the keyframe] (D407).
|
|
52221
52221
|
*
|
|
52222
52222
|
* This is the ONE place the folded subject's rectangle is formed, and it is
|
|
52223
52223
|
* formed BEFORE the tracker — so no crop path derives a second rectangle
|
|
@@ -52816,7 +52816,7 @@ function ruleApplies(resolved, det, className, maskInfo, _zones, frameWidth, fra
|
|
|
52816
52816
|
*
|
|
52817
52817
|
* Arithmetic, not optimism. The alphabet is 32 characters, so an id is 50 bits
|
|
52818
52818
|
* and the space is 32^10 ≈ 1.13e15. The live table held 17 870 track rows under
|
|
52819
|
-
* a 7-day window (measured, `
|
|
52819
|
+
* a 7-day window (measured, `database-reduction-plan`), so call the population
|
|
52820
52820
|
* 20 000 ids that must not collide with each other. Birthday:
|
|
52821
52821
|
*
|
|
52822
52822
|
* p ≈ n² / 2N = 4e8 / 2.25e15 ≈ 1.8e-7 per retention window
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as NC_ALARM_SYSTEM_EVENT_KINDS, $n as readDeviceStateFrom, $r as union, $t as SetTrackPurityInputSchema, A as EMBEDDING_REQUIREMENTS_FAILED, An as encodeVectorBase64, Ar as CamProfileSchema, At as NcSnoozeSuppressedSchema, B as ListTrackRelationsInputSchema, Bn as isMediaOwnerType, Br as _enum, Bt as RECORDING_SOURCE_CAMSTACK_ADDON, C as DEFAULT_EVENT_COLOR, Cn as describeSystemEventDeliveryProblem, Cr as DEFAULT_FIRST_SIGHTING_FRESHNESS_MS, Ct as NcRulePatchSchema, D as DeclaredDevices, Dn as embeddingRefusalOf, Dr as DeviceType, Dt as NcScheduleSchema, E as DETECTION_PIPELINE_CAP_NAME, Er as isSourceCap, Et as NcRuleUpdateInputSchema, F as EXPORT_DENSE_MAX_RANGES, Fn as gifFromMp4Args, Fr as isDeviceScopedCap, Ft as NcTemplateVarDescriptorSchema, G as MAX_BIRTH_LATENCY_PROXY_MS, Gn as kebabToCamel, Gr as looseObject, Gt as SCENE_DEFAULT_ANCHOR_THRESHOLD, H as LockStateSchema, Hn as isSystemDelivery, Hr as boolean, Ht as RetrainStatusSchema, I as FIRST_LEVEL_MACRO_CLASSES, In as isAudioClassName, Ir as nodePin, It as OPS_LOG_DEFAULT_LIMIT, J as MOTION_CLOSE_AFTER_MS, Jn as notificationRulesCapability, Jr as partialRecord, Jt as SCENE_DEFAULT_QUIET_SECONDS, K as MAX_TRACK_PURITIES, Kn as mayWriteToLocation, Kr as number, Kt as SCENE_DEFAULT_CHECK_INTERVAL_SEC, L as FULL_IMAGE_BBOX, Ln as isDetectionMacroClass, Lt as OpsLogEntrySchema, M as EVENT_DENSITY_BATCH_MAX, Mn as faceGalleryCapability, Mr as customAction, Mt as NcTaxonomySchema, N as EVENT_KIND_BY_CAP, Nn as failureContributionCapability, Nr as defineCustomActions, Nt as NcTemplatePreviewInputSchema, O as DetectionSourceSchema, Or as errMsg, Ot as NcSnoozeInputSchema, P as EVENT_OWNER_TYPES, Pn as gifDeriveSpeed, Pr as hydrateSchema, Pt as NcTemplatePreviewSchema, Q as NC_ALARM_DELAY_MAX_SEC, Qn as plateGalleryCapability, Qr as tuple, Qt as SceneMonitorSchema, R as FailureCounters, Rn as isEventOwnerType, Rr as sleep$1, S as CoverStateSchema, Sn as deriveRecordingMode, Sr as zoneAnalyticsCapability, St as NcRuleInputSchema, T as DETECTION_MACRO_CLASSES, Tr as evaluateSensorEdge, Tt as NcRuleTargetSchema, U as MAX_ARCHIVED_DEBUG_NOTES, Un as isSystemEventSummaryRule, Ur as discriminatedUnion, Ut as SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX, V as ListTrackRelationsResultSchema, Vn as isScheduleActive, Vr as array, Vt as RebuildObjectEmbeddingsRefusalSchema, W as MAX_BIRTH_DECISION_RECORDS, Wn as isVectorIndexDimConflict, Wr as literal, Wt as SCENE_CONFIRM_DEFAULT_TIMEOUT_MS, X as MotionTriggeredBySchema, Xr as strictObject, Xt as SCENE_DIVERGED, Y as MediaFileKindEnum, Yn as occupancyScope, Yr as record, Yt as SCENE_DEFAULT_UNCOVERED_POLICY, Z as NC_ALARM_DELAY_FIELDS, Zn as pipelineAnalyticsCapability, Zr as string, Zt as SCENE_RESET_RECAPTURES, _ as BaseDevice, _n as audioMetricsCapability, _r as systemEventSummaryScheduleOf, _t as NcAlarmSensorsInputSchema, a as CLIP_EMBEDDING_STEP_ID, an as TimelapseRulePatchSchema, at as NC_CLIP_RETENTION_MAX_SEC, b as ClearTrackRelationInputSchema, bn as consumableLowPercentOf, br as templateVarsFor, bt as NcConditionDescriptorSchema, c as resolveClusterModelPin, cn as TrackRelationKindSchema, cr as ruleKindOf, ct as NC_CONSUMABLE_SYSTEM_EVENT_KINDS, d as APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT, dn as TrackSourceSchema, dr as servedTemplateVars, dt as NC_SNOOZE_MAX_MINUTES, ei as unknown, en as SetTrackPurityResultSchema, er as readMotionTriggeredBy, et as NC_ALARM_TRIGGERED_MAX_SEC, f as ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT, fn as addonWidgetsSourceCapability, fr as storageOccupancyCapability, ft as NC_SYSTEM_EVENT_KIND_GROUP_SPECS, g as BIRTH_DECISION_DEFAULT_LIMIT, gn as assertTimelapseCadences, gr as systemEventFilterApplies, gt as NcAlarmConfigSchema, h as ArchivedDebugNoteSchema, hn as applyNonBlockingEdit, hr as systemEventFamilyProblems, ht as NC_TEMPLATE_VARS, in as TimelapseRuleInputSchema, ir as resolveModeDelays, it as NC_CLIP_PRE_ROLL_DEFAULT_SEC, j as EMBEDDING_REQUIREMENTS_UNAVAILABLE, jn as evictionPolicyOfLocation, jr as createEvent, jt as NcSystemEventKindSchema, k as EMBEDDING_MODEL_FAILED, kr as BaseAddon, kt as NcSnoozeSchema, l as APPEARANCE_BIN_COUNT, ln as TrackRelationSchema, lr as sceneMonitorCapability, lt as NC_DEFAULT_SNOOZE_MINUTES, m as AlarmArmModeSchema, mn as applyModeDelaysEdits, mr as systemEventDeliveryProblems, mt as NC_TAXONOMY, nn as TIMELAPSE_DENSE_FLOOR_SEC, nr as resolveClipSearchMinScore, nt as NC_AUDIO_CONFIRM_WINDOW_SEC_DEFAULT, o as FACE_EMBEDDING_STEP_ID, on as TimelapseRuleSchema, or as ruleBelongsToAlarm$1, ot as NC_CONDITION_CATALOG, p as AUDIO_MACRO_LABELS, pn as alarmPanelCapability, pr as subKindsOf, pt as NC_TANK_SYSTEM_EVENT_KINDS, q as MAX_TRACK_RELATIONS, qn as memoizePinnedFfmpeg, qr as object, qt as SCENE_DEFAULT_OBSERVATION_SPACING_SEC, rn as TRACK_RELATIONS_DEFAULT_LIMIT, rr as resolveLocationMode, rt as NC_CLIP_POST_ROLL_DEFAULT_SEC, s as readClusterModelPinStrict, sn as TrackPuritySchema, sr as ruleDeviceCompatCapQueries, st as NC_CONSUMABLE_LOW_PERCENT_DEFAULT, t as BUILTIN_CLIP_MODELS, ti as EventCategory, tn as SetTrackRelationInputSchema, tr as readTimelapseGeneratedAt, tt as NC_AUDIO_CONFIRM_HITS_DEFAULT, u as APPEARANCE_BLOCKS, un as TrackSideSchema, ur as sensorRaisedOf, ut as NC_SENSOR_TRANSITION_KINDS, v as BirthDecisionRecordSchema, vn as audioModeOf, vr as systemEventSummarySplitOf, vt as NcAlarmSensorsSchema, w as DEFAULT_TIMELAPSE_PREVIEW_TEXT, wn as describeSystemEventFamilyProblem, wr as canonicalHash, wt as NcRuleSchema, x as ClearTrackRelationResultSchema, xn as cosineSimilarity$1, xr as vectorDimFromBase64, xt as NcConditionsSchema, y as COCO_TO_MACRO, yn as buildEventKindDescriptor, yr as templateCarriesSummary, yt as NcAlarmSettingsPatchSchema, z as LabelAttributionSchema, zn as isKnownTemplateVar, zr as ZodObject, zt as RECORDING_EXPORT_MAX_READ_BYTES } from "../clip-model-registry-
|
|
1
|
+
import { $ as NC_ALARM_SYSTEM_EVENT_KINDS, $n as readDeviceStateFrom, $r as union, $t as SetTrackPurityInputSchema, A as EMBEDDING_REQUIREMENTS_FAILED, An as encodeVectorBase64, Ar as CamProfileSchema, At as NcSnoozeSuppressedSchema, B as ListTrackRelationsInputSchema, Bn as isMediaOwnerType, Br as _enum, Bt as RECORDING_SOURCE_CAMSTACK_ADDON, C as DEFAULT_EVENT_COLOR, Cn as describeSystemEventDeliveryProblem, Cr as DEFAULT_FIRST_SIGHTING_FRESHNESS_MS, Ct as NcRulePatchSchema, D as DeclaredDevices, Dn as embeddingRefusalOf, Dr as DeviceType, Dt as NcScheduleSchema, E as DETECTION_PIPELINE_CAP_NAME, Er as isSourceCap, Et as NcRuleUpdateInputSchema, F as EXPORT_DENSE_MAX_RANGES, Fn as gifFromMp4Args, Fr as isDeviceScopedCap, Ft as NcTemplateVarDescriptorSchema, G as MAX_BIRTH_LATENCY_PROXY_MS, Gn as kebabToCamel, Gr as looseObject, Gt as SCENE_DEFAULT_ANCHOR_THRESHOLD, H as LockStateSchema, Hn as isSystemDelivery, Hr as boolean, Ht as RetrainStatusSchema, I as FIRST_LEVEL_MACRO_CLASSES, In as isAudioClassName, Ir as nodePin, It as OPS_LOG_DEFAULT_LIMIT, J as MOTION_CLOSE_AFTER_MS, Jn as notificationRulesCapability, Jr as partialRecord, Jt as SCENE_DEFAULT_QUIET_SECONDS, K as MAX_TRACK_PURITIES, Kn as mayWriteToLocation, Kr as number, Kt as SCENE_DEFAULT_CHECK_INTERVAL_SEC, L as FULL_IMAGE_BBOX, Ln as isDetectionMacroClass, Lt as OpsLogEntrySchema, M as EVENT_DENSITY_BATCH_MAX, Mn as faceGalleryCapability, Mr as customAction, Mt as NcTaxonomySchema, N as EVENT_KIND_BY_CAP, Nn as failureContributionCapability, Nr as defineCustomActions, Nt as NcTemplatePreviewInputSchema, O as DetectionSourceSchema, Or as errMsg, Ot as NcSnoozeInputSchema, P as EVENT_OWNER_TYPES, Pn as gifDeriveSpeed, Pr as hydrateSchema, Pt as NcTemplatePreviewSchema, Q as NC_ALARM_DELAY_MAX_SEC, Qn as plateGalleryCapability, Qr as tuple, Qt as SceneMonitorSchema, R as FailureCounters, Rn as isEventOwnerType, Rr as sleep$1, S as CoverStateSchema, Sn as deriveRecordingMode, Sr as zoneAnalyticsCapability, St as NcRuleInputSchema, T as DETECTION_MACRO_CLASSES, Tr as evaluateSensorEdge, Tt as NcRuleTargetSchema, U as MAX_ARCHIVED_DEBUG_NOTES, Un as isSystemEventSummaryRule, Ur as discriminatedUnion, Ut as SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX, V as ListTrackRelationsResultSchema, Vn as isScheduleActive, Vr as array, Vt as RebuildObjectEmbeddingsRefusalSchema, W as MAX_BIRTH_DECISION_RECORDS, Wn as isVectorIndexDimConflict, Wr as literal, Wt as SCENE_CONFIRM_DEFAULT_TIMEOUT_MS, X as MotionTriggeredBySchema, Xr as strictObject, Xt as SCENE_DIVERGED, Y as MediaFileKindEnum, Yn as occupancyScope, Yr as record, Yt as SCENE_DEFAULT_UNCOVERED_POLICY, Z as NC_ALARM_DELAY_FIELDS, Zn as pipelineAnalyticsCapability, Zr as string, Zt as SCENE_RESET_RECAPTURES, _ as BaseDevice, _n as audioMetricsCapability, _r as systemEventSummaryScheduleOf, _t as NcAlarmSensorsInputSchema, a as CLIP_EMBEDDING_STEP_ID, an as TimelapseRulePatchSchema, at as NC_CLIP_RETENTION_MAX_SEC, b as ClearTrackRelationInputSchema, bn as consumableLowPercentOf, br as templateVarsFor, bt as NcConditionDescriptorSchema, c as resolveClusterModelPin, cn as TrackRelationKindSchema, cr as ruleKindOf, ct as NC_CONSUMABLE_SYSTEM_EVENT_KINDS, d as APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT, dn as TrackSourceSchema, dr as servedTemplateVars, dt as NC_SNOOZE_MAX_MINUTES, ei as unknown, en as SetTrackPurityResultSchema, er as readMotionTriggeredBy, et as NC_ALARM_TRIGGERED_MAX_SEC, f as ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT, fn as addonWidgetsSourceCapability, fr as storageOccupancyCapability, ft as NC_SYSTEM_EVENT_KIND_GROUP_SPECS, g as BIRTH_DECISION_DEFAULT_LIMIT, gn as assertTimelapseCadences, gr as systemEventFilterApplies, gt as NcAlarmConfigSchema, h as ArchivedDebugNoteSchema, hn as applyNonBlockingEdit, hr as systemEventFamilyProblems, ht as NC_TEMPLATE_VARS, in as TimelapseRuleInputSchema, ir as resolveModeDelays, it as NC_CLIP_PRE_ROLL_DEFAULT_SEC, j as EMBEDDING_REQUIREMENTS_UNAVAILABLE, jn as evictionPolicyOfLocation, jr as createEvent, jt as NcSystemEventKindSchema, k as EMBEDDING_MODEL_FAILED, kr as BaseAddon, kt as NcSnoozeSchema, l as APPEARANCE_BIN_COUNT, ln as TrackRelationSchema, lr as sceneMonitorCapability, lt as NC_DEFAULT_SNOOZE_MINUTES, m as AlarmArmModeSchema, mn as applyModeDelaysEdits, mr as systemEventDeliveryProblems, mt as NC_TAXONOMY, nn as TIMELAPSE_DENSE_FLOOR_SEC, nr as resolveClipSearchMinScore, nt as NC_AUDIO_CONFIRM_WINDOW_SEC_DEFAULT, o as FACE_EMBEDDING_STEP_ID, on as TimelapseRuleSchema, or as ruleBelongsToAlarm$1, ot as NC_CONDITION_CATALOG, p as AUDIO_MACRO_LABELS, pn as alarmPanelCapability, pr as subKindsOf, pt as NC_TANK_SYSTEM_EVENT_KINDS, q as MAX_TRACK_RELATIONS, qn as memoizePinnedFfmpeg, qr as object, qt as SCENE_DEFAULT_OBSERVATION_SPACING_SEC, rn as TRACK_RELATIONS_DEFAULT_LIMIT, rr as resolveLocationMode, rt as NC_CLIP_POST_ROLL_DEFAULT_SEC, s as readClusterModelPinStrict, sn as TrackPuritySchema, sr as ruleDeviceCompatCapQueries, st as NC_CONSUMABLE_LOW_PERCENT_DEFAULT, t as BUILTIN_CLIP_MODELS, ti as EventCategory, tn as SetTrackRelationInputSchema, tr as readTimelapseGeneratedAt, tt as NC_AUDIO_CONFIRM_HITS_DEFAULT, u as APPEARANCE_BLOCKS, un as TrackSideSchema, ur as sensorRaisedOf, ut as NC_SENSOR_TRANSITION_KINDS, v as BirthDecisionRecordSchema, vn as audioModeOf, vr as systemEventSummarySplitOf, vt as NcAlarmSensorsSchema, w as DEFAULT_TIMELAPSE_PREVIEW_TEXT, wn as describeSystemEventFamilyProblem, wr as canonicalHash, wt as NcRuleSchema, x as ClearTrackRelationResultSchema, xn as cosineSimilarity$1, xr as vectorDimFromBase64, xt as NcConditionsSchema, y as COCO_TO_MACRO, yn as buildEventKindDescriptor, yr as templateCarriesSummary, yt as NcAlarmSettingsPatchSchema, z as LabelAttributionSchema, zn as isKnownTemplateVar, zr as ZodObject, zt as RECORDING_EXPORT_MAX_READ_BYTES } from "../clip-model-registry-ltmel0yE.mjs";
|
|
2
2
|
import { t as __exportAll } from "../embedding-encoder/index.mjs";
|
|
3
3
|
import * as fs$1 from "node:fs";
|
|
4
4
|
import { createWriteStream, promises } from "node:fs";
|
|
@@ -28466,7 +28466,7 @@ function buildSummaryOutboxInputs(input) {
|
|
|
28466
28466
|
*
|
|
28467
28467
|
* A digest is retrospective. The operator's own framing, verbatim: *"ideale
|
|
28468
28468
|
* sarebbe considerare solo tracce che vengono alla fine promosse a tracce, dato
|
|
28469
|
-
* che il summary non è atteso di essere realtime"* — the window is closed
|
|
28469
|
+
* che il summary non è atteso di essere realtime"* [ideally we would consider only tracks that are eventually promoted to tracks, given that the summary is not expected to be realtime] — the window is closed
|
|
28470
28470
|
* before this function is called, so the selection may wait for the pipeline's
|
|
28471
28471
|
* verdict instead of guessing at it.
|
|
28472
28472
|
*
|
|
@@ -38775,13 +38775,13 @@ var DEFAULT_MEDIA_LOCATION = "eventMedia";
|
|
|
38775
38775
|
*
|
|
38776
38776
|
* And why it is not the addon's data dir either: from 2026-08-31 to 2026-09-04
|
|
38777
38777
|
* the gallery was pinned to `<dataDir>/gallery` (873b73e2c). The operator's
|
|
38778
|
-
* rule of 2026-09-04 — *"le cartelle addons non devono trasportare nulla"* —
|
|
38778
|
+
* rule of 2026-09-04 — *"le cartelle addons non devono trasportare nulla"* [the addons folders must not carry anything] —
|
|
38779
38779
|
* reversed that: media in an addon dir is swept into every system backup,
|
|
38780
38780
|
* sits on the constrained appdata disk, and is invisible to every
|
|
38781
38781
|
* storage-location surface (occupancy, relocation, the locations UI).
|
|
38782
38782
|
*
|
|
38783
38783
|
* Since 2026-09-04 the gallery is the THIRD TENANT of the shared `artifacts`
|
|
38784
|
-
* class ("no nessuna eccezione. Rimane li in artifacts."): its bytes live at
|
|
38784
|
+
* class ("no nessuna eccezione. Rimane li in artifacts." [no, no exception. It stays there in artifacts.]): its bytes live at
|
|
38785
38785
|
* `<artifactsRoot>/gallery/…` ({@link GALLERY_TENANT_SUBPATH}). This ref is
|
|
38786
38786
|
* therefore no longer a declared storage class — it is the rows' PERMANENT
|
|
38787
38787
|
* `locationId` value, which the media-storage wiring maps to the tenant
|
|
@@ -40674,7 +40674,7 @@ async function publishPreview(ports, input) {
|
|
|
40674
40674
|
* The timelapse PREVIEW frame: one still out of the finished video, titled.
|
|
40675
40675
|
*
|
|
40676
40676
|
* The operator's ask, verbatim: the timelapse notification must carry a
|
|
40677
|
-
* preview image *"come per le altre rule"* — every detection rule's card shows
|
|
40677
|
+
* preview image *"come per le altre rule"* [as for the other rules] — every detection rule's card shows
|
|
40678
40678
|
* a picture, and a timelapse's showed nothing but text. A notification with no
|
|
40679
40679
|
* image is a notification you have to open to understand.
|
|
40680
40680
|
*
|
|
@@ -41423,8 +41423,8 @@ function centralSquareContainmentFraction(bbox, frame, layout = wideCentralSquar
|
|
|
41423
41423
|
* padding) wherever the subject still lands ≥ {@link CENTRAL_SQUARE_CONTAINMENT_MIN}
|
|
41424
41424
|
* inside the delivered central square. Only when it does NOT — the
|
|
41425
41425
|
* subject-on-the-side case, where the square view would show no subject at all
|
|
41426
|
-
* — fall back to the contained layout: the subject
|
|
41427
|
-
*
|
|
41426
|
+
* — fall back to the contained layout: the subject MUST be in the delivered
|
|
41427
|
+
* media (operator, 2026-08-21), and a padding band in the lateral third
|
|
41428
41428
|
* is the price of the only crop that still shows it.
|
|
41429
41429
|
*/
|
|
41430
41430
|
function deliveredWideCentralSquareLayout(bbox, frame) {
|
|
@@ -45322,7 +45322,7 @@ async function pruneV1DetectedSamples(deps, options) {
|
|
|
45322
45322
|
*
|
|
45323
45323
|
* The operator's decision of 2026-09-26: "cancelliamo e ripartiamo, tieni 3
|
|
45324
45324
|
* esemplari migliori per soggetto … discard tutto il resto anche quelle
|
|
45325
|
-
* pending". The gallery after D643 is two alignments mixed, 518 detected
|
|
45325
|
+
* pending" [let us delete and restart, keep the 3 best exemplars per subject … discard everything else, including the pending ones]. The gallery after D643 is two alignments mixed, 518 detected
|
|
45326
45326
|
* samples of which none can be re-derived; starting again from a small, clean
|
|
45327
45327
|
* core is cheaper than pruning it into shape.
|
|
45328
45328
|
*
|
|
@@ -51518,7 +51518,7 @@ function clipPenaltyScale(alongClip, acrossClip) {
|
|
|
51518
51518
|
* bottom, and it is meaningless for an upright person: a 4K frame is 3840 px
|
|
51519
51519
|
* wide, a person clipped at the head is ~400 px wide, so `spanX = 0.104` and a
|
|
51520
51520
|
* decapitated person lost **5.2 %** of its score — the operator's "questi tagli
|
|
51521
|
-
* hanno uno score troppo alto, non si vedono il dorso e testa", with the number
|
|
51521
|
+
* hanno uno score troppo alto, non si vedono il dorso e testa" [these crops have too high a score, the back and head are not visible], with the number
|
|
51522
51522
|
* attached. The frame's width is not a fact about the subject. The remnant's
|
|
51523
51523
|
* own aspect is: the same person now loses 47.9 %, and the wide-subject case the
|
|
51524
51524
|
* old shape existed for is penalised MORE than before (a 900×400 vehicle flush
|
|
@@ -52173,7 +52173,7 @@ function intersection(a, b) {
|
|
|
52173
52173
|
* keyFrame→thumbnail derive — framed a motorcycle with its rider's head cut
|
|
52174
52174
|
* off. Operator, device 617, tracks `7f50622b` and `9cbc4791`, three minutes
|
|
52175
52175
|
* apart: "motocicli e veicoli a due ruote devono includere il conducente nel
|
|
52176
|
-
* keyframe" (D407).
|
|
52176
|
+
* keyframe" [motorcycles and two-wheeled vehicles must include the rider in the keyframe] (D407).
|
|
52177
52177
|
*
|
|
52178
52178
|
* This is the ONE place the folded subject's rectangle is formed, and it is
|
|
52179
52179
|
* formed BEFORE the tracker — so no crop path derives a second rectangle
|
|
@@ -52772,7 +52772,7 @@ function ruleApplies(resolved, det, className, maskInfo, _zones, frameWidth, fra
|
|
|
52772
52772
|
*
|
|
52773
52773
|
* Arithmetic, not optimism. The alphabet is 32 characters, so an id is 50 bits
|
|
52774
52774
|
* and the space is 32^10 ≈ 1.13e15. The live table held 17 870 track rows under
|
|
52775
|
-
* a 7-day window (measured, `
|
|
52775
|
+
* a 7-day window (measured, `database-reduction-plan`), so call the population
|
|
52776
52776
|
* 20 000 ids that must not collide with each other. Birthday:
|
|
52777
52777
|
*
|
|
52778
52778
|
* p ≈ n² / 2N = 4e8 / 2.25e15 ≈ 1.8e-7 per retention window
|
|
@@ -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_analytics_widgets-
|
|
33
|
+
return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-Bjj5m6Qi.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-post-analysis",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.313",
|
|
4
4
|
"description": "Post-Analysis bundle — enrichment, embedding-encoder, pipeline-analytics. Multi-entry npm package shipping addons that consume pipeline output.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|