@camstack/addon-post-analysis 1.2.93 → 1.2.94
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/{dist-DYoWeRRt.js → dist-BdojoP7i.js} +8 -0
- package/dist/{dist-3QRyOemL.mjs → dist-C-_TL-I1.mjs} +8 -0
- 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-C4-ljPpt.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-CeFPqm3h.mjs} +3 -3
- package/dist/pipeline-analytics/{hostInit-BoUejl7E.mjs → hostInit-BExsGl4h.mjs} +3 -3
- package/dist/pipeline-analytics/index.js +20 -2
- package/dist/pipeline-analytics/index.mjs +20 -2
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +1 -1
|
@@ -21525,6 +21525,14 @@ var ClipSchema = object({
|
|
|
21525
21525
|
endMs: number()
|
|
21526
21526
|
}),
|
|
21527
21527
|
/**
|
|
21528
|
+
* Distinct object classes attached to this visit (`person`, `car`, …),
|
|
21529
|
+
* dominant first, capped at {@link MAX_CLIP_LABELS}. The ribbon renders these
|
|
21530
|
+
* instead of the bare kind — "Object" tells the operator nothing a colour bar
|
|
21531
|
+
* did not. Absent (never empty) when the visit attached no classified object
|
|
21532
|
+
* event, so a motion/audio-only visit keeps its kind label.
|
|
21533
|
+
*/
|
|
21534
|
+
labels: array(string()).max(3).optional(),
|
|
21535
|
+
/**
|
|
21528
21536
|
* Lazy thumbnail URL, never inlined.
|
|
21529
21537
|
*
|
|
21530
21538
|
* Recording-derived clips (events-mode keep-window, and the prepared
|
|
@@ -21494,6 +21494,14 @@ var ClipSchema = object({
|
|
|
21494
21494
|
endMs: number()
|
|
21495
21495
|
}),
|
|
21496
21496
|
/**
|
|
21497
|
+
* Distinct object classes attached to this visit (`person`, `car`, …),
|
|
21498
|
+
* dominant first, capped at {@link MAX_CLIP_LABELS}. The ribbon renders these
|
|
21499
|
+
* instead of the bare kind — "Object" tells the operator nothing a colour bar
|
|
21500
|
+
* did not. Absent (never empty) when the visit attached no classified object
|
|
21501
|
+
* event, so a motion/audio-only visit keeps its kind label.
|
|
21502
|
+
*/
|
|
21503
|
+
labels: array(string()).max(3).optional(),
|
|
21504
|
+
/**
|
|
21497
21505
|
* Lazy thumbnail URL, never inlined.
|
|
21498
21506
|
*
|
|
21499
21507
|
* Recording-derived clips (events-mode keep-window, and the prepared
|
|
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_dist = require("../dist-
|
|
5
|
+
const require_dist = require("../dist-BdojoP7i.js");
|
|
6
6
|
let node_fs = require("node:fs");
|
|
7
7
|
let node_fs$1 = require_dist.__toESM(node_fs, 1);
|
|
8
8
|
node_fs = require_dist.__toESM(node_fs);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { O as PoolMemoryWatchdog, Q as embeddingEncoderCapability, dt as resolvePoolMemoryPolicy, ot as parseProcStatus, tt as hfModelUrl, yt as BaseAddon } from "../dist-
|
|
1
|
+
import { O as PoolMemoryWatchdog, Q as embeddingEncoderCapability, dt as resolvePoolMemoryPolicy, ot as parseProcStatus, tt as hfModelUrl, yt as BaseAddon } from "../dist-C-_TL-I1.mjs";
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
3
|
import * as fs from "node:fs";
|
|
4
4
|
import "node:fs";
|
|
@@ -3,7 +3,7 @@ import "./dist-CYZr2fwk.mjs";
|
|
|
3
3
|
var e = {
|
|
4
4
|
"@camstack/sdk": {
|
|
5
5
|
name: "@camstack/sdk",
|
|
6
|
-
version: "1.2.
|
|
6
|
+
version: "1.2.24",
|
|
7
7
|
scope: ["default"],
|
|
8
8
|
loaded: !1,
|
|
9
9
|
from: "addon_pipeline_analytics_widgets",
|
|
@@ -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.88",
|
|
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.60",
|
|
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.88",
|
|
40
40
|
scope: "default",
|
|
41
41
|
shareConfig: {
|
|
42
42
|
singleton: !0,
|
|
@@ -45,7 +45,7 @@ async function r() {
|
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
47
|
"@camstack/sdk": {
|
|
48
|
-
version: "1.2.
|
|
48
|
+
version: "1.2.24",
|
|
49
49
|
scope: "default",
|
|
50
50
|
shareConfig: {
|
|
51
51
|
singleton: !0,
|
|
@@ -81,7 +81,7 @@ async function r() {
|
|
|
81
81
|
}
|
|
82
82
|
},
|
|
83
83
|
"@camstack/ui-library": {
|
|
84
|
-
version: "1.2.
|
|
84
|
+
version: "1.2.60",
|
|
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_dist = require("../dist-
|
|
5
|
+
const require_dist = require("../dist-BdojoP7i.js");
|
|
6
6
|
let node_fs = require("node:fs");
|
|
7
7
|
node_fs = require_dist.__toESM(node_fs, 1);
|
|
8
8
|
let node_path = require("node:path");
|
|
@@ -30047,6 +30047,22 @@ function stillInstantMs(ranges) {
|
|
|
30047
30047
|
if (best === void 0) return void 0;
|
|
30048
30048
|
return Math.floor((best.startMs + best.endMs) / 2);
|
|
30049
30049
|
}
|
|
30050
|
+
/**
|
|
30051
|
+
* The distinct object classes attached to a visit, most frequent first,
|
|
30052
|
+
* capped at {@link MAX_CLIP_LABELS}. Empty when nothing classified overlapped
|
|
30053
|
+
* — the caller then omits the field so a motion/audio-only visit keeps its
|
|
30054
|
+
* kind label instead of carrying an empty array every consumer length-checks.
|
|
30055
|
+
*/
|
|
30056
|
+
function dominantLabels(attached) {
|
|
30057
|
+
const counts = /* @__PURE__ */ new Map();
|
|
30058
|
+
for (const a of attached) {
|
|
30059
|
+
if (a.kind !== "object") continue;
|
|
30060
|
+
const name = a.event.className;
|
|
30061
|
+
if (typeof name !== "string" || name.length === 0) continue;
|
|
30062
|
+
counts.set(name, (counts.get(name) ?? 0) + 1);
|
|
30063
|
+
}
|
|
30064
|
+
return [...counts.entries()].toSorted((x, y) => y[1] - x[1]).slice(0, 3).map(([name]) => name);
|
|
30065
|
+
}
|
|
30050
30066
|
function visitsToClips(visits, events, pad, vouched) {
|
|
30051
30067
|
const tagged = [
|
|
30052
30068
|
...events.object.map((event) => ({
|
|
@@ -30067,6 +30083,7 @@ function visitsToClips(visits, events, pad, vouched) {
|
|
|
30067
30083
|
const kind = dominantKind(attached);
|
|
30068
30084
|
const withThumb = attached.find((a) => a.kind === kind && a.event.mediaUrl && vouched.has(a.event.id)) ?? attached.find((a) => a.event.mediaUrl && vouched.has(a.event.id));
|
|
30069
30085
|
const stillAtMs = stillInstantMs(visit.ranges);
|
|
30086
|
+
const labels = dominantLabels(attached);
|
|
30070
30087
|
return {
|
|
30071
30088
|
id: `analytics:${visit.startMs}:${visit.endMs}:${VISIT_EVENT_ID}`,
|
|
30072
30089
|
source: "analytics",
|
|
@@ -30079,7 +30096,8 @@ function visitsToClips(visits, events, pad, vouched) {
|
|
|
30079
30096
|
...stillAtMs !== void 0 ? { stillAtMs } : {},
|
|
30080
30097
|
eventIds: attached.slice(0, 24).map((a) => a.event.id),
|
|
30081
30098
|
eventCount: attached.length,
|
|
30082
|
-
holes: [...visit.holes]
|
|
30099
|
+
holes: [...visit.holes],
|
|
30100
|
+
...labels.length > 0 ? { labels } : {}
|
|
30083
30101
|
};
|
|
30084
30102
|
}).toSorted((a, b) => b.timeRange.startMs - a.timeRange.startMs);
|
|
30085
30103
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as encodeVectorBase64, A as RetrainStatusSchema, At as literal, B as TrackSourceSchema, C as NcSnoozeSchema, Ct as isDeviceScopedCap, D as OpsLogEntrySchema, Dt as array, E as NcTaxonomySchema, Et as _enum, F as SceneMonitorSchema, Ft as string, G as audioMetricsCapability, H as addonWidgetsSourceCapability, I as TIMELAPSE_DENSE_FLOOR_SEC, It as unknown, J as cosineSimilarity$1, K as audioModeOf, L as TimelapseRuleInputSchema, Lt as EventCategory, M as SCENE_DEFAULT_ANCHOR_THRESHOLD, Mt as object, N as SCENE_DEFAULT_UNCOVERED_POLICY, Nt as partialRecord, Ot as boolean, P as SCENE_DIVERGED, Pt as record, R as TimelapseRulePatchSchema, S as NcSnoozeInputSchema, St as hydrateSchema, T as NcSystemEventKindSchema, Tt as sleep, U as alarmPanelCapability, V as VISIT_MERGE_GAP_MS, W as assertTimelapseCadences, X as defineCustomActions, Y as customAction, Z as deriveRecordingMode, _ as NcRuleInputSchema, _t as zoneAnalyticsCapability, at as notificationRulesCapability, b as NcRuleTargetSchema, bt as DeviceType, c as EVENT_PAD_MS, ct as plateGalleryCapability, d as NC_ALARM_SYSTEM_EVENT_KINDS, et as faceGalleryCapability, f as NC_CONDITION_CATALOG, ft as sceneMonitorCapability, g as NcConditionDescriptorSchema, gt as videoclipsCapability, h as NC_TAXONOMY, ht as vectorDimFromBase64, i as DETECTION_MACRO_CLASSES, it as kebabToCamel, jt as number, k as RECORDING_EXPORT_MAX_READ_BYTES, kt as discriminatedUnion, l as LabelAttributionSchema, lt as readDeviceStateFrom, mt as systemEventFilterApplies, n as DEFAULT_EVENT_COLOR, nt as isDetectionMacroClass, o as DeclaredDevices, p as NC_DEFAULT_SNOOZE_MINUTES, pt as subKindsOf, q as buildEventKindDescriptor, rt as isScheduleActive, s as EVENT_KIND_BY_CAP, st as pipelineAnalyticsCapability, t as BaseDevice, u as MACRO_LABELS, ut as readTimelapseGeneratedAt, v as NcRulePatchSchema, vt as errMsg, w as NcSnoozeSuppressedSchema, wt as nodePin, x as NcScheduleSchema, xt as createEvent, y as NcRuleSchema, yt as BaseAddon, z as TimelapseRuleSchema } from "../dist-
|
|
1
|
+
import { $ as encodeVectorBase64, A as RetrainStatusSchema, At as literal, B as TrackSourceSchema, C as NcSnoozeSchema, Ct as isDeviceScopedCap, D as OpsLogEntrySchema, Dt as array, E as NcTaxonomySchema, Et as _enum, F as SceneMonitorSchema, Ft as string, G as audioMetricsCapability, H as addonWidgetsSourceCapability, I as TIMELAPSE_DENSE_FLOOR_SEC, It as unknown, J as cosineSimilarity$1, K as audioModeOf, L as TimelapseRuleInputSchema, Lt as EventCategory, M as SCENE_DEFAULT_ANCHOR_THRESHOLD, Mt as object, N as SCENE_DEFAULT_UNCOVERED_POLICY, Nt as partialRecord, Ot as boolean, P as SCENE_DIVERGED, Pt as record, R as TimelapseRulePatchSchema, S as NcSnoozeInputSchema, St as hydrateSchema, T as NcSystemEventKindSchema, Tt as sleep, U as alarmPanelCapability, V as VISIT_MERGE_GAP_MS, W as assertTimelapseCadences, X as defineCustomActions, Y as customAction, Z as deriveRecordingMode, _ as NcRuleInputSchema, _t as zoneAnalyticsCapability, at as notificationRulesCapability, b as NcRuleTargetSchema, bt as DeviceType, c as EVENT_PAD_MS, ct as plateGalleryCapability, d as NC_ALARM_SYSTEM_EVENT_KINDS, et as faceGalleryCapability, f as NC_CONDITION_CATALOG, ft as sceneMonitorCapability, g as NcConditionDescriptorSchema, gt as videoclipsCapability, h as NC_TAXONOMY, ht as vectorDimFromBase64, i as DETECTION_MACRO_CLASSES, it as kebabToCamel, jt as number, k as RECORDING_EXPORT_MAX_READ_BYTES, kt as discriminatedUnion, l as LabelAttributionSchema, lt as readDeviceStateFrom, mt as systemEventFilterApplies, n as DEFAULT_EVENT_COLOR, nt as isDetectionMacroClass, o as DeclaredDevices, p as NC_DEFAULT_SNOOZE_MINUTES, pt as subKindsOf, q as buildEventKindDescriptor, rt as isScheduleActive, s as EVENT_KIND_BY_CAP, st as pipelineAnalyticsCapability, t as BaseDevice, u as MACRO_LABELS, ut as readTimelapseGeneratedAt, v as NcRulePatchSchema, vt as errMsg, w as NcSnoozeSuppressedSchema, wt as nodePin, x as NcScheduleSchema, xt as createEvent, y as NcRuleSchema, yt as BaseAddon, z as TimelapseRuleSchema } from "../dist-C-_TL-I1.mjs";
|
|
2
2
|
import { t as __exportAll } from "../embedding-encoder/index.mjs";
|
|
3
3
|
import * as fs from "node:fs";
|
|
4
4
|
import { promises } from "node:fs";
|
|
@@ -29988,6 +29988,22 @@ function stillInstantMs(ranges) {
|
|
|
29988
29988
|
if (best === void 0) return void 0;
|
|
29989
29989
|
return Math.floor((best.startMs + best.endMs) / 2);
|
|
29990
29990
|
}
|
|
29991
|
+
/**
|
|
29992
|
+
* The distinct object classes attached to a visit, most frequent first,
|
|
29993
|
+
* capped at {@link MAX_CLIP_LABELS}. Empty when nothing classified overlapped
|
|
29994
|
+
* — the caller then omits the field so a motion/audio-only visit keeps its
|
|
29995
|
+
* kind label instead of carrying an empty array every consumer length-checks.
|
|
29996
|
+
*/
|
|
29997
|
+
function dominantLabels(attached) {
|
|
29998
|
+
const counts = /* @__PURE__ */ new Map();
|
|
29999
|
+
for (const a of attached) {
|
|
30000
|
+
if (a.kind !== "object") continue;
|
|
30001
|
+
const name = a.event.className;
|
|
30002
|
+
if (typeof name !== "string" || name.length === 0) continue;
|
|
30003
|
+
counts.set(name, (counts.get(name) ?? 0) + 1);
|
|
30004
|
+
}
|
|
30005
|
+
return [...counts.entries()].toSorted((x, y) => y[1] - x[1]).slice(0, 3).map(([name]) => name);
|
|
30006
|
+
}
|
|
29991
30007
|
function visitsToClips(visits, events, pad, vouched) {
|
|
29992
30008
|
const tagged = [
|
|
29993
30009
|
...events.object.map((event) => ({
|
|
@@ -30008,6 +30024,7 @@ function visitsToClips(visits, events, pad, vouched) {
|
|
|
30008
30024
|
const kind = dominantKind(attached);
|
|
30009
30025
|
const withThumb = attached.find((a) => a.kind === kind && a.event.mediaUrl && vouched.has(a.event.id)) ?? attached.find((a) => a.event.mediaUrl && vouched.has(a.event.id));
|
|
30010
30026
|
const stillAtMs = stillInstantMs(visit.ranges);
|
|
30027
|
+
const labels = dominantLabels(attached);
|
|
30011
30028
|
return {
|
|
30012
30029
|
id: `analytics:${visit.startMs}:${visit.endMs}:${VISIT_EVENT_ID}`,
|
|
30013
30030
|
source: "analytics",
|
|
@@ -30020,7 +30037,8 @@ function visitsToClips(visits, events, pad, vouched) {
|
|
|
30020
30037
|
...stillAtMs !== void 0 ? { stillAtMs } : {},
|
|
30021
30038
|
eventIds: attached.slice(0, 24).map((a) => a.event.id),
|
|
30022
30039
|
eventCount: attached.length,
|
|
30023
|
-
holes: [...visit.holes]
|
|
30040
|
+
holes: [...visit.holes],
|
|
30041
|
+
...labels.length > 0 ? { labels } : {}
|
|
30024
30042
|
};
|
|
30025
30043
|
}).toSorted((a, b) => b.timeRange.startMs - a.timeRange.startMs);
|
|
30026
30044
|
}
|
|
@@ -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-CeFPqm3h.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.94",
|
|
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",
|