@camstack/types 1.2.209 → 1.2.211

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.
package/dist/addon.js CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_sleep = require("./sleep-WeJUxTv-.js");
2
+ const require_sleep = require("./sleep-OPlow2a9.js");
3
3
  const require_event_category = require("./event-category-BVfsrBYA.js");
4
4
  const require_err_msg = require("./err-msg-COpsHMw2.js");
5
5
  //#region src/generated/cap-input-defaults.ts
package/dist/addon.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { A as DeviceType, Et as normalizeAddonInitResult, G as ReadinessRegistry, H as nodePin, I as expandCapMethods, K as ReadinessTimeoutError, S as DEVICE_CHILDREN_BATCH_MAX, St as DATAPLANE_SECRET_HEADER, T as describeCustomActions, Tt as BaseAddon, U as readNodePin, Y as scopeKey, a as asJsonObject, b as deviceOpsCapability, d as BOOT_RECOVERY_BACKOFF_MS, f as DEVICE_SCOPED_CAPS, h as createEventBusSliceSource, j as adminUiCapability, kt as emitReadiness, m as createDeviceProxy, p as isDeviceScopedCap, s as asString, t as sleep, u as parseJsonUnknown, wt as DisposerChain, x as viewerUiCapability } from "./sleep-vl6nBE8d.mjs";
1
+ import { A as DeviceType, Et as normalizeAddonInitResult, G as ReadinessRegistry, H as nodePin, I as expandCapMethods, K as ReadinessTimeoutError, S as DEVICE_CHILDREN_BATCH_MAX, St as DATAPLANE_SECRET_HEADER, T as describeCustomActions, Tt as BaseAddon, U as readNodePin, Y as scopeKey, a as asJsonObject, b as deviceOpsCapability, d as BOOT_RECOVERY_BACKOFF_MS, f as DEVICE_SCOPED_CAPS, h as createEventBusSliceSource, j as adminUiCapability, kt as emitReadiness, m as createDeviceProxy, p as isDeviceScopedCap, s as asString, t as sleep, u as parseJsonUnknown, wt as DisposerChain, x as viewerUiCapability } from "./sleep-Bs3xPtSh.mjs";
2
2
  import { t as EventCategory } from "./event-category-BVDXG4tB.mjs";
3
3
  import { t as errMsg } from "./err-msg-IQTHeDzc.mjs";
4
4
  //#region src/generated/cap-input-defaults.ts
@@ -0,0 +1,262 @@
1
+ import { z } from 'zod';
2
+ import { DeviceType } from '../device/device-type.js';
3
+ import { type InferNativeProvider } from './capability-definition.js';
4
+ /**
5
+ * camera-grid-layout — the geometry of a COMPOSITE camera, on the camera's own
6
+ * page.
7
+ *
8
+ * ## Why this is a capability and not an addon settings schema
9
+ *
10
+ * It was one, and it did not render. The addon declared the editor as a
11
+ * `type: 'widget'` field inside its own `deviceSettingsSchema()`; the hub
12
+ * returned that section correctly and `ConfigFormField` renders `type:'widget'`
13
+ * perfectly well — and nothing ever asked camera-grid for it. The Cluster →
14
+ * Pipeline → Device Overrides page interrogates a HAND-WRITTEN list of four
15
+ * addons (`PIPELINE_CLUSTER_DEVICE_ADDONS`), whose own comment says an addon
16
+ * not on it "falls off silently".
17
+ *
18
+ * Adding a fifth name to that list would have been the wrong fix twice over:
19
+ * that page is per-camera DETECTION tuning, and a grid's geometry belongs
20
+ * beside PTZ and motion zones on the camera itself — which is exactly where the
21
+ * framework already puts a widget, when the widget is declared on a CAPABILITY.
22
+ * `deviceConfig.ui` is the mechanism (`motion-zones`, `ptz`, `ptz-autotrack`
23
+ * all use it): the framework emits the structural section and the widget
24
+ * self-persists through the cap's own mutations.
25
+ *
26
+ * ## Why one addon may implement it
27
+ *
28
+ * It is a device-scoped NATIVE cap, registered by the grid camera device
29
+ * itself. Nothing else declares a composite camera, so nothing else has a
30
+ * layout — and the device-scoped route means the widget asks THE camera, not
31
+ * "the camera-grid addon", which is what let the old custom-action pair be
32
+ * reached only by a caller that already knew the addon id.
33
+ *
34
+ * ## The tab
35
+ *
36
+ * `streaming`, not a top-tab of its own. A grid's geometry IS what its stream
37
+ * is, so the Streaming tab is where it belongs; a `grid` top-tab would need an
38
+ * entry in `WELL_KNOWN_TAB_MAP` or the device page renders the raw id as the
39
+ * label (measured on the robot camera, 2026-09-06 — a tab called "navigation"
40
+ * next to "PTZ").
41
+ */
42
+ /** A rectangle in normalized [0,1] coordinates of whatever contains it. */
43
+ declare const GridNormalizedRectSchema: z.ZodObject<{
44
+ x: z.ZodNumber;
45
+ y: z.ZodNumber;
46
+ width: z.ZodNumber;
47
+ height: z.ZodNumber;
48
+ }, z.core.$strip>;
49
+ /**
50
+ * One source camera, the part of its picture taken, and where that part lands.
51
+ *
52
+ * Both rectangles are NORMALIZED (D519): a source camera can change resolution
53
+ * — a profile switch, a firmware update, a substream that comes back different
54
+ * — and a stored PIXEL rectangle would quietly start cutting the wrong region,
55
+ * which is the class of bug nobody files.
56
+ */
57
+ declare const GridLayoutCellSchema: z.ZodObject<{
58
+ deviceId: z.ZodNumber;
59
+ source: z.ZodObject<{
60
+ x: z.ZodNumber;
61
+ y: z.ZodNumber;
62
+ width: z.ZodNumber;
63
+ height: z.ZodNumber;
64
+ }, z.core.$strip>;
65
+ cell: z.ZodObject<{
66
+ x: z.ZodNumber;
67
+ y: z.ZodNumber;
68
+ width: z.ZodNumber;
69
+ height: z.ZodNumber;
70
+ }, z.core.$strip>;
71
+ }, z.core.$strip>;
72
+ /**
73
+ * Which profiles this grid can actually compose, and why not.
74
+ *
75
+ * A grid's `high` composes its sources' `high` and its `low` their `low`, so a
76
+ * profile is on offer only when EVERY source can serve it. The refusal NAMES
77
+ * the sources, because "this grid has no low" is not a finding — "615 has no
78
+ * low" is, and it is the one an operator can act on.
79
+ */
80
+ declare const GridProfileOfferSchema: z.ZodObject<{
81
+ profile: z.ZodEnum<{
82
+ high: "high";
83
+ mid: "mid";
84
+ low: "low";
85
+ }>;
86
+ offered: z.ZodBoolean;
87
+ missingSources: z.ZodArray<z.ZodNumber>;
88
+ }, z.core.$strip>;
89
+ export declare const GridLayoutViewSchema: z.ZodObject<{
90
+ instanceId: z.ZodString;
91
+ deviceId: z.ZodNumber;
92
+ name: z.ZodString;
93
+ width: z.ZodNumber;
94
+ height: z.ZodNumber;
95
+ fps: z.ZodNumber;
96
+ cells: z.ZodArray<z.ZodObject<{
97
+ deviceId: z.ZodNumber;
98
+ source: z.ZodObject<{
99
+ x: z.ZodNumber;
100
+ y: z.ZodNumber;
101
+ width: z.ZodNumber;
102
+ height: z.ZodNumber;
103
+ }, z.core.$strip>;
104
+ cell: z.ZodObject<{
105
+ x: z.ZodNumber;
106
+ y: z.ZodNumber;
107
+ width: z.ZodNumber;
108
+ height: z.ZodNumber;
109
+ }, z.core.$strip>;
110
+ }, z.core.$strip>>;
111
+ profiles: z.ZodArray<z.ZodObject<{
112
+ profile: z.ZodEnum<{
113
+ high: "high";
114
+ mid: "mid";
115
+ low: "low";
116
+ }>;
117
+ offered: z.ZodBoolean;
118
+ missingSources: z.ZodArray<z.ZodNumber>;
119
+ }, z.core.$strip>>;
120
+ }, z.core.$strip>;
121
+ export type GridNormalizedRect = z.infer<typeof GridNormalizedRectSchema>;
122
+ export type GridLayoutCell = z.infer<typeof GridLayoutCellSchema>;
123
+ export type GridProfileOffer = z.infer<typeof GridProfileOfferSchema>;
124
+ export type GridLayoutView = z.infer<typeof GridLayoutViewSchema>;
125
+ export declare const GridLayoutPatchSchema: z.ZodObject<{
126
+ deviceId: z.ZodNumber;
127
+ name: z.ZodOptional<z.ZodString>;
128
+ width: z.ZodOptional<z.ZodNumber>;
129
+ height: z.ZodOptional<z.ZodNumber>;
130
+ fps: z.ZodOptional<z.ZodNumber>;
131
+ cells: z.ZodArray<z.ZodObject<{
132
+ deviceId: z.ZodNumber;
133
+ source: z.ZodObject<{
134
+ x: z.ZodNumber;
135
+ y: z.ZodNumber;
136
+ width: z.ZodNumber;
137
+ height: z.ZodNumber;
138
+ }, z.core.$strip>;
139
+ cell: z.ZodObject<{
140
+ x: z.ZodNumber;
141
+ y: z.ZodNumber;
142
+ width: z.ZodNumber;
143
+ height: z.ZodNumber;
144
+ }, z.core.$strip>;
145
+ }, z.core.$strip>>;
146
+ }, z.core.$strip>;
147
+ export type GridLayoutPatch = z.infer<typeof GridLayoutPatchSchema>;
148
+ export declare const cameraGridLayoutCapability: {
149
+ readonly name: "camera-grid-layout";
150
+ readonly scope: "device";
151
+ readonly deviceNative: true;
152
+ readonly mode: "singleton";
153
+ readonly deviceTypes: readonly [DeviceType.Camera];
154
+ readonly deviceConfig: {
155
+ readonly ui: {
156
+ readonly kind: "widget";
157
+ readonly widgetId: "host/camera-grid-layout";
158
+ readonly tab: "streaming";
159
+ readonly label: "Grid layout";
160
+ readonly order: 20;
161
+ };
162
+ };
163
+ readonly methods: {
164
+ /**
165
+ * The grid behind this device.
166
+ *
167
+ * `null` means ANSWERED and this camera is not a grid — not "not yet
168
+ * known". The widget renders its "this is not a grid camera" state only
169
+ * from this answer, never from an unresolved query (D315).
170
+ */
171
+ readonly getLayout: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
172
+ deviceId: z.ZodNumber;
173
+ }, z.core.$strip>, z.ZodNullable<z.ZodObject<{
174
+ instanceId: z.ZodString;
175
+ deviceId: z.ZodNumber;
176
+ name: z.ZodString;
177
+ width: z.ZodNumber;
178
+ height: z.ZodNumber;
179
+ fps: z.ZodNumber;
180
+ cells: z.ZodArray<z.ZodObject<{
181
+ deviceId: z.ZodNumber;
182
+ source: z.ZodObject<{
183
+ x: z.ZodNumber;
184
+ y: z.ZodNumber;
185
+ width: z.ZodNumber;
186
+ height: z.ZodNumber;
187
+ }, z.core.$strip>;
188
+ cell: z.ZodObject<{
189
+ x: z.ZodNumber;
190
+ y: z.ZodNumber;
191
+ width: z.ZodNumber;
192
+ height: z.ZodNumber;
193
+ }, z.core.$strip>;
194
+ }, z.core.$strip>>;
195
+ profiles: z.ZodArray<z.ZodObject<{
196
+ profile: z.ZodEnum<{
197
+ high: "high";
198
+ mid: "mid";
199
+ low: "low";
200
+ }>;
201
+ offered: z.ZodBoolean;
202
+ missingSources: z.ZodArray<z.ZodNumber>;
203
+ }, z.core.$strip>>;
204
+ }, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind>;
205
+ /** Write the geometry back. Returns the grid as it now stands, profiles included. */
206
+ readonly saveLayout: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
207
+ deviceId: z.ZodNumber;
208
+ name: z.ZodOptional<z.ZodString>;
209
+ width: z.ZodOptional<z.ZodNumber>;
210
+ height: z.ZodOptional<z.ZodNumber>;
211
+ fps: z.ZodOptional<z.ZodNumber>;
212
+ cells: z.ZodArray<z.ZodObject<{
213
+ deviceId: z.ZodNumber;
214
+ source: z.ZodObject<{
215
+ x: z.ZodNumber;
216
+ y: z.ZodNumber;
217
+ width: z.ZodNumber;
218
+ height: z.ZodNumber;
219
+ }, z.core.$strip>;
220
+ cell: z.ZodObject<{
221
+ x: z.ZodNumber;
222
+ y: z.ZodNumber;
223
+ width: z.ZodNumber;
224
+ height: z.ZodNumber;
225
+ }, z.core.$strip>;
226
+ }, z.core.$strip>>;
227
+ }, z.core.$strip>, z.ZodObject<{
228
+ instanceId: z.ZodString;
229
+ deviceId: z.ZodNumber;
230
+ name: z.ZodString;
231
+ width: z.ZodNumber;
232
+ height: z.ZodNumber;
233
+ fps: z.ZodNumber;
234
+ cells: z.ZodArray<z.ZodObject<{
235
+ deviceId: z.ZodNumber;
236
+ source: z.ZodObject<{
237
+ x: z.ZodNumber;
238
+ y: z.ZodNumber;
239
+ width: z.ZodNumber;
240
+ height: z.ZodNumber;
241
+ }, z.core.$strip>;
242
+ cell: z.ZodObject<{
243
+ x: z.ZodNumber;
244
+ y: z.ZodNumber;
245
+ width: z.ZodNumber;
246
+ height: z.ZodNumber;
247
+ }, z.core.$strip>;
248
+ }, z.core.$strip>>;
249
+ profiles: z.ZodArray<z.ZodObject<{
250
+ profile: z.ZodEnum<{
251
+ high: "high";
252
+ mid: "mid";
253
+ low: "low";
254
+ }>;
255
+ offered: z.ZodBoolean;
256
+ missingSources: z.ZodArray<z.ZodNumber>;
257
+ }, z.core.$strip>>;
258
+ }, z.core.$strip>, "mutation">;
259
+ };
260
+ };
261
+ export type ICameraGridLayoutProvider = InferNativeProvider<typeof cameraGridLayoutCapability>;
262
+ export {};
@@ -169,6 +169,7 @@ export { type IMediaPlayerProvider, type MediaInfo, type MediaPlayerRepeat, Medi
169
169
  export { type IMeshNetworkProvider, type MeshEndpoint, type MeshPeer, MeshPeerSchema, type MeshStatus, MeshStatusSchema, meshNetworkCapability, } from './mesh-network.cap.js';
170
170
  export { type IMotionProvider, MOTION_CLOSE_AFTER_MS, type MotionOnMotionChangedData, MotionOnMotionChangedDataSchema, type MotionStatus, MotionStatusSchema, motionCapability, } from './motion.cap.js';
171
171
  export { type IMotionTriggerProvider, type MotionTriggerRuntimeState, MotionTriggerRuntimeStateSchema, type MotionTriggerStatus, MotionTriggerStatusSchema, motionTriggerCapability, } from './motion-trigger.cap.js';
172
+ export { type GridLayoutCell, type GridLayoutPatch, GridLayoutPatchSchema, type GridNormalizedRect, type GridProfileOffer, type GridLayoutView, GridLayoutViewSchema, type ICameraGridLayoutProvider, cameraGridLayoutCapability, } from './camera-grid-layout.cap.js';
172
173
  export { type IMotionZonesProvider, type MotionZoneOptions, MotionZoneOptionsSchema, type MotionZonePatch, MotionZonePatchSchema, type MotionZoneRegion, MotionZoneRegionSchema, type MotionZoneStatus, MotionZoneStatusSchema, motionZonesCapability, } from './motion-zones.cap.js';
173
174
  export { type INativeObjectDetectionProvider, type NativeDetection, NativeDetectionSchema, type NativeObjectClass, NativeObjectClassEnum, type NativeObjectDetectionOptions, NativeObjectDetectionOptionsSchema, type NativeObjectDetectionRuntimeState, NativeObjectDetectionRuntimeStateSchema, type NativeObjectDetectionSettingsPatch, NativeObjectDetectionSettingsPatchSchema, type NativeObjectDetectionStatus, NativeObjectDetectionStatusSchema, type NativeObjectGeometry, NativeObjectGeometryEnum, nativeObjectDetectionCapability, } from './native-object-detection.cap.js';
174
175
  export { type INavigationProvider, NAVIGATION_ACTION_CATALOG, NAVIGATION_LIGHT_LEVEL_MAX, NAVIGATION_LIGHT_LEVEL_MIN, type NavigationActionEntry, NavigationActionEntrySchema, type NavigationActionId, NavigationActionIdSchema, type NavigationEntryKind, NavigationEntryKindSchema, type NavigationFeatures, NavigationFeaturesSchema, type NavigationLightMode, NavigationLightModeSchema, type NavigationMode, NavigationModeSchema, type NavigationMoveCommand, NavigationMoveCommandSchema, type NavigationPoint, NavigationPointSchema, type NavigationRuntimeState, NavigationRuntimeStateSchema, type NavigationStatus, NavigationStatusSchema, navigationCapability, } from './navigation.cap.js';
@@ -186,7 +187,7 @@ export { type IPowerMeterProvider, type PowerMeterStatus, PowerMeterStatusSchema
186
187
  export { type GpsLocation, type IPresenceProvider, type PresenceStatus, PresenceStatusSchema, presenceCapability, } from './presence.cap.js';
187
188
  export { type IPressureSensorProvider, type PressureSensorStatus, PressureSensorStatusSchema, pressureSensorCapability, } from './pressure-sensor.cap.js';
188
189
  export { type IPrivacyMaskProvider, type PrivacyMaskOptions, PrivacyMaskOptionsSchema, type PrivacyMaskPatch, PrivacyMaskPatchSchema, type PrivacyMaskRegion, PrivacyMaskRegionSchema, type PrivacyMaskShape, PrivacyMaskShapeSchema, type PrivacyMaskStatus, PrivacyMaskStatusSchema, privacyMaskCapability, summarisePrivacyAudio, } from './privacy-mask.cap.js';
189
- export { type IPtzProvider, type PtzHomePreset, PtzHomePresetSchema, PtzMoveCommandSchema, type PtzOptions, PtzOptionsSchema, PtzPositionSchema, type PtzPreset, type PtzPresetFunction, PtzPresetFunctionSchema, PtzPresetSchema, type PtzStatus, PtzStatusSchema, ptzCapability, } from './ptz.cap.js';
190
+ export { type IPtzProvider, type PtzHomePreset, PtzHomePresetSchema, type PtzHomeReturn, PtzHomeReturnSchema, PtzMoveCommandSchema, type PtzOptions, PtzOptionsSchema, PtzPositionSchema, type PtzPreset, type PtzPresetFunction, PtzPresetFunctionSchema, PtzPresetSchema, type PtzStatus, PtzStatusSchema, ptzCapability, } from './ptz.cap.js';
190
191
  export { type IPtzAutotrackProvider, type PtzAutotrackRuntimeState, PtzAutotrackRuntimeStateSchema, type PtzAutotrackSettings, PtzAutotrackSettingsSchema, type PtzAutotrackStatus, PtzAutotrackStatusSchema, type PtzAutotrackTargetOption, PtzAutotrackTargetOptionSchema, ptzAutotrackCapability, } from './ptz-autotrack.cap.js';
191
192
  export { type IRebootProvider, rebootCapability } from './reboot.cap.js';
192
193
  export { type IRecordingProvider, type LocateSegmentResult, LocateSegmentResultSchema, RECORDING_TIMELINE_BATCH_MAX, type ReadGopBytesResult, ReadGopBytesResultSchema, type ReadSegmentBytesResult, ReadSegmentBytesResultSchema, type ReadWindowBytesResult, ReadWindowBytesResultSchema, type RecordingAvailability, type RecordingAvailabilityForDevice, RecordingAvailabilityForDeviceSchema, RecordingAvailabilitySchema, type RecordingDays, type RecordingDaysForDevice, RecordingDaysForDeviceSchema, RecordingDaysSchema, type RecordingDeviceUsage, RecordingDeviceUsageSchema, type RecordingLocationUsage, RecordingLocationUsageSchema, type RecordingManifest, RecordingManifestSchema, RecordingRangeSchema, type RecordingRebalanceInput, RecordingRebalanceInputSchema, type RecordingRebalanceMove, RecordingRebalanceMoveSchema, type RecordingRebalancePlan, RecordingRebalancePlanSchema, type RecordingRebalanceSkip, type RecordingRebalanceSkipReason, RecordingRebalanceSkipReasonSchema, RecordingRebalanceSkipSchema, type RecordingStatus, RecordingStatusSchema, type RecordingStorageUsage, RecordingStorageUsageSchema, recordingCapability, } from './recording.cap.js';
@@ -302,6 +303,7 @@ import type { modelDistributorCapability } from './model-distributor.cap.js';
302
303
  import type { motionCapability } from './motion.cap.js';
303
304
  import type { motionDetectionCapability } from './motion-detection.cap.js';
304
305
  import type { motionTriggerCapability } from './motion-trigger.cap.js';
306
+ import type { cameraGridLayoutCapability } from './camera-grid-layout.cap.js';
305
307
  import type { motionZonesCapability } from './motion-zones.cap.js';
306
308
  import type { mqttBrokerCapability } from './mqtt-broker.cap.js';
307
309
  import type { nativeObjectDetectionCapability } from './native-object-detection.cap.js';
@@ -372,6 +374,6 @@ import type { webrtcSessionCapability } from './webrtc-session.cap.js';
372
374
  import type { zoneAnalyticsCapability } from './zone-analytics.cap.js';
373
375
  import type { zoneRulesCapability } from './zone-rules.cap.js';
374
376
  import type { zonesCapability } from './zones.cap.js';
375
- type AnyCapability = typeof streamSignalsCapability | typeof addonSettingsCapability | typeof alertsCapability | typeof storageCapability | typeof storageMigrationCapability | typeof storageProviderCapability | typeof storageEvictableCapability | typeof storageOccupancyCapability | typeof filesystemBrowseCapability | typeof backupCapability | typeof terminalSessionCapability | typeof settingsStoreCapability | typeof dataStoreProviderCapability | typeof logChannelsCapability | typeof logDestinationCapability | typeof loadContributionCapability | typeof failureContributionCapability | typeof adminUiCapability | typeof viewerUiCapability | typeof ssoBridgeCapability | typeof userPasskeysCapability | typeof smtpProviderCapability | typeof mqttBrokerCapability | typeof brokerCapability | typeof deviceAdoptionCapability | typeof deviceExportCapability | typeof addonPagesCapability | typeof addonPagesSourceCapability | typeof addonWidgetsCapability | typeof addonWidgetsSourceCapability | typeof customModelRegistryCapability | typeof modelDistributorCapability | typeof modelConvertCapability | typeof addonRoutesCapability | typeof streamBrokerCapability | typeof decoderCapability | typeof webrtcSessionCapability | typeof cameraStreamsCapability | typeof motionDetectionCapability | typeof pipelineExecutorCapability | typeof detectionPipelineCapability | typeof cameraPipelineConfigCapability | typeof pipelineRunnerCapability | typeof pipelineOrchestratorCapability | typeof audioAnalyzerCapability | typeof audioAnalysisCapability | typeof audioCodecCapability | typeof embeddingEncoderCapability | typeof vectorStoreCapability | typeof deviceProviderCapability | typeof deviceManagerCapability | typeof deviceStateCapability | typeof authProviderCapability | typeof loginMethodCapability | typeof networkAccessCapability | typeof turnProviderCapability | typeof snapshotCapability | typeof llmCapability | typeof llmRuntimeCapability | typeof notificationOutputCapability | typeof coreBlocksCapability | typeof notificationRulesCapability | typeof pipelineAnalyticsCapability | typeof metricsProviderCapability | typeof ptzCapability | typeof ptzAutotrackCapability | typeof navigationCapability | typeof consumablesCapability | typeof connectionTestCapability | typeof rebootCapability | typeof deviceDiscoveryCapability | typeof brightnessCapability | typeof colorCapability | typeof climateControlCapability | typeof coverCapability | typeof valveCapability | typeof humidifierCapability | typeof waterHeaterCapability | typeof weatherCapability | typeof imageCapability | typeof lockControlCapability | typeof vacuumControlCapability | typeof petFeederCapability | typeof lawnMowerControlCapability | typeof fanControlCapability | typeof controlCapability | typeof notifierCapability | typeof mediaPlayerCapability | typeof alarmPanelCapability | typeof presenceCapability | typeof scriptRunnerCapability | typeof automationControlCapability | typeof motionTriggerCapability | typeof eventsCapability | typeof zonesCapability | typeof zoneRulesCapability | typeof zoneAnalyticsCapability | typeof audioMetricsCapability | typeof motionCapability | typeof contactCapability | typeof floodCapability | typeof smokeCapability | typeof carbonMonoxideCapability | typeof gasCapability | typeof tamperCapability | typeof vibrationCapability | typeof connectivityCapability | typeof binaryCapability | typeof temperatureSensorCapability | typeof humiditySensorCapability | typeof ambientLightSensorCapability | typeof pressureSensorCapability | typeof powerMeterCapability | typeof airQualitySensorCapability | typeof numericSensorCapability | typeof enumSensorCapability | typeof recordingCapability | typeof recordingExportCapability | typeof recordingSignalCapability | typeof deviceOpsCapability | typeof platformProbeCapability | typeof localNetworkCapability | typeof meshNetworkCapability | typeof userManagementCapability | typeof systemCapability | typeof networkQualityCapability | typeof toastCapability | typeof nodesCapability | typeof serverManagementCapability | typeof integrationsCapability | typeof addonsCapability | typeof oauthIntegrationCapability | typeof streamParamsCapability | typeof streamCatalogCapability | typeof motionZonesCapability | typeof sceneMonitorCapability | typeof privacyMaskCapability | typeof dayNightCapability | typeof imageSettingsCapability | typeof osdCapability | typeof osdManagerCapability | typeof accessoriesCapability | typeof batteryCapability | typeof networkLinkCapability | typeof buttonCapability | typeof cameraCredentialsCapability | typeof deviceStatusCapability | typeof doorbellCapability | typeof eventEmitterCapability | typeof faceGalleryCapability | typeof featureProbeCapability | typeof intercomCapability | typeof nativeObjectDetectionCapability | typeof plateGalleryCapability | typeof switchCapability | typeof updateCapability | typeof videoclipsCapability;
377
+ type AnyCapability = typeof streamSignalsCapability | typeof addonSettingsCapability | typeof alertsCapability | typeof storageCapability | typeof storageMigrationCapability | typeof storageProviderCapability | typeof storageEvictableCapability | typeof storageOccupancyCapability | typeof filesystemBrowseCapability | typeof backupCapability | typeof terminalSessionCapability | typeof settingsStoreCapability | typeof dataStoreProviderCapability | typeof logChannelsCapability | typeof logDestinationCapability | typeof loadContributionCapability | typeof failureContributionCapability | typeof adminUiCapability | typeof viewerUiCapability | typeof ssoBridgeCapability | typeof userPasskeysCapability | typeof smtpProviderCapability | typeof mqttBrokerCapability | typeof brokerCapability | typeof deviceAdoptionCapability | typeof deviceExportCapability | typeof addonPagesCapability | typeof addonPagesSourceCapability | typeof addonWidgetsCapability | typeof addonWidgetsSourceCapability | typeof customModelRegistryCapability | typeof modelDistributorCapability | typeof modelConvertCapability | typeof addonRoutesCapability | typeof streamBrokerCapability | typeof decoderCapability | typeof webrtcSessionCapability | typeof cameraStreamsCapability | typeof motionDetectionCapability | typeof pipelineExecutorCapability | typeof detectionPipelineCapability | typeof cameraPipelineConfigCapability | typeof pipelineRunnerCapability | typeof pipelineOrchestratorCapability | typeof audioAnalyzerCapability | typeof audioAnalysisCapability | typeof audioCodecCapability | typeof embeddingEncoderCapability | typeof vectorStoreCapability | typeof deviceProviderCapability | typeof deviceManagerCapability | typeof deviceStateCapability | typeof authProviderCapability | typeof loginMethodCapability | typeof networkAccessCapability | typeof turnProviderCapability | typeof snapshotCapability | typeof llmCapability | typeof llmRuntimeCapability | typeof notificationOutputCapability | typeof coreBlocksCapability | typeof notificationRulesCapability | typeof pipelineAnalyticsCapability | typeof metricsProviderCapability | typeof ptzCapability | typeof ptzAutotrackCapability | typeof navigationCapability | typeof consumablesCapability | typeof connectionTestCapability | typeof rebootCapability | typeof deviceDiscoveryCapability | typeof brightnessCapability | typeof colorCapability | typeof climateControlCapability | typeof coverCapability | typeof valveCapability | typeof humidifierCapability | typeof waterHeaterCapability | typeof weatherCapability | typeof imageCapability | typeof lockControlCapability | typeof vacuumControlCapability | typeof petFeederCapability | typeof lawnMowerControlCapability | typeof fanControlCapability | typeof controlCapability | typeof notifierCapability | typeof mediaPlayerCapability | typeof alarmPanelCapability | typeof presenceCapability | typeof scriptRunnerCapability | typeof automationControlCapability | typeof motionTriggerCapability | typeof eventsCapability | typeof zonesCapability | typeof zoneRulesCapability | typeof zoneAnalyticsCapability | typeof audioMetricsCapability | typeof motionCapability | typeof contactCapability | typeof floodCapability | typeof smokeCapability | typeof carbonMonoxideCapability | typeof gasCapability | typeof tamperCapability | typeof vibrationCapability | typeof connectivityCapability | typeof binaryCapability | typeof temperatureSensorCapability | typeof humiditySensorCapability | typeof ambientLightSensorCapability | typeof pressureSensorCapability | typeof powerMeterCapability | typeof airQualitySensorCapability | typeof numericSensorCapability | typeof enumSensorCapability | typeof recordingCapability | typeof recordingExportCapability | typeof recordingSignalCapability | typeof deviceOpsCapability | typeof platformProbeCapability | typeof localNetworkCapability | typeof meshNetworkCapability | typeof userManagementCapability | typeof systemCapability | typeof networkQualityCapability | typeof toastCapability | typeof nodesCapability | typeof serverManagementCapability | typeof integrationsCapability | typeof addonsCapability | typeof oauthIntegrationCapability | typeof streamParamsCapability | typeof streamCatalogCapability | typeof motionZonesCapability | typeof cameraGridLayoutCapability | typeof sceneMonitorCapability | typeof privacyMaskCapability | typeof dayNightCapability | typeof imageSettingsCapability | typeof osdCapability | typeof osdManagerCapability | typeof accessoriesCapability | typeof batteryCapability | typeof networkLinkCapability | typeof buttonCapability | typeof cameraCredentialsCapability | typeof deviceStatusCapability | typeof doorbellCapability | typeof eventEmitterCapability | typeof faceGalleryCapability | typeof featureProbeCapability | typeof intercomCapability | typeof nativeObjectDetectionCapability | typeof plateGalleryCapability | typeof switchCapability | typeof updateCapability | typeof videoclipsCapability;
376
378
  export type CapabilityName = AnyCapability['name'];
377
379
  export type ITypedReadinessRegistry = IReadinessRegistry<CapabilityName>;
@@ -143,6 +143,27 @@ export declare const PtzHomePresetSchema: z.ZodObject<{
143
143
  }>;
144
144
  }, z.core.$strip>;
145
145
  export type PtzHomePreset = z.infer<typeof PtzHomePresetSchema>;
146
+ /**
147
+ * The camera's own idle-return behaviour: whether it goes home by itself, and
148
+ * after how long.
149
+ *
150
+ * ONE shape, not two scalars, because on the camera they are ONE fact —
151
+ * Reolink's guard point carries `benable` and `timeout` in the same element,
152
+ * written by the same command. Reading them apart means two round-trips that
153
+ * can disagree.
154
+ *
155
+ * `enabled` and `seconds` are INDEPENDENT: a camera can hold a 68 s delay with
156
+ * the behaviour switched off, which is exactly what the vendor app leaves when
157
+ * you turn the guard point off without clearing it. The first version of this
158
+ * cap reported only the delay, so that state was invisible — a camera could be
159
+ * configured to return after 68 seconds with no way to say whether it should
160
+ * return at all.
161
+ */
162
+ export declare const PtzHomeReturnSchema: z.ZodObject<{
163
+ enabled: z.ZodBoolean;
164
+ seconds: z.ZodNumber;
165
+ }, z.core.$strip>;
166
+ export type PtzHomeReturn = z.infer<typeof PtzHomeReturnSchema>;
146
167
  export declare const ptzCapability: {
147
168
  readonly name: "ptz";
148
169
  readonly scope: "device";
@@ -270,20 +291,30 @@ export declare const ptzCapability: {
270
291
  deviceId: z.ZodNumber;
271
292
  }, z.core.$strip>, z.ZodVoid, "mutation">;
272
293
  /**
273
- * How long the camera waits, idle, before returning home on its own --
274
- * `null` when it has no such behaviour.
294
+ * Whether the camera returns home on its own when left idle, and after how
295
+ * long. `null` when it has no such behaviour at all.
275
296
  *
276
297
  * Reolink's guard point carries one (`timeout`, freely settable in
277
298
  * seconds). It is a real function of the camera that we did not expose at
278
299
  * all, and it belongs next to the home it governs rather than in a vendor
279
300
  * settings page nobody associates with Home.
280
301
  */
281
- readonly getHomeReturnSeconds: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
302
+ readonly getHomeReturn: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
282
303
  deviceId: z.ZodNumber;
283
- }, z.core.$strip>, z.ZodNullable<z.ZodNumber>, import("./capability-definition.js").CapabilityMethodKind>;
284
- /** Set the idle-return delay. Refused by a camera that has no such timer. */
285
- readonly setHomeReturnSeconds: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
304
+ }, z.core.$strip>, z.ZodNullable<z.ZodObject<{
305
+ enabled: z.ZodBoolean;
306
+ seconds: z.ZodNumber;
307
+ }, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind>;
308
+ /**
309
+ * Set both together. Refused by a camera with no idle-return behaviour.
310
+ *
311
+ * They travel together for the same reason they are read together: the
312
+ * underlying write carries both, so setting one alone means reading the
313
+ * other back first and racing whoever else is writing.
314
+ */
315
+ readonly setHomeReturn: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
286
316
  deviceId: z.ZodNumber;
317
+ enabled: z.ZodBoolean;
287
318
  seconds: z.ZodNumber;
288
319
  }, z.core.$strip>, z.ZodVoid, "mutation">;
289
320
  /**
@@ -346,6 +346,7 @@ export declare const GetStreamWithCodecInputSchema: z.ZodObject<{
346
346
  export type GetStreamWithCodecInput = z.infer<typeof GetStreamWithCodecInputSchema>;
347
347
  export declare const RtpSourceSchema: z.ZodObject<{
348
348
  url: z.ZodString;
349
+ sentryUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
349
350
  videoCodec: z.ZodEnum<{
350
351
  H264: "H264";
351
352
  H265: "H265";
@@ -1095,6 +1096,7 @@ export declare const streamBrokerCapability: {
1095
1096
  tag: z.ZodOptional<z.ZodString>;
1096
1097
  }, z.core.$strip>, z.ZodObject<{
1097
1098
  url: z.ZodString;
1099
+ sentryUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1098
1100
  videoCodec: z.ZodEnum<{
1099
1101
  H264: "H264";
1100
1102
  H265: "H265";
@@ -23,6 +23,7 @@ import type { brightnessCapability } from '../capabilities/brightness.cap.js';
23
23
  import type { brokerCapability } from '../capabilities/broker.cap.js';
24
24
  import type { buttonCapability } from '../capabilities/button.cap.js';
25
25
  import type { cameraCredentialsCapability } from '../capabilities/camera-credentials.cap.js';
26
+ import type { cameraGridLayoutCapability } from '../capabilities/camera-grid-layout.cap.js';
26
27
  import type { cameraStreamsCapability } from '../capabilities/camera-streams.cap.js';
27
28
  import type { climateControlCapability } from '../capabilities/climate-control.cap.js';
28
29
  import type { colorCapability } from '../capabilities/color.cap.js';
@@ -1192,6 +1193,27 @@ export type AppRouter = TrpcCoreRouter<{
1192
1193
  meta: object;
1193
1194
  }>;
1194
1195
  }>>;
1196
+ cameraGridLayout: TRPCBuiltRouter<{
1197
+ ctx: TrpcContext;
1198
+ meta: object;
1199
+ errorShape: AugmentedErrorShape;
1200
+ transformer: true;
1201
+ }, TRPCDecorateCreateRouterOptions<{
1202
+ getLayout: TRPCQueryProcedure<{
1203
+ input: {
1204
+ [x: string]: unknown;
1205
+ } & z.input<typeof cameraGridLayoutCapability.methods.getLayout.input>;
1206
+ output: z.infer<typeof cameraGridLayoutCapability.methods.getLayout.output>;
1207
+ meta: object;
1208
+ }>;
1209
+ saveLayout: TRPCMutationProcedure<{
1210
+ input: {
1211
+ [x: string]: unknown;
1212
+ } & z.input<typeof cameraGridLayoutCapability.methods.saveLayout.input>;
1213
+ output: z.infer<typeof cameraGridLayoutCapability.methods.saveLayout.output>;
1214
+ meta: object;
1215
+ }>;
1216
+ }>>;
1195
1217
  cameraPipelineConfig: TRPCBuiltRouter<{
1196
1218
  ctx: TrpcContext;
1197
1219
  meta: object;
@@ -6687,18 +6709,18 @@ export type AppRouter = TrpcCoreRouter<{
6687
6709
  output: z.infer<typeof ptzCapability.methods.captureHomeHere.output>;
6688
6710
  meta: object;
6689
6711
  }>;
6690
- getHomeReturnSeconds: TRPCQueryProcedure<{
6712
+ getHomeReturn: TRPCQueryProcedure<{
6691
6713
  input: {
6692
6714
  [x: string]: unknown;
6693
- } & z.input<typeof ptzCapability.methods.getHomeReturnSeconds.input>;
6694
- output: z.infer<typeof ptzCapability.methods.getHomeReturnSeconds.output>;
6715
+ } & z.input<typeof ptzCapability.methods.getHomeReturn.input>;
6716
+ output: z.infer<typeof ptzCapability.methods.getHomeReturn.output>;
6695
6717
  meta: object;
6696
6718
  }>;
6697
- setHomeReturnSeconds: TRPCMutationProcedure<{
6719
+ setHomeReturn: TRPCMutationProcedure<{
6698
6720
  input: {
6699
6721
  [x: string]: unknown;
6700
- } & z.input<typeof ptzCapability.methods.setHomeReturnSeconds.input>;
6701
- output: z.infer<typeof ptzCapability.methods.setHomeReturnSeconds.output>;
6722
+ } & z.input<typeof ptzCapability.methods.setHomeReturn.input>;
6723
+ output: z.infer<typeof ptzCapability.methods.setHomeReturn.output>;
6702
6724
  meta: object;
6703
6725
  }>;
6704
6726
  getPosition: TRPCQueryProcedure<{
@@ -24,6 +24,7 @@ export { brightnessCapability } from '../capabilities/brightness.cap.js';
24
24
  export { brokerCapability } from '../capabilities/broker.cap.js';
25
25
  export { buttonCapability } from '../capabilities/button.cap.js';
26
26
  export { cameraCredentialsCapability } from '../capabilities/camera-credentials.cap.js';
27
+ export { cameraGridLayoutCapability } from '../capabilities/camera-grid-layout.cap.js';
27
28
  export { cameraPipelineConfigCapability } from '../capabilities/camera-pipeline-config.cap.js';
28
29
  export { cameraStreamsCapability } from '../capabilities/camera-streams.cap.js';
29
30
  export { carbonMonoxideCapability } from '../capabilities/carbon-monoxide.cap.js';
@@ -182,6 +183,7 @@ export declare const CAPABILITY_NAMES: {
182
183
  readonly broker: "broker";
183
184
  readonly button: "button";
184
185
  readonly cameraCredentials: "camera-credentials";
186
+ readonly cameraGridLayout: "camera-grid-layout";
185
187
  readonly cameraPipelineConfig: "camera-pipeline-config";
186
188
  readonly cameraStreams: "camera-streams";
187
189
  readonly carbonMonoxide: "carbon-monoxide";
@@ -353,6 +355,7 @@ export interface CapabilityRouterMap<TRouter = unknown> {
353
355
  readonly broker: TRouter;
354
356
  readonly button: TRouter;
355
357
  readonly cameraCredentials: TRouter;
358
+ readonly cameraGridLayout: TRouter;
356
359
  readonly cameraPipelineConfig: TRouter;
357
360
  readonly cameraStreams: TRouter;
358
361
  readonly carbonMonoxide: TRouter;
@@ -485,8 +488,8 @@ export interface CapabilityRouterMap<TRouter = unknown> {
485
488
  readonly zoneRules: TRouter;
486
489
  readonly zones: TRouter;
487
490
  }
488
- /** Capability names whose mode is `singleton` (129 caps). */
489
- export declare const SINGLETON_CAPABILITY_NAMES: readonly ["accessories", "addon-pages", "addon-settings", "addon-widgets", "addons", "admin-ui", "air-quality-sensor", "alarm-panel", "alerts", "ambient-light-sensor", "audio-analysis", "audio-analyzer", "audio-codec", "audio-metrics", "automation-control", "backup", "battery", "binary", "brightness", "button", "camera-credentials", "camera-pipeline-config", "camera-streams", "carbon-monoxide", "climate-control", "color", "connectivity", "consumables", "contact", "control", "core-blocks", "cover", "day-night", "decoder", "detection-pipeline", "device-adoption", "device-discovery", "device-manager", "device-ops", "device-state", "device-status", "doorbell", "enum-sensor", "event-emitter", "events", "face-gallery", "fan-control", "feature-probe", "filesystem-browse", "flood", "gas", "humidifier", "humidity-sensor", "image", "image-settings", "integrations", "intercom", "lawn-mower-control", "llm-runtime", "local-network", "lock-control", "media-player", "metrics-provider", "model-convert", "model-distributor", "motion", "motion-detection", "motion-trigger", "motion-zones", "native-object-detection", "navigation", "network-link", "network-quality", "nodes", "notification-rules", "notifier", "numeric-sensor", "osd", "osd-manager", "pet-feeder", "pipeline-analytics", "pipeline-executor", "pipeline-orchestrator", "pipeline-runner", "plate-gallery", "platform-probe", "power-meter", "presence", "pressure-sensor", "privacy-mask", "ptz", "ptz-autotrack", "reboot", "recording", "recording-export", "recording-signal", "scene-monitor", "script-runner", "server-management", "settings-store", "smoke", "snapshot", "sso-bridge", "storage", "storage-migration", "stream-broker", "stream-catalog", "stream-params", "stream-signals", "switch", "system", "tamper", "temperature-sensor", "terminal-session", "toast", "update", "user-management", "vacuum-control", "valve", "vector-store", "vibration", "videoclips", "viewer-ui", "water-heater", "weather", "webrtc-session", "zone-analytics", "zone-rules", "zones"];
491
+ /** Capability names whose mode is `singleton` (130 caps). */
492
+ export declare const SINGLETON_CAPABILITY_NAMES: readonly ["accessories", "addon-pages", "addon-settings", "addon-widgets", "addons", "admin-ui", "air-quality-sensor", "alarm-panel", "alerts", "ambient-light-sensor", "audio-analysis", "audio-analyzer", "audio-codec", "audio-metrics", "automation-control", "backup", "battery", "binary", "brightness", "button", "camera-credentials", "camera-grid-layout", "camera-pipeline-config", "camera-streams", "carbon-monoxide", "climate-control", "color", "connectivity", "consumables", "contact", "control", "core-blocks", "cover", "day-night", "decoder", "detection-pipeline", "device-adoption", "device-discovery", "device-manager", "device-ops", "device-state", "device-status", "doorbell", "enum-sensor", "event-emitter", "events", "face-gallery", "fan-control", "feature-probe", "filesystem-browse", "flood", "gas", "humidifier", "humidity-sensor", "image", "image-settings", "integrations", "intercom", "lawn-mower-control", "llm-runtime", "local-network", "lock-control", "media-player", "metrics-provider", "model-convert", "model-distributor", "motion", "motion-detection", "motion-trigger", "motion-zones", "native-object-detection", "navigation", "network-link", "network-quality", "nodes", "notification-rules", "notifier", "numeric-sensor", "osd", "osd-manager", "pet-feeder", "pipeline-analytics", "pipeline-executor", "pipeline-orchestrator", "pipeline-runner", "plate-gallery", "platform-probe", "power-meter", "presence", "pressure-sensor", "privacy-mask", "ptz", "ptz-autotrack", "reboot", "recording", "recording-export", "recording-signal", "scene-monitor", "script-runner", "server-management", "settings-store", "smoke", "snapshot", "sso-bridge", "storage", "storage-migration", "stream-broker", "stream-catalog", "stream-params", "stream-signals", "switch", "system", "tamper", "temperature-sensor", "terminal-session", "toast", "update", "user-management", "vacuum-control", "valve", "vector-store", "vibration", "videoclips", "viewer-ui", "water-heater", "weather", "webrtc-session", "zone-analytics", "zone-rules", "zones"];
490
493
  /** Union of singleton capability names (literal string union). */
491
494
  export type SingletonCapabilityName = typeof SINGLETON_CAPABILITY_NAMES[number];
492
495
  /** Capability names whose mode is `collection` (28 caps). */
@@ -14,6 +14,7 @@ import type { binaryCapability } from '../capabilities/binary.cap.js';
14
14
  import type { brightnessCapability } from '../capabilities/brightness.cap.js';
15
15
  import type { buttonCapability } from '../capabilities/button.cap.js';
16
16
  import type { cameraCredentialsCapability } from '../capabilities/camera-credentials.cap.js';
17
+ import type { cameraGridLayoutCapability } from '../capabilities/camera-grid-layout.cap.js';
17
18
  import type { cameraStreamsCapability } from '../capabilities/camera-streams.cap.js';
18
19
  import type { carbonMonoxideCapability } from '../capabilities/carbon-monoxide.cap.js';
19
20
  import type { climateControlCapability } from '../capabilities/climate-control.cap.js';
@@ -209,6 +210,7 @@ export interface DeviceProxy {
209
210
  readonly brightness?: InferDeviceProxyCap<typeof brightnessCapability>;
210
211
  readonly button?: InferDeviceProxyCap<typeof buttonCapability>;
211
212
  readonly cameraCredentials?: InferDeviceProxyCap<typeof cameraCredentialsCapability>;
213
+ readonly cameraGridLayout?: InferDeviceProxyCap<typeof cameraGridLayoutCapability>;
212
214
  readonly cameraStreams?: InferDeviceProxyCap<typeof cameraStreamsCapability>;
213
215
  readonly carbonMonoxide?: InferDeviceProxyCap<typeof carbonMonoxideCapability>;
214
216
  readonly climateControl?: InferDeviceProxyCap<typeof climateControlCapability>;
@@ -5,7 +5,7 @@
5
5
  * can answer "may a rule actuate this?" without importing the schema barrel
6
6
  * (~144MB RSS per runner, D28).
7
7
  *
8
- * Coverage: 84 device-scoped capabilities.
8
+ * Coverage: 85 device-scoped capabilities.
9
9
  */
10
10
  export declare const DEVICE_SCOPED_CAPS: ReadonlySet<string>;
11
11
  /**
@@ -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: 1053 method paths across 130 capabilities.
9
+ * Coverage: 1055 method paths across 131 capabilities.
10
10
  */
11
11
  import type { CapabilityMethodAccess } from '../capabilities/capability-definition.js';
12
12
  export interface MethodAccessRecord {
@@ -6,7 +6,7 @@
6
6
  * system-scope cap that takes a deviceId was previously never device-filtered
7
7
  * — see the generator header).
8
8
  *
9
- * Coverage: 385 methods carry a device reference, of which
9
+ * Coverage: 387 methods carry a device reference, of which
10
10
  * 141 are on SYSTEM-scope caps.
11
11
  *
12
12
  * Top-level fields, number arrays, and one-level arrays of objects carrying