@camstack/addon-pipeline 1.2.196 → 1.2.198

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/audio-analyzer/index.js +2 -2
  2. package/dist/audio-analyzer/index.mjs +2 -2
  3. package/dist/{default-detection-model-CJdc8j83.js → default-detection-model-B5v8qEI0.js} +1 -1
  4. package/dist/{default-detection-model-BGBAmtEp.mjs → default-detection-model-CASpAESz.mjs} +1 -1
  5. package/dist/detection-pipeline/index.js +5 -5
  6. package/dist/detection-pipeline/index.mjs +4 -4
  7. package/dist/{dist-HG5geL9t.js → dist-BxP0SvPz.js} +215 -58
  8. package/dist/{dist-mYDK58Jp.mjs → dist-oFIHnD88.mjs} +198 -59
  9. package/dist/{lazy-sharp-DmAwZ0s9.js → lazy-sharp-VKOG3WW4.js} +1 -1
  10. package/dist/motion-wasm/index.js +2 -2
  11. package/dist/motion-wasm/index.mjs +1 -1
  12. package/dist/{node-xRsaPwBa.mjs → node-B4zETsJ9.mjs} +1 -1
  13. package/dist/{node--my8JTOW.js → node-BIKrNEtS.js} +1 -1
  14. package/dist/pipeline-runner/index.js +363 -6
  15. package/dist/pipeline-runner/index.mjs +362 -5
  16. package/dist/{retire-root-keys-KE6D6Xh_.js → prebuffer-DmBYRQWg.mjs} +83 -12
  17. package/dist/{retire-root-keys-DMolfhsP.mjs → prebuffer-DqdeLSsk.js} +118 -1
  18. package/dist/{process-memory-CoCSce63.js → process-memory-CMHOmj75.js} +1 -1
  19. package/dist/{process-memory-BDHR3lxe.mjs → process-memory-D9xYwm6L.mjs} +1 -1
  20. package/dist/recorder/index.js +152 -31
  21. package/dist/recorder/index.mjs +148 -27
  22. package/dist/{segment-demux-js-CBynn9Gh.js → segment-demux-js-DLwL1vmq.js} +1 -1
  23. package/dist/{segment-demux-js-CXvgKfsn.mjs → segment-demux-js-DZysrgdC.mjs} +1 -1
  24. package/dist/session-decode/decode-worker-child.js +2 -2
  25. package/dist/session-decode/decode-worker-child.mjs +1 -1
  26. package/dist/stream-broker/_stub.js +29 -32
  27. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BMsB2MVD.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-C2eTdxvd.mjs} +3 -3
  28. package/dist/stream-broker/{_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-B_NVJXAy.mjs → _virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BcjLrxhF.mjs} +1 -1
  29. package/dist/stream-broker/{_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CBxobiZW.mjs → _virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Dj_qoc1e.mjs} +1 -1
  30. package/dist/stream-broker/demux-worker-child.js +1 -1
  31. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  32. package/dist/stream-broker/{hostInit-CZig_taJ.mjs → hostInit-C8tu7NS4.mjs} +3 -3
  33. package/dist/stream-broker/index.js +452 -541
  34. package/dist/stream-broker/index.mjs +448 -537
  35. package/dist/stream-broker/remoteEntry.js +1 -1
  36. package/dist/{worker-protocol-DCsi4YS1.js → worker-protocol-D2mMjUXv.js} +1 -1
  37. package/dist/{worker-protocol-C0R1DDC0.mjs → worker-protocol-DFlZm_wr.mjs} +1 -1
  38. package/package.json +1 -1
@@ -9087,17 +9087,29 @@ var HHMM = /^([01]\d|2[0-3]):[0-5]\d$/;
9087
9087
  /**
9088
9088
  * DERIVED per-camera storage summary — the single field cheap consumers read
9089
9089
  * (the viewer's status dot, the camera list) instead of walking `bands`:
9090
- * - `off` — no band covers the camera (or it is disabled).
9091
- * - `events` — every band records around triggers only.
9092
- * - `continuous` — at least one band records continuously.
9093
- *
9094
- * NEVER authored: the recorder stamps it from the authoritative `bands` on
9095
- * every save (`activeModeForConfig`). Writing it has no effect.
9090
+ * - `off` — no band covers the camera (or it is disabled).
9091
+ * - `events` — every band records around triggers only.
9092
+ * - `continuous` — at least one band records continuously.
9093
+ * - `on-device-decision`— the DEVICE decides: recording runs for as long as the
9094
+ * camera raises its own `recording-signal` level (a robot that cleans). There
9095
+ * is no schedule to author, because there is no hour to program — see
9096
+ * {@link RecordingConfigSchema}`.deviceDecision`.
9097
+ *
9098
+ * NEVER authored: the recorder stamps it from the authoritative intent
9099
+ * (`bands` + `deviceDecision`) on every save (`activeModeForConfig`). Writing it
9100
+ * has no effect.
9101
+ *
9102
+ * `on-device-decision` is named for WHO decides, not for how the recording is
9103
+ * requested. `on-demand` was rejected: in this repo's vocabulary a "demand" is
9104
+ * something the operator makes (the live gate is the recorder's own "demand
9105
+ * window"), and a knob whose name suggests the operator starts it while the
9106
+ * device actually does is the D62 shape — a control nobody can predict.
9096
9107
  */
9097
9108
  var RecordingStorageModeSchema = _enum([
9098
9109
  "off",
9099
9110
  "events",
9100
- "continuous"
9111
+ "continuous",
9112
+ "on-device-decision"
9101
9113
  ]);
9102
9114
  /**
9103
9115
  * Le macro classi che possono aprire una finestra di registrazione — le stesse
@@ -9147,22 +9159,7 @@ var RecordingTriggersSchema = object({
9147
9159
  * il livello: un contatto trovato già aperto al riavvio del runner non fa
9148
9160
  * registrare.
9149
9161
  */
9150
- sensorDeviceIds: array(number().int().positive()).min(1).max(16).refine(noDuplicates, { message: "sensorDeviceIds must not repeat a device" }).optional(),
9151
- /**
9152
- * La camera registra per tutta la durata del SEGNALE che lei stessa
9153
- * pubblica — la cap `recording-signal` (`active: true` mentre il device è in
9154
- * funzione: un robot che pulisce). È un LIVELLO, non un fronte: la finestra
9155
- * resta aperta finché il segnale è alto e si chiude `postBufferSec` dopo la
9156
- * caduta, così una pulizia di quaranta minuti è UNA clip.
9157
- *
9158
- * Non nomina un device: il segnale è della camera stessa, tenuto fresco dal
9159
- * suo provider (D224); il recorder lo ascolta su `DeviceStateChanged` e lo
9160
- * riconcilia leggendo la slice via RPC, con un tetto oltre il quale un
9161
- * segnale mai abbassato (un evento perso) non può tenere aperta una
9162
- * registrazione (D11). Vedi `recorder/addon/band-decision.ts`
9163
- * (`holdTrigger` / `releaseTrigger`).
9164
- */
9165
- deviceSignal: boolean().optional()
9162
+ sensorDeviceIds: array(number().int().positive()).min(1).max(16).refine(noDuplicates, { message: "sensorDeviceIds must not repeat a device" }).optional()
9166
9163
  });
9167
9164
  /**
9168
9165
  * Mode of a single recording band — the recorder per-band vocabulary.
@@ -9192,6 +9189,24 @@ var RecordingBandSchema = object({
9192
9189
  end: string().regex(HHMM),
9193
9190
  mode: RecordingBandModeSchema,
9194
9191
  triggers: RecordingBandTriggersSchema.optional(),
9192
+ /**
9193
+ * RETIRED (D381). A band no longer carries a pre-buffer of its own.
9194
+ *
9195
+ * It was the retroactive KEEP bound — which already-written segments survive
9196
+ * a trigger — and it had to be at least as wide as the widest pre-roll the
9197
+ * broker could serve, or the gate would delete the seconds the ring had just
9198
+ * handed the writer. That "at least as wide as" is the tell: it was a second
9199
+ * expression of the broker's retention, in different units, in a different
9200
+ * addon, with an invariant the operator had to maintain by hand. The keep
9201
+ * bound is now derived from the one prebuffer ceiling and there is nothing
9202
+ * left to configure here.
9203
+ *
9204
+ * The key survives in the SHAPE so a config written before that record still
9205
+ * parses and can be migrated deliberately — `RecordingBandSchema` is not
9206
+ * strict, so simply deleting it would strip an operator's value in silence on
9207
+ * the next save (the failure D380 came one commit from shipping). Nothing
9208
+ * reads it: {@link stripRetiredBandPreBufferSec} removes it on load.
9209
+ */
9195
9210
  preBufferSec: number().min(0).optional(),
9196
9211
  postBufferSec: number().min(0).optional()
9197
9212
  });
@@ -9209,29 +9224,56 @@ var RecordingBandSchema = object({
9209
9224
  * `postBufferSec` must therefore exceed one segment length plus the attach
9210
9225
  * latency (ffmpeg spawn + RTSP dial), or the window closes before the first
9211
9226
  * segment is ever finalized and the camera records nothing anyway. At the 10 s
9212
- * default segment length, 30 s leaves room for two full segments. `preBufferSec`
9213
- * is retroactive only — it costs nothing at record time, it merely keeps
9214
- * already-written segments.
9215
- *
9216
- * ## Why `preBufferSec` is 15 and not one segment length
9217
- *
9218
- * It has to cover the broker's RECORDING pre-roll, which is media handed to the
9219
- * writer from BEFORE the trigger (D192/D193). If this bound were narrower, the
9220
- * keep gate would delete the very seconds the ring just supplied — two
9221
- * authorities disagreeing about the same footage, which is the failure D191 was
9222
- * written against. It is therefore set to `RECORDING_PRE_ROLL_MAX_MS` (15 s),
9223
- * the widest window the broker can be configured to serve, so an operator
9224
- * raising the cluster pre-roll can never walk past the gate silently. The
9225
- * addon-side guard is
9226
- * `packages/addon-pipeline/src/recorder/addon/__tests__/band-decision.spec.ts`.
9227
- *
9228
- * An EXPLICIT `0` is left alone: that is an operator statement, not an omission,
9229
- * and it is excluded from that invariant by name.
9230
- */
9231
- var DEFAULT_EVENTS_BAND_BUFFER_SEC = {
9232
- preBufferSec: 15,
9233
- postBufferSec: 30
9234
- };
9227
+ * default segment length, 30 s leaves room for two full segments.
9228
+ *
9229
+ * ## There is no `preBufferSec` here any more (D381)
9230
+ *
9231
+ * There used to be, at 15 s, and its whole justification was that it had to
9232
+ * cover the widest pre-roll the broker could serve. A number whose only
9233
+ * correct value is another subsystem's ceiling is not a setting; it is that
9234
+ * ceiling, restated where it can drift. The keep bound is derived from the
9235
+ * prebuffer ceiling directly now, in `band-decision.ts`, so an operator
9236
+ * raising the prebuffer cannot walk past the gate at all rather than merely
9237
+ * being warned not to.
9238
+ */
9239
+ var DEFAULT_EVENTS_BAND_BUFFER_SEC = { postBufferSec: 30 };
9240
+ /**
9241
+ * Drop the RETIRED band `preBufferSec` from a persisted recording config.
9242
+ *
9243
+ * Explicit, and it reports what it removed, because the alternative is a
9244
+ * silent strip: `RecordingBandSchema` is a plain `z.object`, so the key
9245
+ * survives a parse and disappears on the next save with no line anywhere. An
9246
+ * operator who had typed a number would find it gone and nothing would say
9247
+ * when or why.
9248
+ *
9249
+ * Nothing is carried forward: the value it held was always required to be at
9250
+ * least the broker's widest pre-roll, and the gate is now derived from exactly
9251
+ * that ceiling. Every configuration that was legal therefore keeps a keep-gate
9252
+ * at least as wide as the one it had — including an explicit `0`, which widens.
9253
+ * That is deliberate and it is the only behaviour change: a band that kept
9254
+ * nothing before its trigger now keeps up to the prebuffer ceiling of
9255
+ * already-written footage, which is media that exists either way.
9256
+ */
9257
+ function stripRetiredBandPreBufferSec(config) {
9258
+ const strippedBands = [];
9259
+ const bands = config.bands.map((band, index) => {
9260
+ if (band.preBufferSec === void 0) return band;
9261
+ strippedBands.push(index);
9262
+ const { preBufferSec: _retired, ...rest } = band;
9263
+ return rest;
9264
+ });
9265
+ if (strippedBands.length === 0) return {
9266
+ config,
9267
+ strippedBands
9268
+ };
9269
+ return {
9270
+ config: {
9271
+ ...config,
9272
+ bands
9273
+ },
9274
+ strippedBands
9275
+ };
9276
+ }
9235
9277
  DEFAULT_EVENTS_BAND_BUFFER_SEC.postBufferSec * 1e3;
9236
9278
  /**
9237
9279
  * Per-device retention overrides. Every field is optional; an unset or `0`
@@ -9280,8 +9322,29 @@ var RecordingConfigSchema = object({
9280
9322
  * "off" is the absence of a covering band, never a band value.
9281
9323
  */
9282
9324
  bands: array(RecordingBandSchema).default([]),
9325
+ /**
9326
+ * THE device-decided intent: record for as long as the camera itself raises
9327
+ * `recording-signal` (`active: true` while the device is in function — a
9328
+ * robot that cleans). AUTHORED, unlike `mode`, and the only authored
9329
+ * recording intent that is not a band.
9330
+ *
9331
+ * It carries NO schedule on purpose. A band is an HOUR, and this feature has
9332
+ * no hour to program: the device decides. What it costs the operator is one
9333
+ * flag — "this camera can record on its own" — and what it buys is the same
9334
+ * hold/release the recorder already implements (D371, `holdTrigger` /
9335
+ * `releaseTrigger`): the window opens on the rise, stays open for the whole
9336
+ * job however long it is, and closes one pad after the fall.
9337
+ *
9338
+ * EXCLUSIVE with `bands` (below): two authorities deciding when the same
9339
+ * camera records is the D62 failure. `off` remains `enabled: false`, so an
9340
+ * operator switching this camera off is REPORTED off, never as broken.
9341
+ */
9342
+ deviceDecision: boolean().optional(),
9283
9343
  retention: RecordingRetentionSchema.optional()
9284
- }).strict();
9344
+ }).strict().refine((config) => config.deviceDecision !== true || config.bands.length === 0, {
9345
+ message: "deviceDecision is a whole-config mode and carries no schedule: it cannot be combined with bands",
9346
+ path: ["bands"]
9347
+ });
9285
9348
  /**
9286
9349
  * Derive the {@link RecordingStorageModeSchema} summary from the authoritative
9287
9350
  * bands: `continuous` when any band records continuously, `events` when a band
@@ -9294,7 +9357,9 @@ var RecordingConfigSchema = object({
9294
9357
  * bug this field was added to fix.
9295
9358
  */
9296
9359
  function deriveRecordingMode(config) {
9297
- if (!config.enabled || config.bands.length === 0) return "off";
9360
+ if (!config.enabled) return "off";
9361
+ if (config.deviceDecision === true) return "on-device-decision";
9362
+ if (config.bands.length === 0) return "off";
9298
9363
  if (config.bands.some((band) => band.mode === "continuous")) return "continuous";
9299
9364
  return "events";
9300
9365
  }
@@ -9322,6 +9387,85 @@ function resolveRecordingProfiles(assigned, override) {
9322
9387
  const preferred = assigned.filter((profile) => DEFAULT_RECORDING_PROFILES.includes(profile));
9323
9388
  return preferred.length > 0 ? preferred : [...assigned];
9324
9389
  }
9390
+ /** Trigger keys that survive D380 — a band carrying one of these is a real band. */
9391
+ var SURVIVING_TRIGGER_KEYS = [
9392
+ "motion",
9393
+ "audioThresholdDbfs",
9394
+ "objectClasses",
9395
+ "sensorDeviceIds"
9396
+ ];
9397
+ function isRecord$1(value) {
9398
+ return typeof value === "object" && value !== null && !Array.isArray(value);
9399
+ }
9400
+ function listensToLegacySignal(band) {
9401
+ return isRecord$1(band) && isRecord$1(band.triggers) && band.triggers.deviceSignal === true;
9402
+ }
9403
+ function hasSurvivingTrigger(band) {
9404
+ const triggers = band.triggers;
9405
+ if (!isRecord$1(triggers)) return false;
9406
+ return SURVIVING_TRIGGER_KEYS.some((key) => triggers[key] !== void 0);
9407
+ }
9408
+ function withoutLegacySignal(band) {
9409
+ const triggers = band.triggers;
9410
+ if (!isRecord$1(triggers)) return band;
9411
+ const { deviceSignal: _retired, ...rest } = triggers;
9412
+ return {
9413
+ ...band,
9414
+ triggers: rest
9415
+ };
9416
+ }
9417
+ /**
9418
+ * Turn a config stored under D371 (`bands[].triggers.deviceSignal: true`) into
9419
+ * a D380 one (`deviceDecision: true`, no bands). Pure, total and IDEMPOTENT —
9420
+ * a row with no legacy key comes back as the SAME reference, `migrated: false`.
9421
+ *
9422
+ * ## Why the schema cannot be left to do this
9423
+ *
9424
+ * `RecordingTriggersSchema` is a non-strict `z.object`, so the retired key is
9425
+ * SILENTLY STRIPPED on read. The camera whose only trigger it was would parse
9426
+ * cleanly into an `events` band that lists nothing — "enabled, and records
9427
+ * nothing, forever", the exact shape `eventsBandCanEverDemand` exists to shout
9428
+ * about, reached without a single line in the log. On the reference hub that is
9429
+ * camera 4374, the one camera an operator had configured by hand.
9430
+ *
9431
+ * `enabled` is carried through untouched: a camera the operator had switched
9432
+ * OFF comes out of a migration still off (D62).
9433
+ */
9434
+ function migrateLegacyDeviceSignalConfig(raw) {
9435
+ const unchanged = {
9436
+ value: raw,
9437
+ migrated: false,
9438
+ strippedOnly: false
9439
+ };
9440
+ if (!isRecord$1(raw) || !Array.isArray(raw.bands)) return unchanged;
9441
+ if (!raw.bands.some(listensToLegacySignal)) return unchanged;
9442
+ const kept = [];
9443
+ for (const band of raw.bands) {
9444
+ if (!listensToLegacySignal(band) || !isRecord$1(band)) {
9445
+ kept.push(band);
9446
+ continue;
9447
+ }
9448
+ if (hasSurvivingTrigger(band)) kept.push(withoutLegacySignal(band));
9449
+ }
9450
+ if (kept.length > 0) return {
9451
+ value: {
9452
+ ...raw,
9453
+ bands: kept
9454
+ },
9455
+ migrated: false,
9456
+ strippedOnly: true
9457
+ };
9458
+ const { mode: _derived, ...rest } = raw;
9459
+ return {
9460
+ value: {
9461
+ ...rest,
9462
+ bands: [],
9463
+ deviceDecision: true
9464
+ },
9465
+ migrated: true,
9466
+ strippedOnly: false
9467
+ };
9468
+ }
9325
9469
  /**
9326
9470
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
9327
9471
  *
@@ -23297,11 +23441,7 @@ var CameraAudioStatusSchema = object({
23297
23441
  });
23298
23442
  /** Recording block — null when no recording cap is active for this device. */
23299
23443
  var CameraRecordingStatusSchema = object({
23300
- mode: _enum([
23301
- "off",
23302
- "continuous",
23303
- "events"
23304
- ]),
23444
+ mode: RecordingStorageModeSchema,
23305
23445
  active: boolean(),
23306
23446
  storageBytes: number()
23307
23447
  });
@@ -29876,11 +30016,10 @@ DeviceType.Camera, DeviceType.Sensor, DeviceType.Switch, method(object({ deviceI
29876
30016
  var RecordingStatusSchema = object({
29877
30017
  deviceId: number(),
29878
30018
  enabled: boolean(),
29879
- activeMode: _enum([
29880
- "off",
29881
- "continuous",
29882
- "events"
29883
- ]),
30019
+ /** THE derived storage mode, from the one definition
30020
+ * (`deriveRecordingMode`) — never a second enum. A duplicated list is how
30021
+ * `on-device-decision` could have reached the recorder and not the status. */
30022
+ activeMode: RecordingStorageModeSchema,
29884
30023
  nodeId: string(),
29885
30024
  storageBytes: number()
29886
30025
  });
@@ -42219,4 +42358,4 @@ function enumerateInferenceDevices(hw) {
42219
42358
  return out;
42220
42359
  }
42221
42360
  //#endregion
42222
- export { inferModelProvider as $, number as $t, addonWidgetsSourceCapability as A, invocationFromEncodeProfile as At, defaultDeviceFor as B, makeProfileBrokerId as Bt, RATE_CONTROL_RELAXED as C, streamBrokerCapability as Ct, RecordingSignalStatusSchema as D, AUDIO_PRESETS as Dt, RecordingConfigSchema as E, errMsg as Et, cameraStreamsCapability as F, DeviceFeature as Ft, detectionPipelineCapability as G, selectAssignedProfileSlots as Gt, deriveBatteryPresence as H, nodePin as Ht, createHwAccelCache as I, DeviceType as It, enumerateInferenceDevices as J, array as Jt, egressTranscodeSharingKey as K, sleep as Kt, createLogChannelsProvider as L, createEvent as Lt, audioAnalyzerCapability as M, BOOT_RECOVERY_BACKOFF_MS as Mt, audioKindId as N, BaseAddon as Nt, RingBuffer as O, Fmp4BoxSplitter as Ot, batteryCapability as P, CAM_PROFILE_ORDER as Pt, hfModelUrl as Q, literal as Qt, customAction as R, hydrateSchema as Rt, PoolMemoryWatchdog as S, storageEvictableCapability as St, RECORDING_EXPORT_MAX_READ_BYTES as T, webrtcSessionCapability as Tt, deriveDetailCropRect as U, parseJsonUnknown as Ut, defineCustomActions as V, makeSourceBrokerId as Vt, deriveRecordingMode as W, parseProfileBrokerId as Wt, evaluateZoneRules as X, discriminatedUnion as Xt, evaluateSensorEdge as Y, boolean as Yt, failureContributionCapability as Z, lazy as Zt, FailureCounters as _, resolveClusterStepModelId as _t, COCO_80_LABELS as a, motionDetectionCapability as at, NativeLeaseSettingsSchema as b, resolveRecordingProfiles as bt, DEFAULT_CLUSTER_STEP_MODELS as c, pickClusterStepModels as ct, DEFAULT_EVENTS_BAND_BUFFER_SEC as d, pickNativeLeaseOverride as dt, object as en, isFirstLevelMacroClass as et, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as f, pipelineExecutorCapability as ft, ExportRecordSchema as g, recordingSignalCapability as gt, EncodeProfileSchema as h, recordingExportCapability as ht, BatteryStatusSchema as i, EventCategory as in, maskUrlCredentials as it, audioAnalysisCapability as j, isSoftwareDecode as jt, YAMNET_TO_MACRO as k, buildFfmpegArgs as kt, DEFAULT_CLUSTER_STEP_SETTINGS as l, pickClusterStepSettings as lt, DEVICE_BACKEND_TO_FORMAT as m, recordingCapability as mt, AUDIO_BACKEND_CHOICES as n, string as nn, logChannelsCapability as nt, COCO_TO_MACRO as o, overlayClusterStepSettings as ot, DEFAULT_NATIVE_LEASE_SETTINGS as p, pipelineRunnerCapability as pt, egressTransportFromRequest as q, _enum as qt, AUDIO_MACRO_LABELS as r, union as rn, mapAudioLabelToMacro as rt, DEFAULT_AUDIO_ANALYZER_CONFIG as s, parseProcStatus as st, APPLE_SA_TO_MACRO as t, record as tn, loadContributionCapability as tt, DEFAULT_DETAIL_CROP_CONVENTION as u, pickDetailCropConvention as ut, HF_BASE_URL as v, resolveEgressDecodeHwAccel as vt, RATE_CONTROL_TIGHT as w, supportedRuntimes as wt, OpsLogEntrySchema as x, runtimeDevices as xt, NativeLeaseAdmissionSchema as y, resolvePoolMemoryPolicy as yt, declareLogChannel as z, isEvent as zt };
42361
+ export { inferModelProvider as $, lazy as $t, addonWidgetsSourceCapability as A, Fmp4BoxSplitter as At, defaultDeviceFor as B, hydrateSchema as Bt, RATE_CONTROL_RELAXED as C, storageEvictableCapability as Ct, RecordingSignalStatusSchema as D, webrtcSessionCapability as Dt, RecordingConfigSchema as E, supportedRuntimes as Et, cameraStreamsCapability as F, BaseAddon as Ft, detectionPipelineCapability as G, parseJsonUnknown as Gt, deriveBatteryPresence as H, makeProfileBrokerId as Ht, createHwAccelCache as I, CAM_PROFILE_ORDER as It, enumerateInferenceDevices as J, sleep as Jt, egressTranscodeSharingKey as K, parseProfileBrokerId as Kt, createLogChannelsProvider as L, DeviceFeature as Lt, audioAnalyzerCapability as M, invocationFromEncodeProfile as Mt, audioKindId as N, isSoftwareDecode as Nt, RingBuffer as O, errMsg as Ot, batteryCapability as P, BOOT_RECOVERY_BACKOFF_MS as Pt, hfModelUrl as Q, discriminatedUnion as Qt, customAction as R, DeviceType as Rt, PoolMemoryWatchdog as S, runtimeDevices as St, RECORDING_EXPORT_MAX_READ_BYTES as T, stripRetiredBandPreBufferSec as Tt, deriveDetailCropRect as U, makeSourceBrokerId as Ut, defineCustomActions as V, isEvent as Vt, deriveRecordingMode as W, nodePin as Wt, evaluateZoneRules as X, array as Xt, evaluateSensorEdge as Y, _enum as Yt, failureContributionCapability as Z, boolean as Zt, FailureCounters as _, recordingSignalCapability as _t, COCO_80_LABELS as a, string as an, migrateLegacyDeviceSignalConfig as at, NativeLeaseSettingsSchema as b, resolvePoolMemoryPolicy as bt, DEFAULT_CLUSTER_STEP_MODELS as c, parseProcStatus as ct, DEFAULT_EVENTS_BAND_BUFFER_SEC as d, pickDetailCropConvention as dt, literal as en, isFirstLevelMacroClass as et, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as f, pickNativeLeaseOverride as ft, ExportRecordSchema as g, recordingExportCapability as gt, EncodeProfileSchema as h, recordingCapability as ht, BatteryStatusSchema as i, record as in, maskUrlCredentials as it, audioAnalysisCapability as j, buildFfmpegArgs as jt, YAMNET_TO_MACRO as k, AUDIO_PRESETS as kt, DEFAULT_CLUSTER_STEP_SETTINGS as l, pickClusterStepModels as lt, DEVICE_BACKEND_TO_FORMAT as m, pipelineRunnerCapability as mt, AUDIO_BACKEND_CHOICES as n, object as nn, logChannelsCapability as nt, COCO_TO_MACRO as o, union as on, motionDetectionCapability as ot, DEFAULT_NATIVE_LEASE_SETTINGS as p, pipelineExecutorCapability as pt, egressTransportFromRequest as q, selectAssignedProfileSlots as qt, AUDIO_MACRO_LABELS as r, preprocess as rn, mapAudioLabelToMacro as rt, DEFAULT_AUDIO_ANALYZER_CONFIG as s, EventCategory as sn, overlayClusterStepSettings as st, APPLE_SA_TO_MACRO as t, number as tn, loadContributionCapability as tt, DEFAULT_DETAIL_CROP_CONVENTION as u, pickClusterStepSettings as ut, HF_BASE_URL as v, resolveClusterStepModelId as vt, RATE_CONTROL_TIGHT as w, streamBrokerCapability as wt, OpsLogEntrySchema as x, resolveRecordingProfiles as xt, NativeLeaseAdmissionSchema as y, resolveEgressDecodeHwAccel as yt, declareLogChannel as z, createEvent as zt };
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-HG5geL9t.js");
1
+ const require_dist = require("./dist-BxP0SvPz.js");
2
2
  let node_path = require("node:path");
3
3
  node_path = require_dist.__toESM(node_path);
4
4
  let node_url = require("node:url");
@@ -2,8 +2,8 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-HG5geL9t.js");
6
- const require_lazy_sharp = require("../lazy-sharp-DmAwZ0s9.js");
5
+ const require_dist = require("../dist-BxP0SvPz.js");
6
+ const require_lazy_sharp = require("../lazy-sharp-VKOG3WW4.js");
7
7
  let node_fs = require("node:fs");
8
8
  let node_path = require("node:path");
9
9
  //#region src/motion-wasm/wasm-motion-detector.ts
@@ -1,4 +1,4 @@
1
- import { It as DeviceType, Nt as BaseAddon, Rt as hydrateSchema, X as evaluateZoneRules, at as motionDetectionCapability } from "../dist-mYDK58Jp.mjs";
1
+ import { Bt as hydrateSchema, Ft as BaseAddon, Rt as DeviceType, X as evaluateZoneRules, ot as motionDetectionCapability } from "../dist-oFIHnD88.mjs";
2
2
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
3
3
  import { readFileSync } from "node:fs";
4
4
  import { join } from "node:path";
@@ -1,4 +1,4 @@
1
- import { Et as errMsg, Ot as Fmp4BoxSplitter, jt as isSoftwareDecode, kt as buildFfmpegArgs } from "./dist-mYDK58Jp.mjs";
1
+ import { At as Fmp4BoxSplitter, Nt as isSoftwareDecode, Ot as errMsg, jt as buildFfmpegArgs } from "./dist-oFIHnD88.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import "node:fs";
4
4
  import "node:path";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-HG5geL9t.js");
1
+ const require_dist = require("./dist-BxP0SvPz.js");
2
2
  let node_crypto = require("node:crypto");
3
3
  let node_fs = require("node:fs");
4
4
  node_fs = require_dist.__toESM(node_fs, 1);