@camstack/addon-post-analysis 1.2.638 → 1.2.640

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 (15) hide show
  1. package/dist/{clip-model-registry-B-Dv5y3Z.mjs → clip-model-registry-B1HxbGuP.mjs} +120 -8
  2. package/dist/{clip-model-registry-DEcrrqRz.js → clip-model-registry-C8xdbChV.js} +120 -8
  3. package/dist/embedding-encoder/index.js +1 -1
  4. package/dist/embedding-encoder/index.mjs +1 -1
  5. package/dist/pipeline-analytics/_stub.js +2 -2
  6. package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-LOOCKNGE.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-CO5qrMxU.mjs} +2 -2
  7. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CENVyAAQ.mjs +26 -0
  8. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DIbQ2FJ4.mjs +26 -0
  9. package/dist/pipeline-analytics/{hostInit-C2kfB4nI.mjs → hostInit-BN2pgAbz.mjs} +2 -2
  10. package/dist/pipeline-analytics/index.js +216 -85
  11. package/dist/pipeline-analytics/index.mjs +216 -85
  12. package/dist/pipeline-analytics/remoteEntry.js +1 -1
  13. package/package.json +1 -1
  14. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D4TYbuPV.mjs +0 -26
  15. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DXlqUmY1.mjs +0 -26
@@ -1,4 +1,4 @@
1
- import { $ as MediaFileKindEnum, $i as CAP_ADVANCE_FIELDS, $n as cloneAlarmSettings, $r as paintHex, $t as OpsLogEntrySchema, A as DeclaredDevices, Aa as EventCategory, Ai as subKindsOf, An as TrackSideSchema, Ar as isAudioClassName, At as NcAlarmSensorsInputSchema, B as FULL_IMAGE_BBOX, Bi as templateCarriesSummary, Bn as applyModeDelaysEdits, Br as isRootSuppliableStepId, Bt as NcRuleUpdateInputSchema, C as ClearTrackRelationResultSchema, Ca as record, Ci as ruleKindOf, Cn as TimelapseRuleInputSchema, Cr as failureContributionCapability, Ct as NC_SNOOZE_MAX_MINUTES, D as DEFAULT_TIMELAPSE_PREVIEW_TEXT, Da as tuple, Di as servedTemplateVars, Dn as TrackPuritySchema, Dr as isAlertEpisodeOpen, Dt as NC_TEMPLATE_VARS, E as DEFAULT_EVENT_COLOR, Ea as templateLiteral, Ei as sensorRaisedOf, En as TrackPlacementSchema, Er as isAlarmControllableCap, Et as NC_TAXONOMY, F as EVENT_DENSITY_BATCH_MAX, Fi as systemEventDeliveryProblems, Fn as alarmPanelCapability, Fr as isEventOwnerType, Ft as NcRuleActionSchema, G as ListTrackRelationsResultSchema, Gi as zoneAnalyticsCapability, Gn as audioMetricsCapability, Gr as kebabToCamel, Gt as NcSnoozeSuppressedSchema, H as LABEL_SUPPLY_MACRO, Hi as vectorDimFromBase64, Hn as applySecureOnArmEdit, Hr as isSystemDelivery, Ht as NcSharedSequenceSchema, I as EVENT_KIND_BY_CAP, Ii as systemEventFamilyProblems, In as alertEpisodeId, Ir as isKnownTemplateVar, It as NcRuleInputSchema, J as MAX_BIRTH_DECISION_RECORDS, Ji as evaluateSensorEdge, Jn as buildSubjectPath, Jr as memoizePinnedFfmpeg, Jt as NcTaxonomySchema, K as LockStateSchema, Ki as DEFAULT_FIRST_SIGHTING_FRESHNESS_MS, Kn as audioModeOf, Kr as linkedStepOf, Kt as NcStateSummarySectionIdSchema, L as EVENT_OWNER_TYPES, Li as systemEventFilterApplies, Ln as alertEpisodeKind, Lr as isLabelSupplyStepId, Lt as NcRulePatchSchema, M as EMBEDDING_MODEL_FAILED, Mi as subjectPathSvgPoints, Mn as activateAlarmProfile, Mr as isDetectionMacroClass, Mt as NcAlarmSettingsPatchSchema, N as EMBEDDING_REQUIREMENTS_FAILED, Ni as summarizeReview, Nn as addonWidgetsSourceCapability, Nr as isDrawableSubjectPath, Nt as NcConditionDescriptorSchema, O as DETECTION_MACRO_CLASSES, Oa as union, Oi as startMoverUnderClearance, On as TrackRelationKindSchema, Or as isAlertEpisodeSeverity, Ot as NcAlarmConfigSchema, P as EMBEDDING_REQUIREMENTS_UNAVAILABLE, Pi as syncActiveAlarmProfileSettings, Pn as alarmDeviceSecureOnArm, Pr as isEventKindLabelKey, Pt as NcConditionsSchema, Q as MOTION_CLOSE_AFTER_MS, Qi as BaseAddon, Qn as classifyRetrainReview, Qr as occupancyScope, Qt as OPS_LOG_DEFAULT_LIMIT, R as EXPORT_DENSE_MAX_RANGES, Ri as systemEventSummaryScheduleOf, Rn as alertEpisodePayload, Rr as isMediaOwnerType, Rt as NcRuleSchema, S as ClearTrackRelationInputSchema, Sa as partialRecord, Si as ruleGroupingApplies, Sn as TRACK_RELATIONS_DEFAULT_LIMIT, Sr as faceGalleryCapability, St as NC_SENSOR_TRANSITION_KINDS, T as DEFAULT_DETAIL_CROP_CONVENTION, Ta as string, Ti as secureActuationFor, Tn as TimelapseRuleSchema, Tr as gifFromMp4Args, Tt as NC_SYSTEM_EVENT_KIND_GROUP_SPECS, U as LabelAttributionSchema, Ui as viewerLinkBaseOf, Un as armRemovalReconcile, Ur as isSystemEventSummaryRule, Ut as NcSnoozeInputSchema, V as FailureCounters, Vi as templateVarsFor, Vn as applyNonBlockingEdit, Vr as isScheduleActive, Vt as NcScheduleSchema, W as ListTrackRelationsInputSchema, Wi as withSystemEventClasses, Wn as assertTimelapseCadences, Wr as isVectorIndexDimConflict, Wt as NcSnoozeSchema, X as MAX_TRACK_PURITIES, Xi as DeviceType, Xn as bundledCamstack, Xr as normalizeNcMediaPolicy, Xt as NcTemplatePreviewSchema, Y as MAX_BIRTH_LATENCY_PROXY_MS, Yi as isSourceCap, Yn as buildViewerLink, Yr as ncMediaPolicyError, Yt as NcTemplatePreviewInputSchema, Z as MAX_TRACK_RELATIONS, Zi as errMsg, Zn as calendarEventLocalSpan, Zr as notificationRulesCapability, Zt as NcTemplateVarDescriptorSchema, _ as BIRTH_DECISION_DEFAULT_LIMIT, _a as discriminatedUnion, _i as retrainRevisionConflictMessage, _n as SceneMonitorSchema, _t as NC_CONSUMABLE_SYSTEM_EVENT_KINDS, a as CLIP_EMBEDDING_STEP_ID, aa as customAction, ai as plateGalleryCapability, an as RetrainDismissedSchema, ar as deleteAlarmProfile, at as NC_ALARM_NOTIFY_FIELDS, b as BucketAccumulator, ba as number, bi as ruleBelongsToAlarm$1, bn as SetTrackRelationInputSchema, br as eventKindLabel, bt as NC_GROUPING_MAX_SEC, c as readClusterModelPinStrict, ca as hydrateSchema, ci as readMotionTriggeredBy, cn as SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX, cr as deriveRecordingMode, ct as NC_AUDIO_CONFIRM_HITS_DEFAULT, d as APPEARANCE_BLOCKS, di as resolveClipSearchMinScore, dn as SCENE_DEFAULT_CHECK_INTERVAL_SEC, dr as deviceAttentionKind, dt as NC_CLIP_PRE_ROLL_DEFAULT_SEC, ea as CamProfileSchema, ei as paletteResultSchema, en as PackageLlmVerdictSchema, er as consumableFormOf, et as MotionTriggeredBySchema, f as APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT, fa as sleep$1, fi as resolveLocationMode, fn as SCENE_DEFAULT_OBSERVATION_SPACING_SEC, fr as deviceRemovalHookCapability, ft as NC_CLIP_RETENTION_MAX_SEC, g as ArchivedDebugNoteSchema, ga as boolean, gn as SCENE_RESET_RECAPTURES, gt as NC_CONSUMABLE_LOW_PERCENT_DEFAULT, h as AlarmArmModeSchema, ha as array, hi as resolveNcMediaImage, hn as SCENE_DIVERGED, hr as embeddingRefusalOf, ht as NC_CONFIRM_DEFAULT_TIMEOUT_MS, ia as createEvent, ii as pipelineAnalyticsCapability, in as RebuildObjectEmbeddingsRefusalSchema, ir as createAlarmProfile, it as NC_ALARM_DELAY_MAX_SEC, j as DetectionSourceSchema, ji as subjectPathSampleFromBox, jn as TrackSourceSchema, jr as isDefaultAlarmProfileId, jt as NcAlarmSensorsSchema, k as DETECTION_PIPELINE_CAP_NAME, ka as unknown, ki as storageOccupancyCapability, kn as TrackRelationSchema, kr as isAppLinkBase, kt as NcAlarmPostTriggeredActionSchema, l as resolveClusterModelPin, la as isDeviceScopedCap, li as readTimelapseGeneratedAt, ln as SCENE_CONFIRM_DEFAULT_TIMEOUT_MS, lr as describeSystemEventDeliveryProblem, lt as NC_AUDIO_CONFIRM_WINDOW_SEC_DEFAULT, m as AUDIO_MACRO_LABELS, ma as _enum, mi as resolveModeNotifyPolicy, mn as SCENE_DEFAULT_UNCOVERED_POLICY, mt as NC_CONFIRM_DEFAULT_MAX_IMAGE_PX, na as RECORD_MAX_DATA_BYTES, nn as RECORDING_EXPORT_MAX_READ_BYTES, nr as coreBlockIdFromAddonId, nt as NC_ALARM_DEFAULT_TRIGGERED_DURATION_SEC, o as CLUSTER_MODEL_OWNER_ADDON_ID, oa as defineCustomActions, oi as projectSubjectPath, on as RetrainOriginSchema, or as deriveDetailCropRect, ot as NC_ALARM_SYSTEM_EVENT_KINDS, p as ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT, pa as ZodObject, pi as resolveModeDelays, pn as SCENE_DEFAULT_QUIET_SECONDS, pt as NC_CONDITION_CATALOG, q as MAX_ARCHIVED_DEBUG_NOTES, qi as canonicalHash, qn as buildEventKindDescriptor, qr as mayWriteToLocation, qt as NcSystemEventKindSchema, ra as RECORD_QUERY_MAX, ri as pickFaceRescoreIntervalMinutes, rn as RECORDING_SOURCE_CAMSTACK_ADDON, rr as cosineSimilarity$1, rt as NC_ALARM_DELAY_FIELDS, s as FACE_EMBEDDING_STEP_ID, sa as defineRecordKinds, si as readDeviceStateFrom, sn as RetrainStatusSchema, sr as derivePostTriggeredAction, st as NC_ALARM_TRIGGERED_MAX_SEC, t as BUILTIN_CLIP_MODELS, ta as InvalidRecordError, ti as parseAlertEpisodePayload, tr as consumableLowPercentOf, tt as NC_ALARM_DEFAULT_PROFILE_ID, u as APPEARANCE_BIN_COUNT, ua as nodePin, ui as renameAlarmProfile, un as SCENE_DEFAULT_ANCHOR_THRESHOLD, ur as describeSystemEventFamilyProblem, ut as NC_CLIP_POST_ROLL_DEFAULT_SEC, v as BaseDevice, va as literal, vi as rootSupplyServes, vn as SetTrackPurityInputSchema, vr as encodeVectorBase64, vt as NC_DEFAULT_SNOOZE_MINUTES, w as CoverStateSchema, wa as strictObject, wi as sceneMonitorCapability, wn as TimelapseRulePatchSchema, wr as gifDeriveSpeed, wt as NC_STATE_SUMMARY_SECTION_IDS, x as COCO_TO_MACRO, xa as object, xi as ruleDeviceCompatCapQueries, xn as TIMELAPSE_DENSE_FLOOR_SEC, xr as evictionPolicyOfLocation, xt as NC_GROUPING_MIN_SEC, y as BirthDecisionRecordSchema, ya as looseObject, yi as ruleAutoTriggersAlarm, yn as SetTrackPurityResultSchema, yr as ensureAlarmProfiles, yt as NC_GROUPING_DEFAULT_SEC, z as FIRST_LEVEL_MACRO_CLASSES, zi as systemEventSummarySplitOf, zn as applyBlockingEdit, zr as isRetiredClearKey, zt as NcRuleTargetSchema } from "../clip-model-registry-B-Dv5y3Z.mjs";
1
+ import { $ as MediaFileKindEnum, $i as CAP_ADVANCE_FIELDS, $n as cloneAlarmSettings, $r as paintHex, $t as OpsLogEntrySchema, A as DeclaredDevices, Aa as EventCategory, Ai as subKindsOf, An as TrackSideSchema, Ar as isAudioClassName, At as NcAlarmSensorsInputSchema, B as FULL_IMAGE_BBOX, Bi as templateCarriesSummary, Bn as applyModeDelaysEdits, Br as isRootSuppliableStepId, Bt as NcRuleUpdateInputSchema, C as ClearTrackRelationResultSchema, Ca as record, Ci as ruleKindOf, Cn as TimelapseRuleInputSchema, Cr as failureContributionCapability, Ct as NC_SNOOZE_MAX_MINUTES, D as DEFAULT_TIMELAPSE_PREVIEW_TEXT, Da as tuple, Di as servedTemplateVars, Dn as TrackPuritySchema, Dr as isAlertEpisodeOpen, Dt as NC_TEMPLATE_VARS, E as DEFAULT_EVENT_COLOR, Ea as templateLiteral, Ei as sensorRaisedOf, En as TrackPlacementSchema, Er as isAlarmControllableCap, Et as NC_TAXONOMY, F as EVENT_DENSITY_BATCH_MAX, Fi as systemEventDeliveryProblems, Fn as alarmPanelCapability, Fr as isEventOwnerType, Ft as NcRuleActionSchema, G as ListTrackRelationsResultSchema, Gi as zoneAnalyticsCapability, Gn as audioMetricsCapability, Gr as kebabToCamel, Gt as NcSnoozeSuppressedSchema, H as LABEL_SUPPLY_MACRO, Hi as vectorDimFromBase64, Hn as applySecureOnArmEdit, Hr as isSystemDelivery, Ht as NcSharedSequenceSchema, I as EVENT_KIND_BY_CAP, Ii as systemEventFamilyProblems, In as alertEpisodeId, Ir as isKnownTemplateVar, It as NcRuleInputSchema, J as MAX_BIRTH_DECISION_RECORDS, Ji as evaluateSensorEdge, Jn as buildSubjectPath, Jr as memoizePinnedFfmpeg, Jt as NcTaxonomySchema, K as LockStateSchema, Ki as DEFAULT_FIRST_SIGHTING_FRESHNESS_MS, Kn as audioModeOf, Kr as linkedStepOf, Kt as NcStateSummarySectionIdSchema, L as EVENT_OWNER_TYPES, Li as systemEventFilterApplies, Ln as alertEpisodeKind, Lr as isLabelSupplyStepId, Lt as NcRulePatchSchema, M as EMBEDDING_MODEL_FAILED, Mi as subjectPathSvgPoints, Mn as activateAlarmProfile, Mr as isDetectionMacroClass, Mt as NcAlarmSettingsPatchSchema, N as EMBEDDING_REQUIREMENTS_FAILED, Ni as summarizeReview, Nn as addonWidgetsSourceCapability, Nr as isDrawableSubjectPath, Nt as NcConditionDescriptorSchema, O as DETECTION_MACRO_CLASSES, Oa as union, Oi as startMoverUnderClearance, On as TrackRelationKindSchema, Or as isAlertEpisodeSeverity, Ot as NcAlarmConfigSchema, P as EMBEDDING_REQUIREMENTS_UNAVAILABLE, Pi as syncActiveAlarmProfileSettings, Pn as alarmDeviceSecureOnArm, Pr as isEventKindLabelKey, Pt as NcConditionsSchema, Q as MOTION_CLOSE_AFTER_MS, Qi as BaseAddon, Qn as classifyRetrainReview, Qr as occupancyScope, Qt as OPS_LOG_DEFAULT_LIMIT, R as EXPORT_DENSE_MAX_RANGES, Ri as systemEventSummaryScheduleOf, Rn as alertEpisodePayload, Rr as isMediaOwnerType, Rt as NcRuleSchema, S as ClearTrackRelationInputSchema, Sa as partialRecord, Si as ruleGroupingApplies, Sn as TRACK_RELATIONS_DEFAULT_LIMIT, Sr as faceGalleryCapability, St as NC_SENSOR_TRANSITION_KINDS, T as DEFAULT_DETAIL_CROP_CONVENTION, Ta as string, Ti as secureActuationFor, Tn as TimelapseRuleSchema, Tr as gifFromMp4Args, Tt as NC_SYSTEM_EVENT_KIND_GROUP_SPECS, U as LabelAttributionSchema, Ui as viewerLinkBaseOf, Un as armRemovalReconcile, Ur as isSystemEventSummaryRule, Ut as NcSnoozeInputSchema, V as FailureCounters, Vi as templateVarsFor, Vn as applyNonBlockingEdit, Vr as isScheduleActive, Vt as NcScheduleSchema, W as ListTrackRelationsInputSchema, Wi as withSystemEventClasses, Wn as assertTimelapseCadences, Wr as isVectorIndexDimConflict, Wt as NcSnoozeSchema, X as MAX_TRACK_PURITIES, Xi as DeviceType, Xn as bundledCamstack, Xr as normalizeNcMediaPolicy, Xt as NcTemplatePreviewSchema, Y as MAX_BIRTH_LATENCY_PROXY_MS, Yi as isSourceCap, Yn as buildViewerLink, Yr as ncMediaPolicyError, Yt as NcTemplatePreviewInputSchema, Z as MAX_TRACK_RELATIONS, Zi as errMsg, Zn as calendarEventLocalSpan, Zr as notificationRulesCapability, Zt as NcTemplateVarDescriptorSchema, _ as BIRTH_DECISION_DEFAULT_LIMIT, _a as discriminatedUnion, _i as retrainRevisionConflictMessage, _n as SceneMonitorSchema, _t as NC_CONSUMABLE_SYSTEM_EVENT_KINDS, a as CLIP_EMBEDDING_STEP_ID, aa as customAction, ai as plateGalleryCapability, an as RetrainDismissedSchema, ar as deleteAlarmProfile, at as NC_ALARM_NOTIFY_FIELDS, b as BucketAccumulator, ba as number, bi as ruleBelongsToAlarm$1, bn as SetTrackRelationInputSchema, br as eventKindLabel, bt as NC_GROUPING_MAX_SEC, c as readClusterModelPinStrict, ca as hydrateSchema, ci as readMotionTriggeredBy, cn as SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX, cr as deriveRecordingMode, ct as NC_AUDIO_CONFIRM_HITS_DEFAULT, d as APPEARANCE_BLOCKS, di as resolveClipSearchMinScore, dn as SCENE_DEFAULT_CHECK_INTERVAL_SEC, dr as deviceAttentionKind, dt as NC_CLIP_PRE_ROLL_DEFAULT_SEC, ea as CamProfileSchema, ei as paletteResultSchema, en as PackageLlmVerdictSchema, er as consumableFormOf, et as MotionTriggeredBySchema, f as APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT, fa as sleep$1, fi as resolveLocationMode, fn as SCENE_DEFAULT_OBSERVATION_SPACING_SEC, fr as deviceRemovalHookCapability, ft as NC_CLIP_RETENTION_MAX_SEC, g as ArchivedDebugNoteSchema, ga as boolean, gn as SCENE_RESET_RECAPTURES, gt as NC_CONSUMABLE_LOW_PERCENT_DEFAULT, h as AlarmArmModeSchema, ha as array, hi as resolveNcMediaImage, hn as SCENE_DIVERGED, hr as embeddingRefusalOf, ht as NC_CONFIRM_DEFAULT_TIMEOUT_MS, ia as createEvent, ii as pipelineAnalyticsCapability, in as RebuildObjectEmbeddingsRefusalSchema, ir as createAlarmProfile, it as NC_ALARM_DELAY_MAX_SEC, j as DetectionSourceSchema, ji as subjectPathSampleFromBox, jn as TrackSourceSchema, jr as isDefaultAlarmProfileId, jt as NcAlarmSensorsSchema, k as DETECTION_PIPELINE_CAP_NAME, ka as unknown, ki as storageOccupancyCapability, kn as TrackRelationSchema, kr as isAppLinkBase, kt as NcAlarmPostTriggeredActionSchema, l as resolveClusterModelPin, la as isDeviceScopedCap, li as readTimelapseGeneratedAt, ln as SCENE_CONFIRM_DEFAULT_TIMEOUT_MS, lr as describeSystemEventDeliveryProblem, lt as NC_AUDIO_CONFIRM_WINDOW_SEC_DEFAULT, m as AUDIO_MACRO_LABELS, ma as _enum, mi as resolveModeNotifyPolicy, mn as SCENE_DEFAULT_UNCOVERED_POLICY, mt as NC_CONFIRM_DEFAULT_MAX_IMAGE_PX, na as RECORD_MAX_DATA_BYTES, nn as RECORDING_EXPORT_MAX_READ_BYTES, nr as coreBlockIdFromAddonId, nt as NC_ALARM_DEFAULT_TRIGGERED_DURATION_SEC, o as CLUSTER_MODEL_OWNER_ADDON_ID, oa as defineCustomActions, oi as projectSubjectPath, on as RetrainOriginSchema, or as deriveDetailCropRect, ot as NC_ALARM_SYSTEM_EVENT_KINDS, p as ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT, pa as ZodObject, pi as resolveModeDelays, pn as SCENE_DEFAULT_QUIET_SECONDS, pt as NC_CONDITION_CATALOG, q as MAX_ARCHIVED_DEBUG_NOTES, qi as canonicalHash, qn as buildEventKindDescriptor, qr as mayWriteToLocation, qt as NcSystemEventKindSchema, ra as RECORD_QUERY_MAX, ri as pickFaceRescoreIntervalMinutes, rn as RECORDING_SOURCE_CAMSTACK_ADDON, rr as cosineSimilarity$1, rt as NC_ALARM_DELAY_FIELDS, s as FACE_EMBEDDING_STEP_ID, sa as defineRecordKinds, si as readDeviceStateFrom, sn as RetrainStatusSchema, sr as derivePostTriggeredAction, st as NC_ALARM_TRIGGERED_MAX_SEC, t as BUILTIN_CLIP_MODELS, ta as InvalidRecordError, ti as parseAlertEpisodePayload, tr as consumableLowPercentOf, tt as NC_ALARM_DEFAULT_PROFILE_ID, u as APPEARANCE_BIN_COUNT, ua as nodePin, ui as renameAlarmProfile, un as SCENE_DEFAULT_ANCHOR_THRESHOLD, ur as describeSystemEventFamilyProblem, ut as NC_CLIP_POST_ROLL_DEFAULT_SEC, v as BaseDevice, va as literal, vi as rootSupplyServes, vn as SetTrackPurityInputSchema, vr as encodeVectorBase64, vt as NC_DEFAULT_SNOOZE_MINUTES, w as CoverStateSchema, wa as strictObject, wi as sceneMonitorCapability, wn as TimelapseRulePatchSchema, wr as gifDeriveSpeed, wt as NC_STATE_SUMMARY_SECTION_IDS, x as COCO_TO_MACRO, xa as object, xi as ruleDeviceCompatCapQueries, xn as TIMELAPSE_DENSE_FLOOR_SEC, xr as evictionPolicyOfLocation, xt as NC_GROUPING_MIN_SEC, y as BirthDecisionRecordSchema, ya as looseObject, yi as ruleAutoTriggersAlarm, yn as SetTrackPurityResultSchema, yr as ensureAlarmProfiles, yt as NC_GROUPING_DEFAULT_SEC, z as FIRST_LEVEL_MACRO_CLASSES, zi as systemEventSummarySplitOf, zn as applyBlockingEdit, zr as isRetiredClearKey, zt as NcRuleTargetSchema } from "../clip-model-registry-B1HxbGuP.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";
@@ -8987,6 +8987,7 @@ var en_default = {
8987
8987
  "system.device-battery-low.title": "Battery low — {{deviceName}}",
8988
8988
  "system.device-battery-low.body": "{{deviceName}} is down to {{percentage}}% battery",
8989
8989
  "system.device-battery-low.body.binary": "{{deviceName}} reports a low battery",
8990
+ "system.device-battery-low.body.unmeasured": "{{deviceName}} has a low battery",
8990
8991
  "system.device-battery-normal.title": "Battery back to normal — {{deviceName}}",
8991
8992
  "system.device-battery-normal.body": "{{deviceName}} is back to {{percentage}}% battery",
8992
8993
  "system.device-battery-normal.body.binary": "{{deviceName}} no longer reports a low battery",
@@ -9387,6 +9388,7 @@ var it_default = {
9387
9388
  "system.device-battery-low.title": "Batteria scarica — {{deviceName}}",
9388
9389
  "system.device-battery-low.body": "{{deviceName}} è al {{percentage}}% di batteria",
9389
9390
  "system.device-battery-low.body.binary": "{{deviceName}} segnala la batteria scarica",
9391
+ "system.device-battery-low.body.unmeasured": "{{deviceName}} ha la batteria scarica",
9390
9392
  "system.device-battery-normal.title": "Batteria rientrata — {{deviceName}}",
9391
9393
  "system.device-battery-normal.body": "{{deviceName}} è risalito al {{percentage}}% di batteria",
9392
9394
  "system.device-battery-normal.body.binary": "{{deviceName}} non segnala più la batteria scarica",
@@ -78758,6 +78760,97 @@ function alertSubjectDeviceId(subject) {
78758
78760
  return Number.isInteger(parsed) ? parsed : void 0;
78759
78761
  }
78760
78762
  //#endregion
78763
+ //#region src/notification-center/alerts/consumable-subject.ts
78764
+ /**
78765
+ * A consumable EPISODE's name, and the thresholds the rule set asks for (D642).
78766
+ *
78767
+ * Before D642 one cluster-wide threshold judged every item, so an item had one
78768
+ * episode: `consumable:<deviceId>:<key>`. The threshold is now the RULE's, and
78769
+ * the ledger keeps one episode per threshold a rule asks for — each with its
78770
+ * own hysteresis, pending raise and reminder — named
78771
+ * `consumable@<threshold>:<deviceId>:<key>`.
78772
+ *
78773
+ * The threshold rides the FAMILY segment on purpose: the device id stays the
78774
+ * second segment (`alertSubjectDeviceId`, D636 — the log tag and the indexed
78775
+ * column read it), and the item key stays last and whole, whatever it holds.
78776
+ *
78777
+ * Pure. No clock, no I/O.
78778
+ */
78779
+ var FAMILY = "consumable";
78780
+ /** The episode of `key` on `deviceId`, judged at `thresholdPercent`. */
78781
+ function consumableSubject(thresholdPercent, deviceId, key) {
78782
+ return `${FAMILY}@${String(thresholdPercent)}:${String(deviceId)}:${key}`;
78783
+ }
78784
+ /** The pre-D642 subject of the same item — read only to carry it over. */
78785
+ function legacyConsumableSubject(deviceId, key) {
78786
+ return `${FAMILY}:${String(deviceId)}:${key}`;
78787
+ }
78788
+ /** `null` for a subject that is not a consumable's. */
78789
+ function parseConsumableSubject(subject) {
78790
+ const first = subject.indexOf(":");
78791
+ const second = first < 0 ? -1 : subject.indexOf(":", first + 1);
78792
+ if (first < 0 || second < 0) return null;
78793
+ const family = subject.slice(0, first);
78794
+ const deviceId = Number(subject.slice(first + 1, second));
78795
+ const key = subject.slice(second + 1);
78796
+ if (!Number.isInteger(deviceId) || key.length === 0) return null;
78797
+ if (family === FAMILY) return {
78798
+ thresholdPercent: NC_CONSUMABLE_LOW_PERCENT_DEFAULT,
78799
+ deviceId,
78800
+ key,
78801
+ legacy: true
78802
+ };
78803
+ if (!family.startsWith(`${FAMILY}@`)) return null;
78804
+ const thresholdPercent = Number(family.slice(11));
78805
+ if (!Number.isInteger(thresholdPercent)) return null;
78806
+ return {
78807
+ thresholdPercent,
78808
+ deviceId,
78809
+ key,
78810
+ legacy: false
78811
+ };
78812
+ }
78813
+ /**
78814
+ * Every consumable threshold the rule set asks for, ascending.
78815
+ *
78816
+ * A rule asks when it is a system-event rule whose kinds include a consumable
78817
+ * kind — enabled or not: a disabled rule's episode stays PENDING (no rule
78818
+ * matched it) and is re-offered the moment the rule is switched back on
78819
+ * (D636), which is what that rule would have said had it been on. With no such
78820
+ * rule at all the default is still judged, so an episode exists for the first
78821
+ * rule an operator writes to hear (D636's "offered once per rule change").
78822
+ */
78823
+ function consumableThresholdCensus(rules) {
78824
+ const thresholds = /* @__PURE__ */ new Set();
78825
+ for (const rule of rules) {
78826
+ const condition = rule.conditions.systemEvent;
78827
+ if (rule.delivery !== "system-event" || condition === void 0) continue;
78828
+ if (!condition.kinds.some((kind) => NC_CONSUMABLE_SYSTEM_EVENT_KINDS.includes(kind))) continue;
78829
+ thresholds.add(consumableLowPercentOf(condition));
78830
+ }
78831
+ if (thresholds.size === 0) thresholds.add(NC_CONSUMABLE_LOW_PERCENT_DEFAULT);
78832
+ return [...thresholds].toSorted((a, b) => a - b);
78833
+ }
78834
+ //#endregion
78835
+ //#region src/notification-center/alerts/tank-subject.ts
78836
+ function tankSubject(deviceId, key) {
78837
+ return `tank:${String(deviceId)}:${key}`;
78838
+ }
78839
+ /** `null` for a subject that is not a leftover tank episode. */
78840
+ function parseTankSubject(subject) {
78841
+ const first = subject.indexOf(":");
78842
+ const second = first < 0 ? -1 : subject.indexOf(":", first + 1);
78843
+ if (first < 0 || second < 0) return null;
78844
+ if (subject.slice(0, first) !== "tank") return null;
78845
+ const deviceId = Number(subject.slice(first + 1, second));
78846
+ const key = subject.slice(second + 1);
78847
+ if (!Number.isInteger(deviceId) || key.length === 0) return null;
78848
+ return {
78849
+ deviceId,
78850
+ key
78851
+ };
78852
+ }
78853
+ //#endregion
78761
78854
  //#region src/notification-center/alerts/alert-store.ts
78762
78855
  /**
78763
78856
  * @durable class=ledger owner=notification-center
@@ -78878,6 +78971,7 @@ function mergeBootWindowAlertRow(stored, provisional) {
78878
78971
  }
78879
78972
  var NcAlertStore = class {
78880
78973
  ledger;
78974
+ logger;
78881
78975
  /**
78882
78976
  * THE BOOT WINDOW (D698). Battery slices arrive from the moment the centre
78883
78977
  * starts, and the ledger is read only in the back-fill. A row written in that
@@ -78889,6 +78983,7 @@ var NcAlertStore = class {
78889
78983
  */
78890
78984
  bootWindow;
78891
78985
  constructor(deps) {
78986
+ this.logger = deps.logger;
78892
78987
  this.ledger = new DurableLedger({
78893
78988
  spec: NC_ALERTS_SPEC,
78894
78989
  kind: deps.records.kind(ncDurableRecordKinds["device-alerts"]),
@@ -78908,6 +79003,50 @@ var NcAlertStore = class {
78908
79003
  this.bootWindow.settle();
78909
79004
  return loaded;
78910
79005
  }
79006
+ /**
79007
+ * Close open `tank:<id>:<key>` leftovers once (D934). Idempotent.
79008
+ *
79009
+ * A row closes when the same key is already a consumable episode in this
79010
+ * ledger, or when an answered directory has no device for it. A live device
79011
+ * whose key has not been seen yet is kept — the next consumable observation
79012
+ * closes it. `battery:` rows are not tank subjects and are never touched.
79013
+ * Deletes go through this ledger (D679).
79014
+ */
79015
+ async sweepOpenTankLeftovers(input) {
79016
+ const known = consumableKeysOf(this.ledger.snapshot());
79017
+ const closing = [];
79018
+ let kept = 0;
79019
+ for (const row of this.ledger.snapshot()) {
79020
+ if (!row.alerting) continue;
79021
+ const tank = parseTankSubject(row.subject);
79022
+ if (tank === null) continue;
79023
+ const reason = tankCloseReason(tank, known, input.liveOwner(tank.deviceId));
79024
+ if (reason === "keep") kept += 1;
79025
+ else closing.push({
79026
+ row,
79027
+ reason
79028
+ });
79029
+ }
79030
+ for (const item of closing) {
79031
+ const deviceId = alertSubjectDeviceId(item.row.subject);
79032
+ await this.ledger.forget(item.row.subject);
79033
+ this.logger.info("leftover tank alert closed", {
79034
+ ...deviceId !== void 0 ? { tags: { deviceId } } : {},
79035
+ meta: {
79036
+ subject: item.row.subject,
79037
+ reason: item.reason
79038
+ }
79039
+ });
79040
+ }
79041
+ this.logger.info("leftover tank alert sweep", { meta: {
79042
+ closed: closing.length,
79043
+ kept
79044
+ } });
79045
+ return {
79046
+ closed: closing.length,
79047
+ kept
79048
+ };
79049
+ }
78911
79050
  /** Drop a deleted device's mirrored rows (the durable ones go by `deleteWhere`, D871). */
78912
79051
  evictDevice(deviceId) {
78913
79052
  return this.ledger.evictDevice(deviceId);
@@ -78935,77 +79074,21 @@ var NcAlertStore = class {
78935
79074
  };
78936
79075
  }
78937
79076
  };
78938
- //#endregion
78939
- //#region src/notification-center/alerts/consumable-subject.ts
78940
- /**
78941
- * A consumable EPISODE's name, and the thresholds the rule set asks for (D642).
78942
- *
78943
- * Before D642 one cluster-wide threshold judged every item, so an item had one
78944
- * episode: `consumable:<deviceId>:<key>`. The threshold is now the RULE's, and
78945
- * the ledger keeps one episode per threshold a rule asks for — each with its
78946
- * own hysteresis, pending raise and reminder — named
78947
- * `consumable@<threshold>:<deviceId>:<key>`.
78948
- *
78949
- * The threshold rides the FAMILY segment on purpose: the device id stays the
78950
- * second segment (`alertSubjectDeviceId`, D636 — the log tag and the indexed
78951
- * column read it), and the item key stays last and whole, whatever it holds.
78952
- *
78953
- * Pure. No clock, no I/O.
78954
- */
78955
- var FAMILY = "consumable";
78956
- /** The episode of `key` on `deviceId`, judged at `thresholdPercent`. */
78957
- function consumableSubject(thresholdPercent, deviceId, key) {
78958
- return `${FAMILY}@${String(thresholdPercent)}:${String(deviceId)}:${key}`;
78959
- }
78960
- /** The pre-D642 subject of the same item — read only to carry it over. */
78961
- function legacyConsumableSubject(deviceId, key) {
78962
- return `${FAMILY}:${String(deviceId)}:${key}`;
78963
- }
78964
- /** `null` for a subject that is not a consumable's. */
78965
- function parseConsumableSubject(subject) {
78966
- const first = subject.indexOf(":");
78967
- const second = first < 0 ? -1 : subject.indexOf(":", first + 1);
78968
- if (first < 0 || second < 0) return null;
78969
- const family = subject.slice(0, first);
78970
- const deviceId = Number(subject.slice(first + 1, second));
78971
- const key = subject.slice(second + 1);
78972
- if (!Number.isInteger(deviceId) || key.length === 0) return null;
78973
- if (family === FAMILY) return {
78974
- thresholdPercent: NC_CONSUMABLE_LOW_PERCENT_DEFAULT,
78975
- deviceId,
78976
- key,
78977
- legacy: true
78978
- };
78979
- if (!family.startsWith(`${FAMILY}@`)) return null;
78980
- const thresholdPercent = Number(family.slice(11));
78981
- if (!Number.isInteger(thresholdPercent)) return null;
78982
- return {
78983
- thresholdPercent,
78984
- deviceId,
78985
- key,
78986
- legacy: false
78987
- };
79077
+ function consumableKey(deviceId, key) {
79078
+ return `${String(deviceId)}:${key}`;
78988
79079
  }
78989
- /**
78990
- * Every consumable threshold the rule set asks for, ascending.
78991
- *
78992
- * A rule asks when it is a system-event rule whose kinds include a consumable
78993
- * kind — enabled or not: a disabled rule's episode stays PENDING (no rule
78994
- * matched it) and is re-offered the moment the rule is switched back on
78995
- * (D636), which is what that rule would have said had it been on. With no such
78996
- * rule at all the default is still judged, so an episode exists for the first
78997
- * rule an operator writes to hear (D636's "offered once per rule change").
78998
- */
78999
- function consumableThresholdCensus(rules) {
79000
- const thresholds = /* @__PURE__ */ new Set();
79001
- for (const rule of rules) {
79002
- const condition = rule.conditions.systemEvent;
79003
- if (rule.delivery !== "system-event" || condition === void 0) continue;
79004
- if (!condition.kinds.some((kind) => NC_CONSUMABLE_SYSTEM_EVENT_KINDS.includes(kind))) continue;
79005
- thresholds.add(consumableLowPercentOf(condition));
79080
+ function consumableKeysOf(rows) {
79081
+ const keys = /* @__PURE__ */ new Set();
79082
+ for (const row of rows) {
79083
+ const parts = parseConsumableSubject(row.subject);
79084
+ if (parts !== null) keys.add(consumableKey(parts.deviceId, parts.key));
79006
79085
  }
79007
- if (thresholds.size === 0) thresholds.add(NC_CONSUMABLE_LOW_PERCENT_DEFAULT);
79008
- return [...thresholds].toSorted((a, b) => a - b);
79086
+ return keys;
79087
+ }
79088
+ function tankCloseReason(tank, known, owner) {
79089
+ if (known.has(consumableKey(tank.deviceId, tank.key))) return "consumable key already known";
79090
+ if (owner === false) return "no live owner";
79091
+ return "keep";
79009
79092
  }
79010
79093
  //#endregion
79011
79094
  //#region src/notification-center/alerts/consumable-band.ts
@@ -79758,6 +79841,24 @@ function incomingFromBatteryBand(input) {
79758
79841
  });
79759
79842
  }
79760
79843
  /**
79844
+ * The summary sentence for a battery episode whose slice has not been read
79845
+ * since boot. It names the device and nothing else: a missing level is not
79846
+ * 0%, and it is not the binary indicator's sentence.
79847
+ */
79848
+ function incomingFromUnmeasuredBattery(input) {
79849
+ const kind = "device-battery-low";
79850
+ return systemSubject({
79851
+ facts: input.facts,
79852
+ kind,
79853
+ subject: `battery:${input.deviceId}`,
79854
+ titleKey: `system.${kind}.title`,
79855
+ bodyKey: `system.${kind}.body.unmeasured`,
79856
+ textParams: deviceTextParams(input.deviceId, input.identity),
79857
+ deviceId: input.deviceId,
79858
+ ...input.identity !== void 0 ? { deviceType: input.identity.type } : {}
79859
+ });
79860
+ }
79861
+ /**
79761
79862
  * A consumable BAND, as a system-event subject.
79762
79863
  *
79763
79864
  * Built exactly like {@link incomingFromBatteryBand} — the operator asked for
@@ -80733,22 +80834,24 @@ function deliveryForKind(kind) {
80733
80834
  }
80734
80835
  //#endregion
80735
80836
  //#region src/notification-center/alerts/open-alert.ts
80837
+ /** `battery:<deviceId>` — nothing else. A `tank:` subject is not one of these. */
80838
+ function isBatterySubject(subject) {
80839
+ const deviceId = alertSubjectDeviceId(subject);
80840
+ return deviceId !== void 0 && subject === `battery:${String(deviceId)}`;
80841
+ }
80736
80842
  function unmeasuredEpisode(input) {
80737
80843
  const deviceId = alertSubjectDeviceId(input.subject);
80738
80844
  if (deviceId === void 0) return null;
80739
80845
  const identity = input.lookup(deviceId);
80740
80846
  const facts = input.facts;
80741
- if (input.family === "battery") return incomingFromBatteryBand({
80742
- facts,
80743
- deviceId,
80744
- band: "low",
80745
- reading: {
80746
- percentage: 0,
80747
- lastUpdated: 0,
80748
- binary: true
80749
- },
80750
- identity
80751
- });
80847
+ if (input.family === "battery") {
80848
+ if (!isBatterySubject(input.subject)) return null;
80849
+ return incomingFromUnmeasuredBattery({
80850
+ facts,
80851
+ deviceId,
80852
+ identity
80853
+ });
80854
+ }
80752
80855
  const parts = parseConsumableSubject(input.subject);
80753
80856
  if (parts !== null && parts.legacy) {
80754
80857
  const parsed = parseProviderVerdictDetail(input.detail);
@@ -80822,6 +80925,15 @@ function isProviderVerdictDetail(detail) {
80822
80925
  }
80823
80926
  function openAlertOf(row, input) {
80824
80927
  const parts = parseConsumableSubject(row.subject);
80928
+ const battery = isBatterySubject(row.subject);
80929
+ if (parts === null && !battery) {
80930
+ const deviceId = alertSubjectDeviceId(row.subject);
80931
+ input.logger?.warn("open alert skipped — subject is neither a battery nor a consumable", {
80932
+ ...deviceId !== void 0 ? { tags: { deviceId } } : {},
80933
+ meta: { subject: row.subject }
80934
+ });
80935
+ return null;
80936
+ }
80825
80937
  const family = parts !== null ? "consumable" : "battery";
80826
80938
  const subject = (input.restated ?? unmeasuredEpisode({
80827
80939
  subject: row.subject,
@@ -81042,6 +81154,7 @@ var NcDeviceAlerts = class {
81042
81154
  */
81043
81155
  /** One item from the consumables slice — every form (D934). */
81044
81156
  observeConsumableItem(deviceId, sliceItem) {
81157
+ this.closeTankLeftover(deviceId, sliceItem.key);
81045
81158
  if (sliceItem.wear !== null) {
81046
81159
  this.observeConsumable(deviceId, sliceItem.wear);
81047
81160
  return;
@@ -81222,13 +81335,15 @@ var NcDeviceAlerts = class {
81222
81335
  for (const row of this.deps.rows.all()) {
81223
81336
  if (!row.alerting) continue;
81224
81337
  const restated = this.restatementOf(row.subject);
81338
+ const logger = this.logger();
81225
81339
  const open = openAlertOf(row, {
81226
81340
  facts,
81227
81341
  restated: restated === null ? null : restated(facts),
81228
- lookup: this.deps.lookup
81342
+ lookup: this.deps.lookup,
81343
+ ...logger !== void 0 ? { logger } : {}
81229
81344
  });
81230
81345
  if (open !== null) out.push(open);
81231
- else this.logger()?.debug("open alert left out of the state summary — it cannot be worded", {
81346
+ else if (parseConsumableSubject(row.subject) !== null || isBatterySubject(row.subject)) this.logger()?.debug("open alert left out of the state summary — it cannot be worded", {
81232
81347
  ...tagsOf(row.subject),
81233
81348
  meta: { subject: row.subject }
81234
81349
  });
@@ -81293,6 +81408,16 @@ var NcDeviceAlerts = class {
81293
81408
  }
81294
81409
  this.absentThresholds = absent;
81295
81410
  }
81411
+ /**
81412
+ * A leftover `tank:<id>:<key>` ends when that key is seen on the consumables
81413
+ * slice (D934). Silent: no recovery. A real `battery:` row is a different
81414
+ * subject and is not touched.
81415
+ */
81416
+ closeTankLeftover(deviceId, key) {
81417
+ const subject = tankSubject(deviceId, key);
81418
+ if (this.deps.rows.get(subject) === void 0) return;
81419
+ this.dropRow(subject, "closed — the same key is a consumable (D934)");
81420
+ }
81296
81421
  /** Remove one row, mirror and durable, with a line that names why. */
81297
81422
  dropRow(subject, reason) {
81298
81423
  this.offeredAt.delete(subject);
@@ -101489,7 +101614,13 @@ async function runBootBackfill(host) {
101489
101614
  if (!await phase("alertEpisodes", () => host.hydrateAlertEpisodes())) return;
101490
101615
  if (!await phase("deviceAlerts", async () => {
101491
101616
  const rows = await host.alertStore.load();
101492
- host.logger.info("device alert ledger reseeded", { meta: { rows } });
101617
+ const directoryAnswered = host.deviceDirectory.answeredGeneration() > 0;
101618
+ const tankLeftovers = await host.alertStore.sweepOpenTankLeftovers({ liveOwner: (deviceId) => directoryAnswered ? host.deviceDirectory.get(deviceId) !== void 0 : void 0 });
101619
+ host.logger.info("device alert ledger reseeded", { meta: {
101620
+ rows,
101621
+ tankLeftoversClosed: tankLeftovers.closed,
101622
+ tankLeftoversKept: tankLeftovers.kept
101623
+ } });
101493
101624
  })) return;
101494
101625
  if (!await phase("stateSummary", async () => {
101495
101626
  const loaded = await host.stateSummary.load();
@@ -112112,7 +112243,7 @@ var MotionEpisodeTracker = class {
112112
112243
  *
112113
112244
  * A single timeout is the call's bound doing its job. Three uncertain confirms
112114
112245
  * in a row, with no yes and no no between them, is the provider not answering
112115
- * — the shape camera 615 showed on 2026-10-26 (nine timeouts, zero answers).
112246
+ * — the shape camera 102 showed on 2026-10-26 (nine timeouts, zero answers).
112116
112247
  * A time window would also count a timeout that a later answer already closed.
112117
112248
  * The streak resets on any answer. A further uncertain while the edge is
112118
112249
  * open does not raise again.
@@ -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-LOOCKNGE.mjs")).catch((e) => {
33
+ return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-CO5qrMxU.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.638",
3
+ "version": "1.2.640",
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",