@camstack/types 1.2.110 → 1.2.112

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/addon.js CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_event_category = require("./event-category-EY0GNjV9.js");
3
- const require_sleep = require("./sleep-DnbNfEhn.js");
3
+ const require_sleep = require("./sleep-CSodb2vQ.js");
4
4
  const require_err_msg = require("./err-msg-COpsHMw2.js");
5
5
  //#region src/generated/cap-input-defaults.ts
6
6
  /**
package/dist/addon.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { t as EventCategory } from "./event-category-CIa_iT6b.mjs";
2
- import { B as ReadinessRegistry, E as adminUiCapability, L as nodePin, R as readNodePin, St as emitReadiness, T as DeviceType, V as ReadinessTimeoutError, W as scopeKey, _t as DisposerChain, a as asJsonObject, b as deviceOpsCapability, d as BOOT_RECOVERY_BACKOFF_MS, f as DEVICE_SCOPED_CAPS, gt as DATAPLANE_SECRET_HEADER, h as createEventBusSliceSource, j as expandCapMethods, m as createDeviceProxy, p as isDeviceScopedCap, s as asString, t as sleep, u as parseJsonUnknown, vt as BaseAddon, x as viewerUiCapability, yt as normalizeAddonInitResult } from "./sleep-swxwnJmL.mjs";
2
+ import { B as ReadinessRegistry, E as adminUiCapability, L as nodePin, R as readNodePin, St as emitReadiness, T as DeviceType, V as ReadinessTimeoutError, W as scopeKey, _t as DisposerChain, a as asJsonObject, b as deviceOpsCapability, d as BOOT_RECOVERY_BACKOFF_MS, f as DEVICE_SCOPED_CAPS, gt as DATAPLANE_SECRET_HEADER, h as createEventBusSliceSource, j as expandCapMethods, m as createDeviceProxy, p as isDeviceScopedCap, s as asString, t as sleep, u as parseJsonUnknown, vt as BaseAddon, x as viewerUiCapability, yt as normalizeAddonInitResult } from "./sleep-CdbM8ge4.mjs";
3
3
  import { t as errMsg } from "./err-msg-IQTHeDzc.mjs";
4
4
  //#region src/generated/cap-input-defaults.ts
5
5
  /**
@@ -179,7 +179,7 @@ export { type IPrivacyMaskProvider, type PrivacyMaskOptions, PrivacyMaskOptionsS
179
179
  export { type IPtzProvider, PtzMoveCommandSchema, type PtzOptions, PtzOptionsSchema, PtzPositionSchema, PtzPresetSchema, type PtzStatus, PtzStatusSchema, ptzCapability, } from './ptz.cap.js';
180
180
  export { type IPtzAutotrackProvider, type PtzAutotrackRuntimeState, PtzAutotrackRuntimeStateSchema, type PtzAutotrackSettings, PtzAutotrackSettingsSchema, type PtzAutotrackStatus, PtzAutotrackStatusSchema, type PtzAutotrackTargetOption, PtzAutotrackTargetOptionSchema, ptzAutotrackCapability, } from './ptz-autotrack.cap.js';
181
181
  export { type IRebootProvider, rebootCapability } from './reboot.cap.js';
182
- export { type IRecordingProvider, type LocateSegmentResult, LocateSegmentResultSchema, type ReadGopBytesResult, ReadGopBytesResultSchema, type ReadSegmentBytesResult, ReadSegmentBytesResultSchema, type RecordingAvailability, RecordingAvailabilitySchema, type RecordingDays, RecordingDaysSchema, type RecordingDeviceUsage, RecordingDeviceUsageSchema, type RecordingLocationUsage, RecordingLocationUsageSchema, type RecordingManifest, RecordingManifestSchema, RecordingRangeSchema, type RecordingRebalanceInput, RecordingRebalanceInputSchema, type RecordingRebalanceMove, RecordingRebalanceMoveSchema, type RecordingRebalancePlan, RecordingRebalancePlanSchema, type RecordingRebalanceSkip, type RecordingRebalanceSkipReason, RecordingRebalanceSkipReasonSchema, RecordingRebalanceSkipSchema, type RecordingStatus, RecordingStatusSchema, type RecordingStorageUsage, RecordingStorageUsageSchema, recordingCapability, } from './recording.cap.js';
182
+ export { type IRecordingProvider, type LocateSegmentResult, LocateSegmentResultSchema, type ReadGopBytesResult, ReadGopBytesResultSchema, type ReadSegmentBytesResult, ReadSegmentBytesResultSchema, type ReadWindowBytesResult, ReadWindowBytesResultSchema, type RecordingAvailability, RecordingAvailabilitySchema, type RecordingDays, RecordingDaysSchema, type RecordingDeviceUsage, RecordingDeviceUsageSchema, type RecordingLocationUsage, RecordingLocationUsageSchema, type RecordingManifest, RecordingManifestSchema, RecordingRangeSchema, type RecordingRebalanceInput, RecordingRebalanceInputSchema, type RecordingRebalanceMove, RecordingRebalanceMoveSchema, type RecordingRebalancePlan, RecordingRebalancePlanSchema, type RecordingRebalanceSkip, type RecordingRebalanceSkipReason, RecordingRebalanceSkipReasonSchema, RecordingRebalanceSkipSchema, type RecordingStatus, RecordingStatusSchema, type RecordingStorageUsage, RecordingStorageUsageSchema, recordingCapability, } from './recording.cap.js';
183
183
  export { EXPORT_DENSE_MAX_RANGES, type ExportBytes, ExportBytesSchema, type ExportDense, type ExportDenseRange, ExportDenseRangeSchema, ExportDenseSchema, type ExportDownload, ExportDownloadSchema, type ExportOptions, ExportOptionsSchema, type ExportRecord, ExportRecordSchema, ExportSpeedSchema, type ExportState, ExportStateSchema, ExportTimelapseSchema, type IRecordingExportProvider, RECORDING_EXPORT_MAX_READ_BYTES, recordingExportCapability, } from './recording-export.cap.js';
184
184
  export { type ISceneMonitorProvider, SCENE_CONDITIONS, SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX, SCENE_CONFIRM_DEFAULT_TIMEOUT_MS, SCENE_DEFAULT_ANCHOR_THRESHOLD, SCENE_DEFAULT_CHECK_INTERVAL_SEC, SCENE_DEFAULT_OBSERVATION_SPACING_SEC, SCENE_DEFAULT_QUIET_SECONDS, SCENE_DEFAULT_UNCOVERED_POLICY, SCENE_DIVERGED, SCENE_RESET_RECAPTURES, type SceneCheck, SceneCheckSchema, type SceneCondition, SceneConditionSchema, type SceneConfirm, SceneConfirmSchema, type SceneMonitor, SceneMonitorSchema, type SceneMonitorState, SceneMonitorStateSchema, type SceneMonitorStatus, SceneMonitorStatusSchema, type SceneReference, SceneReferenceSchema, type SceneUnavailable, SceneUnavailableSchema, type SceneUncoveredPolicy, SceneUncoveredPolicySchema, type SceneVerdict, SceneVerdictSchema, sceneMonitorCapability, } from './scene-monitor.cap.js';
185
185
  export { type ZoneRule, type ZoneRuleMode, ZoneRuleModeEnum, ZoneRuleSchema, type ZoneRules, ZoneRulesArraySchema, } from './schemas/zone-rule.js';
@@ -1812,6 +1812,7 @@ export declare const NcHistoryEntrySchema: z.ZodObject<{
1812
1812
  data: z.ZodRecord<z.ZodString, z.ZodUnknown>;
1813
1813
  }, z.core.$strip>>;
1814
1814
  }, z.core.$strip>;
1815
+ artifactIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
1815
1816
  }, z.core.$strip>;
1816
1817
  export type NcHistoryEntry = z.infer<typeof NcHistoryEntrySchema>;
1817
1818
  /** `getHistory` default page size + hard ceiling (bounded output). */
@@ -4047,8 +4048,27 @@ export declare const notificationRulesCapability: {
4047
4048
  data: z.ZodRecord<z.ZodString, z.ZodUnknown>;
4048
4049
  }, z.core.$strip>>;
4049
4050
  }, z.core.$strip>;
4051
+ artifactIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
4050
4052
  }, z.core.$strip>>;
4051
4053
  }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
4054
+ /**
4055
+ * Mint a fresh, externally-reachable URL for one artefact a history row
4056
+ * named in {@link NcHistoryEntrySchema.shape.artifactIds} — the SAME
4057
+ * signed-link mechanism the dispatcher uses to attach media to an
4058
+ * outgoing notification (one derivation; this never re-implements it).
4059
+ *
4060
+ * `url: null` on THREE causes a caller must treat identically ("no image
4061
+ * right now", never a broken link): the id is unknown, its artefact has
4062
+ * expired past the retained shelf's own age bound, or this install has no
4063
+ * externally-reachable base URL. A caller that received a URL on a
4064
+ * previous call and now gets `null` must stop showing it — a link that
4065
+ * worked five minutes ago is not proof it works now.
4066
+ */
4067
+ readonly resolveArtifactUrl: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
4068
+ artifactId: z.ZodString;
4069
+ }, z.core.$strip>, z.ZodObject<{
4070
+ url: z.ZodNullable<z.ZodString>;
4071
+ }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
4052
4072
  /**
4053
4073
  * Snooze windows currently in effect, plus any whose digest has not yet
4054
4074
  * gone out. `caller: 'required'`: a user sees their OWN windows and the
@@ -1338,6 +1338,34 @@ declare const EventPruneCountsSchema: z.ZodObject<{
1338
1338
  audio: z.ZodNumber;
1339
1339
  }, z.core.$strip>;
1340
1340
  export type EventPruneCounts = z.infer<typeof EventPruneCountsSchema>;
1341
+ declare const ReplayTrackSchema: z.ZodObject<{
1342
+ className: z.ZodString;
1343
+ firstSeenMs: z.ZodNumber;
1344
+ lastSeenMs: z.ZodNumber;
1345
+ bbox: z.ZodObject<{
1346
+ x: z.ZodNumber;
1347
+ y: z.ZodNumber;
1348
+ w: z.ZodNumber;
1349
+ h: z.ZodNumber;
1350
+ }, z.core.$strip>;
1351
+ framesMatched: z.ZodNumber;
1352
+ }, z.core.$strip>;
1353
+ declare const RunReplayFrameProcessorResultSchema: z.ZodObject<{
1354
+ tracks: z.ZodReadonly<z.ZodArray<z.ZodObject<{
1355
+ className: z.ZodString;
1356
+ firstSeenMs: z.ZodNumber;
1357
+ lastSeenMs: z.ZodNumber;
1358
+ bbox: z.ZodObject<{
1359
+ x: z.ZodNumber;
1360
+ y: z.ZodNumber;
1361
+ w: z.ZodNumber;
1362
+ h: z.ZodNumber;
1363
+ }, z.core.$strip>;
1364
+ framesMatched: z.ZodNumber;
1365
+ }, z.core.$strip>>>;
1366
+ }, z.core.$strip>;
1367
+ export type ReplayTrack = z.infer<typeof ReplayTrackSchema>;
1368
+ export type RunReplayFrameProcessorResult = z.infer<typeof RunReplayFrameProcessorResultSchema>;
1341
1369
  export declare const pipelineAnalyticsCapability: {
1342
1370
  readonly name: "pipeline-analytics";
1343
1371
  readonly scope: "device";
@@ -2751,6 +2779,73 @@ export declare const pipelineAnalyticsCapability: {
2751
2779
  reason: z.ZodString;
2752
2780
  detail: z.ZodOptional<z.ZodString>;
2753
2781
  }, z.core.$strip>], "kind">, "mutation">;
2782
+ /**
2783
+ * The FrameProcessor pass of a replay run — see the `Replay` section
2784
+ * above this capability's definition for why this is not the
2785
+ * `processFrame` method this file's header says pipeline-analytics does
2786
+ * not have.
2787
+ *
2788
+ * Constructs a FRESH `FrameProcessor` for `(deviceId, source)`, feeds it
2789
+ * `frames` IN THE ORDER GIVEN (the caller is responsible for time
2790
+ * ordering — this method does not sort), and returns the tracks it
2791
+ * produced. Zero persistence: no `TrackStore`, no event bus, no media
2792
+ * capture. `zones` / `detectionRules` are the run's OWN zone set —
2793
+ * typically the camera's real zones plus an ephemeral overlay
2794
+ * (`addon-benchmark`'s `replay-plan.ts`), never read from or written to
2795
+ * the `zones` capability by this method itself.
2796
+ */
2797
+ readonly runReplayFrameProcessor: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
2798
+ deviceId: z.ZodNumber;
2799
+ source: z.ZodEnum<{
2800
+ pipeline: "pipeline";
2801
+ onboard: "onboard";
2802
+ }>;
2803
+ zones: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
2804
+ id: z.ZodString;
2805
+ name: z.ZodString;
2806
+ kind: z.ZodDefault<z.ZodEnum<{
2807
+ polygon: "polygon";
2808
+ tripwire: "tripwire";
2809
+ }>>;
2810
+ polygon: z.ZodReadonly<z.ZodArray<z.ZodObject<{
2811
+ x: z.ZodNumber;
2812
+ y: z.ZodNumber;
2813
+ }, z.core.$strip>>>;
2814
+ color: z.ZodDefault<z.ZodString>;
2815
+ }, z.core.$strip>>>>;
2816
+ detectionRules: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
2817
+ id: z.ZodString;
2818
+ name: z.ZodOptional<z.ZodString>;
2819
+ zoneIds: z.ZodReadonly<z.ZodArray<z.ZodString>>;
2820
+ mode: z.ZodEnum<{
2821
+ include: "include";
2822
+ exclude: "exclude";
2823
+ }>;
2824
+ classFilter: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
2825
+ overlapThreshold: z.ZodOptional<z.ZodNumber>;
2826
+ bboxInclusionPct: z.ZodOptional<z.ZodNumber>;
2827
+ preferMask: z.ZodOptional<z.ZodBoolean>;
2828
+ enabled: z.ZodDefault<z.ZodBoolean>;
2829
+ }, z.core.$strip>>>>;
2830
+ zoneMembershipMinOverlap: z.ZodOptional<z.ZodNumber>;
2831
+ frames: z.ZodArray<z.ZodObject<{
2832
+ timestamp: z.ZodNumber;
2833
+ frame: z.ZodCustom<import("../index.js").FrameResult, import("../index.js").FrameResult>;
2834
+ }, z.core.$strip>>;
2835
+ }, z.core.$strip>, z.ZodObject<{
2836
+ tracks: z.ZodReadonly<z.ZodArray<z.ZodObject<{
2837
+ className: z.ZodString;
2838
+ firstSeenMs: z.ZodNumber;
2839
+ lastSeenMs: z.ZodNumber;
2840
+ bbox: z.ZodObject<{
2841
+ x: z.ZodNumber;
2842
+ y: z.ZodNumber;
2843
+ w: z.ZodNumber;
2844
+ h: z.ZodNumber;
2845
+ }, z.core.$strip>;
2846
+ framesMatched: z.ZodNumber;
2847
+ }, z.core.$strip>>>;
2848
+ }, z.core.$strip>, "mutation">;
2754
2849
  /** Every annotation on a track, oldest first. */
2755
2850
  readonly listRetrainAnnotations: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
2756
2851
  trackId: z.ZodString;
@@ -638,6 +638,56 @@ export declare const pipelineExecutorCapability: {
638
638
  success: z.ZodLiteral<true>;
639
639
  clearedDevices: z.ZodNumber;
640
640
  }, z.core.$strip>, "mutation">;
641
+ /**
642
+ * Which of THIS node's inference devices the executor currently refuses,
643
+ * and why. `nodeId` is the ROUTING key (stripped by the generated router).
644
+ *
645
+ * The channel that did not exist. Pool health was known only inside the
646
+ * detection addon and was an input to no routing decision anywhere: the
647
+ * per-dispatch capability gate is keyed on model FORMAT and so can never
648
+ * separate `openvino:gpu` from `openvino:npu`, and the orchestrator's live
649
+ * eligibility probe (`platformProbe.getCapabilities`) answers about
650
+ * HARDWARE — which was present throughout. So when the hub's `openvino:gpu`
651
+ * Python worker was SIGABRT'd by the Intel GPU plugin on 2026-08-25, the
652
+ * balancer went on handing that dead pool cameras by rotation for 31 hours:
653
+ * ~370 000 `PoolWorker[w0]: not initialized` lines, every frame lost.
654
+ *
655
+ * Read semantics the caller depends on, and which the provider guarantees:
656
+ * this is a synchronous read of in-memory state. It never probes hardware,
657
+ * never spawns a pool and never throws — an EMPTY `unhealthy` means "asked,
658
+ * nothing is refused", which is what re-admits a device. A read that FAILS
659
+ * (node offline, version skew) must therefore be distinguishable from an
660
+ * empty answer, and it is: it rejects.
661
+ */
662
+ readonly getInferenceDeviceHealth: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
663
+ nodeId: z.ZodString;
664
+ }, z.core.$strip>, z.ZodObject<{
665
+ unhealthy: z.ZodReadonly<z.ZodArray<z.ZodObject<{
666
+ deviceKey: z.ZodString;
667
+ state: z.ZodEnum<{
668
+ failed: "failed";
669
+ backoff: "backoff";
670
+ }>;
671
+ since: z.ZodNumber;
672
+ deaths: z.ZodNumber;
673
+ lastError: z.ZodString;
674
+ }, z.core.$strip>>>;
675
+ }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
676
+ /**
677
+ * Re-arm a terminally `failed` inference device on `nodeId`: forget its
678
+ * restart budget so the next dispatch builds a fresh pool.
679
+ *
680
+ * The terminal state is deliberate (the abort it bounds is deterministic —
681
+ * an automatic probation would just respawn Python forever, more slowly),
682
+ * and a terminal state an operator cannot leave is a silent fault. This is
683
+ * the way out. `rearmed:false` means there was nothing to forget.
684
+ */
685
+ readonly rearmInferenceDevice: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
686
+ nodeId: z.ZodString;
687
+ deviceKey: z.ZodString;
688
+ }, z.core.$strip>, z.ZodObject<{
689
+ rearmed: z.ZodBoolean;
690
+ }, z.core.$strip>, "mutation">;
641
691
  readonly getSchema: import("./capability-definition.js").CapabilityMethodSchema<z.ZodVoid, z.ZodObject<{
642
692
  availableEngines: z.ZodReadonly<z.ZodArray<z.ZodObject<{
643
693
  engine: z.ZodObject<{
@@ -203,6 +203,33 @@ export declare const ReadGopBytesResultSchema: z.ZodObject<{
203
203
  gopDurMs: z.ZodNumber;
204
204
  }, z.core.$strip>;
205
205
  export type ReadGopBytesResult = z.infer<typeof ReadGopBytesResultSchema>;
206
+ /**
207
+ * A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
208
+ * twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
209
+ * replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
210
+ * a replay needs several seconds of native pixels, not one frame.
211
+ *
212
+ * `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
213
+ * is `false` when the returned bytes were cut short by the read's own safety
214
+ * byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
215
+ * silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
216
+ * degradation: a window whose end falls past the covering segment would need
217
+ * bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
218
+ * not one standalone-demuxable stream — the caller's answer is to request a
219
+ * shorter window or one aligned to a single segment, not to receive spliced
220
+ * bytes nothing has proven decodable.
221
+ */
222
+ export declare const ReadWindowBytesResultSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
223
+ kind: z.ZodLiteral<"ok">;
224
+ data: z.ZodCustom<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>;
225
+ gopStartMs: z.ZodNumber;
226
+ gopDurMs: z.ZodNumber;
227
+ reachesRequestedEnd: z.ZodBoolean;
228
+ }, z.core.$strip>, z.ZodObject<{
229
+ kind: z.ZodLiteral<"spans-multiple-segments">;
230
+ segmentEndMs: z.ZodNumber;
231
+ }, z.core.$strip>], "kind">;
232
+ export type ReadWindowBytesResult = z.infer<typeof ReadWindowBytesResultSchema>;
206
233
  export declare const recordingCapability: {
207
234
  readonly name: "recording";
208
235
  readonly scope: "system";
@@ -348,6 +375,27 @@ export declare const recordingCapability: {
348
375
  gopStartMs: z.ZodNumber;
349
376
  gopDurMs: z.ZodNumber;
350
377
  }, z.core.$strip>, "query">;
378
+ /** Read a WINDOW `[fromMs, toMs)` of segment `startMs`, by mfra byte
379
+ * range — the multi-GOP twin of `readGopBytes`. Refuses (does not
380
+ * degrade) when the window runs past the covering segment. Used by the
381
+ * replay clip's `recording` source to fetch several seconds of native
382
+ * footage for its single ffmpeg decode pass. */
383
+ readonly readWindowBytes: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
384
+ deviceId: z.ZodNumber;
385
+ profile: z.ZodString;
386
+ startMs: z.ZodNumber;
387
+ fromMs: z.ZodNumber;
388
+ toMs: z.ZodNumber;
389
+ }, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
390
+ kind: z.ZodLiteral<"ok">;
391
+ data: z.ZodCustom<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>;
392
+ gopStartMs: z.ZodNumber;
393
+ gopDurMs: z.ZodNumber;
394
+ reachesRequestedEnd: z.ZodBoolean;
395
+ }, z.core.$strip>, z.ZodObject<{
396
+ kind: z.ZodLiteral<"spans-multiple-segments">;
397
+ segmentEndMs: z.ZodNumber;
398
+ }, z.core.$strip>], "kind">, "query">;
351
399
  readonly setDeviceConfig: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
352
400
  deviceId: z.ZodNumber;
353
401
  config: z.ZodObject<{
@@ -4526,6 +4526,13 @@ export type AppRouter = TrpcCoreRouter<{
4526
4526
  output: z.infer<typeof notificationRulesCapability.methods.getHistory.output>;
4527
4527
  meta: object;
4528
4528
  }>;
4529
+ resolveArtifactUrl: TRPCQueryProcedure<{
4530
+ input: {
4531
+ [x: string]: unknown;
4532
+ } & z.input<typeof notificationRulesCapability.methods.resolveArtifactUrl.input>;
4533
+ output: z.infer<typeof notificationRulesCapability.methods.resolveArtifactUrl.output>;
4534
+ meta: object;
4535
+ }>;
4529
4536
  listSnoozes: TRPCQueryProcedure<{
4530
4537
  input: {
4531
4538
  [x: string]: unknown;
@@ -5108,6 +5115,13 @@ export type AppRouter = TrpcCoreRouter<{
5108
5115
  output: z.infer<typeof pipelineAnalyticsCapability.methods.proposeRetrainAnnotations.output>;
5109
5116
  meta: object;
5110
5117
  }>;
5118
+ runReplayFrameProcessor: TRPCMutationProcedure<{
5119
+ input: {
5120
+ [x: string]: unknown;
5121
+ } & z.input<typeof pipelineAnalyticsCapability.methods.runReplayFrameProcessor.input>;
5122
+ output: z.infer<typeof pipelineAnalyticsCapability.methods.runReplayFrameProcessor.output>;
5123
+ meta: object;
5124
+ }>;
5111
5125
  listRetrainAnnotations: TRPCQueryProcedure<{
5112
5126
  input: {
5113
5127
  [x: string]: unknown;
@@ -5248,6 +5262,20 @@ export type AppRouter = TrpcCoreRouter<{
5248
5262
  output: z.infer<typeof pipelineExecutorCapability.methods.clearDeviceOverrides.output>;
5249
5263
  meta: object;
5250
5264
  }>;
5265
+ getInferenceDeviceHealth: TRPCQueryProcedure<{
5266
+ input: {
5267
+ [x: string]: unknown;
5268
+ } & z.input<typeof pipelineExecutorCapability.methods.getInferenceDeviceHealth.input>;
5269
+ output: z.infer<typeof pipelineExecutorCapability.methods.getInferenceDeviceHealth.output>;
5270
+ meta: object;
5271
+ }>;
5272
+ rearmInferenceDevice: TRPCMutationProcedure<{
5273
+ input: {
5274
+ [x: string]: unknown;
5275
+ } & z.input<typeof pipelineExecutorCapability.methods.rearmInferenceDevice.input>;
5276
+ output: z.infer<typeof pipelineExecutorCapability.methods.rearmInferenceDevice.output>;
5277
+ meta: object;
5278
+ }>;
5251
5279
  getSchema: TRPCQueryProcedure<{
5252
5280
  input: {
5253
5281
  nodeId?: string | undefined;
@@ -6348,6 +6376,13 @@ export type AppRouter = TrpcCoreRouter<{
6348
6376
  output: z.infer<typeof recordingCapability.methods.readGopBytes.output>;
6349
6377
  meta: object;
6350
6378
  }>;
6379
+ readWindowBytes: TRPCQueryProcedure<{
6380
+ input: {
6381
+ [x: string]: unknown;
6382
+ } & z.input<typeof recordingCapability.methods.readWindowBytes.input>;
6383
+ output: z.infer<typeof recordingCapability.methods.readWindowBytes.output>;
6384
+ meta: object;
6385
+ }>;
6351
6386
  setDeviceConfig: TRPCMutationProcedure<{
6352
6387
  input: {
6353
6388
  [x: string]: unknown;
@@ -280,7 +280,7 @@ export interface DeviceProxy {
280
280
  readonly pipelineOrchestrator: Pick<InferDeviceProxyCap<typeof pipelineOrchestratorCapability>, 'assignPipeline' | 'unassignPipeline' | 'setPipelineDevicePin' | 'getPipelineDevicePin' | 'getPipelineAssignment' | 'getCameraMetrics' | 'assignAudio' | 'unassignAudio' | 'getAudioAssignment' | 'getAudioAssignments' | 'getCameraSettings' | 'setCameraStepToggle' | 'getCameraStepOverrides' | 'setCameraStepOverride' | 'setCameraPipelineForAgent' | 'resolvePipeline' | 'getCameraSwitches' | 'setCameraSwitch' | 'getCameraStatus' | 'getDeviceSettingsContribution' | 'getDeviceLiveContribution' | 'applyDeviceSettingsPatch'>;
281
281
  readonly pipelineRunner: Pick<InferDeviceProxyCap<typeof pipelineRunnerCapability>, 'detachCamera' | 'getCameraMetrics' | 'runDetailSubtree'>;
282
282
  readonly plateGallery: Pick<InferDeviceProxyCap<typeof plateGalleryCapability>, 'listPlates' | 'getPlateByTrack'>;
283
- readonly recording: Pick<InferDeviceProxyCap<typeof recordingCapability>, 'getAvailability' | 'getDaysWithRecordings' | 'getPlaybackManifest' | 'getDeviceConfig' | 'locateSegment' | 'readSegmentBytes' | 'readGopBytes' | 'setDeviceConfig' | 'rescanStorage' | 'pruneFootage' | 'deleteFootprint' | 'renderGif' | 'renderClip' | 'getStatus' | 'getDeviceSettingsContribution' | 'getDeviceLiveContribution' | 'applyDeviceSettingsPatch'>;
283
+ readonly recording: Pick<InferDeviceProxyCap<typeof recordingCapability>, 'getAvailability' | 'getDaysWithRecordings' | 'getPlaybackManifest' | 'getDeviceConfig' | 'locateSegment' | 'readSegmentBytes' | 'readGopBytes' | 'readWindowBytes' | 'setDeviceConfig' | 'rescanStorage' | 'pruneFootage' | 'deleteFootprint' | 'renderGif' | 'renderClip' | 'getStatus' | 'getDeviceSettingsContribution' | 'getDeviceLiveContribution' | 'applyDeviceSettingsPatch'>;
284
284
  readonly recordingExport: Pick<InferDeviceProxyCap<typeof recordingExportCapability>, 'listExports'>;
285
285
  readonly streamBroker: Pick<InferDeviceProxyCap<typeof streamBrokerCapability>, 'publishCameraStream' | 'retractCameraStream' | 'assignProfile' | 'unassignProfile' | 'renderPreBufferClip' | 'produceEventMedia' | 'restartProfile' | 'getDeviceAudioMute' | 'setDeviceAudioMute' | 'getDeviceSettingsContribution' | 'getDeviceLiveContribution' | 'applyDeviceSettingsPatch'>;
286
286
  }
@@ -6,7 +6,7 @@
6
6
  * scope+access check inside `protectedProcedure` (see
7
7
  * `server/backend/src/api/trpc/trpc.middleware.ts`).
8
8
  *
9
- * Coverage: 958 method paths across 123 capabilities.
9
+ * Coverage: 963 method paths across 123 capabilities.
10
10
  */
11
11
  import type { CapabilityMethodAccess } from '../capabilities/capability-definition.js';
12
12
  export interface MethodAccessRecord {
@@ -6,8 +6,8 @@
6
6
  * system-scope cap that takes a deviceId was previously never device-filtered
7
7
  * — see the generator header).
8
8
  *
9
- * Coverage: 342 methods carry a device reference, of which
10
- * 127 are on SYSTEM-scope caps.
9
+ * Coverage: 344 methods carry a device reference, of which
10
+ * 128 are on SYSTEM-scope caps.
11
11
  *
12
12
  * Top-level fields, number arrays, and one-level arrays of objects carrying
13
13
  * a numeric device field (targets[].deviceId) are all mapped; the matcher
@@ -83,7 +83,7 @@ export interface SystemProxy {
83
83
  readonly nodes: Pick<InferProvider<typeof nodesCapability>, 'topology' | 'deployAddon' | 'undeployAddon' | 'restartAddon' | 'restartProcess' | 'restartNode' | 'shutdownNode' | 'renameNode' | 'clusterAddonStatus' | 'getCapUsageGraph' | 'getNodeAddons' | 'setProcessLogLevel' | 'executeQuery'>;
84
84
  readonly notificationOutput: Pick<InferProvider<typeof notificationOutputCapability>, 'listTargetKinds' | 'listTargets' | 'discoverTargets' | 'send' | 'testTarget' | 'upsertTarget' | 'deleteTarget' | 'setTargetEnabled'>;
85
85
  readonly osdManager: Pick<InferProvider<typeof osdManagerCapability>, 'getConditionSupport' | 'copyDeviceConfiguration'>;
86
- readonly pipelineExecutor: Pick<InferProvider<typeof pipelineExecutorCapability>, 'getAvailableEngines' | 'getSelectedEngine' | 'getDefaultSteps' | 'getEngineProvisioning' | 'getVideoPipelineSteps' | 'setVideoPipelineSteps' | 'clearDeviceOverrides' | 'getSchema' | 'getGlobalSteps' | 'getGlobalPipelineConfig' | 'getOrchestratorConfigSchema' | 'validatePipeline' | 'listTemplates' | 'saveTemplate' | 'updateTemplate' | 'deleteTemplate' | 'getCapabilities' | 'getAddonModels' | 'downloadModel' | 'deleteModel' | 'cacheFrameInPool' | 'inferCached' | 'uncacheFrame' | 'getEffectiveTuning' | 'listLoadedEngines' | 'spinEngine' | 'killEngine' | 'listReferenceImages' | 'getReferenceImage' | 'getReferenceAudioFiles' | 'getReferenceAudio' | 'getAudioCapabilities' | 'runAudioTest' | 'getDetectionConfigSchema'>;
86
+ readonly pipelineExecutor: Pick<InferProvider<typeof pipelineExecutorCapability>, 'getAvailableEngines' | 'getSelectedEngine' | 'getDefaultSteps' | 'getEngineProvisioning' | 'getVideoPipelineSteps' | 'setVideoPipelineSteps' | 'clearDeviceOverrides' | 'getInferenceDeviceHealth' | 'rearmInferenceDevice' | 'getSchema' | 'getGlobalSteps' | 'getGlobalPipelineConfig' | 'getOrchestratorConfigSchema' | 'validatePipeline' | 'listTemplates' | 'saveTemplate' | 'updateTemplate' | 'deleteTemplate' | 'getCapabilities' | 'getAddonModels' | 'downloadModel' | 'deleteModel' | 'cacheFrameInPool' | 'inferCached' | 'uncacheFrame' | 'getEffectiveTuning' | 'listLoadedEngines' | 'spinEngine' | 'killEngine' | 'listReferenceImages' | 'getReferenceImage' | 'getReferenceAudioFiles' | 'getReferenceAudio' | 'getAudioCapabilities' | 'runAudioTest' | 'getDetectionConfigSchema'>;
87
87
  readonly pipelineOrchestrator: Pick<InferProvider<typeof pipelineOrchestratorCapability>, 'pauseForStorageMigration' | 'resumeForStorageMigration' | 'rebalance' | 'getPipelineAssignments' | 'getAgentLoad' | 'getGlobalMetrics' | 'getCapabilityBindings' | 'setCapabilityBinding' | 'getIngestOwner' | 'getAudioNodeLoad' | 'getAgentSettings' | 'listAgentSettings' | 'removeAgentSettings' | 'setAgentMaxCameras' | 'setAgentDetectWeight' | 'setAgentCapabilities' | 'setAgentReachableHost' | 'setAgentInferenceDevices' | 'getNodeInferenceDevices' | 'resetNodePipelineDefaults' | 'getCameraStatuses' | 'reconcileFromDisk' | 'getReconcileFromDiskStatus' | 'listTemplates' | 'saveTemplate' | 'updateTemplate' | 'deleteTemplate'>;
88
88
  readonly pipelineRunner: Pick<InferProvider<typeof pipelineRunnerCapability>, 'attachCamera' | 'reportMotion' | 'getLocalLoad' | 'getLocalMetrics' | 'getAllCameraMetrics' | 'getLocalCameras' | 'getNativeCrop' | 'runStatelessStep'>;
89
89
  readonly plateGallery: Pick<InferProvider<typeof plateGalleryCapability>, 'getPlateMedia' | 'searchPlates' | 'suggestPlateClusters' | 'correctPlateText' | 'deletePlate' | 'listVehicles' | 'createVehicle' | 'renameVehicle' | 'deleteVehicle' | 'listVehicleSamples' | 'removeVehicleSample' | 'assignPlate' | 'unassignPlate' | 'assignPlates' | 'unassignPlates'>;