@camstack/types 1.2.259 → 1.2.261
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/base-addon.d.ts +9 -1
- package/dist/addon.js +15 -7
- package/dist/addon.mjs +15 -7
- package/dist/capabilities/camera-streams.cap.d.ts +5 -5
- package/dist/capabilities/capability-definition.d.ts +9 -0
- package/dist/capabilities/custom-model-registry.cap.d.ts +18 -12
- package/dist/capabilities/decoder.cap.d.ts +12 -12
- package/dist/capabilities/device-extension.cap.d.ts +370 -0
- package/dist/capabilities/device-manager.cap.d.ts +45 -5
- package/dist/capabilities/doorbell.cap.d.ts +41 -0
- package/dist/capabilities/embedding-encoder.cap.d.ts +175 -0
- package/dist/capabilities/index.d.ts +17 -14
- package/dist/capabilities/llm-runtime.cap.d.ts +4 -4
- package/dist/capabilities/llm-shared.d.ts +6 -6
- package/dist/capabilities/llm.cap.d.ts +6 -6
- package/dist/capabilities/load-contribution.cap.d.ts +2 -2
- package/dist/capabilities/model-convert.cap.d.ts +9 -6
- package/dist/capabilities/model-distributor.cap.d.ts +18 -12
- package/dist/capabilities/motion-detection.cap.d.ts +4 -4
- package/dist/capabilities/notification-rules.cap.d.ts +603 -31
- package/dist/capabilities/osd-manager.cap.d.ts +7 -7
- package/dist/capabilities/pipeline-analytics.cap.d.ts +130 -129
- package/dist/capabilities/pipeline-executor.cap.d.ts +78 -120
- package/dist/capabilities/pipeline-orchestrator.cap.d.ts +78 -65
- package/dist/capabilities/pipeline-runner.cap.d.ts +30 -6
- package/dist/capabilities/platform-probe.cap.d.ts +4 -13
- package/dist/capabilities/recording-export.cap.d.ts +7 -7
- package/dist/capabilities/schemas/detection-shared.d.ts +4 -4
- package/dist/capabilities/schemas/streaming-shared.d.ts +8 -8
- package/dist/capabilities/stream-broker.cap.d.ts +9 -9
- package/dist/capabilities/system.cap.d.ts +2 -2
- package/dist/capabilities/vacuum-control.cap.d.ts +13 -13
- package/dist/capabilities/vector-store.cap.d.ts +14 -0
- package/dist/capabilities/videoclips.cap.d.ts +5 -5
- package/dist/capabilities/webrtc-session.cap.d.ts +2 -2
- package/dist/device-extension/index.d.ts +3 -0
- package/dist/device-extension/slot-descriptor.d.ts +62 -0
- package/dist/device-extension/slot-provider.d.ts +68 -0
- package/dist/generated/addon-api.d.ts +59 -9
- package/dist/generated/cap-input-defaults.d.ts +1 -1
- package/dist/generated/capability-router-map.d.ts +5 -2
- package/dist/generated/collection-array-methods.d.ts +1 -1
- package/dist/generated/device-proxy.d.ts +7 -7
- package/dist/generated/device-scoped-caps.d.ts +1 -1
- package/dist/generated/extension-slots.d.ts +39 -0
- package/dist/generated/method-access-map.d.ts +1 -1
- package/dist/generated/method-device-selectors.d.ts +1 -1
- package/dist/generated/system-proxy.d.ts +4 -2
- package/dist/index.d.ts +8 -3
- package/dist/index.js +3125 -1792
- package/dist/index.mjs +3049 -1788
- package/dist/interfaces/addon.d.ts +41 -0
- package/dist/interfaces/event-bus.d.ts +11 -1
- package/dist/interfaces/pipeline-executor-capability.d.ts +15 -6
- package/dist/interfaces/platform.d.ts +2 -2
- package/dist/interfaces/stream-broker.d.ts +2 -2
- package/dist/node.d.ts +1 -0
- package/dist/node.js +73 -7
- package/dist/node.mjs +73 -8
- package/dist/notification/system-event-summary.d.ts +83 -0
- package/dist/notification/template-vars.d.ts +15 -0
- package/dist/pipeline/cluster-model-scope.d.ts +59 -3
- package/dist/{sleep-DU7mu4wb.mjs → sleep-BXv0ZcRa.mjs} +49 -33
- package/dist/{sleep-DtomDrRW.js → sleep-QxyLiUId.js} +54 -32
- package/dist/storage/atomic-write.d.ts +25 -0
- package/dist/types/clip-model.d.ts +64 -0
- package/dist/types/detection.d.ts +9 -0
- package/dist/types/models.d.ts +18 -19
- package/dist/types/pipeline-step.d.ts +9 -1
- package/dist/types/pipeline.d.ts +2 -1
- package/dist/utils/background-run-registry.d.ts +69 -0
- package/dist/utils/runtime-mapping.d.ts +9 -54
- package/package.json +1 -1
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `device-extension` — ONE place to see and author what a device is extended
|
|
3
|
+
* with by OTHER devices (D648).
|
|
4
|
+
*
|
|
5
|
+
* **A contract, not a store.** Every slot (`linked-devices`,
|
|
6
|
+
* `doorbell-source`, later `consumables-graft`) is declared by the cap that
|
|
7
|
+
* owns the function (`extensionSlots` in its `*.cap.ts`, D4) and SERVED by the
|
|
8
|
+
* addon that already owns its store, over that store and its existing write
|
|
9
|
+
* path. This cap persists nothing and has no config method (guarded by
|
|
10
|
+
* `scripts/check-extension-slots.ts`): D62 applied to the whole feature, and
|
|
11
|
+
* D3 — no shadow registry.
|
|
12
|
+
*
|
|
13
|
+
* **Shape.** A device-scoped wrapper COLLECTION, the D554 shape `videoclips`
|
|
14
|
+
* uses: `resolveCapMount` gives it the `device-scoped` mount and
|
|
15
|
+
* `requireDeviceCollection` dispatches it. Its providers are the slot owners
|
|
16
|
+
* (device-manager, virtual-doorbell, …), and a device's sources are its
|
|
17
|
+
* bindings (step 0 of `getBindings`, derived, persisted nowhere).
|
|
18
|
+
*
|
|
19
|
+
* - `listSources` — one row per provider, the D554 source-listing convention
|
|
20
|
+
* that lets a scalar call be routed by the prefix of its `slotRef`.
|
|
21
|
+
* - `listSlots` — fan-out, concatenated. A provider that throws becomes ONE
|
|
22
|
+
* `unreachable` row naming it, never an absence (D554.4, D315): "no
|
|
23
|
+
* extensions" is claimed only from an answer.
|
|
24
|
+
* - `listCandidates` / `setSlot` — scalar, routed by `slotRef`
|
|
25
|
+
* (`<source>:<slotId>`). An unclaimed ref is refused by name (D554.5).
|
|
26
|
+
*
|
|
27
|
+
* The slot's value travels as the generated discriminated union
|
|
28
|
+
* (`ExtensionSlotValue`, keyed on `slot`), so a value under the wrong slot is
|
|
29
|
+
* a schema error before it reaches any owner.
|
|
30
|
+
*/
|
|
31
|
+
import { z } from 'zod';
|
|
32
|
+
import { type InferProvider } from './capability-definition.js';
|
|
33
|
+
/** Separator between the source and the slot id in a `slotRef`. It is the
|
|
34
|
+
* D554 routing separator: the dispatcher matches `<source>:` prefixes. */
|
|
35
|
+
export declare const EXTENSION_SLOT_REF_SEPARATOR = ":";
|
|
36
|
+
/** The contract method whose failure BECOMES a row, like `listSources`'s. */
|
|
37
|
+
export declare const EXTENSION_SLOT_LISTING_METHOD = "listSlots";
|
|
38
|
+
export declare const ExtensionSourceAvailabilitySchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
39
|
+
state: z.ZodLiteral<"ok">;
|
|
40
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
41
|
+
state: z.ZodLiteral<"unreachable">;
|
|
42
|
+
reason: z.ZodString;
|
|
43
|
+
}, z.core.$strip>], "state">;
|
|
44
|
+
export type ExtensionSourceAvailability = z.infer<typeof ExtensionSourceAvailabilitySchema>;
|
|
45
|
+
/** One provider of slots — the D554 source-listing row. */
|
|
46
|
+
export declare const ExtensionSourceSchema: z.ZodObject<{
|
|
47
|
+
source: z.ZodString;
|
|
48
|
+
label: z.ZodString;
|
|
49
|
+
addonId: z.ZodOptional<z.ZodString>;
|
|
50
|
+
availability: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
51
|
+
state: z.ZodLiteral<"ok">;
|
|
52
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
53
|
+
state: z.ZodLiteral<"unreachable">;
|
|
54
|
+
reason: z.ZodString;
|
|
55
|
+
}, z.core.$strip>], "state">;
|
|
56
|
+
}, z.core.$strip>;
|
|
57
|
+
export type ExtensionSource = z.infer<typeof ExtensionSourceSchema>;
|
|
58
|
+
/**
|
|
59
|
+
* How one picked source stands. `missing` — no such device (deleted, or an id
|
|
60
|
+
* that never existed); `foreign` — a device the slot's owner cannot read from
|
|
61
|
+
* (slice 2's cross-owner graft source); `unavailable` — it exists but is not a
|
|
62
|
+
* valid source now (a container, which is never a pick). A source in any of
|
|
63
|
+
* these states is SHOWN, never silently dropped or re-pointed.
|
|
64
|
+
*/
|
|
65
|
+
export declare const ExtensionSourceHealthSchema: z.ZodEnum<{
|
|
66
|
+
ok: "ok";
|
|
67
|
+
missing: "missing";
|
|
68
|
+
foreign: "foreign";
|
|
69
|
+
unavailable: "unavailable";
|
|
70
|
+
}>;
|
|
71
|
+
export type ExtensionSourceHealth = z.infer<typeof ExtensionSourceHealthSchema>;
|
|
72
|
+
export declare const ExtensionSlotSourceSchema: z.ZodObject<{
|
|
73
|
+
deviceId: z.ZodNumber;
|
|
74
|
+
name: z.ZodNullable<z.ZodString>;
|
|
75
|
+
health: z.ZodEnum<{
|
|
76
|
+
ok: "ok";
|
|
77
|
+
missing: "missing";
|
|
78
|
+
foreign: "foreign";
|
|
79
|
+
unavailable: "unavailable";
|
|
80
|
+
}>;
|
|
81
|
+
detail: z.ZodOptional<z.ZodString>;
|
|
82
|
+
}, z.core.$strip>;
|
|
83
|
+
export type ExtensionSlotSource = z.infer<typeof ExtensionSlotSourceSchema>;
|
|
84
|
+
/**
|
|
85
|
+
* A DIFFERENT authority that gates whether the slot's sources do anything —
|
|
86
|
+
* reported read-only, named, never written through this contract (D62). The
|
|
87
|
+
* virtual doorbell's sources ring only while the wrapper is bound to the
|
|
88
|
+
* camera, and that binding belongs to `deviceManager.setWrapperActive`.
|
|
89
|
+
* `unknown` means the gate could not be read; it is not "inactive" (D315).
|
|
90
|
+
*/
|
|
91
|
+
export declare const ExtensionSlotActivationSchema: z.ZodObject<{
|
|
92
|
+
state: z.ZodEnum<{
|
|
93
|
+
unknown: "unknown";
|
|
94
|
+
active: "active";
|
|
95
|
+
inactive: "inactive";
|
|
96
|
+
}>;
|
|
97
|
+
authority: z.ZodString;
|
|
98
|
+
detail: z.ZodOptional<z.ZodString>;
|
|
99
|
+
}, z.core.$strip>;
|
|
100
|
+
export type ExtensionSlotActivation = z.infer<typeof ExtensionSlotActivationSchema>;
|
|
101
|
+
/** One slot of one device, as its owner reads it from its own store. */
|
|
102
|
+
export declare const ExtensionSlotStateSchema: z.ZodObject<{
|
|
103
|
+
state: z.ZodLiteral<"ok">;
|
|
104
|
+
slotRef: z.ZodString;
|
|
105
|
+
slot: z.ZodEnum<{
|
|
106
|
+
"linked-devices": "linked-devices";
|
|
107
|
+
"doorbell-source": "doorbell-source";
|
|
108
|
+
}>;
|
|
109
|
+
authority: z.ZodString;
|
|
110
|
+
enabled: z.ZodNullable<z.ZodBoolean>;
|
|
111
|
+
projects: z.ZodNullable<z.ZodString>;
|
|
112
|
+
activation: z.ZodNullable<z.ZodObject<{
|
|
113
|
+
state: z.ZodEnum<{
|
|
114
|
+
unknown: "unknown";
|
|
115
|
+
active: "active";
|
|
116
|
+
inactive: "inactive";
|
|
117
|
+
}>;
|
|
118
|
+
authority: z.ZodString;
|
|
119
|
+
detail: z.ZodOptional<z.ZodString>;
|
|
120
|
+
}, z.core.$strip>>;
|
|
121
|
+
value: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
122
|
+
deviceIds: z.ZodArray<z.ZodNumber>;
|
|
123
|
+
slot: z.ZodLiteral<"doorbell-source">;
|
|
124
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
125
|
+
deviceIds: z.ZodArray<z.ZodNumber>;
|
|
126
|
+
slot: z.ZodLiteral<"linked-devices">;
|
|
127
|
+
}, z.core.$strip>], "slot">;
|
|
128
|
+
sources: z.ZodArray<z.ZodObject<{
|
|
129
|
+
deviceId: z.ZodNumber;
|
|
130
|
+
name: z.ZodNullable<z.ZodString>;
|
|
131
|
+
health: z.ZodEnum<{
|
|
132
|
+
ok: "ok";
|
|
133
|
+
missing: "missing";
|
|
134
|
+
foreign: "foreign";
|
|
135
|
+
unavailable: "unavailable";
|
|
136
|
+
}>;
|
|
137
|
+
detail: z.ZodOptional<z.ZodString>;
|
|
138
|
+
}, z.core.$strip>>;
|
|
139
|
+
}, z.core.$strip>;
|
|
140
|
+
export type ExtensionSlotState = z.infer<typeof ExtensionSlotStateSchema>;
|
|
141
|
+
/**
|
|
142
|
+
* A provider that could not answer `listSlots` at all. It could not name its
|
|
143
|
+
* own slots, so the row names the ADDON and carries the refusal verbatim.
|
|
144
|
+
* Written by the dispatcher, never by a provider.
|
|
145
|
+
*/
|
|
146
|
+
export declare const ExtensionSlotUnreachableSchema: z.ZodObject<{
|
|
147
|
+
state: z.ZodLiteral<"unreachable">;
|
|
148
|
+
addonId: z.ZodString;
|
|
149
|
+
reason: z.ZodString;
|
|
150
|
+
}, z.core.$strip>;
|
|
151
|
+
export type ExtensionSlotUnreachable = z.infer<typeof ExtensionSlotUnreachableSchema>;
|
|
152
|
+
export declare const ExtensionSlotRowSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
153
|
+
state: z.ZodLiteral<"ok">;
|
|
154
|
+
slotRef: z.ZodString;
|
|
155
|
+
slot: z.ZodEnum<{
|
|
156
|
+
"linked-devices": "linked-devices";
|
|
157
|
+
"doorbell-source": "doorbell-source";
|
|
158
|
+
}>;
|
|
159
|
+
authority: z.ZodString;
|
|
160
|
+
enabled: z.ZodNullable<z.ZodBoolean>;
|
|
161
|
+
projects: z.ZodNullable<z.ZodString>;
|
|
162
|
+
activation: z.ZodNullable<z.ZodObject<{
|
|
163
|
+
state: z.ZodEnum<{
|
|
164
|
+
unknown: "unknown";
|
|
165
|
+
active: "active";
|
|
166
|
+
inactive: "inactive";
|
|
167
|
+
}>;
|
|
168
|
+
authority: z.ZodString;
|
|
169
|
+
detail: z.ZodOptional<z.ZodString>;
|
|
170
|
+
}, z.core.$strip>>;
|
|
171
|
+
value: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
172
|
+
deviceIds: z.ZodArray<z.ZodNumber>;
|
|
173
|
+
slot: z.ZodLiteral<"doorbell-source">;
|
|
174
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
175
|
+
deviceIds: z.ZodArray<z.ZodNumber>;
|
|
176
|
+
slot: z.ZodLiteral<"linked-devices">;
|
|
177
|
+
}, z.core.$strip>], "slot">;
|
|
178
|
+
sources: z.ZodArray<z.ZodObject<{
|
|
179
|
+
deviceId: z.ZodNumber;
|
|
180
|
+
name: z.ZodNullable<z.ZodString>;
|
|
181
|
+
health: z.ZodEnum<{
|
|
182
|
+
ok: "ok";
|
|
183
|
+
missing: "missing";
|
|
184
|
+
foreign: "foreign";
|
|
185
|
+
unavailable: "unavailable";
|
|
186
|
+
}>;
|
|
187
|
+
detail: z.ZodOptional<z.ZodString>;
|
|
188
|
+
}, z.core.$strip>>;
|
|
189
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
190
|
+
state: z.ZodLiteral<"unreachable">;
|
|
191
|
+
addonId: z.ZodString;
|
|
192
|
+
reason: z.ZodString;
|
|
193
|
+
}, z.core.$strip>], "state">;
|
|
194
|
+
export type ExtensionSlotRow = z.infer<typeof ExtensionSlotRowSchema>;
|
|
195
|
+
/** The row the dispatcher writes for a provider whose `listSlots` threw. */
|
|
196
|
+
export declare function unreachableExtensionSlotRow(addonId: string, reason: string): ExtensionSlotUnreachable;
|
|
197
|
+
/** One device the slot's editor may offer as a source. */
|
|
198
|
+
export declare const ExtensionCandidateSchema: z.ZodObject<{
|
|
199
|
+
deviceId: z.ZodNumber;
|
|
200
|
+
name: z.ZodString;
|
|
201
|
+
type: z.ZodString;
|
|
202
|
+
location: z.ZodNullable<z.ZodString>;
|
|
203
|
+
parentName: z.ZodNullable<z.ZodString>;
|
|
204
|
+
suggested: z.ZodBoolean;
|
|
205
|
+
reason: z.ZodNullable<z.ZodString>;
|
|
206
|
+
}, z.core.$strip>;
|
|
207
|
+
export type ExtensionCandidate = z.infer<typeof ExtensionCandidateSchema>;
|
|
208
|
+
export declare const ExtensionCandidatesSchema: z.ZodObject<{
|
|
209
|
+
candidates: z.ZodArray<z.ZodObject<{
|
|
210
|
+
deviceId: z.ZodNumber;
|
|
211
|
+
name: z.ZodString;
|
|
212
|
+
type: z.ZodString;
|
|
213
|
+
location: z.ZodNullable<z.ZodString>;
|
|
214
|
+
parentName: z.ZodNullable<z.ZodString>;
|
|
215
|
+
suggested: z.ZodBoolean;
|
|
216
|
+
reason: z.ZodNullable<z.ZodString>;
|
|
217
|
+
}, z.core.$strip>>;
|
|
218
|
+
}, z.core.$strip>;
|
|
219
|
+
export type ExtensionCandidates = z.infer<typeof ExtensionCandidatesSchema>;
|
|
220
|
+
/**
|
|
221
|
+
* What a write did. `none` — applied in place. `host` / `parent` — the owner
|
|
222
|
+
* reloaded the host (or, for an accessory child, its parent) because the
|
|
223
|
+
* write changed what the host REGISTERS (a graft switched on or off, slice 2).
|
|
224
|
+
*/
|
|
225
|
+
export declare const ExtensionSetResultSchema: z.ZodObject<{
|
|
226
|
+
applied: z.ZodLiteral<true>;
|
|
227
|
+
reload: z.ZodEnum<{
|
|
228
|
+
none: "none";
|
|
229
|
+
host: "host";
|
|
230
|
+
parent: "parent";
|
|
231
|
+
}>;
|
|
232
|
+
}, z.core.$strip>;
|
|
233
|
+
export type ExtensionSetResult = z.infer<typeof ExtensionSetResultSchema>;
|
|
234
|
+
export declare const ExtensionSlotRefInputSchema: z.ZodObject<{
|
|
235
|
+
deviceId: z.ZodNumber;
|
|
236
|
+
slotRef: z.ZodString;
|
|
237
|
+
}, z.core.$strip>;
|
|
238
|
+
export type ExtensionSlotRefInput = z.infer<typeof ExtensionSlotRefInputSchema>;
|
|
239
|
+
export declare const ExtensionSetSlotInputSchema: z.ZodObject<{
|
|
240
|
+
deviceId: z.ZodNumber;
|
|
241
|
+
slotRef: z.ZodString;
|
|
242
|
+
value: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
243
|
+
deviceIds: z.ZodArray<z.ZodNumber>;
|
|
244
|
+
slot: z.ZodLiteral<"doorbell-source">;
|
|
245
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
246
|
+
deviceIds: z.ZodArray<z.ZodNumber>;
|
|
247
|
+
slot: z.ZodLiteral<"linked-devices">;
|
|
248
|
+
}, z.core.$strip>], "slot">;
|
|
249
|
+
}, z.core.$strip>;
|
|
250
|
+
export type ExtensionSetSlotInput = z.infer<typeof ExtensionSetSlotInputSchema>;
|
|
251
|
+
export declare const deviceExtensionCapability: {
|
|
252
|
+
readonly name: "device-extension";
|
|
253
|
+
readonly scope: "device";
|
|
254
|
+
readonly mode: "collection";
|
|
255
|
+
readonly kind: "wrapper";
|
|
256
|
+
readonly defaultActive: true;
|
|
257
|
+
readonly deviceTypes: readonly import("../index.js").DeviceType[];
|
|
258
|
+
readonly deviceConfig: {
|
|
259
|
+
readonly ui: {
|
|
260
|
+
readonly kind: "widget";
|
|
261
|
+
readonly widgetId: "host/extensions-panel";
|
|
262
|
+
readonly tab: "general";
|
|
263
|
+
readonly label: "Extensions";
|
|
264
|
+
readonly order: 72;
|
|
265
|
+
};
|
|
266
|
+
};
|
|
267
|
+
readonly methods: {
|
|
268
|
+
/** One row per slot owner — the D554 source listing `slotRef` routes by. */
|
|
269
|
+
readonly listSources: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
|
|
270
|
+
deviceId: z.ZodNumber;
|
|
271
|
+
}, z.core.$strip>, z.ZodArray<z.ZodObject<{
|
|
272
|
+
source: z.ZodString;
|
|
273
|
+
label: z.ZodString;
|
|
274
|
+
addonId: z.ZodOptional<z.ZodString>;
|
|
275
|
+
availability: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
276
|
+
state: z.ZodLiteral<"ok">;
|
|
277
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
278
|
+
state: z.ZodLiteral<"unreachable">;
|
|
279
|
+
reason: z.ZodString;
|
|
280
|
+
}, z.core.$strip>], "state">;
|
|
281
|
+
}, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind>;
|
|
282
|
+
/**
|
|
283
|
+
* Every slot this device is offered, read by each owner from its own
|
|
284
|
+
* store. A provider that throws is ONE `unreachable` row (D554.4).
|
|
285
|
+
*/
|
|
286
|
+
readonly listSlots: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
|
|
287
|
+
deviceId: z.ZodNumber;
|
|
288
|
+
}, z.core.$strip>, z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
289
|
+
state: z.ZodLiteral<"ok">;
|
|
290
|
+
slotRef: z.ZodString;
|
|
291
|
+
slot: z.ZodEnum<{
|
|
292
|
+
"linked-devices": "linked-devices";
|
|
293
|
+
"doorbell-source": "doorbell-source";
|
|
294
|
+
}>;
|
|
295
|
+
authority: z.ZodString;
|
|
296
|
+
enabled: z.ZodNullable<z.ZodBoolean>;
|
|
297
|
+
projects: z.ZodNullable<z.ZodString>;
|
|
298
|
+
activation: z.ZodNullable<z.ZodObject<{
|
|
299
|
+
state: z.ZodEnum<{
|
|
300
|
+
unknown: "unknown";
|
|
301
|
+
active: "active";
|
|
302
|
+
inactive: "inactive";
|
|
303
|
+
}>;
|
|
304
|
+
authority: z.ZodString;
|
|
305
|
+
detail: z.ZodOptional<z.ZodString>;
|
|
306
|
+
}, z.core.$strip>>;
|
|
307
|
+
value: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
308
|
+
deviceIds: z.ZodArray<z.ZodNumber>;
|
|
309
|
+
slot: z.ZodLiteral<"doorbell-source">;
|
|
310
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
311
|
+
deviceIds: z.ZodArray<z.ZodNumber>;
|
|
312
|
+
slot: z.ZodLiteral<"linked-devices">;
|
|
313
|
+
}, z.core.$strip>], "slot">;
|
|
314
|
+
sources: z.ZodArray<z.ZodObject<{
|
|
315
|
+
deviceId: z.ZodNumber;
|
|
316
|
+
name: z.ZodNullable<z.ZodString>;
|
|
317
|
+
health: z.ZodEnum<{
|
|
318
|
+
ok: "ok";
|
|
319
|
+
missing: "missing";
|
|
320
|
+
foreign: "foreign";
|
|
321
|
+
unavailable: "unavailable";
|
|
322
|
+
}>;
|
|
323
|
+
detail: z.ZodOptional<z.ZodString>;
|
|
324
|
+
}, z.core.$strip>>;
|
|
325
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
326
|
+
state: z.ZodLiteral<"unreachable">;
|
|
327
|
+
addonId: z.ZodString;
|
|
328
|
+
reason: z.ZodString;
|
|
329
|
+
}, z.core.$strip>], "state">>, import("./capability-definition.js").CapabilityMethodKind>;
|
|
330
|
+
/** The devices the slot's editor may offer, suggestions pre-marked (D356). */
|
|
331
|
+
readonly listCandidates: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
|
|
332
|
+
deviceId: z.ZodNumber;
|
|
333
|
+
slotRef: z.ZodString;
|
|
334
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
335
|
+
candidates: z.ZodArray<z.ZodObject<{
|
|
336
|
+
deviceId: z.ZodNumber;
|
|
337
|
+
name: z.ZodString;
|
|
338
|
+
type: z.ZodString;
|
|
339
|
+
location: z.ZodNullable<z.ZodString>;
|
|
340
|
+
parentName: z.ZodNullable<z.ZodString>;
|
|
341
|
+
suggested: z.ZodBoolean;
|
|
342
|
+
reason: z.ZodNullable<z.ZodString>;
|
|
343
|
+
}, z.core.$strip>>;
|
|
344
|
+
}, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
|
|
345
|
+
/**
|
|
346
|
+
* Write one slot through its owner's EXISTING write path. The owner
|
|
347
|
+
* validates (a container is never a linked device, a camera is never its
|
|
348
|
+
* own source) and refuses by name before persisting.
|
|
349
|
+
*/
|
|
350
|
+
readonly setSlot: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
|
|
351
|
+
deviceId: z.ZodNumber;
|
|
352
|
+
slotRef: z.ZodString;
|
|
353
|
+
value: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
354
|
+
deviceIds: z.ZodArray<z.ZodNumber>;
|
|
355
|
+
slot: z.ZodLiteral<"doorbell-source">;
|
|
356
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
357
|
+
deviceIds: z.ZodArray<z.ZodNumber>;
|
|
358
|
+
slot: z.ZodLiteral<"linked-devices">;
|
|
359
|
+
}, z.core.$strip>], "slot">;
|
|
360
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
361
|
+
applied: z.ZodLiteral<true>;
|
|
362
|
+
reload: z.ZodEnum<{
|
|
363
|
+
none: "none";
|
|
364
|
+
host: "host";
|
|
365
|
+
parent: "parent";
|
|
366
|
+
}>;
|
|
367
|
+
}, z.core.$strip>, "mutation">;
|
|
368
|
+
};
|
|
369
|
+
};
|
|
370
|
+
export type IDeviceExtensionProvider = InferProvider<typeof deviceExtensionCapability>;
|
|
@@ -125,6 +125,33 @@ export declare const LinkedDeviceSchema: z.ZodObject<{
|
|
|
125
125
|
producesTrackedEvents: z.ZodOptional<z.ZodBoolean>;
|
|
126
126
|
}, z.core.$strip>;
|
|
127
127
|
export type LinkedDevice = z.infer<typeof LinkedDeviceSchema>;
|
|
128
|
+
/**
|
|
129
|
+
* The `linked-devices` extension slot's editable value (D648): the operator's
|
|
130
|
+
* pick list, exactly what `_linkedDeviceIds` persists. Tree children are NOT
|
|
131
|
+
* in it — they are always linked and are not a pick.
|
|
132
|
+
*/
|
|
133
|
+
export declare const LinkedDevicesSlotValueSchema: z.ZodObject<{
|
|
134
|
+
deviceIds: z.ZodArray<z.ZodNumber>;
|
|
135
|
+
}, z.core.$strip>;
|
|
136
|
+
export type LinkedDevicesSlotValue = z.infer<typeof LinkedDevicesSlotValueSchema>;
|
|
137
|
+
/**
|
|
138
|
+
* The `linked-devices` slot — a camera's companion devices, owned by the
|
|
139
|
+
* device manager over `_linkedDeviceIds` (D648, D356). Any device may be a
|
|
140
|
+
* source except a container (its children are picked in its place) and the
|
|
141
|
+
* camera itself.
|
|
142
|
+
*/
|
|
143
|
+
export declare const LINKED_DEVICES_SLOT: {
|
|
144
|
+
readonly id: "linked-devices";
|
|
145
|
+
readonly label: "Linked devices";
|
|
146
|
+
readonly description: string;
|
|
147
|
+
readonly shape: "association";
|
|
148
|
+
readonly hostDeviceTypes: readonly [DeviceType.Camera];
|
|
149
|
+
readonly sourceCaps: "any";
|
|
150
|
+
readonly cardinality: "many";
|
|
151
|
+
readonly value: z.ZodObject<{
|
|
152
|
+
deviceIds: z.ZodArray<z.ZodNumber>;
|
|
153
|
+
}, z.core.$strip>;
|
|
154
|
+
};
|
|
128
155
|
/** One camera's resolved linked set, tagged with the camera it belongs to.
|
|
129
156
|
* The batch answer needs the tag; the single-device answer already has it
|
|
130
157
|
* from the input, which is why `getLinkedDevices` keeps the untagged shape. */
|
|
@@ -309,6 +336,18 @@ export declare const deviceManagerCapability: {
|
|
|
309
336
|
readonly name: "device-manager";
|
|
310
337
|
readonly scope: "system";
|
|
311
338
|
readonly mode: "singleton";
|
|
339
|
+
readonly extensionSlots: readonly [{
|
|
340
|
+
readonly id: "linked-devices";
|
|
341
|
+
readonly label: "Linked devices";
|
|
342
|
+
readonly description: string;
|
|
343
|
+
readonly shape: "association";
|
|
344
|
+
readonly hostDeviceTypes: readonly [DeviceType.Camera];
|
|
345
|
+
readonly sourceCaps: "any";
|
|
346
|
+
readonly cardinality: "many";
|
|
347
|
+
readonly value: z.ZodObject<{
|
|
348
|
+
deviceIds: z.ZodArray<z.ZodNumber>;
|
|
349
|
+
}, z.core.$strip>;
|
|
350
|
+
}];
|
|
312
351
|
readonly exposesDeviceSettings: true;
|
|
313
352
|
readonly methods: {
|
|
314
353
|
/** Reserve (or re-resolve) a progressive numeric id for `(addonId, stableId)`.
|
|
@@ -1134,11 +1173,12 @@ export declare const deviceManagerCapability: {
|
|
|
1134
1173
|
/**
|
|
1135
1174
|
* Resolve the devices LINKED to a camera — the single policy authority
|
|
1136
1175
|
* both consumers call (viewer devices panel + pipeline-analytics event
|
|
1137
|
-
* kinds/ingest). Device-tree children are ALWAYS included
|
|
1138
|
-
*
|
|
1139
|
-
*
|
|
1140
|
-
* camera itself; deduped.
|
|
1141
|
-
*
|
|
1176
|
+
* kinds/ingest). Device-tree children are ALWAYS included, plus the
|
|
1177
|
+
* operator's persisted pick list (`mode` is always `manual` since D356:
|
|
1178
|
+
* same-location devices are suggested by the picker, never linked on
|
|
1179
|
+
* their own). Excludes the camera itself; deduped. The list is written by
|
|
1180
|
+
* the settings section or the `linked-devices` extension slot, both over
|
|
1181
|
+
* `_linkedDeviceIds` (see the module docblock).
|
|
1142
1182
|
*/
|
|
1143
1183
|
readonly getLinkedDevices: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
|
|
1144
1184
|
deviceId: z.ZodNumber;
|
|
@@ -34,6 +34,35 @@ export declare const DoorbellPressEventSchema: z.ZodObject<{
|
|
|
34
34
|
timestamp: z.ZodNumber;
|
|
35
35
|
}, z.core.$strip>;
|
|
36
36
|
export type DoorbellPressEvent = z.infer<typeof DoorbellPressEventSchema>;
|
|
37
|
+
/**
|
|
38
|
+
* The `doorbell-source` extension slot's editable value (D648): the camera's
|
|
39
|
+
* virtual-doorbell trigger devices, exactly what the wrapper's
|
|
40
|
+
* `doorbellSources` persists (as `{ deviceId }` records).
|
|
41
|
+
*/
|
|
42
|
+
export declare const DoorbellSourceSlotValueSchema: z.ZodObject<{
|
|
43
|
+
deviceIds: z.ZodArray<z.ZodNumber>;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
export type DoorbellSourceSlotValue = z.infer<typeof DoorbellSourceSlotValueSchema>;
|
|
46
|
+
/**
|
|
47
|
+
* The `doorbell-source` slot — which devices ring this camera's VIRTUAL
|
|
48
|
+
* doorbell, owned by the `virtual-doorbell` wrapper over its
|
|
49
|
+
* `doorbellSources` store (D648). A source rings when one of its
|
|
50
|
+
* `SOURCE_CAPS` rises. Whether the wrapper is bound to the camera at all is a
|
|
51
|
+
* different authority (`deviceManager.setWrapperActive`, D62) — the slot
|
|
52
|
+
* reports it, it never writes it.
|
|
53
|
+
*/
|
|
54
|
+
export declare const DOORBELL_SOURCE_SLOT: {
|
|
55
|
+
readonly id: "doorbell-source";
|
|
56
|
+
readonly label: "Doorbell trigger devices";
|
|
57
|
+
readonly description: string;
|
|
58
|
+
readonly shape: "association";
|
|
59
|
+
readonly hostDeviceTypes: readonly [DeviceType.Camera];
|
|
60
|
+
readonly sourceCaps: readonly string[];
|
|
61
|
+
readonly cardinality: "many";
|
|
62
|
+
readonly value: z.ZodObject<{
|
|
63
|
+
deviceIds: z.ZodArray<z.ZodNumber>;
|
|
64
|
+
}, z.core.$strip>;
|
|
65
|
+
};
|
|
37
66
|
export declare const doorbellCapability: {
|
|
38
67
|
readonly name: "doorbell";
|
|
39
68
|
readonly scope: "device";
|
|
@@ -43,6 +72,18 @@ export declare const doorbellCapability: {
|
|
|
43
72
|
readonly defaultActive: false;
|
|
44
73
|
readonly deviceTypes: readonly [DeviceType.Button, DeviceType.Camera];
|
|
45
74
|
readonly exposesDeviceSettings: true;
|
|
75
|
+
readonly extensionSlots: readonly [{
|
|
76
|
+
readonly id: "doorbell-source";
|
|
77
|
+
readonly label: "Doorbell trigger devices";
|
|
78
|
+
readonly description: string;
|
|
79
|
+
readonly shape: "association";
|
|
80
|
+
readonly hostDeviceTypes: readonly [DeviceType.Camera];
|
|
81
|
+
readonly sourceCaps: readonly string[];
|
|
82
|
+
readonly cardinality: "many";
|
|
83
|
+
readonly value: z.ZodObject<{
|
|
84
|
+
deviceIds: z.ZodArray<z.ZodNumber>;
|
|
85
|
+
}, z.core.$strip>;
|
|
86
|
+
}];
|
|
46
87
|
readonly methods: {};
|
|
47
88
|
readonly events: {
|
|
48
89
|
/**
|