@camstack/system 1.2.443 → 1.2.444

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 (101) hide show
  1. package/assets/record-entries/icon.svg +8 -0
  2. package/dist/addon-runner.js +41 -11
  3. package/dist/addon-runner.mjs +42 -12
  4. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  5. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  6. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  7. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  8. package/dist/builtins/alerts/alerts.addon.d.ts +10 -2
  9. package/dist/builtins/alerts/alerts.addon.js +43 -10
  10. package/dist/builtins/alerts/alerts.addon.mjs +43 -10
  11. package/dist/builtins/autotrack/index.js +1 -1
  12. package/dist/builtins/autotrack/index.mjs +1 -1
  13. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +2 -2
  14. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +2 -2
  15. package/dist/builtins/calendars/calendars.addon.js +1 -1
  16. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  17. package/dist/builtins/camera-grid/index.js +1 -1
  18. package/dist/builtins/camera-grid/index.mjs +1 -1
  19. package/dist/builtins/composer/composer.addon.js +2 -2
  20. package/dist/builtins/composer/composer.addon.mjs +2 -2
  21. package/dist/builtins/console-logging/index.js +1 -1
  22. package/dist/builtins/console-logging/index.mjs +1 -1
  23. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  24. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  25. package/dist/builtins/device-manager/device-manager.addon.js +1 -1
  26. package/dist/builtins/device-manager/device-manager.addon.mjs +1 -1
  27. package/dist/builtins/hub-forwarder/index.js +1 -1
  28. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  29. package/dist/builtins/keychain/index.js +3 -3
  30. package/dist/builtins/keychain/index.mjs +3 -3
  31. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  32. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  33. package/dist/builtins/local-auth/local-auth.addon.js +2 -2
  34. package/dist/builtins/local-auth/local-auth.addon.mjs +2 -2
  35. package/dist/builtins/local-network/local-network.addon.js +2 -2
  36. package/dist/builtins/local-network/local-network.addon.mjs +2 -2
  37. package/dist/builtins/loki-logging/index.js +1 -1
  38. package/dist/builtins/loki-logging/index.mjs +1 -1
  39. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  40. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  41. package/dist/builtins/platform-probe/index.js +1 -1
  42. package/dist/builtins/platform-probe/index.mjs +1 -1
  43. package/dist/builtins/record-entries/entries-service.d.ts +42 -0
  44. package/dist/builtins/record-entries/index.d.ts +1 -0
  45. package/dist/builtins/record-entries/index.js +142 -0
  46. package/dist/builtins/record-entries/index.mjs +136 -0
  47. package/dist/builtins/record-entries/record-entries.addon.d.ts +13 -0
  48. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  49. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  50. package/dist/builtins/snapshot/index.js +1 -1
  51. package/dist/builtins/snapshot/index.mjs +1 -1
  52. package/dist/builtins/sqlite-storage/file-host-client.d.ts +2 -0
  53. package/dist/builtins/sqlite-storage/file-host-handlers.d.ts +4 -0
  54. package/dist/builtins/sqlite-storage/file-host-protocol.d.ts +7 -1
  55. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  56. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  57. package/dist/builtins/sqlite-storage/index.js +1 -1
  58. package/dist/builtins/sqlite-storage/index.mjs +1 -1
  59. package/dist/builtins/sqlite-storage/owned-sqlite-file.d.ts +7 -0
  60. package/dist/builtins/sqlite-storage/placement-router.d.ts +5 -0
  61. package/dist/builtins/sqlite-storage/records/records-catalog.d.ts +29 -0
  62. package/dist/builtins/sqlite-storage/records/records-engine-types.d.ts +46 -0
  63. package/dist/builtins/sqlite-storage/records/records-engine.d.ts +90 -0
  64. package/dist/builtins/sqlite-storage/records/records-explain.d.ts +18 -0
  65. package/dist/builtins/sqlite-storage/records/records-plan.d.ts +90 -0
  66. package/dist/builtins/sqlite-storage/records/records-probe.d.ts +33 -0
  67. package/dist/builtins/sqlite-storage/records/records-provider.d.ts +59 -0
  68. package/dist/builtins/sqlite-storage/records/records-rows.d.ts +46 -0
  69. package/dist/builtins/sqlite-storage/records/records-sql.d.ts +41 -0
  70. package/dist/builtins/sqlite-storage/sqlite-settings-backend.d.ts +0 -10
  71. package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.ts +8 -0
  72. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +337 -4
  73. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +337 -4
  74. package/dist/builtins/sqlite-storage/storage-admin-provider.d.ts +7 -1
  75. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  76. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  77. package/dist/builtins/system-config/system-config.addon.js +2 -2
  78. package/dist/builtins/system-config/system-config.addon.mjs +2 -2
  79. package/dist/builtins/winston-logging/index.js +1 -1
  80. package/dist/builtins/winston-logging/index.mjs +1 -1
  81. package/dist/{composition-sources-C8tUG2uL.mjs → composition-sources-C3rKncIF.mjs} +1 -1
  82. package/dist/{composition-sources-BUXX1e8j.js → composition-sources-NAPZddic.js} +1 -1
  83. package/dist/{constants-CGwVaAV3.mjs → constants-BKX2QnIg.mjs} +1 -1
  84. package/dist/{constants-DWmm7_of.js → constants-BXiNEIeV.js} +1 -1
  85. package/dist/{device-ca-DGayRmC0.js → device-ca-DT9X2S6d.js} +1 -1
  86. package/dist/{device-ca-DBfiJ_SB.mjs → device-ca-jxjSL8Ov.mjs} +1 -1
  87. package/dist/{dist-D9qT3jHr.js → dist-D1vECb_6.js} +1172 -86
  88. package/dist/{dist-Bxt_S-9a.mjs → dist-DERK-gP5.mjs} +1011 -87
  89. package/dist/file-host-worker.js +11 -1
  90. package/dist/file-host-worker.mjs +11 -1
  91. package/dist/{hub-mdns-ciao-DpPcQDg-.mjs → hub-mdns-ciao-CRaC97V0.mjs} +1 -1
  92. package/dist/{hub-mdns-ciao-B-wk9nzx.js → hub-mdns-ciao-Cah9GCIg.js} +1 -1
  93. package/dist/index.js +50 -18
  94. package/dist/index.mjs +51 -19
  95. package/dist/kernel/moleculer/records-api-transport.d.ts +9 -0
  96. package/dist/kernel/settings-view-types.d.ts +0 -7
  97. package/dist/{restore-archive-BMNXwWWD.js → restore-archive-Dy-qKTdF.js} +1 -1
  98. package/dist/{restore-archive-9CGgeBzD.mjs → restore-archive-daKyE24F.mjs} +1 -1
  99. package/dist/{wal-maintenance-cRHR4rUY.js → wal-maintenance-dAv4IdzC.js} +0 -0
  100. package/dist/{wal-maintenance-sIB32ONp.mjs → wal-maintenance-zRc24mOC.mjs} +0 -0
  101. package/package.json +22 -1
@@ -0,0 +1,8 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#0d9488" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
2
+ <path d="M8 6h13"/>
3
+ <path d="M8 12h13"/>
4
+ <path d="M8 18h13"/>
5
+ <path d="M3 6h.01"/>
6
+ <path d="M3 12h.01"/>
7
+ <path d="M3 18h.01"/>
8
+ </svg>
@@ -5319,6 +5319,29 @@ var CapabilityHandle = class {
5319
5319
  }
5320
5320
  };
5321
5321
  //#endregion
5322
+ //#region src/kernel/moleculer/records-api-transport.ts
5323
+ function recordsTransportOf(api) {
5324
+ const r = api.records;
5325
+ return {
5326
+ declareKinds: (input) => r.declareKinds.mutate(input),
5327
+ get: (input) => r.get.query(input),
5328
+ getMany: (input) => r.getMany.query(input),
5329
+ secretRefs: (input) => r.secretRefs.query(input),
5330
+ put: (input) => r.put.mutate(input),
5331
+ putMany: (input) => r.putMany.mutate(input),
5332
+ patch: (input) => r.patch.mutate(input),
5333
+ delete: (input) => r.delete.mutate(input),
5334
+ deleteMany: (input) => r.deleteMany.mutate(input),
5335
+ query: (input) => r.query.query(input),
5336
+ count: (input) => r.count.query(input),
5337
+ histogram: (input) => r.histogram.query(input),
5338
+ aggregate: (input) => r.aggregate.query(input),
5339
+ deleteWhere: (input) => r.deleteWhere.mutate(input),
5340
+ deleteDevice: (input) => r.deleteDevice.mutate(input),
5341
+ allocateId: (input) => r.allocateId.mutate(input)
5342
+ };
5343
+ }
5344
+ //#endregion
5322
5345
  //#region src/kernel/moleculer/children-batch-loader.ts
5323
5346
  /**
5324
5347
  * Narrow an untyped cap answer to the fields the reconcile reads.
@@ -10442,6 +10465,19 @@ async function buildAddonContext(runtime, declaration, dataDir, options) {
10442
10465
  nodeId
10443
10466
  });
10444
10467
  workerDisposerChain.add(() => peerBytesFacility.dispose());
10468
+ const secrets = (0, _camstack_types_addon.createSecretsAccess)({
10469
+ owner: addonId,
10470
+ transport: {
10471
+ put: (input) => api.keychain.put.mutate({
10472
+ ref: input.ref,
10473
+ value: input.value
10474
+ }),
10475
+ resolve: (input) => api.keychain.resolve.query({ refs: [...input.refs] }),
10476
+ delete: (input) => api.keychain.delete.mutate({ refs: [...input.refs] }),
10477
+ getState: () => api.keychain.getState.query({})
10478
+ },
10479
+ eventBus: scopedEventBus
10480
+ });
10445
10481
  return {
10446
10482
  id: addonId,
10447
10483
  logger: scopedLogger,
@@ -10454,18 +10490,12 @@ async function buildAddonContext(runtime, declaration, dataDir, options) {
10454
10490
  api,
10455
10491
  deps: new AddonDepsManager(addonDataDir, scopedLogger),
10456
10492
  settings: settingsView,
10457
- secrets: (0, _camstack_types_addon.createSecretsAccess)({
10493
+ secrets,
10494
+ records: (0, _camstack_types_addon.createRecordsAccess)({
10458
10495
  owner: addonId,
10459
- transport: {
10460
- put: (input) => api.keychain.put.mutate({
10461
- ref: input.ref,
10462
- value: input.value
10463
- }),
10464
- resolve: (input) => api.keychain.resolve.query({ refs: [...input.refs] }),
10465
- delete: (input) => api.keychain.delete.mutate({ refs: [...input.refs] }),
10466
- getState: () => api.keychain.getState.query({})
10467
- },
10468
- eventBus: scopedEventBus
10496
+ transport: recordsTransportOf(api),
10497
+ secrets,
10498
+ logger: scopedLogger
10469
10499
  }),
10470
10500
  kernel: (() => {
10471
10501
  const streamProbe = runtime.mode === "broker" ? {
@@ -3,7 +3,7 @@ import * as fs from "node:fs";
3
3
  import { createReadStream, createWriteStream, existsSync, readFileSync, readdirSync } from "node:fs";
4
4
  import * as path from "node:path";
5
5
  import { dirname, isAbsolute, join } from "node:path";
6
- import { BOOT_RECOVERY_BACKOFF_MS, DATAPLANE_SECRET_HEADER, DEVICE_CHILDREN_BATCH_MAX, DeviceType, DisposerChain, ErrorI18nPayloadSchema, EventCategory, PEER_BYTES_CHUNK_BYTES, PEER_BYTES_MAX_OUTSTANDING, PEER_BYTES_STALL_MS, PEER_BYTES_TICKET_TTL_MS, ReadinessRegistry, ReadinessTimeoutError, asJsonObject, asString, collectZodSecretPaths, createDeviceProxy, createEventBusSliceSource, createSecretsAccess, describeCustomActions, deviceOpsCapability, emitReadiness, errMsg, expandCapMethods, isCollectionArrayMethodName, isProviderOptionalMethodName, maskUrlCredentials, normalizeAddonInitResult, readErrorI18n, readNodePin, resolveSecretViewsIn, scopeKey, scrubKnownSecrets, withCapInputDefaults } from "@camstack/types/addon";
6
+ import { BOOT_RECOVERY_BACKOFF_MS, DATAPLANE_SECRET_HEADER, DEVICE_CHILDREN_BATCH_MAX, DeviceType, DisposerChain, ErrorI18nPayloadSchema, EventCategory, PEER_BYTES_CHUNK_BYTES, PEER_BYTES_MAX_OUTSTANDING, PEER_BYTES_STALL_MS, PEER_BYTES_TICKET_TTL_MS, ReadinessRegistry, ReadinessTimeoutError, asJsonObject, asString, collectZodSecretPaths, createDeviceProxy, createEventBusSliceSource, createRecordsAccess, createSecretsAccess, describeCustomActions, deviceOpsCapability, emitReadiness, errMsg, expandCapMethods, isCollectionArrayMethodName, isProviderOptionalMethodName, maskUrlCredentials, normalizeAddonInitResult, readErrorI18n, readNodePin, resolveSecretViewsIn, scopeKey, scrubKnownSecrets, withCapInputDefaults } from "@camstack/types/addon";
7
7
  import { execFile } from "node:child_process";
8
8
  import { promisify } from "node:util";
9
9
  import * as os from "node:os";
@@ -5295,6 +5295,29 @@ var CapabilityHandle = class {
5295
5295
  }
5296
5296
  };
5297
5297
  //#endregion
5298
+ //#region src/kernel/moleculer/records-api-transport.ts
5299
+ function recordsTransportOf(api) {
5300
+ const r = api.records;
5301
+ return {
5302
+ declareKinds: (input) => r.declareKinds.mutate(input),
5303
+ get: (input) => r.get.query(input),
5304
+ getMany: (input) => r.getMany.query(input),
5305
+ secretRefs: (input) => r.secretRefs.query(input),
5306
+ put: (input) => r.put.mutate(input),
5307
+ putMany: (input) => r.putMany.mutate(input),
5308
+ patch: (input) => r.patch.mutate(input),
5309
+ delete: (input) => r.delete.mutate(input),
5310
+ deleteMany: (input) => r.deleteMany.mutate(input),
5311
+ query: (input) => r.query.query(input),
5312
+ count: (input) => r.count.query(input),
5313
+ histogram: (input) => r.histogram.query(input),
5314
+ aggregate: (input) => r.aggregate.query(input),
5315
+ deleteWhere: (input) => r.deleteWhere.mutate(input),
5316
+ deleteDevice: (input) => r.deleteDevice.mutate(input),
5317
+ allocateId: (input) => r.allocateId.mutate(input)
5318
+ };
5319
+ }
5320
+ //#endregion
5298
5321
  //#region src/kernel/moleculer/children-batch-loader.ts
5299
5322
  /**
5300
5323
  * Narrow an untyped cap answer to the fields the reconcile reads.
@@ -10418,6 +10441,19 @@ async function buildAddonContext(runtime, declaration, dataDir, options) {
10418
10441
  nodeId
10419
10442
  });
10420
10443
  workerDisposerChain.add(() => peerBytesFacility.dispose());
10444
+ const secrets = createSecretsAccess({
10445
+ owner: addonId,
10446
+ transport: {
10447
+ put: (input) => api.keychain.put.mutate({
10448
+ ref: input.ref,
10449
+ value: input.value
10450
+ }),
10451
+ resolve: (input) => api.keychain.resolve.query({ refs: [...input.refs] }),
10452
+ delete: (input) => api.keychain.delete.mutate({ refs: [...input.refs] }),
10453
+ getState: () => api.keychain.getState.query({})
10454
+ },
10455
+ eventBus: scopedEventBus
10456
+ });
10421
10457
  return {
10422
10458
  id: addonId,
10423
10459
  logger: scopedLogger,
@@ -10430,18 +10466,12 @@ async function buildAddonContext(runtime, declaration, dataDir, options) {
10430
10466
  api,
10431
10467
  deps: new AddonDepsManager(addonDataDir, scopedLogger),
10432
10468
  settings: settingsView,
10433
- secrets: createSecretsAccess({
10469
+ secrets,
10470
+ records: createRecordsAccess({
10434
10471
  owner: addonId,
10435
- transport: {
10436
- put: (input) => api.keychain.put.mutate({
10437
- ref: input.ref,
10438
- value: input.value
10439
- }),
10440
- resolve: (input) => api.keychain.resolve.query({ refs: [...input.refs] }),
10441
- delete: (input) => api.keychain.delete.mutate({ refs: [...input.refs] }),
10442
- getState: () => api.keychain.getState.query({})
10443
- },
10444
- eventBus: scopedEventBus
10472
+ transport: recordsTransportOf(api),
10473
+ secrets,
10474
+ logger: scopedLogger
10445
10475
  }),
10446
10476
  kernel: (() => {
10447
10477
  const streamProbe = runtime.mode === "broker" ? {
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-D9qT3jHr.js");
6
+ const require_dist = require("../../dist-D1vECb_6.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Ar as errMsg, Ei as EventCategory, it as addonPagesCapability, jr as BaseAddon } from "../../dist-Bxt_S-9a.mjs";
1
+ import { $i as EventCategory, Fr as BaseAddon, Pr as errMsg, at as addonPagesCapability } from "../../dist-DERK-gP5.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-D9qT3jHr.js");
6
+ const require_dist = require("../../dist-D1vECb_6.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Ar as errMsg, Ei as EventCategory, jr as BaseAddon, ot as addonWidgetsCapability } from "../../dist-Bxt_S-9a.mjs";
1
+ import { $i as EventCategory, Fr as BaseAddon, Pr as errMsg, st as addonWidgetsCapability } from "../../dist-DERK-gP5.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import * as path$1 from "node:path";
@@ -109,12 +109,20 @@ export declare class AlertCenterAddon extends BaseAddon<AlertCenterConfig> {
109
109
  /** SystemLivenessRecovered — the invariant holds again; drop the alert. */
110
110
  private handleLivenessRecovered;
111
111
  /**
112
- * Stream offline — ONLY `stale-timeout` is an outage. Suspend / destroy /
113
- * idle dial are deliberate and must not ring the bell (same gate NC uses).
112
+ * Stream offline — ONLY an outage reason counts: `stale-timeout`, or one of
113
+ * the battery failures (`wake-timeout`, `connection-error`,
114
+ * `battery-unreachable`). Suspend / destroy / idle dial are deliberate and
115
+ * must not ring the bell (same gate NC uses). One card per DEVICE (D883).
114
116
  */
115
117
  private handleStreamOffline;
116
118
  /** Stream online after an outage — drop the matching offline card. */
117
119
  private handleStreamOnline;
120
+ /**
121
+ * Dismiss the pre-D883 per-cam-stream cards (`stream-offline:<deviceId>:<stream>`)
122
+ * of one device, or of every device when none is named. They can never meet
123
+ * their `stream.online` under the per-device id.
124
+ */
125
+ private dismissLegacyStreamCards;
118
126
  private resolveDeviceName;
119
127
  private buildMessage;
120
128
  private emitAlert;
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-D9qT3jHr.js");
6
+ const require_dist = require("../../dist-D1vECb_6.js");
7
7
  //#region src/builtins/alerts/critical-push.ts
8
8
  /** Alert categories that are critical system findings. */
9
9
  var CRITICAL_CATEGORIES = new Set([
@@ -389,6 +389,21 @@ var SILENT_TRACKED_CATEGORIES = [
389
389
  "system.liveness-recovered",
390
390
  "stream.online"
391
391
  ];
392
+ /** The `stream.offline` reasons that are an outage (D883) — mirrors the broker's `isStreamOutageReason`. */
393
+ var STREAM_OUTAGE_REASONS = [
394
+ "stale-timeout",
395
+ "wake-timeout",
396
+ "connection-error",
397
+ "battery-unreachable"
398
+ ];
399
+ /** The streams an offline event covers: its list, else the one stream it names. */
400
+ function streamIdsOf(listed, fallback) {
401
+ if (Array.isArray(listed)) {
402
+ const ids = listed.filter((id) => typeof id === "string");
403
+ if (ids.length > 0) return ids;
404
+ }
405
+ return fallback !== void 0 ? [fallback] : [];
406
+ }
392
407
  var TRACKED_CATEGORIES = [...Object.keys(CATEGORY_MAPPINGS), ...SILENT_TRACKED_CATEGORIES];
393
408
  /**
394
409
  * `[ALERT-CENTER-EVENTS]` — rate limiting. Events that fire thousands of
@@ -498,6 +513,7 @@ var AlertCenterAddon = class extends require_dist.BaseAddon {
498
513
  }
499
514
  this.unsubscribers = unsubs;
500
515
  this.reconcilePendingPushes();
516
+ this.dismissLegacyStreamCards(void 0);
501
517
  this.ctx.logger.info("Initialized", { meta: { trackedCategoriesCount: TRACKED_CATEGORIES.length } });
502
518
  return [{
503
519
  capability: require_dist.alertsCapability,
@@ -1202,23 +1218,26 @@ var AlertCenterAddon = class extends require_dist.BaseAddon {
1202
1218
  }
1203
1219
  }
1204
1220
  /**
1205
- * Stream offline — ONLY `stale-timeout` is an outage. Suspend / destroy /
1206
- * idle dial are deliberate and must not ring the bell (same gate NC uses).
1221
+ * Stream offline — ONLY an outage reason counts: `stale-timeout`, or one of
1222
+ * the battery failures (`wake-timeout`, `connection-error`,
1223
+ * `battery-unreachable`). Suspend / destroy / idle dial are deliberate and
1224
+ * must not ring the bell (same gate NC uses). One card per DEVICE (D883).
1207
1225
  */
1208
1226
  async handleStreamOffline(event) {
1209
1227
  const reason = event.data["reason"];
1210
- if (reason !== "stale-timeout") return;
1228
+ if (typeof reason !== "string" || !STREAM_OUTAGE_REASONS.includes(reason)) return;
1211
1229
  const deviceId = event.data["deviceId"];
1212
1230
  const camStreamId = event.data["camStreamId"];
1213
- if (typeof deviceId !== "number" || typeof camStreamId !== "string") return;
1231
+ if (typeof deviceId !== "number") return;
1232
+ const camStreamIds = streamIdsOf(event.data["camStreamIds"], typeof camStreamId === "string" ? camStreamId : void 0);
1214
1233
  const name = await this.resolveDeviceName(deviceId);
1215
1234
  const label = name ?? `Camera ${String(deviceId)}`;
1216
1235
  const alert = {
1217
- id: `stream-offline:${String(deviceId)}:${camStreamId}`,
1236
+ id: `stream-offline:${String(deviceId)}`,
1218
1237
  category: require_dist.EventCategory.StreamOffline,
1219
1238
  severity: "warning",
1220
1239
  title: "Stream offline",
1221
- message: `${label} — ${camStreamId} stopped sending video (stale timeout).`,
1240
+ message: `${label} — ${camStreamIds.length > 0 ? camStreamIds.join(", ") : "its stream"} stopped sending video (${reason}).`,
1222
1241
  status: "active",
1223
1242
  read: false,
1224
1243
  createdAt: Date.now(),
@@ -1230,6 +1249,7 @@ var AlertCenterAddon = class extends require_dist.BaseAddon {
1230
1249
  metadata: {
1231
1250
  deviceId,
1232
1251
  camStreamId,
1252
+ camStreamIds,
1233
1253
  reason,
1234
1254
  ...name !== void 0 ? { name } : {}
1235
1255
  }
@@ -1239,9 +1259,9 @@ var AlertCenterAddon = class extends require_dist.BaseAddon {
1239
1259
  /** Stream online after an outage — drop the matching offline card. */
1240
1260
  async handleStreamOnline(event) {
1241
1261
  const deviceId = event.data["deviceId"];
1242
- const camStreamId = event.data["camStreamId"];
1243
- if (typeof deviceId !== "number" || typeof camStreamId !== "string") return;
1244
- const stableId = `stream-offline:${String(deviceId)}:${camStreamId}`;
1262
+ if (typeof deviceId !== "number") return;
1263
+ const stableId = `stream-offline:${String(deviceId)}`;
1264
+ await this.dismissLegacyStreamCards(deviceId);
1245
1265
  try {
1246
1266
  await this.dismiss(stableId);
1247
1267
  } catch (err) {
@@ -1251,6 +1271,19 @@ var AlertCenterAddon = class extends require_dist.BaseAddon {
1251
1271
  } });
1252
1272
  }
1253
1273
  }
1274
+ /**
1275
+ * Dismiss the pre-D883 per-cam-stream cards (`stream-offline:<deviceId>:<stream>`)
1276
+ * of one device, or of every device when none is named. They can never meet
1277
+ * their `stream.online` under the per-device id.
1278
+ */
1279
+ async dismissLegacyStreamCards(deviceId) {
1280
+ try {
1281
+ const pattern = deviceId === void 0 ? /^stream-offline:\d+:.+/ : new RegExp(`^stream-offline:${String(deviceId)}:.+`);
1282
+ for (const alert of await this.listAlerts({ limit: 1e3 })) if (alert.status === "active" && pattern.test(alert.id)) await this.dismiss(alert.id);
1283
+ } catch (err) {
1284
+ this.ctx.logger?.debug("legacy stream cards: sweep failed", { meta: { error: require_dist.errMsg(err) } });
1285
+ }
1286
+ }
1254
1287
  async resolveDeviceName(deviceId) {
1255
1288
  try {
1256
1289
  const device = await this.ctx.api.deviceManager.getDevice.query({ deviceId });
@@ -1,4 +1,4 @@
1
- import { Ar as errMsg, Ei as EventCategory, Jr as createEvent, i as AlertSchema, jr as BaseAddon, st as alertsCapability } from "../../dist-Bxt_S-9a.mjs";
1
+ import { $i as EventCategory, Fr as BaseAddon, Pr as errMsg, ct as alertsCapability, i as AlertSchema, yi as createEvent } from "../../dist-DERK-gP5.mjs";
2
2
  //#region src/builtins/alerts/critical-push.ts
3
3
  /** Alert categories that are critical system findings. */
4
4
  var CRITICAL_CATEGORIES = new Set([
@@ -384,6 +384,21 @@ var SILENT_TRACKED_CATEGORIES = [
384
384
  "system.liveness-recovered",
385
385
  "stream.online"
386
386
  ];
387
+ /** The `stream.offline` reasons that are an outage (D883) — mirrors the broker's `isStreamOutageReason`. */
388
+ var STREAM_OUTAGE_REASONS = [
389
+ "stale-timeout",
390
+ "wake-timeout",
391
+ "connection-error",
392
+ "battery-unreachable"
393
+ ];
394
+ /** The streams an offline event covers: its list, else the one stream it names. */
395
+ function streamIdsOf(listed, fallback) {
396
+ if (Array.isArray(listed)) {
397
+ const ids = listed.filter((id) => typeof id === "string");
398
+ if (ids.length > 0) return ids;
399
+ }
400
+ return fallback !== void 0 ? [fallback] : [];
401
+ }
387
402
  var TRACKED_CATEGORIES = [...Object.keys(CATEGORY_MAPPINGS), ...SILENT_TRACKED_CATEGORIES];
388
403
  /**
389
404
  * `[ALERT-CENTER-EVENTS]` — rate limiting. Events that fire thousands of
@@ -493,6 +508,7 @@ var AlertCenterAddon = class extends BaseAddon {
493
508
  }
494
509
  this.unsubscribers = unsubs;
495
510
  this.reconcilePendingPushes();
511
+ this.dismissLegacyStreamCards(void 0);
496
512
  this.ctx.logger.info("Initialized", { meta: { trackedCategoriesCount: TRACKED_CATEGORIES.length } });
497
513
  return [{
498
514
  capability: alertsCapability,
@@ -1197,23 +1213,26 @@ var AlertCenterAddon = class extends BaseAddon {
1197
1213
  }
1198
1214
  }
1199
1215
  /**
1200
- * Stream offline — ONLY `stale-timeout` is an outage. Suspend / destroy /
1201
- * idle dial are deliberate and must not ring the bell (same gate NC uses).
1216
+ * Stream offline — ONLY an outage reason counts: `stale-timeout`, or one of
1217
+ * the battery failures (`wake-timeout`, `connection-error`,
1218
+ * `battery-unreachable`). Suspend / destroy / idle dial are deliberate and
1219
+ * must not ring the bell (same gate NC uses). One card per DEVICE (D883).
1202
1220
  */
1203
1221
  async handleStreamOffline(event) {
1204
1222
  const reason = event.data["reason"];
1205
- if (reason !== "stale-timeout") return;
1223
+ if (typeof reason !== "string" || !STREAM_OUTAGE_REASONS.includes(reason)) return;
1206
1224
  const deviceId = event.data["deviceId"];
1207
1225
  const camStreamId = event.data["camStreamId"];
1208
- if (typeof deviceId !== "number" || typeof camStreamId !== "string") return;
1226
+ if (typeof deviceId !== "number") return;
1227
+ const camStreamIds = streamIdsOf(event.data["camStreamIds"], typeof camStreamId === "string" ? camStreamId : void 0);
1209
1228
  const name = await this.resolveDeviceName(deviceId);
1210
1229
  const label = name ?? `Camera ${String(deviceId)}`;
1211
1230
  const alert = {
1212
- id: `stream-offline:${String(deviceId)}:${camStreamId}`,
1231
+ id: `stream-offline:${String(deviceId)}`,
1213
1232
  category: EventCategory.StreamOffline,
1214
1233
  severity: "warning",
1215
1234
  title: "Stream offline",
1216
- message: `${label} — ${camStreamId} stopped sending video (stale timeout).`,
1235
+ message: `${label} — ${camStreamIds.length > 0 ? camStreamIds.join(", ") : "its stream"} stopped sending video (${reason}).`,
1217
1236
  status: "active",
1218
1237
  read: false,
1219
1238
  createdAt: Date.now(),
@@ -1225,6 +1244,7 @@ var AlertCenterAddon = class extends BaseAddon {
1225
1244
  metadata: {
1226
1245
  deviceId,
1227
1246
  camStreamId,
1247
+ camStreamIds,
1228
1248
  reason,
1229
1249
  ...name !== void 0 ? { name } : {}
1230
1250
  }
@@ -1234,9 +1254,9 @@ var AlertCenterAddon = class extends BaseAddon {
1234
1254
  /** Stream online after an outage — drop the matching offline card. */
1235
1255
  async handleStreamOnline(event) {
1236
1256
  const deviceId = event.data["deviceId"];
1237
- const camStreamId = event.data["camStreamId"];
1238
- if (typeof deviceId !== "number" || typeof camStreamId !== "string") return;
1239
- const stableId = `stream-offline:${String(deviceId)}:${camStreamId}`;
1257
+ if (typeof deviceId !== "number") return;
1258
+ const stableId = `stream-offline:${String(deviceId)}`;
1259
+ await this.dismissLegacyStreamCards(deviceId);
1240
1260
  try {
1241
1261
  await this.dismiss(stableId);
1242
1262
  } catch (err) {
@@ -1246,6 +1266,19 @@ var AlertCenterAddon = class extends BaseAddon {
1246
1266
  } });
1247
1267
  }
1248
1268
  }
1269
+ /**
1270
+ * Dismiss the pre-D883 per-cam-stream cards (`stream-offline:<deviceId>:<stream>`)
1271
+ * of one device, or of every device when none is named. They can never meet
1272
+ * their `stream.online` under the per-device id.
1273
+ */
1274
+ async dismissLegacyStreamCards(deviceId) {
1275
+ try {
1276
+ const pattern = deviceId === void 0 ? /^stream-offline:\d+:.+/ : new RegExp(`^stream-offline:${String(deviceId)}:.+`);
1277
+ for (const alert of await this.listAlerts({ limit: 1e3 })) if (alert.status === "active" && pattern.test(alert.id)) await this.dismiss(alert.id);
1278
+ } catch (err) {
1279
+ this.ctx.logger?.debug("legacy stream cards: sweep failed", { meta: { error: errMsg(err) } });
1280
+ }
1281
+ }
1249
1282
  async resolveDeviceName(deviceId) {
1250
1283
  try {
1251
1284
  const device = await this.ctx.api.deviceManager.getDevice.query({ deviceId });
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-D9qT3jHr.js");
6
+ const require_dist = require("../../dist-D1vECb_6.js");
7
7
  //#region src/builtins/autotrack/autotrack-config.ts
8
8
  var DEFAULT_AUTOTRACK_LOOP_CONFIG = {
9
9
  deadZoneFraction: .5,
@@ -1,4 +1,4 @@
1
- import { Ar as errMsg, Ei as EventCategory, M as FIRST_LEVEL_MACRO_CLASSES, Pn as ptzAutotrackCapability, jr as BaseAddon, ri as isEvent, ut as bareAddonId } from "../../dist-Bxt_S-9a.mjs";
1
+ import { $i as EventCategory, Fn as ptzAutotrackCapability, Fr as BaseAddon, N as FIRST_LEVEL_MACRO_CLASSES, Oi as isEvent, Pr as errMsg, dt as bareAddonId } from "../../dist-DERK-gP5.mjs";
2
2
  //#region src/builtins/autotrack/autotrack-config.ts
3
3
  var DEFAULT_AUTOTRACK_LOOP_CONFIG = {
4
4
  deadZoneFraction: .5,
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-D9qT3jHr.js");
7
- const require_restore_archive = require("../../restore-archive-BMNXwWWD.js");
6
+ const require_dist = require("../../dist-D1vECb_6.js");
7
+ const require_restore_archive = require("../../restore-archive-Dy-qKTdF.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_fs_promises = require("node:fs/promises");
10
10
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -1,5 +1,5 @@
1
- import { Ei as EventCategory, Si as toNodeId, bn as mayWriteToLocation, jr as BaseAddon, lt as backupCapability, rr as storageOccupancyCapability, ui as nodePin } from "../../dist-Bxt_S-9a.mjs";
2
- import { a as BackupSnapshotRefusedError, d as ENCRYPTED_BACKUP_SUFFIX, f as generateBackupKeyPair, i as BackupCancelledError, l as BackupKeyFormatError, m as parseBackupSecretKey, n as precheckRestoreKey, o as DEFAULT_BACKUP_DATABASES, p as parseBackupPublicKey, r as prepareRestoreArchive, s as SystemBackupService } from "../../restore-archive-9CGgeBzD.mjs";
1
+ import { $i as EventCategory, Fr as BaseAddon, Ii as nodePin, Yi as toNodeId, or as storageOccupancyCapability, ut as backupCapability, xn as mayWriteToLocation } from "../../dist-DERK-gP5.mjs";
2
+ import { a as BackupSnapshotRefusedError, d as ENCRYPTED_BACKUP_SUFFIX, f as generateBackupKeyPair, i as BackupCancelledError, l as BackupKeyFormatError, m as parseBackupSecretKey, n as precheckRestoreKey, o as DEFAULT_BACKUP_DATABASES, p as parseBackupPublicKey, r as prepareRestoreArchive, s as SystemBackupService } from "../../restore-archive-daKyE24F.mjs";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import * as fsp from "node:fs/promises";
5
5
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-D9qT3jHr.js");
6
+ const require_dist = require("../../dist-D1vECb_6.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let zod = require("zod");
9
9
  //#region src/builtins/calendars/calendar-color.ts
@@ -1,4 +1,4 @@
1
- import { g as CalendarPreferencesSchema, gt as calendarsCapability, jr as BaseAddon } from "../../dist-Bxt_S-9a.mjs";
1
+ import { Fr as BaseAddon, _ as CalendarPreferencesSchema, _t as calendarsCapability } from "../../dist-DERK-gP5.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/builtins/calendars/calendar-color.ts
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-D9qT3jHr.js");
6
+ const require_dist = require("../../dist-D1vECb_6.js");
7
7
  let zod = require("zod");
8
8
  let _camstack_types_node = require("@camstack/types/node");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { A as DeclaredDevices, Ar as errMsg, Dr as DeviceFeature, Ei as EventCategory, H as MOTION_CLOSE_AFTER_MS, Jr as createEvent, Qn as snapshotCapability, _t as cameraGridLayoutCapability, ar as streamCatalogCapability, gr as buildFfmpegArgs, jr as BaseAddon, jt as declarationOwnerNodeId, kr as DeviceType, o as BaseDevice, ti as hydrateSchema, w as DERIVED_CAMERA_SILENCED_CAP_NAMES, wn as motionCapability, xn as memoizePinnedFfmpeg } from "../../dist-Bxt_S-9a.mjs";
1
+ import { $i as EventCategory, Ei as hydrateSchema, Fr as BaseAddon, Mt as declarationOwnerNodeId, Nr as DeviceType, Pr as errMsg, Sn as memoizePinnedFfmpeg, T as DERIVED_CAMERA_SILENCED_CAP_NAMES, Tn as motionCapability, U as MOTION_CLOSE_AFTER_MS, br as buildFfmpegArgs, cr as streamCatalogCapability, j as DeclaredDevices, jr as DeviceFeature, o as BaseDevice, tr as snapshotCapability, vt as cameraGridLayoutCapability, yi as createEvent } from "../../dist-DERK-gP5.mjs";
2
2
  import { z } from "zod";
3
3
  import { FfmpegProcess } from "@camstack/types/node";
4
4
  import { join } from "node:path";
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-D9qT3jHr.js");
7
- const require_composition_sources = require("../../composition-sources-BUXX1e8j.js");
6
+ const require_dist = require("../../dist-D1vECb_6.js");
7
+ const require_composition_sources = require("../../composition-sources-NAPZddic.js");
8
8
  let zod = require("zod");
9
9
  //#region src/builtins/shared/device-state-changed.ts
10
10
  /** Structural narrowing helper for untrusted bus payloads. */
@@ -1,5 +1,5 @@
1
- import { A as DeclaredDevices, Ar as errMsg, Cr as compositionSourceKey, Ei as EventCategory, Er as toExpressionValue, Jr as createEvent, Sr as compositionSliceKey, Tr as disarmRoseMemory, Wt as evaluateCompositionField, _r as cloneStatefulExpressionMemory, br as compositionFeatureEnabled, bt as composerCapability, f as COMPOSED_ITEM_FIXED_FIELDS, ft as buildCapabilityLookup, hr as COMPOSER_ADDON_ID, jn as planComposition, jr as BaseAddon, kr as DeviceType, o as BaseDevice, qt as expressionContainsBuiltinCall, r as ALL_CAPABILITY_DEFINITIONS, vr as composedDeviceRef, wr as createStatefulExpressionMemory, xr as compositionItemFieldPath, xt as compositionFieldKey, yr as composedDeviceStableId } from "../../dist-Bxt_S-9a.mjs";
2
- import { n as normalizedNativeOwner } from "../../composition-sources-C8tUG2uL.mjs";
1
+ import { $i as EventCategory, Ar as toExpressionValue, Cr as composedDeviceStableId, Dr as compositionSourceKey, Er as compositionSliceKey, Fr as BaseAddon, Gt as evaluateCompositionField, Jt as expressionContainsBuiltinCall, Mn as planComposition, Nr as DeviceType, Or as createStatefulExpressionMemory, Pr as errMsg, Sr as composedDeviceRef, St as compositionFieldKey, Tr as compositionItemFieldPath, j as DeclaredDevices, kr as disarmRoseMemory, o as BaseDevice, p as COMPOSED_ITEM_FIXED_FIELDS, pt as buildCapabilityLookup, r as ALL_CAPABILITY_DEFINITIONS, wr as compositionFeatureEnabled, xr as cloneStatefulExpressionMemory, xt as composerCapability, yi as createEvent, yr as COMPOSER_ADDON_ID } from "../../dist-DERK-gP5.mjs";
2
+ import { n as normalizedNativeOwner } from "../../composition-sources-C3rKncIF.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/builtins/shared/device-state-changed.ts
5
5
  /** Structural narrowing helper for untrusted bus payloads. */
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-D9qT3jHr.js");
6
+ const require_dist = require("../../dist-D1vECb_6.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  //#region src/builtins/console-logging/console-destination.ts
9
9
  var LEVEL_RANK = {
@@ -1,4 +1,4 @@
1
- import { gn as logDestinationCapability, jr as BaseAddon } from "../../dist-Bxt_S-9a.mjs";
1
+ import { Fr as BaseAddon, _n as logDestinationCapability } from "../../dist-DERK-gP5.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  //#region src/builtins/console-logging/console-destination.ts
4
4
  var LEVEL_RANK = {
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-D9qT3jHr.js");
4
- const require_composition_sources = require("../../composition-sources-BUXX1e8j.js");
3
+ const require_dist = require("../../dist-D1vECb_6.js");
4
+ const require_composition_sources = require("../../composition-sources-NAPZddic.js");
5
5
  const require_prefix_range = require("../../prefix-range-D_KueXbQ.js");
6
6
  const require_prefix_walk = require("../../prefix-walk-Dv6MLZlM.js");
7
7
  let node_crypto = require("node:crypto");
@@ -1,5 +1,5 @@
1
- import { A as DeclaredDevices, Ar as errMsg, Bn as resolveCoreBlockFiles, Cr as compositionSourceKey, Ct as coreBlockAddonId, Dt as coreBlocksCapability, Et as coreBlockSourceKind, Ft as describeComposableCaps, In as replacedFieldKeys, Kr as collectSecretMarkerRefs, St as compositionSourceRefs, Tn as normalizeCoreBlockWrite, Tt as coreBlockIdFromAddonId, _i as resolveSecretMarkers, bi as secretTreeFromSchema, ci as isSecretRefOwnedBy, ft as buildCapabilityLookup, h as CORE_BLOCK_ADDON_PREFIX, jn as planComposition, jr as BaseAddon, lr as validateComposition, m as CORE_BLOCKS_ADDON_ID, oi as isSecretMarker, p as COMPOSER_RUNNER_ID, r as ALL_CAPABILITY_DEFINITIONS, ti as hydrateSchema, v as CoreBlockSchema, vr as composedDeviceRef, wi as transformSecretWrite, wt as coreBlockComposition, zn as resolveCoreBlockEntry } from "../../dist-Bxt_S-9a.mjs";
2
- import { t as describeCompositionSources } from "../../composition-sources-C8tUG2uL.mjs";
1
+ import { Ct as compositionSourceRefs, Dr as compositionSourceKey, Dt as coreBlockSourceKind, Ei as hydrateSchema, En as normalizeCoreBlockWrite, Et as coreBlockIdFromAddonId, Fr as BaseAddon, Hn as resolveCoreBlockEntry, It as describeComposableCaps, Mn as planComposition, Ni as isSecretRefOwnedBy, Ot as coreBlocksCapability, Pr as errMsg, Sr as composedDeviceRef, Tt as coreBlockComposition, Un as resolveCoreBlockFiles, Wi as resolveSecretMarkers, Zi as transformSecretWrite, _i as collectSecretMarkerRefs, fr as validateComposition, g as CORE_BLOCK_ADDON_PREFIX, h as CORE_BLOCKS_ADDON_ID, j as DeclaredDevices, ji as isSecretMarker, m as COMPOSER_RUNNER_ID, pt as buildCapabilityLookup, qi as secretTreeFromSchema, r as ALL_CAPABILITY_DEFINITIONS, wt as coreBlockAddonId, y as CoreBlockSchema, zn as replacedFieldKeys } from "../../dist-DERK-gP5.mjs";
2
+ import { t as describeCompositionSources } from "../../composition-sources-C3rKncIF.mjs";
3
3
  import { t as prefixRange } from "../../prefix-range-Dl0znowN.mjs";
4
4
  import { n as unwrapStoredValue, t as loadPrefixed } from "../../prefix-walk-DAOBSyH1.mjs";
5
5
  import { createRequire } from "node:module";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-D9qT3jHr.js");
6
+ const require_dist = require("../../dist-D1vECb_6.js");
7
7
  const require_prefix_range = require("../../prefix-range-D_KueXbQ.js");
8
8
  const require_prefix_walk = require("../../prefix-walk-Dv6MLZlM.js");
9
9
  const require_retired_settings_keys = require("../../retired-settings-keys-D_VwZiDt.js");
@@ -1,4 +1,4 @@
1
- import { Ar as errMsg, Br as WELL_KNOWN_TAB_MAP, Bt as deviceStatusCapability, C as DAY_NAMES, Ci as toSecretFieldView, Dr as DeviceFeature, Ei as EventCategory, En as normalizeUnit, Gn as runtimeStatePolicyFor, Ht as enumerateItemArrayFields, Kt as expandContainer, Lt as deviceExtensionCapability, N as FieldClaimModeSchema, Nt as defineExtensionSlotProvider, Or as DeviceRole, Ot as createDeviceExtensionProvider, P as FieldClaimSchema, Qt as formatMinutes, Rt as deviceManagerCapability, Ti as userError, Ut as enumerateSchemaFields, V as MINUTES_PER_DAY, Y as STREAM_PROFILE_META, Zn as siteZoneKey, _i as resolveSecretMarkers, ai as isSecretClear, c as CAMERA_SWITCH_ORDER, dn as legacyAutoLinkIds, hn as locationIconKey, ht as buildStreamParamsConfigSchema, ii as isKeychainStoredField, j as DeviceStatusSchema, jr as BaseAddon, kn as parseStreamParamsFormPatch, kr as DeviceType, ni as isDeviceConfigCap, oi as isSecretMarker, qr as collectZodSecretPaths, r as ALL_CAPABILITY_DEFINITIONS, si as isSecretMarkerLike, u as CAP_NAMES_WITH_STATUS, vt as canonicalIconKey, wi as transformSecretWrite, xi as sleep$1, yi as secretTreeFromPaths, zr as SECRET_CLEAR, zt as deviceStateCapability } from "../../dist-Bxt_S-9a.mjs";
1
+ import { $i as EventCategory, $t as formatMinutes, Ai as isSecretClear, An as parseStreamParamsFormPatch, Bt as deviceStateCapability, Di as isDeviceConfigCap, Dn as normalizeUnit, F as FieldClaimSchema, Fr as BaseAddon, H as MINUTES_PER_DAY, Ji as sleep$1, Jn as runtimeStatePolicyFor, Ki as secretTreeFromPaths, M as DeviceStatusSchema, Mi as isSecretMarkerLike, Mr as DeviceRole, Nr as DeviceType, P as FieldClaimModeSchema, Pr as errMsg, Pt as defineExtensionSlotProvider, Qi as userError, Rt as deviceExtensionCapability, Ut as enumerateItemArrayFields, Vt as deviceStatusCapability, Wi as resolveSecretMarkers, Wt as enumerateSchemaFields, X as STREAM_PROFILE_META, Xi as toSecretFieldView, Zi as transformSecretWrite, d as CAP_NAMES_WITH_STATUS, er as siteZoneKey, fn as legacyAutoLinkIds, gn as locationIconKey, gt as buildStreamParamsConfigSchema, ji as isSecretMarker, jr as DeviceFeature, ki as isKeychainStoredField, kt as createDeviceExtensionProvider, l as CAMERA_SWITCH_ORDER, li as WELL_KNOWN_TAB_MAP, oi as SECRET_CLEAR, qt as expandContainer, r as ALL_CAPABILITY_DEFINITIONS, vi as collectZodSecretPaths, w as DAY_NAMES, yt as canonicalIconKey, zt as deviceManagerCapability } from "../../dist-DERK-gP5.mjs";
2
2
  import { t as prefixRange } from "../../prefix-range-Dl0znowN.mjs";
3
3
  import { t as loadPrefixed } from "../../prefix-walk-DAOBSyH1.mjs";
4
4
  import { r as purgeRetiredSettingsRows } from "../../retired-settings-keys-Bhwe4ymb.mjs";