@camstack/types 1.2.8 → 1.2.10

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.
@@ -30,10 +30,26 @@ import { type InferProvider } from './capability-definition.js';
30
30
  * `z.infer` exports; no duplicate interfaces (the advanced-notifier
31
31
  * schema/interface drift is explicitly not repeated).
32
32
  */
33
- /** D-3: the urgency of a rule — which persistence moment evaluates it. */
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
+ */
34
48
  export declare const NcDeliverySchema: z.ZodEnum<{
35
49
  immediate: "immediate";
36
50
  "track-end": "track-end";
51
+ "device-event": "device-event";
52
+ "package-event": "package-event";
37
53
  }>;
38
54
  export type NcDelivery = z.infer<typeof NcDeliverySchema>;
39
55
  /**
@@ -66,6 +82,32 @@ export declare const NcPlateMatcherSchema: z.ZodObject<{
66
82
  maxDistance: z.ZodDefault<z.ZodNumber>;
67
83
  }, z.core.$strip>;
68
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>;
69
111
  /** Admin-zone membership condition (zone IDs as stamped by the ZoneEngine). */
70
112
  export declare const NcZoneConditionSchema: z.ZodObject<{
71
113
  ids: z.ZodArray<z.ZodString>;
@@ -98,6 +140,42 @@ export declare const NcConditionsSchema: z.ZodObject<{
98
140
  values: z.ZodArray<z.ZodString>;
99
141
  maxDistance: z.ZodDefault<z.ZodNumber>;
100
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>>;
101
179
  }, z.core.$strip>;
102
180
  export type NcConditions = z.infer<typeof NcConditionsSchema>;
103
181
  /** One delivery target: a `notification-output` Target ref + passthrough params. */
@@ -107,14 +185,23 @@ export declare const NcRuleTargetSchema: z.ZodObject<{
107
185
  }, z.core.$strip>;
108
186
  export type NcRuleTarget = z.infer<typeof NcRuleTargetSchema>;
109
187
  /**
110
- * Media attachment policy (P1 still-image subset). `best` = the best
111
- * AVAILABLE media at dispatch time (D-3); `best-matching` (track-end
112
- * condition-best) is deferred operator open point.
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.
113
199
  */
114
200
  export declare const NcMediaPolicySchema: z.ZodObject<{
115
201
  attach: z.ZodDefault<z.ZodEnum<{
116
202
  none: "none";
117
203
  best: "best";
204
+ "best-matching": "best-matching";
118
205
  keyFrame: "keyFrame";
119
206
  }>>;
120
207
  }, z.core.$strip>;
@@ -135,6 +222,8 @@ export declare const NcRuleInputSchema: z.ZodObject<{
135
222
  delivery: z.ZodEnum<{
136
223
  immediate: "immediate";
137
224
  "track-end": "track-end";
225
+ "device-event": "device-event";
226
+ "package-event": "package-event";
138
227
  }>;
139
228
  conditions: z.ZodDefault<z.ZodObject<{
140
229
  devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
@@ -155,6 +244,42 @@ export declare const NcRuleInputSchema: z.ZodObject<{
155
244
  values: z.ZodArray<z.ZodString>;
156
245
  maxDistance: z.ZodDefault<z.ZodNumber>;
157
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>>;
158
283
  }, z.core.$strip>>;
159
284
  schedule: z.ZodOptional<z.ZodObject<{
160
285
  windows: z.ZodArray<z.ZodObject<{
@@ -173,6 +298,7 @@ export declare const NcRuleInputSchema: z.ZodObject<{
173
298
  attach: z.ZodDefault<z.ZodEnum<{
174
299
  none: "none";
175
300
  best: "best";
301
+ "best-matching": "best-matching";
176
302
  keyFrame: "keyFrame";
177
303
  }>>;
178
304
  }, z.core.$strip>>;
@@ -188,15 +314,26 @@ export declare const NcRuleInputSchema: z.ZodObject<{
188
314
  body: z.ZodOptional<z.ZodString>;
189
315
  }, z.core.$strip>>;
190
316
  priority: z.ZodDefault<z.ZodNumber>;
317
+ ownerUserId: z.ZodOptional<z.ZodString>;
191
318
  }, z.core.$strip>;
192
319
  export type NcRuleInput = z.infer<typeof NcRuleInputSchema>;
193
- /** Partial patch for `updateRule` — any subset of the input fields. */
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
+ */
194
329
  export declare const NcRulePatchSchema: z.ZodObject<{
195
330
  name: z.ZodOptional<z.ZodString>;
196
331
  enabled: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
197
332
  delivery: z.ZodOptional<z.ZodEnum<{
198
333
  immediate: "immediate";
199
334
  "track-end": "track-end";
335
+ "device-event": "device-event";
336
+ "package-event": "package-event";
200
337
  }>>;
201
338
  conditions: z.ZodOptional<z.ZodDefault<z.ZodObject<{
202
339
  devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
@@ -217,6 +354,42 @@ export declare const NcRulePatchSchema: z.ZodObject<{
217
354
  values: z.ZodArray<z.ZodString>;
218
355
  maxDistance: z.ZodDefault<z.ZodNumber>;
219
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>>;
220
393
  }, z.core.$strip>>>;
221
394
  schedule: z.ZodOptional<z.ZodOptional<z.ZodObject<{
222
395
  windows: z.ZodArray<z.ZodObject<{
@@ -235,6 +408,7 @@ export declare const NcRulePatchSchema: z.ZodObject<{
235
408
  attach: z.ZodDefault<z.ZodEnum<{
236
409
  none: "none";
237
410
  best: "best";
411
+ "best-matching": "best-matching";
238
412
  keyFrame: "keyFrame";
239
413
  }>>;
240
414
  }, z.core.$strip>>>;
@@ -250,6 +424,8 @@ export declare const NcRulePatchSchema: z.ZodObject<{
250
424
  body: z.ZodOptional<z.ZodString>;
251
425
  }, z.core.$strip>>>;
252
426
  priority: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
427
+ ownerUserId: z.ZodOptional<z.ZodOptional<z.ZodString>>;
428
+ disabledTargetIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
253
429
  }, z.core.$strip>;
254
430
  export type NcRulePatch = z.infer<typeof NcRulePatchSchema>;
255
431
  /** A persisted rule. */
@@ -259,6 +435,8 @@ export declare const NcRuleSchema: z.ZodObject<{
259
435
  delivery: z.ZodEnum<{
260
436
  immediate: "immediate";
261
437
  "track-end": "track-end";
438
+ "device-event": "device-event";
439
+ "package-event": "package-event";
262
440
  }>;
263
441
  conditions: z.ZodDefault<z.ZodObject<{
264
442
  devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
@@ -279,6 +457,42 @@ export declare const NcRuleSchema: z.ZodObject<{
279
457
  values: z.ZodArray<z.ZodString>;
280
458
  maxDistance: z.ZodDefault<z.ZodNumber>;
281
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>>;
282
496
  }, z.core.$strip>>;
283
497
  schedule: z.ZodOptional<z.ZodObject<{
284
498
  windows: z.ZodArray<z.ZodObject<{
@@ -297,6 +511,7 @@ export declare const NcRuleSchema: z.ZodObject<{
297
511
  attach: z.ZodDefault<z.ZodEnum<{
298
512
  none: "none";
299
513
  best: "best";
514
+ "best-matching": "best-matching";
300
515
  keyFrame: "keyFrame";
301
516
  }>>;
302
517
  }, z.core.$strip>>;
@@ -312,15 +527,19 @@ export declare const NcRuleSchema: z.ZodObject<{
312
527
  body: z.ZodOptional<z.ZodString>;
313
528
  }, z.core.$strip>>;
314
529
  priority: z.ZodDefault<z.ZodNumber>;
530
+ ownerUserId: z.ZodOptional<z.ZodString>;
315
531
  id: z.ZodString;
316
532
  createdBy: z.ZodString;
317
533
  createdAt: z.ZodNumber;
318
534
  updatedAt: z.ZodNumber;
535
+ disabledTargetIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
319
536
  }, z.core.$strip>;
320
537
  export type NcRule = z.infer<typeof NcRuleSchema>;
321
538
  export declare const NcTestResultSchema: z.ZodObject<{
322
539
  recordId: z.ZodString;
323
540
  recordKind: z.ZodEnum<{
541
+ "device-event": "device-event";
542
+ "package-event": "package-event";
324
543
  "object-event": "object-event";
325
544
  track: "track";
326
545
  }>;
@@ -335,22 +554,30 @@ export type NcTestResult = z.infer<typeof NcTestResultSchema>;
335
554
  export declare const NcConditionDescriptorSchema: z.ZodObject<{
336
555
  id: z.ZodString;
337
556
  group: z.ZodEnum<{
557
+ device: "device";
338
558
  label: "label";
339
559
  scope: "scope";
340
560
  class: "class";
341
561
  schedule: "schedule";
342
562
  zones: "zones";
563
+ package: "package";
564
+ occupancy: "occupancy";
343
565
  quality: "quality";
344
566
  }>;
345
567
  label: z.ZodString;
346
568
  valueType: z.ZodEnum<{
569
+ number: "number";
347
570
  schedule: "schedule";
571
+ packagePhase: "packagePhase";
572
+ occupancy: "occupancy";
348
573
  deviceIdList: "deviceIdList";
349
574
  stringList: "stringList";
350
575
  number01: "number01";
576
+ sourceSelect: "sourceSelect";
351
577
  zoneSelection: "zoneSelection";
352
578
  zoneIdList: "zoneIdList";
353
579
  plateMatcher: "plateMatcher";
580
+ polygonDraw: "polygonDraw";
354
581
  }>;
355
582
  operator: z.ZodEnum<{
356
583
  in: "in";
@@ -364,6 +591,8 @@ export declare const NcConditionDescriptorSchema: z.ZodObject<{
364
591
  appliesTo: z.ZodArray<z.ZodEnum<{
365
592
  immediate: "immediate";
366
593
  "track-end": "track-end";
594
+ "device-event": "device-event";
595
+ "package-event": "package-event";
367
596
  }>>;
368
597
  phase: z.ZodString;
369
598
  description: z.ZodOptional<z.ZodString>;
@@ -374,6 +603,112 @@ export type NcConditionDescriptor = z.infer<typeof NcConditionDescriptorSchema>;
374
603
  * rule editors render from the catalog, not hardcoded forms (spec §4.2).
375
604
  */
376
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>;
377
712
  export declare const notificationRulesCapability: {
378
713
  readonly name: "notification-rules";
379
714
  readonly scope: "system";
@@ -386,6 +721,8 @@ export declare const notificationRulesCapability: {
386
721
  delivery: z.ZodEnum<{
387
722
  immediate: "immediate";
388
723
  "track-end": "track-end";
724
+ "device-event": "device-event";
725
+ "package-event": "package-event";
389
726
  }>;
390
727
  conditions: z.ZodDefault<z.ZodObject<{
391
728
  devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
@@ -406,6 +743,42 @@ export declare const notificationRulesCapability: {
406
743
  values: z.ZodArray<z.ZodString>;
407
744
  maxDistance: z.ZodDefault<z.ZodNumber>;
408
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>>;
409
782
  }, z.core.$strip>>;
410
783
  schedule: z.ZodOptional<z.ZodObject<{
411
784
  windows: z.ZodArray<z.ZodObject<{
@@ -424,6 +797,7 @@ export declare const notificationRulesCapability: {
424
797
  attach: z.ZodDefault<z.ZodEnum<{
425
798
  none: "none";
426
799
  best: "best";
800
+ "best-matching": "best-matching";
427
801
  keyFrame: "keyFrame";
428
802
  }>>;
429
803
  }, z.core.$strip>>;
@@ -439,10 +813,12 @@ export declare const notificationRulesCapability: {
439
813
  body: z.ZodOptional<z.ZodString>;
440
814
  }, z.core.$strip>>;
441
815
  priority: z.ZodDefault<z.ZodNumber>;
816
+ ownerUserId: z.ZodOptional<z.ZodString>;
442
817
  id: z.ZodString;
443
818
  createdBy: z.ZodString;
444
819
  createdAt: z.ZodNumber;
445
820
  updatedAt: z.ZodNumber;
821
+ disabledTargetIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
446
822
  }, z.core.$strip>>;
447
823
  }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
448
824
  readonly getRule: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
@@ -454,6 +830,8 @@ export declare const notificationRulesCapability: {
454
830
  delivery: z.ZodEnum<{
455
831
  immediate: "immediate";
456
832
  "track-end": "track-end";
833
+ "device-event": "device-event";
834
+ "package-event": "package-event";
457
835
  }>;
458
836
  conditions: z.ZodDefault<z.ZodObject<{
459
837
  devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
@@ -474,6 +852,42 @@ export declare const notificationRulesCapability: {
474
852
  values: z.ZodArray<z.ZodString>;
475
853
  maxDistance: z.ZodDefault<z.ZodNumber>;
476
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>>;
477
891
  }, z.core.$strip>>;
478
892
  schedule: z.ZodOptional<z.ZodObject<{
479
893
  windows: z.ZodArray<z.ZodObject<{
@@ -492,6 +906,7 @@ export declare const notificationRulesCapability: {
492
906
  attach: z.ZodDefault<z.ZodEnum<{
493
907
  none: "none";
494
908
  best: "best";
909
+ "best-matching": "best-matching";
495
910
  keyFrame: "keyFrame";
496
911
  }>>;
497
912
  }, z.core.$strip>>;
@@ -507,10 +922,12 @@ export declare const notificationRulesCapability: {
507
922
  body: z.ZodOptional<z.ZodString>;
508
923
  }, z.core.$strip>>;
509
924
  priority: z.ZodDefault<z.ZodNumber>;
925
+ ownerUserId: z.ZodOptional<z.ZodString>;
510
926
  id: z.ZodString;
511
927
  createdBy: z.ZodString;
512
928
  createdAt: z.ZodNumber;
513
929
  updatedAt: z.ZodNumber;
930
+ disabledTargetIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
514
931
  }, z.core.$strip>>;
515
932
  }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
516
933
  readonly createRule: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
@@ -520,6 +937,8 @@ export declare const notificationRulesCapability: {
520
937
  delivery: z.ZodEnum<{
521
938
  immediate: "immediate";
522
939
  "track-end": "track-end";
940
+ "device-event": "device-event";
941
+ "package-event": "package-event";
523
942
  }>;
524
943
  conditions: z.ZodDefault<z.ZodObject<{
525
944
  devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
@@ -540,6 +959,42 @@ export declare const notificationRulesCapability: {
540
959
  values: z.ZodArray<z.ZodString>;
541
960
  maxDistance: z.ZodDefault<z.ZodNumber>;
542
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>>;
543
998
  }, z.core.$strip>>;
544
999
  schedule: z.ZodOptional<z.ZodObject<{
545
1000
  windows: z.ZodArray<z.ZodObject<{
@@ -558,6 +1013,7 @@ export declare const notificationRulesCapability: {
558
1013
  attach: z.ZodDefault<z.ZodEnum<{
559
1014
  none: "none";
560
1015
  best: "best";
1016
+ "best-matching": "best-matching";
561
1017
  keyFrame: "keyFrame";
562
1018
  }>>;
563
1019
  }, z.core.$strip>>;
@@ -573,6 +1029,7 @@ export declare const notificationRulesCapability: {
573
1029
  body: z.ZodOptional<z.ZodString>;
574
1030
  }, z.core.$strip>>;
575
1031
  priority: z.ZodDefault<z.ZodNumber>;
1032
+ ownerUserId: z.ZodOptional<z.ZodString>;
576
1033
  }, z.core.$strip>;
577
1034
  }, z.core.$strip>, z.ZodObject<{
578
1035
  rule: z.ZodObject<{
@@ -581,6 +1038,8 @@ export declare const notificationRulesCapability: {
581
1038
  delivery: z.ZodEnum<{
582
1039
  immediate: "immediate";
583
1040
  "track-end": "track-end";
1041
+ "device-event": "device-event";
1042
+ "package-event": "package-event";
584
1043
  }>;
585
1044
  conditions: z.ZodDefault<z.ZodObject<{
586
1045
  devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
@@ -601,6 +1060,42 @@ export declare const notificationRulesCapability: {
601
1060
  values: z.ZodArray<z.ZodString>;
602
1061
  maxDistance: z.ZodDefault<z.ZodNumber>;
603
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>>;
604
1099
  }, z.core.$strip>>;
605
1100
  schedule: z.ZodOptional<z.ZodObject<{
606
1101
  windows: z.ZodArray<z.ZodObject<{
@@ -619,6 +1114,7 @@ export declare const notificationRulesCapability: {
619
1114
  attach: z.ZodDefault<z.ZodEnum<{
620
1115
  none: "none";
621
1116
  best: "best";
1117
+ "best-matching": "best-matching";
622
1118
  keyFrame: "keyFrame";
623
1119
  }>>;
624
1120
  }, z.core.$strip>>;
@@ -634,10 +1130,12 @@ export declare const notificationRulesCapability: {
634
1130
  body: z.ZodOptional<z.ZodString>;
635
1131
  }, z.core.$strip>>;
636
1132
  priority: z.ZodDefault<z.ZodNumber>;
1133
+ ownerUserId: z.ZodOptional<z.ZodString>;
637
1134
  id: z.ZodString;
638
1135
  createdBy: z.ZodString;
639
1136
  createdAt: z.ZodNumber;
640
1137
  updatedAt: z.ZodNumber;
1138
+ disabledTargetIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
641
1139
  }, z.core.$strip>;
642
1140
  }, z.core.$strip>, "mutation"> & {
643
1141
  readonly caller: "required";
@@ -650,6 +1148,8 @@ export declare const notificationRulesCapability: {
650
1148
  delivery: z.ZodOptional<z.ZodEnum<{
651
1149
  immediate: "immediate";
652
1150
  "track-end": "track-end";
1151
+ "device-event": "device-event";
1152
+ "package-event": "package-event";
653
1153
  }>>;
654
1154
  conditions: z.ZodOptional<z.ZodDefault<z.ZodObject<{
655
1155
  devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
@@ -670,6 +1170,42 @@ export declare const notificationRulesCapability: {
670
1170
  values: z.ZodArray<z.ZodString>;
671
1171
  maxDistance: z.ZodDefault<z.ZodNumber>;
672
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>>;
673
1209
  }, z.core.$strip>>>;
674
1210
  schedule: z.ZodOptional<z.ZodOptional<z.ZodObject<{
675
1211
  windows: z.ZodArray<z.ZodObject<{
@@ -688,6 +1224,7 @@ export declare const notificationRulesCapability: {
688
1224
  attach: z.ZodDefault<z.ZodEnum<{
689
1225
  none: "none";
690
1226
  best: "best";
1227
+ "best-matching": "best-matching";
691
1228
  keyFrame: "keyFrame";
692
1229
  }>>;
693
1230
  }, z.core.$strip>>>;
@@ -703,6 +1240,8 @@ export declare const notificationRulesCapability: {
703
1240
  body: z.ZodOptional<z.ZodString>;
704
1241
  }, z.core.$strip>>>;
705
1242
  priority: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
1243
+ ownerUserId: z.ZodOptional<z.ZodOptional<z.ZodString>>;
1244
+ disabledTargetIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
706
1245
  }, z.core.$strip>;
707
1246
  }, z.core.$strip>, z.ZodObject<{
708
1247
  rule: z.ZodObject<{
@@ -711,6 +1250,8 @@ export declare const notificationRulesCapability: {
711
1250
  delivery: z.ZodEnum<{
712
1251
  immediate: "immediate";
713
1252
  "track-end": "track-end";
1253
+ "device-event": "device-event";
1254
+ "package-event": "package-event";
714
1255
  }>;
715
1256
  conditions: z.ZodDefault<z.ZodObject<{
716
1257
  devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
@@ -731,6 +1272,42 @@ export declare const notificationRulesCapability: {
731
1272
  values: z.ZodArray<z.ZodString>;
732
1273
  maxDistance: z.ZodDefault<z.ZodNumber>;
733
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>>;
734
1311
  }, z.core.$strip>>;
735
1312
  schedule: z.ZodOptional<z.ZodObject<{
736
1313
  windows: z.ZodArray<z.ZodObject<{
@@ -749,6 +1326,7 @@ export declare const notificationRulesCapability: {
749
1326
  attach: z.ZodDefault<z.ZodEnum<{
750
1327
  none: "none";
751
1328
  best: "best";
1329
+ "best-matching": "best-matching";
752
1330
  keyFrame: "keyFrame";
753
1331
  }>>;
754
1332
  }, z.core.$strip>>;
@@ -764,10 +1342,12 @@ export declare const notificationRulesCapability: {
764
1342
  body: z.ZodOptional<z.ZodString>;
765
1343
  }, z.core.$strip>>;
766
1344
  priority: z.ZodDefault<z.ZodNumber>;
1345
+ ownerUserId: z.ZodOptional<z.ZodString>;
767
1346
  id: z.ZodString;
768
1347
  createdBy: z.ZodString;
769
1348
  createdAt: z.ZodNumber;
770
1349
  updatedAt: z.ZodNumber;
1350
+ disabledTargetIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
771
1351
  }, z.core.$strip>;
772
1352
  }, z.core.$strip>, "mutation"> & {
773
1353
  readonly caller: "required";
@@ -795,6 +1375,8 @@ export declare const notificationRulesCapability: {
795
1375
  delivery: z.ZodEnum<{
796
1376
  immediate: "immediate";
797
1377
  "track-end": "track-end";
1378
+ "device-event": "device-event";
1379
+ "package-event": "package-event";
798
1380
  }>;
799
1381
  conditions: z.ZodDefault<z.ZodObject<{
800
1382
  devices: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
@@ -815,6 +1397,42 @@ export declare const notificationRulesCapability: {
815
1397
  values: z.ZodArray<z.ZodString>;
816
1398
  maxDistance: z.ZodDefault<z.ZodNumber>;
817
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>>;
818
1436
  }, z.core.$strip>>;
819
1437
  schedule: z.ZodOptional<z.ZodObject<{
820
1438
  windows: z.ZodArray<z.ZodObject<{
@@ -833,6 +1451,7 @@ export declare const notificationRulesCapability: {
833
1451
  attach: z.ZodDefault<z.ZodEnum<{
834
1452
  none: "none";
835
1453
  best: "best";
1454
+ "best-matching": "best-matching";
836
1455
  keyFrame: "keyFrame";
837
1456
  }>>;
838
1457
  }, z.core.$strip>>;
@@ -848,12 +1467,15 @@ export declare const notificationRulesCapability: {
848
1467
  body: z.ZodOptional<z.ZodString>;
849
1468
  }, z.core.$strip>>;
850
1469
  priority: z.ZodDefault<z.ZodNumber>;
1470
+ ownerUserId: z.ZodOptional<z.ZodString>;
851
1471
  }, z.core.$strip>;
852
1472
  lookbackMinutes: z.ZodDefault<z.ZodNumber>;
853
1473
  }, z.core.$strip>, z.ZodObject<{
854
1474
  results: z.ZodArray<z.ZodObject<{
855
1475
  recordId: z.ZodString;
856
1476
  recordKind: z.ZodEnum<{
1477
+ "device-event": "device-event";
1478
+ "package-event": "package-event";
857
1479
  "object-event": "object-event";
858
1480
  track: "track";
859
1481
  }>;
@@ -869,22 +1491,30 @@ export declare const notificationRulesCapability: {
869
1491
  catalog: z.ZodArray<z.ZodObject<{
870
1492
  id: z.ZodString;
871
1493
  group: z.ZodEnum<{
1494
+ device: "device";
872
1495
  label: "label";
873
1496
  scope: "scope";
874
1497
  class: "class";
875
1498
  schedule: "schedule";
876
1499
  zones: "zones";
1500
+ package: "package";
1501
+ occupancy: "occupancy";
877
1502
  quality: "quality";
878
1503
  }>;
879
1504
  label: z.ZodString;
880
1505
  valueType: z.ZodEnum<{
1506
+ number: "number";
881
1507
  schedule: "schedule";
1508
+ packagePhase: "packagePhase";
1509
+ occupancy: "occupancy";
882
1510
  deviceIdList: "deviceIdList";
883
1511
  stringList: "stringList";
884
1512
  number01: "number01";
1513
+ sourceSelect: "sourceSelect";
885
1514
  zoneSelection: "zoneSelection";
886
1515
  zoneIdList: "zoneIdList";
887
1516
  plateMatcher: "plateMatcher";
1517
+ polygonDraw: "polygonDraw";
888
1518
  }>;
889
1519
  operator: z.ZodEnum<{
890
1520
  in: "in";
@@ -898,11 +1528,74 @@ export declare const notificationRulesCapability: {
898
1528
  appliesTo: z.ZodArray<z.ZodEnum<{
899
1529
  immediate: "immediate";
900
1530
  "track-end": "track-end";
1531
+ "device-event": "device-event";
1532
+ "package-event": "package-event";
901
1533
  }>>;
902
1534
  phase: z.ZodString;
903
1535
  description: z.ZodOptional<z.ZodString>;
904
1536
  }, z.core.$strip>>;
905
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>;
906
1599
  };
907
1600
  };
908
1601
  export type INotificationRulesProvider = InferProvider<typeof notificationRulesCapability>;