@camstack/addon-pipeline 1.2.312 → 1.2.314

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 (32) 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-BZMS04Wn.js → default-detection-model-BvxtQEcb.js} +1 -1
  4. package/dist/{default-detection-model-ClQ1gcZ9.mjs → default-detection-model-Es1-dvFU.mjs} +1 -1
  5. package/dist/detection-pipeline/index.js +4 -4
  6. package/dist/detection-pipeline/index.mjs +4 -4
  7. package/dist/{dist-B3_sbBDM.mjs → dist-E1Z_K22_.mjs} +404 -194
  8. package/dist/{dist-BLf0YjAa.js → dist-Jvi2SOxI.js} +409 -193
  9. package/dist/motion-wasm/index.js +1 -1
  10. package/dist/motion-wasm/index.mjs +1 -1
  11. package/dist/{node-DJFKTJ0B.mjs → node-DHe-9_tm.mjs} +1 -1
  12. package/dist/{node-Vwf2PuIT.js → node-EjcZQh8D.js} +1 -1
  13. package/dist/pipeline-runner/index.js +187 -17
  14. package/dist/pipeline-runner/index.mjs +187 -17
  15. package/dist/{process-memory-DGTVVYlX.js → process-memory-BUtnSPYK.js} +1 -1
  16. package/dist/{process-memory-BvwauBlX.mjs → process-memory-IQcwHauP.mjs} +1 -1
  17. package/dist/recorder/index.js +2 -2
  18. package/dist/recorder/index.mjs +2 -2
  19. package/dist/{segment-demux-js-C0oz7IVm.mjs → segment-demux-js-CR58wpzs.mjs} +1 -1
  20. package/dist/{segment-demux-js-BUAAuSVF.js → segment-demux-js-Il0EkSOb.js} +1 -1
  21. package/dist/stream-broker/_stub.js +2 -2
  22. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-DZh9jQi-.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-CBvGGDX_.mjs} +3 -3
  23. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D0BR9vFO.mjs +26 -0
  24. package/dist/stream-broker/{_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BhO-szf8.mjs → _virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DddXyc17.mjs} +1 -1
  25. package/dist/stream-broker/demux-worker-child.js +1 -1
  26. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  27. package/dist/stream-broker/{hostInit-BJYQvQ3e.mjs → hostInit-CjvrBwfh.mjs} +3 -3
  28. package/dist/stream-broker/index.js +3 -3
  29. package/dist/stream-broker/index.mjs +3 -3
  30. package/dist/stream-broker/remoteEntry.js +1 -1
  31. package/package.json +2 -2
  32. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-C6EaWavG.mjs +0 -26
@@ -12508,6 +12508,14 @@ var FailureCounters = class {
12508
12508
  this.counters.clear();
12509
12509
  }
12510
12510
  };
12511
+ var APPEARANCE_BLOCKS = {
12512
+ upperHs: [0, 32],
12513
+ upperV: [32, 40],
12514
+ upperGrad: [40, 48],
12515
+ lowerHs: [48, 80],
12516
+ lowerV: [80, 88],
12517
+ lowerGrad: [88, 96]
12518
+ };
12511
12519
  var ClipModelMetaSchema = object({
12512
12520
  /** The paired text encoder's catalog id (the embedding-encoder's text catalog). */
12513
12521
  textModelId: string().min(1),
@@ -13824,6 +13832,68 @@ method(object({
13824
13832
  password: string()
13825
13833
  }), AuthResultSchema.nullable(), { kind: "mutation" }), method(object({ state: string() }), string()), method(record(string(), string()), AuthResultSchema, { kind: "mutation" }), method(object({ token: string() }), AuthResultSchema.nullable());
13826
13834
  /**
13835
+ * How long one snapshot may take end to end: the pinned copy of the whole
13836
+ * database plus `PRAGMA integrity_check` over the copy, on the hub's slowest
13837
+ * disk. ~800 MB at a pessimistic 10 MB/s is under 3 minutes; the bound is
13838
+ * generous because a timeout fails the whole backup run.
13839
+ */
13840
+ var DATABASE_SNAPSHOT_TIMEOUT_MS = 30 * 6e4;
13841
+ /**
13842
+ * The databases an owner snapshots — declared by the OWNER, so a caller never
13843
+ * guesses which file is live from what sits beside it (a cleanly closed
13844
+ * database has no sidecars and is just as owned). Paths are absolute on the
13845
+ * owner's host.
13846
+ */
13847
+ var DatabaseSnapshotTargetsSchema = object({ databases: array(object({ livePath: string() })) });
13848
+ /** One b-tree table of the snapshot and the rows it holds. */
13849
+ var DatabaseSnapshotTableSchema = object({
13850
+ name: string(),
13851
+ rows: number().int().nonnegative()
13852
+ });
13853
+ /**
13854
+ * What the owner wrote. Every path is ABSOLUTE on the owner's host — the
13855
+ * caller pins the call to its own node, so it can read the file; a caller
13856
+ * that finds the path outside its own data root refuses it rather than
13857
+ * archiving something it cannot place.
13858
+ */
13859
+ var DatabaseSnapshotResultSchema = object({
13860
+ /** The live database the snapshot copies. Never to be copied as a file. */
13861
+ livePath: string(),
13862
+ /** The verified copy: `<livePath>` + {@link DATABASE_SNAPSHOT_SUFFIX}. */
13863
+ snapshotPath: string(),
13864
+ sizeBytes: number().int().nonnegative(),
13865
+ pageCount: number().int().nonnegative(),
13866
+ pageSize: number().int().positive(),
13867
+ /**
13868
+ * Every b-tree table with its row count. Read inside the SAME read
13869
+ * transaction the copy was taken from, and found EQUAL on the copy — so
13870
+ * this is the content of the snapshot, not an estimate of the source.
13871
+ */
13872
+ tables: array(DatabaseSnapshotTableSchema),
13873
+ /** Wall time of the pinned copy (row counts included). */
13874
+ copyMs: number().nonnegative(),
13875
+ /** Wall time of the checks on the copy (`integrity_check`, row counts). */
13876
+ verifyMs: number().nonnegative(),
13877
+ /** When the pinned read transaction began (ms epoch) — the snapshot's instant. */
13878
+ takenAt: number()
13879
+ });
13880
+ /**
13881
+ * A snapshot as an ARCHIVE records it (`ArchiveManifest.sqliteSnapshots`):
13882
+ * the same facts, with both paths relative to the archive root (the node's
13883
+ * data dir), because an archive outlives the host that made it.
13884
+ */
13885
+ var ArchiveSqliteSnapshotSchema = DatabaseSnapshotResultSchema.extend({
13886
+ /** Archive-relative path of the live database the archive does NOT carry. */
13887
+ livePath: string(),
13888
+ /** Archive-relative path of the verified copy it carries in its place. */
13889
+ snapshotPath: string()
13890
+ });
13891
+ method(object({}), DatabaseSnapshotTargetsSchema, { auth: "admin" }), method(object({}), DatabaseSnapshotResultSchema, {
13892
+ kind: "mutation",
13893
+ auth: "admin",
13894
+ timeoutMs: DATABASE_SNAPSHOT_TIMEOUT_MS
13895
+ });
13896
+ /**
13827
13897
  * Orchestrator-side destination metadata. The orchestrator computes
13828
13898
  * `id = <addonId>:<subId>` from its provider lookup so consumers
13829
13899
  * (admin UI, restore flow) see one canonical key.
@@ -13934,7 +14004,12 @@ var ArchiveManifestSchema = object({
13934
14004
  locations: array(string()),
13935
14005
  entries: array(ArchiveEntrySchema),
13936
14006
  totalBytes: number(),
13937
- totalFiles: number()
14007
+ totalFiles: number(),
14008
+ /**
14009
+ * Live SQLite databases this archive carries as their OWNER's verified
14010
+ * snapshot instead of as files (D693). Absent on archives made before.
14011
+ */
14012
+ sqliteSnapshots: array(ArchiveSqliteSnapshotSchema).optional()
13938
14013
  });
13939
14014
  var LocationStatSchema = object({
13940
14015
  name: string(),
@@ -15712,6 +15787,52 @@ var CompositionBlockStateSchema = object({
15712
15787
  reason: string().optional(),
15713
15788
  fields: array(CompositionFieldStateSchema)
15714
15789
  });
15790
+ var ComposerBlockSchema = object({
15791
+ id: string().min(1),
15792
+ name: string().min(1).max(120),
15793
+ enabled: boolean(),
15794
+ updatedAt: number(),
15795
+ composition: CompositionSchema
15796
+ });
15797
+ /**
15798
+ * A stored composition row that no longer PARSES — a schema a release
15799
+ * tightened, a row written by a newer build. Sent by id so the composer keeps
15800
+ * its device as a placeholder and reports the block `failed` naming the parse
15801
+ * error. Leaving it out would read, twice, exactly like a delete (D49).
15802
+ */
15803
+ var ComposerUnreadableBlockSchema = object({
15804
+ id: string().min(1),
15805
+ /** The row's stored name column; null when even that is unreadable (the device keeps the name it has). */
15806
+ name: string().nullable(),
15807
+ /** The parse error, in the operator's words. */
15808
+ error: string()
15809
+ });
15810
+ method(object({
15811
+ /** The shared Blocks integration; null until `core-blocks` has reconciled it. */
15812
+ integrationId: string().nullable(),
15813
+ /** False when the `core_blocks` read failed: then nothing may be withdrawn (D49). */
15814
+ storeLoaded: boolean(),
15815
+ blocks: array(ComposerBlockSchema),
15816
+ /** Operator restarts: rebuild these runtimes and re-resolve their sources. Stores nothing (D62). */
15817
+ restartBlockIds: array(string()),
15818
+ /** Composition rows that exist but do not parse: held, never withdrawn, reported failed. */
15819
+ unreadableBlocks: array(ComposerUnreadableBlockSchema)
15820
+ }), object({
15821
+ blocks: array(object({
15822
+ blockId: string(),
15823
+ status: CompositionRunStatusSchema,
15824
+ reason: string().optional()
15825
+ })),
15826
+ /**
15827
+ * False when the composer declared and withdrew NOTHING (store not loaded,
15828
+ * integration unknown, its own rows unread or read empty once). An empty
15829
+ * apply the caller owes is paid off only by one the composer acted on (D49).
15830
+ */
15831
+ acted: boolean()
15832
+ }), {
15833
+ kind: "mutation",
15834
+ auth: "admin"
15835
+ }), method(object({ blockIds: array(string()) }), object({ states: array(CompositionBlockStateSchema) }), { auth: "admin" });
15715
15836
  var NUMBER = {
15716
15837
  kind: "fixed",
15717
15838
  result: ["number"]
@@ -15948,52 +16069,6 @@ method(object({}), object({ blocks: array(CoreBlockSchema) }), { auth: "admin" }
15948
16069
  auth: "admin",
15949
16070
  access: "view"
15950
16071
  });
15951
- var ComposerBlockSchema = object({
15952
- id: string().min(1),
15953
- name: string().min(1).max(120),
15954
- enabled: boolean(),
15955
- updatedAt: number(),
15956
- composition: CompositionSchema
15957
- });
15958
- /**
15959
- * A stored composition row that no longer PARSES — a schema a release
15960
- * tightened, a row written by a newer build. Sent by id so the composer keeps
15961
- * its device as a placeholder and reports the block `failed` naming the parse
15962
- * error. Leaving it out would read, twice, exactly like a delete (D49).
15963
- */
15964
- var ComposerUnreadableBlockSchema = object({
15965
- id: string().min(1),
15966
- /** The row's stored name column; null when even that is unreadable (the device keeps the name it has). */
15967
- name: string().nullable(),
15968
- /** The parse error, in the operator's words. */
15969
- error: string()
15970
- });
15971
- method(object({
15972
- /** The shared Blocks integration; null until `core-blocks` has reconciled it. */
15973
- integrationId: string().nullable(),
15974
- /** False when the `core_blocks` read failed: then nothing may be withdrawn (D49). */
15975
- storeLoaded: boolean(),
15976
- blocks: array(ComposerBlockSchema),
15977
- /** Operator restarts: rebuild these runtimes and re-resolve their sources. Stores nothing (D62). */
15978
- restartBlockIds: array(string()),
15979
- /** Composition rows that exist but do not parse: held, never withdrawn, reported failed. */
15980
- unreadableBlocks: array(ComposerUnreadableBlockSchema)
15981
- }), object({
15982
- blocks: array(object({
15983
- blockId: string(),
15984
- status: CompositionRunStatusSchema,
15985
- reason: string().optional()
15986
- })),
15987
- /**
15988
- * False when the composer declared and withdrew NOTHING (store not loaded,
15989
- * integration unknown, its own rows unread or read empty once). An empty
15990
- * apply the caller owes is paid off only by one the composer acted on (D49).
15991
- */
15992
- acted: boolean()
15993
- }), {
15994
- kind: "mutation",
15995
- auth: "admin"
15996
- }), method(object({ blockIds: array(string()) }), object({ states: array(CompositionBlockStateSchema) }), { auth: "admin" });
15997
16072
  /**
15998
16073
  * `custom-model-registry` — collection cap exposing operator-registered
15999
16074
  * custom detection models. Each provider (today: `addon-model-studio`)
@@ -17873,6 +17948,138 @@ method(object({
17873
17948
  deviceIds: array(number()).readonly(),
17874
17949
  caps: array(string()).readonly().optional()
17875
17950
  }), record(string(), record(string(), unknown().nullable())));
17951
+ object({
17952
+ /** Ms epoch of the last press. null = never observed since this provider started. */
17953
+ lastPressedAt: number().nullable(),
17954
+ /** Counter since provider start. Resets on reboot. Useful for metrics/debug. */
17955
+ pressCountSinceStart: number()
17956
+ });
17957
+ object({
17958
+ deviceId: number(),
17959
+ timestamp: number()
17960
+ });
17961
+ /**
17962
+ * The `doorbell-source` extension slot's editable value (D648): the camera's
17963
+ * virtual-doorbell trigger devices, exactly what the wrapper's
17964
+ * `doorbellSources` persists (as `{ deviceId }` records).
17965
+ */
17966
+ var DoorbellSourceSlotValueSchema = object({ deviceIds: array(number().int().positive()) });
17967
+ DeviceType.Camera;
17968
+ DeviceType.Button, DeviceType.Camera;
17969
+ var ExtensionSlotIdSchema = _enum(["doorbell-source", "linked-devices"]);
17970
+ DeviceType.Camera, DeviceType.Camera;
17971
+ /** A slot's editable value, discriminated on `slot`. */
17972
+ var ExtensionSlotValueSchema = discriminatedUnion("slot", [DoorbellSourceSlotValueSchema.extend({ slot: literal("doorbell-source") }), LinkedDevicesSlotValueSchema.extend({ slot: literal("linked-devices") })]);
17973
+ DeviceType.Camera;
17974
+ var ExtensionSourceAvailabilitySchema = discriminatedUnion("state", [object({ state: literal("ok") }), object({
17975
+ state: literal("unreachable"),
17976
+ reason: string()
17977
+ })]);
17978
+ /** One provider of slots — the D554 source-listing row. */
17979
+ var ExtensionSourceSchema = object({
17980
+ /** The routing prefix of every `slotRef` this provider serves. */
17981
+ source: string(),
17982
+ label: string(),
17983
+ /** Stamped by the dispatcher from the registry (D557). */
17984
+ addonId: string().optional(),
17985
+ availability: ExtensionSourceAvailabilitySchema
17986
+ });
17987
+ /**
17988
+ * How one picked source stands. `missing` — no such device (deleted, or an id
17989
+ * that never existed); `foreign` — a device the slot's owner cannot read from
17990
+ * (a source owned by another addon); `unavailable` — it exists but is not a
17991
+ * valid source now (a container, which is never a pick). A source in any of
17992
+ * these states is SHOWN, never silently dropped or re-pointed.
17993
+ */
17994
+ var ExtensionSourceHealthSchema = _enum([
17995
+ "ok",
17996
+ "missing",
17997
+ "foreign",
17998
+ "unavailable"
17999
+ ]);
18000
+ var ExtensionSlotSourceSchema = object({
18001
+ deviceId: number().int(),
18002
+ /** The device's name, or null when it could not be resolved (`missing`). */
18003
+ name: string().nullable(),
18004
+ health: ExtensionSourceHealthSchema,
18005
+ detail: string().optional()
18006
+ });
18007
+ /**
18008
+ * A DIFFERENT authority that gates whether the slot's sources do anything —
18009
+ * reported read-only, named, never written through this contract (D62). The
18010
+ * virtual doorbell's sources ring only while the wrapper is bound to the
18011
+ * camera, and that binding belongs to `deviceManager.setWrapperActive`.
18012
+ * `unknown` means the gate could not be read; it is not "inactive" (D315).
18013
+ */
18014
+ var ExtensionSlotActivationSchema = object({
18015
+ state: _enum([
18016
+ "active",
18017
+ "inactive",
18018
+ "unknown"
18019
+ ]),
18020
+ authority: string(),
18021
+ detail: string().optional()
18022
+ });
18023
+ var ExtensionSlotRowSchema = discriminatedUnion("state", [object({
18024
+ state: literal("ok"),
18025
+ /** `<source>:<slotId>` — the routing key for `listCandidates` / `setSlot`. */
18026
+ slotRef: string(),
18027
+ slot: ExtensionSlotIdSchema,
18028
+ /** Names the store written (D62), e.g. `virtual-doorbell:doorbellSources`. */
18029
+ authority: string(),
18030
+ activation: ExtensionSlotActivationSchema.nullable(),
18031
+ value: ExtensionSlotValueSchema,
18032
+ sources: array(ExtensionSlotSourceSchema),
18033
+ /**
18034
+ * Devices the owner links to the host ON ITS OWN, by structure, and that
18035
+ * are therefore not in `value` (D655): a camera's device-tree children, and
18036
+ * the child a picked container stands for (D356 — a container is never a
18037
+ * pick, its children are). Read-only; the editor shows them and may offer
18038
+ * per-device options on them (the linked-devices tracked-event opt-in).
18039
+ * Absent when the owner links nothing beyond the picks, and from an owner
18040
+ * older than D655.
18041
+ */
18042
+ impliedSources: array(ExtensionSlotSourceSchema).optional()
18043
+ }), object({
18044
+ state: literal("unreachable"),
18045
+ addonId: string(),
18046
+ reason: string()
18047
+ })]);
18048
+ var ExtensionCandidatesSchema = object({ candidates: array(object({
18049
+ deviceId: number().int(),
18050
+ name: string(),
18051
+ type: string(),
18052
+ location: string().nullable(),
18053
+ /** The container a child belongs to — "Spotlight 2" alone does not say which. */
18054
+ parentName: string().nullable(),
18055
+ /** Pre-marked by the owner's suggestion rule. NEVER saved on its own (D356). */
18056
+ suggested: boolean(),
18057
+ /** Why it is suggested ("same location"), null when it is not. */
18058
+ reason: string().nullable()
18059
+ })) });
18060
+ /**
18061
+ * What a write did. `none` — applied in place. `host` / `parent` — the owner
18062
+ * reloaded the host (or, for an accessory child, its parent) because the
18063
+ * write changed what the host REGISTERS. A slot never adds a capability to its
18064
+ * host — that is a composition (D663) — so today's owners answer `none`.
18065
+ */
18066
+ var ExtensionSetResultSchema = object({
18067
+ applied: literal(true),
18068
+ reload: _enum([
18069
+ "none",
18070
+ "host",
18071
+ "parent"
18072
+ ])
18073
+ });
18074
+ var ExtensionSlotRefInputSchema = object({
18075
+ deviceId: number().int(),
18076
+ slotRef: string().min(1)
18077
+ });
18078
+ var ExtensionSetSlotInputSchema = ExtensionSlotRefInputSchema.extend({ value: ExtensionSlotValueSchema });
18079
+ method(object({ deviceId: number().int() }), array(ExtensionSourceSchema)), method(object({ deviceId: number().int() }), array(ExtensionSlotRowSchema)), method(ExtensionSlotRefInputSchema, ExtensionCandidatesSchema), method(ExtensionSetSlotInputSchema, ExtensionSetResultSchema, {
18080
+ kind: "mutation",
18081
+ auth: "admin"
18082
+ });
17876
18083
  /**
17877
18084
  * Per-field ownership (D663). A composition may CLAIM fields of a native
17878
18085
  * cap's runtime-state slice on an existing device: `replace` overlays the
@@ -21242,17 +21449,25 @@ var NcScheduleSchema = object({
21242
21449
  */
21243
21450
  var NcSystemEventDeliveryModeSchema = _enum(["instant", "summary"]);
21244
21451
  /**
21452
+ * How a summary window is SENT (D698): `rule` (absent) = ONE notification with
21453
+ * every section; `section` = one notification per section with something to
21454
+ * say (an unavailable section included), each titled by its section.
21455
+ */
21456
+ var NcStateSummarySplitSchema = _enum(["rule", "section"]);
21457
+ /**
21245
21458
  * `summary`: the rule sends NOTHING per event. When a window of `schedule`
21246
21459
  * CLOSES, it sends one notification with the current state of its kinds
21247
21460
  * (low batteries, consumables to replace, devices offline, updates
21248
- * available, ...), after its own filters. Nothing to report sends nothing.
21461
+ * available, ...), after its own filters — or, with `split: 'section'`
21462
+ * (D698), one notification per section. Nothing to report sends nothing.
21249
21463
  * The schedule is the ordinary `NcSchedule` (weekly windows, IANA timezone,
21250
21464
  * midnight crossing); the send time is each window's END. Refused on the
21251
21465
  * `alarm` family, which stays instant (`systemEventDeliveryProblems`).
21252
21466
  */
21253
21467
  var NcSystemEventDeliverySchema = discriminatedUnion("mode", [object({ mode: literal("instant") }), object({
21254
21468
  mode: literal("summary"),
21255
- schedule: NcScheduleSchema
21469
+ schedule: NcScheduleSchema,
21470
+ split: NcStateSummarySplitSchema.optional()
21256
21471
  })]);
21257
21472
  /** Fuzzy plate matcher — OCR noise makes exact match useless (spec row 12/13). */
21258
21473
  var NcPlateMatcherSchema = object({
@@ -21392,8 +21607,14 @@ var NcSensorTransitionSchema = _enum(["raised", "cleared"]);
21392
21607
  /** Admin-zone membership condition (zone IDs as stamped by the ZoneEngine). */
21393
21608
  var NcZoneConditionSchema = object({
21394
21609
  ids: array(string().min(1)).min(1),
21395
- /** Quantifier over `ids` — at least one / every one visited. */
21396
- match: _enum(["any", "all"]).default("any")
21610
+ /**
21611
+ * LEGACY quantifier over `ids`. Absent = `any` (at least one visited), which
21612
+ * is what both editors mean and all they write since D690: "all of" was
21613
+ * removed from the editors because on an immediate rule it asked one
21614
+ * detection to stand in every zone at once. Still ACCEPTED, and `all` still
21615
+ * evaluated, so a stored rule keeps parsing and meaning what it meant.
21616
+ */
21617
+ match: _enum(["any", "all"]).optional()
21397
21618
  });
21398
21619
  /**
21399
21620
  * The P1 condition set — a flat AND of groups; absent group = pass;
@@ -21897,10 +22118,12 @@ var NcMediaPolicySchema = object({
21897
22118
  /**
21898
22119
  * Cooldown GRANULARITY over the subject's class — how much a fired
21899
22120
  * notification suppresses.
21900
- * - `shared` (default, and the absent value) — one window for the whole
21901
- * rule/scope: a cat silences the next dog for `cooldownSec`.
21902
- * - `per-class` — an independent window per detected class, so cat→dog fires
21903
- * at once and cat→cat still waits.
22121
+ * - `per-class` (default, and the absent value since 2026-10-01 — D36) — an
22122
+ * independent window per detected class: cat→dog fires at once, cat→cat
22123
+ * still waits.
22124
+ * - `shared` — one window for the whole rule/scope: a cat silences the next
22125
+ * dog for `cooldownSec`. Only written when an operator picks it; it is no
22126
+ * longer what an unset rule means.
21904
22127
  *
21905
22128
  * AUDIO subjects are ALWAYS per-class regardless of this setting: a scream
21906
22129
  * must not be swallowed by a bark's window (the precedent this generalizes —
@@ -21915,8 +22138,11 @@ var NcThrottleSchema = object({
21915
22138
  /**
21916
22139
  * Class granularity of the cooldown key. Optional rather than defaulted:
21917
22140
  * a Zod default does NOT run on the addon→addon cap path, so a persisted
21918
- * rule authored before this field simply carries none — and the engine
21919
- * reads absent as `shared`, the pre-existing behaviour.
22141
+ * rule authored before this field simply carries none. The engine used to
22142
+ * read absent as `shared` (D36); since 2026-10-01 it reads absent as
22143
+ * `per-class` — the operator's default — and only an explicit `shared`
22144
+ * still means `shared`. See `cooldownKey` / `keysPerClass` in the rule
22145
+ * engine, and D36's dated note.
21920
22146
  */
21921
22147
  granularity: NcThrottleGranularitySchema.optional()
21922
22148
  });
@@ -22240,11 +22466,23 @@ var NcStateSummaryPreviewSectionSchema = object({
22240
22466
  reason: string().optional()
22241
22467
  });
22242
22468
  /**
22469
+ * One notification a previewed summary would send (D698): the whole summary on
22470
+ * a `rule` split (no `section`), one section's on a `section` split.
22471
+ */
22472
+ var NcStateSummaryPreviewRowSchema = object({
22473
+ section: string().optional(),
22474
+ /** The section's name on a per-section row; every reported section's, joined, on a combined one. */
22475
+ title: string(),
22476
+ text: string(),
22477
+ count: number().int().nonnegative()
22478
+ });
22479
+ /**
22243
22480
  * The summary a rule would send now. `empty` = nothing to report and every
22244
22481
  * section read: such a summary is NOT sent. `dropped` counts the open states
22245
22482
  * the rule's own filters (or a camera mute) left out, by reason.
22246
22483
  * `excludedGroups` names the kind groups selected that have no state to report
22247
- * (backups & exports).
22484
+ * (backups & exports). `split` and `rows` (D698) say how it would be sent —
22485
+ * optional, so an older hub's answer still parses.
22248
22486
  */
22249
22487
  var NcStateSummaryPreviewSchema = object({
22250
22488
  empty: boolean(),
@@ -22252,7 +22490,9 @@ var NcStateSummaryPreviewSchema = object({
22252
22490
  text: string(),
22253
22491
  sections: array(NcStateSummaryPreviewSectionSchema),
22254
22492
  dropped: record(string(), number().int().nonnegative()),
22255
- excludedGroups: array(string())
22493
+ excludedGroups: array(string()),
22494
+ split: NcStateSummarySplitSchema.optional(),
22495
+ rows: array(NcStateSummaryPreviewRowSchema).optional()
22256
22496
  });
22257
22497
  var NcTestResultSchema = object({
22258
22498
  recordId: string(),
@@ -25220,7 +25460,8 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
25220
25460
  trackIds: array(string()).min(1)
25221
25461
  }), object({
25222
25462
  deleted: number().int(),
25223
- failed: array(string()).readonly()
25463
+ failed: array(string()).readonly(),
25464
+ sparedMediaIds: array(number().int()).readonly().optional()
25224
25465
  }), {
25225
25466
  kind: "mutation",
25226
25467
  auth: "admin"
@@ -27797,7 +28038,42 @@ var SetCameraSensorsInputSchema = object({
27797
28038
  /** `null` removes the attachment: the camera goes back to `not-configured`. */
27798
28039
  config: CameraSensorsConfigSchema.nullable()
27799
28040
  });
27800
- method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
28041
+ /**
28042
+ * Why an early occupancy look (D691) was not scheduled.
28043
+ *
28044
+ * - `unknown-camera` — no session was ever dispatched for it, so there is no
28045
+ * node and no config to attach a burst with.
28046
+ * - `out-of-range` — the ask is negative or further out than the orchestrator
28047
+ * will hold a timer for; the parked-object cadence is the answer there.
28048
+ * - `no-burst-producer` — this build has no burst producer at all.
28049
+ * - `already-looked` — this camera's ONE early look since its last session has
28050
+ * been spent. A look's own burst can re-arm a flickering flip, and a look
28051
+ * per arm would chain a burst every ~30 s forever (review H2); the next
28052
+ * real session re-arms the budget.
28053
+ */
28054
+ var OccupancyLookRefusalSchema = _enum([
28055
+ "unknown-camera",
28056
+ "out-of-range",
28057
+ "no-burst-producer",
28058
+ "already-looked"
28059
+ ]);
28060
+ method(object({
28061
+ deviceId: number().int().nonnegative(),
28062
+ /** How long from NOW until the pending flip's sustain window ends. RELATIVE,
28063
+ * so the caller's clock and the orchestrator's never have to agree. */
28064
+ afterMs: number().finite(),
28065
+ /** Why, for the log. */
28066
+ reason: string()
28067
+ }), object({
28068
+ scheduled: boolean(),
28069
+ /** When `scheduled`: how long until the burst is dialled. */
28070
+ dueInMs: number().optional(),
28071
+ /** When not `scheduled`: why. */
28072
+ refusedBecause: OccupancyLookRefusalSchema.optional()
28073
+ }), {
28074
+ kind: "mutation",
28075
+ auth: "admin"
28076
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
27801
28077
  kind: "mutation",
27802
28078
  auth: "admin"
27803
28079
  }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
@@ -30426,138 +30702,6 @@ var videoclipsCapability = {
30426
30702
  })
30427
30703
  }
30428
30704
  };
30429
- object({
30430
- /** Ms epoch of the last press. null = never observed since this provider started. */
30431
- lastPressedAt: number().nullable(),
30432
- /** Counter since provider start. Resets on reboot. Useful for metrics/debug. */
30433
- pressCountSinceStart: number()
30434
- });
30435
- object({
30436
- deviceId: number(),
30437
- timestamp: number()
30438
- });
30439
- /**
30440
- * The `doorbell-source` extension slot's editable value (D648): the camera's
30441
- * virtual-doorbell trigger devices, exactly what the wrapper's
30442
- * `doorbellSources` persists (as `{ deviceId }` records).
30443
- */
30444
- var DoorbellSourceSlotValueSchema = object({ deviceIds: array(number().int().positive()) });
30445
- DeviceType.Camera;
30446
- DeviceType.Button, DeviceType.Camera;
30447
- var ExtensionSlotIdSchema = _enum(["doorbell-source", "linked-devices"]);
30448
- DeviceType.Camera, DeviceType.Camera;
30449
- /** A slot's editable value, discriminated on `slot`. */
30450
- var ExtensionSlotValueSchema = discriminatedUnion("slot", [DoorbellSourceSlotValueSchema.extend({ slot: literal("doorbell-source") }), LinkedDevicesSlotValueSchema.extend({ slot: literal("linked-devices") })]);
30451
- DeviceType.Camera;
30452
- var ExtensionSourceAvailabilitySchema = discriminatedUnion("state", [object({ state: literal("ok") }), object({
30453
- state: literal("unreachable"),
30454
- reason: string()
30455
- })]);
30456
- /** One provider of slots — the D554 source-listing row. */
30457
- var ExtensionSourceSchema = object({
30458
- /** The routing prefix of every `slotRef` this provider serves. */
30459
- source: string(),
30460
- label: string(),
30461
- /** Stamped by the dispatcher from the registry (D557). */
30462
- addonId: string().optional(),
30463
- availability: ExtensionSourceAvailabilitySchema
30464
- });
30465
- /**
30466
- * How one picked source stands. `missing` — no such device (deleted, or an id
30467
- * that never existed); `foreign` — a device the slot's owner cannot read from
30468
- * (a source owned by another addon); `unavailable` — it exists but is not a
30469
- * valid source now (a container, which is never a pick). A source in any of
30470
- * these states is SHOWN, never silently dropped or re-pointed.
30471
- */
30472
- var ExtensionSourceHealthSchema = _enum([
30473
- "ok",
30474
- "missing",
30475
- "foreign",
30476
- "unavailable"
30477
- ]);
30478
- var ExtensionSlotSourceSchema = object({
30479
- deviceId: number().int(),
30480
- /** The device's name, or null when it could not be resolved (`missing`). */
30481
- name: string().nullable(),
30482
- health: ExtensionSourceHealthSchema,
30483
- detail: string().optional()
30484
- });
30485
- /**
30486
- * A DIFFERENT authority that gates whether the slot's sources do anything —
30487
- * reported read-only, named, never written through this contract (D62). The
30488
- * virtual doorbell's sources ring only while the wrapper is bound to the
30489
- * camera, and that binding belongs to `deviceManager.setWrapperActive`.
30490
- * `unknown` means the gate could not be read; it is not "inactive" (D315).
30491
- */
30492
- var ExtensionSlotActivationSchema = object({
30493
- state: _enum([
30494
- "active",
30495
- "inactive",
30496
- "unknown"
30497
- ]),
30498
- authority: string(),
30499
- detail: string().optional()
30500
- });
30501
- var ExtensionSlotRowSchema = discriminatedUnion("state", [object({
30502
- state: literal("ok"),
30503
- /** `<source>:<slotId>` — the routing key for `listCandidates` / `setSlot`. */
30504
- slotRef: string(),
30505
- slot: ExtensionSlotIdSchema,
30506
- /** Names the store written (D62), e.g. `virtual-doorbell:doorbellSources`. */
30507
- authority: string(),
30508
- activation: ExtensionSlotActivationSchema.nullable(),
30509
- value: ExtensionSlotValueSchema,
30510
- sources: array(ExtensionSlotSourceSchema),
30511
- /**
30512
- * Devices the owner links to the host ON ITS OWN, by structure, and that
30513
- * are therefore not in `value` (D655): a camera's device-tree children, and
30514
- * the child a picked container stands for (D356 — a container is never a
30515
- * pick, its children are). Read-only; the editor shows them and may offer
30516
- * per-device options on them (the linked-devices tracked-event opt-in).
30517
- * Absent when the owner links nothing beyond the picks, and from an owner
30518
- * older than D655.
30519
- */
30520
- impliedSources: array(ExtensionSlotSourceSchema).optional()
30521
- }), object({
30522
- state: literal("unreachable"),
30523
- addonId: string(),
30524
- reason: string()
30525
- })]);
30526
- var ExtensionCandidatesSchema = object({ candidates: array(object({
30527
- deviceId: number().int(),
30528
- name: string(),
30529
- type: string(),
30530
- location: string().nullable(),
30531
- /** The container a child belongs to — "Spotlight 2" alone does not say which. */
30532
- parentName: string().nullable(),
30533
- /** Pre-marked by the owner's suggestion rule. NEVER saved on its own (D356). */
30534
- suggested: boolean(),
30535
- /** Why it is suggested ("same location"), null when it is not. */
30536
- reason: string().nullable()
30537
- })) });
30538
- /**
30539
- * What a write did. `none` — applied in place. `host` / `parent` — the owner
30540
- * reloaded the host (or, for an accessory child, its parent) because the
30541
- * write changed what the host REGISTERS. A slot never adds a capability to its
30542
- * host — that is a composition (D663) — so today's owners answer `none`.
30543
- */
30544
- var ExtensionSetResultSchema = object({
30545
- applied: literal(true),
30546
- reload: _enum([
30547
- "none",
30548
- "host",
30549
- "parent"
30550
- ])
30551
- });
30552
- var ExtensionSlotRefInputSchema = object({
30553
- deviceId: number().int(),
30554
- slotRef: string().min(1)
30555
- });
30556
- var ExtensionSetSlotInputSchema = ExtensionSlotRefInputSchema.extend({ value: ExtensionSlotValueSchema });
30557
- method(object({ deviceId: number().int() }), array(ExtensionSourceSchema)), method(object({ deviceId: number().int() }), array(ExtensionSlotRowSchema)), method(ExtensionSlotRefInputSchema, ExtensionCandidatesSchema), method(ExtensionSetSlotInputSchema, ExtensionSetResultSchema, {
30558
- kind: "mutation",
30559
- auth: "admin"
30560
- });
30561
30705
  /**
30562
30706
  * Optional client-side hints sent at session creation to help the provider
30563
30707
  * pick the best native source. All fields optional — a viewer that knows
@@ -42400,6 +42544,18 @@ Object.freeze({
42400
42544
  addonId: null,
42401
42545
  access: "view"
42402
42546
  },
42547
+ "databaseSnapshot.listDatabases": {
42548
+ capName: "database-snapshot",
42549
+ capScope: "system",
42550
+ addonId: null,
42551
+ access: "view"
42552
+ },
42553
+ "databaseSnapshot.writeSnapshot": {
42554
+ capName: "database-snapshot",
42555
+ capScope: "system",
42556
+ addonId: null,
42557
+ access: "create"
42558
+ },
42403
42559
  "dataStoreProvider.aggregate": {
42404
42560
  capName: "data-store-provider",
42405
42561
  capScope: "system",
@@ -45964,6 +46120,12 @@ Object.freeze({
45964
46120
  addonId: null,
45965
46121
  access: "delete"
45966
46122
  },
46123
+ "pipelineOrchestrator.requestOccupancyLook": {
46124
+ capName: "pipeline-orchestrator",
46125
+ capScope: "system",
46126
+ addonId: null,
46127
+ access: "create"
46128
+ },
45967
46129
  "pipelineOrchestrator.resetNodePipelineDefaults": {
45968
46130
  capName: "pipeline-orchestrator",
45969
46131
  capScope: "system",
@@ -49756,6 +49918,11 @@ Object.freeze({
49756
49918
  form: "single",
49757
49919
  optional: false
49758
49920
  }],
49921
+ "pipelineOrchestrator.requestOccupancyLook": [{
49922
+ name: "deviceId",
49923
+ form: "single",
49924
+ optional: false
49925
+ }],
49759
49926
  "pipelineOrchestrator.resolvePipeline": [{
49760
49927
  name: "deviceId",
49761
49928
  form: "single",
@@ -50967,6 +51134,18 @@ var STATE_SUMMARY_VARS = [
50967
51134
  systemEventKinds: [...SUMMARISABLE],
50968
51135
  systemEventDeliveries: ["summary"]
50969
51136
  },
51137
+ {
51138
+ name: "summarySection",
51139
+ label: "Summary: this section",
51140
+ description: "The section a per-section summary row is about (D698); on a summary sent as one message, every section it reports, comma-separated.",
51141
+ example: "Batterie scariche",
51142
+ group: "system",
51143
+ families: ["rule"],
51144
+ fields: [...RULE_TEXT],
51145
+ kinds: ["system"],
51146
+ systemEventKinds: [...SUMMARISABLE],
51147
+ systemEventDeliveries: ["summary"]
51148
+ },
50970
51149
  ...STATE_SUMMARY_SECTION_VARS.map((v) => ({
50971
51150
  name: v.name,
50972
51151
  label: v.label,
@@ -51043,6 +51222,37 @@ var STATE_SUMMARY_VARS = [
51043
51222
  [...RULE_TEXT],
51044
51223
  ...STATE_SUMMARY_VARS
51045
51224
  ];
51225
+ new Set([
51226
+ "disarmed",
51227
+ "armed_home",
51228
+ "armed_away",
51229
+ "armed_night",
51230
+ "armed_vacation",
51231
+ "armed_custom_bypass",
51232
+ "arming",
51233
+ "disarming",
51234
+ "pending",
51235
+ "triggered",
51236
+ "open",
51237
+ "opening",
51238
+ "closing",
51239
+ "closed",
51240
+ "stopped",
51241
+ "locked",
51242
+ "unlocked",
51243
+ "locking",
51244
+ "unlocking",
51245
+ "jammed",
51246
+ "on",
51247
+ "off",
51248
+ "home",
51249
+ "not_home",
51250
+ "matched",
51251
+ "diverged",
51252
+ "unknown",
51253
+ "latched",
51254
+ "live"
51255
+ ]);
51046
51256
  /**
51047
51257
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
51048
51258
  *
@@ -52489,4 +52699,4 @@ function enumerateInferenceDevices(hw) {
52489
52699
  return out;
52490
52700
  }
52491
52701
  //#endregion
52492
- export { defaultDeviceFor as $, supportedRuntimes as $t, PoolMemoryWatchdog as A, _enum as An, parseProcStatus as At, VISIT_MERGE_GAP_MS as B, string as Bn, recordingSignalCapability as Bt, FailureCounters as C, makeProfileBrokerId as Cn, mayReadLocation as Ct, NativeLeaseAdmissionSchema as D, parseProfileBrokerId as Dn, modeMayWrite as Dt, MOTION_CLOSE_AFTER_MS as E, parseJsonUnknown as En, migrateLegacyDeviceSignalConfig as Et, RECORDING_SOURCE_CAMSTACK_ADDON as F, literal as Fn, pipelineRunnerCapability as Ft, audioKindId as G, resolvePoolMemoryPolicy as Gt, addonWidgetsSourceCapability as H, EventCategory as Hn, resolveCreateExportSubject as Ht, RecordingConfigSchema as I, number as In, rankStreams as It, clipExportFailure as J, stepModelRunsOnFormat as Jt, batteryCapability as K, resolveRecordingProfiles as Kt, RecordingSignalStatusSchema as L, object as Ln, recordingArchiveCapability as Lt, RATE_CONTROL_TIGHT as M, boolean as Mn, pickDetailCropConvention as Mt, RECORDING_EXPORT_MAX_READ_BYTES as N, discriminatedUnion as Nn, pickNativeLeaseOverride as Nt, NativeLeaseSettingsSchema as O, selectAssignedProfileSlots as On, motionDetectionCapability as Ot, RECORDING_SOURCE_CAMSTACK as P, lazy as Pn, pipelineExecutorCapability as Pt, declareLogChannel as Q, stripRetiredBandPreBufferSec as Qt, RingBuffer as R, preprocess as Rn, recordingCapability as Rt, ExportRecordSchema as S, isEvent as Sn, maskUrlCredentials as St, HF_BASE_URL as T, nodePin as Tn, memoizePinnedFfmpeg as Tt, audioAnalysisCapability as U, resolveEgressDecodeHwAccel as Ut, YAMNET_TO_MACRO as V, union as Vn, resolveClusterStepModelId as Vt, audioAnalyzerCapability as W, resolveLocationMode as Wt, createHwAccelCache as X, storageOccupancyCapability as Xt, clipExportFailureOf as Y, storageEvictableCapability as Yt, createLogChannelsProvider as Z, streamBrokerCapability as Zt, DEFAULT_NATIVE_LEASE_SETTINGS as _, createEvent as _n, inferModelProvider as _t, BatteryStatusSchema as a, buildFfmpegArgs as an, egressTransportFromRequest as at, EVENT_PAD_MS as b, expandAudioChunkToF32le as bn, logChannelsCapability as bt, CLIP_STILL_REASON_HEADER as c, isSoftwareDecode as cn, evictionPolicyForMode as ct, COCO_80_LABELS as d, errMsg as dn, failureContributionCapability as dt, videoclipsCapability as en, deriveBatteryPresence as et, COCO_TO_MACRO as f, BOOT_RECOVERY_BACKOFF_MS as fn, ffmpegRate as ft, DEFAULT_EVENTS_BAND_BUFFER_SEC as g, audioChunkBytesPerSample as gn, hfModelUrl as gt, DEFAULT_DETAIL_CROP_CONVENTION as h, CamProfileSchema as hn, gifFromMp4Args as ht, BackgroundRunRegistry as i, Fmp4BoxSplitter as in, egressTranscodeSharingKey as it, RATE_CONTROL_RELAXED as j, array as jn, pickClusterStepSettings as jt, OpsLogEntrySchema as k, sleep as kn, overlayClusterStepSettings as kt, CLIP_STREAM_TRANSPORT_HEADER as l, DeviceFeature as ln, evictionPolicyOfLocation as lt, DEFAULT_CLUSTER_STEP_SETTINGS as m, CAM_PROFILE_ORDER as mn, gifDeriveSpeed as mt, AUDIO_BACKEND_CHOICES as n, AUDIO_PRESETS as nn, deriveRecordingMode as nt, CLIP_BROKER_PACED_RATES as o, evaluateSensorEdge as on, enumerateInferenceDevices as ot, DEFAULT_AUDIO_ANALYZER_CONFIG as p, BaseAddon as pn, gbToBytes as pt, cameraStreamsCapability as q, runtimeDevices as qt, AUDIO_MACRO_LABELS as r, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as rn, detectionPipelineCapability as rt, CLIP_STILL_REASON_CODE_HEADER as s, invocationFromEncodeProfile as sn, evaluateZoneRules as st, APPLE_SA_TO_MACRO as t, webrtcSessionCapability as tn, deriveDetailCropRect as tt, CLUSTER_MODEL_SCOPED_STEPS as u, DeviceType as un, exportSubjectOf as ut, DEVICE_BACKEND_TO_FORMAT as v, customAction as vn, isFirstLevelMacroClass as vt, G711_SCALE_CORRECTION_DB as w, makeSourceBrokerId as wn, mayWriteToLocation as wt, EncodeProfileSchema as x, hydrateSchema as xn, mapAudioLabelToMacro as xt, EVENT_OWNER_TYPES as y, defineCustomActions as yn, loadContributionCapability as yt, VIDEOCLIPS_MAX_OFFER_BYTES as z, record as zn, recordingExportCapability as zt };
52702
+ export { declareLogChannel as $, stripRetiredBandPreBufferSec as $t, OpsLogEntrySchema as A, sleep as An, overlayClusterStepSettings as At, VIDEOCLIPS_MAX_OFFER_BYTES as B, record as Bn, recordingExportCapability as Bt, ExportRecordSchema as C, isEvent as Cn, maskUrlCredentials as Ct, MOTION_CLOSE_AFTER_MS as D, parseJsonUnknown as Dn, migrateLegacyDeviceSignalConfig as Dt, HF_BASE_URL as E, nodePin as En, memoizePinnedFfmpeg as Et, RECORDING_SOURCE_CAMSTACK as F, lazy as Fn, pipelineExecutorCapability as Ft, audioAnalyzerCapability as G, resolveLocationMode as Gt, YAMNET_TO_MACRO as H, union as Hn, resolveClusterStepModelId as Ht, RECORDING_SOURCE_CAMSTACK_ADDON as I, literal as In, pipelineRunnerCapability as It, cameraStreamsCapability as J, runtimeDevices as Jt, audioKindId as K, resolvePoolMemoryPolicy as Kt, RecordingConfigSchema as L, number as Ln, rankStreams as Lt, RATE_CONTROL_RELAXED as M, array as Mn, pickClusterStepSettings as Mt, RATE_CONTROL_TIGHT as N, boolean as Nn, pickDetailCropConvention as Nt, NativeLeaseAdmissionSchema as O, parseProfileBrokerId as On, modeMayWrite as Ot, RECORDING_EXPORT_MAX_READ_BYTES as P, discriminatedUnion as Pn, pickNativeLeaseOverride as Pt, createLogChannelsProvider as Q, streamBrokerCapability as Qt, RecordingSignalStatusSchema as R, object as Rn, recordingArchiveCapability as Rt, EncodeProfileSchema as S, hydrateSchema as Sn, mapAudioLabelToMacro as St, G711_SCALE_CORRECTION_DB as T, makeSourceBrokerId as Tn, mayWriteToLocation as Tt, addonWidgetsSourceCapability as U, EventCategory as Un, resolveCreateExportSubject as Ut, VISIT_MERGE_GAP_MS as V, string as Vn, recordingSignalCapability as Vt, audioAnalysisCapability as W, resolveEgressDecodeHwAccel as Wt, clipExportFailureOf as X, storageEvictableCapability as Xt, clipExportFailure as Y, stepModelRunsOnFormat as Yt, createHwAccelCache as Z, storageOccupancyCapability as Zt, DEFAULT_EVENTS_BAND_BUFFER_SEC as _, audioChunkBytesPerSample as _n, hfModelUrl as _t, BackgroundRunRegistry as a, Fmp4BoxSplitter as an, egressTranscodeSharingKey as at, EVENT_OWNER_TYPES as b, defineCustomActions as bn, loadContributionCapability as bt, CLIP_STILL_REASON_CODE_HEADER as c, invocationFromEncodeProfile as cn, evaluateZoneRules as ct, CLUSTER_MODEL_SCOPED_STEPS as d, DeviceType as dn, exportSubjectOf as dt, supportedRuntimes as en, defaultDeviceFor as et, COCO_80_LABELS as f, errMsg as fn, failureContributionCapability as ft, DEFAULT_DETAIL_CROP_CONVENTION as g, CamProfileSchema as gn, gifFromMp4Args as gt, DEFAULT_CLUSTER_STEP_SETTINGS as h, CAM_PROFILE_ORDER as hn, gifDeriveSpeed as ht, AUDIO_MACRO_LABELS as i, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as in, detectionPipelineCapability as it, PoolMemoryWatchdog as j, _enum as jn, parseProcStatus as jt, NativeLeaseSettingsSchema as k, selectAssignedProfileSlots as kn, motionDetectionCapability as kt, CLIP_STILL_REASON_HEADER as l, isSoftwareDecode as ln, evictionPolicyForMode as lt, DEFAULT_AUDIO_ANALYZER_CONFIG as m, BaseAddon as mn, gbToBytes as mt, APPLE_SA_TO_MACRO as n, webrtcSessionCapability as nn, deriveDetailCropRect as nt, BatteryStatusSchema as o, buildFfmpegArgs as on, egressTransportFromRequest as ot, COCO_TO_MACRO as p, BOOT_RECOVERY_BACKOFF_MS as pn, ffmpegRate as pt, batteryCapability as q, resolveRecordingProfiles as qt, AUDIO_BACKEND_CHOICES as r, AUDIO_PRESETS as rn, deriveRecordingMode as rt, CLIP_BROKER_PACED_RATES as s, evaluateSensorEdge as sn, enumerateInferenceDevices as st, APPEARANCE_BLOCKS as t, videoclipsCapability as tn, deriveBatteryPresence as tt, CLIP_STREAM_TRANSPORT_HEADER as u, DeviceFeature as un, evictionPolicyOfLocation as ut, DEFAULT_NATIVE_LEASE_SETTINGS as v, createEvent as vn, inferModelProvider as vt, FailureCounters as w, makeProfileBrokerId as wn, mayReadLocation as wt, EVENT_PAD_MS as x, expandAudioChunkToF32le as xn, logChannelsCapability as xt, DEVICE_BACKEND_TO_FORMAT as y, customAction as yn, isFirstLevelMacroClass as yt, RingBuffer as z, preprocess as zn, recordingCapability as zt };