@camstack/types 1.2.64 → 1.2.66

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 (79) hide show
  1. package/dist/addon.js +1 -1
  2. package/dist/addon.mjs +1 -1
  3. package/dist/capabilities/air-quality-sensor.cap.d.ts +10 -0
  4. package/dist/capabilities/alarm-panel.cap.d.ts +10 -0
  5. package/dist/capabilities/ambient-light-sensor.cap.d.ts +10 -0
  6. package/dist/capabilities/audio-metrics.cap.d.ts +7 -0
  7. package/dist/capabilities/automation-control.cap.d.ts +7 -0
  8. package/dist/capabilities/battery.cap.d.ts +10 -0
  9. package/dist/capabilities/binary.cap.d.ts +10 -0
  10. package/dist/capabilities/brightness.cap.d.ts +7 -0
  11. package/dist/capabilities/camera-streams.cap.d.ts +7 -0
  12. package/dist/capabilities/capability-definition.d.ts +58 -0
  13. package/dist/capabilities/carbon-monoxide.cap.d.ts +10 -0
  14. package/dist/capabilities/climate-control.cap.d.ts +7 -0
  15. package/dist/capabilities/color.cap.d.ts +7 -0
  16. package/dist/capabilities/connectivity.cap.d.ts +10 -0
  17. package/dist/capabilities/consumables.cap.d.ts +7 -0
  18. package/dist/capabilities/contact.cap.d.ts +10 -0
  19. package/dist/capabilities/control.cap.d.ts +7 -0
  20. package/dist/capabilities/cover.cap.d.ts +10 -0
  21. package/dist/capabilities/day-night.cap.d.ts +10 -0
  22. package/dist/capabilities/device-discovery.cap.d.ts +7 -0
  23. package/dist/capabilities/device-status.cap.d.ts +10 -0
  24. package/dist/capabilities/doorbell.cap.d.ts +7 -0
  25. package/dist/capabilities/enum-sensor.cap.d.ts +10 -0
  26. package/dist/capabilities/event-emitter.cap.d.ts +7 -0
  27. package/dist/capabilities/fan-control.cap.d.ts +7 -0
  28. package/dist/capabilities/feature-probe.cap.d.ts +7 -0
  29. package/dist/capabilities/flood.cap.d.ts +10 -0
  30. package/dist/capabilities/gas.cap.d.ts +10 -0
  31. package/dist/capabilities/humidifier.cap.d.ts +7 -0
  32. package/dist/capabilities/humidity-sensor.cap.d.ts +10 -0
  33. package/dist/capabilities/image-settings.cap.d.ts +10 -0
  34. package/dist/capabilities/image.cap.d.ts +7 -0
  35. package/dist/capabilities/index.d.ts +3 -3
  36. package/dist/capabilities/lawn-mower-control.cap.d.ts +7 -0
  37. package/dist/capabilities/lock-control.cap.d.ts +10 -0
  38. package/dist/capabilities/media-player.cap.d.ts +7 -0
  39. package/dist/capabilities/motion-trigger.cap.d.ts +7 -0
  40. package/dist/capabilities/motion-zones.cap.d.ts +10 -0
  41. package/dist/capabilities/motion.cap.d.ts +7 -0
  42. package/dist/capabilities/native-object-detection.cap.d.ts +10 -0
  43. package/dist/capabilities/notification-output.cap.d.ts +16 -0
  44. package/dist/capabilities/notification-rules.cap.d.ts +35 -3
  45. package/dist/capabilities/notifier.cap.d.ts +7 -0
  46. package/dist/capabilities/numeric-sensor.cap.d.ts +10 -0
  47. package/dist/capabilities/osd-manager.cap.d.ts +2 -0
  48. package/dist/capabilities/pet-feeder.cap.d.ts +7 -0
  49. package/dist/capabilities/power-meter.cap.d.ts +10 -0
  50. package/dist/capabilities/presence.cap.d.ts +10 -0
  51. package/dist/capabilities/pressure-sensor.cap.d.ts +10 -0
  52. package/dist/capabilities/privacy-mask.cap.d.ts +10 -0
  53. package/dist/capabilities/ptz-autotrack.cap.d.ts +7 -0
  54. package/dist/capabilities/recording-export.cap.d.ts +17 -6
  55. package/dist/capabilities/scene-monitor.cap.d.ts +7 -0
  56. package/dist/capabilities/script-runner.cap.d.ts +7 -0
  57. package/dist/capabilities/smoke.cap.d.ts +10 -0
  58. package/dist/capabilities/stream-params.cap.d.ts +10 -0
  59. package/dist/capabilities/switch.cap.d.ts +10 -0
  60. package/dist/capabilities/tamper.cap.d.ts +10 -0
  61. package/dist/capabilities/temperature-sensor.cap.d.ts +10 -0
  62. package/dist/capabilities/update.cap.d.ts +7 -0
  63. package/dist/capabilities/vacuum-control.cap.d.ts +7 -0
  64. package/dist/capabilities/valve.cap.d.ts +7 -0
  65. package/dist/capabilities/vibration.cap.d.ts +10 -0
  66. package/dist/capabilities/water-heater.cap.d.ts +7 -0
  67. package/dist/capabilities/weather.cap.d.ts +7 -0
  68. package/dist/capabilities/zone-analytics.cap.d.ts +7 -0
  69. package/dist/capabilities/zone-rules.cap.d.ts +7 -0
  70. package/dist/capabilities/zones.cap.d.ts +7 -0
  71. package/dist/generated/runtime-state-durability.d.ts +31 -0
  72. package/dist/index.d.ts +4 -1
  73. package/dist/index.js +1292 -118
  74. package/dist/index.mjs +1267 -117
  75. package/dist/notification/audio-condition.d.ts +118 -0
  76. package/dist/pipeline/native-lease.d.ts +36 -19
  77. package/dist/{sleep-BxjBLp3L.mjs → sleep-CSgK0rNX.mjs} +3 -1
  78. package/dist/{sleep-BszXLEvP.js → sleep-Dh1EJSqF.js} +8 -0
  79. package/package.json +1 -1
@@ -0,0 +1,118 @@
1
+ /**
2
+ * audio-condition — the authoring logic behind the sustained-sound condition
3
+ * (`NcConditions.audio`), pure and UI-framework-free.
4
+ *
5
+ * WHY IT LIVES HERE
6
+ * ─────────────────
7
+ * Same reason as `condition-taxonomy.ts` next door: two editors author this
8
+ * condition (the admin UI and the viewer), the vocabulary it offers is already
9
+ * in this package (`AUDIO_MACRO_LABELS`), and a second copy of "what a cleared
10
+ * threshold writes" is a mirror free to drift. The viewer keeps its own copy
11
+ * because it is a separate app with its own toolchain; every surface that CAN
12
+ * import `@camstack/types` uses this one.
13
+ *
14
+ * Four behaviours here are not cosmetic:
15
+ *
16
+ * 1. **dBFS is negative-going.** `0` is full scale; digital silence reads
17
+ * {@link NC_AUDIO_DBFS_FLOOR}. A control that let an operator author `60`
18
+ * meaning "loud" would write a threshold no sample can reach, and the rule
19
+ * would look broken rather than mis-configured. Every write is clamped.
20
+ * 2. **Neither filter given = the engine REFUSES.** With no level floor and no
21
+ * labels every sample is trivially a hit, so the window would fire on
22
+ * silence. {@link audioIsFailClosed} is how an editor says that BEFORE the
23
+ * save instead of shipping a rule that never notifies and never says why.
24
+ * 3. **Both label spellings are the same label.** The hub's taxonomy serves
25
+ * `audio-dog`; the macro catalog and an operator both say `dog`, and the
26
+ * matcher normalizes the prefix away on both sides. Selection therefore
27
+ * compares NORMALIZED ids — a rule authored in the admin UI must not read
28
+ * as "nothing selected" on the phone.
29
+ * 4. **A stored label the build does not know stays visible.** It is offered
30
+ * as an explicitly-unknown, removable choice, never silently dropped:
31
+ * rewriting the rule the operator is looking at is worse than showing a
32
+ * stale id.
33
+ */
34
+ import { type NcAudioCondition } from '../capabilities/notification-rules.cap.js';
35
+ import type { NcTaxonomy } from '../catalogs/nc-taxonomy.js';
36
+ /** Strip the taxonomy's `audio-` namespace: `audio-dog` and `dog` are one label. */
37
+ export declare function normalizeAudioLabel(value: string): string;
38
+ /** Level bounds, in dBFS. Negative-going: the ceiling is full scale. */
39
+ export declare const NC_AUDIO_DB_MIN = -96;
40
+ export declare const NC_AUDIO_DB_MAX = 0;
41
+ /** Step of the level control — 3 dB is one perceptual notch, not one unit. */
42
+ export declare const NC_AUDIO_DB_STEP = 3;
43
+ /**
44
+ * Offered when the operator turns the level filter ON. NOT a schema default:
45
+ * an absent `dbThreshold` means "any level" and stays absent until asked for,
46
+ * and a stepper seeded at the -96 floor would need thirty taps to reach a
47
+ * threshold that can actually fire.
48
+ */
49
+ export declare const NC_AUDIO_DB_OFFERED = -30;
50
+ export declare const NC_AUDIO_HIT_PERCENT_MIN = 1;
51
+ export declare const NC_AUDIO_HIT_PERCENT_MAX = 100;
52
+ export declare const NC_AUDIO_SAMPLING_MIN_SEC = 1;
53
+ export declare const NC_AUDIO_SAMPLING_MAX_SEC = 300;
54
+ /** Schema defaults — an untouched sub-field must author exactly these. */
55
+ export declare const NC_AUDIO_DEFAULTS: NcAudioCondition;
56
+ /** What an editor SHOWS for an unset condition — without authoring it. */
57
+ export declare function audioOrDefaults(value: NcAudioCondition | undefined): NcAudioCondition;
58
+ /**
59
+ * True when the condition names NEITHER a level floor NOR any label. The engine
60
+ * refuses such a rule (every sample is a hit, so the window fires on silence) —
61
+ * an editor warns instead of letting the operator ship a rule that never
62
+ * notifies and says nothing about why.
63
+ *
64
+ * An ABSENT condition is not flagged: a rule with no `audio` key is not an
65
+ * audio rule at all.
66
+ */
67
+ export declare function audioIsFailClosed(value: NcAudioCondition | undefined): boolean;
68
+ /**
69
+ * A patch over the composite condition. A key present with `undefined` CLEARS
70
+ * the (optional) filter; an absent key leaves it alone.
71
+ */
72
+ export interface NcAudioPatch {
73
+ readonly labels?: readonly string[] | undefined;
74
+ readonly dbThreshold?: number | undefined;
75
+ readonly hitPercent?: number;
76
+ readonly samplingSeconds?: number;
77
+ }
78
+ /**
79
+ * Apply a sub-field edit, seeding from the defaults when nothing is stored yet.
80
+ * The result is always in-bounds for `NcAudioConditionSchema`, and a cleared
81
+ * filter is OMITTED rather than written as an explicit `undefined` (which
82
+ * survives a merge patch as a deliberate erase and reads as authored).
83
+ */
84
+ export declare function patchAudio(current: NcAudioCondition | undefined, patch: NcAudioPatch): NcAudioCondition;
85
+ /**
86
+ * One offered label. `unknown` = stored by the rule, offered by neither the hub
87
+ * nor the local catalog — kept so the operator can SEE it and drop it.
88
+ */
89
+ export interface NcAudioLabelChoice {
90
+ readonly value: string;
91
+ readonly label: string;
92
+ readonly icon: string;
93
+ readonly unknown: boolean;
94
+ }
95
+ /**
96
+ * The label choices: the hub's `audioKinds` when it serves them (its WORDS, the
97
+ * local EMOJI, keyed by the normalized id), else the local macro catalog — plus
98
+ * any stored label neither side knows, marked unknown.
99
+ *
100
+ * The hub's list wins on membership because it knows which macros this cluster
101
+ * actually classifies; the icons stay local because the taxonomy carries none.
102
+ */
103
+ export declare function audioLabelChoices(taxonomy: NcTaxonomy | undefined, selected: readonly string[] | undefined): {
104
+ readonly choices: readonly NcAudioLabelChoice[];
105
+ readonly unknownLabels: readonly string[];
106
+ };
107
+ /**
108
+ * Is this macro id selected? Compares NORMALIZED ids, so a rule authored with
109
+ * the taxonomy spelling (`audio-dog`) reads as selected here.
110
+ */
111
+ export declare function isAudioLabelSelected(labels: readonly string[] | undefined, id: string): boolean;
112
+ /**
113
+ * Toggle one macro id. Removing drops EVERY stored spelling of it; adding
114
+ * appends the bare macro id. Returns `undefined` when the last label goes — the
115
+ * field is optional and absent means "any sound", never an empty array (which
116
+ * `NcAudioConditionSchema` rejects outright).
117
+ */
118
+ export declare function toggleAudioLabel(labels: readonly string[] | undefined, id: string): readonly string[] | undefined;
@@ -1,6 +1,6 @@
1
1
  /**
2
- * THE native-frame **lease** knobs — TTL, RAM budget and demand window for the
3
- * decode worker's native-resolution frame retention.
2
+ * THE native-frame **lease** knobs — hold depth, RAM budget, demand window and
3
+ * subject-tile budget for the decode worker's native-resolution retention.
4
4
  *
5
5
  * ## Why they live here and not in the addon that reads them
6
6
  *
@@ -16,20 +16,25 @@
16
16
  * The lease is a per-decode-worker RAM window. Its purpose — the late
17
17
  * cross-process native crop landing on a full-resolution frame rather than the
18
18
  * ≤640 detection fallback — is a property of the PIPELINE, not of a node's
19
- * hardware: a per-node TTL would mean the same camera produces different crop
19
+ * hardware: a per-node window would mean the same camera produces different crop
20
20
  * quality depending on which node the balancer placed it on, and nobody could
21
21
  * tell that from the stored media. Node-level RAM pressure is already handled
22
22
  * by the per-session budget ceiling, which is itself one of these knobs.
23
23
  *
24
24
  * ## What each knob costs
25
25
  *
26
- * A retained frame is a full NATIVE-resolution copy in system RAM. With the
26
+ * A HELD frame is a full NATIVE-resolution copy in system RAM. With the
27
27
  * default pinned-RGB24 lease path (`CAMSTACK_SESSION_PINNED_RGB_CROP`, on):
28
28
  * 4K ≈ 24.9 MB/frame, 1080p ≈ 6.2 MB/frame. On the YUV420P path (flag off, and
29
29
  * for software-decoded sessions): 4K ≈ 12.4 MB, 1080p ≈ 3.1 MB. Worst-case
30
- * resident RAM for ONE busy camera frameBytes × deliveredFps × ttlSeconds,
31
- * clamped by the budget ceiling. See `docs/design/decode-path.md` "Lease
32
- * admission" for what actually gets admitted.
30
+ * resident RAM for ONE busy camera is now `frameBytes × holdFrames`, clamped by
31
+ * the budget ceiling bounded by a COUNT because a held frame is waiting for
32
+ * one specific event (its own detection result), not for a clock.
33
+ *
34
+ * A TILE is one subject at native resolution, JPEG-encoded: ~60-120 KB on 4K,
35
+ * and nothing at all on a frame that detected nothing. That is the asymmetry
36
+ * this whole shape exists for — see
37
+ * `docs/design/2026-08-13-native-lease-two-tier-redesign.md`.
33
38
  */
34
39
  import { z } from 'zod';
35
40
  import type { HydratedSettingsView } from './detail-crop.js';
@@ -39,10 +44,11 @@ import type { HydratedSettingsView } from './detail-crop.js';
39
44
  * the reader can walk every section instead of trusting the section id.
40
45
  */
41
46
  export declare const NATIVE_LEASE_SECTION_ID = "native-lease";
42
- export declare const NATIVE_LEASE_TTL_KEY = "nativeLeaseTtlMs";
47
+ export declare const NATIVE_LEASE_HOLD_KEY = "nativeLeaseHoldFrames";
43
48
  export declare const NATIVE_LEASE_BUDGET_KEY = "nativeLeaseBudgetMb";
44
49
  export declare const NATIVE_LEASE_ACTIVITY_KEY = "nativeLeaseActivityMs";
45
50
  export declare const NATIVE_LEASE_ADMISSION_KEY = "nativeLeaseAdmission";
51
+ export declare const NATIVE_LEASE_TILE_BUDGET_KEY = "nativeTileBudgetMb";
46
52
  /**
47
53
  * WHICH delivered frames the decode worker retains a native copy of.
48
54
  *
@@ -72,19 +78,24 @@ export type NativeLeaseAdmission = z.infer<typeof NativeLeaseAdmissionSchema>;
72
78
  * junk number would silently become a 0-length or unbounded retention window.
73
79
  */
74
80
  export declare const NativeLeaseSettingsSchema: z.ZodObject<{
75
- ttlMs: z.ZodNumber;
81
+ holdFrames: z.ZodNumber;
76
82
  budgetMb: z.ZodNumber;
77
83
  activityMs: z.ZodNumber;
78
84
  admission: z.ZodEnum<{
79
85
  all: "all";
80
86
  inferred: "inferred";
81
87
  }>;
88
+ tileBudgetMb: z.ZodNumber;
82
89
  }, z.core.$strip>;
83
90
  export type NativeLeaseSettings = z.infer<typeof NativeLeaseSettingsSchema>;
84
91
  /**
85
- * The values in force when the operator has set nothing — byte-for-byte the
86
- * constants the decode worker shipped with as env-var defaults, so making these
87
- * settings changed no behaviour on the day it landed.
92
+ * The values in force when the operator has set nothing.
93
+ *
94
+ * `budgetMb` stays at 1024 on the day the hold landed, deliberately: it stopped
95
+ * being the retention window and became the OOM ceiling, and lowering a ceiling
96
+ * in the same change that redefines it would make a regression and a retune
97
+ * indistinguishable. Cut it once `tileHits` / `holdOverflow` have been read on
98
+ * live traffic.
88
99
  */
89
100
  export declare const DEFAULT_NATIVE_LEASE_SETTINGS: NativeLeaseSettings;
90
101
  /**
@@ -94,10 +105,10 @@ export declare const DEFAULT_NATIVE_LEASE_SETTINGS: NativeLeaseSettings;
94
105
  */
95
106
  export type NativeLeaseSettingsOverride = Partial<NativeLeaseSettings>;
96
107
  /** Slider bounds for the operator-facing knobs (orchestrator settings UI). */
97
- export declare const NATIVE_LEASE_TTL_FIELD: {
98
- readonly min: 250;
99
- readonly max: 10000;
100
- readonly step: 50;
108
+ export declare const NATIVE_LEASE_HOLD_FIELD: {
109
+ readonly min: 1;
110
+ readonly max: 64;
111
+ readonly step: 1;
101
112
  readonly default: number;
102
113
  };
103
114
  export declare const NATIVE_LEASE_BUDGET_FIELD: {
@@ -112,6 +123,12 @@ export declare const NATIVE_LEASE_ACTIVITY_FIELD: {
112
123
  readonly step: 1000;
113
124
  readonly default: number;
114
125
  };
126
+ export declare const NATIVE_LEASE_TILE_BUDGET_FIELD: {
127
+ readonly min: 0;
128
+ readonly max: 1024;
129
+ readonly step: 16;
130
+ readonly default: number;
131
+ };
115
132
  /** Select options for the admission knob (orchestrator settings UI). */
116
133
  export declare const NATIVE_LEASE_ADMISSION_FIELD: {
117
134
  readonly options: readonly [{
@@ -123,10 +140,10 @@ export declare const NATIVE_LEASE_ADMISSION_FIELD: {
123
140
  }];
124
141
  readonly default: "all" | "inferred";
125
142
  };
126
- /** The four knobs, as a key union. */
143
+ /** Every knob, as a key union. */
127
144
  export type NativeLeaseKnob = keyof NativeLeaseSettings;
128
- /** The three knobs whose value is a bounded integer (everything but `admission`). */
129
- export type NativeLeaseNumberKnob = 'ttlMs' | 'budgetMb' | 'activityMs';
145
+ /** The knobs whose value is a bounded integer (everything but `admission`). */
146
+ export type NativeLeaseNumberKnob = 'holdFrames' | 'budgetMb' | 'activityMs' | 'tileBudgetMb';
130
147
  /**
131
148
  * Narrow a FLAT settings record to the knobs the operator set.
132
149
  *
@@ -2004,6 +2004,8 @@ function readNodePin(context) {
2004
2004
  * 4. Addon implements IProvider
2005
2005
  * 5. Registry auto-mounts tRPC router from definition.methods
2006
2006
  */
2007
+ /** The default applied to a `runtimeState` cap that declares no `durability`. */
2008
+ var DEFAULT_RUNTIME_STATE_DURABILITY = "session";
2007
2009
  /**
2008
2010
  * Resolve the EFFECTIVE mount hint for a cap — the explicit `mount` when
2009
2011
  * present, else the scope/mode/deviceNative-derived default. Single source
@@ -3735,4 +3737,4 @@ function sleepCancellable(ms, signal) {
3735
3737
  });
3736
3738
  }
3737
3739
  //#endregion
3738
- export { FrameHandleSchema as $, method as A, readinessKey as B, DeviceType as C, collectHydratedFieldEntries as Ct, event as D, DEVICE_STATUS_METHOD as E, resolveHydratedFieldValue as Et, readNodePin as F, CamProfileSchema as G, BrokerStatsSchema as H, toNodeId as I, CameraStreamSchema as J, CamStreamKindSchema as K, ReadinessRegistry as L, systemMethod as M, CAP_NODE_PIN_CONTEXT_KEY as N, expandCapMethods as O, nodePin as P, FrameHandleFormatSchema as Q, ReadinessTimeoutError as R, DeviceRole as S, WELL_KNOWN_TAB_MAP as St, DEVICE_SETTINGS_CONTRIBUTION_METHODS as T, hydrateSchema as Tt, BrokerStatusSchema as U, scopeKey as V, CAM_PROFILE_ORDER as W, DecodedFrameSchema as X, DecodedAudioChunkSchema as Y, EncodedPacketSchema as Z, RawStateResultSchema as _, createDurableState as _t, asJsonObject as a, SubscribeAudioChunksInputSchema as at, ChargingStatus as b, isEvent as bt, parseJsonArray as c, SubscribeFramesResultSchema as ct, DEVICE_SCOPED_CAPS as d, parseProfileBrokerId as dt, ProfileRtspEntrySchema as et, isDeviceScopedCap as f, selectAssignedProfileSlots as ft, createSliceHandle as g, normalizeAddonInitResult as gt, createMirrorSource as h, BaseAddon as ht, asJsonArray as i, StreamSourceSchema as it, resolveCapMount as j, isDeviceConfigCap as k, parseJsonObject as l, makeProfileBrokerId as lt, createLazyTrpcSource as m, DisposerChain as mt, sleepCancellable as n, ProfileSlotStatusSchema as nt, asNumber as o, SubscribeAudioChunksResultSchema as ot, createDeviceProxy as p, DATAPLANE_SECRET_HEADER as pt, CamStreamResolutionSchema as q, asBoolean as r, StreamSourceEntrySchema$1 as rt, asString as s, SubscribeFramesInputSchema as st, sleep as t, ProfileSlotSchema as tt, parseJsonUnknown as u, makeSourceBrokerId as ut, deviceOpsCapability as v, createEvent as vt, adminUiCapability as w, collectHydratedFieldValues as wt, DeviceFeature as x, WELL_KNOWN_TABS as xt, viewerUiCapability as y, emitReadiness as yt, emitDownForOwnedCaps as z };
3740
+ export { FrameHandleFormatSchema as $, isDeviceConfigCap as A, emitDownForOwnedCaps as B, DeviceType as C, WELL_KNOWN_TAB_MAP as Ct, DEVICE_STATUS_METHOD as D, resolveHydratedFieldValue as Dt, DEVICE_SETTINGS_CONTRIBUTION_METHODS as E, hydrateSchema as Et, nodePin as F, CAM_PROFILE_ORDER as G, scopeKey as H, readNodePin as I, CamStreamResolutionSchema as J, CamProfileSchema as K, toNodeId as L, resolveCapMount as M, systemMethod as N, event as O, CAP_NODE_PIN_CONTEXT_KEY as P, EncodedPacketSchema as Q, ReadinessRegistry as R, DeviceRole as S, WELL_KNOWN_TABS as St, DEFAULT_RUNTIME_STATE_DURABILITY as T, collectHydratedFieldValues as Tt, BrokerStatsSchema as U, readinessKey as V, BrokerStatusSchema as W, DecodedAudioChunkSchema as X, CameraStreamSchema as Y, DecodedFrameSchema as Z, RawStateResultSchema as _, normalizeAddonInitResult as _t, asJsonObject as a, StreamSourceSchema as at, ChargingStatus as b, emitReadiness as bt, parseJsonArray as c, SubscribeFramesInputSchema as ct, DEVICE_SCOPED_CAPS as d, makeSourceBrokerId as dt, FrameHandleSchema as et, isDeviceScopedCap as f, parseProfileBrokerId as ft, createSliceHandle as g, BaseAddon as gt, createMirrorSource as h, DisposerChain as ht, asJsonArray as i, StreamSourceEntrySchema$1 as it, method as j, expandCapMethods as k, parseJsonObject as l, SubscribeFramesResultSchema as lt, createLazyTrpcSource as m, DATAPLANE_SECRET_HEADER as mt, sleepCancellable as n, ProfileSlotSchema as nt, asNumber as o, SubscribeAudioChunksInputSchema as ot, createDeviceProxy as p, selectAssignedProfileSlots as pt, CamStreamKindSchema as q, asBoolean as r, ProfileSlotStatusSchema as rt, asString as s, SubscribeAudioChunksResultSchema as st, sleep as t, ProfileRtspEntrySchema as tt, parseJsonUnknown as u, makeProfileBrokerId as ut, deviceOpsCapability as v, createDurableState as vt, adminUiCapability as w, collectHydratedFieldEntries as wt, DeviceFeature as x, isEvent as xt, viewerUiCapability as y, createEvent as yt, ReadinessTimeoutError as z };
@@ -2004,6 +2004,8 @@ function readNodePin(context) {
2004
2004
  * 4. Addon implements IProvider
2005
2005
  * 5. Registry auto-mounts tRPC router from definition.methods
2006
2006
  */
2007
+ /** The default applied to a `runtimeState` cap that declares no `durability`. */
2008
+ var DEFAULT_RUNTIME_STATE_DURABILITY = "session";
2007
2009
  /**
2008
2010
  * Resolve the EFFECTIVE mount hint for a cap — the explicit `mount` when
2009
2011
  * present, else the scope/mode/deviceNative-derived default. Single source
@@ -3801,6 +3803,12 @@ Object.defineProperty(exports, "DATAPLANE_SECRET_HEADER", {
3801
3803
  return DATAPLANE_SECRET_HEADER;
3802
3804
  }
3803
3805
  });
3806
+ Object.defineProperty(exports, "DEFAULT_RUNTIME_STATE_DURABILITY", {
3807
+ enumerable: true,
3808
+ get: function() {
3809
+ return DEFAULT_RUNTIME_STATE_DURABILITY;
3810
+ }
3811
+ });
3804
3812
  Object.defineProperty(exports, "DEVICE_SCOPED_CAPS", {
3805
3813
  enumerable: true,
3806
3814
  get: function() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/types",
3
- "version": "1.2.64",
3
+ "version": "1.2.66",
4
4
  "description": "Shared types, interfaces, and model catalogs for the CamStack detection ecosystem",
5
5
  "keywords": [
6
6
  "camstack",