@camstack/types 1.2.278 → 1.2.280

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/index.js CHANGED
@@ -4990,6 +4990,44 @@ function pickClosestResolution(entries, target) {
4990
4990
  }])].sort((a, b) => compareToTarget(a.pixels, b.pixels, targetPixels))[0]?.entry;
4991
4991
  }
4992
4992
  //#endregion
4993
+ //#region src/types/appearance.ts
4994
+ /**
4995
+ * A model-free appearance descriptor of one detection box (D683 §8).
4996
+ *
4997
+ * Computed on the runner from the analysis raster the frame already leased
4998
+ * (`pipeline-runner/appearance-descriptor.ts`), carried on `ObjectDetection`
4999
+ * and mirrored onto the tracker's `SpatialDetection`. A vector about a box,
5000
+ * never pixels (D9/D18). No learned weights, so no licence question (O6).
5001
+ *
5002
+ * Layout: the box shrunk 10 % per side, split into an upper and a lower half;
5003
+ * per half a hue–saturation histogram (8 hue × 4 saturation), a value histogram
5004
+ * (8) and a magnitude-weighted gradient-orientation histogram (8). Each block
5005
+ * is L1-normalised and quantised to integers 0–255. About 300 bytes of JSON.
5006
+ */
5007
+ var APPEARANCE_DESCRIPTOR_VERSION = 1;
5008
+ var APPEARANCE_BIN_COUNT = 96;
5009
+ var APPEARANCE_BLOCKS = {
5010
+ upperHs: [0, 32],
5011
+ upperV: [32, 40],
5012
+ upperGrad: [40, 48],
5013
+ lowerHs: [48, 80],
5014
+ lowerV: [80, 88],
5015
+ lowerGrad: [88, 96]
5016
+ };
5017
+ /**
5018
+ * Whether appearance may influence anything at all (D683 §3.2, fix round 1
5019
+ * ruling 2026-09-30 on the Task 10 cost-bench STOP): OFF until the
5020
+ * descriptor is calibrated on tapes that carry it (Task 23, review M9).
5021
+ *
5022
+ * This is the ONE authority both addons read — never two settings that
5023
+ * could disagree (CLAUDE.md D62). The tracker's `TrackerV2Config.appearanceResolvesAmbiguity`
5024
+ * default reads it (`addon-post-analysis/pipeline/tracker-v2/types.ts`); the
5025
+ * runner's cost gate reads it too (`addon-pipeline/pipeline-runner/appearance-attach.ts`),
5026
+ * short-circuiting BEFORE any crop, resample or descriptor is computed, so a
5027
+ * disabled camera costs nothing extra per frame.
5028
+ */
5029
+ var APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT = false;
5030
+ //#endregion
4993
5031
  //#region src/types/overlay-layer.ts
4994
5032
  var OVERLAY_LAYERS = [
4995
5033
  "motion",
@@ -19012,8 +19050,14 @@ var NcSensorTransitionSchema = zod.z.enum(["raised", "cleared"]);
19012
19050
  /** Admin-zone membership condition (zone IDs as stamped by the ZoneEngine). */
19013
19051
  var NcZoneConditionSchema = zod.z.object({
19014
19052
  ids: zod.z.array(zod.z.string().min(1)).min(1),
19015
- /** Quantifier over `ids` — at least one / every one visited. */
19016
- match: zod.z.enum(["any", "all"]).default("any")
19053
+ /**
19054
+ * LEGACY quantifier over `ids`. Absent = `any` (at least one visited), which
19055
+ * is what both editors mean and all they write since D690: "all of" was
19056
+ * removed from the editors because on an immediate rule it asked one
19057
+ * detection to stand in every zone at once. Still ACCEPTED, and `all` still
19058
+ * evaluated, so a stored rule keeps parsing and meaning what it meant.
19059
+ */
19060
+ match: zod.z.enum(["any", "all"]).optional()
19017
19061
  });
19018
19062
  /**
19019
19063
  * The P1 condition set — a flat AND of groups; absent group = pass;
@@ -20340,7 +20384,7 @@ var NC_CONDITION_CATALOG = [
20340
20384
  "package-event"
20341
20385
  ],
20342
20386
  phase: "P1",
20343
- description: "Admin zone ids; quantifier any/all over the visited set."
20387
+ description: "The zones the subject must be in (included) or never in (excluded)."
20344
20388
  },
20345
20389
  {
20346
20390
  id: "zonesExclude",
@@ -20363,29 +20407,24 @@ var NC_CONDITION_CATALOG = [
20363
20407
  options: [
20364
20408
  {
20365
20409
  value: "",
20366
- label: "Not set — entering",
20367
- hint: "Entries, and every detection that is not a crossing at all. Exits are excluded. This is what a rule without a crossing condition already does, and choosing it writes nothing to the rule."
20368
- },
20369
- {
20370
- value: "enter",
20371
- label: "Entered a zone",
20372
- hint: "The same matches as \"not set\", stated explicitly: entries and non-crossing detections pass, exits do not."
20410
+ label: "Entering",
20411
+ hint: "Entries and ordinary movement; never an exit."
20373
20412
  },
20374
20413
  {
20375
20414
  value: "exit",
20376
- label: "Left a zone",
20377
- hint: "ONLY an exit crossing. A detection that is not a crossing fails, so this rule cannot fire on ordinary movement — pair it with the zones the subject must have left. Also matches a tripwire crossed against its drawn direction."
20415
+ label: "Leaving",
20416
+ hint: "Only an exit from a zone."
20378
20417
  },
20379
20418
  {
20380
20419
  value: "any",
20381
- label: "Entered or left",
20382
- hint: "No direction filter: entries, exits and non-crossing detections alike. This is the only choice that adds exits to what the rule already matched."
20420
+ label: "Entering or leaving",
20421
+ hint: "Entries, exits and ordinary movement."
20383
20422
  }
20384
20423
  ],
20385
20424
  operator: "in",
20386
20425
  appliesTo: ["immediate"],
20387
20426
  phase: "P1",
20388
- description: "Direction of the zone crossing: enter (the default, and what every rule authored before this did) / exit / any. An exit rule matches only crossings."
20427
+ description: "Which way the subject crosses the zone."
20389
20428
  },
20390
20429
  {
20391
20430
  id: "labelEquals",
@@ -20522,7 +20561,7 @@ var NC_CONDITION_CATALOG = [
20522
20561
  "package-event"
20523
20562
  ],
20524
20563
  phase: "P3",
20525
- description: "Only fire while a scene is matched (the baseline is what we see) or diverged (it demonstrably is not) — “tell me about a person at the door, but only while the bin is still out”. A scene that cannot judge, or one this hub has not read yet, does NOT fire."
20564
+ description: "Only fire while a scene is matched or diverged."
20526
20565
  },
20527
20566
  {
20528
20567
  id: "sensorKinds",
@@ -24017,13 +24056,19 @@ var pipelineAnalyticsCapability = {
24017
24056
  *
24018
24057
  * Operator-driven from the DI Events page (batch delete). Routes through
24019
24058
  * the same widened track-deletion cascade (design §5.2).
24059
+ *
24060
+ * `sparedMediaIds` (D683 Task 14): media rows the cascade LEFT because a
24061
+ * live stationary entry vouches for them (its key frame, owned by a track
24062
+ * that moved and was kept). Released when the entry retires. Optional:
24063
+ * absent from a provider that predates it.
24020
24064
  */
24021
24065
  deleteTracks: require_sleep.method(zod.z.object({
24022
24066
  deviceId: zod.z.number(),
24023
24067
  trackIds: zod.z.array(zod.z.string()).min(1)
24024
24068
  }), zod.z.object({
24025
24069
  deleted: zod.z.number().int(),
24026
- failed: zod.z.array(zod.z.string()).readonly()
24070
+ failed: zod.z.array(zod.z.string()).readonly(),
24071
+ sparedMediaIds: zod.z.array(zod.z.number().int()).readonly().optional()
24027
24072
  }), {
24028
24073
  kind: "mutation",
24029
24074
  auth: "admin"
@@ -27368,6 +27413,42 @@ var SetCameraSensorsInputSchema = zod.z.object({
27368
27413
  /** `null` removes the attachment: the camera goes back to `not-configured`. */
27369
27414
  config: CameraSensorsConfigSchema.nullable()
27370
27415
  });
27416
+ /**
27417
+ * Why an early occupancy look (D691) was not scheduled.
27418
+ *
27419
+ * - `unknown-camera` — no session was ever dispatched for it, so there is no
27420
+ * node and no config to attach a burst with.
27421
+ * - `out-of-range` — the ask is negative or further out than the orchestrator
27422
+ * will hold a timer for; the parked-object cadence is the answer there.
27423
+ * - `no-burst-producer` — this build has no burst producer at all.
27424
+ * - `already-looked` — this camera's ONE early look since its last session has
27425
+ * been spent. A look's own burst can re-arm a flickering flip, and a look
27426
+ * per arm would chain a burst every ~30 s forever (review H2); the next
27427
+ * real session re-arms the budget.
27428
+ */
27429
+ var OccupancyLookRefusalSchema = zod.z.enum([
27430
+ "unknown-camera",
27431
+ "out-of-range",
27432
+ "no-burst-producer",
27433
+ "already-looked"
27434
+ ]);
27435
+ /** The input of `requestOccupancyLook` (D691). */
27436
+ var OccupancyLookRequestSchema = zod.z.object({
27437
+ deviceId: zod.z.number().int().nonnegative(),
27438
+ /** How long from NOW until the pending flip's sustain window ends. RELATIVE,
27439
+ * so the caller's clock and the orchestrator's never have to agree. */
27440
+ afterMs: zod.z.number().finite(),
27441
+ /** Why, for the log. */
27442
+ reason: zod.z.string()
27443
+ });
27444
+ /** The answer of `requestOccupancyLook` (D691). */
27445
+ var OccupancyLookAnswerSchema = zod.z.object({
27446
+ scheduled: zod.z.boolean(),
27447
+ /** When `scheduled`: how long until the burst is dialled. */
27448
+ dueInMs: zod.z.number().optional(),
27449
+ /** When not `scheduled`: why. */
27450
+ refusedBecause: OccupancyLookRefusalSchema.optional()
27451
+ });
27371
27452
  var pipelineOrchestratorCapability = {
27372
27453
  name: "pipeline-orchestrator",
27373
27454
  scope: "system",
@@ -27375,6 +27456,19 @@ var pipelineOrchestratorCapability = {
27375
27456
  nodeIdMode: "data",
27376
27457
  exposesDeviceSettings: true,
27377
27458
  methods: {
27459
+ /**
27460
+ * D691 — an occupancy flip is pending on this camera and can commit
27461
+ * `afterMs` from now: dial ONE occupancy burst at the end of its sustain
27462
+ * window instead of leaving the commit to the 300 s parked-object cadence.
27463
+ * Called by the notification centre, the only component that knows a flip
27464
+ * is pending; the dial is the recheck's own (attach on the last session
27465
+ * node, `requestOccupancyBurst`, detach). One pending look per camera; a
27466
+ * session open at the due time is the look, and no burst is dialled.
27467
+ */
27468
+ requestOccupancyLook: require_sleep.method(OccupancyLookRequestSchema, OccupancyLookAnswerSchema, {
27469
+ kind: "mutation",
27470
+ auth: "admin"
27471
+ }),
27378
27472
  /** Internal storage-migration participant lease. While held, dispatch
27379
27473
  * requests are accepted as pending but no new runner attachment starts. */
27380
27474
  pauseForStorageMigration: require_sleep.method(StorageMigrationLeaseInputSchema, zod.z.object({ paused: zod.z.literal(true) }), {
@@ -57256,6 +57350,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
57256
57350
  addonId: null,
57257
57351
  access: "delete"
57258
57352
  },
57353
+ "pipelineOrchestrator.requestOccupancyLook": {
57354
+ capName: "pipeline-orchestrator",
57355
+ capScope: "system",
57356
+ addonId: null,
57357
+ access: "create"
57358
+ },
57259
57359
  "pipelineOrchestrator.resetNodePipelineDefaults": {
57260
57360
  capName: "pipeline-orchestrator",
57261
57361
  capScope: "system",
@@ -61383,6 +61483,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
61383
61483
  form: "single",
61384
61484
  optional: false
61385
61485
  }],
61486
+ "pipelineOrchestrator.requestOccupancyLook": [{
61487
+ name: "deviceId",
61488
+ form: "single",
61489
+ optional: false
61490
+ }],
61386
61491
  "pipelineOrchestrator.resolvePipeline": [{
61387
61492
  name: "deviceId",
61388
61493
  form: "single",
@@ -62218,6 +62323,7 @@ var SYSTEM_SCOPE_DEVICE_METHODS = [
62218
62323
  "pipelineOrchestrator.getCameraSwitches",
62219
62324
  "pipelineOrchestrator.getPipelineAssignment",
62220
62325
  "pipelineOrchestrator.getPipelineDevicePin",
62326
+ "pipelineOrchestrator.requestOccupancyLook",
62221
62327
  "pipelineOrchestrator.resolvePipeline",
62222
62328
  "pipelineOrchestrator.setCameraPipelineForAgent",
62223
62329
  "pipelineOrchestrator.setCameraSensors",
@@ -63181,6 +63287,7 @@ function createSystemProxy(api) {
63181
63287
  getDetectionConfigSchema: (input) => dispatch("pipelineExecutor", "getDetectionConfigSchema", "query", input)
63182
63288
  },
63183
63289
  pipelineOrchestrator: {
63290
+ requestOccupancyLook: (input) => dispatch("pipelineOrchestrator", "requestOccupancyLook", "mutation", input),
63184
63291
  pauseForStorageMigration: (input) => dispatch("pipelineOrchestrator", "pauseForStorageMigration", "mutation", input),
63185
63292
  resumeForStorageMigration: (input) => dispatch("pipelineOrchestrator", "resumeForStorageMigration", "mutation", input),
63186
63293
  rebalance: (input) => dispatch("pipelineOrchestrator", "rebalance", "mutation", input),
@@ -63939,6 +64046,27 @@ function pickerForCondition(conditionId, taxonomy) {
63939
64046
  }
63940
64047
  return null;
63941
64048
  }
64049
+ /** The taxonomy group the class picker appends the audio kinds under. */
64050
+ var AUDIO_GROUP_KEY = "audio";
64051
+ /**
64052
+ * The class picker a RULE's class scope uses: {@link pickerForCondition}'s
64053
+ * `classes` vocabulary WITHOUT the audio group (R13, D690).
64054
+ *
64055
+ * A detection rule that picked a sound there became the legacy one-sample audio
64056
+ * rule and broke itself; sounds are authored on a Sound rule
64057
+ * (`conditions.audio`). The plain `classes` picker keeps the audio group for
64058
+ * the surfaces where a sound IS a class — a snooze, a report, the simulator.
64059
+ */
64060
+ function pickerForRuleClasses(taxonomy) {
64061
+ const picker = pickerForCondition("classes", taxonomy);
64062
+ if (picker === null) return null;
64063
+ const groups = picker.groups.filter((group) => group.key !== AUDIO_GROUP_KEY);
64064
+ return groups.length > 0 ? { groups } : null;
64065
+ }
64066
+ /** An audio kind (`audio-*`) — the one prefix every sound class carries. */
64067
+ function isAudioClassName(name) {
64068
+ return name.trim().toLowerCase().startsWith(`${AUDIO_GROUP_KEY}-`);
64069
+ }
63942
64070
  /** All option values across a picker's groups (for custom-value detection). */
63943
64071
  function knownValues(picker) {
63944
64072
  const set = /* @__PURE__ */ new Set();
@@ -64524,7 +64652,7 @@ var NC_RULE_KIND_SPECS = [
64524
64652
  {
64525
64653
  kind: "detection",
64526
64654
  label: "Conditions",
64527
- excluded: {},
64655
+ excluded: { audio: "A detection rule fires on what the camera SAW. Sounds are a Sound rule of their own — adding one here turned the rule into a sound rule and dropped every detection condition." },
64528
64656
  editable: true,
64529
64657
  carriesMedia: true,
64530
64658
  carriesSubjectCrop: true
@@ -64532,7 +64660,7 @@ var NC_RULE_KIND_SPECS = [
64532
64660
  {
64533
64661
  kind: "sensor",
64534
64662
  label: "Conditions",
64535
- /** Same argument as `detection`: `occupancy` converts, it does not confuse. */
64663
+ /** `occupancy` is still offered here: authoring it converts a sensor rule into an occupancy rule. */
64536
64664
  excluded: {},
64537
64665
  editable: true,
64538
64666
  carriesMedia: true,
@@ -64881,7 +65009,7 @@ function ruleSeedForSection(section) {
64881
65009
  };
64882
65010
  default: return {
64883
65011
  delivery: "immediate",
64884
- conditions: {}
65012
+ conditions: { source: "pipeline" }
64885
65013
  };
64886
65014
  }
64887
65015
  }
@@ -66283,6 +66411,170 @@ function packagePickerItems(packages) {
66283
66411
  return [...pinned, ...addons];
66284
66412
  }
66285
66413
  //#endregion
66414
+ //#region src/i18n/state-labels.ts
66415
+ /** Every key the dictionary answers for, in a stable order. */
66416
+ var STATE_LABEL_KEYS = [
66417
+ "disarmed",
66418
+ "armed_home",
66419
+ "armed_away",
66420
+ "armed_night",
66421
+ "armed_vacation",
66422
+ "armed_custom_bypass",
66423
+ "arming",
66424
+ "disarming",
66425
+ "pending",
66426
+ "triggered",
66427
+ "open",
66428
+ "opening",
66429
+ "closing",
66430
+ "closed",
66431
+ "stopped",
66432
+ "locked",
66433
+ "unlocked",
66434
+ "locking",
66435
+ "unlocking",
66436
+ "jammed",
66437
+ "on",
66438
+ "off",
66439
+ "home",
66440
+ "not_home",
66441
+ "matched",
66442
+ "diverged",
66443
+ "unknown",
66444
+ "latched",
66445
+ "live"
66446
+ ];
66447
+ var STATE_LABELS = {
66448
+ disarmed: {
66449
+ en: "Disarmed",
66450
+ it: "Disinserito"
66451
+ },
66452
+ armed_home: {
66453
+ en: "Armed (home)",
66454
+ it: "Inserito (in casa)"
66455
+ },
66456
+ armed_away: {
66457
+ en: "Armed (away)",
66458
+ it: "Inserito (fuori casa)"
66459
+ },
66460
+ armed_night: {
66461
+ en: "Armed (night)",
66462
+ it: "Inserito (notte)"
66463
+ },
66464
+ armed_vacation: {
66465
+ en: "Armed (vacation)",
66466
+ it: "Inserito (vacanza)"
66467
+ },
66468
+ armed_custom_bypass: {
66469
+ en: "Armed (custom)",
66470
+ it: "Inserito (personalizzato)"
66471
+ },
66472
+ arming: {
66473
+ en: "Arming",
66474
+ it: "In inserimento"
66475
+ },
66476
+ disarming: {
66477
+ en: "Disarming",
66478
+ it: "In disinserimento"
66479
+ },
66480
+ pending: {
66481
+ en: "Pending (entry delay)",
66482
+ it: "In attesa (ritardo ingresso)"
66483
+ },
66484
+ triggered: {
66485
+ en: "Triggered",
66486
+ it: "In allarme"
66487
+ },
66488
+ open: {
66489
+ en: "Open",
66490
+ it: "Aperto"
66491
+ },
66492
+ opening: {
66493
+ en: "Opening",
66494
+ it: "In apertura"
66495
+ },
66496
+ closing: {
66497
+ en: "Closing",
66498
+ it: "In chiusura"
66499
+ },
66500
+ closed: {
66501
+ en: "Closed",
66502
+ it: "Chiuso"
66503
+ },
66504
+ stopped: {
66505
+ en: "Stopped",
66506
+ it: "Fermo"
66507
+ },
66508
+ locked: {
66509
+ en: "Locked",
66510
+ it: "Bloccata"
66511
+ },
66512
+ unlocked: {
66513
+ en: "Unlocked",
66514
+ it: "Sbloccata"
66515
+ },
66516
+ locking: {
66517
+ en: "Locking",
66518
+ it: "In blocco"
66519
+ },
66520
+ unlocking: {
66521
+ en: "Unlocking",
66522
+ it: "In sblocco"
66523
+ },
66524
+ jammed: {
66525
+ en: "Jammed",
66526
+ it: "Inceppata"
66527
+ },
66528
+ on: {
66529
+ en: "On",
66530
+ it: "Acceso"
66531
+ },
66532
+ off: {
66533
+ en: "Off",
66534
+ it: "Spento"
66535
+ },
66536
+ home: {
66537
+ en: "Home",
66538
+ it: "In casa"
66539
+ },
66540
+ not_home: {
66541
+ en: "Away",
66542
+ it: "Fuori casa"
66543
+ },
66544
+ matched: {
66545
+ en: "Matched (as captured)",
66546
+ it: "Corrisponde (come acquisita)"
66547
+ },
66548
+ diverged: {
66549
+ en: "Diverged (changed)",
66550
+ it: "Diversa (cambiata)"
66551
+ },
66552
+ unknown: {
66553
+ en: "Cannot judge",
66554
+ it: "Non valutabile"
66555
+ },
66556
+ latched: {
66557
+ en: "Latched",
66558
+ it: "Memorizzato"
66559
+ },
66560
+ live: {
66561
+ en: "Live",
66562
+ it: "In tempo reale"
66563
+ }
66564
+ };
66565
+ var KEY_SET = new Set(STATE_LABEL_KEYS);
66566
+ /** Is `key` one the dictionary answers for? An own key only — never `toString`. */
66567
+ function isStateLabelKey(key) {
66568
+ return KEY_SET.has(key);
66569
+ }
66570
+ /**
66571
+ * The human label of a state word in `locale`, or the word itself when the
66572
+ * dictionary does not know it. Never throws.
66573
+ */
66574
+ function stateLabel(key, locale) {
66575
+ return isStateLabelKey(key) ? STATE_LABELS[key][locale] : key;
66576
+ }
66577
+ //#endregion
66286
66578
  //#region src/notification/timelapse-rule.ts
66287
66579
  /**
66288
66580
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
@@ -68704,6 +68996,10 @@ exports.ACCESSORY_LABEL = ACCESSORY_LABEL;
68704
68996
  exports.ACCESS_ROLES = ACCESS_ROLES;
68705
68997
  exports.ALEXA_EGRESS_PROFILE = ALEXA_EGRESS_PROFILE;
68706
68998
  exports.ALL_CAPABILITY_DEFINITIONS = ALL_CAPABILITY_DEFINITIONS;
68999
+ exports.APPEARANCE_BIN_COUNT = APPEARANCE_BIN_COUNT;
69000
+ exports.APPEARANCE_BLOCKS = APPEARANCE_BLOCKS;
69001
+ exports.APPEARANCE_DESCRIPTOR_VERSION = APPEARANCE_DESCRIPTOR_VERSION;
69002
+ exports.APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT = APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT;
68707
69003
  exports.APPLE_SA_TO_MACRO = APPLE_SA_TO_MACRO;
68708
69004
  exports.ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT = ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT;
68709
69005
  exports.AUDIO_ANALYSIS_CAP_NAME = AUDIO_ANALYSIS_CAP_NAME;
@@ -69635,6 +69931,9 @@ exports.OWNER_ONLY_EVENT_CATEGORIES = require_event_category.OWNER_ONLY_EVENT_CA
69635
69931
  exports.OauthIntegrationDescriptorSchema = OauthIntegrationDescriptorSchema;
69636
69932
  exports.ObjectEventSchema = ObjectEventSchema;
69637
69933
  exports.OccupancyBurstRefusalSchema = OccupancyBurstRefusalSchema;
69934
+ exports.OccupancyLookAnswerSchema = OccupancyLookAnswerSchema;
69935
+ exports.OccupancyLookRefusalSchema = OccupancyLookRefusalSchema;
69936
+ exports.OccupancyLookRequestSchema = OccupancyLookRequestSchema;
69638
69937
  exports.OnboardFieldSupportSchema = OnboardFieldSupportSchema;
69639
69938
  exports.OnboardRecordTrackSchema = OnboardRecordTrackSchema;
69640
69939
  exports.OnboardScheduleSupportSchema = OnboardScheduleSupportSchema;
@@ -69853,6 +70152,8 @@ exports.SOURCE_CAP_ACTIVE_FIELD = require_composition.SOURCE_CAP_ACTIVE_FIELD;
69853
70152
  exports.SOURCE_CAP_CHANGED_AT_FIELD = require_composition.SOURCE_CAP_CHANGED_AT_FIELD;
69854
70153
  exports.SOURCE_DEVICE_TYPES = require_composition.SOURCE_DEVICE_TYPES;
69855
70154
  exports.SOURCE_INFO_METADATA_KEY = SOURCE_INFO_METADATA_KEY;
70155
+ exports.STATE_LABELS = STATE_LABELS;
70156
+ exports.STATE_LABEL_KEYS = STATE_LABEL_KEYS;
69856
70157
  exports.STATIONARY_OVERLAY_STYLE = STATIONARY_OVERLAY_STYLE;
69857
70158
  exports.STORAGE_ACCESS_FALLBACK = STORAGE_ACCESS_FALLBACK;
69858
70159
  exports.STORAGE_BYTES_PER_GB = STORAGE_BYTES_PER_GB;
@@ -70371,6 +70672,7 @@ exports.invocationFromEncodeProfile = require_composition.invocationFromEncodePr
70371
70672
  exports.isAgentOnlyPlacement = isAgentOnlyPlacement;
70372
70673
  exports.isArrayOutputSchema = isArrayOutputSchema;
70373
70674
  exports.isAudioChunkFormat = require_sleep.isAudioChunkFormat;
70675
+ exports.isAudioClassName = isAudioClassName;
70374
70676
  exports.isAudioLabelSelected = isAudioLabelSelected;
70375
70677
  exports.isAudioRule = isAudioRule;
70376
70678
  exports.isBaseConditionKey = isBaseConditionKey;
@@ -70401,6 +70703,7 @@ exports.isScheduleActive = isScheduleActive;
70401
70703
  exports.isSecretConfigField = isSecretConfigField;
70402
70704
  exports.isSoftwareDecode = require_composition.isSoftwareDecode;
70403
70705
  exports.isSourceCap = require_composition.isSourceCap;
70706
+ exports.isStateLabelKey = isStateLabelKey;
70404
70707
  exports.isStatefulBuiltin = require_composition.isStatefulBuiltin;
70405
70708
  exports.isStorageLocationMode = isStorageLocationMode;
70406
70709
  exports.isSystemDelivery = isSystemDelivery;
@@ -70514,6 +70817,7 @@ exports.pickPreferredRtspEntry = pickPreferredRtspEntry;
70514
70817
  exports.pickRestartCandidate = pickRestartCandidate;
70515
70818
  exports.pickVideoEncoder = require_composition.pickVideoEncoder;
70516
70819
  exports.pickerForCondition = pickerForCondition;
70820
+ exports.pickerForRuleClasses = pickerForRuleClasses;
70517
70821
  exports.pipelineAnalyticsCapability = pipelineAnalyticsCapability;
70518
70822
  exports.pipelineExecutorCapability = pipelineExecutorCapability;
70519
70823
  exports.pipelineOrchestratorCapability = pipelineOrchestratorCapability;
@@ -70627,6 +70931,7 @@ exports.smtpProviderCapability = smtpProviderCapability;
70627
70931
  exports.snapshotCapability = snapshotCapability;
70628
70932
  exports.ssoBridgeCapability = ssoBridgeCapability;
70629
70933
  exports.startReachabilityPoll = startReachabilityPoll;
70934
+ exports.stateLabel = stateLabel;
70630
70935
  exports.stateVocabularyFor = stateVocabularyFor;
70631
70936
  exports.stepModelRunsOnFormat = stepModelRunsOnFormat;
70632
70937
  exports.storageCapability = storageCapability;