@camstack/addon-post-analysis 1.2.621 → 1.2.622

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.
@@ -1,5 +1,5 @@
1
1
  import { createHash } from "node:crypto";
2
- //#region ../types/dist/event-category-DOl51-Ij.mjs
2
+ //#region ../types/dist/event-category-7pZEBmVg.mjs
3
3
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4
4
  EventCategory["SystemBoot"] = "system.boot";
5
5
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -687,6 +687,14 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
687
687
  EventCategory["BackupRestored"] = "backup.restored";
688
688
  EventCategory["NotificationDispatched"] = "notification.dispatched";
689
689
  EventCategory["NotificationFailed"] = "notification.failed";
690
+ /**
691
+ * A notification rule that cannot work (D905): its stored row does not load,
692
+ * or it still names a device / delivery target the prune CONFIRMED deleted.
693
+ * One edge per rule per distinct set of reasons; never on an unanswered read.
694
+ */
695
+ EventCategory["NotificationRuleBroken"] = "notification.rule-broken";
696
+ /** The clear of {@link NotificationRuleBroken}: the rule loads and names nothing deleted. */
697
+ EventCategory["NotificationRuleRepaired"] = "notification.rule-repaired";
690
698
  EventCategory["DeviceUpdated"] = "device.updated";
691
699
  /**
692
700
  * Transport-level connectivity. Emitted by the device driver when
@@ -5612,7 +5620,7 @@ var ZodIssueCode = {
5612
5620
  var ZodFirstPartyTypeKind;
5613
5621
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5614
5622
  //#endregion
5615
- //#region ../types/dist/sleep-_sV1BE2f.mjs
5623
+ //#region ../types/dist/sleep-CueztlR1.mjs
5616
5624
  /**
5617
5625
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5618
5626
  * window to float samples (D455).
@@ -44037,6 +44045,8 @@ var NcSystemEventKindSchema = _enum([
44037
44045
  "alert-critical",
44038
44046
  "alert-error",
44039
44047
  "alert-critical-resolved",
44048
+ "rule-broken",
44049
+ "rule-repaired",
44040
44050
  "camera-online",
44041
44051
  "camera-offline",
44042
44052
  "camera-disabled",
@@ -45662,6 +45672,14 @@ var NC_CONDITION_CATALOG = [
45662
45672
  value: "alert-critical-resolved",
45663
45673
  label: "Critical alert resolved"
45664
45674
  },
45675
+ {
45676
+ value: "rule-broken",
45677
+ label: "Notification rule broken"
45678
+ },
45679
+ {
45680
+ value: "rule-repaired",
45681
+ label: "Notification rule repaired"
45682
+ },
45665
45683
  {
45666
45684
  value: "alarm-arm-refused",
45667
45685
  label: "Alarm arm refused"
@@ -82105,6 +82123,8 @@ var NC_SYSTEM_EVENT_FAMILY = {
82105
82123
  "alert-critical": "system",
82106
82124
  "alert-error": "system",
82107
82125
  "alert-critical-resolved": "system",
82126
+ "rule-broken": "system",
82127
+ "rule-repaired": "system",
82108
82128
  "storage-location-low": "system",
82109
82129
  "storage-location-critical": "system",
82110
82130
  "storage-location-ok": "system",
@@ -82257,6 +82277,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
82257
82277
  "alert-critical-resolved"
82258
82278
  ]
82259
82279
  },
82280
+ {
82281
+ id: "rule-health",
82282
+ family: "system",
82283
+ label: "Notification rules",
82284
+ kinds: ["rule-broken", "rule-repaired"]
82285
+ },
82260
82286
  {
82261
82287
  id: "alarm",
82262
82288
  family: "alarm",
@@ -84188,6 +84214,47 @@ var NC_TEMPLATE_VARS = [
84188
84214
  kinds: ["system"],
84189
84215
  systemEventKinds: ["recording-degraded", ...ALERT_EPISODE]
84190
84216
  },
84217
+ {
84218
+ name: "ruleName",
84219
+ label: "Rule name",
84220
+ example: "Robot",
84221
+ group: "system",
84222
+ families: ["rule"],
84223
+ fields: [...RULE_TEXT],
84224
+ kinds: ["system"],
84225
+ systemEventKinds: ["rule-broken", "rule-repaired"]
84226
+ },
84227
+ {
84228
+ name: "ruleId",
84229
+ label: "Rule id",
84230
+ example: "3db3e226-9b82-4681-a200-de13b260aa48",
84231
+ group: "system",
84232
+ families: ["rule"],
84233
+ fields: [...RULE_TEXT],
84234
+ kinds: ["system"],
84235
+ systemEventKinds: ["rule-broken", "rule-repaired"]
84236
+ },
84237
+ {
84238
+ name: "brokenReason",
84239
+ label: "Why the rule is broken",
84240
+ description: "unparseable, device-deleted or target-deleted",
84241
+ example: "device-deleted",
84242
+ group: "system",
84243
+ families: ["rule"],
84244
+ fields: [...RULE_TEXT],
84245
+ kinds: ["system"],
84246
+ systemEventKinds: ["rule-broken"]
84247
+ },
84248
+ {
84249
+ name: "offendingIds",
84250
+ label: "Deleted devices or destinations",
84251
+ example: "4483",
84252
+ group: "system",
84253
+ families: ["rule"],
84254
+ fields: [...RULE_TEXT],
84255
+ kinds: ["system"],
84256
+ systemEventKinds: ["rule-broken"]
84257
+ },
84191
84258
  {
84192
84259
  name: "locationName",
84193
84260
  label: "Storage location",
@@ -84643,7 +84710,9 @@ var NC_TEMPLATE_HELD_BACK_SYSTEM_EVENT_KINDS = [
84643
84710
  "node-updating",
84644
84711
  "alert-critical",
84645
84712
  "alert-error",
84646
- "alert-critical-resolved"
84713
+ "alert-critical-resolved",
84714
+ "rule-broken",
84715
+ "rule-repaired"
84647
84716
  ];
84648
84717
  /**
84649
84718
  * The catalog as `getTemplateCatalog` SERVES it: every descriptor, with the
@@ -84748,6 +84817,167 @@ function templateVarsFor(ctx) {
84748
84817
  function isKnownTemplateVar(name, ctx) {
84749
84818
  return templateVarsFor(ctx).some((d) => d.dynamic !== void 0 ? name.startsWith(d.dynamic.prefix) && name.length > d.dynamic.prefix.length : d.name === name);
84750
84819
  }
84820
+ var CLASS_BY_KIND = new Map([
84821
+ {
84822
+ id: "device-connectivity",
84823
+ family: "device-events",
84824
+ label: "Device connectivity (offline / back online)",
84825
+ bad: ["device-offline"],
84826
+ recovery: ["device-online"],
84827
+ snapshotLabel: "Devices offline now",
84828
+ snapshotSection: "device-state"
84829
+ },
84830
+ {
84831
+ id: "device-switch",
84832
+ family: "device-events",
84833
+ label: "Device switched off / back on",
84834
+ bad: ["device-disabled"],
84835
+ recovery: ["device-enabled"],
84836
+ snapshotLabel: "Devices switched off now",
84837
+ snapshotSection: "device-state"
84838
+ },
84839
+ {
84840
+ id: "stream-connectivity",
84841
+ family: "device-events",
84842
+ label: "Stream connectivity (offline / back online)",
84843
+ bad: ["stream-offline"],
84844
+ recovery: ["stream-online"],
84845
+ snapshotLabel: "Streams offline now",
84846
+ snapshotSection: "streams"
84847
+ },
84848
+ {
84849
+ id: "battery",
84850
+ family: "device-events",
84851
+ label: "Battery (low / back to normal)",
84852
+ bad: ["device-battery-low"],
84853
+ recovery: ["device-battery-normal"],
84854
+ snapshotLabel: "Batteries low now",
84855
+ snapshotSection: "battery"
84856
+ },
84857
+ {
84858
+ id: "consumables",
84859
+ family: "device-events",
84860
+ label: "Consumables (low / replaced)",
84861
+ bad: ["device-consumable-low"],
84862
+ recovery: ["device-consumable-normal"],
84863
+ snapshotLabel: "Consumables low now",
84864
+ snapshotSection: "consumables"
84865
+ },
84866
+ {
84867
+ id: "tanks",
84868
+ family: "device-events",
84869
+ label: "Tanks (low or full / back to normal)",
84870
+ bad: ["device-tank-low", "device-tank-full"],
84871
+ recovery: ["device-tank-normal"],
84872
+ snapshotLabel: "Tanks low or full now",
84873
+ snapshotSection: "tanks"
84874
+ },
84875
+ {
84876
+ id: "recording-health",
84877
+ family: "device-events",
84878
+ label: "Recording health (stalled or degraded / recording again)",
84879
+ bad: ["recording-stalled", "recording-degraded"],
84880
+ recovery: ["recording-healthy"],
84881
+ snapshotLabel: "Recordings stalled now",
84882
+ snapshotSection: null
84883
+ },
84884
+ {
84885
+ id: "node-connectivity",
84886
+ family: "system",
84887
+ label: "Node connectivity (offline / back online)",
84888
+ bad: ["node-offline"],
84889
+ recovery: ["node-online"],
84890
+ snapshotLabel: "Nodes offline now",
84891
+ snapshotSection: "nodes"
84892
+ },
84893
+ {
84894
+ id: "storage-space",
84895
+ family: "system",
84896
+ label: "Storage space (low or critical / ok again)",
84897
+ bad: ["storage-location-low", "storage-location-critical"],
84898
+ recovery: ["storage-location-ok"],
84899
+ snapshotLabel: "Storage locations low now",
84900
+ snapshotSection: null
84901
+ },
84902
+ {
84903
+ id: "critical-alerts",
84904
+ family: "system",
84905
+ label: "Critical alerts (raised / resolved)",
84906
+ bad: ["alert-critical"],
84907
+ recovery: ["alert-critical-resolved"],
84908
+ snapshotLabel: "Critical alerts open now",
84909
+ snapshotSection: null
84910
+ },
84911
+ {
84912
+ id: "rule-health",
84913
+ family: "system",
84914
+ label: "Rule health (broken / repaired)",
84915
+ bad: ["rule-broken"],
84916
+ recovery: ["rule-repaired"],
84917
+ snapshotLabel: "Notification rules broken now",
84918
+ snapshotSection: null
84919
+ }
84920
+ ].flatMap((spec) => [...spec.bad, ...spec.recovery].map((kind) => [kind, spec])));
84921
+ /** The class a kind belongs to, or `undefined` for a one-edge kind. */
84922
+ function systemEventClassOf(kind) {
84923
+ return CLASS_BY_KIND.get(kind);
84924
+ }
84925
+ /**
84926
+ * A kind list with the OTHER front of every class it touches: a bad edge
84927
+ * brings the class's recovery, a recovery brings the class's bad edges. A
84928
+ * sibling bad edge is never added by a bad edge — a rule on
84929
+ * `storage-location-critical` does not start hearing `storage-location-low`.
84930
+ * Input order is kept, each added edge right after the kind that brought it.
84931
+ * Kinds of no class (and legacy names) pass through.
84932
+ */
84933
+ function expandSystemEventClasses(kinds) {
84934
+ const out = [];
84935
+ const seen = /* @__PURE__ */ new Set();
84936
+ const push = (kind) => {
84937
+ if (seen.has(kind)) return;
84938
+ seen.add(kind);
84939
+ out.push(kind);
84940
+ };
84941
+ const listed = new Set(kinds);
84942
+ for (const kind of kinds) {
84943
+ push(kind);
84944
+ const spec = systemEventClassOf(kind);
84945
+ if (spec === void 0) continue;
84946
+ const hasBad = spec.bad.some((k) => listed.has(k));
84947
+ if (spec.bad.some((k) => k === kind)) for (const edge of spec.recovery) push(edge);
84948
+ else if (!hasBad) for (const edge of spec.bad) push(edge);
84949
+ }
84950
+ return out;
84951
+ }
84952
+ /** Does this rule speak per EVENT (not a scheduled summary)? */
84953
+ function isInstantSystemRule(rule) {
84954
+ if (rule.delivery !== "system-event") return false;
84955
+ return rule.systemEventDelivery?.mode !== "summary";
84956
+ }
84957
+ /**
84958
+ * An INSTANT system rule with each class it touches completed with both edges;
84959
+ * the rule itself (same object) when there is nothing to add, a summary rule,
84960
+ * or a rule spanning families (`mixed` stays read-only, D637). A copy, never a
84961
+ * mutation.
84962
+ */
84963
+ function withSystemEventClasses(rule) {
84964
+ const condition = rule.conditions.systemEvent;
84965
+ if (condition === void 0 || !isInstantSystemRule(rule)) return rule;
84966
+ const families = new Set(condition.kinds.map((kind) => NC_SYSTEM_EVENT_FAMILY[kind]));
84967
+ if (families.size !== 1 || families.has(null)) return rule;
84968
+ const kinds = expandSystemEventClasses(condition.kinds);
84969
+ if (kinds.length === condition.kinds.length) return rule;
84970
+ return {
84971
+ ...rule,
84972
+ conditions: {
84973
+ ...rule.conditions,
84974
+ systemEvent: {
84975
+ ...condition,
84976
+ kinds
84977
+ }
84978
+ }
84979
+ };
84980
+ }
84751
84981
  /** The families a rule may summarise. The alarm is not one of them. */
84752
84982
  var NC_SYSTEM_EVENT_SUMMARY_FAMILIES = ["device-events", "system"];
84753
84983
  /** The summary's schedule, or `null` for any rule that is not a summary system rule. */
@@ -86537,4 +86767,4 @@ function buildClipModelRegistry(entries) {
86537
86767
  /** The built-in catalog's registry. */
86538
86768
  var BUILTIN_CLIP_MODELS = buildClipModelRegistry(CLIP_IMAGE_MODELS);
86539
86769
  //#endregion
86540
- export { MediaFileKindEnum as $, isDeviceScopedCap as $i, cosineSimilarity as $n, projectSubjectPath as $r, OpsLogEntrySchema as $t, DeclaredDevices as A, systemEventFilterApplies as Ai, activateAlarmProfile as An, isEventOwnerType as Ar, NcAlarmSensorsInputSchema as At, FULL_IMAGE_BBOX as B, evaluateSensorEdge as Bi, applySecureOnArmEdit as Bn, kebabToCamel as Br, NcRuleUpdateInputSchema as Bt, ClearTrackRelationResultSchema as C, subKindsOf as Ci, TimelapseRulePatchSchema as Cn, isAlertEpisodeSeverity as Cr, NC_SNOOZE_MAX_MINUTES as Ct, DEFAULT_TIMELAPSE_PREVIEW_TEXT as D, syncActiveAlarmProfileSettings as Di, TrackRelationSchema as Dn, isDetectionMacroClass as Dr, NC_TEMPLATE_VARS as Dt, DEFAULT_EVENT_COLOR as E, summarizeReview as Ei, TrackRelationKindSchema as En, isDefaultAlarmProfileId as Er, NC_TAXONOMY as Et, EVENT_DENSITY_BATCH_MAX as F, vectorDimFromBase64 as Fi, alertEpisodeKind as Fn, isRootSuppliableStepId as Fr, NcRuleActionSchema as Ft, ListTrackRelationsResultSchema as G, CamProfileSchema as Gi, buildEventKindDescriptor as Gn, normalizeNcMediaPolicy as Gr, NcSnoozeSuppressedSchema as Gt, LABEL_SUPPLY_MACRO as H, DeviceType as Hi, assertTimelapseCadences as Hn, mayWriteToLocation as Hr, NcSharedSequenceSchema as Ht, EVENT_KIND_BY_CAP as I, viewerLinkBaseOf as Ii, alertEpisodePayload as In, isScheduleActive as Ir, NcRuleInputSchema as It, MAX_BIRTH_DECISION_RECORDS as J, createEvent as Ji, calendarEventLocalSpan as Jn, parseAlertEpisodePayload as Jr, NcTaxonomySchema as Jt, LockStateSchema as K, RECORD_MAX_DATA_BYTES as Ki, buildSubjectPath as Kn, notificationRulesCapability as Kr, NcStateSummarySectionIdSchema as Kt, EVENT_OWNER_TYPES as L, zoneAnalyticsCapability as Li, applyBlockingEdit as Ln, isSystemDelivery as Lr, NcRulePatchSchema as Lt, EMBEDDING_MODEL_FAILED as M, systemEventSummarySplitOf as Mi, alarmDeviceSecureOnArm as Mn, isLabelSupplyStepId as Mr, NcAlarmSettingsPatchSchema as Mt, EMBEDDING_REQUIREMENTS_FAILED as N, templateCarriesSummary as Ni, alarmPanelCapability as Nn, isMediaOwnerType as Nr, NcConditionDescriptorSchema as Nt, DETECTION_MACRO_CLASSES as O, systemEventDeliveryProblems as Oi, TrackSideSchema as On, isDrawableSubjectPath as Or, NcAlarmConfigSchema as Ot, EMBEDDING_REQUIREMENTS_UNAVAILABLE as P, templateVarsFor as Pi, alertEpisodeId as Pn, isRetiredClearKey as Pr, NcConditionsSchema as Pt, MOTION_CLOSE_AFTER_MS as Q, hydrateSchema as Qi, coreBlockIdFromAddonId as Qn, plateGalleryCapability as Qr, OPS_LOG_DEFAULT_LIMIT as Qt, EXPORT_DENSE_MAX_RANGES as R, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as Ri, applyModeDelaysEdits as Rn, isSystemEventSummaryRule as Rr, NcRuleSchema as Rt, ClearTrackRelationInputSchema as S, storageOccupancyCapability as Si, TimelapseRuleInputSchema as Sn, isAlertEpisodeOpen as Sr, NC_SENSOR_TRANSITION_KINDS as St, DEFAULT_DETAIL_CROP_CONVENTION as T, subjectPathSvgPoints as Ti, TrackPuritySchema as Tn, isAudioClassName as Tr, NC_TANK_SYSTEM_EVENT_KINDS as Tt, LabelAttributionSchema as U, errMsg as Ui, audioMetricsCapability as Un, memoizePinnedFfmpeg as Ur, NcSnoozeInputSchema as Ut, FailureCounters as V, isSourceCap as Vi, armRemovalReconcile as Vn, linkedStepOf as Vr, NcScheduleSchema as Vt, ListTrackRelationsInputSchema as W, BaseAddon as Wi, audioModeOf as Wn, ncMediaPolicyError as Wr, NcSnoozeSchema as Wt, MAX_TRACK_PURITIES as X, defineCustomActions as Xi, cloneAlarmSettings as Xn, pickFaceRescoreIntervalMinutes as Xr, NcTemplatePreviewSchema as Xt, MAX_BIRTH_LATENCY_PROXY_MS as Y, customAction as Yi, classifyRetrainReview as Yn, parseProcStatus as Yr, NcTemplatePreviewInputSchema as Yt, MAX_TRACK_RELATIONS as Z, defineRecordKinds as Zi, consumableLowPercentOf as Zn, pipelineAnalyticsCapability as Zr, NcTemplateVarDescriptorSchema as Zt, BIRTH_DECISION_DEFAULT_LIMIT as _, tuple as _a, sceneMonitorCapability as _i, SetTrackPurityInputSchema as _n, faceGalleryCapability as _r, NC_CONSUMABLE_SYSTEM_EVENT_KINDS as _t, CLIP_EMBEDDING_STEP_ID as a, array as aa, resolveLocationMode as ai, RetrainOriginSchema as an, describeSystemEventDeliveryProblem as ar, NC_ALARM_NOTIFY_FIELDS as at, BucketAccumulator as b, EventCategory as ba, servedTemplateVars as bi, TIMELAPSE_DENSE_FLOOR_SEC as bn, gifFromMp4Args as br, NC_GROUPING_MAX_SEC as bt, readClusterModelPinStrict as c, literal as ca, resolveNcMediaImage as ci, SCENE_CONFIRM_DEFAULT_TIMEOUT_MS as cn, embeddingEncoderCapability as cr, NC_AUDIO_CONFIRM_HITS_DEFAULT as ct, APPEARANCE_BLOCKS as d, object as da, rootSupplyServes as di, SCENE_DEFAULT_OBSERVATION_SPACING_SEC as dn, embeddingRequirementsFailedError as dr, NC_CLIP_PRE_ROLL_DEFAULT_SEC as dt, nodePin as ea, readDeviceStateFrom as ei, PoolMemoryWatchdog as en, createAlarmProfile as er, MotionTriggeredBySchema as et, APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT as f, partialRecord as fa, ruleAutoTriggersAlarm as fi, SCENE_DEFAULT_QUIET_SECONDS as fn, embeddingRequirementsUnavailableError as fr, NC_CLIP_RETENTION_MAX_SEC as ft, ArchivedDebugNoteSchema as g, templateLiteral as ga, ruleKindOf as gi, SceneMonitorSchema as gn, evictionPolicyOfLocation as gr, NC_CONSUMABLE_LOW_PERCENT_DEFAULT as gt, AlarmArmModeSchema as h, string as ha, ruleGroupingApplies as hi, SCENE_RESET_RECAPTURES as hn, eventKindLabel as hr, NC_CONFIRM_DEFAULT_TIMEOUT_MS as ht, CLIP_TEXT_MODELS as i, _enum as ia, resolveClipSearchMinScore as ii, RetrainDismissedSchema as in, deriveRecordingMode as ir, NC_ALARM_DELAY_MAX_SEC as it, DetectionSourceSchema as j, systemEventSummaryScheduleOf as ji, addonWidgetsSourceCapability as jn, isKnownTemplateVar as jr, NcAlarmSensorsSchema as jt, DETECTION_PIPELINE_CAP_NAME as k, systemEventFamilyProblems as ki, TrackSourceSchema as kn, isEventKindLabelKey as kr, NcAlarmPostTriggeredActionSchema as kt, resolveClusterModelPin as l, looseObject as la, resolvePoolMemoryPolicy as li, SCENE_DEFAULT_ANCHOR_THRESHOLD as ln, embeddingModelFailedError as lr, NC_AUDIO_CONFIRM_WINDOW_SEC_DEFAULT as lt, AUDIO_MACRO_LABELS as m, strictObject as ma, ruleDeviceCompatCapQueries as mi, SCENE_DIVERGED as mn, ensureAlarmProfiles as mr, NC_CONFIRM_DEFAULT_MAX_IMAGE_PX as mt, DEFAULT_CLIP_MODEL as n, sleep as na, readTimelapseGeneratedAt as ni, RECORDING_SOURCE_CAMSTACK_ADDON as nn, deriveDetailCropRect as nr, NC_ALARM_DEFAULT_TRIGGERED_DURATION_SEC as nt, CLUSTER_MODEL_OWNER_ADDON_ID as o, boolean as oa, resolveModeDelays as oi, RetrainStatusSchema as on, describeSystemEventFamilyProblem as or, NC_ALARM_SYSTEM_EVENT_KINDS as ot, ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT as p, record as pa, ruleBelongsToAlarm as pi, SCENE_DEFAULT_UNCOVERED_POLICY as pn, encodeVectorBase64 as pr, NC_CONDITION_CATALOG as pt, MAX_ARCHIVED_DEBUG_NOTES as q, RECORD_QUERY_MAX as qi, buildViewerLink as qn, occupancyScope as qr, NcSystemEventKindSchema as qt, CLIP_IMAGE_MODELS as r, ZodObject as ra, renameAlarmProfile as ri, RebuildObjectEmbeddingsRefusalSchema as rn, derivePostTriggeredAction as rr, NC_ALARM_DELAY_FIELDS as rt, FACE_EMBEDDING_STEP_ID as s, discriminatedUnion as sa, resolveModeNotifyPolicy as si, SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX as sn, deviceRemovalHookCapability as sr, NC_ALARM_TRIGGERED_MAX_SEC as st, BUILTIN_CLIP_MODELS as t, normalizeNodeId as ta, readMotionTriggeredBy as ti, RECORDING_EXPORT_MAX_READ_BYTES as tn, deleteAlarmProfile as tr, NC_ALARM_DEFAULT_PROFILE_ID as tt, APPEARANCE_BIN_COUNT as u, number as ua, retrainRevisionConflictMessage as ui, SCENE_DEFAULT_CHECK_INTERVAL_SEC as un, embeddingRefusalOf as ur, NC_CLIP_POST_ROLL_DEFAULT_SEC as ut, BaseDevice as v, union as va, secureActuationFor as vi, SetTrackPurityResultSchema as vn, failureContributionCapability as vr, NC_DEFAULT_SNOOZE_MINUTES as vt, CoverStateSchema as w, subjectPathSampleFromBox as wi, TimelapseRuleSchema as wn, isAppLinkBase as wr, NC_SYSTEM_EVENT_KIND_GROUP_SPECS as wt, COCO_TO_MACRO as x, startMoverUnderClearance as xi, TRACK_RELATIONS_DEFAULT_LIMIT as xn, isAlarmControllableCap as xr, NC_GROUPING_MIN_SEC as xt, BirthDecisionRecordSchema as y, unknown as ya, sensorRaisedOf as yi, SetTrackRelationInputSchema as yn, gifDeriveSpeed as yr, NC_GROUPING_DEFAULT_SEC as yt, FIRST_LEVEL_MACRO_CLASSES as z, canonicalHash as zi, applyNonBlockingEdit as zn, isVectorIndexDimConflict as zr, NcRuleTargetSchema as zt };
86770
+ export { MediaFileKindEnum as $, hydrateSchema as $i, cosineSimilarity as $n, projectSubjectPath as $r, OpsLogEntrySchema as $t, DeclaredDevices as A, systemEventFilterApplies as Ai, activateAlarmProfile as An, isEventOwnerType as Ar, NcAlarmSensorsInputSchema as At, FULL_IMAGE_BBOX as B, canonicalHash as Bi, applySecureOnArmEdit as Bn, kebabToCamel as Br, NcRuleUpdateInputSchema as Bt, ClearTrackRelationResultSchema as C, subKindsOf as Ci, TimelapseRulePatchSchema as Cn, isAlertEpisodeSeverity as Cr, NC_SNOOZE_MAX_MINUTES as Ct, DEFAULT_TIMELAPSE_PREVIEW_TEXT as D, syncActiveAlarmProfileSettings as Di, TrackRelationSchema as Dn, isDetectionMacroClass as Dr, NC_TEMPLATE_VARS as Dt, DEFAULT_EVENT_COLOR as E, summarizeReview as Ei, TrackRelationKindSchema as En, isDefaultAlarmProfileId as Er, NC_TAXONOMY as Et, EVENT_DENSITY_BATCH_MAX as F, vectorDimFromBase64 as Fi, alertEpisodeKind as Fn, isRootSuppliableStepId as Fr, NcRuleActionSchema as Ft, ListTrackRelationsResultSchema as G, BaseAddon as Gi, buildEventKindDescriptor as Gn, normalizeNcMediaPolicy as Gr, NcSnoozeSuppressedSchema as Gt, LABEL_SUPPLY_MACRO as H, isSourceCap as Hi, assertTimelapseCadences as Hn, mayWriteToLocation as Hr, NcSharedSequenceSchema as Ht, EVENT_KIND_BY_CAP as I, viewerLinkBaseOf as Ii, alertEpisodePayload as In, isScheduleActive as Ir, NcRuleInputSchema as It, MAX_BIRTH_DECISION_RECORDS as J, RECORD_QUERY_MAX as Ji, calendarEventLocalSpan as Jn, parseAlertEpisodePayload as Jr, NcTaxonomySchema as Jt, LockStateSchema as K, CamProfileSchema as Ki, buildSubjectPath as Kn, notificationRulesCapability as Kr, NcStateSummarySectionIdSchema as Kt, EVENT_OWNER_TYPES as L, withSystemEventClasses as Li, applyBlockingEdit as Ln, isSystemDelivery as Lr, NcRulePatchSchema as Lt, EMBEDDING_MODEL_FAILED as M, systemEventSummarySplitOf as Mi, alarmDeviceSecureOnArm as Mn, isLabelSupplyStepId as Mr, NcAlarmSettingsPatchSchema as Mt, EMBEDDING_REQUIREMENTS_FAILED as N, templateCarriesSummary as Ni, alarmPanelCapability as Nn, isMediaOwnerType as Nr, NcConditionDescriptorSchema as Nt, DETECTION_MACRO_CLASSES as O, systemEventDeliveryProblems as Oi, TrackSideSchema as On, isDrawableSubjectPath as Or, NcAlarmConfigSchema as Ot, EMBEDDING_REQUIREMENTS_UNAVAILABLE as P, templateVarsFor as Pi, alertEpisodeId as Pn, isRetiredClearKey as Pr, NcConditionsSchema as Pt, MOTION_CLOSE_AFTER_MS as Q, defineRecordKinds as Qi, coreBlockIdFromAddonId as Qn, plateGalleryCapability as Qr, OPS_LOG_DEFAULT_LIMIT as Qt, EXPORT_DENSE_MAX_RANGES as R, zoneAnalyticsCapability as Ri, applyModeDelaysEdits as Rn, isSystemEventSummaryRule as Rr, NcRuleSchema as Rt, ClearTrackRelationInputSchema as S, storageOccupancyCapability as Si, TimelapseRuleInputSchema as Sn, isAlertEpisodeOpen as Sr, NC_SENSOR_TRANSITION_KINDS as St, DEFAULT_DETAIL_CROP_CONVENTION as T, subjectPathSvgPoints as Ti, TrackPuritySchema as Tn, isAudioClassName as Tr, NC_TANK_SYSTEM_EVENT_KINDS as Tt, LabelAttributionSchema as U, DeviceType as Ui, audioMetricsCapability as Un, memoizePinnedFfmpeg as Ur, NcSnoozeInputSchema as Ut, FailureCounters as V, evaluateSensorEdge as Vi, armRemovalReconcile as Vn, linkedStepOf as Vr, NcScheduleSchema as Vt, ListTrackRelationsInputSchema as W, errMsg as Wi, audioModeOf as Wn, ncMediaPolicyError as Wr, NcSnoozeSchema as Wt, MAX_TRACK_PURITIES as X, customAction as Xi, cloneAlarmSettings as Xn, pickFaceRescoreIntervalMinutes as Xr, NcTemplatePreviewSchema as Xt, MAX_BIRTH_LATENCY_PROXY_MS as Y, createEvent as Yi, classifyRetrainReview as Yn, parseProcStatus as Yr, NcTemplatePreviewInputSchema as Yt, MAX_TRACK_RELATIONS as Z, defineCustomActions as Zi, consumableLowPercentOf as Zn, pipelineAnalyticsCapability as Zr, NcTemplateVarDescriptorSchema as Zt, BIRTH_DECISION_DEFAULT_LIMIT as _, templateLiteral as _a, sceneMonitorCapability as _i, SetTrackPurityInputSchema as _n, faceGalleryCapability as _r, NC_CONSUMABLE_SYSTEM_EVENT_KINDS as _t, CLIP_EMBEDDING_STEP_ID as a, _enum as aa, resolveLocationMode as ai, RetrainOriginSchema as an, describeSystemEventDeliveryProblem as ar, NC_ALARM_NOTIFY_FIELDS as at, BucketAccumulator as b, unknown as ba, servedTemplateVars as bi, TIMELAPSE_DENSE_FLOOR_SEC as bn, gifFromMp4Args as br, NC_GROUPING_MAX_SEC as bt, readClusterModelPinStrict as c, discriminatedUnion as ca, resolveNcMediaImage as ci, SCENE_CONFIRM_DEFAULT_TIMEOUT_MS as cn, embeddingEncoderCapability as cr, NC_AUDIO_CONFIRM_HITS_DEFAULT as ct, APPEARANCE_BLOCKS as d, number as da, rootSupplyServes as di, SCENE_DEFAULT_OBSERVATION_SPACING_SEC as dn, embeddingRequirementsFailedError as dr, NC_CLIP_PRE_ROLL_DEFAULT_SEC as dt, isDeviceScopedCap as ea, readDeviceStateFrom as ei, PoolMemoryWatchdog as en, createAlarmProfile as er, MotionTriggeredBySchema as et, APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT as f, object as fa, ruleAutoTriggersAlarm as fi, SCENE_DEFAULT_QUIET_SECONDS as fn, embeddingRequirementsUnavailableError as fr, NC_CLIP_RETENTION_MAX_SEC as ft, ArchivedDebugNoteSchema as g, string as ga, ruleKindOf as gi, SceneMonitorSchema as gn, evictionPolicyOfLocation as gr, NC_CONSUMABLE_LOW_PERCENT_DEFAULT as gt, AlarmArmModeSchema as h, strictObject as ha, ruleGroupingApplies as hi, SCENE_RESET_RECAPTURES as hn, eventKindLabel as hr, NC_CONFIRM_DEFAULT_TIMEOUT_MS as ht, CLIP_TEXT_MODELS as i, ZodObject as ia, resolveClipSearchMinScore as ii, RetrainDismissedSchema as in, deriveRecordingMode as ir, NC_ALARM_DELAY_MAX_SEC as it, DetectionSourceSchema as j, systemEventSummaryScheduleOf as ji, addonWidgetsSourceCapability as jn, isKnownTemplateVar as jr, NcAlarmSensorsSchema as jt, DETECTION_PIPELINE_CAP_NAME as k, systemEventFamilyProblems as ki, TrackSourceSchema as kn, isEventKindLabelKey as kr, NcAlarmPostTriggeredActionSchema as kt, resolveClusterModelPin as l, literal as la, resolvePoolMemoryPolicy as li, SCENE_DEFAULT_ANCHOR_THRESHOLD as ln, embeddingModelFailedError as lr, NC_AUDIO_CONFIRM_WINDOW_SEC_DEFAULT as lt, AUDIO_MACRO_LABELS as m, record as ma, ruleDeviceCompatCapQueries as mi, SCENE_DIVERGED as mn, ensureAlarmProfiles as mr, NC_CONFIRM_DEFAULT_MAX_IMAGE_PX as mt, DEFAULT_CLIP_MODEL as n, normalizeNodeId as na, readTimelapseGeneratedAt as ni, RECORDING_SOURCE_CAMSTACK_ADDON as nn, deriveDetailCropRect as nr, NC_ALARM_DEFAULT_TRIGGERED_DURATION_SEC as nt, CLUSTER_MODEL_OWNER_ADDON_ID as o, array as oa, resolveModeDelays as oi, RetrainStatusSchema as on, describeSystemEventFamilyProblem as or, NC_ALARM_SYSTEM_EVENT_KINDS as ot, ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT as p, partialRecord as pa, ruleBelongsToAlarm as pi, SCENE_DEFAULT_UNCOVERED_POLICY as pn, encodeVectorBase64 as pr, NC_CONDITION_CATALOG as pt, MAX_ARCHIVED_DEBUG_NOTES as q, RECORD_MAX_DATA_BYTES as qi, buildViewerLink as qn, occupancyScope as qr, NcSystemEventKindSchema as qt, CLIP_IMAGE_MODELS as r, sleep as ra, renameAlarmProfile as ri, RebuildObjectEmbeddingsRefusalSchema as rn, derivePostTriggeredAction as rr, NC_ALARM_DELAY_FIELDS as rt, FACE_EMBEDDING_STEP_ID as s, boolean as sa, resolveModeNotifyPolicy as si, SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX as sn, deviceRemovalHookCapability as sr, NC_ALARM_TRIGGERED_MAX_SEC as st, BUILTIN_CLIP_MODELS as t, nodePin as ta, readMotionTriggeredBy as ti, RECORDING_EXPORT_MAX_READ_BYTES as tn, deleteAlarmProfile as tr, NC_ALARM_DEFAULT_PROFILE_ID as tt, APPEARANCE_BIN_COUNT as u, looseObject as ua, retrainRevisionConflictMessage as ui, SCENE_DEFAULT_CHECK_INTERVAL_SEC as un, embeddingRefusalOf as ur, NC_CLIP_POST_ROLL_DEFAULT_SEC as ut, BaseDevice as v, tuple as va, secureActuationFor as vi, SetTrackPurityResultSchema as vn, failureContributionCapability as vr, NC_DEFAULT_SNOOZE_MINUTES as vt, CoverStateSchema as w, subjectPathSampleFromBox as wi, TimelapseRuleSchema as wn, isAppLinkBase as wr, NC_SYSTEM_EVENT_KIND_GROUP_SPECS as wt, COCO_TO_MACRO as x, EventCategory as xa, startMoverUnderClearance as xi, TRACK_RELATIONS_DEFAULT_LIMIT as xn, isAlarmControllableCap as xr, NC_GROUPING_MIN_SEC as xt, BirthDecisionRecordSchema as y, union as ya, sensorRaisedOf as yi, SetTrackRelationInputSchema as yn, gifDeriveSpeed as yr, NC_GROUPING_DEFAULT_SEC as yt, FIRST_LEVEL_MACRO_CLASSES as z, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as zi, applyNonBlockingEdit as zn, isVectorIndexDimConflict as zr, NcRuleTargetSchema as zt };
@@ -30,7 +30,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
30
30
  }) : target, mod));
31
31
  //#endregion
32
32
  let node_crypto = require("node:crypto");
33
- //#region ../types/dist/event-category-DOl51-Ij.mjs
33
+ //#region ../types/dist/event-category-7pZEBmVg.mjs
34
34
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
35
35
  EventCategory["SystemBoot"] = "system.boot";
36
36
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -718,6 +718,14 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
718
718
  EventCategory["BackupRestored"] = "backup.restored";
719
719
  EventCategory["NotificationDispatched"] = "notification.dispatched";
720
720
  EventCategory["NotificationFailed"] = "notification.failed";
721
+ /**
722
+ * A notification rule that cannot work (D905): its stored row does not load,
723
+ * or it still names a device / delivery target the prune CONFIRMED deleted.
724
+ * One edge per rule per distinct set of reasons; never on an unanswered read.
725
+ */
726
+ EventCategory["NotificationRuleBroken"] = "notification.rule-broken";
727
+ /** The clear of {@link NotificationRuleBroken}: the rule loads and names nothing deleted. */
728
+ EventCategory["NotificationRuleRepaired"] = "notification.rule-repaired";
721
729
  EventCategory["DeviceUpdated"] = "device.updated";
722
730
  /**
723
731
  * Transport-level connectivity. Emitted by the device driver when
@@ -5643,7 +5651,7 @@ var ZodIssueCode = {
5643
5651
  var ZodFirstPartyTypeKind;
5644
5652
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5645
5653
  //#endregion
5646
- //#region ../types/dist/sleep-_sV1BE2f.mjs
5654
+ //#region ../types/dist/sleep-CueztlR1.mjs
5647
5655
  /**
5648
5656
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5649
5657
  * window to float samples (D455).
@@ -44068,6 +44076,8 @@ var NcSystemEventKindSchema = _enum([
44068
44076
  "alert-critical",
44069
44077
  "alert-error",
44070
44078
  "alert-critical-resolved",
44079
+ "rule-broken",
44080
+ "rule-repaired",
44071
44081
  "camera-online",
44072
44082
  "camera-offline",
44073
44083
  "camera-disabled",
@@ -45693,6 +45703,14 @@ var NC_CONDITION_CATALOG = [
45693
45703
  value: "alert-critical-resolved",
45694
45704
  label: "Critical alert resolved"
45695
45705
  },
45706
+ {
45707
+ value: "rule-broken",
45708
+ label: "Notification rule broken"
45709
+ },
45710
+ {
45711
+ value: "rule-repaired",
45712
+ label: "Notification rule repaired"
45713
+ },
45696
45714
  {
45697
45715
  value: "alarm-arm-refused",
45698
45716
  label: "Alarm arm refused"
@@ -82136,6 +82154,8 @@ var NC_SYSTEM_EVENT_FAMILY = {
82136
82154
  "alert-critical": "system",
82137
82155
  "alert-error": "system",
82138
82156
  "alert-critical-resolved": "system",
82157
+ "rule-broken": "system",
82158
+ "rule-repaired": "system",
82139
82159
  "storage-location-low": "system",
82140
82160
  "storage-location-critical": "system",
82141
82161
  "storage-location-ok": "system",
@@ -82288,6 +82308,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
82288
82308
  "alert-critical-resolved"
82289
82309
  ]
82290
82310
  },
82311
+ {
82312
+ id: "rule-health",
82313
+ family: "system",
82314
+ label: "Notification rules",
82315
+ kinds: ["rule-broken", "rule-repaired"]
82316
+ },
82291
82317
  {
82292
82318
  id: "alarm",
82293
82319
  family: "alarm",
@@ -84219,6 +84245,47 @@ var NC_TEMPLATE_VARS = [
84219
84245
  kinds: ["system"],
84220
84246
  systemEventKinds: ["recording-degraded", ...ALERT_EPISODE]
84221
84247
  },
84248
+ {
84249
+ name: "ruleName",
84250
+ label: "Rule name",
84251
+ example: "Robot",
84252
+ group: "system",
84253
+ families: ["rule"],
84254
+ fields: [...RULE_TEXT],
84255
+ kinds: ["system"],
84256
+ systemEventKinds: ["rule-broken", "rule-repaired"]
84257
+ },
84258
+ {
84259
+ name: "ruleId",
84260
+ label: "Rule id",
84261
+ example: "3db3e226-9b82-4681-a200-de13b260aa48",
84262
+ group: "system",
84263
+ families: ["rule"],
84264
+ fields: [...RULE_TEXT],
84265
+ kinds: ["system"],
84266
+ systemEventKinds: ["rule-broken", "rule-repaired"]
84267
+ },
84268
+ {
84269
+ name: "brokenReason",
84270
+ label: "Why the rule is broken",
84271
+ description: "unparseable, device-deleted or target-deleted",
84272
+ example: "device-deleted",
84273
+ group: "system",
84274
+ families: ["rule"],
84275
+ fields: [...RULE_TEXT],
84276
+ kinds: ["system"],
84277
+ systemEventKinds: ["rule-broken"]
84278
+ },
84279
+ {
84280
+ name: "offendingIds",
84281
+ label: "Deleted devices or destinations",
84282
+ example: "4483",
84283
+ group: "system",
84284
+ families: ["rule"],
84285
+ fields: [...RULE_TEXT],
84286
+ kinds: ["system"],
84287
+ systemEventKinds: ["rule-broken"]
84288
+ },
84222
84289
  {
84223
84290
  name: "locationName",
84224
84291
  label: "Storage location",
@@ -84674,7 +84741,9 @@ var NC_TEMPLATE_HELD_BACK_SYSTEM_EVENT_KINDS = [
84674
84741
  "node-updating",
84675
84742
  "alert-critical",
84676
84743
  "alert-error",
84677
- "alert-critical-resolved"
84744
+ "alert-critical-resolved",
84745
+ "rule-broken",
84746
+ "rule-repaired"
84678
84747
  ];
84679
84748
  /**
84680
84749
  * The catalog as `getTemplateCatalog` SERVES it: every descriptor, with the
@@ -84779,6 +84848,167 @@ function templateVarsFor(ctx) {
84779
84848
  function isKnownTemplateVar(name, ctx) {
84780
84849
  return templateVarsFor(ctx).some((d) => d.dynamic !== void 0 ? name.startsWith(d.dynamic.prefix) && name.length > d.dynamic.prefix.length : d.name === name);
84781
84850
  }
84851
+ var CLASS_BY_KIND = new Map([
84852
+ {
84853
+ id: "device-connectivity",
84854
+ family: "device-events",
84855
+ label: "Device connectivity (offline / back online)",
84856
+ bad: ["device-offline"],
84857
+ recovery: ["device-online"],
84858
+ snapshotLabel: "Devices offline now",
84859
+ snapshotSection: "device-state"
84860
+ },
84861
+ {
84862
+ id: "device-switch",
84863
+ family: "device-events",
84864
+ label: "Device switched off / back on",
84865
+ bad: ["device-disabled"],
84866
+ recovery: ["device-enabled"],
84867
+ snapshotLabel: "Devices switched off now",
84868
+ snapshotSection: "device-state"
84869
+ },
84870
+ {
84871
+ id: "stream-connectivity",
84872
+ family: "device-events",
84873
+ label: "Stream connectivity (offline / back online)",
84874
+ bad: ["stream-offline"],
84875
+ recovery: ["stream-online"],
84876
+ snapshotLabel: "Streams offline now",
84877
+ snapshotSection: "streams"
84878
+ },
84879
+ {
84880
+ id: "battery",
84881
+ family: "device-events",
84882
+ label: "Battery (low / back to normal)",
84883
+ bad: ["device-battery-low"],
84884
+ recovery: ["device-battery-normal"],
84885
+ snapshotLabel: "Batteries low now",
84886
+ snapshotSection: "battery"
84887
+ },
84888
+ {
84889
+ id: "consumables",
84890
+ family: "device-events",
84891
+ label: "Consumables (low / replaced)",
84892
+ bad: ["device-consumable-low"],
84893
+ recovery: ["device-consumable-normal"],
84894
+ snapshotLabel: "Consumables low now",
84895
+ snapshotSection: "consumables"
84896
+ },
84897
+ {
84898
+ id: "tanks",
84899
+ family: "device-events",
84900
+ label: "Tanks (low or full / back to normal)",
84901
+ bad: ["device-tank-low", "device-tank-full"],
84902
+ recovery: ["device-tank-normal"],
84903
+ snapshotLabel: "Tanks low or full now",
84904
+ snapshotSection: "tanks"
84905
+ },
84906
+ {
84907
+ id: "recording-health",
84908
+ family: "device-events",
84909
+ label: "Recording health (stalled or degraded / recording again)",
84910
+ bad: ["recording-stalled", "recording-degraded"],
84911
+ recovery: ["recording-healthy"],
84912
+ snapshotLabel: "Recordings stalled now",
84913
+ snapshotSection: null
84914
+ },
84915
+ {
84916
+ id: "node-connectivity",
84917
+ family: "system",
84918
+ label: "Node connectivity (offline / back online)",
84919
+ bad: ["node-offline"],
84920
+ recovery: ["node-online"],
84921
+ snapshotLabel: "Nodes offline now",
84922
+ snapshotSection: "nodes"
84923
+ },
84924
+ {
84925
+ id: "storage-space",
84926
+ family: "system",
84927
+ label: "Storage space (low or critical / ok again)",
84928
+ bad: ["storage-location-low", "storage-location-critical"],
84929
+ recovery: ["storage-location-ok"],
84930
+ snapshotLabel: "Storage locations low now",
84931
+ snapshotSection: null
84932
+ },
84933
+ {
84934
+ id: "critical-alerts",
84935
+ family: "system",
84936
+ label: "Critical alerts (raised / resolved)",
84937
+ bad: ["alert-critical"],
84938
+ recovery: ["alert-critical-resolved"],
84939
+ snapshotLabel: "Critical alerts open now",
84940
+ snapshotSection: null
84941
+ },
84942
+ {
84943
+ id: "rule-health",
84944
+ family: "system",
84945
+ label: "Rule health (broken / repaired)",
84946
+ bad: ["rule-broken"],
84947
+ recovery: ["rule-repaired"],
84948
+ snapshotLabel: "Notification rules broken now",
84949
+ snapshotSection: null
84950
+ }
84951
+ ].flatMap((spec) => [...spec.bad, ...spec.recovery].map((kind) => [kind, spec])));
84952
+ /** The class a kind belongs to, or `undefined` for a one-edge kind. */
84953
+ function systemEventClassOf(kind) {
84954
+ return CLASS_BY_KIND.get(kind);
84955
+ }
84956
+ /**
84957
+ * A kind list with the OTHER front of every class it touches: a bad edge
84958
+ * brings the class's recovery, a recovery brings the class's bad edges. A
84959
+ * sibling bad edge is never added by a bad edge — a rule on
84960
+ * `storage-location-critical` does not start hearing `storage-location-low`.
84961
+ * Input order is kept, each added edge right after the kind that brought it.
84962
+ * Kinds of no class (and legacy names) pass through.
84963
+ */
84964
+ function expandSystemEventClasses(kinds) {
84965
+ const out = [];
84966
+ const seen = /* @__PURE__ */ new Set();
84967
+ const push = (kind) => {
84968
+ if (seen.has(kind)) return;
84969
+ seen.add(kind);
84970
+ out.push(kind);
84971
+ };
84972
+ const listed = new Set(kinds);
84973
+ for (const kind of kinds) {
84974
+ push(kind);
84975
+ const spec = systemEventClassOf(kind);
84976
+ if (spec === void 0) continue;
84977
+ const hasBad = spec.bad.some((k) => listed.has(k));
84978
+ if (spec.bad.some((k) => k === kind)) for (const edge of spec.recovery) push(edge);
84979
+ else if (!hasBad) for (const edge of spec.bad) push(edge);
84980
+ }
84981
+ return out;
84982
+ }
84983
+ /** Does this rule speak per EVENT (not a scheduled summary)? */
84984
+ function isInstantSystemRule(rule) {
84985
+ if (rule.delivery !== "system-event") return false;
84986
+ return rule.systemEventDelivery?.mode !== "summary";
84987
+ }
84988
+ /**
84989
+ * An INSTANT system rule with each class it touches completed with both edges;
84990
+ * the rule itself (same object) when there is nothing to add, a summary rule,
84991
+ * or a rule spanning families (`mixed` stays read-only, D637). A copy, never a
84992
+ * mutation.
84993
+ */
84994
+ function withSystemEventClasses(rule) {
84995
+ const condition = rule.conditions.systemEvent;
84996
+ if (condition === void 0 || !isInstantSystemRule(rule)) return rule;
84997
+ const families = new Set(condition.kinds.map((kind) => NC_SYSTEM_EVENT_FAMILY[kind]));
84998
+ if (families.size !== 1 || families.has(null)) return rule;
84999
+ const kinds = expandSystemEventClasses(condition.kinds);
85000
+ if (kinds.length === condition.kinds.length) return rule;
85001
+ return {
85002
+ ...rule,
85003
+ conditions: {
85004
+ ...rule.conditions,
85005
+ systemEvent: {
85006
+ ...condition,
85007
+ kinds
85008
+ }
85009
+ }
85010
+ };
85011
+ }
84782
85012
  /** The families a rule may summarise. The alarm is not one of them. */
84783
85013
  var NC_SYSTEM_EVENT_SUMMARY_FAMILIES = ["device-events", "system"];
84784
85014
  /** The summary's schedule, or `null` for any rule that is not a summary system rule. */
@@ -88314,6 +88544,12 @@ Object.defineProperty(exports, "viewerLinkBaseOf", {
88314
88544
  return viewerLinkBaseOf;
88315
88545
  }
88316
88546
  });
88547
+ Object.defineProperty(exports, "withSystemEventClasses", {
88548
+ enumerable: true,
88549
+ get: function() {
88550
+ return withSystemEventClasses;
88551
+ }
88552
+ });
88317
88553
  Object.defineProperty(exports, "zoneAnalyticsCapability", {
88318
88554
  enumerable: true,
88319
88555
  get: function() {
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_clip_model_registry = require("../clip-model-registry-CcgzpELQ.js");
5
+ const require_clip_model_registry = require("../clip-model-registry-MHJ9BSUV.js");
6
6
  let node_fs = require("node:fs");
7
7
  node_fs = require_clip_model_registry.__toESM(node_fs);
8
8
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Wi as BaseAddon, Yr as parseProcStatus, a as CLIP_EMBEDDING_STEP_ID, cr as embeddingEncoderCapability, dr as embeddingRequirementsFailedError, en as PoolMemoryWatchdog, fr as embeddingRequirementsUnavailableError, i as CLIP_TEXT_MODELS, l as resolveClusterModelPin, li as resolvePoolMemoryPolicy, lr as embeddingModelFailedError, n as DEFAULT_CLIP_MODEL, r as CLIP_IMAGE_MODELS, t as BUILTIN_CLIP_MODELS, ta as normalizeNodeId } from "../clip-model-registry-BBzoIoKO.mjs";
1
+ import { Gi as BaseAddon, Yr as parseProcStatus, a as CLIP_EMBEDDING_STEP_ID, cr as embeddingEncoderCapability, dr as embeddingRequirementsFailedError, en as PoolMemoryWatchdog, fr as embeddingRequirementsUnavailableError, i as CLIP_TEXT_MODELS, l as resolveClusterModelPin, li as resolvePoolMemoryPolicy, lr as embeddingModelFailedError, n as DEFAULT_CLIP_MODEL, na as normalizeNodeId, r as CLIP_IMAGE_MODELS, t as BUILTIN_CLIP_MODELS } from "../clip-model-registry-EDTOCKN9.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import * as fs from "node:fs";
4
4
  import * as path$1 from "node:path";