@camstack/types 1.2.185 → 1.2.187

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-CfDqEZrs.js");
2
+ const require_sleep = require("./sleep-DXsYD0RX.js");
3
3
  const require_event_category = require("./event-category-yW4s1MGD.js");
4
4
  const require_err_msg = require("./err-msg-COpsHMw2.js");
5
5
  //#region src/generated/cap-input-defaults.ts
@@ -16,7 +16,7 @@ const require_err_msg = require("./err-msg-COpsHMw2.js");
16
16
  * Plain data, zero Zod: a forked runner must not import the schema barrel
17
17
  * (~144MB RSS per runner — D28).
18
18
  *
19
- * Coverage: 24 caps, 57 methods with defaults.
19
+ * Coverage: 24 caps, 58 methods with defaults.
20
20
  */
21
21
  var CAP_INPUT_DEFAULTS = Object.freeze({
22
22
  "addons": { "getLogs": { "limit": 100 } },
@@ -136,6 +136,7 @@ var CAP_INPUT_DEFAULTS = Object.freeze({
136
136
  "getMotionEvents": { "limit": 1e3 },
137
137
  "getObjectEvents": { "limit": 1e3 },
138
138
  "getSensorEvents": { "limit": 1e3 },
139
+ "listRecentSummaries": { "limit": 100 },
139
140
  "listRecentTracks": { "limit": 200 },
140
141
  "listSummaries": { "limit": 50 },
141
142
  "reclaimDebugMedia": { "mode": "report" },
package/dist/addon.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { D as adminUiCapability, E as DeviceType, G as scopeKey, H as ReadinessTimeoutError, M as expandCapMethods, R as nodePin, S as DEVICE_CHILDREN_BATCH_MAX, St as normalizeAddonInitResult, Tt as emitReadiness, V as ReadinessRegistry, a as asJsonObject, b as deviceOpsCapability, bt as DisposerChain, d as BOOT_RECOVERY_BACKOFF_MS, f as DEVICE_SCOPED_CAPS, h as createEventBusSliceSource, m as createDeviceProxy, p as isDeviceScopedCap, s as asString, t as sleep, u as parseJsonUnknown, vt as DATAPLANE_SECRET_HEADER, x as viewerUiCapability, xt as BaseAddon, z as readNodePin } from "./sleep-CnLyvg3w.mjs";
1
+ import { D as adminUiCapability, E as DeviceType, G as scopeKey, H as ReadinessTimeoutError, M as expandCapMethods, R as nodePin, S as DEVICE_CHILDREN_BATCH_MAX, St as normalizeAddonInitResult, Tt as emitReadiness, V as ReadinessRegistry, a as asJsonObject, b as deviceOpsCapability, bt as DisposerChain, d as BOOT_RECOVERY_BACKOFF_MS, f as DEVICE_SCOPED_CAPS, h as createEventBusSliceSource, m as createDeviceProxy, p as isDeviceScopedCap, s as asString, t as sleep, u as parseJsonUnknown, vt as DATAPLANE_SECRET_HEADER, x as viewerUiCapability, xt as BaseAddon, z as readNodePin } from "./sleep-DBKu2-U5.mjs";
2
2
  import { t as EventCategory } from "./event-category-ZyX6jcse.mjs";
3
3
  import { t as errMsg } from "./err-msg-IQTHeDzc.mjs";
4
4
  //#region src/generated/cap-input-defaults.ts
@@ -15,7 +15,7 @@ import { t as errMsg } from "./err-msg-IQTHeDzc.mjs";
15
15
  * Plain data, zero Zod: a forked runner must not import the schema barrel
16
16
  * (~144MB RSS per runner — D28).
17
17
  *
18
- * Coverage: 24 caps, 57 methods with defaults.
18
+ * Coverage: 24 caps, 58 methods with defaults.
19
19
  */
20
20
  var CAP_INPUT_DEFAULTS = Object.freeze({
21
21
  "addons": { "getLogs": { "limit": 100 } },
@@ -135,6 +135,7 @@ var CAP_INPUT_DEFAULTS = Object.freeze({
135
135
  "getMotionEvents": { "limit": 1e3 },
136
136
  "getObjectEvents": { "limit": 1e3 },
137
137
  "getSensorEvents": { "limit": 1e3 },
138
+ "listRecentSummaries": { "limit": 100 },
138
139
  "listRecentTracks": { "limit": 200 },
139
140
  "listSummaries": { "limit": 50 },
140
141
  "reclaimDebugMedia": { "mode": "report" },
@@ -82,7 +82,7 @@ export { NetworkAccessStatusSchema, NetworkEndpointSchema, networkAccessCapabili
82
82
  export { type Attachment, type AttachmentMediaType, AttachmentMediaTypeSchema, AttachmentSchema, type DiscoveredTarget, DiscoveredTargetSchema, type INotificationOutputProvider, type NotificationAction, type NotificationActionIcon, NotificationActionIconSchema, NotificationActionSchema, type NotificationFormat, NotificationFormatSchema, NotificationSchema, notificationOutputCapability, type RenderedAs, RenderedAsSchema, type SendResult, SendResultSchema, type Target, type TargetKind, type TargetKindCaps, TargetKindCapsSchema, type TargetKindLevel, TargetKindLevelSchema, TargetKindSchema, TargetSchema, type TestResult, TestResultSchema, } from './notification-output.cap.js';
83
83
  export { type INotificationRulesProvider, NC_ALARM_SYSTEM_EVENT_KINDS, NC_AUDIO_DBFS_FLOOR, NC_AUTHORABLE_SYSTEM_EVENT_KINDS, NC_CONDITION_CATALOG, NC_CONFIRM_DEFAULT_MAX_IMAGE_PX, NC_CONFIRM_DEFAULT_TIMEOUT_MS, NC_CONFIRM_MAX_TIMEOUT_MS, NC_CONFIRM_MIN_TIMEOUT_MS, NC_DEFAULT_SNOOZE_MINUTES, NC_HISTORY_LIMIT_DEFAULT, NC_HISTORY_LIMIT_MAX, NC_MAX_PER_TRACK_IMMEDIATE, NC_SNOOZE_MAX_MINUTES, type NcAlarmConfig, NcAlarmConfigSchema, type NcAlarmModeCoverage, NcAlarmModeCoverageSchema, type NcAlarmSettings, type NcAlarmSettingsPatch, NcAlarmSettingsPatchSchema, NcAlarmSettingsSchema, type NcAlarmSkippedDevice, NcAlarmSkippedDeviceSchema, type NcAlarmSkipReason, NcAlarmSkipReasonSchema, type NcAudioCondition, NcAudioConditionSchema, type NcConditionDescriptor, NcConditionDescriptorSchema, type NcConditions, NcConditionsSchema, type NcConfirm, type NcConfirmExpect, NcConfirmExpectSchema, NcConfirmSchema, type NcCrossing, NcCrossingSchema, type NcDelivery, NcDeliverySchema, type NcDeviceStateCondition, NcDeviceStateConditionSchema, type NcHistoryEntry, NcHistoryEntrySchema, type NcHistoryFilter, NcHistoryFilterSchema, type NcHistoryRecordKind, NcHistoryRecordKindSchema, type NcHistoryStatus, NcHistoryStatusSchema, type NcHistorySubject, NcHistorySubjectSchema, type NcMediaFrame, NcMediaFrameSchema, type NcMediaPolicy, NcMediaPolicySchema, type NcOccupancyCondition, NcOccupancyConditionSchema, type NcPlateMatcher, NcPlateMatcherSchema, type NcRule, type NcRuleAction, NcRuleActionSchema, type NcRuleActionSequence, NcRuleActionSequenceSchema, type NcRuleActions, NcRuleActionsSchema, type NcRuleInput, NcRuleInputSchema, type NcRuleNotificationButton, NcRuleNotificationButtonSchema, type NcRulePatch, NcRulePatchSchema, NcRuleSchema, type NcRuleTarget, NcRuleTargetSchema, type NcSceneCondition, NcSceneConditionSchema, type NcSchedule, NcScheduleSchema, type NcScheduleWindow, NcScheduleWindowSchema, type NcSnooze, type NcSnoozeInput, NcSnoozeInputSchema, NcSnoozeSchema, type NcSnoozeScope, NcSnoozeScopeSchema, type NcSnoozeSuppressed, NcSnoozeSuppressedSchema, type NcSystemEventCondition, NcSystemEventConditionSchema, type NcSystemEventKind, NcSystemEventKindSchema, type NcTestResult, NcTestResultSchema, type NcThrottle, type NcThrottleGranularity, NcThrottleGranularitySchema, NcThrottleSchema, type NcZoneCondition, NcZoneConditionSchema, notificationRulesCapability, } from './notification-rules.cap.js';
84
84
  export { type IOauthIntegrationProvider, type OauthIntegrationDescriptor, OauthIntegrationDescriptorSchema, oauthIntegrationCapability, } from './oauth-integration.cap.js';
85
- export { type AudioEvent, type AudioEventDraft, AudioEventSchema, type DetectionSource, DetectionSourceSchema, EVENT_DENSITY_BATCH_MAX, type EventDensityBucket, EventDensityBucketSchema, type EventDensityForDevice, EventDensityForDeviceSchema, type EventKind, type EventKindCategory, EventKindCategorySchema, type EventKindDescriptor, EventKindDescriptorSchema, type EventKindIcon, EventKindIconSchema, EventKindSchema, type EventKindsForDevice, EventKindsForDeviceSchema, type EventMediaKindBreakdown, type EventMediaKindFootprint, type EventPruneCounts, type EventStoreDeviceFootprint, type EventStoreFootprint, type IPipelineAnalyticsProvider, type KeyEvent, KeyEventSchema, type KeyEventsForDevice, type LabelAttribution, LabelAttributionSchema, type LabelTier, LabelTierSchema, MAX_TRACK_DEBUG_NOTE_LEN, type MediaFile, type MediaFileBytes, type MediaFileInfo, MediaFileInfoSchema, type MediaFileKind, MediaFileKindEnum, type MediaFileRef, MediaFileRefSchema, MediaFileSchema, type MotionEvent, type MotionEventDraft, MotionEventSchema, type ObjectEvent, type ObjectEventDraft, ObjectEventSchema, pipelineAnalyticsCapability, type RecentTracksPage, RecentTracksPageSchema, type RecentTracksQuery, RecentTracksQueryInput, type RetrainAnnotation, type RetrainAnnotationDraft, RetrainAnnotationDraftSchema, RetrainAnnotationKindSchema, RetrainAnnotationSchema, RetrainAnnotationSourceSchema, type RetrainAssistResult, RetrainAssistResultSchema, RetrainAssistSubjectSchema, RetrainCopyRefusalSchema, type RetrainFrame, type RetrainFrameCandidate, RetrainFrameCandidateSchema, type RetrainFrameList, RetrainFrameListSchema, RetrainFrameSchema, type RetrainFrameSelection, RetrainFrameSelectionSchema, type RetrainMacroClass, RetrainMacroClassSchema, type RetrainStatus, RetrainStatusSchema, type RetrainTrack, RetrainTrackSchema, type RetrainTransitionResult, RetrainTransitionResultSchema, type ScoredObjectEvent, ScoredObjectEventSchema, type SensorEvent, SensorEventSchema, SUMMARIES_DEFAULT_LIMIT, SUMMARIES_MAX_LIMIT, type SummariesPage, type Summary, type SummaryDetail, SummarySchema, type Track, type TrackCascadeCounts, TrackCascadeCountsSchema, type TrackEnvelope, TrackEnvelopeSchema, TrackedDetectionSchema, type TrackFlags, type TrackFlagsPatch, TrackFlagsPatchSchema, TrackFlagsSchema, type TrackProjection, TrackProjectionSchema, TrackSchema, type TrackSource, TrackSourceSchema, type TrackState, TrackStateSchema, type TrackZoneFilter, TrackZoneFilterSchema, type TrainingExportDeviceTotals, TrainingExportDeviceTotalsSchema, type TrainingExportSummary, TrainingExportSummarySchema, type ZoneCrossing, type ZoneCrossingDirection, ZoneCrossingDirectionSchema, ZoneCrossingSchema, } from './pipeline-analytics.cap.js';
85
+ export { type AudioEvent, type AudioEventDraft, AudioEventSchema, type DetectionSource, DetectionSourceSchema, EVENT_DENSITY_BATCH_MAX, type EventDensityBucket, EventDensityBucketSchema, type EventDensityForDevice, EventDensityForDeviceSchema, type EventKind, type EventKindCategory, EventKindCategorySchema, type EventKindDescriptor, EventKindDescriptorSchema, type EventKindIcon, EventKindIconSchema, EventKindSchema, type EventKindsForDevice, EventKindsForDeviceSchema, type EventMediaKindBreakdown, type EventMediaKindFootprint, type EventPruneCounts, type EventStoreDeviceFootprint, type EventStoreFootprint, type IPipelineAnalyticsProvider, type KeyEvent, KeyEventSchema, type KeyEventsForDevice, type LabelAttribution, LabelAttributionSchema, type LabelTier, LabelTierSchema, MAX_TRACK_DEBUG_NOTE_LEN, type MediaFile, type MediaFileBytes, type MediaFileInfo, MediaFileInfoSchema, type MediaFileKind, MediaFileKindEnum, type MediaFileRef, MediaFileRefSchema, MediaFileSchema, type MotionEvent, type MotionEventDraft, MotionEventSchema, type ObjectEvent, type ObjectEventDraft, ObjectEventSchema, pipelineAnalyticsCapability, type RecentTracksPage, RecentTracksPageSchema, type RecentTracksQuery, RecentTracksQueryInput, type RetrainAnnotation, type RetrainAnnotationDraft, RetrainAnnotationDraftSchema, RetrainAnnotationKindSchema, RetrainAnnotationSchema, RetrainAnnotationSourceSchema, type RetrainAssistResult, RetrainAssistResultSchema, RetrainAssistSubjectSchema, RetrainCopyRefusalSchema, type RetrainFrame, type RetrainFrameCandidate, RetrainFrameCandidateSchema, type RetrainFrameList, RetrainFrameListSchema, RetrainFrameSchema, type RetrainFrameSelection, RetrainFrameSelectionSchema, type RetrainMacroClass, RetrainMacroClassSchema, type RetrainStatus, RetrainStatusSchema, type RetrainTrack, RetrainTrackSchema, type RetrainTransitionResult, RetrainTransitionResultSchema, type ScoredObjectEvent, ScoredObjectEventSchema, type SensorEvent, SensorEventSchema, SUMMARIES_DEFAULT_LIMIT, SUMMARIES_MAX_LIMIT, type SummariesPage, type Summary, type SummaryDetail, type SummaryListItem, SummarySchema, type Track, type TrackCascadeCounts, TrackCascadeCountsSchema, type TrackEnvelope, TrackEnvelopeSchema, TrackedDetectionSchema, type TrackFlags, type TrackFlagsPatch, TrackFlagsPatchSchema, TrackFlagsSchema, type TrackProjection, TrackProjectionSchema, TrackSchema, type TrackSource, TrackSourceSchema, type TrackState, TrackStateSchema, type TrackZoneFilter, TrackZoneFilterSchema, type TrainingExportDeviceTotals, TrainingExportDeviceTotalsSchema, type TrainingExportSummary, TrainingExportSummarySchema, type ZoneCrossing, type ZoneCrossingDirection, ZoneCrossingDirectionSchema, ZoneCrossingSchema, } from './pipeline-analytics.cap.js';
86
86
  export type { NativeCropRef, PipelineStepInputOutput, PipelineValidationIssue, PipelineValidationResult, } from './pipeline-executor.cap.js';
87
87
  export { ModelSubstitutionSchema, NativeCropRefSchema, PipelineDefaultStepSchema, PipelineEngineChoiceSchema, PipelineRunResultBridge, PipelineStepInputSchema, PipelineValidationIssueSchema, PipelineValidationResultSchema, pipelineExecutorCapability, } from './pipeline-executor.cap.js';
88
88
  export type { CameraAssignmentStatus, CameraAudioStatus, CameraBrokerProfile, CameraBrokerStatus, CameraDecoderShm, CameraDecoderStatus, CameraDetectionPhase, CameraDetectionProvisioning, CameraDetectionProvisioningState, CameraDetectionStatus, CameraMotionStatus, CameraRecordingMode, CameraRecordingStatus, CameraSourceStatus, CameraSourceStream, CameraStatus, CameraStatusDegradation, CameraStatusDegradationReason, CameraStatusStage, DiskReconcileJob, InferenceDeviceExclusionReason, IngestOwner, NodeInferenceDevice, NodeInferenceDevices, } from './pipeline-orchestrator.cap.js';
@@ -92,7 +92,7 @@ export { FrameLazyCountersSchema, FrameLazyMetricsSchema, MotionSourceEnum, Moti
92
92
  export { AudioChunkInputSchema, AudioClassificationLabelSchema, AudioLevelSchema, BoundingBoxSchema, FrameInputSchema, SpatialDetectionSchema, } from './schemas/detection-shared.js';
93
93
  export { CameraMetricsSchema, CameraMetricsWithDeviceIdSchema, OrchestratorMetricsSchema, } from './schemas/orchestrator-metrics.js';
94
94
  export type { CameraStream, CamProfile, CamStreamKind, DecodedAudioChunkWire, FrameHandleFormat, ProfileRtspEntry, ProfileSlot, ProfileSlotStatus, SubscribeAudioChunksInput, SubscribeAudioChunksResult, SubscribeFramesInput, SubscribeFramesResult, } from './schemas/streaming-shared.js';
95
- export { BrokerStatsSchema, BrokerStatusSchema, CAM_PROFILE_ORDER, CameraStreamSchema, CamProfileSchema, CamStreamKindSchema, CamStreamResolutionSchema, AudioChunkFormatSchema, DecodedAudioChunkSchema, DecodedFrameSchema, EncodedPacketSchema, FrameHandleFormatSchema, FrameHandleSchema, makeProfileBrokerId, makeSourceBrokerId, ProfileRtspEntrySchema, ProfileSlotSchema, ProfileSlotStatusSchema, parseProfileBrokerId, StreamSourceEntrySchema, StreamSourceSchema, SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, SubscribeFramesInputSchema, SubscribeFramesResultSchema, selectAssignedProfileSlots, } from './schemas/streaming-shared.js';
95
+ export { AudioChunkFormatSchema, BrokerStatsSchema, BrokerStatusSchema, CAM_PROFILE_ORDER, CameraStreamSchema, CamProfileSchema, CamStreamKindSchema, CamStreamResolutionSchema, DecodedAudioChunkSchema, DecodedFrameSchema, EncodedPacketSchema, FrameHandleFormatSchema, FrameHandleSchema, makeProfileBrokerId, makeSourceBrokerId, ProfileRtspEntrySchema, ProfileSlotSchema, ProfileSlotStatusSchema, parseProfileBrokerId, StreamSourceEntrySchema, StreamSourceSchema, SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, SubscribeFramesInputSchema, SubscribeFramesResultSchema, selectAssignedProfileSlots, } from './schemas/streaming-shared.js';
96
96
  export { buildEventKindDescriptor, EVENT_KIND_BY_CAP, EVENTFUL_CAP_NAMES, type SensorEventKindDescriptor, } from './sensor-event-kinds.js';
97
97
  export { type ImageContract, ImageContractSchema, type ImageContractState, ImageContractStateSchema, type IServerManagementProvider, type ServerBootMode, ServerBootModeSchema, type ServerPackageStatus, ServerPackageStatusSchema, type ServerRollbackInfo, ServerRollbackInfoSchema, type ServerUpdateActionResult, ServerUpdateActionResultSchema, type ServerUpdateCheckResult, ServerUpdateCheckResultSchema, type ServerUpdateState, ServerUpdateStateSchema, serverManagementCapability, type WrapperEvidence, WrapperEvidenceSchema, type WrapperIdentity, WrapperIdentitySchema, type WrapperKind, WrapperKindSchema, } from './server-management.cap.js';
98
98
  export { type BulkRecord, BulkRecordSchema, type CollectionColumn, CollectionColumnSchema, type CollectionIndex, CollectionIndexSchema, type ISettingsStoreProvider, type MutationFilter, MutationFilterSchema, QueryFilterSchema, SettingsRecordSchema, type SettingsStoreClient, settingsStoreCapability, } from './settings-store.cap.js';
@@ -1231,18 +1231,6 @@ export declare const SummarySchema: z.ZodObject<{
1231
1231
  export type Summary = z.infer<typeof SummarySchema>;
1232
1232
  export declare const SUMMARIES_MAX_LIMIT = 200;
1233
1233
  export declare const SUMMARIES_DEFAULT_LIMIT = 50;
1234
- declare const SummariesPageSchema: z.ZodObject<{
1235
- summaries: z.ZodReadonly<z.ZodArray<z.ZodObject<{
1236
- id: z.ZodString;
1237
- deviceId: z.ZodNumber;
1238
- openedAt: z.ZodNumber;
1239
- lastActiveAt: z.ZodNumber;
1240
- sealedAt: z.ZodNullable<z.ZodNumber>;
1241
- memberCount: z.ZodNumber;
1242
- groupShotMediaId: z.ZodNullable<z.ZodNumber>;
1243
- }, z.core.$strip>>>;
1244
- }, z.core.$strip>;
1245
- export type SummariesPage = z.infer<typeof SummariesPageSchema>;
1246
1234
  /**
1247
1235
  * One member of a group, as a reader needs it.
1248
1236
  *
@@ -1261,6 +1249,8 @@ declare const SummaryMemberSchema: z.ZodObject<{
1261
1249
  child: "child";
1262
1250
  }>>;
1263
1251
  joinedAt: z.ZodNumber;
1252
+ label: z.ZodOptional<z.ZodString>;
1253
+ subLabel: z.ZodOptional<z.ZodString>;
1264
1254
  }, z.core.$strip>;
1265
1255
  export type SummaryMemberOut = z.infer<typeof SummaryMemberSchema>;
1266
1256
  declare const SummaryDetailSchema: z.ZodObject<{
@@ -1282,8 +1272,54 @@ declare const SummaryDetailSchema: z.ZodObject<{
1282
1272
  child: "child";
1283
1273
  }>>;
1284
1274
  joinedAt: z.ZodNumber;
1275
+ label: z.ZodOptional<z.ZodString>;
1276
+ subLabel: z.ZodOptional<z.ZodString>;
1277
+ }, z.core.$strip>>>;
1278
+ }, z.core.$strip>;
1279
+ /**
1280
+ * What a LIST of groups carries: the envelope plus what it is MADE OF.
1281
+ *
1282
+ * Coarse on purpose — the operator's rule is "only the rough data on the list,
1283
+ * we extend when we notice we need more". Enough to draw the card ("two people
1284
+ * and a dog") and no more. The MEMBERS, their names and the per-member links
1285
+ * are on {@link getSummary}: shipping every member of every group so a client
1286
+ * can count them turns a page of two hundred groups into a thousand records to
1287
+ * draw two hundred badges.
1288
+ */
1289
+ declare const SummaryListItemSchema: z.ZodObject<{
1290
+ summary: z.ZodObject<{
1291
+ id: z.ZodString;
1292
+ deviceId: z.ZodNumber;
1293
+ openedAt: z.ZodNumber;
1294
+ lastActiveAt: z.ZodNumber;
1295
+ sealedAt: z.ZodNullable<z.ZodNumber>;
1296
+ memberCount: z.ZodNumber;
1297
+ groupShotMediaId: z.ZodNullable<z.ZodNumber>;
1298
+ }, z.core.$strip>;
1299
+ classes: z.ZodReadonly<z.ZodArray<z.ZodObject<{
1300
+ className: z.ZodNullable<z.ZodString>;
1301
+ count: z.ZodNumber;
1285
1302
  }, z.core.$strip>>>;
1286
1303
  }, z.core.$strip>;
1304
+ export type SummaryListItem = z.infer<typeof SummaryListItemSchema>;
1305
+ declare const SummariesPageSchema: z.ZodObject<{
1306
+ summaries: z.ZodReadonly<z.ZodArray<z.ZodObject<{
1307
+ summary: z.ZodObject<{
1308
+ id: z.ZodString;
1309
+ deviceId: z.ZodNumber;
1310
+ openedAt: z.ZodNumber;
1311
+ lastActiveAt: z.ZodNumber;
1312
+ sealedAt: z.ZodNullable<z.ZodNumber>;
1313
+ memberCount: z.ZodNumber;
1314
+ groupShotMediaId: z.ZodNullable<z.ZodNumber>;
1315
+ }, z.core.$strip>;
1316
+ classes: z.ZodReadonly<z.ZodArray<z.ZodObject<{
1317
+ className: z.ZodNullable<z.ZodString>;
1318
+ count: z.ZodNumber;
1319
+ }, z.core.$strip>>>;
1320
+ }, z.core.$strip>>>;
1321
+ }, z.core.$strip>;
1322
+ export type SummariesPage = z.infer<typeof SummariesPageSchema>;
1287
1323
  export type SummaryDetail = z.infer<typeof SummaryDetailSchema>;
1288
1324
  declare const RecentTracksPageSchema: z.ZodObject<{
1289
1325
  tracks: z.ZodReadonly<z.ZodArray<z.ZodObject<{
@@ -2265,17 +2301,53 @@ export declare const pipelineAnalyticsCapability: {
2265
2301
  since: z.ZodOptional<z.ZodNumber>;
2266
2302
  until: z.ZodOptional<z.ZodNumber>;
2267
2303
  limit: z.ZodDefault<z.ZodNumber>;
2304
+ classes: z.ZodOptional<z.ZodArray<z.ZodString>>;
2268
2305
  }, z.core.$strip>, z.ZodObject<{
2269
2306
  summaries: z.ZodReadonly<z.ZodArray<z.ZodObject<{
2270
- id: z.ZodString;
2271
- deviceId: z.ZodNumber;
2272
- openedAt: z.ZodNumber;
2273
- lastActiveAt: z.ZodNumber;
2274
- sealedAt: z.ZodNullable<z.ZodNumber>;
2275
- memberCount: z.ZodNumber;
2276
- groupShotMediaId: z.ZodNullable<z.ZodNumber>;
2307
+ summary: z.ZodObject<{
2308
+ id: z.ZodString;
2309
+ deviceId: z.ZodNumber;
2310
+ openedAt: z.ZodNumber;
2311
+ lastActiveAt: z.ZodNumber;
2312
+ sealedAt: z.ZodNullable<z.ZodNumber>;
2313
+ memberCount: z.ZodNumber;
2314
+ groupShotMediaId: z.ZodNullable<z.ZodNumber>;
2315
+ }, z.core.$strip>;
2316
+ classes: z.ZodReadonly<z.ZodArray<z.ZodObject<{
2317
+ className: z.ZodNullable<z.ZodString>;
2318
+ count: z.ZodNumber;
2319
+ }, z.core.$strip>>>;
2277
2320
  }, z.core.$strip>>>;
2278
2321
  }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
2322
+ /**
2323
+ * The PAGED feed — the reel and the Events gallery. Same cursor contract as
2324
+ * {@link listRecentTracks}, so one screen cannot hold two ideas of newest.
2325
+ */
2326
+ readonly listRecentSummaries: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
2327
+ deviceIds: z.ZodArray<z.ZodNumber>;
2328
+ since: z.ZodOptional<z.ZodNumber>;
2329
+ until: z.ZodOptional<z.ZodNumber>;
2330
+ limit: z.ZodDefault<z.ZodNumber>;
2331
+ cursor: z.ZodOptional<z.ZodString>;
2332
+ classes: z.ZodOptional<z.ZodArray<z.ZodString>>;
2333
+ }, z.core.$strip>, z.ZodObject<{
2334
+ summaries: z.ZodReadonly<z.ZodArray<z.ZodObject<{
2335
+ summary: z.ZodObject<{
2336
+ id: z.ZodString;
2337
+ deviceId: z.ZodNumber;
2338
+ openedAt: z.ZodNumber;
2339
+ lastActiveAt: z.ZodNumber;
2340
+ sealedAt: z.ZodNullable<z.ZodNumber>;
2341
+ memberCount: z.ZodNumber;
2342
+ groupShotMediaId: z.ZodNullable<z.ZodNumber>;
2343
+ }, z.core.$strip>;
2344
+ classes: z.ZodReadonly<z.ZodArray<z.ZodObject<{
2345
+ className: z.ZodNullable<z.ZodString>;
2346
+ count: z.ZodNumber;
2347
+ }, z.core.$strip>>>;
2348
+ }, z.core.$strip>>>;
2349
+ nextCursor: z.ZodNullable<z.ZodString>;
2350
+ }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
2279
2351
  /** One summary with its member track ids; `null` for an id nobody wrote. */
2280
2352
  readonly getSummary: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
2281
2353
  id: z.ZodString;
@@ -2298,6 +2370,8 @@ export declare const pipelineAnalyticsCapability: {
2298
2370
  child: "child";
2299
2371
  }>>;
2300
2372
  joinedAt: z.ZodNumber;
2373
+ label: z.ZodOptional<z.ZodString>;
2374
+ subLabel: z.ZodOptional<z.ZodString>;
2301
2375
  }, z.core.$strip>>>;
2302
2376
  }, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind>;
2303
2377
  readonly clearTracks: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
@@ -5096,6 +5096,13 @@ export type AppRouter = TrpcCoreRouter<{
5096
5096
  output: z.infer<typeof pipelineAnalyticsCapability.methods.listSummaries.output>;
5097
5097
  meta: object;
5098
5098
  }>;
5099
+ listRecentSummaries: TRPCQueryProcedure<{
5100
+ input: {
5101
+ [x: string]: unknown;
5102
+ } & z.input<typeof pipelineAnalyticsCapability.methods.listRecentSummaries.input>;
5103
+ output: z.infer<typeof pipelineAnalyticsCapability.methods.listRecentSummaries.output>;
5104
+ meta: object;
5105
+ }>;
5099
5106
  getSummary: TRPCQueryProcedure<{
5100
5107
  input: {
5101
5108
  [x: string]: unknown;
@@ -11,7 +11,7 @@
11
11
  * Plain data, zero Zod: a forked runner must not import the schema barrel
12
12
  * (~144MB RSS per runner — D28).
13
13
  *
14
- * Coverage: 24 caps, 57 methods with defaults.
14
+ * Coverage: 24 caps, 58 methods with defaults.
15
15
  */
16
16
  export declare const CAP_INPUT_DEFAULTS: Readonly<Record<string, Readonly<Record<string, Readonly<Record<string, unknown>>>>>>;
17
17
  /**
@@ -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: 1031 method paths across 129 capabilities.
9
+ * Coverage: 1032 method paths across 129 capabilities.
10
10
  */
11
11
  import type { CapabilityMethodAccess } from '../capabilities/capability-definition.js';
12
12
  export interface MethodAccessRecord {
@@ -6,7 +6,7 @@
6
6
  * system-scope cap that takes a deviceId was previously never device-filtered
7
7
  * — see the generator header).
8
8
  *
9
- * Coverage: 374 methods carry a device reference, of which
9
+ * Coverage: 375 methods carry a device reference, of which
10
10
  * 139 are on SYSTEM-scope caps.
11
11
  *
12
12
  * Top-level fields, number arrays, and one-level arrays of objects carrying
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_sleep = require("./sleep-CfDqEZrs.js");
2
+ const require_sleep = require("./sleep-DXsYD0RX.js");
3
3
  const require_event_category = require("./event-category-yW4s1MGD.js");
4
4
  const require_canonical_hash = require("./canonical-hash-DNV8S5ET.js");
5
5
  const require_enums = require("./enums.js");
@@ -442,7 +442,32 @@ var WEBRTC_EGRESS_PROFILE = {
442
442
  */
443
443
  var ALEXA_EGRESS_PROFILE = {
444
444
  ...BASE_LIVE_EGRESS_PROFILE,
445
- audio: { codec: "opus" }
445
+ audio: { codec: "opus" },
446
+ /**
447
+ * ONE slice per access unit.
448
+ *
449
+ * `-tune zerolatency` turns on x264's sliced threads, and every access unit
450
+ * came out of this encode as FIVE slices — measured on the hub 2026-09-13 on
451
+ * the exact argv this path spawns, and reduced to one by this single flag.
452
+ *
453
+ * Five slices share one RTP timestamp and carry one marker bit, so a
454
+ * libwebrtc depacketiser sees five frame-starts and one frame-end per frame.
455
+ * The Echo renders the first pictures and then freezes for good, while the
456
+ * audio — a separate plane — plays on. It is the only structural property
457
+ * that survived the elimination: the same freeze reproduced at 2304×1296
458
+ * HEVC with 217 KB keyframes AND at 640×360 H.264 with 67 KB keyframes and a
459
+ * fifth of the bitrate, so source, resolution, bitrate, keyframe burst,
460
+ * hardware decode, parameter sets, drift and bitstream conformance are all
461
+ * out — each ruled out by a measurement, not by elimination.
462
+ *
463
+ * The tune STAYS: it also drops the lookahead and the B-frames, which a live
464
+ * path wants. Only the slicing is unwanted, and this is the flag that says so.
465
+ *
466
+ * Scoped to Alexa deliberately. HomeKit and the browser transcode inherit
467
+ * {@link BASE_LIVE_EGRESS_PROFILE}; whether they want the same shape is a
468
+ * question for their own evidence, and the browser has not been measured.
469
+ */
470
+ outputArgs: ["-x264-params", "sliced-threads=0"]
446
471
  };
447
472
  /** VBV window for a consumer whose budget is enforced per second (HomeKit). */
448
473
  var RATE_CONTROL_TIGHT = {
@@ -20249,9 +20274,11 @@ var SummariesQueryInput = zod.z.object({
20249
20274
  deviceIds: zod.z.array(zod.z.number()).min(1),
20250
20275
  since: zod.z.number().optional(),
20251
20276
  until: zod.z.number().optional(),
20252
- limit: zod.z.number().int().min(1).max(200).default(50)
20277
+ limit: zod.z.number().int().min(1).max(200).default(50),
20278
+ /** The same member-wise filter {@link listRecentSummaries} takes — one
20279
+ * meaning of "dog" on every summary surface. */
20280
+ classes: zod.z.array(zod.z.string().min(1).max(60)).max(40).optional()
20253
20281
  });
20254
- var SummariesPageSchema = zod.z.object({ summaries: zod.z.array(SummarySchema).readonly() });
20255
20282
  /**
20256
20283
  * One member of a group, as a reader needs it.
20257
20284
  *
@@ -20263,7 +20290,16 @@ var SummariesPageSchema = zod.z.object({ summaries: zod.z.array(SummarySchema).r
20263
20290
  */
20264
20291
  var SummaryMemberSchema = zod.z.object({
20265
20292
  trackId: zod.z.string(),
20266
- /** The track's class at the time it joined, or `null` when unresolved. */
20293
+ /**
20294
+ * The track's class at the time it JOINED, or `null` when it was unresolved
20295
+ * and the track no longer exists to fill it.
20296
+ *
20297
+ * The join, not the latest opinion: class voting can re-decide a track's
20298
+ * class afterwards, and a group's composition is the history of who came
20299
+ * together. A consumer counts these to badge a thumbnail — "two people and a
20300
+ * dog" — rather than being handed a second, denormalised tally that would
20301
+ * drift from the members it claims to describe.
20302
+ */
20267
20303
  className: zod.z.string().nullable(),
20268
20304
  /** `primary` is the one member that carries the group's identity. */
20269
20305
  role: zod.z.enum([
@@ -20271,13 +20307,87 @@ var SummaryMemberSchema = zod.z.object({
20271
20307
  "sibling",
20272
20308
  "child"
20273
20309
  ]).nullable(),
20274
- joinedAt: zod.z.number()
20310
+ joinedAt: zod.z.number(),
20311
+ /** Tier 1 — the sub-class (`dog`, `van`), resolved from the member's track
20312
+ * at read time. Absent when nothing resolved, never an empty string. */
20313
+ label: zod.z.string().optional(),
20314
+ /** Tier 2 — the instance: a person's name, a plate. Absent when the pipeline
20315
+ * recognised nobody, and absent for a member whose track has been pruned —
20316
+ * a thumbnail that names the wrong person is worse than one naming nobody. */
20317
+ subLabel: zod.z.string().optional()
20275
20318
  });
20276
20319
  var SummaryDetailSchema = zod.z.object({
20277
20320
  summary: SummarySchema,
20278
20321
  /** Members in absorption order, oldest join first. */
20279
20322
  members: zod.z.array(SummaryMemberSchema).readonly()
20280
20323
  });
20324
+ /**
20325
+ * What a LIST of groups carries: the envelope plus what it is MADE OF.
20326
+ *
20327
+ * Coarse on purpose — the operator's rule is "only the rough data on the list,
20328
+ * we extend when we notice we need more". Enough to draw the card ("two people
20329
+ * and a dog") and no more. The MEMBERS, their names and the per-member links
20330
+ * are on {@link getSummary}: shipping every member of every group so a client
20331
+ * can count them turns a page of two hundred groups into a thousand records to
20332
+ * draw two hundred badges.
20333
+ */
20334
+ var SummaryListItemSchema = zod.z.object({
20335
+ summary: SummarySchema,
20336
+ /** Class counts, most numerous first; `className: null` is a member whose
20337
+ * class never resolved, counted so the counts add up to `memberCount`. */
20338
+ classes: zod.z.array(zod.z.object({
20339
+ className: zod.z.string().nullable(),
20340
+ count: zod.z.number().int().positive()
20341
+ })).readonly()
20342
+ });
20343
+ var SummariesPageSchema = zod.z.object({ summaries: zod.z.array(SummaryListItemSchema).readonly() });
20344
+ /**
20345
+ * The paged feed, deliberately the SAME shape as {@link RecentTracksQueryInput}.
20346
+ *
20347
+ * The reel on the cameras page and the Events gallery both ride a cursor, so a
20348
+ * summaries feed that could only answer "the last N for these cameras"
20349
+ * (`listSummaries`) would make groups available in the timeline and nowhere
20350
+ * else. Two feeds with different ordering contracts would be two ideas of what
20351
+ * "newest" means, on one screen.
20352
+ */
20353
+ var RecentSummariesQueryInput = zod.z.object({
20354
+ /** Devices to merge. An empty array yields an empty page. */
20355
+ deviceIds: zod.z.array(zod.z.number()),
20356
+ /** Window lower bound on `lastActiveAt` (inclusive). */
20357
+ since: zod.z.number().optional(),
20358
+ /** Window upper bound on `lastActiveAt` (inclusive). */
20359
+ until: zod.z.number().optional(),
20360
+ limit: zod.z.number().int().min(1).max(500).default(100),
20361
+ /** Opaque continuation cursor from a previous page's `nextCursor`. */
20362
+ cursor: zod.z.string().optional(),
20363
+ /**
20364
+ * Restrict to these classes — THE SAME FIELD `listRecentTracks` takes, and
20365
+ * deliberately the same name: the events filter tree emits one list of ticked
20366
+ * taxonomy nodes, and a summaries feed that called it something else would
20367
+ * make the operator's one filter component produce two shapes.
20368
+ *
20369
+ * A question about the MEMBERS: a group matches when ANY of them does. "Show
20370
+ * me the arrivals with a dog" has to return the group of four people who had
20371
+ * one with them; a filter on the group's own fields could only ever answer
20372
+ * about its primary.
20373
+ *
20374
+ * Matched against all THREE tiers of a member — the class (`animal`), the
20375
+ * sub-class (`dog`) and the instance (a name, a plate) — because which tier a
20376
+ * ticked node lives on is the taxonomy's business, not the caller's. `dog` is
20377
+ * an event kind in the tree and a tier-1 label on an `animal` track; a filter
20378
+ * that read only the class would answer "animal" and never "dog".
20379
+ *
20380
+ * ABSENT or EMPTY means no filter — absent is not a selection of none.
20381
+ */
20382
+ classes: zod.z.array(zod.z.string().min(1).max(60)).max(40).optional()
20383
+ });
20384
+ var RecentSummariesPageSchema = zod.z.object({
20385
+ /** Ordered by (`lastActiveAt` DESC, id DESC). Same light item as
20386
+ * {@link listSummaries} — one list shape, so a card renders the same
20387
+ * whichever feed drew it. */
20388
+ summaries: zod.z.array(SummaryListItemSchema).readonly(),
20389
+ nextCursor: zod.z.string().nullable()
20390
+ });
20281
20391
  var RecentTracksPageSchema = zod.z.object({
20282
20392
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
20283
20393
  tracks: zod.z.array(TrackSchema).readonly(),
@@ -20734,6 +20844,11 @@ var pipelineAnalyticsCapability = {
20734
20844
  listRecentTracks: require_sleep.method(RecentTracksQueryInput, RecentTracksPageSchema),
20735
20845
  /** Newest first by `openedAt`, for a camera set, inside an optional window. */
20736
20846
  listSummaries: require_sleep.method(SummariesQueryInput, SummariesPageSchema),
20847
+ /**
20848
+ * The PAGED feed — the reel and the Events gallery. Same cursor contract as
20849
+ * {@link listRecentTracks}, so one screen cannot hold two ideas of newest.
20850
+ */
20851
+ listRecentSummaries: require_sleep.method(RecentSummariesQueryInput, RecentSummariesPageSchema),
20737
20852
  /** One summary with its member track ids; `null` for an id nobody wrote. */
20738
20853
  getSummary: require_sleep.method(zod.z.object({ id: zod.z.string() }), SummaryDetailSchema.nullable()),
20739
20854
  clearTracks: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), zod.z.void(), {
@@ -45956,6 +46071,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
45956
46071
  addonId: null,
45957
46072
  access: "view"
45958
46073
  },
46074
+ "pipelineAnalytics.listRecentSummaries": {
46075
+ capName: "pipeline-analytics",
46076
+ capScope: "device",
46077
+ addonId: null,
46078
+ access: "view"
46079
+ },
45959
46080
  "pipelineAnalytics.listRecentTracks": {
45960
46081
  capName: "pipeline-analytics",
45961
46082
  capScope: "device",
@@ -50052,6 +50173,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
50052
50173
  form: "single",
50053
50174
  optional: true
50054
50175
  }],
50176
+ "pipelineAnalytics.listRecentSummaries": [{
50177
+ name: "deviceIds",
50178
+ form: "array",
50179
+ optional: false
50180
+ }],
50055
50181
  "pipelineAnalytics.listRecentTracks": [{
50056
50182
  name: "deviceIds",
50057
50183
  form: "array",
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as CameraStreamSchema, A as DEVICE_STATUS_METHOD, At as collectHydratedFieldValues, B as toNodeId, C as ChargingStatus, Ct as createDurableState, D as adminUiCapability, Dt as WELL_KNOWN_TABS, E as DeviceType, Et as isEvent, F as resolveCapMount, Ft as expandAudioChunkToF32le, G as scopeKey, H as ReadinessTimeoutError, I as systemMethod, It as isAudioChunkFormat, J as BrokerStatusSchema, K as AudioChunkFormatSchema, L as CAP_NODE_PIN_CONTEXT_KEY, M as expandCapMethods, Mt as resolveHydratedFieldValue, N as isDeviceConfigCap, Nt as AUDIO_CHUNK_FORMATS, O as DEFAULT_RUNTIME_STATE_DURABILITY, Ot as WELL_KNOWN_TAB_MAP, P as method, Pt as audioChunkBytesPerSample, Q as CamStreamResolutionSchema, R as nodePin, S as DEVICE_CHILDREN_BATCH_MAX, St as normalizeAddonInitResult, T as DeviceRole, Tt as emitReadiness, U as emitDownForOwnedCaps, V as ReadinessRegistry, W as readinessKey, X as CamProfileSchema, Y as CAM_PROFILE_ORDER, Z as CamStreamKindSchema, _ as createMirrorSource, _t as selectAssignedProfileSlots, a as asJsonObject, at as ProfileRtspEntrySchema, b as deviceOpsCapability, bt as DisposerChain, c as parseJsonArray, ct as StreamSourceEntrySchema, d as BOOT_RECOVERY_BACKOFF_MS, dt as SubscribeAudioChunksResultSchema, et as DecodedAudioChunkSchema, f as DEVICE_SCOPED_CAPS, ft as SubscribeFramesInputSchema, g as createLazyTrpcSource, gt as parseProfileBrokerId, h as createEventBusSliceSource, ht as makeSourceBrokerId, i as asJsonArray, it as FrameHandleSchema, j as event, jt as hydrateSchema, k as DEVICE_SETTINGS_CONTRIBUTION_METHODS, kt as collectHydratedFieldEntries, l as parseJsonObject, lt as StreamSourceSchema, m as createDeviceProxy, mt as makeProfileBrokerId, n as sleepCancellable, nt as EncodedPacketSchema, o as asNumber, ot as ProfileSlotSchema, p as isDeviceScopedCap, pt as SubscribeFramesResultSchema, q as BrokerStatsSchema, r as asBoolean, rt as FrameHandleFormatSchema, s as asString, st as ProfileSlotStatusSchema, t as sleep, tt as DecodedFrameSchema, u as parseJsonUnknown, ut as SubscribeAudioChunksInputSchema, v as createSliceHandle, vt as DATAPLANE_SECRET_HEADER, w as DeviceFeature, wt as createEvent, x as viewerUiCapability, xt as BaseAddon, y as RawStateResultSchema, yt as SHARE_VIEW_KINDS, z as readNodePin } from "./sleep-CnLyvg3w.mjs";
1
+ import { $ as CameraStreamSchema, A as DEVICE_STATUS_METHOD, At as collectHydratedFieldValues, B as toNodeId, C as ChargingStatus, Ct as createDurableState, D as adminUiCapability, Dt as WELL_KNOWN_TABS, E as DeviceType, Et as isEvent, F as resolveCapMount, Ft as expandAudioChunkToF32le, G as scopeKey, H as ReadinessTimeoutError, I as systemMethod, It as isAudioChunkFormat, J as BrokerStatusSchema, K as AudioChunkFormatSchema, L as CAP_NODE_PIN_CONTEXT_KEY, M as expandCapMethods, Mt as resolveHydratedFieldValue, N as isDeviceConfigCap, Nt as AUDIO_CHUNK_FORMATS, O as DEFAULT_RUNTIME_STATE_DURABILITY, Ot as WELL_KNOWN_TAB_MAP, P as method, Pt as audioChunkBytesPerSample, Q as CamStreamResolutionSchema, R as nodePin, S as DEVICE_CHILDREN_BATCH_MAX, St as normalizeAddonInitResult, T as DeviceRole, Tt as emitReadiness, U as emitDownForOwnedCaps, V as ReadinessRegistry, W as readinessKey, X as CamProfileSchema, Y as CAM_PROFILE_ORDER, Z as CamStreamKindSchema, _ as createMirrorSource, _t as selectAssignedProfileSlots, a as asJsonObject, at as ProfileRtspEntrySchema, b as deviceOpsCapability, bt as DisposerChain, c as parseJsonArray, ct as StreamSourceEntrySchema, d as BOOT_RECOVERY_BACKOFF_MS, dt as SubscribeAudioChunksResultSchema, et as DecodedAudioChunkSchema, f as DEVICE_SCOPED_CAPS, ft as SubscribeFramesInputSchema, g as createLazyTrpcSource, gt as parseProfileBrokerId, h as createEventBusSliceSource, ht as makeSourceBrokerId, i as asJsonArray, it as FrameHandleSchema, j as event, jt as hydrateSchema, k as DEVICE_SETTINGS_CONTRIBUTION_METHODS, kt as collectHydratedFieldEntries, l as parseJsonObject, lt as StreamSourceSchema, m as createDeviceProxy, mt as makeProfileBrokerId, n as sleepCancellable, nt as EncodedPacketSchema, o as asNumber, ot as ProfileSlotSchema, p as isDeviceScopedCap, pt as SubscribeFramesResultSchema, q as BrokerStatsSchema, r as asBoolean, rt as FrameHandleFormatSchema, s as asString, st as ProfileSlotStatusSchema, t as sleep, tt as DecodedFrameSchema, u as parseJsonUnknown, ut as SubscribeAudioChunksInputSchema, v as createSliceHandle, vt as DATAPLANE_SECRET_HEADER, w as DeviceFeature, wt as createEvent, x as viewerUiCapability, xt as BaseAddon, y as RawStateResultSchema, yt as SHARE_VIEW_KINDS, z as readNodePin } from "./sleep-DBKu2-U5.mjs";
2
2
  import { t as EventCategory } from "./event-category-ZyX6jcse.mjs";
3
3
  import { a as buildAudioArgs, c as buildVideoArgs, d as logBannerArgs, f as pickVideoEncoder, i as audioPlanFromEncodeProfile, l as invocationFromEncodeProfile, n as Fmp4BoxSplitter, o as buildFfmpegArgs, r as AUDIO_PRESETS, s as buildInputArgs, t as canonicalHash, u as isSoftwareDecode } from "./canonical-hash-rO1sRmEK.mjs";
4
4
  import { EventSourceType } from "./enums.mjs";
@@ -441,7 +441,32 @@ var WEBRTC_EGRESS_PROFILE = {
441
441
  */
442
442
  var ALEXA_EGRESS_PROFILE = {
443
443
  ...BASE_LIVE_EGRESS_PROFILE,
444
- audio: { codec: "opus" }
444
+ audio: { codec: "opus" },
445
+ /**
446
+ * ONE slice per access unit.
447
+ *
448
+ * `-tune zerolatency` turns on x264's sliced threads, and every access unit
449
+ * came out of this encode as FIVE slices — measured on the hub 2026-09-13 on
450
+ * the exact argv this path spawns, and reduced to one by this single flag.
451
+ *
452
+ * Five slices share one RTP timestamp and carry one marker bit, so a
453
+ * libwebrtc depacketiser sees five frame-starts and one frame-end per frame.
454
+ * The Echo renders the first pictures and then freezes for good, while the
455
+ * audio — a separate plane — plays on. It is the only structural property
456
+ * that survived the elimination: the same freeze reproduced at 2304×1296
457
+ * HEVC with 217 KB keyframes AND at 640×360 H.264 with 67 KB keyframes and a
458
+ * fifth of the bitrate, so source, resolution, bitrate, keyframe burst,
459
+ * hardware decode, parameter sets, drift and bitstream conformance are all
460
+ * out — each ruled out by a measurement, not by elimination.
461
+ *
462
+ * The tune STAYS: it also drops the lookahead and the B-frames, which a live
463
+ * path wants. Only the slicing is unwanted, and this is the flag that says so.
464
+ *
465
+ * Scoped to Alexa deliberately. HomeKit and the browser transcode inherit
466
+ * {@link BASE_LIVE_EGRESS_PROFILE}; whether they want the same shape is a
467
+ * question for their own evidence, and the browser has not been measured.
468
+ */
469
+ outputArgs: ["-x264-params", "sliced-threads=0"]
445
470
  };
446
471
  /** VBV window for a consumer whose budget is enforced per second (HomeKit). */
447
472
  var RATE_CONTROL_TIGHT = {
@@ -20248,9 +20273,11 @@ var SummariesQueryInput = z.object({
20248
20273
  deviceIds: z.array(z.number()).min(1),
20249
20274
  since: z.number().optional(),
20250
20275
  until: z.number().optional(),
20251
- limit: z.number().int().min(1).max(200).default(50)
20276
+ limit: z.number().int().min(1).max(200).default(50),
20277
+ /** The same member-wise filter {@link listRecentSummaries} takes — one
20278
+ * meaning of "dog" on every summary surface. */
20279
+ classes: z.array(z.string().min(1).max(60)).max(40).optional()
20252
20280
  });
20253
- var SummariesPageSchema = z.object({ summaries: z.array(SummarySchema).readonly() });
20254
20281
  /**
20255
20282
  * One member of a group, as a reader needs it.
20256
20283
  *
@@ -20262,7 +20289,16 @@ var SummariesPageSchema = z.object({ summaries: z.array(SummarySchema).readonly(
20262
20289
  */
20263
20290
  var SummaryMemberSchema = z.object({
20264
20291
  trackId: z.string(),
20265
- /** The track's class at the time it joined, or `null` when unresolved. */
20292
+ /**
20293
+ * The track's class at the time it JOINED, or `null` when it was unresolved
20294
+ * and the track no longer exists to fill it.
20295
+ *
20296
+ * The join, not the latest opinion: class voting can re-decide a track's
20297
+ * class afterwards, and a group's composition is the history of who came
20298
+ * together. A consumer counts these to badge a thumbnail — "two people and a
20299
+ * dog" — rather than being handed a second, denormalised tally that would
20300
+ * drift from the members it claims to describe.
20301
+ */
20266
20302
  className: z.string().nullable(),
20267
20303
  /** `primary` is the one member that carries the group's identity. */
20268
20304
  role: z.enum([
@@ -20270,13 +20306,87 @@ var SummaryMemberSchema = z.object({
20270
20306
  "sibling",
20271
20307
  "child"
20272
20308
  ]).nullable(),
20273
- joinedAt: z.number()
20309
+ joinedAt: z.number(),
20310
+ /** Tier 1 — the sub-class (`dog`, `van`), resolved from the member's track
20311
+ * at read time. Absent when nothing resolved, never an empty string. */
20312
+ label: z.string().optional(),
20313
+ /** Tier 2 — the instance: a person's name, a plate. Absent when the pipeline
20314
+ * recognised nobody, and absent for a member whose track has been pruned —
20315
+ * a thumbnail that names the wrong person is worse than one naming nobody. */
20316
+ subLabel: z.string().optional()
20274
20317
  });
20275
20318
  var SummaryDetailSchema = z.object({
20276
20319
  summary: SummarySchema,
20277
20320
  /** Members in absorption order, oldest join first. */
20278
20321
  members: z.array(SummaryMemberSchema).readonly()
20279
20322
  });
20323
+ /**
20324
+ * What a LIST of groups carries: the envelope plus what it is MADE OF.
20325
+ *
20326
+ * Coarse on purpose — the operator's rule is "only the rough data on the list,
20327
+ * we extend when we notice we need more". Enough to draw the card ("two people
20328
+ * and a dog") and no more. The MEMBERS, their names and the per-member links
20329
+ * are on {@link getSummary}: shipping every member of every group so a client
20330
+ * can count them turns a page of two hundred groups into a thousand records to
20331
+ * draw two hundred badges.
20332
+ */
20333
+ var SummaryListItemSchema = z.object({
20334
+ summary: SummarySchema,
20335
+ /** Class counts, most numerous first; `className: null` is a member whose
20336
+ * class never resolved, counted so the counts add up to `memberCount`. */
20337
+ classes: z.array(z.object({
20338
+ className: z.string().nullable(),
20339
+ count: z.number().int().positive()
20340
+ })).readonly()
20341
+ });
20342
+ var SummariesPageSchema = z.object({ summaries: z.array(SummaryListItemSchema).readonly() });
20343
+ /**
20344
+ * The paged feed, deliberately the SAME shape as {@link RecentTracksQueryInput}.
20345
+ *
20346
+ * The reel on the cameras page and the Events gallery both ride a cursor, so a
20347
+ * summaries feed that could only answer "the last N for these cameras"
20348
+ * (`listSummaries`) would make groups available in the timeline and nowhere
20349
+ * else. Two feeds with different ordering contracts would be two ideas of what
20350
+ * "newest" means, on one screen.
20351
+ */
20352
+ var RecentSummariesQueryInput = z.object({
20353
+ /** Devices to merge. An empty array yields an empty page. */
20354
+ deviceIds: z.array(z.number()),
20355
+ /** Window lower bound on `lastActiveAt` (inclusive). */
20356
+ since: z.number().optional(),
20357
+ /** Window upper bound on `lastActiveAt` (inclusive). */
20358
+ until: z.number().optional(),
20359
+ limit: z.number().int().min(1).max(500).default(100),
20360
+ /** Opaque continuation cursor from a previous page's `nextCursor`. */
20361
+ cursor: z.string().optional(),
20362
+ /**
20363
+ * Restrict to these classes — THE SAME FIELD `listRecentTracks` takes, and
20364
+ * deliberately the same name: the events filter tree emits one list of ticked
20365
+ * taxonomy nodes, and a summaries feed that called it something else would
20366
+ * make the operator's one filter component produce two shapes.
20367
+ *
20368
+ * A question about the MEMBERS: a group matches when ANY of them does. "Show
20369
+ * me the arrivals with a dog" has to return the group of four people who had
20370
+ * one with them; a filter on the group's own fields could only ever answer
20371
+ * about its primary.
20372
+ *
20373
+ * Matched against all THREE tiers of a member — the class (`animal`), the
20374
+ * sub-class (`dog`) and the instance (a name, a plate) — because which tier a
20375
+ * ticked node lives on is the taxonomy's business, not the caller's. `dog` is
20376
+ * an event kind in the tree and a tier-1 label on an `animal` track; a filter
20377
+ * that read only the class would answer "animal" and never "dog".
20378
+ *
20379
+ * ABSENT or EMPTY means no filter — absent is not a selection of none.
20380
+ */
20381
+ classes: z.array(z.string().min(1).max(60)).max(40).optional()
20382
+ });
20383
+ var RecentSummariesPageSchema = z.object({
20384
+ /** Ordered by (`lastActiveAt` DESC, id DESC). Same light item as
20385
+ * {@link listSummaries} — one list shape, so a card renders the same
20386
+ * whichever feed drew it. */
20387
+ summaries: z.array(SummaryListItemSchema).readonly(),
20388
+ nextCursor: z.string().nullable()
20389
+ });
20280
20390
  var RecentTracksPageSchema = z.object({
20281
20391
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
20282
20392
  tracks: z.array(TrackSchema).readonly(),
@@ -20733,6 +20843,11 @@ var pipelineAnalyticsCapability = {
20733
20843
  listRecentTracks: method(RecentTracksQueryInput, RecentTracksPageSchema),
20734
20844
  /** Newest first by `openedAt`, for a camera set, inside an optional window. */
20735
20845
  listSummaries: method(SummariesQueryInput, SummariesPageSchema),
20846
+ /**
20847
+ * The PAGED feed — the reel and the Events gallery. Same cursor contract as
20848
+ * {@link listRecentTracks}, so one screen cannot hold two ideas of newest.
20849
+ */
20850
+ listRecentSummaries: method(RecentSummariesQueryInput, RecentSummariesPageSchema),
20736
20851
  /** One summary with its member track ids; `null` for an id nobody wrote. */
20737
20852
  getSummary: method(z.object({ id: z.string() }), SummaryDetailSchema.nullable()),
20738
20853
  clearTracks: method(z.object({ deviceId: z.number() }), z.void(), {
@@ -45948,6 +46063,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
45948
46063
  addonId: null,
45949
46064
  access: "view"
45950
46065
  },
46066
+ "pipelineAnalytics.listRecentSummaries": {
46067
+ capName: "pipeline-analytics",
46068
+ capScope: "device",
46069
+ addonId: null,
46070
+ access: "view"
46071
+ },
45951
46072
  "pipelineAnalytics.listRecentTracks": {
45952
46073
  capName: "pipeline-analytics",
45953
46074
  capScope: "device",
@@ -50044,6 +50165,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
50044
50165
  form: "single",
50045
50166
  optional: true
50046
50167
  }],
50168
+ "pipelineAnalytics.listRecentSummaries": [{
50169
+ name: "deviceIds",
50170
+ form: "array",
50171
+ optional: false
50172
+ }],
50047
50173
  "pipelineAnalytics.listRecentTracks": [{
50048
50174
  name: "deviceIds",
50049
50175
  form: "array",
@@ -3636,6 +3636,7 @@ function createDeviceProxy(api, binding, opts) {
3636
3636
  listTracks: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "listTracks", "query", input),
3637
3637
  listRecentTracks: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "listRecentTracks", "query", input),
3638
3638
  listSummaries: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "listSummaries", "query", input),
3639
+ listRecentSummaries: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "listRecentSummaries", "query", input),
3639
3640
  getSummary: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "getSummary", "query", input),
3640
3641
  clearTracks: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "clearTracks", "mutation", input),
3641
3642
  getMotionEvents: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "getMotionEvents", "query", input),
@@ -3636,6 +3636,7 @@ function createDeviceProxy(api, binding, opts) {
3636
3636
  listTracks: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "listTracks", "query", input),
3637
3637
  listRecentTracks: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "listRecentTracks", "query", input),
3638
3638
  listSummaries: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "listSummaries", "query", input),
3639
+ listRecentSummaries: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "listRecentSummaries", "query", input),
3639
3640
  getSummary: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "getSummary", "query", input),
3640
3641
  clearTracks: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "clearTracks", "mutation", input),
3641
3642
  getMotionEvents: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "getMotionEvents", "query", input),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/types",
3
- "version": "1.2.185",
3
+ "version": "1.2.187",
4
4
  "description": "Shared types, interfaces, and model catalogs for the CamStack detection ecosystem",
5
5
  "keywords": [
6
6
  "camstack",