@camstack/system 1.2.305 → 1.2.306

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 (60) hide show
  1. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  2. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  3. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/alerts/alerts.addon.js +1 -1
  6. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  7. package/dist/builtins/autotrack/index.js +1 -1
  8. package/dist/builtins/autotrack/index.mjs +1 -1
  9. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  10. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  11. package/dist/builtins/camera-grid/index.js +1 -1
  12. package/dist/builtins/camera-grid/index.mjs +1 -1
  13. package/dist/builtins/console-logging/index.js +1 -1
  14. package/dist/builtins/console-logging/index.mjs +1 -1
  15. package/dist/builtins/core-blocks/core-blocks.addon.js +1 -1
  16. package/dist/builtins/core-blocks/core-blocks.addon.mjs +1 -1
  17. package/dist/builtins/device-manager/device-extension-linked-slot.d.ts +19 -0
  18. package/dist/builtins/device-manager/device-linked-devices.d.ts +26 -18
  19. package/dist/builtins/device-manager/device-manager.addon.js +157 -135
  20. package/dist/builtins/device-manager/device-manager.addon.mjs +157 -135
  21. package/dist/builtins/doorbell/binding-mirror.d.ts +13 -7
  22. package/dist/builtins/doorbell/virtual-doorbell.addon.d.ts +12 -45
  23. package/dist/builtins/doorbell/virtual-doorbell.addon.js +29 -102
  24. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +29 -102
  25. package/dist/builtins/hub-forwarder/index.js +1 -1
  26. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  27. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  28. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  29. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  30. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  31. package/dist/builtins/local-network/local-network.addon.js +1 -1
  32. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  33. package/dist/builtins/loki-logging/index.js +1 -1
  34. package/dist/builtins/loki-logging/index.mjs +1 -1
  35. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  36. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  37. package/dist/builtins/platform-probe/index.js +1 -1
  38. package/dist/builtins/platform-probe/index.mjs +1 -1
  39. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  40. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  41. package/dist/builtins/snapshot/index.js +1 -1
  42. package/dist/builtins/snapshot/index.mjs +1 -1
  43. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  44. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  45. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  46. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  47. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  48. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  49. package/dist/builtins/system-config/system-config.addon.js +1 -1
  50. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  51. package/dist/builtins/winston-logging/index.js +1 -1
  52. package/dist/builtins/winston-logging/index.mjs +1 -1
  53. package/dist/{dist-Df1NhKxm.mjs → dist-CLfJMMdf.mjs} +40 -68
  54. package/dist/{dist-BK4iP6ab.js → dist-vecbhDzu.js} +39 -73
  55. package/dist/index.js +1 -1
  56. package/dist/index.mjs +1 -1
  57. package/dist/{retired-settings-keys-DwWMph6F.js → retired-settings-keys-Bm2p0Rot.js} +1 -1
  58. package/dist/{retired-settings-keys-dC4ckbXJ.mjs → retired-settings-keys-C1ODcdnr.mjs} +1 -1
  59. package/package.json +1 -1
  60. package/dist/builtins/device-manager/device-store-sections.d.ts +0 -26
@@ -1,4 +1,4 @@
1
- import { Mt as logDestinationCapability, _n as BaseAddon } from "../../dist-Df1NhKxm.mjs";
1
+ import { gn as BaseAddon, jt as logDestinationCapability } from "../../dist-CLfJMMdf.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  import * as path$1 from "node:path";
4
4
  import path from "node:path";
@@ -691,7 +691,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
691
691
  return EventCategory;
692
692
  }({});
693
693
  //#endregion
694
- //#region ../types/dist/sleep-BXv0ZcRa.mjs
694
+ //#region ../types/dist/sleep-DC-wdyeS.mjs
695
695
  /**
696
696
  * The audio chunk plane's byte format, and the ONE expansion from a coded
697
697
  * window to float samples (D455).
@@ -12699,8 +12699,22 @@ var LinkedDeviceSchema = z.object({
12699
12699
  * The `linked-devices` extension slot's editable value (D648): the operator's
12700
12700
  * pick list, exactly what `_linkedDeviceIds` persists. Tree children are NOT
12701
12701
  * in it — they are always linked and are not a pick.
12702
+ *
12703
+ * `trackedDeviceIds` (D655) is the tracked-event opt-in, exactly what
12704
+ * `_linkedDeviceTrackedIds` persists: which linked devices materialize a
12705
+ * synthetic tracked event on the camera. A read always carries it AS STORED
12706
+ * (an absent key reads as `[]`, which is what the resolver makes of it —
12707
+ * NONE). On a write it is optional: absent leaves the opt-in untouched, so a
12708
+ * card built before D655 cannot erase it by saving the pick list. A present
12709
+ * list REPLACES the opt-in; each id must be a pick, a device the camera links
12710
+ * by structure (the row's `impliedSources`: tree children, a picked
12711
+ * container's child) or already stored — so what was read can always be
12712
+ * written back unchanged, and a NEW opt-in outside the linked set is refused.
12702
12713
  */
12703
- var LinkedDevicesSlotValueSchema = z.object({ deviceIds: z.array(z.number().int().positive()) });
12714
+ var LinkedDevicesSlotValueSchema = z.object({
12715
+ deviceIds: z.array(z.number().int().positive()),
12716
+ trackedDeviceIds: z.array(z.number().int().positive()).optional()
12717
+ });
12704
12718
  /**
12705
12719
  * The `linked-devices` slot — a camera's companion devices, owned by the
12706
12720
  * device manager over `_linkedDeviceIds` (D648, D356). Any device may be a
@@ -12867,7 +12881,6 @@ var deviceManagerCapability = {
12867
12881
  scope: "system",
12868
12882
  mode: "singleton",
12869
12883
  extensionSlots: [LINKED_DEVICES_SLOT],
12870
- exposesDeviceSettings: true,
12871
12884
  methods: {
12872
12885
  /** Reserve (or re-resolve) a progressive numeric id for `(addonId, stableId)`.
12873
12886
  * Idempotent: returns the existing id if one is already persisted for the
@@ -13374,8 +13387,8 @@ var deviceManagerCapability = {
13374
13387
  * operator's persisted pick list (`mode` is always `manual` since D356:
13375
13388
  * same-location devices are suggested by the picker, never linked on
13376
13389
  * their own). Excludes the camera itself; deduped. The list is written by
13377
- * the settings section or the `linked-devices` extension slot, both over
13378
- * `_linkedDeviceIds` (see the module docblock).
13390
+ * the `linked-devices` extension slot over `_linkedDeviceIds` (see the
13391
+ * module docblock).
13379
13392
  */
13380
13393
  getLinkedDevices: method(z.object({ deviceId: z.number() }), z.object({
13381
13394
  mode: LinkedDevicesModeSchema,
@@ -22765,7 +22778,14 @@ var pipelineExecutorCapability = {
22765
22778
  */
22766
22779
  inferCached: method(z.object({
22767
22780
  stepId: z.string(),
22768
- frameId: z.number().int()
22781
+ frameId: z.number().int(),
22782
+ /**
22783
+ * The model to time — REQUIRED (D658). Without it the pool answered the
22784
+ * step's ACTIVE variant (the first loaded after boot), so a benchmark
22785
+ * of model B silently timed model A. Callers pass the `rootModelId`
22786
+ * their warmup `runPipeline` reported: the model that actually ran.
22787
+ */
22788
+ modelId: z.string().min(1)
22769
22789
  }), z.record(z.string(), z.unknown()), { kind: "mutation" }),
22770
22790
  /**
22771
22791
  * Release a cached frame from the Python pool's memory.
@@ -28095,28 +28115,6 @@ var SOURCE_CAP_CHANGED_AT_FIELD = {
28095
28115
  };
28096
28116
  /** Cap names whose presence in a device's bindings qualify it as a source. */
28097
28117
  var SOURCE_CAPS = Object.keys(SOURCE_CAP_ACTIVE_FIELD);
28098
- /**
28099
- * Device `type` values (from `DeviceType`) that can host a binary/switch
28100
- * source cap. Used by the camera's `device-multiselect` picker as the
28101
- * CLIENT-SIDE filter, alongside `SOURCE_CAPS`.
28102
- *
28103
- * Why types and not caps alone: the shared picker filters
28104
- * `deviceManager.listAll` rows client-side, and those rows carry only the
28105
- * device's advertised `features` — NOT its registered cap list. On the live
28106
- * cluster binary sensors and switches advertise EMPTY features (features
28107
- * mirror only a handful of caps like `motion-trigger`), so a caps-only
28108
- * filter matched against `features` would list nothing (the very bug this
28109
- * replaced, which relied on the now-empty `getAllBindings`). Matching by
28110
- * `type` is the reliable client-side signal; the union with `SOURCE_CAPS`
28111
- * still captures any device that DOES advertise a source-cap feature.
28112
- * `sensor` covers contact/motion/flood/gas/smoke/CO/vibration/tamper,
28113
- * `switch` covers switches, `control` covers generic binary actuators.
28114
- */
28115
- var SOURCE_DEVICE_TYPES = [
28116
- "sensor",
28117
- "switch",
28118
- "control"
28119
- ];
28120
28118
  /** True when a cap is a recognised binary/switch source. */
28121
28119
  function isSourceCap(capName) {
28122
28120
  return Object.prototype.hasOwnProperty.call(SOURCE_CAP_ACTIVE_FIELD, capName);
@@ -28262,7 +28260,6 @@ var doorbellCapability = {
28262
28260
  kind: "wrapper",
28263
28261
  defaultActive: false,
28264
28262
  deviceTypes: [DeviceType.Button, DeviceType.Camera],
28265
- exposesDeviceSettings: true,
28266
28263
  extensionSlots: [DOORBELL_SOURCE_SLOT],
28267
28264
  methods: {},
28268
28265
  events: {
@@ -28371,7 +28368,17 @@ var ExtensionSlotStateSchema = z.object({
28371
28368
  projects: z.string().nullable(),
28372
28369
  activation: ExtensionSlotActivationSchema.nullable(),
28373
28370
  value: ExtensionSlotValueSchema,
28374
- sources: z.array(ExtensionSlotSourceSchema)
28371
+ sources: z.array(ExtensionSlotSourceSchema),
28372
+ /**
28373
+ * Devices the owner links to the host ON ITS OWN, by structure, and that
28374
+ * are therefore not in `value` (D655): a camera's device-tree children, and
28375
+ * the child a picked container stands for (D356 — a container is never a
28376
+ * pick, its children are). Read-only; the editor shows them and may offer
28377
+ * per-device options on them (the linked-devices tracked-event opt-in).
28378
+ * Absent when the owner links nothing beyond the picks, and from an owner
28379
+ * older than D655.
28380
+ */
28381
+ impliedSources: z.array(ExtensionSlotSourceSchema).optional()
28375
28382
  });
28376
28383
  /**
28377
28384
  * A provider that could not answer `listSlots` at all. It could not name its
@@ -41567,7 +41574,8 @@ function createDeviceExtensionProvider(options) {
41567
41574
  projects: EXTENSION_SLOTS[slot.slot].descriptor.projects ?? null,
41568
41575
  activation: listing.activation,
41569
41576
  value: listing.value,
41570
- sources: [...listing.sources]
41577
+ sources: [...listing.sources],
41578
+ ...listing.impliedSources !== void 0 ? { impliedSources: [...listing.impliedSources] } : {}
41571
41579
  });
41572
41580
  }
41573
41581
  return rows;
@@ -46126,12 +46134,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
46126
46134
  addonId: null,
46127
46135
  access: "create"
46128
46136
  },
46129
- "deviceManager.applyDeviceSettingsPatch": {
46130
- capName: "device-manager",
46131
- capScope: "system",
46132
- addonId: null,
46133
- access: "create"
46134
- },
46135
46137
  "deviceManager.applyInitialMeta": {
46136
46138
  capName: "device-manager",
46137
46139
  capScope: "system",
@@ -46234,12 +46236,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
46234
46236
  addonId: null,
46235
46237
  access: "view"
46236
46238
  },
46237
- "deviceManager.getDeviceLiveContribution": {
46238
- capName: "device-manager",
46239
- capScope: "system",
46240
- addonId: null,
46241
- access: "view"
46242
- },
46243
46239
  "deviceManager.getDeviceLiveInfoAggregate": {
46244
46240
  capName: "device-manager",
46245
46241
  capScope: "system",
@@ -46252,12 +46248,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
46252
46248
  addonId: null,
46253
46249
  access: "view"
46254
46250
  },
46255
- "deviceManager.getDeviceSettingsContribution": {
46256
- capName: "device-manager",
46257
- capScope: "system",
46258
- addonId: null,
46259
- access: "view"
46260
- },
46261
46251
  "deviceManager.getDeviceStatusAggregate": {
46262
46252
  capName: "device-manager",
46263
46253
  capScope: "system",
@@ -46762,24 +46752,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
46762
46752
  addonId: null,
46763
46753
  access: "view"
46764
46754
  },
46765
- "doorbell.applyDeviceSettingsPatch": {
46766
- capName: "doorbell",
46767
- capScope: "device",
46768
- addonId: null,
46769
- access: "create"
46770
- },
46771
- "doorbell.getDeviceLiveContribution": {
46772
- capName: "doorbell",
46773
- capScope: "device",
46774
- addonId: null,
46775
- access: "view"
46776
- },
46777
- "doorbell.getDeviceSettingsContribution": {
46778
- capName: "doorbell",
46779
- capScope: "device",
46780
- addonId: null,
46781
- access: "view"
46782
- },
46783
46755
  "doorbell.getStatus": {
46784
46756
  capName: "doorbell",
46785
46757
  capScope: "device",
@@ -55104,4 +55076,4 @@ function enumerateInferenceDevices(hw) {
55104
55076
  return out;
55105
55077
  }
55106
55078
  //#endregion
55107
- export { declarationOwnerNodeId as $, scopesAllowDeviceCap as $t, STREAM_PROFILE_META as A, createEvent as An, localNetworkCapability as At, alertsCapability as B, readinessKey as Bn, normalizeUnit as Bt, RECORDING_SOURCE_CAMSTACK_ADDON as C, DeviceType as Cn, isSameAddonId as Ct, SOURCE_CAPS as D, asJsonObject as Dn, legacyAutoLinkIds as Dt, RecordingStatusSchema as E, WELL_KNOWN_TAB_MAP as En, kebabToCamel as Et, StorageMigrationJobSchema as F, isDeviceConfigCap as Fn, mayReadLocation as Ft, buildStreamParamsConfigSchema as G, procedureAuthKey as Gt, backupCapability as H, scopeKey as Hn, objectInputDeclaresRequiredDeviceId as Ht, UserRecordSchema as I, isEvent as In, mayWriteToLocation as It, coreBlockAddonId as J, resolveBucketMs as Jt, cameraGridLayoutCapability as K, ptzAutotrackCapability as Kt, addonPagesCapability as L, nodePin as Ln, metricsProviderCapability as Lt, StorageCleanupJobSchema as M, emitReadiness as Mn, logDestinationCapability as Mt, StorageLocationModeSchema as N, expandCapMethods as Nn, logLevelAtMost as Nt, SOURCE_DEVICE_TYPES as O, asNumber as On, legacyModeOf as Ot, StorageLocationTypeSchema as P, hydrateSchema as Pn, looseSchema as Pt, dataStoreProviderCapability as Q, scopesAllowAddon as Qt, addonSettingsCapability as R, parseJsonObject as Rn, modeMayWrite as Rt, MOTION_CLOSE_AFTER_MS as S, DeviceRole as Sn, isObjectInput as St, RUNTIME_DEFAULTS as T, ReadinessTimeoutError as Tn, isVoidInput as Tt, bareAddonId as U, sleep as Un, parseStreamParamsFormPatch as Ut, authProviderCapability as V, resolveCapMount as Vn, objectInputDeclaresAddonId as Vt, batteryCapability as W, EventCategory as Wn, platformProbeCapability as Wt, coreBlocksCapability as X, resolveMethodAuth as Xt, coreBlockIdFromAddonId as Y, resolveLocationMode as Yt, createDeviceExtensionProvider as Z, runtimeStatePolicyFor as Zt, LOG_LEVEL_RANK as _, BaseAddon as _n, formatMinutes as _t, BatteryStatusSchema as a, storageMigrationCapability as an, deviceStateCapability as at, METHOD_ACCESS_MAP as b, DEVICE_STATUS_METHOD as bn, isCollectionArrayMethod as bt, CORE_BLOCKS_ADDON_ID as c, streamCatalogCapability as cn, enumerateInferenceDevices as ct, DAY_NAMES as d, vectorDimFromBase64 as dn, evaluateSensorEdge as dt, scoreRuntimes as en, decodeVectorBase64 as et, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as f, vectorIndexDimConflictError as fn, evictionPolicyOfLocation as ft, FIRST_LEVEL_MACRO_CLASSES as g, buildFfmpegArgs as gn, foldSnapshotByFunction as gt, DeviceStatusSchema as h, errMsg as hn, filesystemBrowseCapability as ht, BaseDevice as i, storageCapability as in, deviceManagerCapability as it, ScopedTokenSchema as j, emitDownForOwnedCaps as jn, locationIconKey as jt, STORAGE_ACCESS_FALLBACK as k, asString as kn, lifecycleJobSchema as kt, CORE_BLOCK_ADDON_PREFIX as l, streamQualityLabel as ln, enumerateItemArrayFields as lt, DeclaredDevices as m, withLocationMode as mn, extractNestedAddonId as mt, AlertSchema as n, siteZoneKey as nn, deriveBatteryPresence as nt, CAMERA_SWITCH_ORDER as o, storageOccupancyCapability as on, deviceStatusCapability as ot, DERIVED_CAMERA_SILENCED_CAP_NAMES as p, vectorStoreCapability as pn, expandContainer as pt, collectSecretConfigKeys as q, reducePoints as qt, ApiKeyRecordSchema as r, snapshotCapability as rn, deviceExtensionCapability as rt, CAP_NAMES_WITH_STATUS as s, storageProviderCapability as sn, doorbellCapability as st, ALL_CAPABILITY_DEFINITIONS as t, settingsStoreCapability as tn, defineExtensionSlotProvider as tt, CoreBlockSchema as u, userManagementCapability as un, enumerateSchemaFields as ut, LegacyStorageLocationDefaultSchema as v, DATAPLANE_SECRET_HEADER as vn, gbToBytes as vt, REDACTED_SECRET as w, ReadinessRegistry as wn, isSourceCap as wt, MINUTES_PER_DAY as x, DeviceFeature as xn, isLocationEnabled as xt, LocationIconIdSchema as y, DEVICE_SETTINGS_CONTRIBUTION_METHODS as yn, isArrayOutputSchema as yt, addonWidgetsCapability as z, parseJsonUnknown as zn, motionCapability as zt };
55079
+ export { decodeVectorBase64 as $, scoreRuntimes as $t, ScopedTokenSchema as A, emitDownForOwnedCaps as An, locationIconKey as At, authProviderCapability as B, resolveCapMount as Bn, objectInputDeclaresAddonId as Bt, RECORDING_SOURCE_CAMSTACK_ADDON as C, ReadinessRegistry as Cn, isSourceCap as Ct, SOURCE_CAPS as D, asNumber as Dn, legacyModeOf as Dt, RecordingStatusSchema as E, asJsonObject as En, legacyAutoLinkIds as Et, UserRecordSchema as F, isEvent as Fn, mayWriteToLocation as Ft, cameraGridLayoutCapability as G, ptzAutotrackCapability as Gt, bareAddonId as H, sleep as Hn, parseStreamParamsFormPatch as Ht, addonPagesCapability as I, nodePin as In, metricsProviderCapability as It, coreBlockIdFromAddonId as J, resolveLocationMode as Jt, collectSecretConfigKeys as K, reducePoints as Kt, addonSettingsCapability as L, parseJsonObject as Ln, modeMayWrite as Lt, StorageLocationModeSchema as M, expandCapMethods as Mn, logLevelAtMost as Mt, StorageLocationTypeSchema as N, hydrateSchema as Nn, looseSchema as Nt, STORAGE_ACCESS_FALLBACK as O, asString as On, lifecycleJobSchema as Ot, StorageMigrationJobSchema as P, isDeviceConfigCap as Pn, mayReadLocation as Pt, declarationOwnerNodeId as Q, scopesAllowDeviceCap as Qt, addonWidgetsCapability as R, parseJsonUnknown as Rn, motionCapability as Rt, MOTION_CLOSE_AFTER_MS as S, DeviceType as Sn, isSameAddonId as St, RUNTIME_DEFAULTS as T, WELL_KNOWN_TAB_MAP as Tn, kebabToCamel as Tt, batteryCapability as U, EventCategory as Un, platformProbeCapability as Ut, backupCapability as V, scopeKey as Vn, objectInputDeclaresRequiredDeviceId as Vt, buildStreamParamsConfigSchema as W, procedureAuthKey as Wt, createDeviceExtensionProvider as X, runtimeStatePolicyFor as Xt, coreBlocksCapability as Y, resolveMethodAuth as Yt, dataStoreProviderCapability as Z, scopesAllowAddon as Zt, LOG_LEVEL_RANK as _, DATAPLANE_SECRET_HEADER as _n, gbToBytes as _t, BatteryStatusSchema as a, storageOccupancyCapability as an, deviceStatusCapability as at, METHOD_ACCESS_MAP as b, DeviceFeature as bn, isLocationEnabled as bt, CORE_BLOCKS_ADDON_ID as c, streamQualityLabel as cn, enumerateItemArrayFields as ct, DAY_NAMES as d, vectorIndexDimConflictError as dn, evictionPolicyOfLocation as dt, settingsStoreCapability as en, defineExtensionSlotProvider as et, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as f, vectorStoreCapability as fn, expandContainer as ft, FIRST_LEVEL_MACRO_CLASSES as g, BaseAddon as gn, formatMinutes as gt, DeviceStatusSchema as h, buildFfmpegArgs as hn, foldSnapshotByFunction as ht, BaseDevice as i, storageMigrationCapability as in, deviceStateCapability as it, StorageCleanupJobSchema as j, emitReadiness as jn, logDestinationCapability as jt, STREAM_PROFILE_META as k, createEvent as kn, localNetworkCapability as kt, CORE_BLOCK_ADDON_PREFIX as l, userManagementCapability as ln, enumerateSchemaFields as lt, DeclaredDevices as m, errMsg as mn, filesystemBrowseCapability as mt, AlertSchema as n, snapshotCapability as nn, deviceExtensionCapability as nt, CAMERA_SWITCH_ORDER as o, storageProviderCapability as on, doorbellCapability as ot, DERIVED_CAMERA_SILENCED_CAP_NAMES as p, withLocationMode as pn, extractNestedAddonId as pt, coreBlockAddonId as q, resolveBucketMs as qt, ApiKeyRecordSchema as r, storageCapability as rn, deviceManagerCapability as rt, CAP_NAMES_WITH_STATUS as s, streamCatalogCapability as sn, enumerateInferenceDevices as st, ALL_CAPABILITY_DEFINITIONS as t, siteZoneKey as tn, deriveBatteryPresence as tt, CoreBlockSchema as u, vectorDimFromBase64 as un, evaluateSensorEdge as ut, LegacyStorageLocationDefaultSchema as v, DEVICE_SETTINGS_CONTRIBUTION_METHODS as vn, isArrayOutputSchema as vt, REDACTED_SECRET as w, ReadinessTimeoutError as wn, isVoidInput as wt, MINUTES_PER_DAY as x, DeviceRole as xn, isObjectInput as xt, LocationIconIdSchema as y, DEVICE_STATUS_METHOD as yn, isCollectionArrayMethod as yt, alertsCapability as z, readinessKey as zn, normalizeUnit as zt };
@@ -691,7 +691,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
691
691
  return EventCategory;
692
692
  }({});
693
693
  //#endregion
694
- //#region ../types/dist/sleep-BXv0ZcRa.mjs
694
+ //#region ../types/dist/sleep-DC-wdyeS.mjs
695
695
  /**
696
696
  * The audio chunk plane's byte format, and the ONE expansion from a coded
697
697
  * window to float samples (D455).
@@ -12699,8 +12699,22 @@ var LinkedDeviceSchema = zod.z.object({
12699
12699
  * The `linked-devices` extension slot's editable value (D648): the operator's
12700
12700
  * pick list, exactly what `_linkedDeviceIds` persists. Tree children are NOT
12701
12701
  * in it — they are always linked and are not a pick.
12702
+ *
12703
+ * `trackedDeviceIds` (D655) is the tracked-event opt-in, exactly what
12704
+ * `_linkedDeviceTrackedIds` persists: which linked devices materialize a
12705
+ * synthetic tracked event on the camera. A read always carries it AS STORED
12706
+ * (an absent key reads as `[]`, which is what the resolver makes of it —
12707
+ * NONE). On a write it is optional: absent leaves the opt-in untouched, so a
12708
+ * card built before D655 cannot erase it by saving the pick list. A present
12709
+ * list REPLACES the opt-in; each id must be a pick, a device the camera links
12710
+ * by structure (the row's `impliedSources`: tree children, a picked
12711
+ * container's child) or already stored — so what was read can always be
12712
+ * written back unchanged, and a NEW opt-in outside the linked set is refused.
12702
12713
  */
12703
- var LinkedDevicesSlotValueSchema = zod.z.object({ deviceIds: zod.z.array(zod.z.number().int().positive()) });
12714
+ var LinkedDevicesSlotValueSchema = zod.z.object({
12715
+ deviceIds: zod.z.array(zod.z.number().int().positive()),
12716
+ trackedDeviceIds: zod.z.array(zod.z.number().int().positive()).optional()
12717
+ });
12704
12718
  /**
12705
12719
  * The `linked-devices` slot — a camera's companion devices, owned by the
12706
12720
  * device manager over `_linkedDeviceIds` (D648, D356). Any device may be a
@@ -12867,7 +12881,6 @@ var deviceManagerCapability = {
12867
12881
  scope: "system",
12868
12882
  mode: "singleton",
12869
12883
  extensionSlots: [LINKED_DEVICES_SLOT],
12870
- exposesDeviceSettings: true,
12871
12884
  methods: {
12872
12885
  /** Reserve (or re-resolve) a progressive numeric id for `(addonId, stableId)`.
12873
12886
  * Idempotent: returns the existing id if one is already persisted for the
@@ -13374,8 +13387,8 @@ var deviceManagerCapability = {
13374
13387
  * operator's persisted pick list (`mode` is always `manual` since D356:
13375
13388
  * same-location devices are suggested by the picker, never linked on
13376
13389
  * their own). Excludes the camera itself; deduped. The list is written by
13377
- * the settings section or the `linked-devices` extension slot, both over
13378
- * `_linkedDeviceIds` (see the module docblock).
13390
+ * the `linked-devices` extension slot over `_linkedDeviceIds` (see the
13391
+ * module docblock).
13379
13392
  */
13380
13393
  getLinkedDevices: method(zod.z.object({ deviceId: zod.z.number() }), zod.z.object({
13381
13394
  mode: LinkedDevicesModeSchema,
@@ -22765,7 +22778,14 @@ var pipelineExecutorCapability = {
22765
22778
  */
22766
22779
  inferCached: method(zod.z.object({
22767
22780
  stepId: zod.z.string(),
22768
- frameId: zod.z.number().int()
22781
+ frameId: zod.z.number().int(),
22782
+ /**
22783
+ * The model to time — REQUIRED (D658). Without it the pool answered the
22784
+ * step's ACTIVE variant (the first loaded after boot), so a benchmark
22785
+ * of model B silently timed model A. Callers pass the `rootModelId`
22786
+ * their warmup `runPipeline` reported: the model that actually ran.
22787
+ */
22788
+ modelId: zod.z.string().min(1)
22769
22789
  }), zod.z.record(zod.z.string(), zod.z.unknown()), { kind: "mutation" }),
22770
22790
  /**
22771
22791
  * Release a cached frame from the Python pool's memory.
@@ -28095,28 +28115,6 @@ var SOURCE_CAP_CHANGED_AT_FIELD = {
28095
28115
  };
28096
28116
  /** Cap names whose presence in a device's bindings qualify it as a source. */
28097
28117
  var SOURCE_CAPS = Object.keys(SOURCE_CAP_ACTIVE_FIELD);
28098
- /**
28099
- * Device `type` values (from `DeviceType`) that can host a binary/switch
28100
- * source cap. Used by the camera's `device-multiselect` picker as the
28101
- * CLIENT-SIDE filter, alongside `SOURCE_CAPS`.
28102
- *
28103
- * Why types and not caps alone: the shared picker filters
28104
- * `deviceManager.listAll` rows client-side, and those rows carry only the
28105
- * device's advertised `features` — NOT its registered cap list. On the live
28106
- * cluster binary sensors and switches advertise EMPTY features (features
28107
- * mirror only a handful of caps like `motion-trigger`), so a caps-only
28108
- * filter matched against `features` would list nothing (the very bug this
28109
- * replaced, which relied on the now-empty `getAllBindings`). Matching by
28110
- * `type` is the reliable client-side signal; the union with `SOURCE_CAPS`
28111
- * still captures any device that DOES advertise a source-cap feature.
28112
- * `sensor` covers contact/motion/flood/gas/smoke/CO/vibration/tamper,
28113
- * `switch` covers switches, `control` covers generic binary actuators.
28114
- */
28115
- var SOURCE_DEVICE_TYPES = [
28116
- "sensor",
28117
- "switch",
28118
- "control"
28119
- ];
28120
28118
  /** True when a cap is a recognised binary/switch source. */
28121
28119
  function isSourceCap(capName) {
28122
28120
  return Object.prototype.hasOwnProperty.call(SOURCE_CAP_ACTIVE_FIELD, capName);
@@ -28262,7 +28260,6 @@ var doorbellCapability = {
28262
28260
  kind: "wrapper",
28263
28261
  defaultActive: false,
28264
28262
  deviceTypes: [DeviceType.Button, DeviceType.Camera],
28265
- exposesDeviceSettings: true,
28266
28263
  extensionSlots: [DOORBELL_SOURCE_SLOT],
28267
28264
  methods: {},
28268
28265
  events: {
@@ -28371,7 +28368,17 @@ var ExtensionSlotStateSchema = zod.z.object({
28371
28368
  projects: zod.z.string().nullable(),
28372
28369
  activation: ExtensionSlotActivationSchema.nullable(),
28373
28370
  value: ExtensionSlotValueSchema,
28374
- sources: zod.z.array(ExtensionSlotSourceSchema)
28371
+ sources: zod.z.array(ExtensionSlotSourceSchema),
28372
+ /**
28373
+ * Devices the owner links to the host ON ITS OWN, by structure, and that
28374
+ * are therefore not in `value` (D655): a camera's device-tree children, and
28375
+ * the child a picked container stands for (D356 — a container is never a
28376
+ * pick, its children are). Read-only; the editor shows them and may offer
28377
+ * per-device options on them (the linked-devices tracked-event opt-in).
28378
+ * Absent when the owner links nothing beyond the picks, and from an owner
28379
+ * older than D655.
28380
+ */
28381
+ impliedSources: zod.z.array(ExtensionSlotSourceSchema).optional()
28375
28382
  });
28376
28383
  /**
28377
28384
  * A provider that could not answer `listSlots` at all. It could not name its
@@ -41567,7 +41574,8 @@ function createDeviceExtensionProvider(options) {
41567
41574
  projects: EXTENSION_SLOTS[slot.slot].descriptor.projects ?? null,
41568
41575
  activation: listing.activation,
41569
41576
  value: listing.value,
41570
- sources: [...listing.sources]
41577
+ sources: [...listing.sources],
41578
+ ...listing.impliedSources !== void 0 ? { impliedSources: [...listing.impliedSources] } : {}
41571
41579
  });
41572
41580
  }
41573
41581
  return rows;
@@ -46126,12 +46134,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
46126
46134
  addonId: null,
46127
46135
  access: "create"
46128
46136
  },
46129
- "deviceManager.applyDeviceSettingsPatch": {
46130
- capName: "device-manager",
46131
- capScope: "system",
46132
- addonId: null,
46133
- access: "create"
46134
- },
46135
46137
  "deviceManager.applyInitialMeta": {
46136
46138
  capName: "device-manager",
46137
46139
  capScope: "system",
@@ -46234,12 +46236,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
46234
46236
  addonId: null,
46235
46237
  access: "view"
46236
46238
  },
46237
- "deviceManager.getDeviceLiveContribution": {
46238
- capName: "device-manager",
46239
- capScope: "system",
46240
- addonId: null,
46241
- access: "view"
46242
- },
46243
46239
  "deviceManager.getDeviceLiveInfoAggregate": {
46244
46240
  capName: "device-manager",
46245
46241
  capScope: "system",
@@ -46252,12 +46248,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
46252
46248
  addonId: null,
46253
46249
  access: "view"
46254
46250
  },
46255
- "deviceManager.getDeviceSettingsContribution": {
46256
- capName: "device-manager",
46257
- capScope: "system",
46258
- addonId: null,
46259
- access: "view"
46260
- },
46261
46251
  "deviceManager.getDeviceStatusAggregate": {
46262
46252
  capName: "device-manager",
46263
46253
  capScope: "system",
@@ -46762,24 +46752,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
46762
46752
  addonId: null,
46763
46753
  access: "view"
46764
46754
  },
46765
- "doorbell.applyDeviceSettingsPatch": {
46766
- capName: "doorbell",
46767
- capScope: "device",
46768
- addonId: null,
46769
- access: "create"
46770
- },
46771
- "doorbell.getDeviceLiveContribution": {
46772
- capName: "doorbell",
46773
- capScope: "device",
46774
- addonId: null,
46775
- access: "view"
46776
- },
46777
- "doorbell.getDeviceSettingsContribution": {
46778
- capName: "doorbell",
46779
- capScope: "device",
46780
- addonId: null,
46781
- access: "view"
46782
- },
46783
46755
  "doorbell.getStatus": {
46784
46756
  capName: "doorbell",
46785
46757
  capScope: "device",
@@ -55326,12 +55298,6 @@ Object.defineProperty(exports, "SOURCE_CAPS", {
55326
55298
  return SOURCE_CAPS;
55327
55299
  }
55328
55300
  });
55329
- Object.defineProperty(exports, "SOURCE_DEVICE_TYPES", {
55330
- enumerable: true,
55331
- get: function() {
55332
- return SOURCE_DEVICE_TYPES;
55333
- }
55334
- });
55335
55301
  Object.defineProperty(exports, "STORAGE_ACCESS_FALLBACK", {
55336
55302
  enumerable: true,
55337
55303
  get: function() {
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("./chunk-Cek0wNdY.js");
3
- const require_dist = require("./dist-BK4iP6ab.js");
3
+ const require_dist = require("./dist-vecbhDzu.js");
4
4
  const require_builtins_alerts_alerts_addon = require("./builtins/alerts/alerts.addon.js");
5
5
  require("./builtins/alerts/index.js");
6
6
  const require_formatter = require("./formatter-DqAKDlvN.js");
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM$1, r as __exportAll, t as __commonJSMin$1 } from "./chunk-CNf5ZN-e.mjs";
2
- import { $t as scopesAllowDeviceCap, An as createEvent, Bn as readinessKey, Dn as asJsonObject$1, Et as kebabToCamel, Gt as procedureAuthKey, Hn as scopeKey, Ht as objectInputDeclaresRequiredDeviceId, Nn as expandCapMethods, Nt as logLevelAtMost, On as asNumber, Pt as looseSchema, Qt as scopesAllowAddon, R as addonSettingsCapability, Rn as parseJsonObject, St as isObjectInput, T as RUNTIME_DEFAULTS, Tn as ReadinessTimeoutError, Tt as isVoidInput, Vn as resolveCapMount, Vt as objectInputDeclaresAddonId, Wn as EventCategory$1, Xt as resolveMethodAuth, _ as LOG_LEVEL_RANK, b as METHOD_ACCESS_MAP, bn as DEVICE_STATUS_METHOD, bt as isCollectionArrayMethod, hn as errMsg$1, jn as emitDownForOwnedCaps, kn as asString$1, kt as lifecycleJobSchema, mt as extractNestedAddonId, t as ALL_CAPABILITY_DEFINITIONS, vn as DATAPLANE_SECRET_HEADER$1, wn as ReadinessRegistry, yn as DEVICE_SETTINGS_CONTRIBUTION_METHODS, yt as isArrayOutputSchema, zn as parseJsonUnknown } from "./dist-Df1NhKxm.mjs";
2
+ import { An as emitDownForOwnedCaps, Bn as resolveCapMount, Bt as objectInputDeclaresAddonId, Cn as ReadinessRegistry, Dn as asNumber, En as asJsonObject$1, L as addonSettingsCapability, Ln as parseJsonObject, Mn as expandCapMethods, Mt as logLevelAtMost, Nt as looseSchema, On as asString$1, Ot as lifecycleJobSchema, Qt as scopesAllowDeviceCap, Rn as parseJsonUnknown, T as RUNTIME_DEFAULTS, Tt as kebabToCamel, Un as EventCategory$1, Vn as scopeKey, Vt as objectInputDeclaresRequiredDeviceId, Wt as procedureAuthKey, Yt as resolveMethodAuth, Zt as scopesAllowAddon, _ as LOG_LEVEL_RANK, _n as DATAPLANE_SECRET_HEADER$1, b as METHOD_ACCESS_MAP, kn as createEvent, mn as errMsg$1, pt as extractNestedAddonId, t as ALL_CAPABILITY_DEFINITIONS, vn as DEVICE_SETTINGS_CONTRIBUTION_METHODS, vt as isArrayOutputSchema, wn as ReadinessTimeoutError, wt as isVoidInput, xt as isObjectInput, yn as DEVICE_STATUS_METHOD, yt as isCollectionArrayMethod, zn as readinessKey } from "./dist-CLfJMMdf.mjs";
3
3
  import { AlertCenterAddon } from "./builtins/alerts/alerts.addon.mjs";
4
4
  import "./builtins/alerts/index.mjs";
5
5
  import { t as formatLogLine } from "./formatter-B7qW8bPJ.mjs";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-BK4iP6ab.js");
1
+ const require_dist = require("./dist-vecbhDzu.js");
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
@@ -1,4 +1,4 @@
1
- import { Dn as asJsonObject } from "./dist-Df1NhKxm.mjs";
1
+ import { En as asJsonObject } from "./dist-CLfJMMdf.mjs";
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/system",
3
- "version": "1.2.305",
3
+ "version": "1.2.306",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",
@@ -1,26 +0,0 @@
1
- import { ProviderContext } from './device-provider-context.js';
2
- /** One device-store-backed section: the keys it owns + how to persist them. */
3
- export interface DeviceStoreSection {
4
- /** Reserved config keys this section owns (must not reach the driver). */
5
- readonly keys: readonly string[];
6
- /** Persist this section's slice of a save into the device-store blob. */
7
- apply(pctx: Pick<ProviderContext, 'settings'>, deviceId: number, patch: Record<string, unknown>): Promise<unknown>;
8
- }
9
- /** The device-manager's device-store-backed sections. Add an entry to extend. */
10
- export declare const DEVICE_STORE_SECTIONS: readonly DeviceStoreSection[];
11
- /** Result of splitting a `device-manager`-writer patch by persistence target. */
12
- export interface DeviceStoreSplit {
13
- /** Per-section slices that persist to the device-store blob. */
14
- readonly storeGroups: ReadonlyArray<{
15
- section: DeviceStoreSection;
16
- patch: Record<string, unknown>;
17
- }>;
18
- /** The remaining keys, destined for the device driver's own config. */
19
- readonly driverPatch: Record<string, unknown>;
20
- }
21
- /**
22
- * Split a `writerCapName: 'device-manager'` patch into device-store slices
23
- * (one per matching registered section) and the leftover driver patch.
24
- * Generic — consults {@link DEVICE_STORE_SECTIONS}, no hardcoded key list.
25
- */
26
- export declare function splitDeviceStoreKeys(patch: Record<string, unknown>): DeviceStoreSplit;