@camstack/types 1.1.39 → 1.1.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/addon.js CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_sleep = require("./sleep-BtS3xMHv.js");
2
+ const require_sleep = require("./sleep-Dqd2OlRi.js");
3
3
  const require_err_msg = require("./err-msg-COpsHMw2.js");
4
4
  exports.BaseAddon = require_sleep.BaseAddon;
5
5
  exports.DATAPLANE_SECRET_HEADER = require_sleep.DATAPLANE_SECRET_HEADER;
package/dist/addon.mjs CHANGED
@@ -1,3 +1,3 @@
1
- import { A as DATAPLANE_SECRET_HEADER, E as asString, F as scopeKey, M as ReadinessTimeoutError, a as viewerUiCapability, bt as DisposerChain, ct as normalizeAddonInitResult, dt as emitReadiness, i as deviceOpsCapability, j as ReadinessRegistry, k as parseJsonUnknown, m as expandCapMethods, o as adminUiCapability, s as createDeviceProxy, st as BaseAddon, t as sleep, w as asJsonObject, x as DeviceType, yt as EventCategory } from "./sleep-DJaTV2D7.mjs";
1
+ import { A as parseJsonUnknown, D as asString, I as scopeKey, M as ReadinessRegistry, N as ReadinessTimeoutError, S as DeviceType, T as asJsonObject, a as viewerUiCapability, bt as EventCategory, ct as BaseAddon, ft as emitReadiness, i as deviceOpsCapability, j as DATAPLANE_SECRET_HEADER, lt as normalizeAddonInitResult, m as expandCapMethods, o as adminUiCapability, s as createDeviceProxy, t as sleep, xt as DisposerChain } from "./sleep-b4Jf2n33.mjs";
2
2
  import { t as errMsg } from "./err-msg-IQTHeDzc.mjs";
3
3
  export { BaseAddon, DATAPLANE_SECRET_HEADER, DeviceType, DisposerChain, EventCategory, ReadinessRegistry, ReadinessTimeoutError, adminUiCapability, asJsonObject, asString, createDeviceProxy, deviceOpsCapability, emitReadiness, errMsg, expandCapMethods, normalizeAddonInitResult, parseJsonUnknown, scopeKey, sleep, viewerUiCapability };
@@ -61,6 +61,14 @@ export interface CapabilityMethodSchema<TInput extends z.ZodType = z.ZodType, TO
61
61
  readonly access?: CapabilityMethodAccess;
62
62
  /** Moleculer action timeout override (ms). Overrides broker global requestTimeout for this action only. */
63
63
  readonly timeoutMs?: number;
64
+ /**
65
+ * When true the method is served ONLY by the cap's system/wrapper provider —
66
+ * it is required on `InferProvider` but OPTIONAL on `InferNativeProvider`, so
67
+ * per-device driver natives (RtspCamera, OnvifCamera, …) don't stub out a
68
+ * wrapper-only concern (e.g. a cross-device cache-overview batch). Same
69
+ * rationale as the status-Partial on native providers.
70
+ */
71
+ readonly systemOnly?: boolean;
64
72
  }
65
73
  /** Schema for a capability event (emitted to EventBus) */
66
74
  export interface CapabilityEventSchema<TData extends z.ZodType = z.ZodType> {
@@ -659,8 +667,15 @@ export type InferProvider<T extends CapabilityDefinition> = {
659
667
  * separate stops every device class (RtspCamera, OnvifCamera, …) from
660
668
  * having to stub out three unused methods.
661
669
  */
670
+ type NativeMethodFn<M> = M extends CapabilityMethodSchema<infer TIn, infer TOut> ? M['kind'] extends 'subscription' ? (input: z.infer<TIn>, push: (value: z.infer<TOut>) => void) => (() => void) | void : (input: z.infer<TIn>) => Promise<z.infer<TOut>> : never;
662
671
  export type InferNativeProvider<T extends CapabilityDefinition> = {
663
- readonly [K in keyof T['methods']]: T['methods'][K] extends CapabilityMethodSchema<infer TIn, infer TOut> ? T['methods'][K]['kind'] extends 'subscription' ? (input: z.infer<TIn>, push: (value: z.infer<TOut>) => void) => (() => void) | void : (input: z.infer<TIn>) => Promise<z.infer<TOut>> : never;
672
+ readonly [K in keyof T['methods'] as T['methods'][K] extends {
673
+ systemOnly: true;
674
+ } ? never : K]: NativeMethodFn<T['methods'][K]>;
675
+ } & {
676
+ readonly [K in keyof T['methods'] as T['methods'][K] extends {
677
+ systemOnly: true;
678
+ } ? K : never]?: NativeMethodFn<T['methods'][K]>;
664
679
  } & (T extends {
665
680
  status: CapabilityStatusSchema;
666
681
  } ? Partial<DeviceStatusContribution<InferStatus<T>>> : Record<never, never>);
@@ -736,9 +751,19 @@ export interface CapabilityMethodOptions<TKind extends CapabilityMethodKind = Ca
736
751
  }
737
752
  /** Shorthand to define a method schema */
738
753
  export declare function method<TIn extends z.ZodType, TOut extends z.ZodType, TKind extends CapabilityMethodKind = 'query'>(input: TIn, output: TOut, options?: CapabilityMethodOptions<TKind>): CapabilityMethodSchema<TIn, TOut, TKind>;
754
+ /**
755
+ * A wrapper/system-only method: served exclusively by the cap's system-level
756
+ * provider (`InferProvider`), and OPTIONAL on `InferNativeProvider` so per-device
757
+ * driver natives don't stub out a wrapper concern (e.g. a cross-device cache
758
+ * overview). The `systemOnly: true` literal is what `InferNativeProvider` keys on.
759
+ */
760
+ export declare function systemMethod<TIn extends z.ZodType, TOut extends z.ZodType, TKind extends CapabilityMethodKind = 'query'>(input: TIn, output: TOut, options?: CapabilityMethodOptions<TKind>): CapabilityMethodSchema<TIn, TOut, TKind> & {
761
+ readonly systemOnly: true;
762
+ };
739
763
  /** Shorthand to define an event schema */
740
764
  export declare function event<TData extends z.ZodType>(data: TData): CapabilityEventSchema<TData>;
741
765
  /** Type guard: does this cap declare the D14 device-config archetype? */
742
766
  export declare function isDeviceConfigCap(def: CapabilityDefinition | undefined): def is CapabilityDefinition & {
743
767
  deviceConfig: DeviceConfigSpec;
744
768
  };
769
+ export {};
@@ -156,6 +156,7 @@ declare const PipelineAddonSchemaSchema: z.ZodObject<{
156
156
  defaultModelId: z.ZodString;
157
157
  defaultModelIdByFormat: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
158
158
  enabledByDefault: z.ZodOptional<z.ZodBoolean>;
159
+ backfillIntoExistingOverrides: z.ZodOptional<z.ZodBoolean>;
159
160
  defaultConfidence: z.ZodNumber;
160
161
  group: z.ZodOptional<z.ZodString>;
161
162
  configSchema: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodCustom<ConfigField, ConfigField>>>>;
@@ -221,6 +222,7 @@ declare const PipelineSlotSchemaSchema: z.ZodObject<{
221
222
  defaultModelId: z.ZodString;
222
223
  defaultModelIdByFormat: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
223
224
  enabledByDefault: z.ZodOptional<z.ZodBoolean>;
225
+ backfillIntoExistingOverrides: z.ZodOptional<z.ZodBoolean>;
224
226
  defaultConfidence: z.ZodNumber;
225
227
  group: z.ZodOptional<z.ZodString>;
226
228
  configSchema: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodCustom<ConfigField, ConfigField>>>>;
@@ -326,6 +328,7 @@ declare const PipelineSchemaSchema: z.ZodObject<{
326
328
  defaultModelId: z.ZodString;
327
329
  defaultModelIdByFormat: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
328
330
  enabledByDefault: z.ZodOptional<z.ZodBoolean>;
331
+ backfillIntoExistingOverrides: z.ZodOptional<z.ZodBoolean>;
329
332
  defaultConfidence: z.ZodNumber;
330
333
  group: z.ZodOptional<z.ZodString>;
331
334
  configSchema: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodCustom<ConfigField, ConfigField>>>>;
@@ -644,6 +647,7 @@ export declare const pipelineExecutorCapability: {
644
647
  defaultModelId: z.ZodString;
645
648
  defaultModelIdByFormat: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
646
649
  enabledByDefault: z.ZodOptional<z.ZodBoolean>;
650
+ backfillIntoExistingOverrides: z.ZodOptional<z.ZodBoolean>;
647
651
  defaultConfidence: z.ZodNumber;
648
652
  group: z.ZodOptional<z.ZodString>;
649
653
  configSchema: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodCustom<ConfigField, ConfigField>>>>;
@@ -65,6 +65,23 @@ export declare const snapshotCapability: {
65
65
  readonly invalidateCache: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
66
66
  deviceId: z.ZodNumber;
67
67
  }, z.core.$strip>, z.ZodVoid, "mutation">;
68
+ /**
69
+ * Cache-only batch overview — answers from the wrapper's in-memory cache in
70
+ * O(n) and NEVER triggers a capture. Lets a grid skip requesting images for
71
+ * devices that never produced a frame, and gives it an ETag per device for
72
+ * conditional (304-able) image fetches. `lastCapturedAt`/`cacheAgeMs`/`etag`
73
+ * are null for a device with no cached frame.
74
+ */
75
+ readonly getSnapshotOverview: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
76
+ deviceIds: z.ZodArray<z.ZodNumber>;
77
+ }, z.core.$strip>, z.ZodArray<z.ZodObject<{
78
+ deviceId: z.ZodNumber;
79
+ lastCapturedAt: z.ZodNullable<z.ZodNumber>;
80
+ cacheAgeMs: z.ZodNullable<z.ZodNumber>;
81
+ etag: z.ZodNullable<z.ZodString>;
82
+ }, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind> & {
83
+ readonly systemOnly: true;
84
+ };
68
85
  };
69
86
  readonly status: {
70
87
  readonly schema: z.ZodObject<{
@@ -12060,6 +12060,19 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
12060
12060
  output: void;
12061
12061
  meta: object;
12062
12062
  }>;
12063
+ getSnapshotOverview: import("@trpc/server").TRPCQueryProcedure<{
12064
+ input: {
12065
+ [x: string]: unknown;
12066
+ deviceIds: number[];
12067
+ };
12068
+ output: {
12069
+ deviceId: number;
12070
+ lastCapturedAt: number | null;
12071
+ cacheAgeMs: number | null;
12072
+ etag: string | null;
12073
+ }[];
12074
+ meta: object;
12075
+ }>;
12063
12076
  }>>;
12064
12077
  ssoBridge: import("@trpc/server").TRPCBuiltRouter<{
12065
12078
  ctx: TrpcContext;
@@ -26963,6 +26976,19 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
26963
26976
  output: void;
26964
26977
  meta: object;
26965
26978
  }>;
26979
+ getSnapshotOverview: import("@trpc/server").TRPCQueryProcedure<{
26980
+ input: {
26981
+ [x: string]: unknown;
26982
+ deviceIds: number[];
26983
+ };
26984
+ output: {
26985
+ deviceId: number;
26986
+ lastCapturedAt: number | null;
26987
+ cacheAgeMs: number | null;
26988
+ etag: string | null;
26989
+ }[];
26990
+ meta: object;
26991
+ }>;
26966
26992
  }>>;
26967
26993
  ssoBridge: import("@trpc/server").TRPCBuiltRouter<{
26968
26994
  ctx: TrpcContext;
@@ -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: 734 method paths across 112 capabilities.
9
+ * Coverage: 735 method paths across 112 capabilities.
10
10
  */
11
11
  import type { CapabilityMethodAccess } from '../capabilities/capability-definition.js';
12
12
  export interface MethodAccessRecord {
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_sleep = require("./sleep-BtS3xMHv.js");
2
+ const require_sleep = require("./sleep-Dqd2OlRi.js");
3
3
  const require_err_msg = require("./err-msg-COpsHMw2.js");
4
4
  let zod = require("zod");
5
5
  //#region src/health/wiring-health.ts
@@ -7589,6 +7589,7 @@ var PipelineAddonSchemaSchema = zod.z.object({
7589
7589
  defaultModelId: zod.z.string(),
7590
7590
  defaultModelIdByFormat: zod.z.record(zod.z.string(), zod.z.string()).optional(),
7591
7591
  enabledByDefault: zod.z.boolean().optional(),
7592
+ backfillIntoExistingOverrides: zod.z.boolean().optional(),
7592
7593
  defaultConfidence: zod.z.number(),
7593
7594
  group: zod.z.string().optional(),
7594
7595
  configSchema: zod.z.array(ConfigFieldBridge).readonly().optional()
@@ -18751,7 +18752,20 @@ var snapshotCapability = {
18751
18752
  invalidateCache: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), zod.z.void(), {
18752
18753
  kind: "mutation",
18753
18754
  auth: "admin"
18754
- })
18755
+ }),
18756
+ /**
18757
+ * Cache-only batch overview — answers from the wrapper's in-memory cache in
18758
+ * O(n) and NEVER triggers a capture. Lets a grid skip requesting images for
18759
+ * devices that never produced a frame, and gives it an ETag per device for
18760
+ * conditional (304-able) image fetches. `lastCapturedAt`/`cacheAgeMs`/`etag`
18761
+ * are null for a device with no cached frame.
18762
+ */
18763
+ getSnapshotOverview: require_sleep.systemMethod(zod.z.object({ deviceIds: zod.z.array(zod.z.number()).min(1).max(200) }), zod.z.array(zod.z.object({
18764
+ deviceId: zod.z.number(),
18765
+ lastCapturedAt: zod.z.number().nullable(),
18766
+ cacheAgeMs: zod.z.number().nullable(),
18767
+ etag: zod.z.string().nullable()
18768
+ })))
18755
18769
  },
18756
18770
  status: {
18757
18771
  schema: SnapshotStatusSchema,
@@ -27258,6 +27272,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
27258
27272
  addonId: null,
27259
27273
  access: "view"
27260
27274
  },
27275
+ "snapshot.getSnapshotOverview": {
27276
+ capName: "snapshot",
27277
+ capScope: "device",
27278
+ addonId: null,
27279
+ access: "view"
27280
+ },
27261
27281
  "snapshot.invalidateCache": {
27262
27282
  capName: "snapshot",
27263
27283
  capScope: "device",
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as SubscribeAudioChunksInputSchema, A as DATAPLANE_SECRET_HEADER, B as CamStreamKindSchema, C as asJsonArray, D as parseJsonArray, E as asString, F as scopeKey, G as EncodedPacketSchema, H as CameraStreamSchema, I as BrokerStatsSchema, J as ProfileRtspEntrySchema, K as FrameHandleFormatSchema, L as BrokerStatusSchema, M as ReadinessTimeoutError, N as emitDownForOwnedCaps, O as parseJsonObject, P as readinessKey, Q as StreamSourceSchema, R as CAM_PROFILE_ORDER, S as asBoolean, T as asNumber, U as DecodedAudioChunkSchema, V as CamStreamResolutionSchema, W as DecodedFrameSchema, X as ProfileSlotStatusSchema, Y as ProfileSlotSchema, Z as StreamSourceEntrySchema, _ as resolveCapMount, _t as hydrateSchema, a as viewerUiCapability, at as parseProfileBrokerId, b as DeviceRole, bt as DisposerChain, c as createLazyTrpcSource, ct as normalizeAddonInitResult, d as DEVICE_SETTINGS_CONTRIBUTION_METHODS, dt as emitReadiness, et as SubscribeAudioChunksResultSchema, f as DEVICE_STATUS_METHOD, ft as isEvent, g as method, gt as collectHydratedFieldValues, h as isDeviceConfigCap, ht as collectHydratedFieldEntries, i as deviceOpsCapability, it as makeSourceBrokerId, j as ReadinessRegistry, k as parseJsonUnknown, l as createMirrorSource, lt as createDurableState, m as expandCapMethods, mt as WELL_KNOWN_TAB_MAP, n as sleepCancellable, nt as SubscribeFramesResultSchema, o as adminUiCapability, ot as selectAssignedProfileSlots, p as event, pt as WELL_KNOWN_TABS, q as FrameHandleSchema, r as RawStateResultSchema, rt as makeProfileBrokerId, s as createDeviceProxy, st as BaseAddon, t as sleep, tt as SubscribeFramesInputSchema, u as createSliceHandle, ut as createEvent, v as ChargingStatus, vt as resolveHydratedFieldValue, w as asJsonObject, x as DeviceType, y as DeviceFeature, yt as EventCategory, z as CamProfileSchema } from "./sleep-DJaTV2D7.mjs";
1
+ import { $ as StreamSourceSchema, A as parseJsonUnknown, B as CamProfileSchema, C as asBoolean, D as asString, E as asNumber, F as readinessKey, G as DecodedFrameSchema, H as CamStreamResolutionSchema, I as scopeKey, J as FrameHandleSchema, K as EncodedPacketSchema, L as BrokerStatsSchema, M as ReadinessRegistry, N as ReadinessTimeoutError, O as parseJsonArray, P as emitDownForOwnedCaps, Q as StreamSourceEntrySchema, R as BrokerStatusSchema, S as DeviceType, T as asJsonObject, U as CameraStreamSchema, V as CamStreamKindSchema, W as DecodedAudioChunkSchema, X as ProfileSlotSchema, Y as ProfileRtspEntrySchema, Z as ProfileSlotStatusSchema, _ as resolveCapMount, _t as collectHydratedFieldValues, a as viewerUiCapability, at as makeSourceBrokerId, b as DeviceFeature, bt as EventCategory, c as createLazyTrpcSource, ct as BaseAddon, d as DEVICE_SETTINGS_CONTRIBUTION_METHODS, dt as createEvent, et as SubscribeAudioChunksInputSchema, f as DEVICE_STATUS_METHOD, ft as emitReadiness, g as method, gt as collectHydratedFieldEntries, h as isDeviceConfigCap, ht as WELL_KNOWN_TAB_MAP, i as deviceOpsCapability, it as makeProfileBrokerId, j as DATAPLANE_SECRET_HEADER, k as parseJsonObject, l as createMirrorSource, lt as normalizeAddonInitResult, m as expandCapMethods, mt as WELL_KNOWN_TABS, n as sleepCancellable, nt as SubscribeFramesInputSchema, o as adminUiCapability, ot as parseProfileBrokerId, p as event, pt as isEvent, q as FrameHandleFormatSchema, r as RawStateResultSchema, rt as SubscribeFramesResultSchema, s as createDeviceProxy, st as selectAssignedProfileSlots, t as sleep, tt as SubscribeAudioChunksResultSchema, u as createSliceHandle, ut as createDurableState, v as systemMethod, vt as hydrateSchema, w as asJsonArray, x as DeviceRole, xt as DisposerChain, y as ChargingStatus, yt as resolveHydratedFieldValue, z as CAM_PROFILE_ORDER } from "./sleep-b4Jf2n33.mjs";
2
2
  import { t as errMsg } from "./err-msg-IQTHeDzc.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/health/wiring-health.ts
@@ -7588,6 +7588,7 @@ var PipelineAddonSchemaSchema = z.object({
7588
7588
  defaultModelId: z.string(),
7589
7589
  defaultModelIdByFormat: z.record(z.string(), z.string()).optional(),
7590
7590
  enabledByDefault: z.boolean().optional(),
7591
+ backfillIntoExistingOverrides: z.boolean().optional(),
7591
7592
  defaultConfidence: z.number(),
7592
7593
  group: z.string().optional(),
7593
7594
  configSchema: z.array(ConfigFieldBridge).readonly().optional()
@@ -18750,7 +18751,20 @@ var snapshotCapability = {
18750
18751
  invalidateCache: method(z.object({ deviceId: z.number() }), z.void(), {
18751
18752
  kind: "mutation",
18752
18753
  auth: "admin"
18753
- })
18754
+ }),
18755
+ /**
18756
+ * Cache-only batch overview — answers from the wrapper's in-memory cache in
18757
+ * O(n) and NEVER triggers a capture. Lets a grid skip requesting images for
18758
+ * devices that never produced a frame, and gives it an ETag per device for
18759
+ * conditional (304-able) image fetches. `lastCapturedAt`/`cacheAgeMs`/`etag`
18760
+ * are null for a device with no cached frame.
18761
+ */
18762
+ getSnapshotOverview: systemMethod(z.object({ deviceIds: z.array(z.number()).min(1).max(200) }), z.array(z.object({
18763
+ deviceId: z.number(),
18764
+ lastCapturedAt: z.number().nullable(),
18765
+ cacheAgeMs: z.number().nullable(),
18766
+ etag: z.string().nullable()
18767
+ })))
18754
18768
  },
18755
18769
  status: {
18756
18770
  schema: SnapshotStatusSchema,
@@ -27257,6 +27271,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
27257
27271
  addonId: null,
27258
27272
  access: "view"
27259
27273
  },
27274
+ "snapshot.getSnapshotOverview": {
27275
+ capName: "snapshot",
27276
+ capScope: "device",
27277
+ addonId: null,
27278
+ access: "view"
27279
+ },
27260
27280
  "snapshot.invalidateCache": {
27261
27281
  capName: "snapshot",
27262
27282
  capScope: "device",
@@ -2853,6 +2853,18 @@ function method(input, output, options) {
2853
2853
  timeoutMs: options?.timeoutMs
2854
2854
  };
2855
2855
  }
2856
+ /**
2857
+ * A wrapper/system-only method: served exclusively by the cap's system-level
2858
+ * provider (`InferProvider`), and OPTIONAL on `InferNativeProvider` so per-device
2859
+ * driver natives don't stub out a wrapper concern (e.g. a cross-device cache
2860
+ * overview). The `systemOnly: true` literal is what `InferNativeProvider` keys on.
2861
+ */
2862
+ function systemMethod(input, output, options) {
2863
+ return {
2864
+ ...method(input, output, options),
2865
+ systemOnly: true
2866
+ };
2867
+ }
2856
2868
  /** Shorthand to define an event schema */
2857
2869
  function event(data) {
2858
2870
  return { data };
@@ -3443,6 +3455,7 @@ function createDeviceProxy(api, binding, opts) {
3443
3455
  snapshot: {
3444
3456
  getSnapshot: (input) => dispatch("snapshot", "snapshot", "getSnapshot", "query", input),
3445
3457
  invalidateCache: (input) => dispatch("snapshot", "snapshot", "invalidateCache", "mutation", input),
3458
+ getSnapshotOverview: (input) => dispatch("snapshot", "snapshot", "getSnapshotOverview", "query", input),
3446
3459
  getStatus: (input) => dispatch("snapshot", "snapshot", "getStatus", "query", input),
3447
3460
  getDeviceSettingsContribution: (input) => dispatch("snapshot", "snapshot", "getDeviceSettingsContribution", "query", input),
3448
3461
  getDeviceLiveContribution: (input) => dispatch("snapshot", "snapshot", "getDeviceLiveContribution", "query", input),
@@ -4290,6 +4303,12 @@ Object.defineProperty(exports, "sleepCancellable", {
4290
4303
  return sleepCancellable;
4291
4304
  }
4292
4305
  });
4306
+ Object.defineProperty(exports, "systemMethod", {
4307
+ enumerable: true,
4308
+ get: function() {
4309
+ return systemMethod;
4310
+ }
4311
+ });
4293
4312
  Object.defineProperty(exports, "viewerUiCapability", {
4294
4313
  enumerable: true,
4295
4314
  get: function() {
@@ -2853,6 +2853,18 @@ function method(input, output, options) {
2853
2853
  timeoutMs: options?.timeoutMs
2854
2854
  };
2855
2855
  }
2856
+ /**
2857
+ * A wrapper/system-only method: served exclusively by the cap's system-level
2858
+ * provider (`InferProvider`), and OPTIONAL on `InferNativeProvider` so per-device
2859
+ * driver natives don't stub out a wrapper concern (e.g. a cross-device cache
2860
+ * overview). The `systemOnly: true` literal is what `InferNativeProvider` keys on.
2861
+ */
2862
+ function systemMethod(input, output, options) {
2863
+ return {
2864
+ ...method(input, output, options),
2865
+ systemOnly: true
2866
+ };
2867
+ }
2856
2868
  /** Shorthand to define an event schema */
2857
2869
  function event(data) {
2858
2870
  return { data };
@@ -3443,6 +3455,7 @@ function createDeviceProxy(api, binding, opts) {
3443
3455
  snapshot: {
3444
3456
  getSnapshot: (input) => dispatch("snapshot", "snapshot", "getSnapshot", "query", input),
3445
3457
  invalidateCache: (input) => dispatch("snapshot", "snapshot", "invalidateCache", "mutation", input),
3458
+ getSnapshotOverview: (input) => dispatch("snapshot", "snapshot", "getSnapshotOverview", "query", input),
3446
3459
  getStatus: (input) => dispatch("snapshot", "snapshot", "getStatus", "query", input),
3447
3460
  getDeviceSettingsContribution: (input) => dispatch("snapshot", "snapshot", "getDeviceSettingsContribution", "query", input),
3448
3461
  getDeviceLiveContribution: (input) => dispatch("snapshot", "snapshot", "getDeviceLiveContribution", "query", input),
@@ -3852,4 +3865,4 @@ function sleepCancellable(ms, signal) {
3852
3865
  });
3853
3866
  }
3854
3867
  //#endregion
3855
- export { SubscribeAudioChunksInputSchema as $, DATAPLANE_SECRET_HEADER as A, CamStreamKindSchema as B, asJsonArray as C, parseJsonArray as D, asString as E, scopeKey as F, EncodedPacketSchema as G, CameraStreamSchema as H, BrokerStatsSchema as I, ProfileRtspEntrySchema as J, FrameHandleFormatSchema as K, BrokerStatusSchema as L, ReadinessTimeoutError as M, emitDownForOwnedCaps as N, parseJsonObject as O, readinessKey as P, StreamSourceSchema as Q, CAM_PROFILE_ORDER as R, asBoolean as S, asNumber as T, DecodedAudioChunkSchema as U, CamStreamResolutionSchema as V, DecodedFrameSchema as W, ProfileSlotStatusSchema as X, ProfileSlotSchema as Y, StreamSourceEntrySchema$1 as Z, resolveCapMount as _, hydrateSchema as _t, viewerUiCapability as a, parseProfileBrokerId as at, DeviceRole as b, DisposerChain as bt, createLazyTrpcSource as c, normalizeAddonInitResult as ct, DEVICE_SETTINGS_CONTRIBUTION_METHODS as d, emitReadiness as dt, SubscribeAudioChunksResultSchema as et, DEVICE_STATUS_METHOD as f, isEvent as ft, method as g, collectHydratedFieldValues as gt, isDeviceConfigCap as h, collectHydratedFieldEntries as ht, deviceOpsCapability as i, makeSourceBrokerId as it, ReadinessRegistry as j, parseJsonUnknown as k, createMirrorSource as l, createDurableState as lt, expandCapMethods as m, WELL_KNOWN_TAB_MAP as mt, sleepCancellable as n, SubscribeFramesResultSchema as nt, adminUiCapability as o, selectAssignedProfileSlots as ot, event as p, WELL_KNOWN_TABS as pt, FrameHandleSchema as q, RawStateResultSchema as r, makeProfileBrokerId as rt, createDeviceProxy as s, BaseAddon as st, sleep as t, SubscribeFramesInputSchema as tt, createSliceHandle as u, createEvent as ut, ChargingStatus as v, resolveHydratedFieldValue as vt, asJsonObject as w, DeviceType as x, DeviceFeature as y, EventCategory as yt, CamProfileSchema as z };
3868
+ export { StreamSourceSchema as $, parseJsonUnknown as A, CamProfileSchema as B, asBoolean as C, asString as D, asNumber as E, readinessKey as F, DecodedFrameSchema as G, CamStreamResolutionSchema as H, scopeKey as I, FrameHandleSchema as J, EncodedPacketSchema as K, BrokerStatsSchema as L, ReadinessRegistry as M, ReadinessTimeoutError as N, parseJsonArray as O, emitDownForOwnedCaps as P, StreamSourceEntrySchema$1 as Q, BrokerStatusSchema as R, DeviceType as S, asJsonObject as T, CameraStreamSchema as U, CamStreamKindSchema as V, DecodedAudioChunkSchema as W, ProfileSlotSchema as X, ProfileRtspEntrySchema as Y, ProfileSlotStatusSchema as Z, resolveCapMount as _, collectHydratedFieldValues as _t, viewerUiCapability as a, makeSourceBrokerId as at, DeviceFeature as b, EventCategory as bt, createLazyTrpcSource as c, BaseAddon as ct, DEVICE_SETTINGS_CONTRIBUTION_METHODS as d, createEvent as dt, SubscribeAudioChunksInputSchema as et, DEVICE_STATUS_METHOD as f, emitReadiness as ft, method as g, collectHydratedFieldEntries as gt, isDeviceConfigCap as h, WELL_KNOWN_TAB_MAP as ht, deviceOpsCapability as i, makeProfileBrokerId as it, DATAPLANE_SECRET_HEADER as j, parseJsonObject as k, createMirrorSource as l, normalizeAddonInitResult as lt, expandCapMethods as m, WELL_KNOWN_TABS as mt, sleepCancellable as n, SubscribeFramesInputSchema as nt, adminUiCapability as o, parseProfileBrokerId as ot, event as p, isEvent as pt, FrameHandleFormatSchema as q, RawStateResultSchema as r, SubscribeFramesResultSchema as rt, createDeviceProxy as s, selectAssignedProfileSlots as st, sleep as t, SubscribeAudioChunksResultSchema as tt, createSliceHandle as u, createDurableState as ut, systemMethod as v, hydrateSchema as vt, asJsonArray as w, DeviceRole as x, DisposerChain as xt, ChargingStatus as y, resolveHydratedFieldValue as yt, CAM_PROFILE_ORDER as z };
@@ -48,6 +48,22 @@ export interface StepDefinition {
48
48
  * rather than out).
49
49
  */
50
50
  readonly enabledByDefault?: boolean;
51
+ /**
52
+ * Opt-in: when `true`, this step is BACK-FILLED into a camera's stored
53
+ * wholesale pipeline override (`cameraSettings.pipelineByAgent`) at resolve
54
+ * time if it is absent from that snapshot — see
55
+ * `mergeEnabledByDefaultSteps`. Set this ONLY on a genuinely-NEW default
56
+ * step that shipped AFTER existing snapshots were captured and must reach
57
+ * them (e.g. `clip-embedding` for object semantic search).
58
+ *
59
+ * It exists because absence-from-a-snapshot is ambiguous: it can mean
60
+ * "predates this step" OR "operator deliberately pruned it". A broad
61
+ * "back-fill every default" would resurrect deliberate removals of
62
+ * long-existing steps (face-detection, etc.). This flag makes back-fill
63
+ * strictly opt-in so only a new step re-enters existing overrides; absent
64
+ * (the default) preserves operator intent verbatim. Absent = `false`.
65
+ */
66
+ readonly backfillIntoExistingOverrides?: boolean;
51
67
  /** Default confidence threshold */
52
68
  readonly defaultConfidence: number;
53
69
  /** Runtime label lookup (e.g., class name arrays for softmax, charset for CTC) */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/types",
3
- "version": "1.1.39",
3
+ "version": "1.1.41",
4
4
  "description": "Shared types, interfaces, and model catalogs for the CamStack detection ecosystem",
5
5
  "keywords": [
6
6
  "camstack",