@camstack/system 1.2.441 → 1.2.442

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 (85) hide show
  1. package/dist/addon-runner.js +72 -2
  2. package/dist/addon-runner.mjs +72 -2
  3. package/dist/auth/totp-manager.d.ts +46 -1
  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 +41 -1
  9. package/dist/builtins/alerts/alerts.addon.js +638 -26
  10. package/dist/builtins/alerts/alerts.addon.mjs +638 -26
  11. package/dist/builtins/alerts/critical-push.d.ts +86 -0
  12. package/dist/builtins/alerts/runner-alert.d.ts +71 -0
  13. package/dist/builtins/autotrack/index.js +1 -1
  14. package/dist/builtins/autotrack/index.mjs +1 -1
  15. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +2 -2
  16. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +2 -2
  17. package/dist/builtins/calendars/calendars.addon.js +1 -1
  18. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  19. package/dist/builtins/camera-grid/index.js +1 -1
  20. package/dist/builtins/camera-grid/index.mjs +1 -1
  21. package/dist/builtins/composer/composer.addon.js +2 -2
  22. package/dist/builtins/composer/composer.addon.mjs +2 -2
  23. package/dist/builtins/console-logging/index.js +1 -1
  24. package/dist/builtins/console-logging/index.mjs +1 -1
  25. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  26. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  27. package/dist/builtins/device-manager/device-manager.addon.js +1 -1
  28. package/dist/builtins/device-manager/device-manager.addon.mjs +1 -1
  29. package/dist/builtins/hub-forwarder/index.js +1 -1
  30. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  31. package/dist/builtins/keychain/index.js +3 -3
  32. package/dist/builtins/keychain/index.mjs +3 -3
  33. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  34. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  35. package/dist/builtins/local-auth/auth-schema.d.ts +1 -1
  36. package/dist/builtins/local-auth/local-auth.addon.js +226 -17
  37. package/dist/builtins/local-auth/local-auth.addon.mjs +226 -17
  38. package/dist/builtins/local-network/local-network.addon.js +2 -2
  39. package/dist/builtins/local-network/local-network.addon.mjs +2 -2
  40. package/dist/builtins/loki-logging/index.js +1 -1
  41. package/dist/builtins/loki-logging/index.mjs +1 -1
  42. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  43. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  44. package/dist/builtins/platform-probe/index.js +1 -1
  45. package/dist/builtins/platform-probe/index.mjs +1 -1
  46. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  47. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  48. package/dist/builtins/snapshot/index.js +1 -1
  49. package/dist/builtins/snapshot/index.mjs +1 -1
  50. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  51. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  52. package/dist/builtins/sqlite-storage/index.js +1 -1
  53. package/dist/builtins/sqlite-storage/index.mjs +1 -1
  54. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +2 -2
  55. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +2 -2
  56. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  57. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  58. package/dist/builtins/system-config/system-config.addon.js +2 -2
  59. package/dist/builtins/system-config/system-config.addon.mjs +2 -2
  60. package/dist/builtins/winston-logging/index.js +1 -1
  61. package/dist/builtins/winston-logging/index.mjs +1 -1
  62. package/dist/{composition-sources-ByNISOnW.mjs → composition-sources-CftPpY4O.mjs} +1 -1
  63. package/dist/{composition-sources-BG-W2U0d.js → composition-sources-DmSEMtUD.js} +1 -1
  64. package/dist/{constants-DJILnUSb.mjs → constants-2iWQ-Nx-.mjs} +1 -1
  65. package/dist/{constants-UojhAJcm.js → constants-b7kpjuO4.js} +1 -1
  66. package/dist/{device-ca-D8Ri9TVz.mjs → device-ca-BJpYTAPg.mjs} +1 -1
  67. package/dist/{device-ca-196DAEZT.js → device-ca-tKY_ZS9H.js} +1 -1
  68. package/dist/{dist-BiTCcaf-.js → dist-CyIHDLCg.js} +158 -8
  69. package/dist/{dist-BWvkuc31.mjs → dist-DsrQYcLm.mjs} +153 -9
  70. package/dist/file-host-worker.js +1 -1
  71. package/dist/file-host-worker.mjs +1 -1
  72. package/dist/{hub-mdns-ciao-Cnd0bTB9.mjs → hub-mdns-ciao-BS2akjWx.mjs} +1 -1
  73. package/dist/{hub-mdns-ciao-DOBTq8qr.js → hub-mdns-ciao-Da-0NEyr.js} +1 -1
  74. package/dist/index.js +142 -13
  75. package/dist/index.mjs +137 -14
  76. package/dist/kernel/addon-refused-error.d.ts +30 -0
  77. package/dist/kernel/index.d.ts +3 -0
  78. package/dist/kernel/legacy-blob-guard.d.ts +6 -1
  79. package/dist/kernel/moleculer/process-service.d.ts +16 -1
  80. package/dist/kernel/moleculer/runner-refusal.d.ts +27 -0
  81. package/dist/{restore-archive-CfSSjKnA.js → restore-archive-Cdf09dHm.js} +1 -1
  82. package/dist/{restore-archive-4ziluTU3.mjs → restore-archive-RaA3uZ7H.mjs} +1 -1
  83. package/dist/{wal-maintenance-CgZTNWAz.js → wal-maintenance-C-bmkDhm.js} +0 -0
  84. package/dist/{wal-maintenance-B57SAp4a.mjs → wal-maintenance-DE8QrreK.mjs} +0 -0
  85. package/package.json +1 -1
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Critical system alerts reach the operator without depending on the addons
3
+ * that just failed (D877).
4
+ *
5
+ * On 2026-10-17 the hub-main alert centre recorded the crash loops, but the
6
+ * only PUSH path ran through notification-center, which was itself one of the
7
+ * refused runners: nothing arrived for four hours. hub-main is now the SOLE
8
+ * pusher of runner failures (`addon.runner-failed`, `addon.runner-refused`) and
9
+ * of a degraded boot check, straight through `notification-output` (the
10
+ * notifiers). There is no presence heuristic and no second sender:
11
+ * notification-center keeps the state-summary row of `addon-crash-loop` and
12
+ * pushes nothing for it.
13
+ *
14
+ * - A burst is ONE digest per target: 28 runners refusing in the same boot are
15
+ * one message listing them, not 28.
16
+ * - The message names the addon, the state and the remedy line - never raw
17
+ * internal error text.
18
+ * - Delivery is a durable fact on each alert (`metadata.push`), tracked PER
19
+ * TARGET: a retry sends only to the targets that did not get it, and a state
20
+ * already delivered to every target is never sent again. A push that could not
21
+ * be sent stays `pending` and is retried when the notifiers (or
22
+ * notification-center) start - event plus reconcile (D11). If the notifiers
23
+ * are down, the alert and the boot-check status remain the record.
24
+ */
25
+ export interface PushState {
26
+ readonly state: "pending" | "delivered" | "disabled";
27
+ /** What was pushed: the finding's episode + cause. A new key is a new push. */
28
+ readonly key: string;
29
+ readonly at?: number;
30
+ readonly attempts: number;
31
+ readonly lastError?: string;
32
+ /** Targets that already got this key's message. */
33
+ readonly sentTo?: readonly string[];
34
+ }
35
+ /** The slice of a notifier target the policy reads. */
36
+ export interface PushTarget {
37
+ readonly id: string;
38
+ readonly addonId: string;
39
+ readonly enabled: boolean;
40
+ /** A personal target carries its owner; an operator-level one does not. */
41
+ readonly ownerUserId?: string;
42
+ }
43
+ export interface PushMessage {
44
+ readonly title: string;
45
+ readonly body: string;
46
+ }
47
+ export interface CriticalPushPorts {
48
+ /** Throws when the notifiers cannot be asked. */
49
+ readonly listTargets: () => Promise<readonly PushTarget[]>;
50
+ readonly send: (target: PushTarget, message: PushMessage) => Promise<{
51
+ readonly success: boolean;
52
+ readonly error?: string;
53
+ }>;
54
+ }
55
+ export interface PushPolicy {
56
+ readonly enabled: boolean;
57
+ /** Explicit target ids; empty = every enabled operator-level (not personal) target. */
58
+ readonly targetIds: readonly string[];
59
+ }
60
+ /** Alert categories that are critical system findings. */
61
+ export declare const CRITICAL_CATEGORIES: ReadonlySet<string>;
62
+ export declare function isPushState(value: unknown): value is PushState;
63
+ export declare function selectPushTargets(targets: readonly PushTarget[], policy: PushPolicy): readonly PushTarget[];
64
+ /** One critical finding waiting for its push. */
65
+ export interface CriticalItem {
66
+ readonly alertId: string;
67
+ readonly key: string;
68
+ readonly title: string;
69
+ /** ONE line: addon id, state, remedy. Never raw internal error text. */
70
+ readonly line: string;
71
+ readonly previous: PushState | null;
72
+ }
73
+ /** The one message a target gets for a set of findings. */
74
+ export declare function composeDigest(items: readonly CriticalItem[]): PushMessage;
75
+ export interface DeliverDigestInput {
76
+ readonly items: readonly CriticalItem[];
77
+ readonly policy: PushPolicy;
78
+ readonly ports: CriticalPushPorts;
79
+ readonly now: number;
80
+ }
81
+ /**
82
+ * Push every item that still needs it, as ONE message per target. Returns the new
83
+ * state of each item whose state changed (an item already delivered/disabled for
84
+ * its key is absent from the result).
85
+ */
86
+ export declare function deliverDigest(input: DeliverDigestInput): Promise<ReadonlyMap<string, PushState>>;
@@ -0,0 +1,71 @@
1
+ /**
2
+ * ONE alert per runner (D877).
3
+ *
4
+ * A runner that dies produces a burst: `process.crashed` per exit,
5
+ * `addon.crashed` per hosted addon, then `addon.runner-failed` when the D6
6
+ * breaker gives up (or `addon.runner-refused` for a typed Init refusal). On
7
+ * 2026-10-17 28 runners made 28 "Addon crash loop" + 140 "Process crashed" +
8
+ * 34 "Addon crashed" alerts in one minute - the alerts ring (500) was a third
9
+ * full and the one alert that mattered was 1 of 202.
10
+ *
11
+ * Here the burst folds into ONE record per `(node, runner)` that updates its
12
+ * count and state. `refused` and `failed` are TERMINAL markers: a later plain
13
+ * crash bumps the count but never downgrades them. A dismissed record starts
14
+ * a fresh one.
15
+ */
16
+ import type { AlertSeverity } from "@camstack/types";
17
+ export type RunnerAlertState = "crashed" | "failed" | "refused";
18
+ export interface RunnerAlertRecord {
19
+ readonly nodeId: string;
20
+ readonly runnerId: string;
21
+ readonly state: RunnerAlertState;
22
+ /** When this EPISODE began (ms). A runner that recovered and fails again opens a new one. */
23
+ readonly since: number;
24
+ /** Events folded into this record. */
25
+ readonly count: number;
26
+ readonly addonIds: readonly string[];
27
+ /** Last error text a plain crash carried. */
28
+ readonly lastError?: string;
29
+ /** Refusal: the addon's own words, and what the operator does. */
30
+ readonly reason?: string;
31
+ readonly remedy?: string;
32
+ /** Breaker: crashes inside the window. */
33
+ readonly crashesInWindow?: number;
34
+ }
35
+ export type RunnerAlertCategory = "process.crashed" | "addon.crashed" | "addon.runner-failed" | "addon.runner-refused";
36
+ export declare const RUNNER_ALERT_CATEGORIES: readonly RunnerAlertCategory[];
37
+ export declare function isRunnerAlertCategory(category: string): category is RunnerAlertCategory;
38
+ /** Stable alert id of a runner on a node. */
39
+ export declare function runnerAlertId(nodeId: string, runnerId: string): string;
40
+ /** Which runner an event is about; `null` when it names none. */
41
+ export declare function runnerKeyOf(category: RunnerAlertCategory, data: Record<string, unknown>, source: {
42
+ readonly id?: string;
43
+ readonly nodeId?: string;
44
+ } | undefined): {
45
+ readonly nodeId: string;
46
+ readonly runnerId: string;
47
+ } | null;
48
+ /** Fold one event into the runner's record. */
49
+ export declare function foldRunnerEvent(previous: RunnerAlertRecord | null, category: RunnerAlertCategory, data: Record<string, unknown>, key: {
50
+ readonly nodeId: string;
51
+ readonly runnerId: string;
52
+ }, now: number): RunnerAlertRecord;
53
+ export interface RenderedRunnerAlert {
54
+ readonly severity: AlertSeverity;
55
+ readonly title: string;
56
+ readonly message: string;
57
+ }
58
+ export declare function renderRunnerAlert(record: RunnerAlertRecord): RenderedRunnerAlert;
59
+ /** Is the record in a state an operator must act on (terminal)? */
60
+ export declare function isTerminalRunnerState(state: RunnerAlertState): boolean;
61
+ /**
62
+ * The push key of a record: its episode and its cause. The same refusal of the
63
+ * same episode is never pushed twice; a refusal with another reason, a breaker
64
+ * trip, or any failure after a recovery (a new episode) is a new push.
65
+ */
66
+ export declare function runnerPushKey(record: RunnerAlertRecord): string;
67
+ /**
68
+ * The one line a push carries: runner, state and the remedy. Deliberately NOT
69
+ * the raw reason or error text - those stay on the alert.
70
+ */
71
+ export declare function runnerPushLine(record: RunnerAlertRecord): string;
@@ -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-BiTCcaf-.js");
6
+ const require_dist = require("../../dist-CyIHDLCg.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, M as FIRST_LEVEL_MACRO_CLASSES, Pn as ptzAutotrackCapability, Si as EventCategory, jr as BaseAddon, ni as isEvent, ut as bareAddonId } from "../../dist-BWvkuc31.mjs";
1
+ import { Ar as errMsg, Ci as EventCategory, M as FIRST_LEVEL_MACRO_CLASSES, Pn as ptzAutotrackCapability, jr as BaseAddon, ni as isEvent, ut as bareAddonId } from "../../dist-DsrQYcLm.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-BiTCcaf-.js");
7
- const require_restore_archive = require("../../restore-archive-CfSSjKnA.js");
6
+ const require_dist = require("../../dist-CyIHDLCg.js");
7
+ const require_restore_archive = require("../../restore-archive-Cdf09dHm.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 { Si as EventCategory, bn as mayWriteToLocation, jr as BaseAddon, lt as backupCapability, rr as storageOccupancyCapability, si as nodePin, vi as toNodeId } from "../../dist-BWvkuc31.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-4ziluTU3.mjs";
1
+ import { Ci as EventCategory, bn as mayWriteToLocation, ci as nodePin, jr as BaseAddon, lt as backupCapability, rr as storageOccupancyCapability, yi as toNodeId } from "../../dist-DsrQYcLm.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-RaA3uZ7H.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-BiTCcaf-.js");
6
+ const require_dist = require("../../dist-CyIHDLCg.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-BWvkuc31.mjs";
1
+ import { g as CalendarPreferencesSchema, gt as calendarsCapability, jr as BaseAddon } from "../../dist-DsrQYcLm.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-BiTCcaf-.js");
6
+ const require_dist = require("../../dist-CyIHDLCg.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, H as MOTION_CLOSE_AFTER_MS, Qn as snapshotCapability, Si as EventCategory, _t as cameraGridLayoutCapability, ar as streamCatalogCapability, ei as hydrateSchema, gr as buildFfmpegArgs, jr as BaseAddon, jt as declarationOwnerNodeId, kr as DeviceType, o as BaseDevice, qr as createEvent, w as DERIVED_CAMERA_SILENCED_CAP_NAMES, wn as motionCapability, xn as memoizePinnedFfmpeg } from "../../dist-BWvkuc31.mjs";
1
+ import { A as DeclaredDevices, Ar as errMsg, Ci as EventCategory, Dr as DeviceFeature, H as MOTION_CLOSE_AFTER_MS, Qn as snapshotCapability, _t as cameraGridLayoutCapability, ar as streamCatalogCapability, ei as hydrateSchema, gr as buildFfmpegArgs, jr as BaseAddon, jt as declarationOwnerNodeId, kr as DeviceType, o as BaseDevice, qr as createEvent, w as DERIVED_CAMERA_SILENCED_CAP_NAMES, wn as motionCapability, xn as memoizePinnedFfmpeg } from "../../dist-DsrQYcLm.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-BiTCcaf-.js");
7
- const require_composition_sources = require("../../composition-sources-BG-W2U0d.js");
6
+ const require_dist = require("../../dist-CyIHDLCg.js");
7
+ const require_composition_sources = require("../../composition-sources-DmSEMtUD.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, Er as toExpressionValue, Si as EventCategory, 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, qr as createEvent, 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-BWvkuc31.mjs";
2
- import { n as normalizedNativeOwner } from "../../composition-sources-ByNISOnW.mjs";
1
+ import { A as DeclaredDevices, Ar as errMsg, Ci as EventCategory, Cr as compositionSourceKey, Er as toExpressionValue, 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, qr as createEvent, 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-DsrQYcLm.mjs";
2
+ import { n as normalizedNativeOwner } from "../../composition-sources-CftPpY4O.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-BiTCcaf-.js");
6
+ const require_dist = require("../../dist-CyIHDLCg.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-BWvkuc31.mjs";
1
+ import { gn as logDestinationCapability, jr as BaseAddon } from "../../dist-DsrQYcLm.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-BiTCcaf-.js");
4
- const require_composition_sources = require("../../composition-sources-BG-W2U0d.js");
3
+ const require_dist = require("../../dist-CyIHDLCg.js");
4
+ const require_composition_sources = require("../../composition-sources-DmSEMtUD.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, St as compositionSourceRefs, Tn as normalizeCoreBlockWrite, Tt as coreBlockIdFromAddonId, ei as hydrateSchema, ft as buildCapabilityLookup, h as CORE_BLOCK_ADDON_PREFIX, jn as planComposition, jr as BaseAddon, lr as validateComposition, m as CORE_BLOCKS_ADDON_ID, p as COMPOSER_RUNNER_ID, r as ALL_CAPABILITY_DEFINITIONS, v as CoreBlockSchema, vr as composedDeviceRef, wt as coreBlockComposition, zn as resolveCoreBlockEntry } from "../../dist-BWvkuc31.mjs";
2
- import { t as describeCompositionSources } from "../../composition-sources-ByNISOnW.mjs";
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, St as compositionSourceRefs, Tn as normalizeCoreBlockWrite, Tt as coreBlockIdFromAddonId, ei as hydrateSchema, ft as buildCapabilityLookup, h as CORE_BLOCK_ADDON_PREFIX, jn as planComposition, jr as BaseAddon, lr as validateComposition, m as CORE_BLOCKS_ADDON_ID, p as COMPOSER_RUNNER_ID, r as ALL_CAPABILITY_DEFINITIONS, v as CoreBlockSchema, vr as composedDeviceRef, wt as coreBlockComposition, zn as resolveCoreBlockEntry } from "../../dist-DsrQYcLm.mjs";
2
+ import { t as describeCompositionSources } from "../../composition-sources-CftPpY4O.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-BiTCcaf-.js");
6
+ const require_dist = require("../../dist-CyIHDLCg.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, Dr as DeviceFeature, En as normalizeUnit, Gn as runtimeStatePolicyFor, Ht as enumerateItemArrayFields, Kr as collectZodSecretPaths, 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, Si as EventCategory, Ut as enumerateSchemaFields, V as MINUTES_PER_DAY, Y as STREAM_PROFILE_META, Zn as siteZoneKey, _i as sleep$1, ai as isSecretMarker, bi as transformSecretWrite, c as CAMERA_SWITCH_ORDER, dn as legacyAutoLinkIds, gi as secretTreeFromPaths, hn as locationIconKey, ht as buildStreamParamsConfigSchema, ii as isSecretClear, j as DeviceStatusSchema, jr as BaseAddon, kn as parseStreamParamsFormPatch, kr as DeviceType, mi as resolveSecretMarkers, oi as isSecretMarkerLike, r as ALL_CAPABILITY_DEFINITIONS, ri as isKeychainStoredField, ti as isDeviceConfigCap, u as CAP_NAMES_WITH_STATUS, vt as canonicalIconKey, xi as userError, yi as toSecretFieldView, zr as SECRET_CLEAR, zt as deviceStateCapability } from "../../dist-BWvkuc31.mjs";
1
+ import { Ar as errMsg, Br as WELL_KNOWN_TAB_MAP, Bt as deviceStatusCapability, C as DAY_NAMES, Ci as EventCategory, Dr as DeviceFeature, En as normalizeUnit, Gn as runtimeStatePolicyFor, Ht as enumerateItemArrayFields, Kr as collectZodSecretPaths, 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, Si as userError, Ut as enumerateSchemaFields, V as MINUTES_PER_DAY, Y as STREAM_PROFILE_META, Zn as siteZoneKey, _i as secretTreeFromPaths, ai as isSecretMarker, bi as toSecretFieldView, c as CAMERA_SWITCH_ORDER, dn as legacyAutoLinkIds, hi as resolveSecretMarkers, hn as locationIconKey, ht as buildStreamParamsConfigSchema, ii as isSecretClear, j as DeviceStatusSchema, jr as BaseAddon, kn as parseStreamParamsFormPatch, kr as DeviceType, oi as isSecretMarkerLike, r as ALL_CAPABILITY_DEFINITIONS, ri as isKeychainStoredField, ti as isDeviceConfigCap, u as CAP_NAMES_WITH_STATUS, vi as sleep$1, vt as canonicalIconKey, xi as transformSecretWrite, zr as SECRET_CLEAR, zt as deviceStateCapability } from "../../dist-DsrQYcLm.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";
@@ -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-BiTCcaf-.js");
6
+ const require_dist = require("../../dist-CyIHDLCg.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  //#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
9
9
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
@@ -1,4 +1,4 @@
1
- import { gn as logDestinationCapability, jr as BaseAddon } from "../../dist-BWvkuc31.mjs";
1
+ import { gn as logDestinationCapability, jr as BaseAddon } from "../../dist-DsrQYcLm.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  //#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
4
4
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
@@ -3,9 +3,9 @@ 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-BiTCcaf-.js");
7
- const require_device_ca = require("../../device-ca-196DAEZT.js");
8
- const require_constants = require("../../constants-UojhAJcm.js");
6
+ const require_dist = require("../../dist-CyIHDLCg.js");
7
+ const require_device_ca = require("../../device-ca-tKY_ZS9H.js");
8
+ const require_constants = require("../../constants-b7kpjuO4.js");
9
9
  const require_platform_key_source = require("../../platform-key-source-Di7HrlGR.js");
10
10
  let node_crypto = require("node:crypto");
11
11
  let _camstack_types_node = require("@camstack/types/node");
@@ -1,6 +1,6 @@
1
- import { $r as formatSecretScope, L as KEYCHAIN_RESET_TRIGGER_ACTOR, Si as EventCategory, ci as normalizeSecretOwner, di as parseSecretRef, jr as BaseAddon, ln as keychainAdminCapability, un as keychainCapability } from "../../dist-BWvkuc31.mjs";
2
- import { d as JWT_SIGNING_KEY_REF, n as DEVICE_CA_KEY_REF, p as SYSTEM_SECRET_OWNER } from "../../device-ca-D8Ri9TVz.mjs";
3
- import { a as MESH_CA_KEY_REF } from "../../constants-DJILnUSb.mjs";
1
+ import { $r as formatSecretScope, Ci as EventCategory, L as KEYCHAIN_RESET_TRIGGER_ACTOR, fi as parseSecretRef, jr as BaseAddon, li as normalizeSecretOwner, ln as keychainAdminCapability, un as keychainCapability } from "../../dist-DsrQYcLm.mjs";
2
+ import { d as JWT_SIGNING_KEY_REF, n as DEVICE_CA_KEY_REF, p as SYSTEM_SECRET_OWNER } from "../../device-ca-BJpYTAPg.mjs";
3
+ import { a as MESH_CA_KEY_REF } from "../../constants-2iWQ-Nx-.mjs";
4
4
  import { n as getPlatformKeychainKey } from "../../platform-key-source-BWlq0jjn.mjs";
5
5
  import { createCipheriv, createDecipheriv, createHmac, randomBytes, randomUUID, timingSafeEqual } from "node:crypto";
6
6
  import { restrictDirToOwnerSync, restrictFileToOwnerSync, writeOwnerOnlyFileSync } from "@camstack/types/node";
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-BiTCcaf-.js");
3
+ const require_dist = require("../../dist-CyIHDLCg.js");
4
4
  //#region src/builtins/liveness-monitor/liveness-checks.ts
5
5
  var NO_DEVICES = "liveness:no-devices";
6
6
  var ALL_OFFLINE = "liveness:all-devices-offline";
@@ -1,4 +1,4 @@
1
- import { Ar as errMsg, G as RecordingStatusSchema, Si as EventCategory, W as RECORDING_SOURCE_CAMSTACK_ADDON, jr as BaseAddon, qr as createEvent } from "../../dist-BWvkuc31.mjs";
1
+ import { Ar as errMsg, Ci as EventCategory, G as RecordingStatusSchema, W as RECORDING_SOURCE_CAMSTACK_ADDON, jr as BaseAddon, qr as createEvent } from "../../dist-DsrQYcLm.mjs";
2
2
  //#region src/builtins/liveness-monitor/liveness-checks.ts
3
3
  var NO_DEVICES = "liveness:no-devices";
4
4
  var ALL_OFFLINE = "liveness:all-devices-offline";
@@ -76,7 +76,7 @@ export declare const OAUTH_SESSIONS_COLLECTION = "oauth_sessions";
76
76
  * = null`) is INACTIVE — `verifyTotp` returns false until confirmation.
77
77
  *
78
78
  * @durable class=config owner=local-auth
79
- * write="`setup` inserts a fresh secret for the user (deleting any pending row
79
+ * write="`setup` inserts a keychain marker for the user's seed (D878; deleting any pending row
80
80
  * first); `confirm` flips `confirmedAt` once a valid code proves possession"
81
81
  * retention="`disable` deletes the row, and `setup` deletes before re-inserting.
82
82
  * Nothing else prunes — deleting a USER does not cascade here, so their