@camstack/addon-post-analysis 1.2.660 → 1.2.661

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/CHANGELOG.md CHANGED
@@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.2.661] - 2026-11-01
11
+
12
+ ### Changed
13
+
14
+ - A capture request now expires exactly at its deadline instead of one millisecond after, so an abandoned confirmation crop no longer holds the head of the lane and sheds key frames.
15
+ - Notification templates: {{camera}} is now {{device}}. Your saved rules, timelapse captions and text overrides are rewritten once at the first start; {{camera}} keeps rendering in a template an older app still writes
16
+
10
17
  ## [1.2.660] - 2026-11-01
11
18
 
12
19
  ### Changed
@@ -6537,6 +6537,53 @@ function emitReadiness(bus, params) {
6537
6537
  ts
6538
6538
  }));
6539
6539
  }
6540
+ /** Why a catalogue entry is not a runnable body of its declared kind. */
6541
+ var AddonMigrationDefinitionError = class extends Error {
6542
+ id;
6543
+ constructor(id, message) {
6544
+ super(`${id}: ${message}`);
6545
+ this.id = id;
6546
+ this.name = "AddonMigrationDefinitionError";
6547
+ }
6548
+ };
6549
+ /**
6550
+ * Bind a catalogue to the addon's ports. Throws {@link AddonMigrationDefinitionError} when
6551
+ * an entry's `bodyKind` does not match the body it carries, or is `sql` (a hub-only
6552
+ * body). A throwing body never escapes `execute`: it is reported as a failed result.
6553
+ */
6554
+ function defineAddonMigrations(catalogue, ports) {
6555
+ return catalogue.map((entry) => {
6556
+ const { meta } = entry;
6557
+ if ("plan" in entry) {
6558
+ if (meta.bodyKind !== "plan") throw new AddonMigrationDefinitionError(meta.id, `carries a plan body but declares "${meta.bodyKind}"`);
6559
+ return {
6560
+ meta,
6561
+ execute: () => guarded(async () => ({
6562
+ kind: "plan",
6563
+ plan: await entry.plan(ports)
6564
+ }))
6565
+ };
6566
+ }
6567
+ if (meta.bodyKind !== "procedure") throw new AddonMigrationDefinitionError(meta.id, `carries a procedure body but declares "${meta.bodyKind}"`);
6568
+ return {
6569
+ meta,
6570
+ execute: () => guarded(async () => ({
6571
+ kind: "procedure",
6572
+ result: await entry.procedure(ports)
6573
+ }))
6574
+ };
6575
+ });
6576
+ }
6577
+ async function guarded(work) {
6578
+ try {
6579
+ return await work();
6580
+ } catch (err) {
6581
+ return {
6582
+ kind: "failed",
6583
+ error: errMsg(err)
6584
+ };
6585
+ }
6586
+ }
6540
6587
  var NOT_RUN = {
6541
6588
  declared: false,
6542
6589
  snapshot: null,
@@ -14458,7 +14505,13 @@ var MigrationLedgerEntrySchema = object({
14458
14505
  /** Why it is `blocked` or `held` (`dependency-failed`, `snapshot-refused`, …). */
14459
14506
  reason: string().nullable(),
14460
14507
  nodeId: string().nullable(),
14461
- bootId: string().nullable()
14508
+ bootId: string().nullable(),
14509
+ /**
14510
+ * The catalogued meta of this id (description, body kind, store, `dependsOn`…),
14511
+ * joined by the engine from the catalogues it knows this boot. Absent when no
14512
+ * catalogue lists the id (a newer database).
14513
+ */
14514
+ meta: MigrationMetaSchema.optional()
14462
14515
  });
14463
14516
  /** A catalogued migration that is not applied, with where it stands. */
14464
14517
  var MigrationPendingEntrySchema = object({
@@ -80630,7 +80683,7 @@ var ExternalIdentityKeySchema = object({
80630
80683
  provider: string().min(1),
80631
80684
  subject: string().min(1)
80632
80685
  });
80633
- method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserInputSchema, UserSummarySchema, {
80686
+ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(_void(), object({ defaultPasswordInUse: boolean() }), { auth: "admin" }), method(CreateUserInputSchema, UserSummarySchema, {
80634
80687
  kind: "mutation",
80635
80688
  auth: "admin",
80636
80689
  access: "create"
@@ -92985,6 +93038,13 @@ Object.freeze({
92985
93038
  access: "view",
92986
93039
  role: "admin"
92987
93040
  },
93041
+ "userManagement.getAdminBootstrapStatus": {
93042
+ capName: "user-management",
93043
+ capScope: "system",
93044
+ addonId: null,
93045
+ access: "view",
93046
+ role: "admin"
93047
+ },
92988
93048
  "userManagement.getTotpStatus": {
92989
93049
  capName: "user-management",
92990
93050
  capScope: "system",
@@ -98758,8 +98818,9 @@ var STATE_SUMMARY_VARS = [
98758
98818
  ];
98759
98819
  var NC_TEMPLATE_VARS = [
98760
98820
  {
98761
- name: "camera",
98762
- label: "Camera",
98821
+ name: "device",
98822
+ label: "Device",
98823
+ description: "The device the event is about: the camera for a track, the appliance or sensor for a device event.",
98763
98824
  example: "Front door",
98764
98825
  group: "subject",
98765
98826
  families: ["rule", "timelapse"],
@@ -99144,6 +99205,16 @@ var NC_TEMPLATE_VARS = [
99144
99205
  kinds: ["system"],
99145
99206
  systemEventKinds: ["node-online", "node-offline"]
99146
99207
  },
99208
+ {
99209
+ name: "graceMin",
99210
+ label: "Update grace (minutes)",
99211
+ example: "10",
99212
+ group: "system",
99213
+ families: ["rule"],
99214
+ fields: [...RULE_TEXT],
99215
+ kinds: ["system"],
99216
+ systemEventKinds: ["node-offline"]
99217
+ },
99147
99218
  {
99148
99219
  name: "offlineFor",
99149
99220
  label: "Offline for",
@@ -99776,7 +99847,7 @@ function templateVarDeliveryApplies(d, ctx) {
99776
99847
  * descriptor so the whole rule stays in one line of code. */
99777
99848
  var CAPTION_VARS = {
99778
99849
  previewText: [
99779
- "camera",
99850
+ "device",
99780
99851
  "rule",
99781
99852
  "from",
99782
99853
  "to"
@@ -100726,7 +100797,7 @@ var TimelapseRuleInputSchema = object({
100726
100797
  * before this field existed still reads "Timelapse Camera front door" and
100727
100798
  * not the literal braces.
100728
100799
  */
100729
- var DEFAULT_TIMELAPSE_PREVIEW_TEXT = "Timelapse {{camera}}";
100800
+ var DEFAULT_TIMELAPSE_PREVIEW_TEXT = "Timelapse {{device}}";
100730
100801
  /**
100731
100802
  * Partial patch for an update — any subset of the INPUT fields, with NO
100732
100803
  * defaults (an absent key means "leave unchanged", never "reset to default").
@@ -101850,4 +101921,4 @@ function buildClipModelRegistry(entries) {
101850
101921
  /** The built-in catalog's registry. */
101851
101922
  var BUILTIN_CLIP_MODELS = buildClipModelRegistry(CLIP_IMAGE_MODELS);
101852
101923
  //#endregion
101853
- export { MAX_TRACK_RELATIONS as $, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as $i, bundledCamstack as $n, normalizeNcAction as $r, NcTemplateVarDescriptorSchema as $t, DETECTION_MACRO_CLASSES as A, string as Aa, sceneMonitorCapability as Ai, TrackPuritySchema as An, isAlertEpisodeOpen as Ar, NcAlarmConfigSchema as At, EXPORT_DENSE_MAX_RANGES as B, sunTimes as Bi, alertEpisodeKind as Bn, isLabelSupplyStepId as Br, NcRuleSchema as Bt, COCO_TO_MACRO as C, literal as Ca, retrainRevisionConflictMessage as Ci, SetTrackRelationInputSchema as Cn, eventKindLabel as Cr, NC_GROUPING_MIN_SEC as Ct, DEFAULT_DETAIL_CROP_CONVENTION as D, partialRecord as Da, ruleDeviceCompatCapQueries as Di, TimelapseRulePatchSchema as Dn, gifDeriveSpeed as Dr, NC_SYSTEM_EVENT_KIND_GROUP_SPECS as Dt, CoverStateSchema as E, object as Ea, ruleBelongsToAlarm as Ei, TimelapseRuleInputSchema as En, failureContributionCapability as Er, NC_STATE_SUMMARY_SECTION_IDS as Et, EMBEDDING_REQUIREMENTS_FAILED as F, DeviceType as Fa, storageOccupancyCapability as Fi, activateAlarmProfile as Fn, isDetectionMacroClass as Fr, NcConditionDescriptorSchema as Ft, LabelAttributionSchema as G, systemEventSummaryScheduleOf as Gi, applySecureOnArmEdit as Gn, isSystemDelivery as Gr, NcSnoozeInputSchema as Gt, FULL_IMAGE_BBOX as H, systemEventDeliveryProblems as Hi, applyBlockingEdit as Hn, isRetiredClearKey as Hr, NcRuleUpdateInputSchema as Ht, EMBEDDING_REQUIREMENTS_UNAVAILABLE as I, errMsg as Ia, subKindsOf as Ii, addonWidgetsSourceCapability as In, isDrawableSubjectPath as Ir, NcConditionsSchema as It, LockStateSchema as J, templateVarsFor as Ji, audioMetricsCapability as Jn, kebabToCamel as Jr, NcStateSummarySectionIdSchema as Jt, ListTrackRelationsInputSchema as K, systemEventSummarySplitOf as Ki, armRemovalReconcile as Kn, isSystemEventSummaryRule as Kr, NcSnoozeSchema as Kt, EVENT_DENSITY_BATCH_MAX as L, EventCategory as La, subjectPathSampleFromBox as Li, alarmDeviceSecureOnArm as Ln, isEventKindLabelKey as Lr, NcRuleActionSchema as Lt, DeclaredDevices as M, tuple as Ma, sensorRaisedOf as Mi, TrackRelationSchema as Mn, isAppLinkBase as Mr, NcAlarmSensorsInputSchema as Mt, DetectionSourceSchema as N, union as Na, servedTemplateVars as Ni, TrackSideSchema as Nn, isAudioClassName as Nr, NcAlarmSensorsSchema as Nt, DEFAULT_EVENT_COLOR as O, record as Oa, ruleGroupingApplies as Oi, TimelapseRuleSchema as On, gifFromMp4Args as Or, NC_TAXONOMY as Ot, EMBEDDING_MODEL_FAILED as P, unknown as Pa, startMoverUnderClearance as Pi, TrackSourceSchema as Pn, isDefaultAlarmProfileId as Pr, NcAlarmSettingsPatchSchema as Pt, MAX_TRACK_PURITIES as Q, zoneAnalyticsCapability as Qi, buildViewerLink as Qn, ncMediaPolicyError as Qr, NcTemplatePreviewSchema as Qt, EVENT_KIND_BY_CAP as R, subjectPathSvgPoints as Ri, alarmPanelCapability as Rn, isEventOwnerType as Rr, NcRuleInputSchema as Rt, BucketAccumulator as S, discriminatedUnion as Sa, resolvePoolMemoryPolicy as Si, SetTrackPurityResultSchema as Sn, ensureAlarmProfiles as Sr, NC_GROUPING_MAX_SEC as St, ClearTrackRelationResultSchema as T, number as Ta, ruleAutoTriggersAlarm as Ti, TRACK_RELATIONS_DEFAULT_LIMIT as Tn, faceGalleryCapability as Tr, NC_SNOOZE_MAX_MINUTES as Tt, FailureCounters as U, systemEventFamilyProblems as Ui, applyModeDelaysEdits as Un, isRootSuppliableStepId as Ur, NcScheduleSchema as Ut, FIRST_LEVEL_MACRO_CLASSES as V, syncActiveAlarmProfileSettings as Vi, alertEpisodePayload as Vn, isMediaOwnerType as Vr, NcRuleTargetSchema as Vt, LABEL_SUPPLY_MACRO as W, systemEventFilterApplies as Wi, applyNonBlockingEdit as Wn, isScheduleActive as Wr, NcSharedSequenceSchema as Wt, MAX_BIRTH_DECISION_RECORDS as X, viewerLinkBaseOf as Xi, buildEventKindDescriptor as Xn, mayWriteToLocation as Xr, NcTaxonomySchema as Xt, MAX_ARCHIVED_DEBUG_NOTES as Y, vectorDimFromBase64 as Yi, audioModeOf as Yn, linkedStepOf as Yr, NcSystemEventKindSchema as Yt, MAX_BIRTH_LATENCY_PROXY_MS as Z, withSystemEventClasses as Zi, buildSubjectPath as Zn, memoizePinnedFfmpeg as Zr, NcTemplatePreviewInputSchema as Zt, AlarmArmModeSchema as _, sleep as _a, resolveDeliveryParams as _i, SCENE_DEFAULT_UNCOVERED_POLICY as _n, embeddingModelFailedError as _r, NC_CONFIRM_DEFAULT_TIMEOUT_MS as _t, CLIP_EMBEDDING_STEP_ID as a, CamProfileSchema as aa, paletteResultSchema as ai, RECORDING_SOURCE_CAMSTACK_ADDON as an, coreBlockIdFromAddonId as ar, NC_ALARM_DELAY_FIELDS as at, BaseDevice as b, array as ba, resolveModeNotifyPolicy as bi, SceneMonitorSchema as bn, embeddingRequirementsUnavailableError as br, NC_DEFAULT_SNOOZE_MINUTES as bt, readClusterModelPinStrict as c, RECORD_QUERY_MAX as ca, pickFaceRescoreIntervalMinutes as ci, RetrainOriginSchema as cn, deleteAlarmProfile as cr, NC_ALARM_SYSTEM_EVENT_KINDS as ct, APPEARANCE_BIN_COUNT as d, defineCustomActions as da, projectSubjectPath as di, SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX as dn, deriveRecordingMode as dr, NC_AUDIO_CONFIRM_WINDOW_SEC_DEFAULT as dt, canonicalHash as ea, normalizeNcCapTarget as ei, OPS_LOG_DEFAULT_LIMIT as en, calendarEventLocalSpan as er, MOTION_CLOSE_AFTER_MS as et, APPEARANCE_BLOCKS as f, defineRecordKinds as fa, readDeviceStateFrom as fi, SCENE_CONFIRM_DEFAULT_TIMEOUT_MS as fn, describeSystemEventDeliveryProblem as fr, NC_CLIP_POST_ROLL_DEFAULT_SEC as ft, ActionTargetResolver as g, normalizeNodeId as ga, resolveClipSearchMinScore as gi, SCENE_DEFAULT_QUIET_SECONDS as gn, embeddingEncoderCapability as gr, NC_CONFIRM_DEFAULT_MAX_IMAGE_PX as gt, AUDIO_MACRO_LABELS as h, nodePin as ha, renameAlarmProfile as hi, SCENE_DEFAULT_OBSERVATION_SPACING_SEC as hn, deviceRemovalHookCapability as hr, NC_CONDITION_CATALOG as ht, CLIP_TEXT_MODELS as i, CAP_ADVANCE_FIELDS as ia, paintHex as ii, RECORDING_EXPORT_MAX_READ_BYTES as in, consumableLowPercentOf as ir, NC_ALARM_DEFAULT_TRIGGERED_DURATION_SEC as it, DETECTION_PIPELINE_CAP_NAME as j, templateLiteral as ja, secureActuationFor as ji, TrackRelationKindSchema as jn, isAlertEpisodeSeverity as jr, NcAlarmPostTriggeredActionSchema as jt, DEFAULT_TIMELAPSE_PREVIEW_TEXT as k, strictObject as ka, ruleKindOf as ki, TrackPlacementSchema as kn, isAlarmControllableCap as kr, NC_TEMPLATE_VARS as kt, resolveClusterModelPin as l, createEvent as la, pipelineAnalyticsCapability as li, RetrainStatusSchema as ln, deriveDetailCropRect as lr, NC_ALARM_TRIGGERED_MAX_SEC as lt, ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT as m, isDeviceScopedCap as ma, readTimelapseGeneratedAt as mi, SCENE_DEFAULT_CHECK_INTERVAL_SEC as mn, deviceAttentionKind as mr, NC_CLIP_RETENTION_MAX_SEC as mt, DEFAULT_CLIP_MODEL as n, isSourceCap as na, notificationRulesCapability as ni, PackageLlmVerdictSchema as nn, cloneAlarmSettings as nr, MotionTriggeredBySchema as nt, CLUSTER_MODEL_OWNER_ADDON_ID as o, InvalidRecordError as oa, parseAlertEpisodePayload as oi, RebuildObjectEmbeddingsRefusalSchema as on, cosineSimilarity as or, NC_ALARM_DELAY_MAX_SEC as ot, APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT as p, hydrateSchema as pa, readMotionTriggeredBy as pi, SCENE_DEFAULT_ANCHOR_THRESHOLD as pn, describeSystemEventFamilyProblem as pr, NC_CLIP_PRE_ROLL_DEFAULT_SEC as pt, ListTrackRelationsResultSchema as q, templateCarriesSummary as qi, assertTimelapseCadences as qn, isVectorIndexDimConflict as qr, NcSnoozeSuppressedSchema as qt, CLIP_IMAGE_MODELS as r, BaseAddon as ra, occupancyScope as ri, PoolMemoryWatchdog as rn, consumableFormOf as rr, NC_ALARM_DEFAULT_PROFILE_ID as rt, FACE_EMBEDDING_STEP_ID as s, RECORD_MAX_DATA_BYTES as sa, parseProcStatus as si, RetrainDismissedSchema as sn, createAlarmProfile as sr, NC_ALARM_NOTIFY_FIELDS as st, BUILTIN_CLIP_MODELS as t, evaluateSensorEdge as ta, normalizeNcMediaPolicy as ti, OpsLogEntrySchema as tn, classifyRetrainReview as tr, MediaFileKindEnum as tt, ACTION_TARGET_INVALIDATION_EVENTS as u, customAction as ua, plateGalleryCapability as ui, RetrainVerdictSubjectSchema as un, derivePostTriggeredAction as ur, NC_AUDIO_CONFIRM_HITS_DEFAULT as ut, ArchivedDebugNoteSchema as v, ZodObject as va, resolveLocationMode as vi, SCENE_DIVERGED as vn, embeddingRefusalOf as vr, NC_CONSUMABLE_LOW_PERCENT_DEFAULT as vt, ClearTrackRelationInputSchema as w, looseObject as wa, rootSupplyServes as wi, TIMELAPSE_DENSE_FLOOR_SEC as wn, evictionPolicyOfLocation as wr, NC_SENSOR_TRANSITION_KINDS as wt, BirthDecisionRecordSchema as x, boolean as xa, resolveNcMediaImage as xi, SetTrackPurityInputSchema as xn, encodeVectorBase64 as xr, NC_GROUPING_DEFAULT_SEC as xt, BIRTH_DECISION_DEFAULT_LIMIT as y, _enum as ya, resolveModeDelays as yi, SCENE_RESET_RECAPTURES as yn, embeddingRequirementsFailedError as yr, NC_CONSUMABLE_SYSTEM_EVENT_KINDS as yt, EVENT_OWNER_TYPES as z, summarizeReview as zi, alertEpisodeId as zn, isKnownTemplateVar as zr, NcRulePatchSchema as zt };
101924
+ export { MAX_TRACK_RELATIONS as $, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as $i, bundledCamstack as $n, normalizeNcAction as $r, NcTemplateVarDescriptorSchema as $t, DETECTION_MACRO_CLASSES as A, strictObject as Aa, sceneMonitorCapability as Ai, TrackPuritySchema as An, isAlertEpisodeOpen as Ar, NcAlarmConfigSchema as At, EXPORT_DENSE_MAX_RANGES as B, sunTimes as Bi, alertEpisodeKind as Bn, isLabelSupplyStepId as Br, NcRuleSchema as Bt, COCO_TO_MACRO as C, discriminatedUnion as Ca, retrainRevisionConflictMessage as Ci, SetTrackRelationInputSchema as Cn, eventKindLabel as Cr, NC_GROUPING_MIN_SEC as Ct, DEFAULT_DETAIL_CROP_CONVENTION as D, object as Da, ruleDeviceCompatCapQueries as Di, TimelapseRulePatchSchema as Dn, gifDeriveSpeed as Dr, NC_SYSTEM_EVENT_KIND_GROUP_SPECS as Dt, CoverStateSchema as E, number as Ea, ruleBelongsToAlarm as Ei, TimelapseRuleInputSchema as En, failureContributionCapability as Er, NC_STATE_SUMMARY_SECTION_IDS as Et, EMBEDDING_REQUIREMENTS_FAILED as F, unknown as Fa, storageOccupancyCapability as Fi, activateAlarmProfile as Fn, isDetectionMacroClass as Fr, NcConditionDescriptorSchema as Ft, LabelAttributionSchema as G, systemEventSummaryScheduleOf as Gi, applySecureOnArmEdit as Gn, isSystemDelivery as Gr, NcSnoozeInputSchema as Gt, FULL_IMAGE_BBOX as H, systemEventDeliveryProblems as Hi, applyBlockingEdit as Hn, isRetiredClearKey as Hr, NcRuleUpdateInputSchema as Ht, EMBEDDING_REQUIREMENTS_UNAVAILABLE as I, DeviceType as Ia, subKindsOf as Ii, addonWidgetsSourceCapability as In, isDrawableSubjectPath as Ir, NcConditionsSchema as It, LockStateSchema as J, templateVarsFor as Ji, audioMetricsCapability as Jn, kebabToCamel as Jr, NcStateSummarySectionIdSchema as Jt, ListTrackRelationsInputSchema as K, systemEventSummarySplitOf as Ki, armRemovalReconcile as Kn, isSystemEventSummaryRule as Kr, NcSnoozeSchema as Kt, EVENT_DENSITY_BATCH_MAX as L, errMsg as La, subjectPathSampleFromBox as Li, alarmDeviceSecureOnArm as Ln, isEventKindLabelKey as Lr, NcRuleActionSchema as Lt, DeclaredDevices as M, templateLiteral as Ma, sensorRaisedOf as Mi, TrackRelationSchema as Mn, isAppLinkBase as Mr, NcAlarmSensorsInputSchema as Mt, DetectionSourceSchema as N, tuple as Na, servedTemplateVars as Ni, TrackSideSchema as Nn, isAudioClassName as Nr, NcAlarmSensorsSchema as Nt, DEFAULT_EVENT_COLOR as O, partialRecord as Oa, ruleGroupingApplies as Oi, TimelapseRuleSchema as On, gifFromMp4Args as Or, NC_TAXONOMY as Ot, EMBEDDING_MODEL_FAILED as P, union as Pa, startMoverUnderClearance as Pi, TrackSourceSchema as Pn, isDefaultAlarmProfileId as Pr, NcAlarmSettingsPatchSchema as Pt, MAX_TRACK_PURITIES as Q, zoneAnalyticsCapability as Qi, buildViewerLink as Qn, ncMediaPolicyError as Qr, NcTemplatePreviewSchema as Qt, EVENT_KIND_BY_CAP as R, EventCategory as Ra, subjectPathSvgPoints as Ri, alarmPanelCapability as Rn, isEventOwnerType as Rr, NcRuleInputSchema as Rt, BucketAccumulator as S, boolean as Sa, resolvePoolMemoryPolicy as Si, SetTrackPurityResultSchema as Sn, ensureAlarmProfiles as Sr, NC_GROUPING_MAX_SEC as St, ClearTrackRelationResultSchema as T, looseObject as Ta, ruleAutoTriggersAlarm as Ti, TRACK_RELATIONS_DEFAULT_LIMIT as Tn, faceGalleryCapability as Tr, NC_SNOOZE_MAX_MINUTES as Tt, FailureCounters as U, systemEventFamilyProblems as Ui, applyModeDelaysEdits as Un, isRootSuppliableStepId as Ur, NcScheduleSchema as Ut, FIRST_LEVEL_MACRO_CLASSES as V, syncActiveAlarmProfileSettings as Vi, alertEpisodePayload as Vn, isMediaOwnerType as Vr, NcRuleTargetSchema as Vt, LABEL_SUPPLY_MACRO as W, systemEventFilterApplies as Wi, applyNonBlockingEdit as Wn, isScheduleActive as Wr, NcSharedSequenceSchema as Wt, MAX_BIRTH_DECISION_RECORDS as X, viewerLinkBaseOf as Xi, buildEventKindDescriptor as Xn, mayWriteToLocation as Xr, NcTaxonomySchema as Xt, MAX_ARCHIVED_DEBUG_NOTES as Y, vectorDimFromBase64 as Yi, audioModeOf as Yn, linkedStepOf as Yr, NcSystemEventKindSchema as Yt, MAX_BIRTH_LATENCY_PROXY_MS as Z, withSystemEventClasses as Zi, buildSubjectPath as Zn, memoizePinnedFfmpeg as Zr, NcTemplatePreviewInputSchema as Zt, AlarmArmModeSchema as _, normalizeNodeId as _a, resolveDeliveryParams as _i, SCENE_DEFAULT_UNCOVERED_POLICY as _n, embeddingModelFailedError as _r, NC_CONFIRM_DEFAULT_TIMEOUT_MS as _t, CLIP_EMBEDDING_STEP_ID as a, CamProfileSchema as aa, paletteResultSchema as ai, RECORDING_SOURCE_CAMSTACK_ADDON as an, coreBlockIdFromAddonId as ar, NC_ALARM_DELAY_FIELDS as at, BaseDevice as b, _enum as ba, resolveModeNotifyPolicy as bi, SceneMonitorSchema as bn, embeddingRequirementsUnavailableError as br, NC_DEFAULT_SNOOZE_MINUTES as bt, readClusterModelPinStrict as c, RECORD_QUERY_MAX as ca, pickFaceRescoreIntervalMinutes as ci, RetrainOriginSchema as cn, deleteAlarmProfile as cr, NC_ALARM_SYSTEM_EVENT_KINDS as ct, APPEARANCE_BIN_COUNT as d, defineAddonMigrations as da, projectSubjectPath as di, SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX as dn, deriveRecordingMode as dr, NC_AUDIO_CONFIRM_WINDOW_SEC_DEFAULT as dt, canonicalHash as ea, normalizeNcCapTarget as ei, OPS_LOG_DEFAULT_LIMIT as en, calendarEventLocalSpan as er, MOTION_CLOSE_AFTER_MS as et, APPEARANCE_BLOCKS as f, defineCustomActions as fa, readDeviceStateFrom as fi, SCENE_CONFIRM_DEFAULT_TIMEOUT_MS as fn, describeSystemEventDeliveryProblem as fr, NC_CLIP_POST_ROLL_DEFAULT_SEC as ft, ActionTargetResolver as g, nodePin as ga, resolveClipSearchMinScore as gi, SCENE_DEFAULT_QUIET_SECONDS as gn, embeddingEncoderCapability as gr, NC_CONFIRM_DEFAULT_MAX_IMAGE_PX as gt, AUDIO_MACRO_LABELS as h, isDeviceScopedCap as ha, renameAlarmProfile as hi, SCENE_DEFAULT_OBSERVATION_SPACING_SEC as hn, deviceRemovalHookCapability as hr, NC_CONDITION_CATALOG as ht, CLIP_TEXT_MODELS as i, CAP_ADVANCE_FIELDS as ia, paintHex as ii, RECORDING_EXPORT_MAX_READ_BYTES as in, consumableLowPercentOf as ir, NC_ALARM_DEFAULT_TRIGGERED_DURATION_SEC as it, DETECTION_PIPELINE_CAP_NAME as j, string as ja, secureActuationFor as ji, TrackRelationKindSchema as jn, isAlertEpisodeSeverity as jr, NcAlarmPostTriggeredActionSchema as jt, DEFAULT_TIMELAPSE_PREVIEW_TEXT as k, record as ka, ruleKindOf as ki, TrackPlacementSchema as kn, isAlarmControllableCap as kr, NC_TEMPLATE_VARS as kt, resolveClusterModelPin as l, createEvent as la, pipelineAnalyticsCapability as li, RetrainStatusSchema as ln, deriveDetailCropRect as lr, NC_ALARM_TRIGGERED_MAX_SEC as lt, ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT as m, hydrateSchema as ma, readTimelapseGeneratedAt as mi, SCENE_DEFAULT_CHECK_INTERVAL_SEC as mn, deviceAttentionKind as mr, NC_CLIP_RETENTION_MAX_SEC as mt, DEFAULT_CLIP_MODEL as n, isSourceCap as na, notificationRulesCapability as ni, PackageLlmVerdictSchema as nn, cloneAlarmSettings as nr, MotionTriggeredBySchema as nt, CLUSTER_MODEL_OWNER_ADDON_ID as o, InvalidRecordError as oa, parseAlertEpisodePayload as oi, RebuildObjectEmbeddingsRefusalSchema as on, cosineSimilarity as or, NC_ALARM_DELAY_MAX_SEC as ot, APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT as p, defineRecordKinds as pa, readMotionTriggeredBy as pi, SCENE_DEFAULT_ANCHOR_THRESHOLD as pn, describeSystemEventFamilyProblem as pr, NC_CLIP_PRE_ROLL_DEFAULT_SEC as pt, ListTrackRelationsResultSchema as q, templateCarriesSummary as qi, assertTimelapseCadences as qn, isVectorIndexDimConflict as qr, NcSnoozeSuppressedSchema as qt, CLIP_IMAGE_MODELS as r, BaseAddon as ra, occupancyScope as ri, PoolMemoryWatchdog as rn, consumableFormOf as rr, NC_ALARM_DEFAULT_PROFILE_ID as rt, FACE_EMBEDDING_STEP_ID as s, RECORD_MAX_DATA_BYTES as sa, parseProcStatus as si, RetrainDismissedSchema as sn, createAlarmProfile as sr, NC_ALARM_NOTIFY_FIELDS as st, BUILTIN_CLIP_MODELS as t, evaluateSensorEdge as ta, normalizeNcMediaPolicy as ti, OpsLogEntrySchema as tn, classifyRetrainReview as tr, MediaFileKindEnum as tt, ACTION_TARGET_INVALIDATION_EVENTS as u, customAction as ua, plateGalleryCapability as ui, RetrainVerdictSubjectSchema as un, derivePostTriggeredAction as ur, NC_AUDIO_CONFIRM_HITS_DEFAULT as ut, ArchivedDebugNoteSchema as v, sleep as va, resolveLocationMode as vi, SCENE_DIVERGED as vn, embeddingRefusalOf as vr, NC_CONSUMABLE_LOW_PERCENT_DEFAULT as vt, ClearTrackRelationInputSchema as w, literal as wa, rootSupplyServes as wi, TIMELAPSE_DENSE_FLOOR_SEC as wn, evictionPolicyOfLocation as wr, NC_SENSOR_TRANSITION_KINDS as wt, BirthDecisionRecordSchema as x, array as xa, resolveNcMediaImage as xi, SetTrackPurityInputSchema as xn, encodeVectorBase64 as xr, NC_GROUPING_DEFAULT_SEC as xt, BIRTH_DECISION_DEFAULT_LIMIT as y, ZodObject as ya, resolveModeDelays as yi, SCENE_RESET_RECAPTURES as yn, embeddingRequirementsFailedError as yr, NC_CONSUMABLE_SYSTEM_EVENT_KINDS as yt, EVENT_OWNER_TYPES as z, summarizeReview as zi, alertEpisodeId as zn, isKnownTemplateVar as zr, NcRulePatchSchema as zt };
@@ -6568,6 +6568,53 @@ function emitReadiness(bus, params) {
6568
6568
  ts
6569
6569
  }));
6570
6570
  }
6571
+ /** Why a catalogue entry is not a runnable body of its declared kind. */
6572
+ var AddonMigrationDefinitionError = class extends Error {
6573
+ id;
6574
+ constructor(id, message) {
6575
+ super(`${id}: ${message}`);
6576
+ this.id = id;
6577
+ this.name = "AddonMigrationDefinitionError";
6578
+ }
6579
+ };
6580
+ /**
6581
+ * Bind a catalogue to the addon's ports. Throws {@link AddonMigrationDefinitionError} when
6582
+ * an entry's `bodyKind` does not match the body it carries, or is `sql` (a hub-only
6583
+ * body). A throwing body never escapes `execute`: it is reported as a failed result.
6584
+ */
6585
+ function defineAddonMigrations(catalogue, ports) {
6586
+ return catalogue.map((entry) => {
6587
+ const { meta } = entry;
6588
+ if ("plan" in entry) {
6589
+ if (meta.bodyKind !== "plan") throw new AddonMigrationDefinitionError(meta.id, `carries a plan body but declares "${meta.bodyKind}"`);
6590
+ return {
6591
+ meta,
6592
+ execute: () => guarded(async () => ({
6593
+ kind: "plan",
6594
+ plan: await entry.plan(ports)
6595
+ }))
6596
+ };
6597
+ }
6598
+ if (meta.bodyKind !== "procedure") throw new AddonMigrationDefinitionError(meta.id, `carries a procedure body but declares "${meta.bodyKind}"`);
6599
+ return {
6600
+ meta,
6601
+ execute: () => guarded(async () => ({
6602
+ kind: "procedure",
6603
+ result: await entry.procedure(ports)
6604
+ }))
6605
+ };
6606
+ });
6607
+ }
6608
+ async function guarded(work) {
6609
+ try {
6610
+ return await work();
6611
+ } catch (err) {
6612
+ return {
6613
+ kind: "failed",
6614
+ error: errMsg(err)
6615
+ };
6616
+ }
6617
+ }
6571
6618
  var NOT_RUN = {
6572
6619
  declared: false,
6573
6620
  snapshot: null,
@@ -14489,7 +14536,13 @@ var MigrationLedgerEntrySchema = object({
14489
14536
  /** Why it is `blocked` or `held` (`dependency-failed`, `snapshot-refused`, …). */
14490
14537
  reason: string().nullable(),
14491
14538
  nodeId: string().nullable(),
14492
- bootId: string().nullable()
14539
+ bootId: string().nullable(),
14540
+ /**
14541
+ * The catalogued meta of this id (description, body kind, store, `dependsOn`…),
14542
+ * joined by the engine from the catalogues it knows this boot. Absent when no
14543
+ * catalogue lists the id (a newer database).
14544
+ */
14545
+ meta: MigrationMetaSchema.optional()
14493
14546
  });
14494
14547
  /** A catalogued migration that is not applied, with where it stands. */
14495
14548
  var MigrationPendingEntrySchema = object({
@@ -80661,7 +80714,7 @@ var ExternalIdentityKeySchema = object({
80661
80714
  provider: string().min(1),
80662
80715
  subject: string().min(1)
80663
80716
  });
80664
- method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserInputSchema, UserSummarySchema, {
80717
+ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(_void(), object({ defaultPasswordInUse: boolean() }), { auth: "admin" }), method(CreateUserInputSchema, UserSummarySchema, {
80665
80718
  kind: "mutation",
80666
80719
  auth: "admin",
80667
80720
  access: "create"
@@ -93016,6 +93069,13 @@ Object.freeze({
93016
93069
  access: "view",
93017
93070
  role: "admin"
93018
93071
  },
93072
+ "userManagement.getAdminBootstrapStatus": {
93073
+ capName: "user-management",
93074
+ capScope: "system",
93075
+ addonId: null,
93076
+ access: "view",
93077
+ role: "admin"
93078
+ },
93019
93079
  "userManagement.getTotpStatus": {
93020
93080
  capName: "user-management",
93021
93081
  capScope: "system",
@@ -98789,8 +98849,9 @@ var STATE_SUMMARY_VARS = [
98789
98849
  ];
98790
98850
  var NC_TEMPLATE_VARS = [
98791
98851
  {
98792
- name: "camera",
98793
- label: "Camera",
98852
+ name: "device",
98853
+ label: "Device",
98854
+ description: "The device the event is about: the camera for a track, the appliance or sensor for a device event.",
98794
98855
  example: "Front door",
98795
98856
  group: "subject",
98796
98857
  families: ["rule", "timelapse"],
@@ -99175,6 +99236,16 @@ var NC_TEMPLATE_VARS = [
99175
99236
  kinds: ["system"],
99176
99237
  systemEventKinds: ["node-online", "node-offline"]
99177
99238
  },
99239
+ {
99240
+ name: "graceMin",
99241
+ label: "Update grace (minutes)",
99242
+ example: "10",
99243
+ group: "system",
99244
+ families: ["rule"],
99245
+ fields: [...RULE_TEXT],
99246
+ kinds: ["system"],
99247
+ systemEventKinds: ["node-offline"]
99248
+ },
99178
99249
  {
99179
99250
  name: "offlineFor",
99180
99251
  label: "Offline for",
@@ -99807,7 +99878,7 @@ function templateVarDeliveryApplies(d, ctx) {
99807
99878
  * descriptor so the whole rule stays in one line of code. */
99808
99879
  var CAPTION_VARS = {
99809
99880
  previewText: [
99810
- "camera",
99881
+ "device",
99811
99882
  "rule",
99812
99883
  "from",
99813
99884
  "to"
@@ -100757,7 +100828,7 @@ var TimelapseRuleInputSchema = object({
100757
100828
  * before this field existed still reads "Timelapse Camera front door" and
100758
100829
  * not the literal braces.
100759
100830
  */
100760
- var DEFAULT_TIMELAPSE_PREVIEW_TEXT = "Timelapse {{camera}}";
100831
+ var DEFAULT_TIMELAPSE_PREVIEW_TEXT = "Timelapse {{device}}";
100761
100832
  /**
100762
100833
  * Partial patch for an update — any subset of the INPUT fields, with NO
100763
100834
  * defaults (an absent key means "leave unchanged", never "reset to default").
@@ -102991,6 +103062,12 @@ Object.defineProperty(exports, "customAction", {
102991
103062
  return customAction;
102992
103063
  }
102993
103064
  });
103065
+ Object.defineProperty(exports, "defineAddonMigrations", {
103066
+ enumerable: true,
103067
+ get: function() {
103068
+ return defineAddonMigrations;
103069
+ }
103070
+ });
102994
103071
  Object.defineProperty(exports, "defineCustomActions", {
102995
103072
  enumerable: true,
102996
103073
  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-DAKPBZfa.js");
5
+ const require_clip_model_registry = require("../clip-model-registry-RvEPUqvS.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 { Si as resolvePoolMemoryPolicy, _r as embeddingModelFailedError, a as CLIP_EMBEDDING_STEP_ID, br as embeddingRequirementsUnavailableError, ga as normalizeNodeId, gr as embeddingEncoderCapability, i as CLIP_TEXT_MODELS, l as resolveClusterModelPin, n as DEFAULT_CLIP_MODEL, r as CLIP_IMAGE_MODELS, ra as BaseAddon, rn as PoolMemoryWatchdog, si as parseProcStatus, t as BUILTIN_CLIP_MODELS, yr as embeddingRequirementsFailedError } from "../clip-model-registry-D9BbIQ-h.mjs";
1
+ import { Si as resolvePoolMemoryPolicy, _a as normalizeNodeId, _r as embeddingModelFailedError, a as CLIP_EMBEDDING_STEP_ID, br as embeddingRequirementsUnavailableError, gr as embeddingEncoderCapability, i as CLIP_TEXT_MODELS, l as resolveClusterModelPin, n as DEFAULT_CLIP_MODEL, r as CLIP_IMAGE_MODELS, ra as BaseAddon, rn as PoolMemoryWatchdog, si as parseProcStatus, t as BUILTIN_CLIP_MODELS, yr as embeddingRequirementsFailedError } from "../clip-model-registry-CVajwmEk.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";
@@ -1,6 +1,6 @@
1
1
  import { a as e, i as t, n, o as r, r as i, t as a } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react__loadShare__.js-Cx9AsA5q.mjs";
2
2
  import { t as o } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-B3Wx5J80.mjs";
3
- import { a as s, c, d as l, f as u, i as d, l as f, m as p, n as m, o as h, p as g, r as _, s as v, t as y, u as b } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BwWOFFOc.mjs";
3
+ import { a as s, c, d as l, f as u, i as d, l as f, m as p, n as m, o as h, p as g, r as _, s as v, t as y, u as b } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BGdtpHOa.mjs";
4
4
  import { n as x, t as S } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-CkwmHEi0.mjs";
5
5
  import { t as C } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BDKliSzv.mjs";
6
6
  //#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
@@ -18,7 +18,7 @@ var e = {
18
18
  },
19
19
  "@camstack/types": {
20
20
  name: "@camstack/types",
21
- version: "1.2.467",
21
+ version: "1.2.468",
22
22
  scope: ["default"],
23
23
  loaded: !1,
24
24
  from: "addon_pipeline_analytics_widgets",
@@ -33,7 +33,7 @@ var e = {
33
33
  },
34
34
  "@camstack/ui-library": {
35
35
  name: "@camstack/ui-library",
36
- version: "1.2.366",
36
+ version: "1.2.367",
37
37
  scope: ["default"],
38
38
  loaded: !1,
39
39
  from: "addon_pipeline_analytics_widgets",