@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.
- package/dist/{clip-model-registry-B-Dv5y3Z.mjs → clip-model-registry-B1HxbGuP.mjs} +120 -8
- package/dist/{clip-model-registry-DEcrrqRz.js → clip-model-registry-C8xdbChV.js} +120 -8
- package/dist/embedding-encoder/index.js +1 -1
- package/dist/embedding-encoder/index.mjs +1 -1
- package/dist/pipeline-analytics/_stub.js +2 -2
- 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
- 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
- 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
- package/dist/pipeline-analytics/{hostInit-C2kfB4nI.mjs → hostInit-BN2pgAbz.mjs} +2 -2
- package/dist/pipeline-analytics/index.js +216 -85
- package/dist/pipeline-analytics/index.mjs +216 -85
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +1 -1
- 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
- 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-
|
|
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
|
-
|
|
78939
|
-
|
|
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
|
-
|
|
78991
|
-
|
|
78992
|
-
|
|
78993
|
-
|
|
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
|
-
|
|
79008
|
-
|
|
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")
|
|
80742
|
-
|
|
80743
|
-
|
|
80744
|
-
|
|
80745
|
-
|
|
80746
|
-
|
|
80747
|
-
|
|
80748
|
-
|
|
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.
|
|
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
|
|
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-
|
|
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.
|
|
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",
|