@camstack/types 1.1.51 → 1.1.53

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.
@@ -127,21 +127,6 @@ declare const AddonAutoUpdateSchema: z.ZodEnum<{
127
127
  beta: "beta";
128
128
  inherit: "inherit";
129
129
  }>;
130
- /**
131
- * Result of `updateFrameworkPackage`. The cap method returns BEFORE the
132
- * server restarts so the admin UI can react to the `restartingAt`
133
- * timestamp (shows reconnect overlay). The transition from
134
- * `fromVersion` to `toVersion` will be confirmed by a subsequent
135
- * `system.restart-completed` event after the new process boots.
136
- *
137
- * Spec: docs/superpowers/specs/2026-05-14-framework-live-update-design.md
138
- */
139
- declare const UpdateFrameworkPackageResultSchema: z.ZodObject<{
140
- packageName: z.ZodString;
141
- fromVersion: z.ZodString;
142
- toVersion: z.ZodString;
143
- restartingAt: z.ZodNumber;
144
- }, z.core.$strip>;
145
130
  declare const BulkUpdateItemStatusSchema: z.ZodEnum<{
146
131
  failed: "failed";
147
132
  queued: "queued";
@@ -487,30 +472,6 @@ export declare const addonsCapability: {
487
472
  }, z.core.$strip>, z.ZodObject<{
488
473
  success: z.ZodLiteral<true>;
489
474
  }, z.core.$strip>, "mutation">;
490
- /**
491
- * Live-update one of the framework packages marked
492
- * `camstack.system: true` (`@camstack/types|kernel|core|sdk|ui-library`).
493
- * Runs `npm install --prefix <appRoot> <name>@<version> --no-save`,
494
- * writes a `.restart-pending` marker, emits `system.restarting`
495
- * and schedules a graceful process exit. The supervisor (Docker /
496
- * Electron / systemd) brings the hub back up; on first boot after
497
- * the restart the marker fires `system.restart-completed`.
498
- *
499
- * `version` defaults to `'latest'`. The allow-list of valid
500
- * `packageName` values is enforced server-side.
501
- *
502
- * Spec: docs/superpowers/specs/2026-05-14-framework-live-update-design.md
503
- */
504
- readonly updateFrameworkPackage: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
505
- packageName: z.ZodString;
506
- version: z.ZodOptional<z.ZodString>;
507
- deferRestart: z.ZodOptional<z.ZodBoolean>;
508
- }, z.core.$strip>, z.ZodObject<{
509
- packageName: z.ZodString;
510
- fromVersion: z.ZodString;
511
- toVersion: z.ZodString;
512
- restartingAt: z.ZodNumber;
513
- }, z.core.$strip>, "mutation">;
514
475
  readonly getVersions: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
515
476
  name: z.ZodString;
516
477
  }, z.core.$strip>, z.ZodReadonly<z.ZodArray<z.ZodObject<{
@@ -788,4 +749,4 @@ export declare const addonsCapability: {
788
749
  };
789
750
  };
790
751
  export type IAddonsProvider = InferProvider<typeof addonsCapability>;
791
- export { AddonListItemSchema, InstalledPackageSchema, PackageUpdateSchema, PackageVersionInfoSchema, SearchResultSchema, AutoUpdateSettingsSchema, AddonAutoUpdateSchema, LogStreamEntrySchema, CustomActionInputSchema, LogLevelSchema, ChannelSchema, ChannelWithInheritSchema, UpdateFrameworkPackageResultSchema, FrameworkPackageStatusSchema, BulkUpdateItemStatusSchema, BulkUpdateItemSchema, BulkUpdatePhaseSchema, BulkUpdateStateSchema, };
752
+ export { AddonListItemSchema, InstalledPackageSchema, PackageUpdateSchema, PackageVersionInfoSchema, SearchResultSchema, AutoUpdateSettingsSchema, AddonAutoUpdateSchema, LogStreamEntrySchema, CustomActionInputSchema, LogLevelSchema, ChannelSchema, ChannelWithInheritSchema, FrameworkPackageStatusSchema, BulkUpdateItemStatusSchema, BulkUpdateItemSchema, BulkUpdatePhaseSchema, BulkUpdateStateSchema, };
@@ -106,6 +106,7 @@ export declare const CustomModelDescriptorSchema: z.ZodObject<{
106
106
  imagenet: "imagenet";
107
107
  none: "none";
108
108
  }>>;
109
+ outputProbabilities: z.ZodOptional<z.ZodBoolean>;
109
110
  preprocessMode: z.ZodOptional<z.ZodEnum<{
110
111
  letterbox: "letterbox";
111
112
  resize: "resize";
@@ -234,6 +235,7 @@ export declare const customModelRegistryCapability: {
234
235
  imagenet: "imagenet";
235
236
  none: "none";
236
237
  }>>;
238
+ outputProbabilities: z.ZodOptional<z.ZodBoolean>;
237
239
  preprocessMode: z.ZodOptional<z.ZodEnum<{
238
240
  letterbox: "letterbox";
239
241
  resize: "resize";
@@ -196,6 +196,7 @@ export declare const modelConvertCapability: {
196
196
  imagenet: "imagenet";
197
197
  none: "none";
198
198
  }>>;
199
+ outputProbabilities: z.ZodOptional<z.ZodBoolean>;
199
200
  preprocessMode: z.ZodOptional<z.ZodEnum<{
200
201
  letterbox: "letterbox";
201
202
  resize: "resize";
@@ -108,6 +108,7 @@ export declare const ModelDistributeInputSchema: z.ZodObject<{
108
108
  imagenet: "imagenet";
109
109
  none: "none";
110
110
  }>>;
111
+ outputProbabilities: z.ZodOptional<z.ZodBoolean>;
111
112
  preprocessMode: z.ZodOptional<z.ZodEnum<{
112
113
  letterbox: "letterbox";
113
114
  resize: "resize";
@@ -250,6 +251,7 @@ export declare const modelDistributorCapability: {
250
251
  imagenet: "imagenet";
251
252
  none: "none";
252
253
  }>>;
254
+ outputProbabilities: z.ZodOptional<z.ZodBoolean>;
253
255
  preprocessMode: z.ZodOptional<z.ZodEnum<{
254
256
  letterbox: "letterbox";
255
257
  resize: "resize";
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Device-control RESOLUTION LOGIC — the single, presentation-free source of
3
+ * truth for "given a device's `type` (+ its cap `features`), which control
4
+ * should render?".
5
+ *
6
+ * This module is deliberately framework-free: NO react / react-native / lucide
7
+ * imports, no JSX, no platform widgets. It encodes only the DECISION; each
8
+ * client (admin-ui's `@camstack/ui-library` web registry, the RN viewer's
9
+ * accessory registry) maps the returned control-KIND onto its own
10
+ * platform-specific components. That's the one duplication we remove — the
11
+ * presentational components stay platform-specific by necessity.
12
+ *
13
+ * Two decision surfaces live here, at two granularities:
14
+ *
15
+ * 1. `resolveDeviceControlKind(type)` — the BASE type → control-kind decision
16
+ * used by the admin-ui device list / device-detail hero. Exhaustive over
17
+ * every `DeviceType`; a light is a single `'light'` kind (dim-vs-plain is
18
+ * refined inside the light component).
19
+ *
20
+ * 2. `pickAccessoryControl({ type, features })` — the FINER accessory-row
21
+ * decision used by the viewer's per-camera accessory list. It refines a
22
+ * `light` into `'brightness'` vs `'switch'` and a `sensor`/`presence` into
23
+ * a specific sensor cap, because an accessory row renders ONE compact
24
+ * control chosen by priority.
25
+ *
26
+ * The two agree on every overlapping type EXCEPT `light` (see the notes on
27
+ * `pickAccessoryControl`): the base decision keeps a dedicated `'light'`
28
+ * control; the accessory decision collapses a non-dimmable light onto the
29
+ * generic `'switch'` control. That is a deliberate granularity difference, not
30
+ * a contradiction — the base kind is what the admin-ui renders, the accessory
31
+ * pick is what a compact camera-accessory row renders.
32
+ */
33
+ import { DeviceType } from './device-type.js';
34
+ /**
35
+ * The abstract control-kind a `DeviceType` resolves to. Each client binds
36
+ * these kinds to its own components (web: `CONTROL_KIND_COMPONENTS`). A single
37
+ * kind can back several device types (`'switch'` ← Switch + Siren, `'sensor'`
38
+ * ← Sensor + Presence, `'dummy'` ← every placeholder/non-controllable type).
39
+ */
40
+ export type DeviceControlKind = 'cover' | 'valve' | 'humidifier' | 'water-heater' | 'switch' | 'light' | 'fan' | 'sensor' | 'thermostat' | 'climate' | 'button' | 'update' | 'lock' | 'media-player' | 'alarm' | 'control' | 'weather' | 'vacuum' | 'lawn-mower' | 'image' | 'pet-feeder' | 'dummy';
41
+ /**
42
+ * Exhaustive `DeviceType` → `DeviceControlKind` map. Omitting a new enum member
43
+ * fails the build here (the single place the type→kind decision is encoded).
44
+ * `'dummy'` marks types with no interactive control (Camera/Hub/Generic and the
45
+ * placeholder HA types whose inline control renders a dash).
46
+ */
47
+ export declare const DEVICE_TYPE_CONTROL_KIND: Record<DeviceType, DeviceControlKind>;
48
+ /**
49
+ * Runtime-string-safe base resolver: a device row's `type` crosses the wire as
50
+ * a plain string, so an unrecognised value resolves to `null` instead of
51
+ * indexing the map with an unverified key. `DEVICE_TYPE_VALUES.has(type)`
52
+ * narrows the string to a `DeviceType` before indexing (documented enum-string
53
+ * boundary).
54
+ */
55
+ export declare function resolveDeviceControlKind(type: string): DeviceControlKind | null;
56
+ /** Identifier of the control kind an accessory row should render. `'none'` = no
57
+ * control. A subset of the surfaces the base decision covers, PLUS
58
+ * `'brightness'` (a dimmable light refined at the decision layer). */
59
+ export type AccessoryControlKind = 'cover' | 'lock' | 'alarm' | 'valve' | 'brightness' | 'switch' | 'sensor' | 'none';
60
+ /** Kebab feature flag advertised by an accessory that auto-activates when its
61
+ * parent camera detects motion. The cap's kebab name is `motion-trigger` (see
62
+ * `motion-trigger.cap.ts`). It is INDEPENDENT of the row's primary control: a
63
+ * siren/light/switch can expose BOTH a `switch` on/off AND a `motion-trigger`
64
+ * "activate on motion" toggle. */
65
+ export declare const MOTION_TRIGGER_FEATURE = "motion-trigger";
66
+ /** True when an accessory advertises the `motion-trigger` cap — drives the
67
+ * inline "On motion" toggle rendered alongside its primary control. Pure +
68
+ * testable. */
69
+ export declare function hasMotionTrigger(features: readonly string[]): boolean;
70
+ /** Kebab-case sensor cap names → the read-only sensor-value control. The
71
+ * accessory pick scans these (in order) to choose which sensor cap to read. */
72
+ export declare const SENSOR_FEATURES: readonly string[];
73
+ /** The chosen control plus the sensor feature (when `kind === 'sensor'`) so the
74
+ * renderer knows which sensor cap to read. */
75
+ export interface AccessoryControlPick {
76
+ readonly kind: AccessoryControlKind;
77
+ /** The kebab sensor cap name to read, only set when `kind === 'sensor'`. */
78
+ readonly sensorFeature?: string;
79
+ }
80
+ /** The accessory fields the pick needs: its canonical `DeviceType` (as the
81
+ * wire string) plus the secondary cap `features` (used only to refine a light
82
+ * or sensor). */
83
+ export interface AccessoryControlInput {
84
+ readonly type: string;
85
+ readonly features: readonly string[];
86
+ }
87
+ /**
88
+ * Pick the primary control for an accessory. The control is chosen by the
89
+ * device's canonical `type` (the `DeviceType` enum value — the same key
90
+ * `resolveDeviceControlKind` maps on), NOT by the `features` list (which holds
91
+ * secondary flags). For a `light` we consult `features` to choose dim vs plain
92
+ * on/off, and for a `sensor`/`presence` to pick which sensor value to read.
93
+ * Pure: same input → same output. Returns `{ kind: 'none' }` for types with no
94
+ * accessory-row control.
95
+ */
96
+ export declare function pickAccessoryControl(device: AccessoryControlInput): AccessoryControlPick;
97
+ /** A sensor cap → its `(capKey, field, fallbackUnit)` mapping for the read-only
98
+ * value row. The kebab cap name is the lookup key. The camelCase `capKey` is
99
+ * the tRPC client router key; `field` is the numeric field on that cap's
100
+ * status; `fallbackUnit` is used when the status omits a `unit`. */
101
+ export interface SensorMapping {
102
+ readonly capKey: string;
103
+ readonly field: string;
104
+ readonly fallbackUnit?: string;
105
+ }
106
+ /** Kebab sensor cap → its numeric-value mapping. `enum-sensor` is handled
107
+ * separately by callers (it reads a raw string `value`, not a numeric field),
108
+ * so it intentionally has no entry here. */
109
+ export declare const SENSOR_MAP: Readonly<Record<string, SensorMapping>>;
110
+ /** True when a value is a navigable node: a plain object OR a tRPC v11 client
111
+ * proxy node (a callable `Proxy(noop)` → `typeof === 'function'`, NOT an
112
+ * object). A `typeof === 'object'`-only check REJECTS every real client proxy,
113
+ * so `resolveMutate` would return null and EVERY control becomes a silent
114
+ * no-op. Framework-free: operates on the SDK proxy shape only. */
115
+ export declare function isNode(value: unknown): value is Record<string, unknown>;
116
+ /** Resolve `router.<method>.mutate` to a callable, or `null`. Walks the tRPC
117
+ * client proxy defensively (each hop guarded by `isNode`). */
118
+ export declare function resolveMutate(router: unknown, method: string): ((input: Record<string, unknown>) => Promise<unknown>) | null;
@@ -1436,21 +1436,6 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
1436
1436
  };
1437
1437
  meta: object;
1438
1438
  }>;
1439
- updateFrameworkPackage: import("@trpc/server").TRPCMutationProcedure<{
1440
- input: {
1441
- [x: string]: unknown;
1442
- packageName: string;
1443
- version?: string | undefined;
1444
- deferRestart?: boolean | undefined;
1445
- };
1446
- output: {
1447
- packageName: string;
1448
- fromVersion: string;
1449
- toVersion: string;
1450
- restartingAt: number;
1451
- };
1452
- meta: object;
1453
- }>;
1454
1439
  getVersions: import("@trpc/server").TRPCQueryProcedure<{
1455
1440
  input: {
1456
1441
  [x: string]: unknown;
@@ -18182,21 +18167,6 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
18182
18167
  };
18183
18168
  meta: object;
18184
18169
  }>;
18185
- updateFrameworkPackage: import("@trpc/server").TRPCMutationProcedure<{
18186
- input: {
18187
- [x: string]: unknown;
18188
- packageName: string;
18189
- version?: string | undefined;
18190
- deferRestart?: boolean | undefined;
18191
- };
18192
- output: {
18193
- packageName: string;
18194
- fromVersion: string;
18195
- toVersion: string;
18196
- restartingAt: number;
18197
- };
18198
- meta: object;
18199
- }>;
18200
18170
  getVersions: import("@trpc/server").TRPCQueryProcedure<{
18201
18171
  input: {
18202
18172
  [x: string]: unknown;
@@ -6,7 +6,7 @@
6
6
  * scope+access check inside `protectedProcedure` (see
7
7
  * `server/backend/src/api/trpc/trpc.middleware.ts`).
8
8
  *
9
- * Coverage: 801 method paths across 116 capabilities.
9
+ * Coverage: 800 method paths across 116 capabilities.
10
10
  */
11
11
  import type { CapabilityMethodAccess } from '../capabilities/capability-definition.js';
12
12
  export interface MethodAccessRecord {
@@ -50,7 +50,7 @@ import type { userManagementCapability } from '../capabilities/user-management.c
50
50
  */
51
51
  export interface SystemProxy {
52
52
  readonly addonPages: Pick<InferProvider<typeof addonPagesCapability>, 'listPages'>;
53
- readonly addons: Pick<InferProvider<typeof addonsCapability>, 'list' | 'getLogs' | 'listPackages' | 'installPackage' | 'installFromWorkspace' | 'isWorkspaceAvailable' | 'listWorkspacePackages' | 'uninstallPackage' | 'reloadPackages' | 'searchAvailable' | 'listUpdates' | 'updatePackage' | 'rollbackPackage' | 'forceRefresh' | 'restartServer' | 'getLastRestart' | 'listFrameworkPackages' | 'listCapabilityProviders' | 'setCapabilityProviderEnabled' | 'updateFrameworkPackage' | 'getVersions' | 'restartAddon' | 'retryLoad' | 'getAutoUpdateSettings' | 'setAutoUpdateSettings' | 'getAddonAutoUpdate' | 'setAddonAutoUpdate' | 'applyAutoUpdateToAll' | 'custom' | 'startJob' | 'getJob' | 'listJobs' | 'cancelJob' | 'onAddonLogs'>;
53
+ readonly addons: Pick<InferProvider<typeof addonsCapability>, 'list' | 'getLogs' | 'listPackages' | 'installPackage' | 'installFromWorkspace' | 'isWorkspaceAvailable' | 'listWorkspacePackages' | 'uninstallPackage' | 'reloadPackages' | 'searchAvailable' | 'listUpdates' | 'updatePackage' | 'rollbackPackage' | 'forceRefresh' | 'restartServer' | 'getLastRestart' | 'listFrameworkPackages' | 'listCapabilityProviders' | 'setCapabilityProviderEnabled' | 'getVersions' | 'restartAddon' | 'retryLoad' | 'getAutoUpdateSettings' | 'setAutoUpdateSettings' | 'getAddonAutoUpdate' | 'setAddonAutoUpdate' | 'applyAutoUpdateToAll' | 'custom' | 'startJob' | 'getJob' | 'listJobs' | 'cancelJob' | 'onAddonLogs'>;
54
54
  readonly addonSettings: Pick<InferProvider<typeof addonSettingsCapability>, 'getGlobalSettings' | 'updateGlobalSettings'>;
55
55
  readonly addonWidgets: Pick<InferProvider<typeof addonWidgetsCapability>, 'listWidgets'>;
56
56
  readonly alerts: Pick<InferProvider<typeof alertsCapability>, 'emit' | 'update' | 'list' | 'getUnreadCount' | 'markRead' | 'markAllRead' | 'dismiss'>;
package/dist/index.d.ts CHANGED
@@ -160,6 +160,8 @@ export { getByPath, setByPath } from './device/path-util.js';
160
160
  export { applyTransform } from './device/device-link-transform.js';
161
161
  export { enumerateItemArrayFields, enumerateSchemaFields } from './device/schema-fields.js';
162
162
  export type { WireableField } from './device/schema-fields.js';
163
+ export { DEVICE_TYPE_CONTROL_KIND, resolveDeviceControlKind, MOTION_TRIGGER_FEATURE, hasMotionTrigger, SENSOR_FEATURES, SENSOR_MAP, pickAccessoryControl, isNode, resolveMutate, } from './device/device-control-resolution.js';
164
+ export type { DeviceControlKind, AccessoryControlKind, AccessoryControlPick, AccessoryControlInput, SensorMapping, } from './device/device-control-resolution.js';
163
165
  export { EventCategory } from './enums/event-category.js';
164
166
  export type { AppRouter, AddonApi } from './generated/addon-api.js';
165
167
  export { createDeviceProxy } from './generated/device-proxy.js';
package/dist/index.js CHANGED
@@ -174,6 +174,17 @@ var ModelCatalogEntrySchema = zod.z.object({
174
174
  "imagenet",
175
175
  "none"
176
176
  ]).optional(),
177
+ /**
178
+ * The model already applies softmax IN-GRAPH — its raw output is a
179
+ * probability distribution, not logits. When set, the `softmax`
180
+ * postprocessor must NOT re-apply softmax: re-softmaxing an already-normalised
181
+ * probability vector collapses it toward uniform (top-1 score craters far
182
+ * below its true value, making every confidence gate meaningless). Absent ⇒
183
+ * the output is raw logits and the postprocessor applies softmax (the normal
184
+ * case). Set on the Google AIY Birds `bird-classifier` (softmax baked into the
185
+ * TF graph). Threaded to the Python pool via `PoolModelConfig.outputProbabilities`.
186
+ */
187
+ outputProbabilities: zod.z.boolean().optional(),
177
188
  preprocessMode: zod.z.enum(["letterbox", "resize"]).optional(),
178
189
  /**
179
190
  * Per-MODEL postprocessor override. Absent ⇒ the step's own
@@ -12788,6 +12799,182 @@ function enumerateItemArrayFields(itemArray) {
12788
12799
  }));
12789
12800
  }
12790
12801
  //#endregion
12802
+ //#region src/device/device-control-resolution.ts
12803
+ /**
12804
+ * Device-control RESOLUTION LOGIC — the single, presentation-free source of
12805
+ * truth for "given a device's `type` (+ its cap `features`), which control
12806
+ * should render?".
12807
+ *
12808
+ * This module is deliberately framework-free: NO react / react-native / lucide
12809
+ * imports, no JSX, no platform widgets. It encodes only the DECISION; each
12810
+ * client (admin-ui's `@camstack/ui-library` web registry, the RN viewer's
12811
+ * accessory registry) maps the returned control-KIND onto its own
12812
+ * platform-specific components. That's the one duplication we remove — the
12813
+ * presentational components stay platform-specific by necessity.
12814
+ *
12815
+ * Two decision surfaces live here, at two granularities:
12816
+ *
12817
+ * 1. `resolveDeviceControlKind(type)` — the BASE type → control-kind decision
12818
+ * used by the admin-ui device list / device-detail hero. Exhaustive over
12819
+ * every `DeviceType`; a light is a single `'light'` kind (dim-vs-plain is
12820
+ * refined inside the light component).
12821
+ *
12822
+ * 2. `pickAccessoryControl({ type, features })` — the FINER accessory-row
12823
+ * decision used by the viewer's per-camera accessory list. It refines a
12824
+ * `light` into `'brightness'` vs `'switch'` and a `sensor`/`presence` into
12825
+ * a specific sensor cap, because an accessory row renders ONE compact
12826
+ * control chosen by priority.
12827
+ *
12828
+ * The two agree on every overlapping type EXCEPT `light` (see the notes on
12829
+ * `pickAccessoryControl`): the base decision keeps a dedicated `'light'`
12830
+ * control; the accessory decision collapses a non-dimmable light onto the
12831
+ * generic `'switch'` control. That is a deliberate granularity difference, not
12832
+ * a contradiction — the base kind is what the admin-ui renders, the accessory
12833
+ * pick is what a compact camera-accessory row renders.
12834
+ */
12835
+ /**
12836
+ * Exhaustive `DeviceType` → `DeviceControlKind` map. Omitting a new enum member
12837
+ * fails the build here (the single place the type→kind decision is encoded).
12838
+ * `'dummy'` marks types with no interactive control (Camera/Hub/Generic and the
12839
+ * placeholder HA types whose inline control renders a dash).
12840
+ */
12841
+ var DEVICE_TYPE_CONTROL_KIND = {
12842
+ [require_sleep.DeviceType.Cover]: "cover",
12843
+ [require_sleep.DeviceType.Valve]: "valve",
12844
+ [require_sleep.DeviceType.Humidifier]: "humidifier",
12845
+ [require_sleep.DeviceType.WaterHeater]: "water-heater",
12846
+ [require_sleep.DeviceType.Camera]: "dummy",
12847
+ [require_sleep.DeviceType.Hub]: "dummy",
12848
+ [require_sleep.DeviceType.Switch]: "switch",
12849
+ [require_sleep.DeviceType.Siren]: "switch",
12850
+ [require_sleep.DeviceType.Light]: "light",
12851
+ [require_sleep.DeviceType.Fan]: "fan",
12852
+ [require_sleep.DeviceType.Sensor]: "sensor",
12853
+ [require_sleep.DeviceType.Thermostat]: "thermostat",
12854
+ [require_sleep.DeviceType.Climate]: "climate",
12855
+ [require_sleep.DeviceType.Button]: "button",
12856
+ [require_sleep.DeviceType.EventEmitter]: "dummy",
12857
+ [require_sleep.DeviceType.Update]: "update",
12858
+ [require_sleep.DeviceType.Generic]: "dummy",
12859
+ [require_sleep.DeviceType.Notifier]: "dummy",
12860
+ [require_sleep.DeviceType.Script]: "dummy",
12861
+ [require_sleep.DeviceType.Automation]: "dummy",
12862
+ [require_sleep.DeviceType.Lock]: "lock",
12863
+ [require_sleep.DeviceType.MediaPlayer]: "media-player",
12864
+ [require_sleep.DeviceType.AlarmPanel]: "alarm",
12865
+ [require_sleep.DeviceType.Control]: "control",
12866
+ [require_sleep.DeviceType.Presence]: "sensor",
12867
+ [require_sleep.DeviceType.Weather]: "weather",
12868
+ [require_sleep.DeviceType.Vacuum]: "vacuum",
12869
+ [require_sleep.DeviceType.LawnMower]: "lawn-mower",
12870
+ [require_sleep.DeviceType.Container]: "dummy",
12871
+ [require_sleep.DeviceType.Image]: "image",
12872
+ [require_sleep.DeviceType.PetFeeder]: "pet-feeder"
12873
+ };
12874
+ var DEVICE_TYPE_VALUES = new Set(Object.values(require_sleep.DeviceType));
12875
+ /**
12876
+ * Runtime-string-safe base resolver: a device row's `type` crosses the wire as
12877
+ * a plain string, so an unrecognised value resolves to `null` instead of
12878
+ * indexing the map with an unverified key. `DEVICE_TYPE_VALUES.has(type)`
12879
+ * narrows the string to a `DeviceType` before indexing (documented enum-string
12880
+ * boundary).
12881
+ */
12882
+ function resolveDeviceControlKind(type) {
12883
+ return DEVICE_TYPE_VALUES.has(type) ? DEVICE_TYPE_CONTROL_KIND[type] : null;
12884
+ }
12885
+ /** Kebab feature flag advertised by an accessory that auto-activates when its
12886
+ * parent camera detects motion. The cap's kebab name is `motion-trigger` (see
12887
+ * `motion-trigger.cap.ts`). It is INDEPENDENT of the row's primary control: a
12888
+ * siren/light/switch can expose BOTH a `switch` on/off AND a `motion-trigger`
12889
+ * "activate on motion" toggle. */
12890
+ var MOTION_TRIGGER_FEATURE = "motion-trigger";
12891
+ /** True when an accessory advertises the `motion-trigger` cap — drives the
12892
+ * inline "On motion" toggle rendered alongside its primary control. Pure +
12893
+ * testable. */
12894
+ function hasMotionTrigger(features) {
12895
+ return features.includes(MOTION_TRIGGER_FEATURE);
12896
+ }
12897
+ /** Kebab-case sensor cap names → the read-only sensor-value control. The
12898
+ * accessory pick scans these (in order) to choose which sensor cap to read. */
12899
+ var SENSOR_FEATURES = [
12900
+ "temperature-sensor",
12901
+ "humidity-sensor",
12902
+ "ambient-light-sensor",
12903
+ "numeric-sensor",
12904
+ "enum-sensor"
12905
+ ];
12906
+ /**
12907
+ * Pick the primary control for an accessory. The control is chosen by the
12908
+ * device's canonical `type` (the `DeviceType` enum value — the same key
12909
+ * `resolveDeviceControlKind` maps on), NOT by the `features` list (which holds
12910
+ * secondary flags). For a `light` we consult `features` to choose dim vs plain
12911
+ * on/off, and for a `sensor`/`presence` to pick which sensor value to read.
12912
+ * Pure: same input → same output. Returns `{ kind: 'none' }` for types with no
12913
+ * accessory-row control.
12914
+ */
12915
+ function pickAccessoryControl(device) {
12916
+ const set = new Set(device.features);
12917
+ switch (device.type) {
12918
+ case require_sleep.DeviceType.Cover: return { kind: "cover" };
12919
+ case require_sleep.DeviceType.Valve: return { kind: "valve" };
12920
+ case require_sleep.DeviceType.Lock: return { kind: "lock" };
12921
+ case require_sleep.DeviceType.AlarmPanel: return { kind: "alarm" };
12922
+ case require_sleep.DeviceType.Light: return set.has("brightness") ? { kind: "brightness" } : { kind: "switch" };
12923
+ case require_sleep.DeviceType.Switch:
12924
+ case require_sleep.DeviceType.Siren: return { kind: "switch" };
12925
+ case require_sleep.DeviceType.Sensor:
12926
+ case require_sleep.DeviceType.Presence: {
12927
+ const sensor = SENSOR_FEATURES.find((f) => set.has(f));
12928
+ return sensor ? {
12929
+ kind: "sensor",
12930
+ sensorFeature: sensor
12931
+ } : { kind: "none" };
12932
+ }
12933
+ default: return { kind: "none" };
12934
+ }
12935
+ }
12936
+ /** Kebab sensor cap → its numeric-value mapping. `enum-sensor` is handled
12937
+ * separately by callers (it reads a raw string `value`, not a numeric field),
12938
+ * so it intentionally has no entry here. */
12939
+ var SENSOR_MAP = {
12940
+ "temperature-sensor": {
12941
+ capKey: "temperatureSensor",
12942
+ field: "celsius",
12943
+ fallbackUnit: "°C"
12944
+ },
12945
+ "humidity-sensor": {
12946
+ capKey: "humiditySensor",
12947
+ field: "percent",
12948
+ fallbackUnit: "%"
12949
+ },
12950
+ "ambient-light-sensor": {
12951
+ capKey: "ambientLightSensor",
12952
+ field: "lux",
12953
+ fallbackUnit: "lx"
12954
+ },
12955
+ "numeric-sensor": {
12956
+ capKey: "numericSensor",
12957
+ field: "value"
12958
+ }
12959
+ };
12960
+ /** True when a value is a navigable node: a plain object OR a tRPC v11 client
12961
+ * proxy node (a callable `Proxy(noop)` → `typeof === 'function'`, NOT an
12962
+ * object). A `typeof === 'object'`-only check REJECTS every real client proxy,
12963
+ * so `resolveMutate` would return null and EVERY control becomes a silent
12964
+ * no-op. Framework-free: operates on the SDK proxy shape only. */
12965
+ function isNode(value) {
12966
+ return value !== null && (typeof value === "object" || typeof value === "function");
12967
+ }
12968
+ /** Resolve `router.<method>.mutate` to a callable, or `null`. Walks the tRPC
12969
+ * client proxy defensively (each hop guarded by `isNode`). */
12970
+ function resolveMutate(router, method) {
12971
+ if (!isNode(router)) return null;
12972
+ const proc = router[method];
12973
+ if (!isNode(proc)) return null;
12974
+ const mutate = proc.mutate;
12975
+ return typeof mutate === "function" ? mutate : null;
12976
+ }
12977
+ //#endregion
12791
12978
  //#region src/utils/zone-rule-eval.ts
12792
12979
  /**
12793
12980
  * Evaluate `rules` against `items`. Returns the items partitioned
@@ -12905,7 +13092,6 @@ function createSystemProxy(api) {
12905
13092
  listFrameworkPackages: (input) => dispatch("addons", "listFrameworkPackages", "query", input),
12906
13093
  listCapabilityProviders: (input) => dispatch("addons", "listCapabilityProviders", "query", input),
12907
13094
  setCapabilityProviderEnabled: (input) => dispatch("addons", "setCapabilityProviderEnabled", "mutation", input),
12908
- updateFrameworkPackage: (input) => dispatch("addons", "updateFrameworkPackage", "mutation", input),
12909
13095
  getVersions: (input) => dispatch("addons", "getVersions", "query", input),
12910
13096
  restartAddon: (input) => dispatch("addons", "restartAddon", "mutation", input),
12911
13097
  retryLoad: (input) => dispatch("addons", "retryLoad", "mutation", input),
@@ -21583,22 +21769,6 @@ var AddonAutoUpdateSchema = ChannelWithInheritSchema;
21583
21769
  var RestartAddonResultSchema = zod.z.unknown();
21584
21770
  var InstallPackageResultSchema = zod.z.unknown();
21585
21771
  var ReloadPackagesResultSchema = zod.z.unknown();
21586
- /**
21587
- * Result of `updateFrameworkPackage`. The cap method returns BEFORE the
21588
- * server restarts so the admin UI can react to the `restartingAt`
21589
- * timestamp (shows reconnect overlay). The transition from
21590
- * `fromVersion` to `toVersion` will be confirmed by a subsequent
21591
- * `system.restart-completed` event after the new process boots.
21592
- *
21593
- * Spec: docs/superpowers/specs/2026-05-14-framework-live-update-design.md
21594
- */
21595
- var UpdateFrameworkPackageResultSchema = zod.z.object({
21596
- packageName: zod.z.string(),
21597
- fromVersion: zod.z.string(),
21598
- toVersion: zod.z.string(),
21599
- /** Ms-epoch the server scheduled its self-restart. */
21600
- restartingAt: zod.z.number()
21601
- });
21602
21772
  var BulkUpdateItemStatusSchema = zod.z.enum([
21603
21773
  "queued",
21604
21774
  "updating",
@@ -21844,28 +22014,6 @@ var addonsCapability = {
21844
22014
  kind: "mutation",
21845
22015
  auth: "admin"
21846
22016
  }),
21847
- /**
21848
- * Live-update one of the framework packages marked
21849
- * `camstack.system: true` (`@camstack/types|kernel|core|sdk|ui-library`).
21850
- * Runs `npm install --prefix <appRoot> <name>@<version> --no-save`,
21851
- * writes a `.restart-pending` marker, emits `system.restarting`
21852
- * and schedules a graceful process exit. The supervisor (Docker /
21853
- * Electron / systemd) brings the hub back up; on first boot after
21854
- * the restart the marker fires `system.restart-completed`.
21855
- *
21856
- * `version` defaults to `'latest'`. The allow-list of valid
21857
- * `packageName` values is enforced server-side.
21858
- *
21859
- * Spec: docs/superpowers/specs/2026-05-14-framework-live-update-design.md
21860
- */
21861
- updateFrameworkPackage: require_sleep.method(zod.z.object({
21862
- packageName: zod.z.string().min(1),
21863
- version: zod.z.string().optional(),
21864
- deferRestart: zod.z.boolean().optional()
21865
- }), UpdateFrameworkPackageResultSchema, {
21866
- kind: "mutation",
21867
- auth: "admin"
21868
- }),
21869
22017
  getVersions: require_sleep.method(zod.z.object({ name: zod.z.string() }), zod.z.array(PackageVersionInfoSchema).readonly()),
21870
22018
  restartAddon: require_sleep.method(zod.z.object({ addonId: zod.z.string() }), RestartAddonResultSchema, {
21871
22019
  kind: "mutation",
@@ -25949,12 +26097,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
25949
26097
  addonId: null,
25950
26098
  access: "delete"
25951
26099
  },
25952
- "addons.updateFrameworkPackage": {
25953
- capName: "addons",
25954
- capScope: "system",
25955
- addonId: null,
25956
- access: "create"
25957
- },
25958
26100
  "addons.updatePackage": {
25959
26101
  capName: "addons",
25960
26102
  capScope: "system",
@@ -30862,34 +31004,6 @@ function getCapsByProviderKind(kind) {
30862
31004
  return out;
30863
31005
  }
30864
31006
  //#endregion
30865
- //#region src/lifecycle/framework-swap.ts
30866
- var frameworkSwapPackageSchema = zod.z.object({
30867
- name: zod.z.string(),
30868
- stagedPath: zod.z.string(),
30869
- backupPath: zod.z.string(),
30870
- toVersion: zod.z.string(),
30871
- fromVersion: zod.z.string().nullable()
30872
- });
30873
- var pendingFrameworkSwapSchema = zod.z.object({
30874
- jobId: zod.z.string(),
30875
- taskId: zod.z.string(),
30876
- packages: zod.z.array(frameworkSwapPackageSchema),
30877
- requestedAtMs: zod.z.number(),
30878
- schemaVersion: zod.z.literal(1)
30879
- });
30880
- var frameworkSwapConfirmSchema = zod.z.object({
30881
- jobId: zod.z.string(),
30882
- taskId: zod.z.string(),
30883
- backups: zod.z.array(zod.z.object({
30884
- name: zod.z.string(),
30885
- backupPath: zod.z.string(),
30886
- livePath: zod.z.string()
30887
- })),
30888
- appliedAtMs: zod.z.number(),
30889
- bootAttempts: zod.z.number(),
30890
- schemaVersion: zod.z.literal(1)
30891
- });
30892
- //#endregion
30893
31007
  //#region src/util/location-match.ts
30894
31008
  /**
30895
31009
  * Pure fuzzy matcher for adoption location import. Normalized
@@ -31514,6 +31628,7 @@ exports.DEVICE_CAP_NAMES = DEVICE_CAP_NAMES;
31514
31628
  exports.DEVICE_PROFILES = DEVICE_PROFILES;
31515
31629
  exports.DEVICE_SETTINGS_CONTRIBUTION_METHODS = require_sleep.DEVICE_SETTINGS_CONTRIBUTION_METHODS;
31516
31630
  exports.DEVICE_STATUS_METHOD = require_sleep.DEVICE_STATUS_METHOD;
31631
+ exports.DEVICE_TYPE_CONTROL_KIND = DEVICE_TYPE_CONTROL_KIND;
31517
31632
  exports.DEVICE_TYPE_INFO = DEVICE_TYPE_INFO;
31518
31633
  exports.DayNightModeSchema = DayNightModeSchema;
31519
31634
  exports.DayNightOptionsSchema = DayNightOptionsSchema;
@@ -31656,6 +31771,7 @@ exports.MAX_EXPRESSION_EVAL_STEPS = MAX_EXPRESSION_EVAL_STEPS;
31656
31771
  exports.MAX_EXPRESSION_SOURCE_LENGTH = MAX_EXPRESSION_SOURCE_LENGTH;
31657
31772
  exports.METHOD_ACCESS_MAP = METHOD_ACCESS_MAP;
31658
31773
  exports.MODEL_FORMATS = MODEL_FORMATS;
31774
+ exports.MOTION_TRIGGER_FEATURE = MOTION_TRIGGER_FEATURE;
31659
31775
  exports.ManagedModelCatalogEntrySchema = ManagedModelCatalogEntrySchema;
31660
31776
  exports.ManagedModelRefSchema = ManagedModelRefSchema;
31661
31777
  exports.ManagedRuntimeConfigSchema = ManagedRuntimeConfigSchema;
@@ -31821,6 +31937,8 @@ exports.SCOPE_PRESETS = SCOPE_PRESETS;
31821
31937
  exports.SCRUB_THUMBNAIL_PRESETS = SCRUB_THUMBNAIL_PRESETS;
31822
31938
  exports.SCRUB_THUMBNAIL_PRESET_LABELS = SCRUB_THUMBNAIL_PRESET_LABELS;
31823
31939
  exports.SCRUB_THUMBNAIL_PRESET_ORDER = SCRUB_THUMBNAIL_PRESET_ORDER;
31940
+ exports.SENSOR_FEATURES = SENSOR_FEATURES;
31941
+ exports.SENSOR_MAP = SENSOR_MAP;
31824
31942
  exports.SOURCE_INFO_METADATA_KEY = SOURCE_INFO_METADATA_KEY;
31825
31943
  exports.STREAM_PROFILE_META = STREAM_PROFILE_META;
31826
31944
  exports.STREAM_QUALITY_LABELS = STREAM_QUALITY_LABELS;
@@ -32067,13 +32185,12 @@ exports.findTimezone = findTimezone;
32067
32185
  exports.floodCapability = floodCapability;
32068
32186
  exports.formatForBackend = formatForBackend;
32069
32187
  exports.formatForRuntime = formatForRuntime;
32070
- exports.frameworkSwapConfirmSchema = frameworkSwapConfirmSchema;
32071
- exports.frameworkSwapPackageSchema = frameworkSwapPackageSchema;
32072
32188
  exports.gasCapability = gasCapability;
32073
32189
  exports.getAudioMacroClassIds = getAudioMacroClassIds;
32074
32190
  exports.getByPath = getByPath;
32075
32191
  exports.getCapsByProviderKind = getCapsByProviderKind;
32076
32192
  exports.getTaxonomyEntry = getTaxonomyEntry;
32193
+ exports.hasMotionTrigger = hasMotionTrigger;
32077
32194
  exports.hfModelUrl = hfModelUrl;
32078
32195
  exports.htmlToText = htmlToText;
32079
32196
  exports.humidifierCapability = humidifierCapability;
@@ -32089,6 +32206,7 @@ exports.isCollectionArrayMethod = isCollectionArrayMethod;
32089
32206
  exports.isDeployableToAgent = isDeployableToAgent;
32090
32207
  exports.isDeviceConfigCap = require_sleep.isDeviceConfigCap;
32091
32208
  exports.isEvent = require_sleep.isEvent;
32209
+ exports.isNode = isNode;
32092
32210
  exports.isObjectInput = isObjectInput;
32093
32211
  exports.isVoidInput = isVoidInput;
32094
32212
  exports.jobKindSchema = jobKindSchema;
@@ -32146,8 +32264,8 @@ exports.parseJsonObject = require_sleep.parseJsonObject;
32146
32264
  exports.parseJsonUnknown = require_sleep.parseJsonUnknown;
32147
32265
  exports.parseProfileBrokerId = require_sleep.parseProfileBrokerId;
32148
32266
  exports.parseStreamParamsFormPatch = parseStreamParamsFormPatch;
32149
- exports.pendingFrameworkSwapSchema = pendingFrameworkSwapSchema;
32150
32267
  exports.petFeederCapability = petFeederCapability;
32268
+ exports.pickAccessoryControl = pickAccessoryControl;
32151
32269
  exports.pickPreferredRtspEntry = pickPreferredRtspEntry;
32152
32270
  exports.pipelineAnalyticsCapability = pipelineAnalyticsCapability;
32153
32271
  exports.pipelineExecutorCapability = pipelineExecutorCapability;
@@ -32177,10 +32295,12 @@ exports.resolveAddonPlacement = resolveAddonPlacement;
32177
32295
  exports.resolveAddonRuntime = resolveAddonRuntime;
32178
32296
  exports.resolveCapMount = require_sleep.resolveCapMount;
32179
32297
  exports.resolveDetectionRuntime = resolveDetectionRuntime;
32298
+ exports.resolveDeviceControlKind = resolveDeviceControlKind;
32180
32299
  exports.resolveDeviceProfile = resolveDeviceProfile;
32181
32300
  exports.resolveFormat = resolveFormat;
32182
32301
  exports.resolveHydratedFieldValue = require_sleep.resolveHydratedFieldValue;
32183
32302
  exports.resolveModelFormat = resolveModelFormat;
32303
+ exports.resolveMutate = resolveMutate;
32184
32304
  exports.resolveRunnerId = resolveRunnerId;
32185
32305
  exports.resolveScrubThumbnailGeometry = resolveScrubThumbnailGeometry;
32186
32306
  exports.resolveVariantModelId = resolveVariantModelId;
package/dist/index.mjs CHANGED
@@ -173,6 +173,17 @@ var ModelCatalogEntrySchema = z.object({
173
173
  "imagenet",
174
174
  "none"
175
175
  ]).optional(),
176
+ /**
177
+ * The model already applies softmax IN-GRAPH — its raw output is a
178
+ * probability distribution, not logits. When set, the `softmax`
179
+ * postprocessor must NOT re-apply softmax: re-softmaxing an already-normalised
180
+ * probability vector collapses it toward uniform (top-1 score craters far
181
+ * below its true value, making every confidence gate meaningless). Absent ⇒
182
+ * the output is raw logits and the postprocessor applies softmax (the normal
183
+ * case). Set on the Google AIY Birds `bird-classifier` (softmax baked into the
184
+ * TF graph). Threaded to the Python pool via `PoolModelConfig.outputProbabilities`.
185
+ */
186
+ outputProbabilities: z.boolean().optional(),
176
187
  preprocessMode: z.enum(["letterbox", "resize"]).optional(),
177
188
  /**
178
189
  * Per-MODEL postprocessor override. Absent ⇒ the step's own
@@ -12787,6 +12798,182 @@ function enumerateItemArrayFields(itemArray) {
12787
12798
  }));
12788
12799
  }
12789
12800
  //#endregion
12801
+ //#region src/device/device-control-resolution.ts
12802
+ /**
12803
+ * Device-control RESOLUTION LOGIC — the single, presentation-free source of
12804
+ * truth for "given a device's `type` (+ its cap `features`), which control
12805
+ * should render?".
12806
+ *
12807
+ * This module is deliberately framework-free: NO react / react-native / lucide
12808
+ * imports, no JSX, no platform widgets. It encodes only the DECISION; each
12809
+ * client (admin-ui's `@camstack/ui-library` web registry, the RN viewer's
12810
+ * accessory registry) maps the returned control-KIND onto its own
12811
+ * platform-specific components. That's the one duplication we remove — the
12812
+ * presentational components stay platform-specific by necessity.
12813
+ *
12814
+ * Two decision surfaces live here, at two granularities:
12815
+ *
12816
+ * 1. `resolveDeviceControlKind(type)` — the BASE type → control-kind decision
12817
+ * used by the admin-ui device list / device-detail hero. Exhaustive over
12818
+ * every `DeviceType`; a light is a single `'light'` kind (dim-vs-plain is
12819
+ * refined inside the light component).
12820
+ *
12821
+ * 2. `pickAccessoryControl({ type, features })` — the FINER accessory-row
12822
+ * decision used by the viewer's per-camera accessory list. It refines a
12823
+ * `light` into `'brightness'` vs `'switch'` and a `sensor`/`presence` into
12824
+ * a specific sensor cap, because an accessory row renders ONE compact
12825
+ * control chosen by priority.
12826
+ *
12827
+ * The two agree on every overlapping type EXCEPT `light` (see the notes on
12828
+ * `pickAccessoryControl`): the base decision keeps a dedicated `'light'`
12829
+ * control; the accessory decision collapses a non-dimmable light onto the
12830
+ * generic `'switch'` control. That is a deliberate granularity difference, not
12831
+ * a contradiction — the base kind is what the admin-ui renders, the accessory
12832
+ * pick is what a compact camera-accessory row renders.
12833
+ */
12834
+ /**
12835
+ * Exhaustive `DeviceType` → `DeviceControlKind` map. Omitting a new enum member
12836
+ * fails the build here (the single place the type→kind decision is encoded).
12837
+ * `'dummy'` marks types with no interactive control (Camera/Hub/Generic and the
12838
+ * placeholder HA types whose inline control renders a dash).
12839
+ */
12840
+ var DEVICE_TYPE_CONTROL_KIND = {
12841
+ [DeviceType.Cover]: "cover",
12842
+ [DeviceType.Valve]: "valve",
12843
+ [DeviceType.Humidifier]: "humidifier",
12844
+ [DeviceType.WaterHeater]: "water-heater",
12845
+ [DeviceType.Camera]: "dummy",
12846
+ [DeviceType.Hub]: "dummy",
12847
+ [DeviceType.Switch]: "switch",
12848
+ [DeviceType.Siren]: "switch",
12849
+ [DeviceType.Light]: "light",
12850
+ [DeviceType.Fan]: "fan",
12851
+ [DeviceType.Sensor]: "sensor",
12852
+ [DeviceType.Thermostat]: "thermostat",
12853
+ [DeviceType.Climate]: "climate",
12854
+ [DeviceType.Button]: "button",
12855
+ [DeviceType.EventEmitter]: "dummy",
12856
+ [DeviceType.Update]: "update",
12857
+ [DeviceType.Generic]: "dummy",
12858
+ [DeviceType.Notifier]: "dummy",
12859
+ [DeviceType.Script]: "dummy",
12860
+ [DeviceType.Automation]: "dummy",
12861
+ [DeviceType.Lock]: "lock",
12862
+ [DeviceType.MediaPlayer]: "media-player",
12863
+ [DeviceType.AlarmPanel]: "alarm",
12864
+ [DeviceType.Control]: "control",
12865
+ [DeviceType.Presence]: "sensor",
12866
+ [DeviceType.Weather]: "weather",
12867
+ [DeviceType.Vacuum]: "vacuum",
12868
+ [DeviceType.LawnMower]: "lawn-mower",
12869
+ [DeviceType.Container]: "dummy",
12870
+ [DeviceType.Image]: "image",
12871
+ [DeviceType.PetFeeder]: "pet-feeder"
12872
+ };
12873
+ var DEVICE_TYPE_VALUES = new Set(Object.values(DeviceType));
12874
+ /**
12875
+ * Runtime-string-safe base resolver: a device row's `type` crosses the wire as
12876
+ * a plain string, so an unrecognised value resolves to `null` instead of
12877
+ * indexing the map with an unverified key. `DEVICE_TYPE_VALUES.has(type)`
12878
+ * narrows the string to a `DeviceType` before indexing (documented enum-string
12879
+ * boundary).
12880
+ */
12881
+ function resolveDeviceControlKind(type) {
12882
+ return DEVICE_TYPE_VALUES.has(type) ? DEVICE_TYPE_CONTROL_KIND[type] : null;
12883
+ }
12884
+ /** Kebab feature flag advertised by an accessory that auto-activates when its
12885
+ * parent camera detects motion. The cap's kebab name is `motion-trigger` (see
12886
+ * `motion-trigger.cap.ts`). It is INDEPENDENT of the row's primary control: a
12887
+ * siren/light/switch can expose BOTH a `switch` on/off AND a `motion-trigger`
12888
+ * "activate on motion" toggle. */
12889
+ var MOTION_TRIGGER_FEATURE = "motion-trigger";
12890
+ /** True when an accessory advertises the `motion-trigger` cap — drives the
12891
+ * inline "On motion" toggle rendered alongside its primary control. Pure +
12892
+ * testable. */
12893
+ function hasMotionTrigger(features) {
12894
+ return features.includes(MOTION_TRIGGER_FEATURE);
12895
+ }
12896
+ /** Kebab-case sensor cap names → the read-only sensor-value control. The
12897
+ * accessory pick scans these (in order) to choose which sensor cap to read. */
12898
+ var SENSOR_FEATURES = [
12899
+ "temperature-sensor",
12900
+ "humidity-sensor",
12901
+ "ambient-light-sensor",
12902
+ "numeric-sensor",
12903
+ "enum-sensor"
12904
+ ];
12905
+ /**
12906
+ * Pick the primary control for an accessory. The control is chosen by the
12907
+ * device's canonical `type` (the `DeviceType` enum value — the same key
12908
+ * `resolveDeviceControlKind` maps on), NOT by the `features` list (which holds
12909
+ * secondary flags). For a `light` we consult `features` to choose dim vs plain
12910
+ * on/off, and for a `sensor`/`presence` to pick which sensor value to read.
12911
+ * Pure: same input → same output. Returns `{ kind: 'none' }` for types with no
12912
+ * accessory-row control.
12913
+ */
12914
+ function pickAccessoryControl(device) {
12915
+ const set = new Set(device.features);
12916
+ switch (device.type) {
12917
+ case DeviceType.Cover: return { kind: "cover" };
12918
+ case DeviceType.Valve: return { kind: "valve" };
12919
+ case DeviceType.Lock: return { kind: "lock" };
12920
+ case DeviceType.AlarmPanel: return { kind: "alarm" };
12921
+ case DeviceType.Light: return set.has("brightness") ? { kind: "brightness" } : { kind: "switch" };
12922
+ case DeviceType.Switch:
12923
+ case DeviceType.Siren: return { kind: "switch" };
12924
+ case DeviceType.Sensor:
12925
+ case DeviceType.Presence: {
12926
+ const sensor = SENSOR_FEATURES.find((f) => set.has(f));
12927
+ return sensor ? {
12928
+ kind: "sensor",
12929
+ sensorFeature: sensor
12930
+ } : { kind: "none" };
12931
+ }
12932
+ default: return { kind: "none" };
12933
+ }
12934
+ }
12935
+ /** Kebab sensor cap → its numeric-value mapping. `enum-sensor` is handled
12936
+ * separately by callers (it reads a raw string `value`, not a numeric field),
12937
+ * so it intentionally has no entry here. */
12938
+ var SENSOR_MAP = {
12939
+ "temperature-sensor": {
12940
+ capKey: "temperatureSensor",
12941
+ field: "celsius",
12942
+ fallbackUnit: "°C"
12943
+ },
12944
+ "humidity-sensor": {
12945
+ capKey: "humiditySensor",
12946
+ field: "percent",
12947
+ fallbackUnit: "%"
12948
+ },
12949
+ "ambient-light-sensor": {
12950
+ capKey: "ambientLightSensor",
12951
+ field: "lux",
12952
+ fallbackUnit: "lx"
12953
+ },
12954
+ "numeric-sensor": {
12955
+ capKey: "numericSensor",
12956
+ field: "value"
12957
+ }
12958
+ };
12959
+ /** True when a value is a navigable node: a plain object OR a tRPC v11 client
12960
+ * proxy node (a callable `Proxy(noop)` → `typeof === 'function'`, NOT an
12961
+ * object). A `typeof === 'object'`-only check REJECTS every real client proxy,
12962
+ * so `resolveMutate` would return null and EVERY control becomes a silent
12963
+ * no-op. Framework-free: operates on the SDK proxy shape only. */
12964
+ function isNode(value) {
12965
+ return value !== null && (typeof value === "object" || typeof value === "function");
12966
+ }
12967
+ /** Resolve `router.<method>.mutate` to a callable, or `null`. Walks the tRPC
12968
+ * client proxy defensively (each hop guarded by `isNode`). */
12969
+ function resolveMutate(router, method) {
12970
+ if (!isNode(router)) return null;
12971
+ const proc = router[method];
12972
+ if (!isNode(proc)) return null;
12973
+ const mutate = proc.mutate;
12974
+ return typeof mutate === "function" ? mutate : null;
12975
+ }
12976
+ //#endregion
12790
12977
  //#region src/utils/zone-rule-eval.ts
12791
12978
  /**
12792
12979
  * Evaluate `rules` against `items`. Returns the items partitioned
@@ -12904,7 +13091,6 @@ function createSystemProxy(api) {
12904
13091
  listFrameworkPackages: (input) => dispatch("addons", "listFrameworkPackages", "query", input),
12905
13092
  listCapabilityProviders: (input) => dispatch("addons", "listCapabilityProviders", "query", input),
12906
13093
  setCapabilityProviderEnabled: (input) => dispatch("addons", "setCapabilityProviderEnabled", "mutation", input),
12907
- updateFrameworkPackage: (input) => dispatch("addons", "updateFrameworkPackage", "mutation", input),
12908
13094
  getVersions: (input) => dispatch("addons", "getVersions", "query", input),
12909
13095
  restartAddon: (input) => dispatch("addons", "restartAddon", "mutation", input),
12910
13096
  retryLoad: (input) => dispatch("addons", "retryLoad", "mutation", input),
@@ -21582,22 +21768,6 @@ var AddonAutoUpdateSchema = ChannelWithInheritSchema;
21582
21768
  var RestartAddonResultSchema = z.unknown();
21583
21769
  var InstallPackageResultSchema = z.unknown();
21584
21770
  var ReloadPackagesResultSchema = z.unknown();
21585
- /**
21586
- * Result of `updateFrameworkPackage`. The cap method returns BEFORE the
21587
- * server restarts so the admin UI can react to the `restartingAt`
21588
- * timestamp (shows reconnect overlay). The transition from
21589
- * `fromVersion` to `toVersion` will be confirmed by a subsequent
21590
- * `system.restart-completed` event after the new process boots.
21591
- *
21592
- * Spec: docs/superpowers/specs/2026-05-14-framework-live-update-design.md
21593
- */
21594
- var UpdateFrameworkPackageResultSchema = z.object({
21595
- packageName: z.string(),
21596
- fromVersion: z.string(),
21597
- toVersion: z.string(),
21598
- /** Ms-epoch the server scheduled its self-restart. */
21599
- restartingAt: z.number()
21600
- });
21601
21771
  var BulkUpdateItemStatusSchema = z.enum([
21602
21772
  "queued",
21603
21773
  "updating",
@@ -21843,28 +22013,6 @@ var addonsCapability = {
21843
22013
  kind: "mutation",
21844
22014
  auth: "admin"
21845
22015
  }),
21846
- /**
21847
- * Live-update one of the framework packages marked
21848
- * `camstack.system: true` (`@camstack/types|kernel|core|sdk|ui-library`).
21849
- * Runs `npm install --prefix <appRoot> <name>@<version> --no-save`,
21850
- * writes a `.restart-pending` marker, emits `system.restarting`
21851
- * and schedules a graceful process exit. The supervisor (Docker /
21852
- * Electron / systemd) brings the hub back up; on first boot after
21853
- * the restart the marker fires `system.restart-completed`.
21854
- *
21855
- * `version` defaults to `'latest'`. The allow-list of valid
21856
- * `packageName` values is enforced server-side.
21857
- *
21858
- * Spec: docs/superpowers/specs/2026-05-14-framework-live-update-design.md
21859
- */
21860
- updateFrameworkPackage: method(z.object({
21861
- packageName: z.string().min(1),
21862
- version: z.string().optional(),
21863
- deferRestart: z.boolean().optional()
21864
- }), UpdateFrameworkPackageResultSchema, {
21865
- kind: "mutation",
21866
- auth: "admin"
21867
- }),
21868
22016
  getVersions: method(z.object({ name: z.string() }), z.array(PackageVersionInfoSchema).readonly()),
21869
22017
  restartAddon: method(z.object({ addonId: z.string() }), RestartAddonResultSchema, {
21870
22018
  kind: "mutation",
@@ -25948,12 +26096,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
25948
26096
  addonId: null,
25949
26097
  access: "delete"
25950
26098
  },
25951
- "addons.updateFrameworkPackage": {
25952
- capName: "addons",
25953
- capScope: "system",
25954
- addonId: null,
25955
- access: "create"
25956
- },
25957
26099
  "addons.updatePackage": {
25958
26100
  capName: "addons",
25959
26101
  capScope: "system",
@@ -30861,34 +31003,6 @@ function getCapsByProviderKind(kind) {
30861
31003
  return out;
30862
31004
  }
30863
31005
  //#endregion
30864
- //#region src/lifecycle/framework-swap.ts
30865
- var frameworkSwapPackageSchema = z.object({
30866
- name: z.string(),
30867
- stagedPath: z.string(),
30868
- backupPath: z.string(),
30869
- toVersion: z.string(),
30870
- fromVersion: z.string().nullable()
30871
- });
30872
- var pendingFrameworkSwapSchema = z.object({
30873
- jobId: z.string(),
30874
- taskId: z.string(),
30875
- packages: z.array(frameworkSwapPackageSchema),
30876
- requestedAtMs: z.number(),
30877
- schemaVersion: z.literal(1)
30878
- });
30879
- var frameworkSwapConfirmSchema = z.object({
30880
- jobId: z.string(),
30881
- taskId: z.string(),
30882
- backups: z.array(z.object({
30883
- name: z.string(),
30884
- backupPath: z.string(),
30885
- livePath: z.string()
30886
- })),
30887
- appliedAtMs: z.number(),
30888
- bootAttempts: z.number(),
30889
- schemaVersion: z.literal(1)
30890
- });
30891
- //#endregion
30892
31006
  //#region src/util/location-match.ts
30893
31007
  /**
30894
31008
  * Pure fuzzy matcher for adoption location import. Normalized
@@ -31342,4 +31456,4 @@ function scoreRuntimes(hw) {
31342
31456
  };
31343
31457
  }
31344
31458
  //#endregion
31345
- export { ACCESSORY_LABEL, ALL_CAPABILITY_DEFINITIONS, APPLE_SA_TO_MACRO, AUDIO_BACKEND_CHOICES, AUDIO_MACRO_LABELS, AccessoriesStatusSchema, AccessoryKind, AddBrokerInputSchema, AddonAutoUpdateSchema, AddonListItemSchema, AddonPageDeclarationSchema, AddonPageInfoSchema, AdoptInputSchema as AdoptionAdoptInputSchema, AdoptResultSchema as AdoptionAdoptResultSchema, AdoptionFilterSchema, GetCandidateInputSchema as AdoptionGetCandidateInputSchema, ListCandidatesInputSchema as AdoptionListCandidatesInputSchema, ListCandidatesOutputSchema as AdoptionListCandidatesOutputSchema, ReleaseInputSchema as AdoptionReleaseInputSchema, AdoptionStatusSchema, AgentLoadSummarySchema, AirQualitySensorStatusSchema, AlarmArmModeSchema, AlarmPanelStatusSchema, AlarmStateSchema, AlertSchema, AlertSeveritySchema, AlertSourceSchema, AlertStatusSchema, AmbientLightSensorStatusSchema, ApiKeyRecordSchema, ApiKeySummarySchema, ArchiveEntrySchema, ArchiveManifestSchema, AttachmentMediaTypeSchema, AttachmentSchema, AudioAnalysisResultSchema, AudioAnalysisSettingsSchema, AudioChunkInputSchema, AudioClassSummarySchema, AudioClassificationLabelSchema, AudioClassificationResultSchema, AudioCodecInfoSchema, AudioDecodeSessionConfigSchema, AudioEncodeSchema, AudioEncodeSessionConfigSchema, AudioEncodedChunkSchema, AudioEventSchema, AudioLevelSchema, AudioMetricsHistoryPointSchema, AudioMetricsHistorySchema, AudioMetricsSnapshotSchema, AudioPcmChunkSchema, AuthResultSchema, AutoUpdateSettingsSchema, AutomationControlStatusSchema, AvailableIntegrationTypeSchema, BACKEND_TO_FORMAT, BATTERY_DEVICE_PROFILE, BacklightModeSchema, BackupDestinationInfoSchema, BackupEntrySchema, BaseAddon, BaseDevice, BaseDeviceProvider, BatteryStatusSchema, BinaryStatusSchema, BoundingBoxSchema, BrightnessStatusSchema, AddInputSchema as BrokerAddInputSchema, BrokerAudioClientSchema, BrokerClientsSchema, BrokerConnectionDetailsSchema, BrokerConsumerAttributionSchema, BrokerConsumerKindSchema, BrokerDecodedClientSchema, BrokerEncodedClientSchema, GetStateInputSchema as BrokerGetStateInputSchema, BrokerInfoSchema, BrokerProviderInfoSchema, PublishInputSchema as BrokerPublishInputSchema, RegistryStatusSchema as BrokerRegistryStatusSchema, BrokerRtspClientSchema, BrokerStatsSchema, BrokerStatusEnum, BrokerStatusSchema, SubscribeInputSchema as BrokerSubscribeInputSchema, SubscribeResultSchema as BrokerSubscribeResultSchema, TestConnectionResultSchema as BrokerTestConnectionResultSchema, UnsubscribeInputSchema as BrokerUnsubscribeInputSchema, CAM_PROFILE_ORDER, CAPABILITY_NAMES, CAPABILITY_ROUTER_KEYS, CAP_NAMES_WITH_STATUS, CAP_NODE_PIN_CONTEXT_KEY, CAP_PROVIDER_KIND_MAP, COCO_80_LABELS, COCO_TO_MACRO, CamProfileSchema, CamStreamDescriptorSchema, CamStreamKindSchema, CamStreamResolutionSchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraCredentialsSchema, CameraCredentialsStatusSchema, CameraDecoderShmSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionStatusSchema, CameraMetricsSchema, CameraMetricsWithDeviceIdSchema, CameraMotionStatusSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusSchema, CameraStreamSchema, CandidateQueryFilterSchema, CapScopeSchema, CapabilityBindingsSchema, CarbonMonoxideStatusSchema, ChargingStatus, ClientNetworkStatsSchema, ClimateControlStatusSchema, ClipPlaybackSchema, ClipSchema, ClusterAddonNodeDeploymentSchema, ClusterAddonStatusEntrySchema, CollectionColumnSchema, CollectionIndexSchema, ColorStatusSchema, ConfigEntrySchema, ConfigSectionWithValuesSchema, ConfigTabDeclarationSchema, ConnectivityStatusSchema, ConsumableItemSchema, ConsumablesStatusSchema, ContactStatusSchema, ControlKindSchema, ControlStatusSchema, ConvertArtifactSchema, ConvertResultSchema, ConvertTargetSchema, CoverStateSchema, CoverStatusSchema, CreateApiKeyInputSchema, CreateApiKeyResultSchema, CreateIntegrationInputSchema, CreateScopedTokenInputSchema, CreateScopedTokenResultSchema, CreateUserInputSchema, CustomActionInputSchema, CustomModelDescriptorSchema, DATAPLANE_SECRET_HEADER, DEFAULT_ADDON_PLACEMENT, DEFAULT_AUDIO_ANALYZER_CONFIG, DEFAULT_DECODER_HWACCEL_CONFIG, DEFAULT_EVENT_COLOR, DEFAULT_FEATURES, DEFAULT_RETENTION, DEFAULT_SCRUB_THUMBNAIL_PRESET, DEVICE_CAP_NAMES, DEVICE_PROFILES, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, DEVICE_TYPE_INFO, DayNightModeSchema, DayNightOptionsSchema, DayNightSettingsPatchSchema, DayNightStatusSchema, DecodedAudioChunkSchema, DecodedFrameSchema, DecoderSessionConfigSchema, DecoderStatsSchema, DeleteIntegrationResultSchema, DetectionSourceSchema, DeviceCodeSeveritySchema, DeviceConfig, DeviceDiscoveryStatusSchema, ExposeInputSchema as DeviceExportExposeInputSchema, DeviceExportStatusSchema, UnexposeInputSchema as DeviceExportUnexposeInputSchema, DeviceFeature, DeviceInfoSchema, DeviceLinkModeSchema, DeviceNetworkStatsSchema, DeviceRole, DeviceRuntimeState, DeviceStatusSchema, DeviceType, DiscoveredChildDeviceSchema, DiscoveredChildStatusSchema, DiscoveredDeviceSchema, DiscoveredTargetSchema, DisposerChain, DoorbellPressEventSchema, DoorbellStatusSchema, EVENTFUL_CAP_NAMES, EVENT_KIND_BY_CAP, EVENT_PAD_MS, EVENT_TAXONOMY, EXPRESSION_BUILTINS, EXPRESSION_BUILTIN_NAMES, EXPRESSION_COMPILE_CACHE_CAPACITY, EXPRESSION_IDENTIFIER_RE, EXPRESSION_INJECTED_NOW, ElementConfigStore, EmbeddingInfoSchema, EmbeddingResultSchema, EncodeProfileSchema, EncodedPacketSchema, EnrichedWidgetMetadataSchema, EnumSensorDateTimeFormatSchema, EnumSensorStatusSchema, EventCategory, EventEmitterStatusSchema, EventFireSchema, EventItemSchema, EventKindCategorySchema, EventKindDescriptorSchema, EventKindIconSchema, EventKindSchema, EventSourceType, ExportDownloadSchema, ExportOptionsSchema, ExportRecordSchema, ExportSetupFieldSchema, ExportSetupSchema, ExportSpeedSchema, ExportStateSchema, ExportTimelapseSchema, ExposedDeviceSchema, ExposureModeSchema, ExpressionEvalError, ExpressionParseError, FanControlStatusSchema, FanDirectionSchema, FeatureManifestSchema, FeatureProbeStatusSchema, FloodStatusSchema, FrameHandleFormatSchema, FrameHandleSchema, FrameInputSchema, GasStatusSchema, GetStreamWithCodecInputSchema, GlobalMetricsSchema, HF_BASE_URL, HF_REPO, HWACCEL_OPTIONS, HealthStatusSchema, HistoryPointSchema, HistoryResolutionEnum, HumidifierStatusSchema, HumiditySensorStatusSchema, HvacModeSchema, ImageRotateSchema, ImageSettingsOptionsSchema, ImageSettingsPatchSchema, ImageSettingsStatusSchema, ImageStatusSchema, IngestOwnerSchema, InstalledPackageSchema, IntegrationLiteSchema, IntegrationWithStateSchema, IntercomAbilitySchema, IntercomStatusSchema, KNOWN_CAP_NAMES, KeyEventSchema, LabelDefinitionSchema, LawnMowerActivitySchema, LawnMowerControlStatusSchema, LinkedDeviceSchema, LlmDefaultSchema, LlmDefaultSelectorSchema, LlmErrorCodeSchema, LlmGenerateBaseInputSchema, LlmGenerateErrSchema, LlmGenerateOkSchema, LlmGenerateResultSchema, LlmImageSchema, LlmNodeModelSchema, LlmProfileKindDescriptorSchema, LlmProfileKindSchema, LlmProfileSchema, LlmRuntimeCompleteInputSchema, LlmRuntimeDiskUsageSchema, LlmRuntimeNodeSchema, LlmRuntimeStatusSchema, LlmUsageRollupSchema, LlmUsageSchema, LocateSegmentResultSchema, LocationStatSchema, LockControlStatusSchema, LockStateSchema, LogEntrySchema, LogLevelSchema, LogStreamEntrySchema, LoginMethodContributionSchema, LoginStageEnum, MACRO_LABELS, MAX_EXPRESSION_AST_NODES, MAX_EXPRESSION_BINDINGS, MAX_EXPRESSION_CALL_ARGS, MAX_EXPRESSION_EVAL_STEPS, MAX_EXPRESSION_SOURCE_LENGTH, METHOD_ACCESS_MAP, MODEL_FORMATS, ManagedModelCatalogEntrySchema, ManagedModelRefSchema, ManagedRuntimeConfigSchema, MaskGridDimsSchema, MaskGridShapeSchema, MaskLineShapeSchema, MaskPointSchema, MaskPolygonShapeSchema, MaskPolygonVerticesSchema, MaskRectShapeSchema, MaskShapeKindSchema, MaskShapeSchema, MediaFileSchema, MediaPlayerRepeatSchema, MediaPlayerStateSchema, MediaPlayerStatusSchema, MeshPeerSchema, MeshStatusSchema, MethodAccessSchema, ModelCatalogEntrySchema, ModelConvertInputSchema, ModelConvertMetadataSchema, ModelDistributeInputSchema, ModelDistributeResultSchema, ModelExtraFileSchema, ModelFormatEntrySchema, ModelFormatsSchema, ModelSubstitutionSchema, ModelVariantGroupSchema, MotionAnalysisResultSchema, MotionEventSchema, MotionOnMotionChangedDataSchema, MotionRegionSchema, MotionSourceEnum, MotionSourcesSchema, MotionStatusSchema, MotionTriggerRuntimeStateSchema, MotionTriggerStatusSchema, MotionZoneOptionsSchema, MotionZonePatchSchema, MotionZoneRegionSchema, MotionZoneStatusSchema, StatusSchema as MqttBrokerStatusSchema, NativeDetectionSchema, NativeObjectClassEnum, NativeObjectDetectionRuntimeStateSchema, NativeObjectDetectionStatusSchema, NetworkAccessStatusSchema, NetworkAddressSchema, NetworkEndpointSchema, NotificationActionSchema, NotificationFormatSchema, NotificationHistoryEntrySchema, NotificationRuleSchema, NotificationSchema, NotifierStatusSchema, NumericSensorStatusSchema, OPS_LOG_DEFAULT_LIMIT, OPS_LOG_RING_DEFAULT_MAX, OauthIntegrationDescriptorSchema, ObjectEventSchema, OpsLogDomainSchema, OpsLogEntrySchema, OpsLogOpSchema, OpsLogQueryInputSchema, OpsLogReasonSchema, OrchestratorMetricsSchema, OsdOverlayKindEnum, OsdOverlayPatchSchema, OsdOverlaySchema, OsdPositionEnum, OsdStatusSchema, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, PIPELINE_FLOW_CAPABILITY_NAMES, PIPELINE_OWNER_CAPABILITY_NAMES, PROVIDER_KIND_CAP_NAMES, PYTHON_SCRIPT, PackageUpdateSchema, PackageVersionInfoSchema, PasskeyLoginMethodSchema, PasskeySummarySchema, PcmSampleFormatSchema, PerScopeBreakdownSchema, PetFeederStatusSchema, PickStreamPreferencesSchema, PickStreamRequirementsSchema, PickedCamStreamSchema, PipelineAssignmentSchema, PipelineDefaultStepSchema, PipelineEngineChoiceSchema, PipelineRunResultBridge, PipelineStepInputSchema, PipelineValidationIssueSchema, PipelineValidationResultSchema, PlaceholderReasonSchema, PolygonPointSchema, PowerMeterStatusSchema, PresenceStatusSchema, PressureSensorStatusSchema, PrivacyMaskOptionsSchema, PrivacyMaskPatchSchema, PrivacyMaskRegionSchema, PrivacyMaskShapeSchema, PrivacyMaskStatusSchema, ProfileRtspEntrySchema, ProfileSlotSchema, ProfileSlotStatusSchema, ProviderStatusSchema, PtzAutotrackRuntimeStateSchema, PtzAutotrackSettingsSchema, PtzAutotrackStatusSchema, PtzAutotrackTargetOptionSchema, PtzMoveCommandSchema, PtzPositionSchema, PtzPresetSchema, PtzStatusSchema, QueryFilterSchema, REACHABILITY_FAILURES_TO_OFFLINE, REACHABILITY_POLL_INTERVAL_MS, REACHABILITY_PROBE_TIMEOUT_MS, RECOGNITION_TYPES, RESERVED_BINDING_NAMES, RUNTIME_DEFAULTS, RUNTIME_TO_FORMAT, RawStateResultSchema, ReadSegmentBytesResultSchema, ReadinessRegistry, ReadinessTimeoutError, RecentTracksPageSchema, RecentTracksQueryInput, RecordingAvailabilitySchema, RecordingBandModeSchema, RecordingBandSchema, RecordingBandTriggersSchema, RecordingConfigSchema, RecordingDaysSchema, RecordingDeviceUsageSchema, RecordingLocationUsageSchema, RecordingManifestSchema, RecordingModeSchema, RecordingRangeSchema, RecordingRetentionSchema, RecordingRuleSchema, RecordingScheduleSchema, RecordingStatusSchema, RecordingStorageModeSchema, RecordingStorageUsageSchema, RecordingTriggersSchema, RecordingWeekdaySchema, RedirectLoginMethodSchema, RenderedAsSchema, ReportMotionInputSchema, RingBuffer, RtpSourceSchema, RtspRestreamEntrySchema, RunnerCameraConfigSchema, RunnerCameraDeviceUIFields, RunnerFrameSourceSchema, RunnerLocalLoadSchema, RunnerLocalMetricsSchema, SCOPE_PRESETS, SCRUB_THUMBNAIL_PRESETS, SCRUB_THUMBNAIL_PRESET_LABELS, SCRUB_THUMBNAIL_PRESET_ORDER, SOURCE_INFO_METADATA_KEY, STREAM_PROFILE_META, STREAM_QUALITY_LABELS, SUB_DETECTION_TYPES, SYSTEM_CAP_NAMES, SceneCheckSchema, SceneConditionSchema, SceneMonitorSchema, SceneMonitorStateSchema, SceneMonitorStatusSchema, SceneReferenceSchema, ScopedTokenSchema, ScopedTokenSummarySchema, ScoredObjectEventSchema, ScriptRunnerStatusSchema, ScrubThumbnailPresetSchema, SearchResultSchema, SendEmailInputSchema, SendEmailResultSchema, SendResultSchema, SensorEventSchema, ServerBootModeSchema, ServerPackageStatusSchema, ServerRollbackInfoSchema, ServerUpdateActionResultSchema, ServerUpdateCheckResultSchema, ServerUpdateStateSchema, SettingsPatchSchema, SettingsRecordSchema, SettingsSchemaWithValuesSchema, SettingsUpdateResultSchema, ShmRingStatsSchema, SmokeStatusSchema, SmtpStatusSchema, SnapshotImageSchema, SourceInfoSchema, SpatialDetectionSchema, SsoBridgeClaimsSchema, StartEmbeddedInputSchema, StationaryObjectSchema, AbortUploadInputSchema as StorageAbortUploadInputSchema, BeginDownloadInputSchema as StorageBeginDownloadInputSchema, BeginDownloadResultSchema as StorageBeginDownloadResultSchema, BeginUploadInputSchema as StorageBeginUploadInputSchema, BeginUploadResultSchema as StorageBeginUploadResultSchema, EndDownloadInputSchema as StorageEndDownloadInputSchema, FinalizeUploadInputSchema as StorageFinalizeUploadInputSchema, StorageLocationDeclarationSchema, StorageLocationRefSchema, StorageLocationSchema, StorageLocationTypeSchema, ProviderInfoSchema as StorageProviderInfoSchema, ReadChunkInputSchema as StorageReadChunkInputSchema, TestLocationResultSchema as StorageTestLocationResultSchema, WriteChunkInputSchema as StorageWriteChunkInputSchema, StreamCodecSchema, StreamFormatSchema, StreamNetworkStatsSchema, StreamParamsOptionsSchema, StreamParamsStatusSchema, StreamProfileConfigSchema, StreamProfileOptionsSchema, StreamProfilePatchSchema, StreamProfileSchema, StreamSourceEntrySchema, StreamSourceSchema, SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, SubscribeFramesInputSchema, SubscribeFramesResultSchema, SwitchStatusSchema, SystemMetricsSchema, SystemMirror, TAXONOMY_COLORS, TIMEZONES, TamperStatusSchema, TankStatusSchema, TargetKindCapsSchema, TargetKindLevelSchema, TargetKindSchema, TargetSchema, TemperatureSensorStatusSchema, TestConnectionResultSchema$1 as TestConnectionResultSchema, TestResultSchema, ToastSchema, TokenScopeSchema, TopologyNodeSchema, TopologyProcessSchema, TopologyServiceSchema, TrackCascadeCountsSchema, TrackEnvelopeSchema, TrackProjectionSchema, TrackSchema, TrackStateSchema, TrackZoneFilterSchema, TrackedDetectionSchema, TurnServerSchema, UNIT_TABLE, BrokerInfoSchema$1 as UnifiedBrokerInfoSchema, UnitConversionError, UpdateIntegrationInputSchema, UpdateStatusSchema, UpdateUserInputSchema, UserRecordSchema, UserSummarySchema, VacuumControlStatusSchema, VacuumStateSchema, ValveStateSchema, ValveStatusSchema, VibrationStatusSchema, VideoEncodeSchema, WELL_KNOWN_TABS, WELL_KNOWN_TAB_MAP, WaterHeaterStatusSchema, WeatherStatusSchema, WebrtcStreamChoiceSchema, WebrtcStreamTargetSchema, WhiteBalanceModeSchema, WidgetHostEnum, WidgetLoginMethodSchema, WidgetMetadataSchema, WidgetRemoteSchema, WidgetSizeEnum, YAMNET_TO_MACRO, ZoneKindEnum, ZoneRuleModeEnum, ZoneRuleSchema, ZoneRuleStageEnum, ZoneRulesArraySchema, ZoneSchema, ZoneScopeBreakdownSchema, accessoriesCapability, accessoryStableId, addonPagesCapability, addonPagesSourceCapability, addonRoutesCapability, addonSettingsCapability, addonWidgetsCapability, addonWidgetsSourceCapability, addonsCapability, adminUiCapability, advancedNotifierCapability, airQualitySensorCapability, alarmPanelCapability, alertsCapability, ambientLightSensorCapability, applyTransform, asBoolean, asJsonArray, asJsonObject, asNumber, asString, audioAnalysisCapability, audioAnalyzerCapability, audioCodecCapability, audioMetricsCapability, authProviderCapability, autoAssignProfiles, automationControlCapability, backupCapability, batteryCapability, bestLocationMatch, binaryCapability, bindAddonActions, brightnessCapability, brokerCapability, buildAddonRouteProvider, buildEventKindDescriptor, buildModelVariantGroups, buildStreamParamsConfigSchema, buttonCapability, cameraCredentialsCapability, cameraPipelineConfigCapability, cameraStreamsCapability, canConvertUnit, carbonMonoxideCapability, cellsToRects, classifyStream, classifyStreams, climateControlCapability, collectHydratedFieldEntries, collectHydratedFieldValues, colorCapability, colorForKind, compileExpression, compileExpressionSafe, connectivityCapability, consumablesCapability, contactCapability, controlCapability, convertUnit, cosineSimilarity, coverCapability, createDeviceProxy, createDurableState, createEvent, createExpressionScope, createLazyTrpcSource, createMirrorSource, createRuntimeStateBridge, createSliceHandle, createSystemProxy, customAction, customModelRegistryCapability, dayNightCapability, decoderCapability, defaultDeviceFor, defineCustomActions, describeModelVariant, detectionPipelineCapability, deviceAdoptionCapability, deviceCustomAction, deviceDiscoveryCapability, deviceExportCapability, deviceManagerCapability, deviceMatchesProfile, deviceOpsCapability, deviceProviderCapability, deviceStateCapability, deviceStatusCapability, doorbellCapability, embeddingEncoderCapability, emitDownForOwnedCaps, emitReadiness, encodeProfileFromStreamShape, enumSensorCapability, enumerateItemArrayFields, enumerateSchemaFields, errMsg, evaluateAst, evaluateLinkExpression, evaluateZoneRules, event, eventEmitterCapability, eventsCapability, expandCapMethods, extractNestedAddonId, extractSourceInfoFromMetadata, faceGalleryCapability, fanControlCapability, featureProbeCapability, filesystemBrowseCapability, findTimezone, floodCapability, formatForBackend, formatForRuntime, frameworkSwapConfirmSchema, frameworkSwapPackageSchema, gasCapability, getAudioMacroClassIds, getByPath, getCapsByProviderKind, getTaxonomyEntry, hfModelUrl, htmlToText, humidifierCapability, humiditySensorCapability, hydrateSchema, imageCapability, imageSettingsCapability, integrationsCapability, intercomCapability, isAgentOnlyPlacement, isArrayOutputSchema, isCollectionArrayMethod, isDeployableToAgent, isDeviceConfigCap, isEvent, isObjectInput, isVoidInput, jobKindSchema, kebabToCamel, lawnMowerControlCapability, lifecycleJobSchema, lifecycleJobScopeSchema, lifecycleJobStateSchema, lifecycleTaskSchema, llmCapability, llmRuntimeCapability, localNetworkCapability, locationSimilarity, lockControlCapability, logDestinationCapability, loginMethodCapability, looseSchema, makeProfileBrokerId, makeSourceBrokerId, mapAudioLabelToMacro, markdownToHtmlLite, markdownToText, maskUrlCredentials, mediaPlayerCapability, mergeSourceInfo, meshNetworkCapability, method, metricsProviderCapability, migrateConfigToBands, modelConvertCapability, modelDistributorCapability, modelFormatForRuntime, motionCapability, motionDetectionCapability, motionTriggerCapability, motionZonesCapability, mqttBrokerCapability, nativeObjectDetectionCapability, networkAccessCapability, networkQualityCapability, nodePin, nodesCapability, normalizeAddonInitResult, normalizeUnit, notificationOutputCapability, notifierCapability, numericSensorCapability, oauthIntegrationCapability, objectInputDeclaresAddonId, osdCapability, parseCameraStreamConfig, parseExpression, parseJsonArray, parseJsonObject, parseJsonUnknown, parseProfileBrokerId, parseStreamParamsFormPatch, pendingFrameworkSwapSchema, petFeederCapability, pickPreferredRtspEntry, pipelineAnalyticsCapability, pipelineExecutorCapability, pipelineOrchestratorCapability, pipelineRunnerCapability, plateGalleryCapability, platformProbeCapability, powerMeterCapability, prepareNotification, presenceCapability, pressureSensorCapability, privacyMaskCapability, procedureAuthKey, ptzAutotrackCapability, ptzCapability, pythonScriptForBackend, readNodePin, readinessKey, rebootCapability, recordingCapability, recordingExportCapability, rectsToCells, requiresPython, resolveAddonExecution, resolveAddonGroup, resolveAddonPlacement, resolveAddonRuntime, resolveCapMount, resolveDetectionRuntime, resolveDeviceProfile, resolveFormat, resolveHydratedFieldValue, resolveModelFormat, resolveRunnerId, resolveScrubThumbnailGeometry, resolveVariantModelId, runInferenceStep, runtimeDevices, sceneMonitorCapability, scopeKey, scoreRuntimes, scriptRunnerCapability, selectAssignedProfileSlots, serverManagementCapability, setByPath, settingsStoreCapability, sleep, sleepCancellable, smokeCapability, smtpProviderCapability, snapshotCapability, ssoBridgeCapability, startReachabilityPoll, storageCapability, storageEvictableCapability, storageProviderCapability, streamBrokerCapability, streamCatalogCapability, streamParamsCapability, streamPixels, streamQualityLabel, subKindsOf, supportedRuntimes, switchCapability, synthesizeSourceInfo, systemCapability, tamperCapability, taskLogEntrySchema, taskPhaseSchema, taskTargetSchema, temperatureSensorCapability, textToHtml, toDeviceSummary, toExpressionValue, toStreamSourceEntry, toastCapability, tokenize, transcodeBody, tryConvertUnit, turnProviderCapability, unitDimension, unitsForDimension, updateCapability, userManagementCapability, userPasskeysCapability, vacuumControlCapability, validateExpressionSource, valveCapability, vibrationCapability, videoclipsCapability, viewerUiCapability, waterHeaterCapability, weatherCapability, webrtcClientHintsSchema, webrtcSessionCapability, wiringAddonHealthSchema, wiringHealthSnapshotSchema, wiringNodeHealthSchema, wiringProbeKindSchema, wiringProbeResultSchema, zodEntriesToConfigUI, zoneAnalyticsCapability, zoneRulesCapability, zonesCapability };
31459
+ export { ACCESSORY_LABEL, ALL_CAPABILITY_DEFINITIONS, APPLE_SA_TO_MACRO, AUDIO_BACKEND_CHOICES, AUDIO_MACRO_LABELS, AccessoriesStatusSchema, AccessoryKind, AddBrokerInputSchema, AddonAutoUpdateSchema, AddonListItemSchema, AddonPageDeclarationSchema, AddonPageInfoSchema, AdoptInputSchema as AdoptionAdoptInputSchema, AdoptResultSchema as AdoptionAdoptResultSchema, AdoptionFilterSchema, GetCandidateInputSchema as AdoptionGetCandidateInputSchema, ListCandidatesInputSchema as AdoptionListCandidatesInputSchema, ListCandidatesOutputSchema as AdoptionListCandidatesOutputSchema, ReleaseInputSchema as AdoptionReleaseInputSchema, AdoptionStatusSchema, AgentLoadSummarySchema, AirQualitySensorStatusSchema, AlarmArmModeSchema, AlarmPanelStatusSchema, AlarmStateSchema, AlertSchema, AlertSeveritySchema, AlertSourceSchema, AlertStatusSchema, AmbientLightSensorStatusSchema, ApiKeyRecordSchema, ApiKeySummarySchema, ArchiveEntrySchema, ArchiveManifestSchema, AttachmentMediaTypeSchema, AttachmentSchema, AudioAnalysisResultSchema, AudioAnalysisSettingsSchema, AudioChunkInputSchema, AudioClassSummarySchema, AudioClassificationLabelSchema, AudioClassificationResultSchema, AudioCodecInfoSchema, AudioDecodeSessionConfigSchema, AudioEncodeSchema, AudioEncodeSessionConfigSchema, AudioEncodedChunkSchema, AudioEventSchema, AudioLevelSchema, AudioMetricsHistoryPointSchema, AudioMetricsHistorySchema, AudioMetricsSnapshotSchema, AudioPcmChunkSchema, AuthResultSchema, AutoUpdateSettingsSchema, AutomationControlStatusSchema, AvailableIntegrationTypeSchema, BACKEND_TO_FORMAT, BATTERY_DEVICE_PROFILE, BacklightModeSchema, BackupDestinationInfoSchema, BackupEntrySchema, BaseAddon, BaseDevice, BaseDeviceProvider, BatteryStatusSchema, BinaryStatusSchema, BoundingBoxSchema, BrightnessStatusSchema, AddInputSchema as BrokerAddInputSchema, BrokerAudioClientSchema, BrokerClientsSchema, BrokerConnectionDetailsSchema, BrokerConsumerAttributionSchema, BrokerConsumerKindSchema, BrokerDecodedClientSchema, BrokerEncodedClientSchema, GetStateInputSchema as BrokerGetStateInputSchema, BrokerInfoSchema, BrokerProviderInfoSchema, PublishInputSchema as BrokerPublishInputSchema, RegistryStatusSchema as BrokerRegistryStatusSchema, BrokerRtspClientSchema, BrokerStatsSchema, BrokerStatusEnum, BrokerStatusSchema, SubscribeInputSchema as BrokerSubscribeInputSchema, SubscribeResultSchema as BrokerSubscribeResultSchema, TestConnectionResultSchema as BrokerTestConnectionResultSchema, UnsubscribeInputSchema as BrokerUnsubscribeInputSchema, CAM_PROFILE_ORDER, CAPABILITY_NAMES, CAPABILITY_ROUTER_KEYS, CAP_NAMES_WITH_STATUS, CAP_NODE_PIN_CONTEXT_KEY, CAP_PROVIDER_KIND_MAP, COCO_80_LABELS, COCO_TO_MACRO, CamProfileSchema, CamStreamDescriptorSchema, CamStreamKindSchema, CamStreamResolutionSchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraCredentialsSchema, CameraCredentialsStatusSchema, CameraDecoderShmSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionStatusSchema, CameraMetricsSchema, CameraMetricsWithDeviceIdSchema, CameraMotionStatusSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusSchema, CameraStreamSchema, CandidateQueryFilterSchema, CapScopeSchema, CapabilityBindingsSchema, CarbonMonoxideStatusSchema, ChargingStatus, ClientNetworkStatsSchema, ClimateControlStatusSchema, ClipPlaybackSchema, ClipSchema, ClusterAddonNodeDeploymentSchema, ClusterAddonStatusEntrySchema, CollectionColumnSchema, CollectionIndexSchema, ColorStatusSchema, ConfigEntrySchema, ConfigSectionWithValuesSchema, ConfigTabDeclarationSchema, ConnectivityStatusSchema, ConsumableItemSchema, ConsumablesStatusSchema, ContactStatusSchema, ControlKindSchema, ControlStatusSchema, ConvertArtifactSchema, ConvertResultSchema, ConvertTargetSchema, CoverStateSchema, CoverStatusSchema, CreateApiKeyInputSchema, CreateApiKeyResultSchema, CreateIntegrationInputSchema, CreateScopedTokenInputSchema, CreateScopedTokenResultSchema, CreateUserInputSchema, CustomActionInputSchema, CustomModelDescriptorSchema, DATAPLANE_SECRET_HEADER, DEFAULT_ADDON_PLACEMENT, DEFAULT_AUDIO_ANALYZER_CONFIG, DEFAULT_DECODER_HWACCEL_CONFIG, DEFAULT_EVENT_COLOR, DEFAULT_FEATURES, DEFAULT_RETENTION, DEFAULT_SCRUB_THUMBNAIL_PRESET, DEVICE_CAP_NAMES, DEVICE_PROFILES, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, DEVICE_TYPE_CONTROL_KIND, DEVICE_TYPE_INFO, DayNightModeSchema, DayNightOptionsSchema, DayNightSettingsPatchSchema, DayNightStatusSchema, DecodedAudioChunkSchema, DecodedFrameSchema, DecoderSessionConfigSchema, DecoderStatsSchema, DeleteIntegrationResultSchema, DetectionSourceSchema, DeviceCodeSeveritySchema, DeviceConfig, DeviceDiscoveryStatusSchema, ExposeInputSchema as DeviceExportExposeInputSchema, DeviceExportStatusSchema, UnexposeInputSchema as DeviceExportUnexposeInputSchema, DeviceFeature, DeviceInfoSchema, DeviceLinkModeSchema, DeviceNetworkStatsSchema, DeviceRole, DeviceRuntimeState, DeviceStatusSchema, DeviceType, DiscoveredChildDeviceSchema, DiscoveredChildStatusSchema, DiscoveredDeviceSchema, DiscoveredTargetSchema, DisposerChain, DoorbellPressEventSchema, DoorbellStatusSchema, EVENTFUL_CAP_NAMES, EVENT_KIND_BY_CAP, EVENT_PAD_MS, EVENT_TAXONOMY, EXPRESSION_BUILTINS, EXPRESSION_BUILTIN_NAMES, EXPRESSION_COMPILE_CACHE_CAPACITY, EXPRESSION_IDENTIFIER_RE, EXPRESSION_INJECTED_NOW, ElementConfigStore, EmbeddingInfoSchema, EmbeddingResultSchema, EncodeProfileSchema, EncodedPacketSchema, EnrichedWidgetMetadataSchema, EnumSensorDateTimeFormatSchema, EnumSensorStatusSchema, EventCategory, EventEmitterStatusSchema, EventFireSchema, EventItemSchema, EventKindCategorySchema, EventKindDescriptorSchema, EventKindIconSchema, EventKindSchema, EventSourceType, ExportDownloadSchema, ExportOptionsSchema, ExportRecordSchema, ExportSetupFieldSchema, ExportSetupSchema, ExportSpeedSchema, ExportStateSchema, ExportTimelapseSchema, ExposedDeviceSchema, ExposureModeSchema, ExpressionEvalError, ExpressionParseError, FanControlStatusSchema, FanDirectionSchema, FeatureManifestSchema, FeatureProbeStatusSchema, FloodStatusSchema, FrameHandleFormatSchema, FrameHandleSchema, FrameInputSchema, GasStatusSchema, GetStreamWithCodecInputSchema, GlobalMetricsSchema, HF_BASE_URL, HF_REPO, HWACCEL_OPTIONS, HealthStatusSchema, HistoryPointSchema, HistoryResolutionEnum, HumidifierStatusSchema, HumiditySensorStatusSchema, HvacModeSchema, ImageRotateSchema, ImageSettingsOptionsSchema, ImageSettingsPatchSchema, ImageSettingsStatusSchema, ImageStatusSchema, IngestOwnerSchema, InstalledPackageSchema, IntegrationLiteSchema, IntegrationWithStateSchema, IntercomAbilitySchema, IntercomStatusSchema, KNOWN_CAP_NAMES, KeyEventSchema, LabelDefinitionSchema, LawnMowerActivitySchema, LawnMowerControlStatusSchema, LinkedDeviceSchema, LlmDefaultSchema, LlmDefaultSelectorSchema, LlmErrorCodeSchema, LlmGenerateBaseInputSchema, LlmGenerateErrSchema, LlmGenerateOkSchema, LlmGenerateResultSchema, LlmImageSchema, LlmNodeModelSchema, LlmProfileKindDescriptorSchema, LlmProfileKindSchema, LlmProfileSchema, LlmRuntimeCompleteInputSchema, LlmRuntimeDiskUsageSchema, LlmRuntimeNodeSchema, LlmRuntimeStatusSchema, LlmUsageRollupSchema, LlmUsageSchema, LocateSegmentResultSchema, LocationStatSchema, LockControlStatusSchema, LockStateSchema, LogEntrySchema, LogLevelSchema, LogStreamEntrySchema, LoginMethodContributionSchema, LoginStageEnum, MACRO_LABELS, MAX_EXPRESSION_AST_NODES, MAX_EXPRESSION_BINDINGS, MAX_EXPRESSION_CALL_ARGS, MAX_EXPRESSION_EVAL_STEPS, MAX_EXPRESSION_SOURCE_LENGTH, METHOD_ACCESS_MAP, MODEL_FORMATS, MOTION_TRIGGER_FEATURE, ManagedModelCatalogEntrySchema, ManagedModelRefSchema, ManagedRuntimeConfigSchema, MaskGridDimsSchema, MaskGridShapeSchema, MaskLineShapeSchema, MaskPointSchema, MaskPolygonShapeSchema, MaskPolygonVerticesSchema, MaskRectShapeSchema, MaskShapeKindSchema, MaskShapeSchema, MediaFileSchema, MediaPlayerRepeatSchema, MediaPlayerStateSchema, MediaPlayerStatusSchema, MeshPeerSchema, MeshStatusSchema, MethodAccessSchema, ModelCatalogEntrySchema, ModelConvertInputSchema, ModelConvertMetadataSchema, ModelDistributeInputSchema, ModelDistributeResultSchema, ModelExtraFileSchema, ModelFormatEntrySchema, ModelFormatsSchema, ModelSubstitutionSchema, ModelVariantGroupSchema, MotionAnalysisResultSchema, MotionEventSchema, MotionOnMotionChangedDataSchema, MotionRegionSchema, MotionSourceEnum, MotionSourcesSchema, MotionStatusSchema, MotionTriggerRuntimeStateSchema, MotionTriggerStatusSchema, MotionZoneOptionsSchema, MotionZonePatchSchema, MotionZoneRegionSchema, MotionZoneStatusSchema, StatusSchema as MqttBrokerStatusSchema, NativeDetectionSchema, NativeObjectClassEnum, NativeObjectDetectionRuntimeStateSchema, NativeObjectDetectionStatusSchema, NetworkAccessStatusSchema, NetworkAddressSchema, NetworkEndpointSchema, NotificationActionSchema, NotificationFormatSchema, NotificationHistoryEntrySchema, NotificationRuleSchema, NotificationSchema, NotifierStatusSchema, NumericSensorStatusSchema, OPS_LOG_DEFAULT_LIMIT, OPS_LOG_RING_DEFAULT_MAX, OauthIntegrationDescriptorSchema, ObjectEventSchema, OpsLogDomainSchema, OpsLogEntrySchema, OpsLogOpSchema, OpsLogQueryInputSchema, OpsLogReasonSchema, OrchestratorMetricsSchema, OsdOverlayKindEnum, OsdOverlayPatchSchema, OsdOverlaySchema, OsdPositionEnum, OsdStatusSchema, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, PIPELINE_FLOW_CAPABILITY_NAMES, PIPELINE_OWNER_CAPABILITY_NAMES, PROVIDER_KIND_CAP_NAMES, PYTHON_SCRIPT, PackageUpdateSchema, PackageVersionInfoSchema, PasskeyLoginMethodSchema, PasskeySummarySchema, PcmSampleFormatSchema, PerScopeBreakdownSchema, PetFeederStatusSchema, PickStreamPreferencesSchema, PickStreamRequirementsSchema, PickedCamStreamSchema, PipelineAssignmentSchema, PipelineDefaultStepSchema, PipelineEngineChoiceSchema, PipelineRunResultBridge, PipelineStepInputSchema, PipelineValidationIssueSchema, PipelineValidationResultSchema, PlaceholderReasonSchema, PolygonPointSchema, PowerMeterStatusSchema, PresenceStatusSchema, PressureSensorStatusSchema, PrivacyMaskOptionsSchema, PrivacyMaskPatchSchema, PrivacyMaskRegionSchema, PrivacyMaskShapeSchema, PrivacyMaskStatusSchema, ProfileRtspEntrySchema, ProfileSlotSchema, ProfileSlotStatusSchema, ProviderStatusSchema, PtzAutotrackRuntimeStateSchema, PtzAutotrackSettingsSchema, PtzAutotrackStatusSchema, PtzAutotrackTargetOptionSchema, PtzMoveCommandSchema, PtzPositionSchema, PtzPresetSchema, PtzStatusSchema, QueryFilterSchema, REACHABILITY_FAILURES_TO_OFFLINE, REACHABILITY_POLL_INTERVAL_MS, REACHABILITY_PROBE_TIMEOUT_MS, RECOGNITION_TYPES, RESERVED_BINDING_NAMES, RUNTIME_DEFAULTS, RUNTIME_TO_FORMAT, RawStateResultSchema, ReadSegmentBytesResultSchema, ReadinessRegistry, ReadinessTimeoutError, RecentTracksPageSchema, RecentTracksQueryInput, RecordingAvailabilitySchema, RecordingBandModeSchema, RecordingBandSchema, RecordingBandTriggersSchema, RecordingConfigSchema, RecordingDaysSchema, RecordingDeviceUsageSchema, RecordingLocationUsageSchema, RecordingManifestSchema, RecordingModeSchema, RecordingRangeSchema, RecordingRetentionSchema, RecordingRuleSchema, RecordingScheduleSchema, RecordingStatusSchema, RecordingStorageModeSchema, RecordingStorageUsageSchema, RecordingTriggersSchema, RecordingWeekdaySchema, RedirectLoginMethodSchema, RenderedAsSchema, ReportMotionInputSchema, RingBuffer, RtpSourceSchema, RtspRestreamEntrySchema, RunnerCameraConfigSchema, RunnerCameraDeviceUIFields, RunnerFrameSourceSchema, RunnerLocalLoadSchema, RunnerLocalMetricsSchema, SCOPE_PRESETS, SCRUB_THUMBNAIL_PRESETS, SCRUB_THUMBNAIL_PRESET_LABELS, SCRUB_THUMBNAIL_PRESET_ORDER, SENSOR_FEATURES, SENSOR_MAP, SOURCE_INFO_METADATA_KEY, STREAM_PROFILE_META, STREAM_QUALITY_LABELS, SUB_DETECTION_TYPES, SYSTEM_CAP_NAMES, SceneCheckSchema, SceneConditionSchema, SceneMonitorSchema, SceneMonitorStateSchema, SceneMonitorStatusSchema, SceneReferenceSchema, ScopedTokenSchema, ScopedTokenSummarySchema, ScoredObjectEventSchema, ScriptRunnerStatusSchema, ScrubThumbnailPresetSchema, SearchResultSchema, SendEmailInputSchema, SendEmailResultSchema, SendResultSchema, SensorEventSchema, ServerBootModeSchema, ServerPackageStatusSchema, ServerRollbackInfoSchema, ServerUpdateActionResultSchema, ServerUpdateCheckResultSchema, ServerUpdateStateSchema, SettingsPatchSchema, SettingsRecordSchema, SettingsSchemaWithValuesSchema, SettingsUpdateResultSchema, ShmRingStatsSchema, SmokeStatusSchema, SmtpStatusSchema, SnapshotImageSchema, SourceInfoSchema, SpatialDetectionSchema, SsoBridgeClaimsSchema, StartEmbeddedInputSchema, StationaryObjectSchema, AbortUploadInputSchema as StorageAbortUploadInputSchema, BeginDownloadInputSchema as StorageBeginDownloadInputSchema, BeginDownloadResultSchema as StorageBeginDownloadResultSchema, BeginUploadInputSchema as StorageBeginUploadInputSchema, BeginUploadResultSchema as StorageBeginUploadResultSchema, EndDownloadInputSchema as StorageEndDownloadInputSchema, FinalizeUploadInputSchema as StorageFinalizeUploadInputSchema, StorageLocationDeclarationSchema, StorageLocationRefSchema, StorageLocationSchema, StorageLocationTypeSchema, ProviderInfoSchema as StorageProviderInfoSchema, ReadChunkInputSchema as StorageReadChunkInputSchema, TestLocationResultSchema as StorageTestLocationResultSchema, WriteChunkInputSchema as StorageWriteChunkInputSchema, StreamCodecSchema, StreamFormatSchema, StreamNetworkStatsSchema, StreamParamsOptionsSchema, StreamParamsStatusSchema, StreamProfileConfigSchema, StreamProfileOptionsSchema, StreamProfilePatchSchema, StreamProfileSchema, StreamSourceEntrySchema, StreamSourceSchema, SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, SubscribeFramesInputSchema, SubscribeFramesResultSchema, SwitchStatusSchema, SystemMetricsSchema, SystemMirror, TAXONOMY_COLORS, TIMEZONES, TamperStatusSchema, TankStatusSchema, TargetKindCapsSchema, TargetKindLevelSchema, TargetKindSchema, TargetSchema, TemperatureSensorStatusSchema, TestConnectionResultSchema$1 as TestConnectionResultSchema, TestResultSchema, ToastSchema, TokenScopeSchema, TopologyNodeSchema, TopologyProcessSchema, TopologyServiceSchema, TrackCascadeCountsSchema, TrackEnvelopeSchema, TrackProjectionSchema, TrackSchema, TrackStateSchema, TrackZoneFilterSchema, TrackedDetectionSchema, TurnServerSchema, UNIT_TABLE, BrokerInfoSchema$1 as UnifiedBrokerInfoSchema, UnitConversionError, UpdateIntegrationInputSchema, UpdateStatusSchema, UpdateUserInputSchema, UserRecordSchema, UserSummarySchema, VacuumControlStatusSchema, VacuumStateSchema, ValveStateSchema, ValveStatusSchema, VibrationStatusSchema, VideoEncodeSchema, WELL_KNOWN_TABS, WELL_KNOWN_TAB_MAP, WaterHeaterStatusSchema, WeatherStatusSchema, WebrtcStreamChoiceSchema, WebrtcStreamTargetSchema, WhiteBalanceModeSchema, WidgetHostEnum, WidgetLoginMethodSchema, WidgetMetadataSchema, WidgetRemoteSchema, WidgetSizeEnum, YAMNET_TO_MACRO, ZoneKindEnum, ZoneRuleModeEnum, ZoneRuleSchema, ZoneRuleStageEnum, ZoneRulesArraySchema, ZoneSchema, ZoneScopeBreakdownSchema, accessoriesCapability, accessoryStableId, addonPagesCapability, addonPagesSourceCapability, addonRoutesCapability, addonSettingsCapability, addonWidgetsCapability, addonWidgetsSourceCapability, addonsCapability, adminUiCapability, advancedNotifierCapability, airQualitySensorCapability, alarmPanelCapability, alertsCapability, ambientLightSensorCapability, applyTransform, asBoolean, asJsonArray, asJsonObject, asNumber, asString, audioAnalysisCapability, audioAnalyzerCapability, audioCodecCapability, audioMetricsCapability, authProviderCapability, autoAssignProfiles, automationControlCapability, backupCapability, batteryCapability, bestLocationMatch, binaryCapability, bindAddonActions, brightnessCapability, brokerCapability, buildAddonRouteProvider, buildEventKindDescriptor, buildModelVariantGroups, buildStreamParamsConfigSchema, buttonCapability, cameraCredentialsCapability, cameraPipelineConfigCapability, cameraStreamsCapability, canConvertUnit, carbonMonoxideCapability, cellsToRects, classifyStream, classifyStreams, climateControlCapability, collectHydratedFieldEntries, collectHydratedFieldValues, colorCapability, colorForKind, compileExpression, compileExpressionSafe, connectivityCapability, consumablesCapability, contactCapability, controlCapability, convertUnit, cosineSimilarity, coverCapability, createDeviceProxy, createDurableState, createEvent, createExpressionScope, createLazyTrpcSource, createMirrorSource, createRuntimeStateBridge, createSliceHandle, createSystemProxy, customAction, customModelRegistryCapability, dayNightCapability, decoderCapability, defaultDeviceFor, defineCustomActions, describeModelVariant, detectionPipelineCapability, deviceAdoptionCapability, deviceCustomAction, deviceDiscoveryCapability, deviceExportCapability, deviceManagerCapability, deviceMatchesProfile, deviceOpsCapability, deviceProviderCapability, deviceStateCapability, deviceStatusCapability, doorbellCapability, embeddingEncoderCapability, emitDownForOwnedCaps, emitReadiness, encodeProfileFromStreamShape, enumSensorCapability, enumerateItemArrayFields, enumerateSchemaFields, errMsg, evaluateAst, evaluateLinkExpression, evaluateZoneRules, event, eventEmitterCapability, eventsCapability, expandCapMethods, extractNestedAddonId, extractSourceInfoFromMetadata, faceGalleryCapability, fanControlCapability, featureProbeCapability, filesystemBrowseCapability, findTimezone, floodCapability, formatForBackend, formatForRuntime, gasCapability, getAudioMacroClassIds, getByPath, getCapsByProviderKind, getTaxonomyEntry, hasMotionTrigger, hfModelUrl, htmlToText, humidifierCapability, humiditySensorCapability, hydrateSchema, imageCapability, imageSettingsCapability, integrationsCapability, intercomCapability, isAgentOnlyPlacement, isArrayOutputSchema, isCollectionArrayMethod, isDeployableToAgent, isDeviceConfigCap, isEvent, isNode, isObjectInput, isVoidInput, jobKindSchema, kebabToCamel, lawnMowerControlCapability, lifecycleJobSchema, lifecycleJobScopeSchema, lifecycleJobStateSchema, lifecycleTaskSchema, llmCapability, llmRuntimeCapability, localNetworkCapability, locationSimilarity, lockControlCapability, logDestinationCapability, loginMethodCapability, looseSchema, makeProfileBrokerId, makeSourceBrokerId, mapAudioLabelToMacro, markdownToHtmlLite, markdownToText, maskUrlCredentials, mediaPlayerCapability, mergeSourceInfo, meshNetworkCapability, method, metricsProviderCapability, migrateConfigToBands, modelConvertCapability, modelDistributorCapability, modelFormatForRuntime, motionCapability, motionDetectionCapability, motionTriggerCapability, motionZonesCapability, mqttBrokerCapability, nativeObjectDetectionCapability, networkAccessCapability, networkQualityCapability, nodePin, nodesCapability, normalizeAddonInitResult, normalizeUnit, notificationOutputCapability, notifierCapability, numericSensorCapability, oauthIntegrationCapability, objectInputDeclaresAddonId, osdCapability, parseCameraStreamConfig, parseExpression, parseJsonArray, parseJsonObject, parseJsonUnknown, parseProfileBrokerId, parseStreamParamsFormPatch, petFeederCapability, pickAccessoryControl, pickPreferredRtspEntry, pipelineAnalyticsCapability, pipelineExecutorCapability, pipelineOrchestratorCapability, pipelineRunnerCapability, plateGalleryCapability, platformProbeCapability, powerMeterCapability, prepareNotification, presenceCapability, pressureSensorCapability, privacyMaskCapability, procedureAuthKey, ptzAutotrackCapability, ptzCapability, pythonScriptForBackend, readNodePin, readinessKey, rebootCapability, recordingCapability, recordingExportCapability, rectsToCells, requiresPython, resolveAddonExecution, resolveAddonGroup, resolveAddonPlacement, resolveAddonRuntime, resolveCapMount, resolveDetectionRuntime, resolveDeviceControlKind, resolveDeviceProfile, resolveFormat, resolveHydratedFieldValue, resolveModelFormat, resolveMutate, resolveRunnerId, resolveScrubThumbnailGeometry, resolveVariantModelId, runInferenceStep, runtimeDevices, sceneMonitorCapability, scopeKey, scoreRuntimes, scriptRunnerCapability, selectAssignedProfileSlots, serverManagementCapability, setByPath, settingsStoreCapability, sleep, sleepCancellable, smokeCapability, smtpProviderCapability, snapshotCapability, ssoBridgeCapability, startReachabilityPoll, storageCapability, storageEvictableCapability, storageProviderCapability, streamBrokerCapability, streamCatalogCapability, streamParamsCapability, streamPixels, streamQualityLabel, subKindsOf, supportedRuntimes, switchCapability, synthesizeSourceInfo, systemCapability, tamperCapability, taskLogEntrySchema, taskPhaseSchema, taskTargetSchema, temperatureSensorCapability, textToHtml, toDeviceSummary, toExpressionValue, toStreamSourceEntry, toastCapability, tokenize, transcodeBody, tryConvertUnit, turnProviderCapability, unitDimension, unitsForDimension, updateCapability, userManagementCapability, userPasskeysCapability, vacuumControlCapability, validateExpressionSource, valveCapability, vibrationCapability, videoclipsCapability, viewerUiCapability, waterHeaterCapability, weatherCapability, webrtcClientHintsSchema, webrtcSessionCapability, wiringAddonHealthSchema, wiringHealthSnapshotSchema, wiringNodeHealthSchema, wiringProbeKindSchema, wiringProbeResultSchema, zodEntriesToConfigUI, zoneAnalyticsCapability, zoneRulesCapability, zonesCapability };
@@ -1015,8 +1015,8 @@ export interface AddonPackageManifest {
1015
1015
  * (types, kernel, core, sdk, ui-library) rather than an installable
1016
1016
  * addon. The admin UI shows these in a separate "System packages"
1017
1017
  * section, disables uninstall, and warns the operator that updating
1018
- * them requires a server restart. The hub-side install/update flow
1019
- * routes system packages to `updateFrameworkPackage` instead of the
1018
+ * them requires a server restart. Framework packages are updated via
1019
+ * the node-root server-update flow (`applyServerUpdate`), not the
1020
1020
  * regular addon installer.
1021
1021
  *
1022
1022
  * Mutually-exclusive with `addons[]` in concept but not in code:
@@ -432,7 +432,7 @@ export interface SystemReadyStatePayload {
432
432
  * with just `kind: 'manual'` and `requestedAt`.
433
433
  *
434
434
  * kind values:
435
- * `framework-update` — single system-package update via `updateFrameworkPackage`
435
+ * `framework-update` — framework/system-package update (via applyServerUpdate)
436
436
  * `manual` — operator-triggered restart (restartServer)
437
437
  * `system` — internal / supervisor-initiated restart
438
438
  * `framework-bulk-update` — multi-package bulk update run as one lifecycle engine job
@@ -1,2 +1 @@
1
1
  export * from './job.js';
2
- export * from './framework-swap.js';
@@ -214,6 +214,7 @@ export declare const ModelCatalogEntrySchema: z.ZodObject<{
214
214
  imagenet: "imagenet";
215
215
  none: "none";
216
216
  }>>;
217
+ outputProbabilities: z.ZodOptional<z.ZodBoolean>;
217
218
  preprocessMode: z.ZodOptional<z.ZodEnum<{
218
219
  letterbox: "letterbox";
219
220
  resize: "resize";
@@ -434,6 +435,7 @@ export declare const ConvertResultSchema: z.ZodObject<{
434
435
  imagenet: "imagenet";
435
436
  none: "none";
436
437
  }>>;
438
+ outputProbabilities: z.ZodOptional<z.ZodBoolean>;
437
439
  preprocessMode: z.ZodOptional<z.ZodEnum<{
438
440
  letterbox: "letterbox";
439
441
  resize: "resize";
@@ -82,6 +82,16 @@ export interface StepDefinition {
82
82
  readonly defaultConfidence: number;
83
83
  /** Runtime label lookup (e.g., class name arrays for softmax, charset for CTC) */
84
84
  readonly labels?: readonly string[];
85
+ /**
86
+ * Classifier output classes that must NEVER be emitted — a hard reject list
87
+ * applied to the top-1 winner AND the alternates after classification.
88
+ * Used for a "background"/"none" catch-all class a classifier emits when the
89
+ * crop is not a member of any real class (e.g. the Google AIY bird model's
90
+ * index-964 `background`): without this the classifier would surface
91
+ * `background` as a species label on cats/people/foliage. Compared
92
+ * case-insensitively against the predicted class name. Absent ⇒ no rejection.
93
+ */
94
+ readonly rejectClasses?: readonly string[];
85
95
  /** Character set for CTC decode (index 0 = blank token) */
86
96
  readonly charset?: readonly string[];
87
97
  /** COCO-to-macro class mapping (e.g., 'car' → 'vehicle') */
@@ -144,10 +154,31 @@ export interface PoolModelConfig {
144
154
  readonly inputChannels?: number;
145
155
  /** How to preprocess the image before inference */
146
156
  readonly preprocessMode: 'letterbox' | 'resize';
157
+ /**
158
+ * Input pixel normalization. Absent / `'zero-one'` / `'none'` ⇒ the default
159
+ * `/255` rescale only (byte-identical to the historical unconditional path,
160
+ * used by every detector + CLIP/ArcFace + the AIY bird classifier which bakes
161
+ * its own scale). `'imagenet'` ⇒ additionally subtract the ImageNet
162
+ * mean/std per channel — required by the EfficientNet/MobileNetV3 animal +
163
+ * vehicle classifiers (their `labels.json` declares `normalize: imagenet`).
164
+ * Threaded from `ModelCatalogEntry.inputNormalization`.
165
+ */
166
+ readonly inputNormalization?: 'zero-one' | 'imagenet' | 'none';
167
+ /**
168
+ * The model's output is ALREADY a softmax probability distribution (softmax
169
+ * baked into the graph). When true the `softmax` postprocessor skips its own
170
+ * softmax pass and consumes the raw output as probabilities. See
171
+ * `ModelCatalogEntry.outputProbabilities`.
172
+ */
173
+ readonly outputProbabilities?: boolean;
147
174
  /** Postprocessor to apply to raw output in Python */
148
175
  readonly postprocessor: PostprocessorType;
149
176
  /** Confidence threshold for NMS / filtering */
150
177
  readonly confidence: number;
178
+ /** IoU threshold for the detector's non-max suppression (dedup). Read by the
179
+ * Python postprocessors (yolo / yolo-seg / scrfd); when absent they fall back
180
+ * to their 0.45 literal, so an unset value is byte-identical to today. */
181
+ readonly nmsIouThreshold?: number;
151
182
  /** Label names for softmax-based classifiers */
152
183
  readonly labels?: readonly string[];
153
184
  /** Character set for CTC-based recognizers */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/types",
3
- "version": "1.1.51",
3
+ "version": "1.1.53",
4
4
  "description": "Shared types, interfaces, and model catalogs for the CamStack detection ecosystem",
5
5
  "keywords": [
6
6
  "camstack",
@@ -1,36 +0,0 @@
1
- import { z } from 'zod';
2
- export declare const frameworkSwapPackageSchema: z.ZodObject<{
3
- name: z.ZodString;
4
- stagedPath: z.ZodString;
5
- backupPath: z.ZodString;
6
- toVersion: z.ZodString;
7
- fromVersion: z.ZodNullable<z.ZodString>;
8
- }, z.core.$strip>;
9
- export type FrameworkSwapPackage = z.infer<typeof frameworkSwapPackageSchema>;
10
- export declare const pendingFrameworkSwapSchema: z.ZodObject<{
11
- jobId: z.ZodString;
12
- taskId: z.ZodString;
13
- packages: z.ZodArray<z.ZodObject<{
14
- name: z.ZodString;
15
- stagedPath: z.ZodString;
16
- backupPath: z.ZodString;
17
- toVersion: z.ZodString;
18
- fromVersion: z.ZodNullable<z.ZodString>;
19
- }, z.core.$strip>>;
20
- requestedAtMs: z.ZodNumber;
21
- schemaVersion: z.ZodLiteral<1>;
22
- }, z.core.$strip>;
23
- export type PendingFrameworkSwap = z.infer<typeof pendingFrameworkSwapSchema>;
24
- export declare const frameworkSwapConfirmSchema: z.ZodObject<{
25
- jobId: z.ZodString;
26
- taskId: z.ZodString;
27
- backups: z.ZodArray<z.ZodObject<{
28
- name: z.ZodString;
29
- backupPath: z.ZodString;
30
- livePath: z.ZodString;
31
- }, z.core.$strip>>;
32
- appliedAtMs: z.ZodNumber;
33
- bootAttempts: z.ZodNumber;
34
- schemaVersion: z.ZodLiteral<1>;
35
- }, z.core.$strip>;
36
- export type FrameworkSwapConfirm = z.infer<typeof frameworkSwapConfirmSchema>;