@camstack/types 1.2.7 → 1.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/addon.js +2 -2
  2. package/dist/addon.mjs +2 -2
  3. package/dist/capabilities/capability-definition.d.ts +74 -3
  4. package/dist/capabilities/custom-actions.d.ts +19 -0
  5. package/dist/capabilities/day-night.cap.d.ts +8 -8
  6. package/dist/capabilities/face-gallery.cap.d.ts +12 -0
  7. package/dist/capabilities/index.d.ts +29 -30
  8. package/dist/capabilities/notification-rules.cap.d.ts +1601 -0
  9. package/dist/capabilities/notifier.cap.d.ts +3 -3
  10. package/dist/capabilities/pipeline-analytics.cap.d.ts +8 -8
  11. package/dist/capabilities/recording.cap.d.ts +2 -2
  12. package/dist/capabilities/toast.cap.d.ts +2 -2
  13. package/dist/catalogs/nc-taxonomy.d.ts +53 -0
  14. package/dist/enums/event-category.d.ts +0 -3
  15. package/dist/enums.js +1 -1
  16. package/dist/enums.mjs +1 -1
  17. package/dist/{event-category-D4HJq7Mw.mjs → event-category-BLcNejAE.mjs} +0 -3
  18. package/dist/{event-category-CGj9fI4L.js → event-category-Cdyife4p.js} +0 -3
  19. package/dist/generated/addon-api.d.ts +1437 -367
  20. package/dist/generated/capability-router-map.d.ts +4 -4
  21. package/dist/generated/method-access-map.d.ts +1 -1
  22. package/dist/generated/system-proxy.d.ts +2 -0
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.js +2154 -1343
  25. package/dist/index.mjs +2125 -1341
  26. package/dist/interfaces/addon.d.ts +2 -2
  27. package/dist/interfaces/capability.d.ts +0 -1
  28. package/dist/interfaces/event-bus.d.ts +0 -16
  29. package/dist/interfaces/ops-log.d.ts +2 -2
  30. package/dist/{sleep-eVjOy4ev.js → sleep-BG8hQTA8.js} +2 -2
  31. package/dist/{sleep-BQ60XlE9.mjs → sleep-DiOnzenz.mjs} +2 -2
  32. package/package.json +1 -1
  33. package/dist/capabilities/advanced-notifier.cap.d.ts +0 -256
  34. package/dist/interfaces/advanced-notifier.d.ts +0 -73
@@ -0,0 +1,1601 @@
1
+ import { z } from 'zod';
2
+ import { type InferProvider } from './capability-definition.js';
3
+ /**
4
+ * notification-rules — the Notification Center rule surface (P1 core).
5
+ *
6
+ * Spec: `docs/superpowers/specs/2026-07-22-notification-center-requirements.md`
7
+ * (operator decisions D-1/D-2/D-3 are binding):
8
+ *
9
+ * - D-2: rule EVALUATION lives in `addon-post-analysis` (the
10
+ * `notification-center` module), hooked on the durable persistence
11
+ * moments (object-event insert, TrackCloser.closeExpired) with a
12
+ * persisted outbox + retry — never the lossy telemetry bus (D8).
13
+ * - D-3: urgency belongs to the RULE. `delivery: 'immediate'` fires on the
14
+ * FIRST persisted detection matching the conditions (per-track dedup,
15
+ * `maxPerTrack` fixed at 1 — see {@link NC_MAX_PER_TRACK_IMMEDIATE});
16
+ * `delivery: 'track-end'` evaluates the finalized track record at close.
17
+ * - DISPATCH stays behind `notification-output` (rules reference targets
18
+ * by id; per-backend params are a passthrough blob capped by the
19
+ * target kind's own caps/degrade engine).
20
+ *
21
+ * P1 scope: admin-authored rules only (`createdBy` stamped from the
22
+ * server-injected caller identity — the first `caller: 'required'`
23
+ * adopter). The P1 condition subset is: devices, classes(+exclude),
24
+ * minConfidence, admin zones (any/all + exclude), weekly schedule
25
+ * windows, and the optional label/identity/plate matchers. User rules,
26
+ * private zones, per-recipient fan-out and the wider condition table are
27
+ * P2+ (see spec §7).
28
+ *
29
+ * All schemas here are the single source of truth — `NcRule` etc. are
30
+ * `z.infer` exports; no duplicate interfaces (the advanced-notifier
31
+ * schema/interface drift is explicitly not repeated).
32
+ */
33
+ /**
34
+ * D-3: the trigger/urgency of a rule — which persistence moment evaluates it.
35
+ * The value maps 1:1 onto the evaluated record kind:
36
+ * - `immediate` ↔ object-event persist (lowest-latency detection burst)
37
+ * - `track-end` ↔ TrackCloser.closeExpired (finalized track record)
38
+ * - `device-event` ↔ SensorEventStore insert (doorbell press / sensor state
39
+ * change of a LINKED device, one row per linked camera)
40
+ * - `package-event` ↔ PackageDropDetector object-event insert (a `package`
41
+ * delivery / pick-up)
42
+ *
43
+ * `immediate`/`track-end` carry the D-3 urgency semantics; `device-event`/
44
+ * `package-event` are pure trigger kinds (no urgency dimension). Extending
45
+ * this one field keeps the schema additive — a rule still declares exactly
46
+ * one trigger.
47
+ */
48
+ export declare const NcDeliverySchema: z.ZodEnum<{
49
+ immediate: "immediate";
50
+ "track-end": "track-end";
51
+ "device-event": "device-event";
52
+ "package-event": "package-event";
53
+ }>;
54
+ export type NcDelivery = z.infer<typeof NcDeliverySchema>;
55
+ /**
56
+ * `maxPerTrack` for `immediate` rules is FIXED at 1 (D-3): a single track
57
+ * fires an immediate rule at most once, enforced durably by the outbox
58
+ * unique key `(ruleId, trackId, targetId)`. Not a rule field in P1.
59
+ */
60
+ export declare const NC_MAX_PER_TRACK_IMMEDIATE = 1;
61
+ /** One weekly activation window. `startMinute > endMinute` crosses midnight. */
62
+ export declare const NcScheduleWindowSchema: z.ZodObject<{
63
+ days: z.ZodArray<z.ZodNumber>;
64
+ startMinute: z.ZodNumber;
65
+ endMinute: z.ZodNumber;
66
+ }, z.core.$strip>;
67
+ export type NcScheduleWindow = z.infer<typeof NcScheduleWindowSchema>;
68
+ /** Weekly schedule — OR of windows; absence on the rule = always active. */
69
+ export declare const NcScheduleSchema: z.ZodObject<{
70
+ windows: z.ZodArray<z.ZodObject<{
71
+ days: z.ZodArray<z.ZodNumber>;
72
+ startMinute: z.ZodNumber;
73
+ endMinute: z.ZodNumber;
74
+ }, z.core.$strip>>;
75
+ timezone: z.ZodOptional<z.ZodString>;
76
+ invert: z.ZodOptional<z.ZodBoolean>;
77
+ }, z.core.$strip>;
78
+ export type NcSchedule = z.infer<typeof NcScheduleSchema>;
79
+ /** Fuzzy plate matcher — OCR noise makes exact match useless (spec row 12/13). */
80
+ export declare const NcPlateMatcherSchema: z.ZodObject<{
81
+ values: z.ZodArray<z.ZodString>;
82
+ maxDistance: z.ZodDefault<z.ZodNumber>;
83
+ }, z.core.$strip>;
84
+ export type NcPlateMatcher = z.infer<typeof NcPlateMatcherSchema>;
85
+ /**
86
+ * Occupancy condition (DEVICE-EVENT trigger). Fires on a ZoneAnalytics
87
+ * occupancy edge for a device — optionally narrowed to a single admin
88
+ * `zoneId` and/or object `className`. `op` selects the edge/threshold:
89
+ * - `became-occupied` (default) — count crossed 0 → ≥ `count`
90
+ * - `became-free` — count crossed ≥ `count` → below it
91
+ * - `>=` / `<=` — count is at/over or at/under `count`
92
+ * `sustainSeconds` requires the condition hold continuously that long
93
+ * before firing (debounces flicker; 0 = fire on the first matching edge).
94
+ * Fail-closed: no ZoneAnalytics snapshot / missing zone / null snapshot ⇒
95
+ * the condition never matches. Confirmed edge-state survives addon restarts
96
+ * (declared SQLite collection, reseeded on boot).
97
+ */
98
+ export declare const NcOccupancyConditionSchema: z.ZodObject<{
99
+ zoneId: z.ZodOptional<z.ZodString>;
100
+ className: z.ZodOptional<z.ZodString>;
101
+ op: z.ZodDefault<z.ZodEnum<{
102
+ "<=": "<=";
103
+ ">=": ">=";
104
+ "became-occupied": "became-occupied";
105
+ "became-free": "became-free";
106
+ }>>;
107
+ count: z.ZodDefault<z.ZodNumber>;
108
+ sustainSeconds: z.ZodDefault<z.ZodNumber>;
109
+ }, z.core.$strip>;
110
+ export type NcOccupancyCondition = z.infer<typeof NcOccupancyConditionSchema>;
111
+ /** Admin-zone membership condition (zone IDs as stamped by the ZoneEngine). */
112
+ export declare const NcZoneConditionSchema: z.ZodObject<{
113
+ ids: z.ZodArray<z.ZodString>;
114
+ match: z.ZodDefault<z.ZodEnum<{
115
+ any: "any";
116
+ all: "all";
117
+ }>>;
118
+ }, z.core.$strip>;
119
+ export type NcZoneCondition = z.infer<typeof NcZoneConditionSchema>;
120
+ /**
121
+ * The P1 condition set — a flat AND of groups; absent group = pass;
122
+ * membership lists are OR within the list (spec §2.3).
123
+ */
124
+ export declare const NcConditionsSchema: z.ZodObject<{
125
+ devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
126
+ classes: z.ZodOptional<z.ZodArray<z.ZodString>>;
127
+ classesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
128
+ minConfidence: z.ZodOptional<z.ZodNumber>;
129
+ zones: z.ZodOptional<z.ZodObject<{
130
+ ids: z.ZodArray<z.ZodString>;
131
+ match: z.ZodDefault<z.ZodEnum<{
132
+ any: "any";
133
+ all: "all";
134
+ }>>;
135
+ }, z.core.$strip>>;
136
+ zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
137
+ labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
138
+ identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
139
+ plates: z.ZodOptional<z.ZodObject<{
140
+ values: z.ZodArray<z.ZodString>;
141
+ maxDistance: z.ZodDefault<z.ZodNumber>;
142
+ }, z.core.$strip>>;
143
+ identitiesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
144
+ minImportance: z.ZodOptional<z.ZodNumber>;
145
+ minDwellSeconds: z.ZodOptional<z.ZodNumber>;
146
+ source: z.ZodOptional<z.ZodEnum<{
147
+ sensor: "sensor";
148
+ any: "any";
149
+ pipeline: "pipeline";
150
+ onboard: "onboard";
151
+ }>>;
152
+ minLabelConfidence: z.ZodOptional<z.ZodNumber>;
153
+ eventTypeTokens: z.ZodOptional<z.ZodArray<z.ZodString>>;
154
+ sensorKinds: z.ZodOptional<z.ZodArray<z.ZodString>>;
155
+ packagePhase: z.ZodOptional<z.ZodEnum<{
156
+ both: "both";
157
+ delivered: "delivered";
158
+ "picked-up": "picked-up";
159
+ }>>;
160
+ customZones: z.ZodOptional<z.ZodArray<z.ZodObject<{
161
+ kind: z.ZodLiteral<"polygon">;
162
+ points: z.ZodArray<z.ZodObject<{
163
+ x: z.ZodNumber;
164
+ y: z.ZodNumber;
165
+ }, z.core.$strip>>;
166
+ }, z.core.$strip>>>;
167
+ occupancy: z.ZodOptional<z.ZodObject<{
168
+ zoneId: z.ZodOptional<z.ZodString>;
169
+ className: z.ZodOptional<z.ZodString>;
170
+ op: z.ZodDefault<z.ZodEnum<{
171
+ "<=": "<=";
172
+ ">=": ">=";
173
+ "became-occupied": "became-occupied";
174
+ "became-free": "became-free";
175
+ }>>;
176
+ count: z.ZodDefault<z.ZodNumber>;
177
+ sustainSeconds: z.ZodDefault<z.ZodNumber>;
178
+ }, z.core.$strip>>;
179
+ }, z.core.$strip>;
180
+ export type NcConditions = z.infer<typeof NcConditionsSchema>;
181
+ /** One delivery target: a `notification-output` Target ref + passthrough params. */
182
+ export declare const NcRuleTargetSchema: z.ZodObject<{
183
+ targetId: z.ZodString;
184
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
185
+ }, z.core.$strip>;
186
+ export type NcRuleTarget = z.infer<typeof NcRuleTargetSchema>;
187
+ /**
188
+ * Media attachment policy (P1 still-image subset).
189
+ * - `best` — the best AVAILABLE subject image at dispatch time (D-3).
190
+ * - `best-matching` — the media that explains WHY the rule fired: a rule
191
+ * matched on identities attaches the subject's `faceCrop`, one matched on
192
+ * plates attaches the `plateCrop`; a rule with no identity/plate condition
193
+ * (or when the specific crop is missing) degrades to `best`, then
194
+ * `keyFrame`, then no attachment — never delaying the send. The matched
195
+ * condition summary is frozen on the outbox row at enqueue (like the rule
196
+ * name), so the choice never drifts from the record that fired it.
197
+ * - `keyFrame` — the clean scene frame (no subject box).
198
+ * - `none` — no attachment.
199
+ */
200
+ export declare const NcMediaPolicySchema: z.ZodObject<{
201
+ attach: z.ZodDefault<z.ZodEnum<{
202
+ none: "none";
203
+ best: "best";
204
+ "best-matching": "best-matching";
205
+ keyFrame: "keyFrame";
206
+ }>>;
207
+ }, z.core.$strip>;
208
+ export type NcMediaPolicy = z.infer<typeof NcMediaPolicySchema>;
209
+ /** Throttle — cooldown survives restarts (rebuilt from the outbox on boot). */
210
+ export declare const NcThrottleSchema: z.ZodObject<{
211
+ cooldownSec: z.ZodDefault<z.ZodNumber>;
212
+ scope: z.ZodDefault<z.ZodEnum<{
213
+ rule: "rule";
214
+ "rule-device": "rule-device";
215
+ }>>;
216
+ }, z.core.$strip>;
217
+ export type NcThrottle = z.infer<typeof NcThrottleSchema>;
218
+ /** Client-supplied rule fields (server stamps id/createdBy/createdAt/updatedAt). */
219
+ export declare const NcRuleInputSchema: z.ZodObject<{
220
+ name: z.ZodString;
221
+ enabled: z.ZodDefault<z.ZodBoolean>;
222
+ delivery: z.ZodEnum<{
223
+ immediate: "immediate";
224
+ "track-end": "track-end";
225
+ "device-event": "device-event";
226
+ "package-event": "package-event";
227
+ }>;
228
+ conditions: z.ZodDefault<z.ZodObject<{
229
+ devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
230
+ classes: z.ZodOptional<z.ZodArray<z.ZodString>>;
231
+ classesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
232
+ minConfidence: z.ZodOptional<z.ZodNumber>;
233
+ zones: z.ZodOptional<z.ZodObject<{
234
+ ids: z.ZodArray<z.ZodString>;
235
+ match: z.ZodDefault<z.ZodEnum<{
236
+ any: "any";
237
+ all: "all";
238
+ }>>;
239
+ }, z.core.$strip>>;
240
+ zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
241
+ labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
242
+ identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
243
+ plates: z.ZodOptional<z.ZodObject<{
244
+ values: z.ZodArray<z.ZodString>;
245
+ maxDistance: z.ZodDefault<z.ZodNumber>;
246
+ }, z.core.$strip>>;
247
+ identitiesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
248
+ minImportance: z.ZodOptional<z.ZodNumber>;
249
+ minDwellSeconds: z.ZodOptional<z.ZodNumber>;
250
+ source: z.ZodOptional<z.ZodEnum<{
251
+ sensor: "sensor";
252
+ any: "any";
253
+ pipeline: "pipeline";
254
+ onboard: "onboard";
255
+ }>>;
256
+ minLabelConfidence: z.ZodOptional<z.ZodNumber>;
257
+ eventTypeTokens: z.ZodOptional<z.ZodArray<z.ZodString>>;
258
+ sensorKinds: z.ZodOptional<z.ZodArray<z.ZodString>>;
259
+ packagePhase: z.ZodOptional<z.ZodEnum<{
260
+ both: "both";
261
+ delivered: "delivered";
262
+ "picked-up": "picked-up";
263
+ }>>;
264
+ customZones: z.ZodOptional<z.ZodArray<z.ZodObject<{
265
+ kind: z.ZodLiteral<"polygon">;
266
+ points: z.ZodArray<z.ZodObject<{
267
+ x: z.ZodNumber;
268
+ y: z.ZodNumber;
269
+ }, z.core.$strip>>;
270
+ }, z.core.$strip>>>;
271
+ occupancy: z.ZodOptional<z.ZodObject<{
272
+ zoneId: z.ZodOptional<z.ZodString>;
273
+ className: z.ZodOptional<z.ZodString>;
274
+ op: z.ZodDefault<z.ZodEnum<{
275
+ "<=": "<=";
276
+ ">=": ">=";
277
+ "became-occupied": "became-occupied";
278
+ "became-free": "became-free";
279
+ }>>;
280
+ count: z.ZodDefault<z.ZodNumber>;
281
+ sustainSeconds: z.ZodDefault<z.ZodNumber>;
282
+ }, z.core.$strip>>;
283
+ }, z.core.$strip>>;
284
+ schedule: z.ZodOptional<z.ZodObject<{
285
+ windows: z.ZodArray<z.ZodObject<{
286
+ days: z.ZodArray<z.ZodNumber>;
287
+ startMinute: z.ZodNumber;
288
+ endMinute: z.ZodNumber;
289
+ }, z.core.$strip>>;
290
+ timezone: z.ZodOptional<z.ZodString>;
291
+ invert: z.ZodOptional<z.ZodBoolean>;
292
+ }, z.core.$strip>>;
293
+ targets: z.ZodArray<z.ZodObject<{
294
+ targetId: z.ZodString;
295
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
296
+ }, z.core.$strip>>;
297
+ media: z.ZodDefault<z.ZodObject<{
298
+ attach: z.ZodDefault<z.ZodEnum<{
299
+ none: "none";
300
+ best: "best";
301
+ "best-matching": "best-matching";
302
+ keyFrame: "keyFrame";
303
+ }>>;
304
+ }, z.core.$strip>>;
305
+ throttle: z.ZodDefault<z.ZodObject<{
306
+ cooldownSec: z.ZodDefault<z.ZodNumber>;
307
+ scope: z.ZodDefault<z.ZodEnum<{
308
+ rule: "rule";
309
+ "rule-device": "rule-device";
310
+ }>>;
311
+ }, z.core.$strip>>;
312
+ template: z.ZodOptional<z.ZodObject<{
313
+ title: z.ZodOptional<z.ZodString>;
314
+ body: z.ZodOptional<z.ZodString>;
315
+ }, z.core.$strip>>;
316
+ priority: z.ZodDefault<z.ZodNumber>;
317
+ ownerUserId: z.ZodOptional<z.ZodString>;
318
+ }, z.core.$strip>;
319
+ export type NcRuleInput = z.infer<typeof NcRuleInputSchema>;
320
+ /**
321
+ * Partial patch for `updateRule` — any subset of the input fields, plus the
322
+ * persisted-only {@link NcRuleSchema} `disabledTargetIds` set. The latter is
323
+ * NOT a client-authored input field (it lives on the persisted rule, not the
324
+ * input), so it is added here explicitly to let the store's per-target opt-out
325
+ * toggle round-trip through the shared `update` path. Viewer opt-out mutations
326
+ * still flow through `nc.setRuleTargetEnabled` (owner-checked), never a raw
327
+ * `updateRule` patch.
328
+ */
329
+ export declare const NcRulePatchSchema: z.ZodObject<{
330
+ name: z.ZodOptional<z.ZodString>;
331
+ enabled: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
332
+ delivery: z.ZodOptional<z.ZodEnum<{
333
+ immediate: "immediate";
334
+ "track-end": "track-end";
335
+ "device-event": "device-event";
336
+ "package-event": "package-event";
337
+ }>>;
338
+ conditions: z.ZodOptional<z.ZodDefault<z.ZodObject<{
339
+ devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
340
+ classes: z.ZodOptional<z.ZodArray<z.ZodString>>;
341
+ classesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
342
+ minConfidence: z.ZodOptional<z.ZodNumber>;
343
+ zones: z.ZodOptional<z.ZodObject<{
344
+ ids: z.ZodArray<z.ZodString>;
345
+ match: z.ZodDefault<z.ZodEnum<{
346
+ any: "any";
347
+ all: "all";
348
+ }>>;
349
+ }, z.core.$strip>>;
350
+ zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
351
+ labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
352
+ identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
353
+ plates: z.ZodOptional<z.ZodObject<{
354
+ values: z.ZodArray<z.ZodString>;
355
+ maxDistance: z.ZodDefault<z.ZodNumber>;
356
+ }, z.core.$strip>>;
357
+ identitiesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
358
+ minImportance: z.ZodOptional<z.ZodNumber>;
359
+ minDwellSeconds: z.ZodOptional<z.ZodNumber>;
360
+ source: z.ZodOptional<z.ZodEnum<{
361
+ sensor: "sensor";
362
+ any: "any";
363
+ pipeline: "pipeline";
364
+ onboard: "onboard";
365
+ }>>;
366
+ minLabelConfidence: z.ZodOptional<z.ZodNumber>;
367
+ eventTypeTokens: z.ZodOptional<z.ZodArray<z.ZodString>>;
368
+ sensorKinds: z.ZodOptional<z.ZodArray<z.ZodString>>;
369
+ packagePhase: z.ZodOptional<z.ZodEnum<{
370
+ both: "both";
371
+ delivered: "delivered";
372
+ "picked-up": "picked-up";
373
+ }>>;
374
+ customZones: z.ZodOptional<z.ZodArray<z.ZodObject<{
375
+ kind: z.ZodLiteral<"polygon">;
376
+ points: z.ZodArray<z.ZodObject<{
377
+ x: z.ZodNumber;
378
+ y: z.ZodNumber;
379
+ }, z.core.$strip>>;
380
+ }, z.core.$strip>>>;
381
+ occupancy: z.ZodOptional<z.ZodObject<{
382
+ zoneId: z.ZodOptional<z.ZodString>;
383
+ className: z.ZodOptional<z.ZodString>;
384
+ op: z.ZodDefault<z.ZodEnum<{
385
+ "<=": "<=";
386
+ ">=": ">=";
387
+ "became-occupied": "became-occupied";
388
+ "became-free": "became-free";
389
+ }>>;
390
+ count: z.ZodDefault<z.ZodNumber>;
391
+ sustainSeconds: z.ZodDefault<z.ZodNumber>;
392
+ }, z.core.$strip>>;
393
+ }, z.core.$strip>>>;
394
+ schedule: z.ZodOptional<z.ZodOptional<z.ZodObject<{
395
+ windows: z.ZodArray<z.ZodObject<{
396
+ days: z.ZodArray<z.ZodNumber>;
397
+ startMinute: z.ZodNumber;
398
+ endMinute: z.ZodNumber;
399
+ }, z.core.$strip>>;
400
+ timezone: z.ZodOptional<z.ZodString>;
401
+ invert: z.ZodOptional<z.ZodBoolean>;
402
+ }, z.core.$strip>>>;
403
+ targets: z.ZodOptional<z.ZodArray<z.ZodObject<{
404
+ targetId: z.ZodString;
405
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
406
+ }, z.core.$strip>>>;
407
+ media: z.ZodOptional<z.ZodDefault<z.ZodObject<{
408
+ attach: z.ZodDefault<z.ZodEnum<{
409
+ none: "none";
410
+ best: "best";
411
+ "best-matching": "best-matching";
412
+ keyFrame: "keyFrame";
413
+ }>>;
414
+ }, z.core.$strip>>>;
415
+ throttle: z.ZodOptional<z.ZodDefault<z.ZodObject<{
416
+ cooldownSec: z.ZodDefault<z.ZodNumber>;
417
+ scope: z.ZodDefault<z.ZodEnum<{
418
+ rule: "rule";
419
+ "rule-device": "rule-device";
420
+ }>>;
421
+ }, z.core.$strip>>>;
422
+ template: z.ZodOptional<z.ZodOptional<z.ZodObject<{
423
+ title: z.ZodOptional<z.ZodString>;
424
+ body: z.ZodOptional<z.ZodString>;
425
+ }, z.core.$strip>>>;
426
+ priority: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
427
+ ownerUserId: z.ZodOptional<z.ZodOptional<z.ZodString>>;
428
+ disabledTargetIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
429
+ }, z.core.$strip>;
430
+ export type NcRulePatch = z.infer<typeof NcRulePatchSchema>;
431
+ /** A persisted rule. */
432
+ export declare const NcRuleSchema: z.ZodObject<{
433
+ name: z.ZodString;
434
+ enabled: z.ZodDefault<z.ZodBoolean>;
435
+ delivery: z.ZodEnum<{
436
+ immediate: "immediate";
437
+ "track-end": "track-end";
438
+ "device-event": "device-event";
439
+ "package-event": "package-event";
440
+ }>;
441
+ conditions: z.ZodDefault<z.ZodObject<{
442
+ devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
443
+ classes: z.ZodOptional<z.ZodArray<z.ZodString>>;
444
+ classesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
445
+ minConfidence: z.ZodOptional<z.ZodNumber>;
446
+ zones: z.ZodOptional<z.ZodObject<{
447
+ ids: z.ZodArray<z.ZodString>;
448
+ match: z.ZodDefault<z.ZodEnum<{
449
+ any: "any";
450
+ all: "all";
451
+ }>>;
452
+ }, z.core.$strip>>;
453
+ zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
454
+ labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
455
+ identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
456
+ plates: z.ZodOptional<z.ZodObject<{
457
+ values: z.ZodArray<z.ZodString>;
458
+ maxDistance: z.ZodDefault<z.ZodNumber>;
459
+ }, z.core.$strip>>;
460
+ identitiesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
461
+ minImportance: z.ZodOptional<z.ZodNumber>;
462
+ minDwellSeconds: z.ZodOptional<z.ZodNumber>;
463
+ source: z.ZodOptional<z.ZodEnum<{
464
+ sensor: "sensor";
465
+ any: "any";
466
+ pipeline: "pipeline";
467
+ onboard: "onboard";
468
+ }>>;
469
+ minLabelConfidence: z.ZodOptional<z.ZodNumber>;
470
+ eventTypeTokens: z.ZodOptional<z.ZodArray<z.ZodString>>;
471
+ sensorKinds: z.ZodOptional<z.ZodArray<z.ZodString>>;
472
+ packagePhase: z.ZodOptional<z.ZodEnum<{
473
+ both: "both";
474
+ delivered: "delivered";
475
+ "picked-up": "picked-up";
476
+ }>>;
477
+ customZones: z.ZodOptional<z.ZodArray<z.ZodObject<{
478
+ kind: z.ZodLiteral<"polygon">;
479
+ points: z.ZodArray<z.ZodObject<{
480
+ x: z.ZodNumber;
481
+ y: z.ZodNumber;
482
+ }, z.core.$strip>>;
483
+ }, z.core.$strip>>>;
484
+ occupancy: z.ZodOptional<z.ZodObject<{
485
+ zoneId: z.ZodOptional<z.ZodString>;
486
+ className: z.ZodOptional<z.ZodString>;
487
+ op: z.ZodDefault<z.ZodEnum<{
488
+ "<=": "<=";
489
+ ">=": ">=";
490
+ "became-occupied": "became-occupied";
491
+ "became-free": "became-free";
492
+ }>>;
493
+ count: z.ZodDefault<z.ZodNumber>;
494
+ sustainSeconds: z.ZodDefault<z.ZodNumber>;
495
+ }, z.core.$strip>>;
496
+ }, z.core.$strip>>;
497
+ schedule: z.ZodOptional<z.ZodObject<{
498
+ windows: z.ZodArray<z.ZodObject<{
499
+ days: z.ZodArray<z.ZodNumber>;
500
+ startMinute: z.ZodNumber;
501
+ endMinute: z.ZodNumber;
502
+ }, z.core.$strip>>;
503
+ timezone: z.ZodOptional<z.ZodString>;
504
+ invert: z.ZodOptional<z.ZodBoolean>;
505
+ }, z.core.$strip>>;
506
+ targets: z.ZodArray<z.ZodObject<{
507
+ targetId: z.ZodString;
508
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
509
+ }, z.core.$strip>>;
510
+ media: z.ZodDefault<z.ZodObject<{
511
+ attach: z.ZodDefault<z.ZodEnum<{
512
+ none: "none";
513
+ best: "best";
514
+ "best-matching": "best-matching";
515
+ keyFrame: "keyFrame";
516
+ }>>;
517
+ }, z.core.$strip>>;
518
+ throttle: z.ZodDefault<z.ZodObject<{
519
+ cooldownSec: z.ZodDefault<z.ZodNumber>;
520
+ scope: z.ZodDefault<z.ZodEnum<{
521
+ rule: "rule";
522
+ "rule-device": "rule-device";
523
+ }>>;
524
+ }, z.core.$strip>>;
525
+ template: z.ZodOptional<z.ZodObject<{
526
+ title: z.ZodOptional<z.ZodString>;
527
+ body: z.ZodOptional<z.ZodString>;
528
+ }, z.core.$strip>>;
529
+ priority: z.ZodDefault<z.ZodNumber>;
530
+ ownerUserId: z.ZodOptional<z.ZodString>;
531
+ id: z.ZodString;
532
+ createdBy: z.ZodString;
533
+ createdAt: z.ZodNumber;
534
+ updatedAt: z.ZodNumber;
535
+ disabledTargetIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
536
+ }, z.core.$strip>;
537
+ export type NcRule = z.infer<typeof NcRuleSchema>;
538
+ export declare const NcTestResultSchema: z.ZodObject<{
539
+ recordId: z.ZodString;
540
+ recordKind: z.ZodEnum<{
541
+ "device-event": "device-event";
542
+ "package-event": "package-event";
543
+ "object-event": "object-event";
544
+ track: "track";
545
+ }>;
546
+ deviceId: z.ZodNumber;
547
+ timestamp: z.ZodNumber;
548
+ wouldFire: z.ZodBoolean;
549
+ failedCondition: z.ZodOptional<z.ZodString>;
550
+ className: z.ZodOptional<z.ZodString>;
551
+ label: z.ZodOptional<z.ZodString>;
552
+ }, z.core.$strip>;
553
+ export type NcTestResult = z.infer<typeof NcTestResultSchema>;
554
+ export declare const NcConditionDescriptorSchema: z.ZodObject<{
555
+ id: z.ZodString;
556
+ group: z.ZodEnum<{
557
+ device: "device";
558
+ label: "label";
559
+ scope: "scope";
560
+ class: "class";
561
+ schedule: "schedule";
562
+ zones: "zones";
563
+ package: "package";
564
+ occupancy: "occupancy";
565
+ quality: "quality";
566
+ }>;
567
+ label: z.ZodString;
568
+ valueType: z.ZodEnum<{
569
+ number: "number";
570
+ schedule: "schedule";
571
+ packagePhase: "packagePhase";
572
+ occupancy: "occupancy";
573
+ deviceIdList: "deviceIdList";
574
+ stringList: "stringList";
575
+ number01: "number01";
576
+ sourceSelect: "sourceSelect";
577
+ zoneSelection: "zoneSelection";
578
+ zoneIdList: "zoneIdList";
579
+ plateMatcher: "plateMatcher";
580
+ polygonDraw: "polygonDraw";
581
+ }>;
582
+ operator: z.ZodEnum<{
583
+ in: "in";
584
+ notIn: "notIn";
585
+ anyOf: "anyOf";
586
+ allOf: "allOf";
587
+ gte: "gte";
588
+ fuzzyIn: "fuzzyIn";
589
+ withinSchedule: "withinSchedule";
590
+ }>;
591
+ appliesTo: z.ZodArray<z.ZodEnum<{
592
+ immediate: "immediate";
593
+ "track-end": "track-end";
594
+ "device-event": "device-event";
595
+ "package-event": "package-event";
596
+ }>>;
597
+ phase: z.ZodString;
598
+ description: z.ZodOptional<z.ZodString>;
599
+ }, z.core.$strip>;
600
+ export type NcConditionDescriptor = z.infer<typeof NcConditionDescriptorSchema>;
601
+ /**
602
+ * The P1 condition surface as data — served by `getConditionCatalog` so
603
+ * rule editors render from the catalog, not hardcoded forms (spec §4.2).
604
+ */
605
+ export declare const NC_CONDITION_CATALOG: readonly NcConditionDescriptor[];
606
+ /**
607
+ * The delivery lifecycle status of a history row — a straight read of the
608
+ * durable outbox row's own status (single source of truth):
609
+ * - `pending` — enqueued, in-flight or retrying with backoff
610
+ * - `sent` — delivered (terminal)
611
+ * - `dead` — dead-lettered after exhausting retries / a permanent
612
+ * backend rejection / a deleted target (terminal; carries
613
+ * the failure `error`)
614
+ *
615
+ * P1 has no `suppressed-quiet-hours` / `snoozed` states — those ride the P2
616
+ * user dimension (quiet hours / snooze) and are additive when they land.
617
+ */
618
+ export declare const NcHistoryStatusSchema: z.ZodEnum<{
619
+ pending: "pending";
620
+ sent: "sent";
621
+ dead: "dead";
622
+ }>;
623
+ export type NcHistoryStatus = z.infer<typeof NcHistoryStatusSchema>;
624
+ /** The evaluated record kind a history row descends from (one per trigger). */
625
+ export declare const NcHistoryRecordKindSchema: z.ZodEnum<{
626
+ "track-end": "track-end";
627
+ "device-event": "device-event";
628
+ "package-event": "package-event";
629
+ "object-event": "object-event";
630
+ }>;
631
+ export type NcHistoryRecordKind = z.infer<typeof NcHistoryRecordKindSchema>;
632
+ /** Subject summary frozen on the row at fire time (survives rule/record edits). */
633
+ export declare const NcHistorySubjectSchema: z.ZodObject<{
634
+ className: z.ZodString;
635
+ label: z.ZodOptional<z.ZodString>;
636
+ confidence: z.ZodOptional<z.ZodNumber>;
637
+ zones: z.ZodArray<z.ZodString>;
638
+ timestamp: z.ZodNumber;
639
+ }, z.core.$strip>;
640
+ export type NcHistorySubject = z.infer<typeof NcHistorySubjectSchema>;
641
+ /**
642
+ * One delivery-history row. This is a read-only VIEW over the durable
643
+ * outbox row (single source of truth — the same row the drain loop drives;
644
+ * NO second write path, so history can never drift from delivery state).
645
+ * The §3.2 fields map directly: `ruleId`/`targetId`/`deviceId` are columns,
646
+ * `eventRef` is `recordKind`+`recordId`, `timestamps` are `createdAt`
647
+ * (fire) / `updatedAt` (last transition), `status` + `error` are the
648
+ * lifecycle. `ruleName` + `subject` are the intent snapshot frozen at
649
+ * enqueue. `userId?` (per-recipient history) is P2 — no user dimension in
650
+ * P1 (admin scope only).
651
+ */
652
+ export declare const NcHistoryEntrySchema: z.ZodObject<{
653
+ id: z.ZodString;
654
+ ruleId: z.ZodString;
655
+ ruleName: z.ZodString;
656
+ delivery: z.ZodEnum<{
657
+ immediate: "immediate";
658
+ "track-end": "track-end";
659
+ "device-event": "device-event";
660
+ "package-event": "package-event";
661
+ }>;
662
+ targetId: z.ZodString;
663
+ deviceId: z.ZodNumber;
664
+ recordKind: z.ZodEnum<{
665
+ "track-end": "track-end";
666
+ "device-event": "device-event";
667
+ "package-event": "package-event";
668
+ "object-event": "object-event";
669
+ }>;
670
+ recordId: z.ZodString;
671
+ trackId: z.ZodOptional<z.ZodString>;
672
+ status: z.ZodEnum<{
673
+ pending: "pending";
674
+ sent: "sent";
675
+ dead: "dead";
676
+ }>;
677
+ attempts: z.ZodNumber;
678
+ createdAt: z.ZodNumber;
679
+ updatedAt: z.ZodNumber;
680
+ error: z.ZodOptional<z.ZodString>;
681
+ subject: z.ZodObject<{
682
+ className: z.ZodString;
683
+ label: z.ZodOptional<z.ZodString>;
684
+ confidence: z.ZodOptional<z.ZodNumber>;
685
+ zones: z.ZodArray<z.ZodString>;
686
+ timestamp: z.ZodNumber;
687
+ }, z.core.$strip>;
688
+ }, z.core.$strip>;
689
+ export type NcHistoryEntry = z.infer<typeof NcHistoryEntrySchema>;
690
+ /** `getHistory` default page size + hard ceiling (bounded output). */
691
+ export declare const NC_HISTORY_LIMIT_DEFAULT = 100;
692
+ export declare const NC_HISTORY_LIMIT_MAX = 500;
693
+ /**
694
+ * Query filter for `getHistory` (spec §4.2). Every field is a narrowing
695
+ * AND; absent = unbounded on that axis. `since`/`until` bound the fire time
696
+ * (`createdAt`, epoch ms, inclusive). `limit` is clamped to
697
+ * {@link NC_HISTORY_LIMIT_MAX}. `userId` (per-recipient filtering) is P2.
698
+ */
699
+ export declare const NcHistoryFilterSchema: z.ZodObject<{
700
+ ruleId: z.ZodOptional<z.ZodString>;
701
+ deviceId: z.ZodOptional<z.ZodNumber>;
702
+ status: z.ZodOptional<z.ZodEnum<{
703
+ pending: "pending";
704
+ sent: "sent";
705
+ dead: "dead";
706
+ }>>;
707
+ since: z.ZodOptional<z.ZodNumber>;
708
+ until: z.ZodOptional<z.ZodNumber>;
709
+ limit: z.ZodDefault<z.ZodNumber>;
710
+ }, z.core.$strip>;
711
+ export type NcHistoryFilter = z.infer<typeof NcHistoryFilterSchema>;
712
+ export declare const notificationRulesCapability: {
713
+ readonly name: "notification-rules";
714
+ readonly scope: "system";
715
+ readonly mode: "singleton";
716
+ readonly methods: {
717
+ readonly listRules: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{}, z.core.$strip>, z.ZodObject<{
718
+ rules: z.ZodArray<z.ZodObject<{
719
+ name: z.ZodString;
720
+ enabled: z.ZodDefault<z.ZodBoolean>;
721
+ delivery: z.ZodEnum<{
722
+ immediate: "immediate";
723
+ "track-end": "track-end";
724
+ "device-event": "device-event";
725
+ "package-event": "package-event";
726
+ }>;
727
+ conditions: z.ZodDefault<z.ZodObject<{
728
+ devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
729
+ classes: z.ZodOptional<z.ZodArray<z.ZodString>>;
730
+ classesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
731
+ minConfidence: z.ZodOptional<z.ZodNumber>;
732
+ zones: z.ZodOptional<z.ZodObject<{
733
+ ids: z.ZodArray<z.ZodString>;
734
+ match: z.ZodDefault<z.ZodEnum<{
735
+ any: "any";
736
+ all: "all";
737
+ }>>;
738
+ }, z.core.$strip>>;
739
+ zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
740
+ labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
741
+ identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
742
+ plates: z.ZodOptional<z.ZodObject<{
743
+ values: z.ZodArray<z.ZodString>;
744
+ maxDistance: z.ZodDefault<z.ZodNumber>;
745
+ }, z.core.$strip>>;
746
+ identitiesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
747
+ minImportance: z.ZodOptional<z.ZodNumber>;
748
+ minDwellSeconds: z.ZodOptional<z.ZodNumber>;
749
+ source: z.ZodOptional<z.ZodEnum<{
750
+ sensor: "sensor";
751
+ any: "any";
752
+ pipeline: "pipeline";
753
+ onboard: "onboard";
754
+ }>>;
755
+ minLabelConfidence: z.ZodOptional<z.ZodNumber>;
756
+ eventTypeTokens: z.ZodOptional<z.ZodArray<z.ZodString>>;
757
+ sensorKinds: z.ZodOptional<z.ZodArray<z.ZodString>>;
758
+ packagePhase: z.ZodOptional<z.ZodEnum<{
759
+ both: "both";
760
+ delivered: "delivered";
761
+ "picked-up": "picked-up";
762
+ }>>;
763
+ customZones: z.ZodOptional<z.ZodArray<z.ZodObject<{
764
+ kind: z.ZodLiteral<"polygon">;
765
+ points: z.ZodArray<z.ZodObject<{
766
+ x: z.ZodNumber;
767
+ y: z.ZodNumber;
768
+ }, z.core.$strip>>;
769
+ }, z.core.$strip>>>;
770
+ occupancy: z.ZodOptional<z.ZodObject<{
771
+ zoneId: z.ZodOptional<z.ZodString>;
772
+ className: z.ZodOptional<z.ZodString>;
773
+ op: z.ZodDefault<z.ZodEnum<{
774
+ "<=": "<=";
775
+ ">=": ">=";
776
+ "became-occupied": "became-occupied";
777
+ "became-free": "became-free";
778
+ }>>;
779
+ count: z.ZodDefault<z.ZodNumber>;
780
+ sustainSeconds: z.ZodDefault<z.ZodNumber>;
781
+ }, z.core.$strip>>;
782
+ }, z.core.$strip>>;
783
+ schedule: z.ZodOptional<z.ZodObject<{
784
+ windows: z.ZodArray<z.ZodObject<{
785
+ days: z.ZodArray<z.ZodNumber>;
786
+ startMinute: z.ZodNumber;
787
+ endMinute: z.ZodNumber;
788
+ }, z.core.$strip>>;
789
+ timezone: z.ZodOptional<z.ZodString>;
790
+ invert: z.ZodOptional<z.ZodBoolean>;
791
+ }, z.core.$strip>>;
792
+ targets: z.ZodArray<z.ZodObject<{
793
+ targetId: z.ZodString;
794
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
795
+ }, z.core.$strip>>;
796
+ media: z.ZodDefault<z.ZodObject<{
797
+ attach: z.ZodDefault<z.ZodEnum<{
798
+ none: "none";
799
+ best: "best";
800
+ "best-matching": "best-matching";
801
+ keyFrame: "keyFrame";
802
+ }>>;
803
+ }, z.core.$strip>>;
804
+ throttle: z.ZodDefault<z.ZodObject<{
805
+ cooldownSec: z.ZodDefault<z.ZodNumber>;
806
+ scope: z.ZodDefault<z.ZodEnum<{
807
+ rule: "rule";
808
+ "rule-device": "rule-device";
809
+ }>>;
810
+ }, z.core.$strip>>;
811
+ template: z.ZodOptional<z.ZodObject<{
812
+ title: z.ZodOptional<z.ZodString>;
813
+ body: z.ZodOptional<z.ZodString>;
814
+ }, z.core.$strip>>;
815
+ priority: z.ZodDefault<z.ZodNumber>;
816
+ ownerUserId: z.ZodOptional<z.ZodString>;
817
+ id: z.ZodString;
818
+ createdBy: z.ZodString;
819
+ createdAt: z.ZodNumber;
820
+ updatedAt: z.ZodNumber;
821
+ disabledTargetIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
822
+ }, z.core.$strip>>;
823
+ }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
824
+ readonly getRule: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
825
+ ruleId: z.ZodString;
826
+ }, z.core.$strip>, z.ZodObject<{
827
+ rule: z.ZodNullable<z.ZodObject<{
828
+ name: z.ZodString;
829
+ enabled: z.ZodDefault<z.ZodBoolean>;
830
+ delivery: z.ZodEnum<{
831
+ immediate: "immediate";
832
+ "track-end": "track-end";
833
+ "device-event": "device-event";
834
+ "package-event": "package-event";
835
+ }>;
836
+ conditions: z.ZodDefault<z.ZodObject<{
837
+ devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
838
+ classes: z.ZodOptional<z.ZodArray<z.ZodString>>;
839
+ classesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
840
+ minConfidence: z.ZodOptional<z.ZodNumber>;
841
+ zones: z.ZodOptional<z.ZodObject<{
842
+ ids: z.ZodArray<z.ZodString>;
843
+ match: z.ZodDefault<z.ZodEnum<{
844
+ any: "any";
845
+ all: "all";
846
+ }>>;
847
+ }, z.core.$strip>>;
848
+ zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
849
+ labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
850
+ identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
851
+ plates: z.ZodOptional<z.ZodObject<{
852
+ values: z.ZodArray<z.ZodString>;
853
+ maxDistance: z.ZodDefault<z.ZodNumber>;
854
+ }, z.core.$strip>>;
855
+ identitiesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
856
+ minImportance: z.ZodOptional<z.ZodNumber>;
857
+ minDwellSeconds: z.ZodOptional<z.ZodNumber>;
858
+ source: z.ZodOptional<z.ZodEnum<{
859
+ sensor: "sensor";
860
+ any: "any";
861
+ pipeline: "pipeline";
862
+ onboard: "onboard";
863
+ }>>;
864
+ minLabelConfidence: z.ZodOptional<z.ZodNumber>;
865
+ eventTypeTokens: z.ZodOptional<z.ZodArray<z.ZodString>>;
866
+ sensorKinds: z.ZodOptional<z.ZodArray<z.ZodString>>;
867
+ packagePhase: z.ZodOptional<z.ZodEnum<{
868
+ both: "both";
869
+ delivered: "delivered";
870
+ "picked-up": "picked-up";
871
+ }>>;
872
+ customZones: z.ZodOptional<z.ZodArray<z.ZodObject<{
873
+ kind: z.ZodLiteral<"polygon">;
874
+ points: z.ZodArray<z.ZodObject<{
875
+ x: z.ZodNumber;
876
+ y: z.ZodNumber;
877
+ }, z.core.$strip>>;
878
+ }, z.core.$strip>>>;
879
+ occupancy: z.ZodOptional<z.ZodObject<{
880
+ zoneId: z.ZodOptional<z.ZodString>;
881
+ className: z.ZodOptional<z.ZodString>;
882
+ op: z.ZodDefault<z.ZodEnum<{
883
+ "<=": "<=";
884
+ ">=": ">=";
885
+ "became-occupied": "became-occupied";
886
+ "became-free": "became-free";
887
+ }>>;
888
+ count: z.ZodDefault<z.ZodNumber>;
889
+ sustainSeconds: z.ZodDefault<z.ZodNumber>;
890
+ }, z.core.$strip>>;
891
+ }, z.core.$strip>>;
892
+ schedule: z.ZodOptional<z.ZodObject<{
893
+ windows: z.ZodArray<z.ZodObject<{
894
+ days: z.ZodArray<z.ZodNumber>;
895
+ startMinute: z.ZodNumber;
896
+ endMinute: z.ZodNumber;
897
+ }, z.core.$strip>>;
898
+ timezone: z.ZodOptional<z.ZodString>;
899
+ invert: z.ZodOptional<z.ZodBoolean>;
900
+ }, z.core.$strip>>;
901
+ targets: z.ZodArray<z.ZodObject<{
902
+ targetId: z.ZodString;
903
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
904
+ }, z.core.$strip>>;
905
+ media: z.ZodDefault<z.ZodObject<{
906
+ attach: z.ZodDefault<z.ZodEnum<{
907
+ none: "none";
908
+ best: "best";
909
+ "best-matching": "best-matching";
910
+ keyFrame: "keyFrame";
911
+ }>>;
912
+ }, z.core.$strip>>;
913
+ throttle: z.ZodDefault<z.ZodObject<{
914
+ cooldownSec: z.ZodDefault<z.ZodNumber>;
915
+ scope: z.ZodDefault<z.ZodEnum<{
916
+ rule: "rule";
917
+ "rule-device": "rule-device";
918
+ }>>;
919
+ }, z.core.$strip>>;
920
+ template: z.ZodOptional<z.ZodObject<{
921
+ title: z.ZodOptional<z.ZodString>;
922
+ body: z.ZodOptional<z.ZodString>;
923
+ }, z.core.$strip>>;
924
+ priority: z.ZodDefault<z.ZodNumber>;
925
+ ownerUserId: z.ZodOptional<z.ZodString>;
926
+ id: z.ZodString;
927
+ createdBy: z.ZodString;
928
+ createdAt: z.ZodNumber;
929
+ updatedAt: z.ZodNumber;
930
+ disabledTargetIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
931
+ }, z.core.$strip>>;
932
+ }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
933
+ readonly createRule: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
934
+ rule: z.ZodObject<{
935
+ name: z.ZodString;
936
+ enabled: z.ZodDefault<z.ZodBoolean>;
937
+ delivery: z.ZodEnum<{
938
+ immediate: "immediate";
939
+ "track-end": "track-end";
940
+ "device-event": "device-event";
941
+ "package-event": "package-event";
942
+ }>;
943
+ conditions: z.ZodDefault<z.ZodObject<{
944
+ devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
945
+ classes: z.ZodOptional<z.ZodArray<z.ZodString>>;
946
+ classesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
947
+ minConfidence: z.ZodOptional<z.ZodNumber>;
948
+ zones: z.ZodOptional<z.ZodObject<{
949
+ ids: z.ZodArray<z.ZodString>;
950
+ match: z.ZodDefault<z.ZodEnum<{
951
+ any: "any";
952
+ all: "all";
953
+ }>>;
954
+ }, z.core.$strip>>;
955
+ zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
956
+ labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
957
+ identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
958
+ plates: z.ZodOptional<z.ZodObject<{
959
+ values: z.ZodArray<z.ZodString>;
960
+ maxDistance: z.ZodDefault<z.ZodNumber>;
961
+ }, z.core.$strip>>;
962
+ identitiesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
963
+ minImportance: z.ZodOptional<z.ZodNumber>;
964
+ minDwellSeconds: z.ZodOptional<z.ZodNumber>;
965
+ source: z.ZodOptional<z.ZodEnum<{
966
+ sensor: "sensor";
967
+ any: "any";
968
+ pipeline: "pipeline";
969
+ onboard: "onboard";
970
+ }>>;
971
+ minLabelConfidence: z.ZodOptional<z.ZodNumber>;
972
+ eventTypeTokens: z.ZodOptional<z.ZodArray<z.ZodString>>;
973
+ sensorKinds: z.ZodOptional<z.ZodArray<z.ZodString>>;
974
+ packagePhase: z.ZodOptional<z.ZodEnum<{
975
+ both: "both";
976
+ delivered: "delivered";
977
+ "picked-up": "picked-up";
978
+ }>>;
979
+ customZones: z.ZodOptional<z.ZodArray<z.ZodObject<{
980
+ kind: z.ZodLiteral<"polygon">;
981
+ points: z.ZodArray<z.ZodObject<{
982
+ x: z.ZodNumber;
983
+ y: z.ZodNumber;
984
+ }, z.core.$strip>>;
985
+ }, z.core.$strip>>>;
986
+ occupancy: z.ZodOptional<z.ZodObject<{
987
+ zoneId: z.ZodOptional<z.ZodString>;
988
+ className: z.ZodOptional<z.ZodString>;
989
+ op: z.ZodDefault<z.ZodEnum<{
990
+ "<=": "<=";
991
+ ">=": ">=";
992
+ "became-occupied": "became-occupied";
993
+ "became-free": "became-free";
994
+ }>>;
995
+ count: z.ZodDefault<z.ZodNumber>;
996
+ sustainSeconds: z.ZodDefault<z.ZodNumber>;
997
+ }, z.core.$strip>>;
998
+ }, z.core.$strip>>;
999
+ schedule: z.ZodOptional<z.ZodObject<{
1000
+ windows: z.ZodArray<z.ZodObject<{
1001
+ days: z.ZodArray<z.ZodNumber>;
1002
+ startMinute: z.ZodNumber;
1003
+ endMinute: z.ZodNumber;
1004
+ }, z.core.$strip>>;
1005
+ timezone: z.ZodOptional<z.ZodString>;
1006
+ invert: z.ZodOptional<z.ZodBoolean>;
1007
+ }, z.core.$strip>>;
1008
+ targets: z.ZodArray<z.ZodObject<{
1009
+ targetId: z.ZodString;
1010
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1011
+ }, z.core.$strip>>;
1012
+ media: z.ZodDefault<z.ZodObject<{
1013
+ attach: z.ZodDefault<z.ZodEnum<{
1014
+ none: "none";
1015
+ best: "best";
1016
+ "best-matching": "best-matching";
1017
+ keyFrame: "keyFrame";
1018
+ }>>;
1019
+ }, z.core.$strip>>;
1020
+ throttle: z.ZodDefault<z.ZodObject<{
1021
+ cooldownSec: z.ZodDefault<z.ZodNumber>;
1022
+ scope: z.ZodDefault<z.ZodEnum<{
1023
+ rule: "rule";
1024
+ "rule-device": "rule-device";
1025
+ }>>;
1026
+ }, z.core.$strip>>;
1027
+ template: z.ZodOptional<z.ZodObject<{
1028
+ title: z.ZodOptional<z.ZodString>;
1029
+ body: z.ZodOptional<z.ZodString>;
1030
+ }, z.core.$strip>>;
1031
+ priority: z.ZodDefault<z.ZodNumber>;
1032
+ ownerUserId: z.ZodOptional<z.ZodString>;
1033
+ }, z.core.$strip>;
1034
+ }, z.core.$strip>, z.ZodObject<{
1035
+ rule: z.ZodObject<{
1036
+ name: z.ZodString;
1037
+ enabled: z.ZodDefault<z.ZodBoolean>;
1038
+ delivery: z.ZodEnum<{
1039
+ immediate: "immediate";
1040
+ "track-end": "track-end";
1041
+ "device-event": "device-event";
1042
+ "package-event": "package-event";
1043
+ }>;
1044
+ conditions: z.ZodDefault<z.ZodObject<{
1045
+ devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
1046
+ classes: z.ZodOptional<z.ZodArray<z.ZodString>>;
1047
+ classesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
1048
+ minConfidence: z.ZodOptional<z.ZodNumber>;
1049
+ zones: z.ZodOptional<z.ZodObject<{
1050
+ ids: z.ZodArray<z.ZodString>;
1051
+ match: z.ZodDefault<z.ZodEnum<{
1052
+ any: "any";
1053
+ all: "all";
1054
+ }>>;
1055
+ }, z.core.$strip>>;
1056
+ zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
1057
+ labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
1058
+ identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
1059
+ plates: z.ZodOptional<z.ZodObject<{
1060
+ values: z.ZodArray<z.ZodString>;
1061
+ maxDistance: z.ZodDefault<z.ZodNumber>;
1062
+ }, z.core.$strip>>;
1063
+ identitiesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
1064
+ minImportance: z.ZodOptional<z.ZodNumber>;
1065
+ minDwellSeconds: z.ZodOptional<z.ZodNumber>;
1066
+ source: z.ZodOptional<z.ZodEnum<{
1067
+ sensor: "sensor";
1068
+ any: "any";
1069
+ pipeline: "pipeline";
1070
+ onboard: "onboard";
1071
+ }>>;
1072
+ minLabelConfidence: z.ZodOptional<z.ZodNumber>;
1073
+ eventTypeTokens: z.ZodOptional<z.ZodArray<z.ZodString>>;
1074
+ sensorKinds: z.ZodOptional<z.ZodArray<z.ZodString>>;
1075
+ packagePhase: z.ZodOptional<z.ZodEnum<{
1076
+ both: "both";
1077
+ delivered: "delivered";
1078
+ "picked-up": "picked-up";
1079
+ }>>;
1080
+ customZones: z.ZodOptional<z.ZodArray<z.ZodObject<{
1081
+ kind: z.ZodLiteral<"polygon">;
1082
+ points: z.ZodArray<z.ZodObject<{
1083
+ x: z.ZodNumber;
1084
+ y: z.ZodNumber;
1085
+ }, z.core.$strip>>;
1086
+ }, z.core.$strip>>>;
1087
+ occupancy: z.ZodOptional<z.ZodObject<{
1088
+ zoneId: z.ZodOptional<z.ZodString>;
1089
+ className: z.ZodOptional<z.ZodString>;
1090
+ op: z.ZodDefault<z.ZodEnum<{
1091
+ "<=": "<=";
1092
+ ">=": ">=";
1093
+ "became-occupied": "became-occupied";
1094
+ "became-free": "became-free";
1095
+ }>>;
1096
+ count: z.ZodDefault<z.ZodNumber>;
1097
+ sustainSeconds: z.ZodDefault<z.ZodNumber>;
1098
+ }, z.core.$strip>>;
1099
+ }, z.core.$strip>>;
1100
+ schedule: z.ZodOptional<z.ZodObject<{
1101
+ windows: z.ZodArray<z.ZodObject<{
1102
+ days: z.ZodArray<z.ZodNumber>;
1103
+ startMinute: z.ZodNumber;
1104
+ endMinute: z.ZodNumber;
1105
+ }, z.core.$strip>>;
1106
+ timezone: z.ZodOptional<z.ZodString>;
1107
+ invert: z.ZodOptional<z.ZodBoolean>;
1108
+ }, z.core.$strip>>;
1109
+ targets: z.ZodArray<z.ZodObject<{
1110
+ targetId: z.ZodString;
1111
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1112
+ }, z.core.$strip>>;
1113
+ media: z.ZodDefault<z.ZodObject<{
1114
+ attach: z.ZodDefault<z.ZodEnum<{
1115
+ none: "none";
1116
+ best: "best";
1117
+ "best-matching": "best-matching";
1118
+ keyFrame: "keyFrame";
1119
+ }>>;
1120
+ }, z.core.$strip>>;
1121
+ throttle: z.ZodDefault<z.ZodObject<{
1122
+ cooldownSec: z.ZodDefault<z.ZodNumber>;
1123
+ scope: z.ZodDefault<z.ZodEnum<{
1124
+ rule: "rule";
1125
+ "rule-device": "rule-device";
1126
+ }>>;
1127
+ }, z.core.$strip>>;
1128
+ template: z.ZodOptional<z.ZodObject<{
1129
+ title: z.ZodOptional<z.ZodString>;
1130
+ body: z.ZodOptional<z.ZodString>;
1131
+ }, z.core.$strip>>;
1132
+ priority: z.ZodDefault<z.ZodNumber>;
1133
+ ownerUserId: z.ZodOptional<z.ZodString>;
1134
+ id: z.ZodString;
1135
+ createdBy: z.ZodString;
1136
+ createdAt: z.ZodNumber;
1137
+ updatedAt: z.ZodNumber;
1138
+ disabledTargetIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
1139
+ }, z.core.$strip>;
1140
+ }, z.core.$strip>, "mutation"> & {
1141
+ readonly caller: "required";
1142
+ };
1143
+ readonly updateRule: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
1144
+ ruleId: z.ZodString;
1145
+ patch: z.ZodObject<{
1146
+ name: z.ZodOptional<z.ZodString>;
1147
+ enabled: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
1148
+ delivery: z.ZodOptional<z.ZodEnum<{
1149
+ immediate: "immediate";
1150
+ "track-end": "track-end";
1151
+ "device-event": "device-event";
1152
+ "package-event": "package-event";
1153
+ }>>;
1154
+ conditions: z.ZodOptional<z.ZodDefault<z.ZodObject<{
1155
+ devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
1156
+ classes: z.ZodOptional<z.ZodArray<z.ZodString>>;
1157
+ classesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
1158
+ minConfidence: z.ZodOptional<z.ZodNumber>;
1159
+ zones: z.ZodOptional<z.ZodObject<{
1160
+ ids: z.ZodArray<z.ZodString>;
1161
+ match: z.ZodDefault<z.ZodEnum<{
1162
+ any: "any";
1163
+ all: "all";
1164
+ }>>;
1165
+ }, z.core.$strip>>;
1166
+ zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
1167
+ labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
1168
+ identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
1169
+ plates: z.ZodOptional<z.ZodObject<{
1170
+ values: z.ZodArray<z.ZodString>;
1171
+ maxDistance: z.ZodDefault<z.ZodNumber>;
1172
+ }, z.core.$strip>>;
1173
+ identitiesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
1174
+ minImportance: z.ZodOptional<z.ZodNumber>;
1175
+ minDwellSeconds: z.ZodOptional<z.ZodNumber>;
1176
+ source: z.ZodOptional<z.ZodEnum<{
1177
+ sensor: "sensor";
1178
+ any: "any";
1179
+ pipeline: "pipeline";
1180
+ onboard: "onboard";
1181
+ }>>;
1182
+ minLabelConfidence: z.ZodOptional<z.ZodNumber>;
1183
+ eventTypeTokens: z.ZodOptional<z.ZodArray<z.ZodString>>;
1184
+ sensorKinds: z.ZodOptional<z.ZodArray<z.ZodString>>;
1185
+ packagePhase: z.ZodOptional<z.ZodEnum<{
1186
+ both: "both";
1187
+ delivered: "delivered";
1188
+ "picked-up": "picked-up";
1189
+ }>>;
1190
+ customZones: z.ZodOptional<z.ZodArray<z.ZodObject<{
1191
+ kind: z.ZodLiteral<"polygon">;
1192
+ points: z.ZodArray<z.ZodObject<{
1193
+ x: z.ZodNumber;
1194
+ y: z.ZodNumber;
1195
+ }, z.core.$strip>>;
1196
+ }, z.core.$strip>>>;
1197
+ occupancy: z.ZodOptional<z.ZodObject<{
1198
+ zoneId: z.ZodOptional<z.ZodString>;
1199
+ className: z.ZodOptional<z.ZodString>;
1200
+ op: z.ZodDefault<z.ZodEnum<{
1201
+ "<=": "<=";
1202
+ ">=": ">=";
1203
+ "became-occupied": "became-occupied";
1204
+ "became-free": "became-free";
1205
+ }>>;
1206
+ count: z.ZodDefault<z.ZodNumber>;
1207
+ sustainSeconds: z.ZodDefault<z.ZodNumber>;
1208
+ }, z.core.$strip>>;
1209
+ }, z.core.$strip>>>;
1210
+ schedule: z.ZodOptional<z.ZodOptional<z.ZodObject<{
1211
+ windows: z.ZodArray<z.ZodObject<{
1212
+ days: z.ZodArray<z.ZodNumber>;
1213
+ startMinute: z.ZodNumber;
1214
+ endMinute: z.ZodNumber;
1215
+ }, z.core.$strip>>;
1216
+ timezone: z.ZodOptional<z.ZodString>;
1217
+ invert: z.ZodOptional<z.ZodBoolean>;
1218
+ }, z.core.$strip>>>;
1219
+ targets: z.ZodOptional<z.ZodArray<z.ZodObject<{
1220
+ targetId: z.ZodString;
1221
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1222
+ }, z.core.$strip>>>;
1223
+ media: z.ZodOptional<z.ZodDefault<z.ZodObject<{
1224
+ attach: z.ZodDefault<z.ZodEnum<{
1225
+ none: "none";
1226
+ best: "best";
1227
+ "best-matching": "best-matching";
1228
+ keyFrame: "keyFrame";
1229
+ }>>;
1230
+ }, z.core.$strip>>>;
1231
+ throttle: z.ZodOptional<z.ZodDefault<z.ZodObject<{
1232
+ cooldownSec: z.ZodDefault<z.ZodNumber>;
1233
+ scope: z.ZodDefault<z.ZodEnum<{
1234
+ rule: "rule";
1235
+ "rule-device": "rule-device";
1236
+ }>>;
1237
+ }, z.core.$strip>>>;
1238
+ template: z.ZodOptional<z.ZodOptional<z.ZodObject<{
1239
+ title: z.ZodOptional<z.ZodString>;
1240
+ body: z.ZodOptional<z.ZodString>;
1241
+ }, z.core.$strip>>>;
1242
+ priority: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
1243
+ ownerUserId: z.ZodOptional<z.ZodOptional<z.ZodString>>;
1244
+ disabledTargetIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
1245
+ }, z.core.$strip>;
1246
+ }, z.core.$strip>, z.ZodObject<{
1247
+ rule: z.ZodObject<{
1248
+ name: z.ZodString;
1249
+ enabled: z.ZodDefault<z.ZodBoolean>;
1250
+ delivery: z.ZodEnum<{
1251
+ immediate: "immediate";
1252
+ "track-end": "track-end";
1253
+ "device-event": "device-event";
1254
+ "package-event": "package-event";
1255
+ }>;
1256
+ conditions: z.ZodDefault<z.ZodObject<{
1257
+ devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
1258
+ classes: z.ZodOptional<z.ZodArray<z.ZodString>>;
1259
+ classesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
1260
+ minConfidence: z.ZodOptional<z.ZodNumber>;
1261
+ zones: z.ZodOptional<z.ZodObject<{
1262
+ ids: z.ZodArray<z.ZodString>;
1263
+ match: z.ZodDefault<z.ZodEnum<{
1264
+ any: "any";
1265
+ all: "all";
1266
+ }>>;
1267
+ }, z.core.$strip>>;
1268
+ zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
1269
+ labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
1270
+ identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
1271
+ plates: z.ZodOptional<z.ZodObject<{
1272
+ values: z.ZodArray<z.ZodString>;
1273
+ maxDistance: z.ZodDefault<z.ZodNumber>;
1274
+ }, z.core.$strip>>;
1275
+ identitiesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
1276
+ minImportance: z.ZodOptional<z.ZodNumber>;
1277
+ minDwellSeconds: z.ZodOptional<z.ZodNumber>;
1278
+ source: z.ZodOptional<z.ZodEnum<{
1279
+ sensor: "sensor";
1280
+ any: "any";
1281
+ pipeline: "pipeline";
1282
+ onboard: "onboard";
1283
+ }>>;
1284
+ minLabelConfidence: z.ZodOptional<z.ZodNumber>;
1285
+ eventTypeTokens: z.ZodOptional<z.ZodArray<z.ZodString>>;
1286
+ sensorKinds: z.ZodOptional<z.ZodArray<z.ZodString>>;
1287
+ packagePhase: z.ZodOptional<z.ZodEnum<{
1288
+ both: "both";
1289
+ delivered: "delivered";
1290
+ "picked-up": "picked-up";
1291
+ }>>;
1292
+ customZones: z.ZodOptional<z.ZodArray<z.ZodObject<{
1293
+ kind: z.ZodLiteral<"polygon">;
1294
+ points: z.ZodArray<z.ZodObject<{
1295
+ x: z.ZodNumber;
1296
+ y: z.ZodNumber;
1297
+ }, z.core.$strip>>;
1298
+ }, z.core.$strip>>>;
1299
+ occupancy: z.ZodOptional<z.ZodObject<{
1300
+ zoneId: z.ZodOptional<z.ZodString>;
1301
+ className: z.ZodOptional<z.ZodString>;
1302
+ op: z.ZodDefault<z.ZodEnum<{
1303
+ "<=": "<=";
1304
+ ">=": ">=";
1305
+ "became-occupied": "became-occupied";
1306
+ "became-free": "became-free";
1307
+ }>>;
1308
+ count: z.ZodDefault<z.ZodNumber>;
1309
+ sustainSeconds: z.ZodDefault<z.ZodNumber>;
1310
+ }, z.core.$strip>>;
1311
+ }, z.core.$strip>>;
1312
+ schedule: z.ZodOptional<z.ZodObject<{
1313
+ windows: z.ZodArray<z.ZodObject<{
1314
+ days: z.ZodArray<z.ZodNumber>;
1315
+ startMinute: z.ZodNumber;
1316
+ endMinute: z.ZodNumber;
1317
+ }, z.core.$strip>>;
1318
+ timezone: z.ZodOptional<z.ZodString>;
1319
+ invert: z.ZodOptional<z.ZodBoolean>;
1320
+ }, z.core.$strip>>;
1321
+ targets: z.ZodArray<z.ZodObject<{
1322
+ targetId: z.ZodString;
1323
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1324
+ }, z.core.$strip>>;
1325
+ media: z.ZodDefault<z.ZodObject<{
1326
+ attach: z.ZodDefault<z.ZodEnum<{
1327
+ none: "none";
1328
+ best: "best";
1329
+ "best-matching": "best-matching";
1330
+ keyFrame: "keyFrame";
1331
+ }>>;
1332
+ }, z.core.$strip>>;
1333
+ throttle: z.ZodDefault<z.ZodObject<{
1334
+ cooldownSec: z.ZodDefault<z.ZodNumber>;
1335
+ scope: z.ZodDefault<z.ZodEnum<{
1336
+ rule: "rule";
1337
+ "rule-device": "rule-device";
1338
+ }>>;
1339
+ }, z.core.$strip>>;
1340
+ template: z.ZodOptional<z.ZodObject<{
1341
+ title: z.ZodOptional<z.ZodString>;
1342
+ body: z.ZodOptional<z.ZodString>;
1343
+ }, z.core.$strip>>;
1344
+ priority: z.ZodDefault<z.ZodNumber>;
1345
+ ownerUserId: z.ZodOptional<z.ZodString>;
1346
+ id: z.ZodString;
1347
+ createdBy: z.ZodString;
1348
+ createdAt: z.ZodNumber;
1349
+ updatedAt: z.ZodNumber;
1350
+ disabledTargetIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
1351
+ }, z.core.$strip>;
1352
+ }, z.core.$strip>, "mutation"> & {
1353
+ readonly caller: "required";
1354
+ };
1355
+ readonly deleteRule: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
1356
+ ruleId: z.ZodString;
1357
+ }, z.core.$strip>, z.ZodObject<{
1358
+ success: z.ZodLiteral<true>;
1359
+ }, z.core.$strip>, "mutation">;
1360
+ readonly setRuleEnabled: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
1361
+ ruleId: z.ZodString;
1362
+ enabled: z.ZodBoolean;
1363
+ }, z.core.$strip>, z.ZodObject<{
1364
+ success: z.ZodLiteral<true>;
1365
+ }, z.core.$strip>, "mutation">;
1366
+ /**
1367
+ * Dry-run a rule against recently persisted records (object events for
1368
+ * `immediate`, closed tracks for `track-end`). Mutation kind only to
1369
+ * carry the full rule object safely; no side effects.
1370
+ */
1371
+ readonly testRule: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
1372
+ rule: z.ZodObject<{
1373
+ name: z.ZodString;
1374
+ enabled: z.ZodDefault<z.ZodBoolean>;
1375
+ delivery: z.ZodEnum<{
1376
+ immediate: "immediate";
1377
+ "track-end": "track-end";
1378
+ "device-event": "device-event";
1379
+ "package-event": "package-event";
1380
+ }>;
1381
+ conditions: z.ZodDefault<z.ZodObject<{
1382
+ devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
1383
+ classes: z.ZodOptional<z.ZodArray<z.ZodString>>;
1384
+ classesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
1385
+ minConfidence: z.ZodOptional<z.ZodNumber>;
1386
+ zones: z.ZodOptional<z.ZodObject<{
1387
+ ids: z.ZodArray<z.ZodString>;
1388
+ match: z.ZodDefault<z.ZodEnum<{
1389
+ any: "any";
1390
+ all: "all";
1391
+ }>>;
1392
+ }, z.core.$strip>>;
1393
+ zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
1394
+ labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
1395
+ identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
1396
+ plates: z.ZodOptional<z.ZodObject<{
1397
+ values: z.ZodArray<z.ZodString>;
1398
+ maxDistance: z.ZodDefault<z.ZodNumber>;
1399
+ }, z.core.$strip>>;
1400
+ identitiesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
1401
+ minImportance: z.ZodOptional<z.ZodNumber>;
1402
+ minDwellSeconds: z.ZodOptional<z.ZodNumber>;
1403
+ source: z.ZodOptional<z.ZodEnum<{
1404
+ sensor: "sensor";
1405
+ any: "any";
1406
+ pipeline: "pipeline";
1407
+ onboard: "onboard";
1408
+ }>>;
1409
+ minLabelConfidence: z.ZodOptional<z.ZodNumber>;
1410
+ eventTypeTokens: z.ZodOptional<z.ZodArray<z.ZodString>>;
1411
+ sensorKinds: z.ZodOptional<z.ZodArray<z.ZodString>>;
1412
+ packagePhase: z.ZodOptional<z.ZodEnum<{
1413
+ both: "both";
1414
+ delivered: "delivered";
1415
+ "picked-up": "picked-up";
1416
+ }>>;
1417
+ customZones: z.ZodOptional<z.ZodArray<z.ZodObject<{
1418
+ kind: z.ZodLiteral<"polygon">;
1419
+ points: z.ZodArray<z.ZodObject<{
1420
+ x: z.ZodNumber;
1421
+ y: z.ZodNumber;
1422
+ }, z.core.$strip>>;
1423
+ }, z.core.$strip>>>;
1424
+ occupancy: z.ZodOptional<z.ZodObject<{
1425
+ zoneId: z.ZodOptional<z.ZodString>;
1426
+ className: z.ZodOptional<z.ZodString>;
1427
+ op: z.ZodDefault<z.ZodEnum<{
1428
+ "<=": "<=";
1429
+ ">=": ">=";
1430
+ "became-occupied": "became-occupied";
1431
+ "became-free": "became-free";
1432
+ }>>;
1433
+ count: z.ZodDefault<z.ZodNumber>;
1434
+ sustainSeconds: z.ZodDefault<z.ZodNumber>;
1435
+ }, z.core.$strip>>;
1436
+ }, z.core.$strip>>;
1437
+ schedule: z.ZodOptional<z.ZodObject<{
1438
+ windows: z.ZodArray<z.ZodObject<{
1439
+ days: z.ZodArray<z.ZodNumber>;
1440
+ startMinute: z.ZodNumber;
1441
+ endMinute: z.ZodNumber;
1442
+ }, z.core.$strip>>;
1443
+ timezone: z.ZodOptional<z.ZodString>;
1444
+ invert: z.ZodOptional<z.ZodBoolean>;
1445
+ }, z.core.$strip>>;
1446
+ targets: z.ZodArray<z.ZodObject<{
1447
+ targetId: z.ZodString;
1448
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1449
+ }, z.core.$strip>>;
1450
+ media: z.ZodDefault<z.ZodObject<{
1451
+ attach: z.ZodDefault<z.ZodEnum<{
1452
+ none: "none";
1453
+ best: "best";
1454
+ "best-matching": "best-matching";
1455
+ keyFrame: "keyFrame";
1456
+ }>>;
1457
+ }, z.core.$strip>>;
1458
+ throttle: z.ZodDefault<z.ZodObject<{
1459
+ cooldownSec: z.ZodDefault<z.ZodNumber>;
1460
+ scope: z.ZodDefault<z.ZodEnum<{
1461
+ rule: "rule";
1462
+ "rule-device": "rule-device";
1463
+ }>>;
1464
+ }, z.core.$strip>>;
1465
+ template: z.ZodOptional<z.ZodObject<{
1466
+ title: z.ZodOptional<z.ZodString>;
1467
+ body: z.ZodOptional<z.ZodString>;
1468
+ }, z.core.$strip>>;
1469
+ priority: z.ZodDefault<z.ZodNumber>;
1470
+ ownerUserId: z.ZodOptional<z.ZodString>;
1471
+ }, z.core.$strip>;
1472
+ lookbackMinutes: z.ZodDefault<z.ZodNumber>;
1473
+ }, z.core.$strip>, z.ZodObject<{
1474
+ results: z.ZodArray<z.ZodObject<{
1475
+ recordId: z.ZodString;
1476
+ recordKind: z.ZodEnum<{
1477
+ "device-event": "device-event";
1478
+ "package-event": "package-event";
1479
+ "object-event": "object-event";
1480
+ track: "track";
1481
+ }>;
1482
+ deviceId: z.ZodNumber;
1483
+ timestamp: z.ZodNumber;
1484
+ wouldFire: z.ZodBoolean;
1485
+ failedCondition: z.ZodOptional<z.ZodString>;
1486
+ className: z.ZodOptional<z.ZodString>;
1487
+ label: z.ZodOptional<z.ZodString>;
1488
+ }, z.core.$strip>>;
1489
+ }, z.core.$strip>, "mutation">;
1490
+ readonly getConditionCatalog: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{}, z.core.$strip>, z.ZodObject<{
1491
+ catalog: z.ZodArray<z.ZodObject<{
1492
+ id: z.ZodString;
1493
+ group: z.ZodEnum<{
1494
+ device: "device";
1495
+ label: "label";
1496
+ scope: "scope";
1497
+ class: "class";
1498
+ schedule: "schedule";
1499
+ zones: "zones";
1500
+ package: "package";
1501
+ occupancy: "occupancy";
1502
+ quality: "quality";
1503
+ }>;
1504
+ label: z.ZodString;
1505
+ valueType: z.ZodEnum<{
1506
+ number: "number";
1507
+ schedule: "schedule";
1508
+ packagePhase: "packagePhase";
1509
+ occupancy: "occupancy";
1510
+ deviceIdList: "deviceIdList";
1511
+ stringList: "stringList";
1512
+ number01: "number01";
1513
+ sourceSelect: "sourceSelect";
1514
+ zoneSelection: "zoneSelection";
1515
+ zoneIdList: "zoneIdList";
1516
+ plateMatcher: "plateMatcher";
1517
+ polygonDraw: "polygonDraw";
1518
+ }>;
1519
+ operator: z.ZodEnum<{
1520
+ in: "in";
1521
+ notIn: "notIn";
1522
+ anyOf: "anyOf";
1523
+ allOf: "allOf";
1524
+ gte: "gte";
1525
+ fuzzyIn: "fuzzyIn";
1526
+ withinSchedule: "withinSchedule";
1527
+ }>;
1528
+ appliesTo: z.ZodArray<z.ZodEnum<{
1529
+ immediate: "immediate";
1530
+ "track-end": "track-end";
1531
+ "device-event": "device-event";
1532
+ "package-event": "package-event";
1533
+ }>>;
1534
+ phase: z.ZodString;
1535
+ description: z.ZodOptional<z.ZodString>;
1536
+ }, z.core.$strip>>;
1537
+ }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
1538
+ /**
1539
+ * Queryable delivery history — a read-only view over the durable outbox
1540
+ * (fired rule, subject summary, target, status, timestamps, error on a
1541
+ * dead row). Newest-first, bounded by `filter.limit`. Retention follows
1542
+ * the outbox's own terminal-row prune horizon (no separate history
1543
+ * horizon — single collection, single source of truth). Admin-only in
1544
+ * P1 (no user dimension); the P2 viewer History screen adds per-caller
1545
+ * scoping on the same method.
1546
+ */
1547
+ readonly getHistory: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
1548
+ filter: z.ZodDefault<z.ZodObject<{
1549
+ ruleId: z.ZodOptional<z.ZodString>;
1550
+ deviceId: z.ZodOptional<z.ZodNumber>;
1551
+ status: z.ZodOptional<z.ZodEnum<{
1552
+ pending: "pending";
1553
+ sent: "sent";
1554
+ dead: "dead";
1555
+ }>>;
1556
+ since: z.ZodOptional<z.ZodNumber>;
1557
+ until: z.ZodOptional<z.ZodNumber>;
1558
+ limit: z.ZodDefault<z.ZodNumber>;
1559
+ }, z.core.$strip>>;
1560
+ }, z.core.$strip>, z.ZodObject<{
1561
+ entries: z.ZodArray<z.ZodObject<{
1562
+ id: z.ZodString;
1563
+ ruleId: z.ZodString;
1564
+ ruleName: z.ZodString;
1565
+ delivery: z.ZodEnum<{
1566
+ immediate: "immediate";
1567
+ "track-end": "track-end";
1568
+ "device-event": "device-event";
1569
+ "package-event": "package-event";
1570
+ }>;
1571
+ targetId: z.ZodString;
1572
+ deviceId: z.ZodNumber;
1573
+ recordKind: z.ZodEnum<{
1574
+ "track-end": "track-end";
1575
+ "device-event": "device-event";
1576
+ "package-event": "package-event";
1577
+ "object-event": "object-event";
1578
+ }>;
1579
+ recordId: z.ZodString;
1580
+ trackId: z.ZodOptional<z.ZodString>;
1581
+ status: z.ZodEnum<{
1582
+ pending: "pending";
1583
+ sent: "sent";
1584
+ dead: "dead";
1585
+ }>;
1586
+ attempts: z.ZodNumber;
1587
+ createdAt: z.ZodNumber;
1588
+ updatedAt: z.ZodNumber;
1589
+ error: z.ZodOptional<z.ZodString>;
1590
+ subject: z.ZodObject<{
1591
+ className: z.ZodString;
1592
+ label: z.ZodOptional<z.ZodString>;
1593
+ confidence: z.ZodOptional<z.ZodNumber>;
1594
+ zones: z.ZodArray<z.ZodString>;
1595
+ timestamp: z.ZodNumber;
1596
+ }, z.core.$strip>;
1597
+ }, z.core.$strip>>;
1598
+ }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
1599
+ };
1600
+ };
1601
+ export type INotificationRulesProvider = InferProvider<typeof notificationRulesCapability>;