@camstack/types 1.2.93 → 1.2.94
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/capabilities/pipeline-analytics.cap.d.ts +7 -1
- package/dist/capabilities/pipeline-runner.cap.d.ts +3 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +266 -7
- package/dist/index.mjs +258 -8
- package/dist/interfaces/recording-config.d.ts +16 -3
- package/dist/pipeline/cluster-model-scope.d.ts +108 -0
- package/dist/pipeline/detail-crop.d.ts +19 -0
- package/dist/types/pipeline-step.d.ts +36 -1
- package/package.json +1 -1
|
@@ -202,7 +202,7 @@ export type TrackEnvelope = z.infer<typeof TrackEnvelopeSchema>;
|
|
|
202
202
|
* `snapshots[]` references — megabytes across a page of tracks. `slim`
|
|
203
203
|
* keeps every scalar the list surfaces actually render (ids, class(es),
|
|
204
204
|
* label / audioLabels / importance enrichment, firstSeen/lastSeen, state,
|
|
205
|
-
* zonesVisited, bestEventId, envelope, hasFace, hasRider) and returns `positions` /
|
|
205
|
+
* zonesVisited, bestEventId, envelope, hasFace, hasEmbeddedFace, hasRider) and returns `positions` /
|
|
206
206
|
* `snapshots` as EMPTY arrays — detail views re-fetch the full row via
|
|
207
207
|
* `getTrack`. Mirrors the event-store `projection` convention
|
|
208
208
|
* (`getObjectEvents` et al.).
|
|
@@ -435,6 +435,7 @@ declare const TrackSchema: z.ZodObject<{
|
|
|
435
435
|
maxY: z.ZodNumber;
|
|
436
436
|
}, z.core.$strip>>;
|
|
437
437
|
hasFace: z.ZodOptional<z.ZodBoolean>;
|
|
438
|
+
hasEmbeddedFace: z.ZodOptional<z.ZodBoolean>;
|
|
438
439
|
hasRider: z.ZodOptional<z.ZodBoolean>;
|
|
439
440
|
label: z.ZodOptional<z.ZodString>;
|
|
440
441
|
labelScore: z.ZodOptional<z.ZodNumber>;
|
|
@@ -1087,6 +1088,7 @@ declare const RecentTracksPageSchema: z.ZodObject<{
|
|
|
1087
1088
|
maxY: z.ZodNumber;
|
|
1088
1089
|
}, z.core.$strip>>;
|
|
1089
1090
|
hasFace: z.ZodOptional<z.ZodBoolean>;
|
|
1091
|
+
hasEmbeddedFace: z.ZodOptional<z.ZodBoolean>;
|
|
1090
1092
|
hasRider: z.ZodOptional<z.ZodBoolean>;
|
|
1091
1093
|
label: z.ZodOptional<z.ZodString>;
|
|
1092
1094
|
labelScore: z.ZodOptional<z.ZodNumber>;
|
|
@@ -1348,6 +1350,7 @@ export declare const pipelineAnalyticsCapability: {
|
|
|
1348
1350
|
maxY: z.ZodNumber;
|
|
1349
1351
|
}, z.core.$strip>>;
|
|
1350
1352
|
hasFace: z.ZodOptional<z.ZodBoolean>;
|
|
1353
|
+
hasEmbeddedFace: z.ZodOptional<z.ZodBoolean>;
|
|
1351
1354
|
hasRider: z.ZodOptional<z.ZodBoolean>;
|
|
1352
1355
|
label: z.ZodOptional<z.ZodString>;
|
|
1353
1356
|
labelScore: z.ZodOptional<z.ZodNumber>;
|
|
@@ -1444,6 +1447,7 @@ export declare const pipelineAnalyticsCapability: {
|
|
|
1444
1447
|
maxY: z.ZodNumber;
|
|
1445
1448
|
}, z.core.$strip>>;
|
|
1446
1449
|
hasFace: z.ZodOptional<z.ZodBoolean>;
|
|
1450
|
+
hasEmbeddedFace: z.ZodOptional<z.ZodBoolean>;
|
|
1447
1451
|
hasRider: z.ZodOptional<z.ZodBoolean>;
|
|
1448
1452
|
label: z.ZodOptional<z.ZodString>;
|
|
1449
1453
|
labelScore: z.ZodOptional<z.ZodNumber>;
|
|
@@ -1563,6 +1567,7 @@ export declare const pipelineAnalyticsCapability: {
|
|
|
1563
1567
|
maxY: z.ZodNumber;
|
|
1564
1568
|
}, z.core.$strip>>;
|
|
1565
1569
|
hasFace: z.ZodOptional<z.ZodBoolean>;
|
|
1570
|
+
hasEmbeddedFace: z.ZodOptional<z.ZodBoolean>;
|
|
1566
1571
|
hasRider: z.ZodOptional<z.ZodBoolean>;
|
|
1567
1572
|
label: z.ZodOptional<z.ZodString>;
|
|
1568
1573
|
labelScore: z.ZodOptional<z.ZodNumber>;
|
|
@@ -1678,6 +1683,7 @@ export declare const pipelineAnalyticsCapability: {
|
|
|
1678
1683
|
maxY: z.ZodNumber;
|
|
1679
1684
|
}, z.core.$strip>>;
|
|
1680
1685
|
hasFace: z.ZodOptional<z.ZodBoolean>;
|
|
1686
|
+
hasEmbeddedFace: z.ZodOptional<z.ZodBoolean>;
|
|
1681
1687
|
hasRider: z.ZodOptional<z.ZodBoolean>;
|
|
1682
1688
|
label: z.ZodOptional<z.ZodString>;
|
|
1683
1689
|
labelScore: z.ZodOptional<z.ZodNumber>;
|
|
@@ -55,6 +55,7 @@ declare const DetailResultSchema: z.ZodObject<{
|
|
|
55
55
|
}, z.core.$strip>>;
|
|
56
56
|
embedding: z.ZodOptional<z.ZodString>;
|
|
57
57
|
embeddingMagnitude: z.ZodOptional<z.ZodNumber>;
|
|
58
|
+
embeddingModelId: z.ZodOptional<z.ZodString>;
|
|
58
59
|
label: z.ZodOptional<z.ZodString>;
|
|
59
60
|
labelTier: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>]>>;
|
|
60
61
|
labelModelId: z.ZodOptional<z.ZodString>;
|
|
@@ -628,6 +629,7 @@ export declare const pipelineRunnerCapability: {
|
|
|
628
629
|
}, z.core.$strip>>;
|
|
629
630
|
embedding: z.ZodOptional<z.ZodString>;
|
|
630
631
|
embeddingMagnitude: z.ZodOptional<z.ZodNumber>;
|
|
632
|
+
embeddingModelId: z.ZodOptional<z.ZodString>;
|
|
631
633
|
label: z.ZodOptional<z.ZodString>;
|
|
632
634
|
labelTier: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>]>>;
|
|
633
635
|
labelModelId: z.ZodOptional<z.ZodString>;
|
|
@@ -707,6 +709,7 @@ export declare const pipelineRunnerCapability: {
|
|
|
707
709
|
}, z.core.$strip>>;
|
|
708
710
|
embedding: z.ZodOptional<z.ZodString>;
|
|
709
711
|
embeddingMagnitude: z.ZodOptional<z.ZodNumber>;
|
|
712
|
+
embeddingModelId: z.ZodOptional<z.ZodString>;
|
|
710
713
|
label: z.ZodOptional<z.ZodString>;
|
|
711
714
|
labelTier: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>]>>;
|
|
712
715
|
labelModelId: z.ZodOptional<z.ZodString>;
|
package/dist/index.d.ts
CHANGED
|
@@ -199,7 +199,8 @@ export { isScheduleActive } from './notification/schedule.js';
|
|
|
199
199
|
export { NC_SYSTEM_EVENT_FILTER_KEYS, type NcSystemEventFilterKey, systemEventFilterApplies, systemEventFilterAppliesToAnyKind, } from './notification/system-event-filters.js';
|
|
200
200
|
export type { TimelapseCadencePair, TimelapsePreviewMode, TimelapseRule, TimelapseRuleInput, TimelapseRulePatch, TimelapseTemplate, } from './notification/timelapse-rule.js';
|
|
201
201
|
export { assertTimelapseCadences, DEFAULT_TIMELAPSE_PREVIEW_TEXT, readTimelapseGeneratedAt, TIMELAPSE_DENSE_FLOOR_SEC, TimelapseRuleInputSchema, TimelapseRulePatchSchema, TimelapseRuleSchema, TimelapseTemplateSchema, } from './notification/timelapse-rule.js';
|
|
202
|
-
export {
|
|
202
|
+
export { CLUSTER_MODEL_SCOPED_STEPS, CLUSTER_MODEL_SECTION_ID, type ClusterModelScopedStep, type ClusterStepModels, clusterModelSettingKey, DEFAULT_CLUSTER_STEP_MODELS, type HydratedClusterSection, type HydratedClusterView, isClusterScopedStep, pickClusterStepModels, readClusterStepModels, resolveClusterStepModelId, type StepModelScope, } from './pipeline/cluster-model-scope.js';
|
|
203
|
+
export { DEFAULT_DETAIL_CROP_CONVENTION, DETAIL_CROP_PADDING_FIELD, DETAIL_CROP_PADDING_KEY, DETAIL_CROP_SECTION_ID, DETAIL_CROP_SQUARE_KEY, FULL_IMAGE_BBOX, type DetailCropConvention, DetailCropConventionSchema, type DetailCropRect, deriveDetailCropRect, type HydratedSettingsSection, type HydratedSettingsView, pickDetailCropConvention, readDetailCropConvention, } from './pipeline/detail-crop.js';
|
|
203
204
|
export { DEFAULT_NATIVE_LEASE_SETTINGS, NATIVE_LEASE_ACTIVITY_FIELD, NATIVE_LEASE_ACTIVITY_KEY, NATIVE_LEASE_ADMISSION_FIELD, NATIVE_LEASE_ADMISSION_KEY, NATIVE_LEASE_BUDGET_FIELD, NATIVE_LEASE_BUDGET_KEY, NATIVE_LEASE_HOLD_FIELD, NATIVE_LEASE_HOLD_KEY, NATIVE_LEASE_SECTION_ID, NATIVE_LEASE_TILE_BUDGET_FIELD, NATIVE_LEASE_TILE_BUDGET_KEY, type NativeLeaseAdmission, NativeLeaseAdmissionSchema, type NativeLeaseKnob, type NativeLeaseNumberKnob, type NativeLeaseSettings, type NativeLeaseSettingsOverride, NativeLeaseSettingsSchema, pickNativeLeaseOverride, readNativeLeaseOverride, } from './pipeline/native-lease.js';
|
|
204
205
|
export { ACCESS_ROLES, type AccessRoleAssignment, type AccessRoleId, type AccessRoleSpec, buildRoleScopes, detectAccessRole, roleSpec, } from './schemas/access-roles.js';
|
|
205
206
|
export { type ApiKeyRecord, ApiKeyRecordSchema, type CapScope, CapScopeSchema, type DeviceSelector, DeviceSelectorSchema, type DeviceTokenScope, type MethodAccess, MethodAccessSchema, type ScopedToken, ScopedTokenSchema, type TokenScope, TokenScopeSchema, type UserRecord, UserRecordSchema, } from './schemas/auth-records.js';
|
package/dist/index.js
CHANGED
|
@@ -1530,12 +1530,25 @@ var RecordingBandSchema = zod.z.object({
|
|
|
1530
1530
|
* segment is ever finalized and the camera records nothing anyway. At the 10 s
|
|
1531
1531
|
* default segment length, 30 s leaves room for two full segments. `preBufferSec`
|
|
1532
1532
|
* is retroactive only — it costs nothing at record time, it merely keeps
|
|
1533
|
-
* already-written segments
|
|
1533
|
+
* already-written segments.
|
|
1534
1534
|
*
|
|
1535
|
-
*
|
|
1535
|
+
* ## Why `preBufferSec` is 15 and not one segment length
|
|
1536
|
+
*
|
|
1537
|
+
* It has to cover the broker's RECORDING pre-roll, which is media handed to the
|
|
1538
|
+
* writer from BEFORE the trigger (D192/D193). If this bound were narrower, the
|
|
1539
|
+
* keep gate would delete the very seconds the ring just supplied — two
|
|
1540
|
+
* authorities disagreeing about the same footage, which is the failure D191 was
|
|
1541
|
+
* written against. It is therefore set to `RECORDING_PRE_ROLL_MAX_MS` (15 s),
|
|
1542
|
+
* the widest window the broker can be configured to serve, so an operator
|
|
1543
|
+
* raising the cluster pre-roll can never walk past the gate silently. The
|
|
1544
|
+
* addon-side guard is
|
|
1545
|
+
* `packages/addon-pipeline/src/recorder/addon/__tests__/band-decision.spec.ts`.
|
|
1546
|
+
*
|
|
1547
|
+
* An EXPLICIT `0` is left alone: that is an operator statement, not an omission,
|
|
1548
|
+
* and it is excluded from that invariant by name.
|
|
1536
1549
|
*/
|
|
1537
1550
|
var DEFAULT_EVENTS_BAND_BUFFER_SEC = {
|
|
1538
|
-
preBufferSec:
|
|
1551
|
+
preBufferSec: 15,
|
|
1539
1552
|
postBufferSec: 30
|
|
1540
1553
|
};
|
|
1541
1554
|
/**
|
|
@@ -4223,11 +4236,15 @@ export default function block(ctx: AddonContext) {
|
|
|
4223
4236
|
): Promise<void> {
|
|
4224
4237
|
const resolved: Record<string, unknown> = {}
|
|
4225
4238
|
for (const [k, v] of Object.entries(args)) resolved[k] = substitute(v, vars)
|
|
4226
|
-
const client = (ctx.api
|
|
4227
|
-
|
|
4239
|
+
const client: unknown = Reflect.get(ctx.api, capToRouterKey(cap))
|
|
4240
|
+
const proc: unknown =
|
|
4241
|
+
typeof client === 'object' && client !== null ? Reflect.get(client, method) : undefined
|
|
4242
|
+
const mutate: unknown =
|
|
4243
|
+
typeof proc === 'object' && proc !== null ? Reflect.get(proc, 'mutate') : undefined
|
|
4244
|
+
if (typeof mutate !== 'function') {
|
|
4228
4245
|
throw new Error('no such device method: ' + cap + '.' + method)
|
|
4229
4246
|
}
|
|
4230
|
-
await
|
|
4247
|
+
await mutate({ ...resolved, deviceId })
|
|
4231
4248
|
}
|
|
4232
4249
|
|
|
4233
4250
|
async function evaluateConditions(): Promise<boolean> {
|
|
@@ -14688,7 +14705,7 @@ var TrackEnvelopeSchema = zod.z.object({
|
|
|
14688
14705
|
* `snapshots[]` references — megabytes across a page of tracks. `slim`
|
|
14689
14706
|
* keeps every scalar the list surfaces actually render (ids, class(es),
|
|
14690
14707
|
* label / audioLabels / importance enrichment, firstSeen/lastSeen, state,
|
|
14691
|
-
* zonesVisited, bestEventId, envelope, hasFace, hasRider) and returns `positions` /
|
|
14708
|
+
* zonesVisited, bestEventId, envelope, hasFace, hasEmbeddedFace, hasRider) and returns `positions` /
|
|
14692
14709
|
* `snapshots` as EMPTY arrays — detail views re-fetch the full row via
|
|
14693
14710
|
* `getTrack`. Mirrors the event-store `projection` convention
|
|
14694
14711
|
* (`getObjectEvents` et al.).
|
|
@@ -14999,6 +15016,35 @@ var TrackSchema = zod.z.object({
|
|
|
14999
15016
|
*/
|
|
15000
15017
|
hasFace: zod.z.boolean().optional(),
|
|
15001
15018
|
/**
|
|
15019
|
+
* This track has a face row IN THE GALLERY: a crop **and** an embedding — a
|
|
15020
|
+
* face an operator could ASSIGN to an identity.
|
|
15021
|
+
*
|
|
15022
|
+
* The STRICT twin of {@link hasFace}, and the pair only earns its keep
|
|
15023
|
+
* because the two disagree. `hasFace` is stamped at the TOP of the face
|
|
15024
|
+
* branch, before every gate, and means no more than "a face detector produced
|
|
15025
|
+
* a face detail". This one is stamped at the single moment the gallery row
|
|
15026
|
+
* LANDS — after `FaceRecognizer.onTrackEnd` successfully persists it, i.e.
|
|
15027
|
+
* past the embedding-magnitude verdict, the `minFacePx` detection gate, the
|
|
15028
|
+
* candidate gate, the imageless-track drop (no crop was ever captured) and
|
|
15029
|
+
* the crop-store drop. Everything between the detector and that insert can
|
|
15030
|
+
* legitimately refuse the face, so a flag written any earlier promises the
|
|
15031
|
+
* operator something to assign and delivers nothing.
|
|
15032
|
+
*
|
|
15033
|
+
* **Independent of recognition.** A face collected but never auto-matched is
|
|
15034
|
+
* still assignable — it is in fact the face an operator most wants to reach —
|
|
15035
|
+
* so this is NOT gated on `recognizedIdentityId`. Recognition lands in
|
|
15036
|
+
* `subLabel`; this says only that the raw material exists.
|
|
15037
|
+
*
|
|
15038
|
+
* **Set once, never cleared.** A track that produced a gallery row produced
|
|
15039
|
+
* one; deleting the row later is the gallery's business, not this flag's.
|
|
15040
|
+
*
|
|
15041
|
+
* **Absent ≠ false**, the same rule as {@link hasFace}: every row written
|
|
15042
|
+
* before the column omits it, and so does every server that predates the
|
|
15043
|
+
* field. A consumer must test `=== true` and render nothing otherwise —
|
|
15044
|
+
* never infer "no assignable face".
|
|
15045
|
+
*/
|
|
15046
|
+
hasEmbeddedFace: zod.z.boolean().optional(),
|
|
15047
|
+
/**
|
|
15002
15048
|
* This subject CONTAINS a folded rider — a person the rider-pairing step
|
|
15003
15049
|
* ([D34](../decisions/adr-0034.md)) removed from the frame BEFORE the tracker,
|
|
15004
15050
|
* so the passage is tracked once and as a VEHICLE.
|
|
@@ -16965,6 +17011,26 @@ var DetailResultSchema = zod.z.object({
|
|
|
16965
17011
|
* the consuming gate treats as accept — never as reject.
|
|
16966
17012
|
*/
|
|
16967
17013
|
embeddingMagnitude: zod.z.number().optional(),
|
|
17014
|
+
/**
|
|
17015
|
+
* Model that produced `embedding` — the SAME contract `labelModelId` has for
|
|
17016
|
+
* `label`, and for the same reason: the producing node is the only side that
|
|
17017
|
+
* knows which model actually ran, and re-deriving it downstream is exactly
|
|
17018
|
+
* the inference this model exists to forbid.
|
|
17019
|
+
*
|
|
17020
|
+
* Additive and optional, so a runner that predates it degrades to
|
|
17021
|
+
* "unmeasurable" rather than to a wrong answer — the consumer falls back to
|
|
17022
|
+
* its previous assumption instead of refusing.
|
|
17023
|
+
*
|
|
17024
|
+
* Its absence was not cosmetic. `FaceRecognizer` needs the probe's model id
|
|
17025
|
+
* to use `face-matcher`'s same-model gate (`sample.modelId !== probe.modelId`);
|
|
17026
|
+
* with nothing on the wire it took the id from the GALLERY, so the gate
|
|
17027
|
+
* compared the gallery against itself and could never fire. That turned the
|
|
17028
|
+
* one guard protecting the face feature space into a tautology, and it is
|
|
17029
|
+
* why swapping `face-embedding`'s model would NOT have stranded the enrolled
|
|
17030
|
+
* gallery as the catalog comment predicts — it would have scored the new
|
|
17031
|
+
* model's vectors against the old model's samples in one cosine space.
|
|
17032
|
+
*/
|
|
17033
|
+
embeddingModelId: zod.z.string().optional(),
|
|
16968
17034
|
label: zod.z.string().optional(),
|
|
16969
17035
|
/**
|
|
16970
17036
|
* The tier `label` occupies, copied VERBATIM from the producing step's
|
|
@@ -44334,6 +44400,166 @@ function readTimelapseGeneratedAt(rule, deviceId) {
|
|
|
44334
44400
|
return rule.lastGeneratedAt ?? 0;
|
|
44335
44401
|
}
|
|
44336
44402
|
//#endregion
|
|
44403
|
+
//#region src/pipeline/cluster-model-scope.ts
|
|
44404
|
+
/**
|
|
44405
|
+
* A model choice has a SCOPE, and a scope change has a workflow.
|
|
44406
|
+
*
|
|
44407
|
+
* ## The two scopes
|
|
44408
|
+
*
|
|
44409
|
+
* Almost every pipeline step's model is a **node** question: which build runs
|
|
44410
|
+
* fastest on THIS accelerator. Two nodes may legitimately answer differently —
|
|
44411
|
+
* a Coral runs the tflite SSD, a Mac runs the coreml YOLO — because the answers
|
|
44412
|
+
* are compared against nothing. They produce boxes, and a box is a box.
|
|
44413
|
+
*
|
|
44414
|
+
* Two steps are not like that. `face-embedding` and `clip-embedding` produce
|
|
44415
|
+
* **vectors that land in ONE shared index** (`identity_samples`,
|
|
44416
|
+
* `vec_object_clip`) and are ranked against each other by cosine similarity.
|
|
44417
|
+
* Cosine similarity between two encoders is not a weak signal, it is a
|
|
44418
|
+
* meaningless number — and nothing inside a vector can tell you it happened.
|
|
44419
|
+
* So for those two steps the model is a **cluster** question with exactly one
|
|
44420
|
+
* answer, stored in exactly one row.
|
|
44421
|
+
*
|
|
44422
|
+
* That is the same argument [D52](../../../../docs/decisions/adr-0052.md) makes
|
|
44423
|
+
* for the crop convention (`detail-crop.ts`), one level up: the crop decides
|
|
44424
|
+
* WHAT pixels the encoder sees, this decides WHICH encoder sees them. Both are
|
|
44425
|
+
* cluster-wide for the same reason and neither may become per-node.
|
|
44426
|
+
*
|
|
44427
|
+
* ## Why the registry lives here and not in the step catalog
|
|
44428
|
+
*
|
|
44429
|
+
* The scope itself is declared on the step, in
|
|
44430
|
+
* `detection-pipeline/registry/step-definitions.ts` (`StepDefinition.modelScope`)
|
|
44431
|
+
* — that is where a new step declares what kind of choice its model is. But the
|
|
44432
|
+
* catalog lives inside `addon-pipeline`, and three packages that must NOT
|
|
44433
|
+
* import an addon need to know the set: the orchestrator (which renders and
|
|
44434
|
+
* stores the row), post-analysis (which pins the row for a re-embed pass) and
|
|
44435
|
+
* admin-ui (which mirrors it). So the set is mirrored here, and
|
|
44436
|
+
* `scripts/check-cluster-model-scope.ts` fails the build when the two disagree.
|
|
44437
|
+
* A hand-copied key that stops matching is exactly how a setting silently stops
|
|
44438
|
+
* arriving while both sides still look correct.
|
|
44439
|
+
*
|
|
44440
|
+
* ## The defaults ARE today's behaviour
|
|
44441
|
+
*
|
|
44442
|
+
* {@link DEFAULT_CLUSTER_STEP_MODELS} reproduces the catalog `defaultModelId`
|
|
44443
|
+
* of both steps. Declaring the scope therefore changes nothing on the day it
|
|
44444
|
+
* ships: the cluster row starts out saying what every node was already doing.
|
|
44445
|
+
* Changing it is legitimate — that is what the knob is for — but it invalidates
|
|
44446
|
+
* the stored vectors of that surface, and must be followed by a re-embed pass
|
|
44447
|
+
* (`face-reembed-pass.ts`, `embedding-rebuild.ts`).
|
|
44448
|
+
*/
|
|
44449
|
+
/**
|
|
44450
|
+
* The cluster-scoped steps. Mirrored from the catalog's `modelScope: 'cluster'`
|
|
44451
|
+
* declarations and guarded by `scripts/check-cluster-model-scope.ts`.
|
|
44452
|
+
*/
|
|
44453
|
+
var CLUSTER_MODEL_SCOPED_STEPS = [{
|
|
44454
|
+
stepId: "face-embedding",
|
|
44455
|
+
label: "Face recognition model",
|
|
44456
|
+
defaultModelId: "arcface-r100",
|
|
44457
|
+
indexName: "the enrolled face gallery",
|
|
44458
|
+
options: [
|
|
44459
|
+
{
|
|
44460
|
+
id: "arcface-r100",
|
|
44461
|
+
label: "ArcFace (ResNet34)"
|
|
44462
|
+
},
|
|
44463
|
+
{
|
|
44464
|
+
id: "auraface-r100",
|
|
44465
|
+
label: "AuraFace R100"
|
|
44466
|
+
},
|
|
44467
|
+
{
|
|
44468
|
+
id: "inception-resnet-v1",
|
|
44469
|
+
label: "Inception ResNet V1"
|
|
44470
|
+
}
|
|
44471
|
+
]
|
|
44472
|
+
}, {
|
|
44473
|
+
stepId: "clip-embedding",
|
|
44474
|
+
label: "Semantic search model",
|
|
44475
|
+
defaultModelId: "mobileclip-s1",
|
|
44476
|
+
indexName: "the object semantic-search index",
|
|
44477
|
+
options: [{
|
|
44478
|
+
id: "mobileclip-s1",
|
|
44479
|
+
label: "MobileCLIP S1"
|
|
44480
|
+
}, {
|
|
44481
|
+
id: "mobileclip-s2",
|
|
44482
|
+
label: "MobileCLIP S2"
|
|
44483
|
+
}]
|
|
44484
|
+
}];
|
|
44485
|
+
/**
|
|
44486
|
+
* Store identity of the cluster row inside `pipeline-orchestrator`'s GLOBAL
|
|
44487
|
+
* (cluster-wide) settings — the same owner, and for the same reason, as the
|
|
44488
|
+
* detail-crop convention: hub-resident and neutral between the addons that
|
|
44489
|
+
* read it.
|
|
44490
|
+
*/
|
|
44491
|
+
var CLUSTER_MODEL_SECTION_ID = "cluster-step-models";
|
|
44492
|
+
/**
|
|
44493
|
+
* The settings key holding one step's cluster model choice.
|
|
44494
|
+
*
|
|
44495
|
+
* Step-qualified so the keys stay unique across the addon's whole schema, which
|
|
44496
|
+
* is what lets {@link pickClusterStepModels} walk every section instead of
|
|
44497
|
+
* trusting the section id.
|
|
44498
|
+
*/
|
|
44499
|
+
function clusterModelSettingKey(stepId) {
|
|
44500
|
+
return `clusterModel:${stepId}`;
|
|
44501
|
+
}
|
|
44502
|
+
/** True when this step's model is a cluster-wide choice rather than a per-node one. */
|
|
44503
|
+
function isClusterScopedStep(stepId) {
|
|
44504
|
+
return CLUSTER_MODEL_SCOPED_STEPS.some((s) => s.stepId === stepId);
|
|
44505
|
+
}
|
|
44506
|
+
/** The cluster row when nobody has configured one — today's catalog defaults. */
|
|
44507
|
+
var DEFAULT_CLUSTER_STEP_MODELS = Object.freeze(Object.fromEntries(CLUSTER_MODEL_SCOPED_STEPS.map((s) => [s.stepId, s.defaultModelId])));
|
|
44508
|
+
/** A stored choice is a non-empty model id, or it is not a choice. */
|
|
44509
|
+
var ChosenModelIdSchema = zod.z.string().min(1);
|
|
44510
|
+
/**
|
|
44511
|
+
* Narrow a FLAT settings record to the cluster row.
|
|
44512
|
+
*
|
|
44513
|
+
* Per-FIELD fallback, deliberately (same rule as `readDetailCropConvention`): a
|
|
44514
|
+
* junk face model must not also discard a valid clip model. An absent, empty or
|
|
44515
|
+
* non-string value resolves to the step's catalog default — the historical
|
|
44516
|
+
* behaviour — never to a blank id, because a blank id downstream becomes
|
|
44517
|
+
* "substitute the format default", which is precisely the substitution this
|
|
44518
|
+
* scope exists to forbid.
|
|
44519
|
+
*/
|
|
44520
|
+
function readClusterStepModels(config) {
|
|
44521
|
+
const out = {};
|
|
44522
|
+
for (const step of CLUSTER_MODEL_SCOPED_STEPS) {
|
|
44523
|
+
const parsed = ChosenModelIdSchema.safeParse(config[clusterModelSettingKey(step.stepId)]);
|
|
44524
|
+
out[step.stepId] = parsed.success ? parsed.data : step.defaultModelId;
|
|
44525
|
+
}
|
|
44526
|
+
return out;
|
|
44527
|
+
}
|
|
44528
|
+
function isHydratedField$2(entry) {
|
|
44529
|
+
return typeof entry === "object" && entry !== null && "key" in entry;
|
|
44530
|
+
}
|
|
44531
|
+
/**
|
|
44532
|
+
* Extract the cluster row from an `addon-settings.getGlobalSettings` payload.
|
|
44533
|
+
*
|
|
44534
|
+
* Walks EVERY section rather than looking inside {@link CLUSTER_MODEL_SECTION_ID}
|
|
44535
|
+
* alone: the keys are unique across the addon's schema, and a section rename
|
|
44536
|
+
* must not silently revert the whole cluster to the defaults. A `null` payload
|
|
44537
|
+
* (addon mid-boot) is the defaults.
|
|
44538
|
+
*/
|
|
44539
|
+
function pickClusterStepModels(view) {
|
|
44540
|
+
if (view === null) return DEFAULT_CLUSTER_STEP_MODELS;
|
|
44541
|
+
const flat = {};
|
|
44542
|
+
const wanted = new Set(CLUSTER_MODEL_SCOPED_STEPS.map((s) => clusterModelSettingKey(s.stepId)));
|
|
44543
|
+
for (const section of view.sections) for (const entry of section.fields) {
|
|
44544
|
+
if (!isHydratedField$2(entry) || typeof entry.key !== "string") continue;
|
|
44545
|
+
if (wanted.has(entry.key)) flat[entry.key] = entry.value;
|
|
44546
|
+
}
|
|
44547
|
+
return readClusterStepModels(flat);
|
|
44548
|
+
}
|
|
44549
|
+
/**
|
|
44550
|
+
* The cluster model for `stepId`, or `null` when the step is node-scoped.
|
|
44551
|
+
*
|
|
44552
|
+
* `null` is the signal to LEAVE THE CALLER'S RESOLUTION ALONE — it is not "no
|
|
44553
|
+
* model". Returning a default here for a node-scoped step would quietly
|
|
44554
|
+
* override every per-(node,device) selection in the fleet.
|
|
44555
|
+
*/
|
|
44556
|
+
function resolveClusterStepModelId(stepId, models) {
|
|
44557
|
+
const step = CLUSTER_MODEL_SCOPED_STEPS.find((s) => s.stepId === stepId);
|
|
44558
|
+
if (step === void 0) return null;
|
|
44559
|
+
const chosen = models[stepId];
|
|
44560
|
+
return chosen !== void 0 && chosen !== "" ? chosen : step.defaultModelId;
|
|
44561
|
+
}
|
|
44562
|
+
//#endregion
|
|
44337
44563
|
//#region src/pipeline/detail-crop.ts
|
|
44338
44564
|
/**
|
|
44339
44565
|
* THE detail-crop convention — the single derivation of the rectangle a
|
|
@@ -44448,6 +44674,30 @@ function pickDetailCropConvention(view) {
|
|
|
44448
44674
|
}
|
|
44449
44675
|
return readDetailCropConvention(flat);
|
|
44450
44676
|
}
|
|
44677
|
+
/**
|
|
44678
|
+
* The normalised box that means "the image IS the subject".
|
|
44679
|
+
*
|
|
44680
|
+
* Used when the stored pixels are ALREADY the model's input — the 112×112
|
|
44681
|
+
* aligned face template a gallery sample carries. There is no rectangle left to
|
|
44682
|
+
* choose, and the convention must not choose one: re-detecting and re-aligning
|
|
44683
|
+
* over a template applies a SECOND warp, passes every gate, and produces a
|
|
44684
|
+
* plausible useless vector (session 2026-08-20 §3).
|
|
44685
|
+
*
|
|
44686
|
+
* Sending it as the whole frame with this box is exact rather than merely
|
|
44687
|
+
* convenient, and the reason is a property of {@link deriveDetailCropRect}, not
|
|
44688
|
+
* a coincidence: padding a full-frame box can only push OUTSIDE the frame, and
|
|
44689
|
+
* both edge modes bring it straight back — unsquared truncates, squared cannot
|
|
44690
|
+
* exceed the frame's short side and then slides inside. So for a SQUARE image
|
|
44691
|
+
* the derivation is the identity under every convention value, and an operator
|
|
44692
|
+
* changing the crop margin cannot silently re-cut an enrolled template.
|
|
44693
|
+
* `face-reembed-pass.spec.ts` asserts that identity against the real function.
|
|
44694
|
+
*/
|
|
44695
|
+
var FULL_IMAGE_BBOX = Object.freeze({
|
|
44696
|
+
x: 0,
|
|
44697
|
+
y: 0,
|
|
44698
|
+
w: 1,
|
|
44699
|
+
h: 1
|
|
44700
|
+
});
|
|
44451
44701
|
/** Slider bounds for the operator-facing padding knob (orchestrator settings UI). */
|
|
44452
44702
|
var DETAIL_CROP_PADDING_FIELD = {
|
|
44453
44703
|
min: 0,
|
|
@@ -46782,6 +47032,8 @@ exports.CAPABILITY_ROUTER_KEYS = CAPABILITY_ROUTER_KEYS;
|
|
|
46782
47032
|
exports.CAP_NAMES_WITH_STATUS = CAP_NAMES_WITH_STATUS;
|
|
46783
47033
|
exports.CAP_NODE_PIN_CONTEXT_KEY = require_sleep.CAP_NODE_PIN_CONTEXT_KEY;
|
|
46784
47034
|
exports.CAP_PROVIDER_KIND_MAP = CAP_PROVIDER_KIND_MAP;
|
|
47035
|
+
exports.CLUSTER_MODEL_SCOPED_STEPS = CLUSTER_MODEL_SCOPED_STEPS;
|
|
47036
|
+
exports.CLUSTER_MODEL_SECTION_ID = CLUSTER_MODEL_SECTION_ID;
|
|
46785
47037
|
exports.COCO_80_LABELS = COCO_80_LABELS;
|
|
46786
47038
|
exports.COCO_TO_MACRO = COCO_TO_MACRO;
|
|
46787
47039
|
exports.CONNECTION_TEST_TIMEOUT_MS = CONNECTION_TEST_TIMEOUT_MS;
|
|
@@ -46869,6 +47121,7 @@ exports.DECLARED_DEVICE_SWEEP_LIMIT = DECLARED_DEVICE_SWEEP_LIMIT;
|
|
|
46869
47121
|
exports.DECLARED_INTEGRATION_FIXED_KEY = DECLARED_INTEGRATION_FIXED_KEY;
|
|
46870
47122
|
exports.DEFAULT_ADDON_PLACEMENT = DEFAULT_ADDON_PLACEMENT;
|
|
46871
47123
|
exports.DEFAULT_AUDIO_ANALYZER_CONFIG = DEFAULT_AUDIO_ANALYZER_CONFIG;
|
|
47124
|
+
exports.DEFAULT_CLUSTER_STEP_MODELS = DEFAULT_CLUSTER_STEP_MODELS;
|
|
46872
47125
|
exports.DEFAULT_DECODER_HWACCEL_CONFIG = DEFAULT_DECODER_HWACCEL_CONFIG;
|
|
46873
47126
|
exports.DEFAULT_DETAIL_CROP_CONVENTION = DEFAULT_DETAIL_CROP_CONVENTION;
|
|
46874
47127
|
exports.DEFAULT_EVENTS_BAND_BUFFER_SEC = DEFAULT_EVENTS_BAND_BUFFER_SEC;
|
|
@@ -46987,6 +47240,7 @@ exports.ExpressionGlobalBindingSchema = ExpressionGlobalBindingSchema;
|
|
|
46987
47240
|
exports.ExpressionLiteralBindingSchema = ExpressionLiteralBindingSchema;
|
|
46988
47241
|
exports.ExpressionParseError = ExpressionParseError;
|
|
46989
47242
|
exports.ExpressionSourceSchema = ExpressionSourceSchema;
|
|
47243
|
+
exports.FULL_IMAGE_BBOX = FULL_IMAGE_BBOX;
|
|
46990
47244
|
exports.FanControlStatusSchema = FanControlStatusSchema;
|
|
46991
47245
|
exports.FanDirectionSchema = FanDirectionSchema;
|
|
46992
47246
|
exports.FeatureManifestSchema = FeatureManifestSchema;
|
|
@@ -47645,6 +47899,7 @@ exports.classifyBearerPrincipal = classifyBearerPrincipal;
|
|
|
47645
47899
|
exports.classifyStream = classifyStream;
|
|
47646
47900
|
exports.classifyStreams = classifyStreams;
|
|
47647
47901
|
exports.climateControlCapability = climateControlCapability;
|
|
47902
|
+
exports.clusterModelSettingKey = clusterModelSettingKey;
|
|
47648
47903
|
exports.collectHydratedFieldEntries = require_sleep.collectHydratedFieldEntries;
|
|
47649
47904
|
exports.collectHydratedFieldValues = require_sleep.collectHydratedFieldValues;
|
|
47650
47905
|
exports.colorCapability = colorCapability;
|
|
@@ -47763,6 +48018,7 @@ exports.isAudioLabelSelected = isAudioLabelSelected;
|
|
|
47763
48018
|
exports.isAudioRule = isAudioRule;
|
|
47764
48019
|
exports.isBaseConditionKey = isBaseConditionKey;
|
|
47765
48020
|
exports.isBatteryPresenceFault = isBatteryPresenceFault;
|
|
48021
|
+
exports.isClusterScopedStep = isClusterScopedStep;
|
|
47766
48022
|
exports.isCollectionArrayMethod = isCollectionArrayMethod;
|
|
47767
48023
|
exports.isDeployableToAgent = isDeployableToAgent;
|
|
47768
48024
|
exports.isDetectionMacroClass = isDetectionMacroClass;
|
|
@@ -47846,6 +48102,7 @@ exports.parseStreamParamsFormPatch = parseStreamParamsFormPatch;
|
|
|
47846
48102
|
exports.patchAudio = patchAudio;
|
|
47847
48103
|
exports.petFeederCapability = petFeederCapability;
|
|
47848
48104
|
exports.pickAccessoryControl = pickAccessoryControl;
|
|
48105
|
+
exports.pickClusterStepModels = pickClusterStepModels;
|
|
47849
48106
|
exports.pickDetailCropConvention = pickDetailCropConvention;
|
|
47850
48107
|
exports.pickNativeLeaseOverride = pickNativeLeaseOverride;
|
|
47851
48108
|
exports.pickPreferredRtspEntry = pickPreferredRtspEntry;
|
|
@@ -47869,6 +48126,7 @@ exports.procedureAuthKey = procedureAuthKey;
|
|
|
47869
48126
|
exports.ptzAutotrackCapability = ptzAutotrackCapability;
|
|
47870
48127
|
exports.ptzCapability = ptzCapability;
|
|
47871
48128
|
exports.pythonScriptForBackend = pythonScriptForBackend;
|
|
48129
|
+
exports.readClusterStepModels = readClusterStepModels;
|
|
47872
48130
|
exports.readDetailCropConvention = readDetailCropConvention;
|
|
47873
48131
|
exports.readDeviceStateFrom = readDeviceStateFrom;
|
|
47874
48132
|
exports.readNativeLeaseOverride = readNativeLeaseOverride;
|
|
@@ -47886,6 +48144,7 @@ exports.resolveAddonGroup = resolveAddonGroup;
|
|
|
47886
48144
|
exports.resolveAddonPlacement = resolveAddonPlacement;
|
|
47887
48145
|
exports.resolveAddonRuntime = resolveAddonRuntime;
|
|
47888
48146
|
exports.resolveCapMount = require_sleep.resolveCapMount;
|
|
48147
|
+
exports.resolveClusterStepModelId = resolveClusterStepModelId;
|
|
47889
48148
|
exports.resolveDetectionRuntime = resolveDetectionRuntime;
|
|
47890
48149
|
exports.resolveDeviceControlKind = resolveDeviceControlKind;
|
|
47891
48150
|
exports.resolveDeviceProfile = resolveDeviceProfile;
|
package/dist/index.mjs
CHANGED
|
@@ -1529,12 +1529,25 @@ var RecordingBandSchema = z.object({
|
|
|
1529
1529
|
* segment is ever finalized and the camera records nothing anyway. At the 10 s
|
|
1530
1530
|
* default segment length, 30 s leaves room for two full segments. `preBufferSec`
|
|
1531
1531
|
* is retroactive only — it costs nothing at record time, it merely keeps
|
|
1532
|
-
* already-written segments
|
|
1532
|
+
* already-written segments.
|
|
1533
1533
|
*
|
|
1534
|
-
*
|
|
1534
|
+
* ## Why `preBufferSec` is 15 and not one segment length
|
|
1535
|
+
*
|
|
1536
|
+
* It has to cover the broker's RECORDING pre-roll, which is media handed to the
|
|
1537
|
+
* writer from BEFORE the trigger (D192/D193). If this bound were narrower, the
|
|
1538
|
+
* keep gate would delete the very seconds the ring just supplied — two
|
|
1539
|
+
* authorities disagreeing about the same footage, which is the failure D191 was
|
|
1540
|
+
* written against. It is therefore set to `RECORDING_PRE_ROLL_MAX_MS` (15 s),
|
|
1541
|
+
* the widest window the broker can be configured to serve, so an operator
|
|
1542
|
+
* raising the cluster pre-roll can never walk past the gate silently. The
|
|
1543
|
+
* addon-side guard is
|
|
1544
|
+
* `packages/addon-pipeline/src/recorder/addon/__tests__/band-decision.spec.ts`.
|
|
1545
|
+
*
|
|
1546
|
+
* An EXPLICIT `0` is left alone: that is an operator statement, not an omission,
|
|
1547
|
+
* and it is excluded from that invariant by name.
|
|
1535
1548
|
*/
|
|
1536
1549
|
var DEFAULT_EVENTS_BAND_BUFFER_SEC = {
|
|
1537
|
-
preBufferSec:
|
|
1550
|
+
preBufferSec: 15,
|
|
1538
1551
|
postBufferSec: 30
|
|
1539
1552
|
};
|
|
1540
1553
|
/**
|
|
@@ -4222,11 +4235,15 @@ export default function block(ctx: AddonContext) {
|
|
|
4222
4235
|
): Promise<void> {
|
|
4223
4236
|
const resolved: Record<string, unknown> = {}
|
|
4224
4237
|
for (const [k, v] of Object.entries(args)) resolved[k] = substitute(v, vars)
|
|
4225
|
-
const client = (ctx.api
|
|
4226
|
-
|
|
4238
|
+
const client: unknown = Reflect.get(ctx.api, capToRouterKey(cap))
|
|
4239
|
+
const proc: unknown =
|
|
4240
|
+
typeof client === 'object' && client !== null ? Reflect.get(client, method) : undefined
|
|
4241
|
+
const mutate: unknown =
|
|
4242
|
+
typeof proc === 'object' && proc !== null ? Reflect.get(proc, 'mutate') : undefined
|
|
4243
|
+
if (typeof mutate !== 'function') {
|
|
4227
4244
|
throw new Error('no such device method: ' + cap + '.' + method)
|
|
4228
4245
|
}
|
|
4229
|
-
await
|
|
4246
|
+
await mutate({ ...resolved, deviceId })
|
|
4230
4247
|
}
|
|
4231
4248
|
|
|
4232
4249
|
async function evaluateConditions(): Promise<boolean> {
|
|
@@ -14687,7 +14704,7 @@ var TrackEnvelopeSchema = z.object({
|
|
|
14687
14704
|
* `snapshots[]` references — megabytes across a page of tracks. `slim`
|
|
14688
14705
|
* keeps every scalar the list surfaces actually render (ids, class(es),
|
|
14689
14706
|
* label / audioLabels / importance enrichment, firstSeen/lastSeen, state,
|
|
14690
|
-
* zonesVisited, bestEventId, envelope, hasFace, hasRider) and returns `positions` /
|
|
14707
|
+
* zonesVisited, bestEventId, envelope, hasFace, hasEmbeddedFace, hasRider) and returns `positions` /
|
|
14691
14708
|
* `snapshots` as EMPTY arrays — detail views re-fetch the full row via
|
|
14692
14709
|
* `getTrack`. Mirrors the event-store `projection` convention
|
|
14693
14710
|
* (`getObjectEvents` et al.).
|
|
@@ -14998,6 +15015,35 @@ var TrackSchema = z.object({
|
|
|
14998
15015
|
*/
|
|
14999
15016
|
hasFace: z.boolean().optional(),
|
|
15000
15017
|
/**
|
|
15018
|
+
* This track has a face row IN THE GALLERY: a crop **and** an embedding — a
|
|
15019
|
+
* face an operator could ASSIGN to an identity.
|
|
15020
|
+
*
|
|
15021
|
+
* The STRICT twin of {@link hasFace}, and the pair only earns its keep
|
|
15022
|
+
* because the two disagree. `hasFace` is stamped at the TOP of the face
|
|
15023
|
+
* branch, before every gate, and means no more than "a face detector produced
|
|
15024
|
+
* a face detail". This one is stamped at the single moment the gallery row
|
|
15025
|
+
* LANDS — after `FaceRecognizer.onTrackEnd` successfully persists it, i.e.
|
|
15026
|
+
* past the embedding-magnitude verdict, the `minFacePx` detection gate, the
|
|
15027
|
+
* candidate gate, the imageless-track drop (no crop was ever captured) and
|
|
15028
|
+
* the crop-store drop. Everything between the detector and that insert can
|
|
15029
|
+
* legitimately refuse the face, so a flag written any earlier promises the
|
|
15030
|
+
* operator something to assign and delivers nothing.
|
|
15031
|
+
*
|
|
15032
|
+
* **Independent of recognition.** A face collected but never auto-matched is
|
|
15033
|
+
* still assignable — it is in fact the face an operator most wants to reach —
|
|
15034
|
+
* so this is NOT gated on `recognizedIdentityId`. Recognition lands in
|
|
15035
|
+
* `subLabel`; this says only that the raw material exists.
|
|
15036
|
+
*
|
|
15037
|
+
* **Set once, never cleared.** A track that produced a gallery row produced
|
|
15038
|
+
* one; deleting the row later is the gallery's business, not this flag's.
|
|
15039
|
+
*
|
|
15040
|
+
* **Absent ≠ false**, the same rule as {@link hasFace}: every row written
|
|
15041
|
+
* before the column omits it, and so does every server that predates the
|
|
15042
|
+
* field. A consumer must test `=== true` and render nothing otherwise —
|
|
15043
|
+
* never infer "no assignable face".
|
|
15044
|
+
*/
|
|
15045
|
+
hasEmbeddedFace: z.boolean().optional(),
|
|
15046
|
+
/**
|
|
15001
15047
|
* This subject CONTAINS a folded rider — a person the rider-pairing step
|
|
15002
15048
|
* ([D34](../decisions/adr-0034.md)) removed from the frame BEFORE the tracker,
|
|
15003
15049
|
* so the passage is tracked once and as a VEHICLE.
|
|
@@ -16964,6 +17010,26 @@ var DetailResultSchema = z.object({
|
|
|
16964
17010
|
* the consuming gate treats as accept — never as reject.
|
|
16965
17011
|
*/
|
|
16966
17012
|
embeddingMagnitude: z.number().optional(),
|
|
17013
|
+
/**
|
|
17014
|
+
* Model that produced `embedding` — the SAME contract `labelModelId` has for
|
|
17015
|
+
* `label`, and for the same reason: the producing node is the only side that
|
|
17016
|
+
* knows which model actually ran, and re-deriving it downstream is exactly
|
|
17017
|
+
* the inference this model exists to forbid.
|
|
17018
|
+
*
|
|
17019
|
+
* Additive and optional, so a runner that predates it degrades to
|
|
17020
|
+
* "unmeasurable" rather than to a wrong answer — the consumer falls back to
|
|
17021
|
+
* its previous assumption instead of refusing.
|
|
17022
|
+
*
|
|
17023
|
+
* Its absence was not cosmetic. `FaceRecognizer` needs the probe's model id
|
|
17024
|
+
* to use `face-matcher`'s same-model gate (`sample.modelId !== probe.modelId`);
|
|
17025
|
+
* with nothing on the wire it took the id from the GALLERY, so the gate
|
|
17026
|
+
* compared the gallery against itself and could never fire. That turned the
|
|
17027
|
+
* one guard protecting the face feature space into a tautology, and it is
|
|
17028
|
+
* why swapping `face-embedding`'s model would NOT have stranded the enrolled
|
|
17029
|
+
* gallery as the catalog comment predicts — it would have scored the new
|
|
17030
|
+
* model's vectors against the old model's samples in one cosine space.
|
|
17031
|
+
*/
|
|
17032
|
+
embeddingModelId: z.string().optional(),
|
|
16967
17033
|
label: z.string().optional(),
|
|
16968
17034
|
/**
|
|
16969
17035
|
* The tier `label` occupies, copied VERBATIM from the producing step's
|
|
@@ -44326,6 +44392,166 @@ function readTimelapseGeneratedAt(rule, deviceId) {
|
|
|
44326
44392
|
return rule.lastGeneratedAt ?? 0;
|
|
44327
44393
|
}
|
|
44328
44394
|
//#endregion
|
|
44395
|
+
//#region src/pipeline/cluster-model-scope.ts
|
|
44396
|
+
/**
|
|
44397
|
+
* A model choice has a SCOPE, and a scope change has a workflow.
|
|
44398
|
+
*
|
|
44399
|
+
* ## The two scopes
|
|
44400
|
+
*
|
|
44401
|
+
* Almost every pipeline step's model is a **node** question: which build runs
|
|
44402
|
+
* fastest on THIS accelerator. Two nodes may legitimately answer differently —
|
|
44403
|
+
* a Coral runs the tflite SSD, a Mac runs the coreml YOLO — because the answers
|
|
44404
|
+
* are compared against nothing. They produce boxes, and a box is a box.
|
|
44405
|
+
*
|
|
44406
|
+
* Two steps are not like that. `face-embedding` and `clip-embedding` produce
|
|
44407
|
+
* **vectors that land in ONE shared index** (`identity_samples`,
|
|
44408
|
+
* `vec_object_clip`) and are ranked against each other by cosine similarity.
|
|
44409
|
+
* Cosine similarity between two encoders is not a weak signal, it is a
|
|
44410
|
+
* meaningless number — and nothing inside a vector can tell you it happened.
|
|
44411
|
+
* So for those two steps the model is a **cluster** question with exactly one
|
|
44412
|
+
* answer, stored in exactly one row.
|
|
44413
|
+
*
|
|
44414
|
+
* That is the same argument [D52](../../../../docs/decisions/adr-0052.md) makes
|
|
44415
|
+
* for the crop convention (`detail-crop.ts`), one level up: the crop decides
|
|
44416
|
+
* WHAT pixels the encoder sees, this decides WHICH encoder sees them. Both are
|
|
44417
|
+
* cluster-wide for the same reason and neither may become per-node.
|
|
44418
|
+
*
|
|
44419
|
+
* ## Why the registry lives here and not in the step catalog
|
|
44420
|
+
*
|
|
44421
|
+
* The scope itself is declared on the step, in
|
|
44422
|
+
* `detection-pipeline/registry/step-definitions.ts` (`StepDefinition.modelScope`)
|
|
44423
|
+
* — that is where a new step declares what kind of choice its model is. But the
|
|
44424
|
+
* catalog lives inside `addon-pipeline`, and three packages that must NOT
|
|
44425
|
+
* import an addon need to know the set: the orchestrator (which renders and
|
|
44426
|
+
* stores the row), post-analysis (which pins the row for a re-embed pass) and
|
|
44427
|
+
* admin-ui (which mirrors it). So the set is mirrored here, and
|
|
44428
|
+
* `scripts/check-cluster-model-scope.ts` fails the build when the two disagree.
|
|
44429
|
+
* A hand-copied key that stops matching is exactly how a setting silently stops
|
|
44430
|
+
* arriving while both sides still look correct.
|
|
44431
|
+
*
|
|
44432
|
+
* ## The defaults ARE today's behaviour
|
|
44433
|
+
*
|
|
44434
|
+
* {@link DEFAULT_CLUSTER_STEP_MODELS} reproduces the catalog `defaultModelId`
|
|
44435
|
+
* of both steps. Declaring the scope therefore changes nothing on the day it
|
|
44436
|
+
* ships: the cluster row starts out saying what every node was already doing.
|
|
44437
|
+
* Changing it is legitimate — that is what the knob is for — but it invalidates
|
|
44438
|
+
* the stored vectors of that surface, and must be followed by a re-embed pass
|
|
44439
|
+
* (`face-reembed-pass.ts`, `embedding-rebuild.ts`).
|
|
44440
|
+
*/
|
|
44441
|
+
/**
|
|
44442
|
+
* The cluster-scoped steps. Mirrored from the catalog's `modelScope: 'cluster'`
|
|
44443
|
+
* declarations and guarded by `scripts/check-cluster-model-scope.ts`.
|
|
44444
|
+
*/
|
|
44445
|
+
var CLUSTER_MODEL_SCOPED_STEPS = [{
|
|
44446
|
+
stepId: "face-embedding",
|
|
44447
|
+
label: "Face recognition model",
|
|
44448
|
+
defaultModelId: "arcface-r100",
|
|
44449
|
+
indexName: "the enrolled face gallery",
|
|
44450
|
+
options: [
|
|
44451
|
+
{
|
|
44452
|
+
id: "arcface-r100",
|
|
44453
|
+
label: "ArcFace (ResNet34)"
|
|
44454
|
+
},
|
|
44455
|
+
{
|
|
44456
|
+
id: "auraface-r100",
|
|
44457
|
+
label: "AuraFace R100"
|
|
44458
|
+
},
|
|
44459
|
+
{
|
|
44460
|
+
id: "inception-resnet-v1",
|
|
44461
|
+
label: "Inception ResNet V1"
|
|
44462
|
+
}
|
|
44463
|
+
]
|
|
44464
|
+
}, {
|
|
44465
|
+
stepId: "clip-embedding",
|
|
44466
|
+
label: "Semantic search model",
|
|
44467
|
+
defaultModelId: "mobileclip-s1",
|
|
44468
|
+
indexName: "the object semantic-search index",
|
|
44469
|
+
options: [{
|
|
44470
|
+
id: "mobileclip-s1",
|
|
44471
|
+
label: "MobileCLIP S1"
|
|
44472
|
+
}, {
|
|
44473
|
+
id: "mobileclip-s2",
|
|
44474
|
+
label: "MobileCLIP S2"
|
|
44475
|
+
}]
|
|
44476
|
+
}];
|
|
44477
|
+
/**
|
|
44478
|
+
* Store identity of the cluster row inside `pipeline-orchestrator`'s GLOBAL
|
|
44479
|
+
* (cluster-wide) settings — the same owner, and for the same reason, as the
|
|
44480
|
+
* detail-crop convention: hub-resident and neutral between the addons that
|
|
44481
|
+
* read it.
|
|
44482
|
+
*/
|
|
44483
|
+
var CLUSTER_MODEL_SECTION_ID = "cluster-step-models";
|
|
44484
|
+
/**
|
|
44485
|
+
* The settings key holding one step's cluster model choice.
|
|
44486
|
+
*
|
|
44487
|
+
* Step-qualified so the keys stay unique across the addon's whole schema, which
|
|
44488
|
+
* is what lets {@link pickClusterStepModels} walk every section instead of
|
|
44489
|
+
* trusting the section id.
|
|
44490
|
+
*/
|
|
44491
|
+
function clusterModelSettingKey(stepId) {
|
|
44492
|
+
return `clusterModel:${stepId}`;
|
|
44493
|
+
}
|
|
44494
|
+
/** True when this step's model is a cluster-wide choice rather than a per-node one. */
|
|
44495
|
+
function isClusterScopedStep(stepId) {
|
|
44496
|
+
return CLUSTER_MODEL_SCOPED_STEPS.some((s) => s.stepId === stepId);
|
|
44497
|
+
}
|
|
44498
|
+
/** The cluster row when nobody has configured one — today's catalog defaults. */
|
|
44499
|
+
var DEFAULT_CLUSTER_STEP_MODELS = Object.freeze(Object.fromEntries(CLUSTER_MODEL_SCOPED_STEPS.map((s) => [s.stepId, s.defaultModelId])));
|
|
44500
|
+
/** A stored choice is a non-empty model id, or it is not a choice. */
|
|
44501
|
+
var ChosenModelIdSchema = z.string().min(1);
|
|
44502
|
+
/**
|
|
44503
|
+
* Narrow a FLAT settings record to the cluster row.
|
|
44504
|
+
*
|
|
44505
|
+
* Per-FIELD fallback, deliberately (same rule as `readDetailCropConvention`): a
|
|
44506
|
+
* junk face model must not also discard a valid clip model. An absent, empty or
|
|
44507
|
+
* non-string value resolves to the step's catalog default — the historical
|
|
44508
|
+
* behaviour — never to a blank id, because a blank id downstream becomes
|
|
44509
|
+
* "substitute the format default", which is precisely the substitution this
|
|
44510
|
+
* scope exists to forbid.
|
|
44511
|
+
*/
|
|
44512
|
+
function readClusterStepModels(config) {
|
|
44513
|
+
const out = {};
|
|
44514
|
+
for (const step of CLUSTER_MODEL_SCOPED_STEPS) {
|
|
44515
|
+
const parsed = ChosenModelIdSchema.safeParse(config[clusterModelSettingKey(step.stepId)]);
|
|
44516
|
+
out[step.stepId] = parsed.success ? parsed.data : step.defaultModelId;
|
|
44517
|
+
}
|
|
44518
|
+
return out;
|
|
44519
|
+
}
|
|
44520
|
+
function isHydratedField$2(entry) {
|
|
44521
|
+
return typeof entry === "object" && entry !== null && "key" in entry;
|
|
44522
|
+
}
|
|
44523
|
+
/**
|
|
44524
|
+
* Extract the cluster row from an `addon-settings.getGlobalSettings` payload.
|
|
44525
|
+
*
|
|
44526
|
+
* Walks EVERY section rather than looking inside {@link CLUSTER_MODEL_SECTION_ID}
|
|
44527
|
+
* alone: the keys are unique across the addon's schema, and a section rename
|
|
44528
|
+
* must not silently revert the whole cluster to the defaults. A `null` payload
|
|
44529
|
+
* (addon mid-boot) is the defaults.
|
|
44530
|
+
*/
|
|
44531
|
+
function pickClusterStepModels(view) {
|
|
44532
|
+
if (view === null) return DEFAULT_CLUSTER_STEP_MODELS;
|
|
44533
|
+
const flat = {};
|
|
44534
|
+
const wanted = new Set(CLUSTER_MODEL_SCOPED_STEPS.map((s) => clusterModelSettingKey(s.stepId)));
|
|
44535
|
+
for (const section of view.sections) for (const entry of section.fields) {
|
|
44536
|
+
if (!isHydratedField$2(entry) || typeof entry.key !== "string") continue;
|
|
44537
|
+
if (wanted.has(entry.key)) flat[entry.key] = entry.value;
|
|
44538
|
+
}
|
|
44539
|
+
return readClusterStepModels(flat);
|
|
44540
|
+
}
|
|
44541
|
+
/**
|
|
44542
|
+
* The cluster model for `stepId`, or `null` when the step is node-scoped.
|
|
44543
|
+
*
|
|
44544
|
+
* `null` is the signal to LEAVE THE CALLER'S RESOLUTION ALONE — it is not "no
|
|
44545
|
+
* model". Returning a default here for a node-scoped step would quietly
|
|
44546
|
+
* override every per-(node,device) selection in the fleet.
|
|
44547
|
+
*/
|
|
44548
|
+
function resolveClusterStepModelId(stepId, models) {
|
|
44549
|
+
const step = CLUSTER_MODEL_SCOPED_STEPS.find((s) => s.stepId === stepId);
|
|
44550
|
+
if (step === void 0) return null;
|
|
44551
|
+
const chosen = models[stepId];
|
|
44552
|
+
return chosen !== void 0 && chosen !== "" ? chosen : step.defaultModelId;
|
|
44553
|
+
}
|
|
44554
|
+
//#endregion
|
|
44329
44555
|
//#region src/pipeline/detail-crop.ts
|
|
44330
44556
|
/**
|
|
44331
44557
|
* THE detail-crop convention — the single derivation of the rectangle a
|
|
@@ -44440,6 +44666,30 @@ function pickDetailCropConvention(view) {
|
|
|
44440
44666
|
}
|
|
44441
44667
|
return readDetailCropConvention(flat);
|
|
44442
44668
|
}
|
|
44669
|
+
/**
|
|
44670
|
+
* The normalised box that means "the image IS the subject".
|
|
44671
|
+
*
|
|
44672
|
+
* Used when the stored pixels are ALREADY the model's input — the 112×112
|
|
44673
|
+
* aligned face template a gallery sample carries. There is no rectangle left to
|
|
44674
|
+
* choose, and the convention must not choose one: re-detecting and re-aligning
|
|
44675
|
+
* over a template applies a SECOND warp, passes every gate, and produces a
|
|
44676
|
+
* plausible useless vector (session 2026-08-20 §3).
|
|
44677
|
+
*
|
|
44678
|
+
* Sending it as the whole frame with this box is exact rather than merely
|
|
44679
|
+
* convenient, and the reason is a property of {@link deriveDetailCropRect}, not
|
|
44680
|
+
* a coincidence: padding a full-frame box can only push OUTSIDE the frame, and
|
|
44681
|
+
* both edge modes bring it straight back — unsquared truncates, squared cannot
|
|
44682
|
+
* exceed the frame's short side and then slides inside. So for a SQUARE image
|
|
44683
|
+
* the derivation is the identity under every convention value, and an operator
|
|
44684
|
+
* changing the crop margin cannot silently re-cut an enrolled template.
|
|
44685
|
+
* `face-reembed-pass.spec.ts` asserts that identity against the real function.
|
|
44686
|
+
*/
|
|
44687
|
+
var FULL_IMAGE_BBOX = Object.freeze({
|
|
44688
|
+
x: 0,
|
|
44689
|
+
y: 0,
|
|
44690
|
+
w: 1,
|
|
44691
|
+
h: 1
|
|
44692
|
+
});
|
|
44443
44693
|
/** Slider bounds for the operator-facing padding knob (orchestrator settings UI). */
|
|
44444
44694
|
var DETAIL_CROP_PADDING_FIELD = {
|
|
44445
44695
|
min: 0,
|
|
@@ -46660,4 +46910,4 @@ function enumerateInferenceDevices(hw) {
|
|
|
46660
46910
|
return out;
|
|
46661
46911
|
}
|
|
46662
46912
|
//#endregion
|
|
46663
|
-
export { ACCESSORY_LABEL, ACCESS_ROLES, ALEXA_EGRESS_PROFILE, ALL_CAPABILITY_DEFINITIONS, APPLE_SA_TO_MACRO, AUDIO_ANALYSIS_CAP_NAME, AUDIO_BACKEND_CHOICES, AUDIO_MACRO_LABELS, AUDIO_PRESETS, AccessoriesStatusSchema, AccessoryKind, AddBrokerInputSchema, AddonAutoUpdateSchema, AddonListItemSchema, AddonPageDeclarationSchema, AddonPageInfoSchema, AdoptInputSchema as AdoptionAdoptInputSchema, AdoptResultSchema as AdoptionAdoptResultSchema, AdoptionCandidateResultSchema, AdoptionFilterSchema, GetCandidateInputSchema as AdoptionGetCandidateInputSchema, AdoptionJobSchema, AdoptionJobStateSchema, ListCandidatesInputSchema as AdoptionListCandidatesInputSchema, ListCandidatesOutputSchema as AdoptionListCandidatesOutputSchema, AdoptionOutcomeSchema, ReleaseInputSchema as AdoptionReleaseInputSchema, AdoptionStatusSchema, AgentLoadSummarySchema, AirQualitySensorStatusSchema, AlarmArmModeSchema, AlarmPanelStatusSchema, AlarmStateSchema, AlertSchema, AlertSeveritySchema, AlertSourceSchema, AlertStatusSchema, AmbientLightSensorStatusSchema, ApiKeyRecordSchema, ApiKeySummarySchema, ArchiveEntrySchema, ArchiveManifestSchema, AttachmentMediaTypeSchema, AttachmentSchema, AudioAnalysisResultSchema, AudioAnalysisSettingsSchema, AudioChunkInputSchema, AudioClassSummarySchema, AudioClassificationLabelSchema, AudioClassificationResultSchema, AudioCodecInfoSchema, AudioDecodeSessionConfigSchema, AudioEncodeSchema, AudioEncodeSessionConfigSchema, AudioEncodedChunkSchema, AudioEventSchema, AudioLevelSchema, AudioMetricsHistoryPointSchema, AudioMetricsHistorySchema, AudioMetricsSnapshotSchema, AudioPcmChunkSchema, AuthResultSchema, AutoUpdateSettingsSchema, AutomationActionSchema, AutomationConditionOperatorSchema, AutomationConditionSchema, AutomationControlStatusSchema, AutomationRecipeSchema, AutomationTriggerSchema, AvailableIntegrationTypeSchema, BACKEND_TO_FORMAT, BASE_LIVE_EGRESS_PROFILE, BATTERY_DEVICE_PROFILE, BATTERY_UNREACHABLE_AFTER_MS, BOOT_RECOVERY_BACKOFF_MS, BacklightModeSchema, BackupDestinationInfoSchema, BackupEntrySchema, BaseAddon, BaseDevice, BaseDeviceProvider, BatteryStatusSchema, BinaryStatusSchema, BoundingBoxSchema, BrightnessStatusSchema, AddInputSchema as BrokerAddInputSchema, BrokerAudioClientSchema, BrokerClientsSchema, BrokerConnectionDetailsSchema, BrokerConsumerAttributionSchema, BrokerConsumerKindSchema, BrokerDecodedClientSchema, BrokerEncodedClientSchema, GetStateInputSchema as BrokerGetStateInputSchema, BrokerInfoSchema, BrokerProviderInfoSchema, PublishInputSchema as BrokerPublishInputSchema, RegistryStatusSchema as BrokerRegistryStatusSchema, BrokerRtspClientSchema, BrokerStatsSchema, BrokerStatusEnum, BrokerStatusSchema, SubscribeInputSchema as BrokerSubscribeInputSchema, SubscribeResultSchema as BrokerSubscribeResultSchema, TestConnectionResultSchema as BrokerTestConnectionResultSchema, UnsubscribeInputSchema as BrokerUnsubscribeInputSchema, CAMERA_SWITCH_CATALOG, CAMERA_SWITCH_ORDER, CAM_PROFILE_ORDER, CAPABILITY_NAMES, CAPABILITY_ROUTER_KEYS, CAP_NAMES_WITH_STATUS, CAP_NODE_PIN_CONTEXT_KEY, CAP_PROVIDER_KIND_MAP, COCO_80_LABELS, COCO_TO_MACRO, CONNECTION_TEST_TIMEOUT_MS, CORE_BLOCKS_ADDON_ID, CORE_BLOCK_ADDON_PREFIX, CamProfileSchema, CamStreamDescriptorSchema, CamStreamKindSchema, CamStreamResolutionSchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraCredentialsSchema, CameraCredentialsStatusSchema, CameraDecoderShmSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionStatusSchema, CameraMetricsSchema, CameraMetricsWithDeviceIdSchema, CameraMotionStatusSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusDegradationReasonSchema, CameraStatusDegradationSchema, CameraStatusSchema, CameraStatusStageSchema, CameraStreamSchema, CameraSwitchAuthoritySchema, CameraSwitchGroupSchema, CameraSwitchIdSchema, CameraSwitchSchema, CameraSwitchUnavailableReasonSchema, CandidateQueryFilterSchema, CapScopeSchema, CapabilityBindingsSchema, CarbonMonoxideStatusSchema, ChargingStatus, ClientNetworkStatsSchema, ClimateControlStatusSchema, ClipPlaybackSchema, ClipSchema, ClusterAddonNodeDeploymentSchema, ClusterAddonStatusEntrySchema, CollectionColumnSchema, CollectionIndexSchema, ColorStatusSchema, ConfigEntrySchema, ConfigSectionWithValuesSchema, ConfigTabDeclarationSchema, ConnectionTestDescriptorSchema, ConnectionTestInputSchema, ConnectionTestOutcomeSchema, ConnectivityStatusSchema, ConsumableItemSchema, ConsumablesStatusSchema, ContactStatusSchema, ControlKindSchema, ControlStatusSchema, ConvertArtifactSchema, ConvertResultSchema, ConvertTargetSchema, CoreBlockCompileResultSchema, CoreBlockInputSchema, CoreBlockPlacementSchema, CoreBlockSchema, CoreBlockStatusSchema, CoverStateSchema, CoverStatusSchema, CreateApiKeyInputSchema, CreateApiKeyResultSchema, CreateIntegrationInputSchema, CreateScopedTokenInputSchema, CreateScopedTokenResultSchema, CreateUserInputSchema, CustomActionInputSchema, CustomModelDescriptorSchema, DATAPLANE_SECRET_HEADER, DECLARED_DEVICE_SWEEP_LIMIT, DECLARED_INTEGRATION_FIXED_KEY, DEFAULT_ADDON_PLACEMENT, DEFAULT_AUDIO_ANALYZER_CONFIG, DEFAULT_DECODER_HWACCEL_CONFIG, DEFAULT_DETAIL_CROP_CONVENTION, DEFAULT_EVENTS_BAND_BUFFER_SEC, DEFAULT_EVENT_COLOR, DEFAULT_FEATURES, DEFAULT_NATIVE_LEASE_SETTINGS, DEFAULT_POOL_MEMORY_POLICY, DEFAULT_RECORDING_PROFILES, DEFAULT_RETENTION, DEFAULT_RUNTIME_STATE_DURABILITY, DEFAULT_SCRUB_THUMBNAIL_PRESET, DEFAULT_TIMELAPSE_PREVIEW_TEXT, DETAIL_CROP_PADDING_FIELD, DETAIL_CROP_PADDING_KEY, DETAIL_CROP_SECTION_ID, DETAIL_CROP_SQUARE_KEY, DETECTION_MACRO_CLASSES, DETECTION_PIPELINE_CAP_NAME, DEVICE_BACKEND_TO_FORMAT, DEVICE_CAP_NAMES, DEVICE_PROFILES, DEVICE_SCOPED_CAPS, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATE_READERS, DEVICE_STATUS_METHOD, DEVICE_TYPE_CONTROL_KIND, DEVICE_TYPE_INFO, EngineInfoSchema as DataStoreEngineInfoSchema, DayNightModeSchema, DayNightOptionsSchema, DayNightSettingsPatchSchema, DayNightStatusSchema, DeclaredDevices, DecodedAudioChunkSchema, DecodedFrameSchema, DecoderSessionConfigSchema, DecoderStatsSchema, DeleteIntegrationResultSchema, DetailCropConventionSchema, DetectionSourceSchema, DeviceCodeSeveritySchema, DeviceConfig, DeviceDiscoveryStatusSchema, ExposeInputSchema as DeviceExportExposeInputSchema, DeviceExportStatusSchema, UnexposeInputSchema as DeviceExportUnexposeInputSchema, DeviceFeature, DeviceInfoSchema, DeviceNetworkStatsSchema, DeviceRole, DeviceRuntimeState, DeviceSelectorSchema, DeviceStatusSchema, DeviceType, DiscoveredChildDeviceSchema, DiscoveredChildStatusSchema, DiscoveredDeviceSchema, DiscoveredTargetSchema, DiskReconcileJobSchema, DisposerChain, DoorbellPressEventSchema, DoorbellStatusSchema, EVENTFUL_CAP_NAMES, EVENT_KIND_BY_CAP, EVENT_PAD_MS, EVENT_TAXONOMY, EXPORT_DENSE_MAX_RANGES, EXPRESSION_BUILTINS, EXPRESSION_BUILTIN_NAMES, EXPRESSION_COMPILE_CACHE_CAPACITY, EXPRESSION_IDENTIFIER_RE, EXPRESSION_INJECTED_NOW, EgressEncodeSchema, EgressRateControlSchema, EgressTranscodeRequestSchema, EgressTranscodeSchema, ElementConfigStore, EmbeddingInfoSchema, EmbeddingResultSchema, EncodeProfileSchema, EncodedPacketSchema, EnrichedWidgetMetadataSchema, EnumSensorDateTimeFormatSchema, EnumSensorStatusSchema, EventCategory, EventEmitterStatusSchema, EventFireSchema, EventItemSchema, EventKindCategorySchema, EventKindDescriptorSchema, EventKindIconSchema, EventKindSchema, EventKindsForDeviceSchema, EventMediaArtifactSchema, EventMediaCoverageSchema, EventMediaKindSchema, EventMediaProductionSchema, EventSourceType, ExportBytesSchema, ExportDenseRangeSchema, ExportDenseSchema, ExportDownloadSchema, ExportOptionsSchema, ExportRecordSchema, ExportSetupFieldSchema, ExportSetupSchema, ExportSpeedSchema, ExportStateSchema, ExportTimelapseSchema, ExposedDeviceSchema, ExposureModeSchema, ExpressionBindingSourceSchema, ExpressionEvalError, ExpressionFieldBindingSchema, ExpressionGlobalBindingSchema, ExpressionLiteralBindingSchema, ExpressionParseError, ExpressionSourceSchema, FanControlStatusSchema, FanDirectionSchema, FeatureManifestSchema, FeatureProbeStatusSchema, FloodStatusSchema, Fmp4BoxSplitter, FrameHandleFormatSchema, FrameHandleSchema, FrameInputSchema, GasStatusSchema, GetStreamWithCodecInputSchema, GlobalMetricsSchema, HAP_AUDIO_BASE, HAP_AUDIO_BITRATE_KBPS, HAP_AUDIO_VBV_KBITS, HAP_KEYFRAME_INTERVAL_SEC, HF_BASE_URL, HF_REPO, HWACCEL_OPTIONS, HealthStatusSchema, HfModelResolutionSchema, HistoryPointSchema, HistoryResolutionEnum, HumidifierStatusSchema, HumiditySensorStatusSchema, HvacModeSchema, ImageContractSchema, ImageContractStateSchema, ImageRotateSchema, ImageSettingsOptionsSchema, ImageSettingsPatchSchema, ImageSettingsStatusSchema, ImageStatusSchema, IngestOwnerSchema, InstalledPackageSchema, IntegrationLiteSchema, IntegrationWithStateSchema, IntercomAbilitySchema, IntercomStatusSchema, KNOWN_CAP_NAMES, KeyEventSchema, LOG_LEVEL_RANK, LabelAttributionSchema, LabelDefinitionSchema, LabelTierSchema, LawnMowerActivitySchema, LawnMowerControlStatusSchema, LinkedDeviceSchema, LinkedDevicesModeSchema, LlmDefaultSchema, LlmDefaultSelectorSchema, LlmDownloadProgressSchema, LlmErrorCodeSchema, LlmGenerateBaseInputSchema, LlmGenerateErrSchema, LlmGenerateOkSchema, LlmGenerateResultSchema, LlmImageSchema, LlmNodeModelSchema, LlmProfileKindDescriptorSchema, LlmProfileKindSchema, LlmProfileSchema, LlmRetryPolicySchema, LlmRuntimeCompleteInputSchema, LlmRuntimeDiskUsageSchema, LlmRuntimeNodeSchema, LlmRuntimeStatusSchema, LlmTimeoutDefaults, LlmUsageRollupSchema, LlmUsageSchema, LocateSegmentResultSchema, LocationStatSchema, LockControlStatusSchema, LockStateSchema, LogEntrySchema, LogLevelSchema, LogStreamEntrySchema, LoginMethodContributionSchema, LoginStageEnum, MACRO_LABELS, MAX_CLIP_EVENT_IDS, MAX_CLIP_LABELS, MAX_CONDITION_DEPTH, MAX_CONDITION_LEAVES, MAX_EXPRESSION_AST_NODES, MAX_EXPRESSION_BINDINGS, MAX_EXPRESSION_CALL_ARGS, MAX_EXPRESSION_EVAL_STEPS, MAX_EXPRESSION_SOURCE_LENGTH, METHOD_ACCESS_MAP, METHOD_DEVICE_SELECTORS, MODEL_FORMATS, MOTION_TRIGGER_FEATURE, ManagedModelCatalogEntrySchema, ManagedModelExtraFileSchema, ManagedModelRefSchema, ManagedRuntimeConfigSchema, MaskGridDimsSchema, MaskGridShapeSchema, MaskLineShapeSchema, MaskPointSchema, MaskPolygonShapeSchema, MaskPolygonVerticesSchema, MaskRectShapeSchema, MaskShapeKindSchema, MaskShapeSchema, MediaFileInfoSchema, MediaFileSchema, MediaPlayerRepeatSchema, MediaPlayerStateSchema, MediaPlayerStatusSchema, MeshPeerSchema, MeshStatusSchema, MethodAccessSchema, ModelCatalogEntrySchema, ModelConvertInputSchema, ModelConvertMetadataSchema, ModelDistributeInputSchema, ModelDistributeResultSchema, ModelExtraFileSchema, ModelFormatEntrySchema, ModelFormatsSchema, ModelSubstitutionSchema, ModelVariantGroupSchema, MotionAnalysisResultSchema, MotionEventSchema, MotionOnMotionChangedDataSchema, MotionRegionSchema, MotionSourceEnum, MotionSourcesSchema, MotionStatusSchema, MotionTriggerRuntimeStateSchema, MotionTriggerStatusSchema, MotionZoneOptionsSchema, MotionZonePatchSchema, MotionZoneRegionSchema, MotionZoneStatusSchema, StatusSchema as MqttBrokerStatusSchema, MutationFilterSchema, NATIVE_LEASE_ACTIVITY_FIELD, NATIVE_LEASE_ACTIVITY_KEY, NATIVE_LEASE_ADMISSION_FIELD, NATIVE_LEASE_ADMISSION_KEY, NATIVE_LEASE_BUDGET_FIELD, NATIVE_LEASE_BUDGET_KEY, NATIVE_LEASE_HOLD_FIELD, NATIVE_LEASE_HOLD_KEY, NATIVE_LEASE_SECTION_ID, NATIVE_LEASE_TILE_BUDGET_FIELD, NATIVE_LEASE_TILE_BUDGET_KEY, NC_ALARM_SYSTEM_EVENT_KINDS, NC_AUDIO_DBFS_FLOOR, NC_AUDIO_DB_MAX, NC_AUDIO_DB_MIN, NC_AUDIO_DB_OFFERED, NC_AUDIO_DB_STEP, NC_AUDIO_DEFAULTS, NC_AUDIO_HIT_PERCENT_MAX, NC_AUDIO_HIT_PERCENT_MIN, NC_AUDIO_SAMPLING_MAX_SEC, NC_AUDIO_SAMPLING_MIN_SEC, NC_AUDIO_SEED, NC_AUTHORABLE_SYSTEM_EVENT_KINDS, NC_BASE_CONDITION_KEYS, 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_OCCUPANCY_DEFAULTS, NC_RULE_EDITOR_SECTION_ORDER, NC_RULE_KIND_SPECS, NC_RULE_SECTIONS, NC_SNOOZE_MAX_MINUTES, NC_SYSTEM_DELIVERY, NC_SYSTEM_EVENT_FILTER_KEYS, NC_TAXONOMY, NativeCropBboxSchema, NativeCropRefSchema, NativeCropResultSchema, NativeDetectionSchema, NativeLeaseAdmissionSchema, NativeLeaseSettingsSchema, NativeObjectClassEnum, NativeObjectDetectionRuntimeStateSchema, NativeObjectDetectionStatusSchema, NcAlarmConfigSchema, NcAlarmModeCoverageSchema, NcAlarmSettingsPatchSchema, NcAlarmSettingsSchema, NcAlarmSkipReasonSchema, NcAlarmSkippedDeviceSchema, NcAudioConditionSchema, NcConditionDescriptorSchema, NcConditionsSchema, NcConfirmExpectSchema, NcConfirmSchema, NcCrossingSchema, NcDeliverySchema, NcDeviceStateConditionSchema, NcHistoryEntrySchema, NcHistoryFilterSchema, NcHistoryRecordKindSchema, NcHistoryStatusSchema, NcHistorySubjectSchema, NcMediaFrameSchema, NcMediaPolicySchema, NcOccupancyConditionSchema, NcPlateMatcherSchema, NcRuleActionSchema, NcRuleActionSequenceSchema, NcRuleActionsSchema, NcRuleInputSchema, NcRuleNotificationButtonSchema, NcRulePatchSchema, NcRuleSchema, NcRuleTargetSchema, NcSceneConditionSchema, NcScheduleSchema, NcScheduleWindowSchema, NcSnoozeInputSchema, NcSnoozeSchema, NcSnoozeScopeSchema, NcSnoozeSuppressedSchema, NcSystemEventConditionSchema, NcSystemEventKindSchema, NcTaxonomyEntrySchema, NcTaxonomySchema, NcTestResultSchema, NcThrottleGranularitySchema, NcThrottleSchema, NcZoneConditionSchema, NetworkAccessStatusSchema, NetworkAddressSchema, NetworkEndpointSchema, NotificationActionIconSchema, NotificationActionSchema, NotificationFormatSchema, NotificationSchema, NotifierStatusSchema, NumericSensorStatusSchema, OPS_LOG_DEFAULT_LIMIT, OPS_LOG_RING_DEFAULT_MAX, OauthIntegrationDescriptorSchema, ObjectEventSchema, OpsLogDomainSchema, OpsLogEntrySchema, OpsLogOpSchema, OpsLogQueryInputSchema, OpsLogReasonSchema, OrchestratorMetricsSchema, OsdOverlayKindEnum, OsdOverlayPatchSchema, OsdOverlaySchema, OsdPositionEnum, OsdRenderOutcomeEnum, OsdRenderResultSchema, OsdSlotBindingSchema, OsdSlotViewSchema, OsdSourceOptionSchema, OsdSourceSchema, OsdSourceValueTypeEnum, OsdStatusSchema, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, PIPELINE_FLOW_CAPABILITY_NAMES, PIPELINE_OWNER_CAPABILITY_NAMES, PRIVACY_MASK_CAP_NAME, PROVIDER_KIND_CAP_NAMES, PYTHON_SCRIPT, PackageUpdateSchema, PackageVersionInfoSchema, PasskeyLoginMethodSchema, PasskeySummarySchema, PcmSampleFormatSchema, PerScopeBreakdownSchema, PetFeederStatusSchema, PickStreamPreferencesSchema, PickStreamRequirementsSchema, PickedCamStreamSchema, PipelineAssignmentSchema, PipelineDefaultStepSchema, PipelineEngineChoiceSchema, PipelineRunResultBridge, PipelineStepInputSchema, PipelineValidationIssueSchema, PipelineValidationResultSchema, PlaceholderReasonSchema, PolygonPointSchema, PoolMemoryWatchdog, PowerMeterStatusSchema, PresenceStatusSchema, PressureSensorStatusSchema, PrivacyMaskOptionsSchema, PrivacyMaskPatchSchema, PrivacyMaskRegionSchema, PrivacyMaskShapeSchema, PrivacyMaskStatusSchema, ProfileRtspEntrySchema, ProfileSlotSchema, ProfileSlotStatusSchema, ProviderStatusSchema, PtzAutotrackRuntimeStateSchema, PtzAutotrackSettingsSchema, PtzAutotrackStatusSchema, PtzAutotrackTargetOptionSchema, PtzMoveCommandSchema, PtzOptionsSchema, PtzPositionSchema, PtzPresetSchema, PtzStatusSchema, QueryFilterSchema, RATE_CONTROL_RELAXED, RATE_CONTROL_TIGHT, REACHABILITY_FAILURES_TO_OFFLINE, REACHABILITY_POLL_INTERVAL_MS, REACHABILITY_PROBE_TIMEOUT_MS, RECOGNITION_TYPES, RECORDING_EXPORT_MAX_READ_BYTES, RESERVED_BINDING_NAMES, RESTORED_CAP_NAMES, RUNTIME_DEFAULTS, RUNTIME_STATE_POLICY, RUNTIME_TO_FORMAT, RawStateResultSchema, ReadGopBytesResultSchema, ReadSegmentBytesResultSchema, ReadinessRegistry, ReadinessTimeoutError, RecentTracksPageSchema, RecentTracksQueryInput, RecordingAvailabilitySchema, RecordingBandModeSchema, RecordingBandSchema, RecordingBandTriggersSchema, RecordingConfigSchema, RecordingDaysSchema, RecordingDeviceUsageSchema, RecordingLocationUsageSchema, RecordingManifestSchema, RecordingRangeSchema, RecordingRebalanceInputSchema, RecordingRebalanceMoveSchema, RecordingRebalancePlanSchema, RecordingRebalanceSkipReasonSchema, RecordingRebalanceSkipSchema, RecordingRetentionSchema, RecordingStatusSchema, RecordingStorageModeSchema, RecordingStorageUsageSchema, RecordingTriggersSchema, RecordingWeekdaySchema, RedirectLoginMethodSchema, RelocateFootageClassSchema, RelocateFootageInputSchema, RelocateJobSchema, RelocateJobStateSchema, RelocateMediaInputSchema, RenderedAsSchema, ReportMotionInputSchema, RetrainAnnotationDraftSchema, RetrainAnnotationKindSchema, RetrainAnnotationSchema, RetrainAnnotationSourceSchema, RetrainAssistResultSchema, RetrainAssistSubjectSchema, RetrainCopyRefusalSchema, RetrainFrameCandidateSchema, RetrainFrameListSchema, RetrainFrameSchema, RetrainFrameSelectionSchema, RetrainMacroClassSchema, RetrainStatusSchema, RetrainTrackSchema, RetrainTransitionResultSchema, RingBuffer, RtpSourceSchema, RtspRestreamEntrySchema, RunnerCameraConfigSchema, RunnerCameraDeviceUIFields, RunnerFrameSourceSchema, RunnerInferenceDeviceSchema, RunnerLocalLoadSchema, RunnerLocalMetricsSchema, SCENE_CONDITIONS, SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX, SCENE_CONFIRM_DEFAULT_TIMEOUT_MS, SCENE_DEFAULT_ANCHOR_THRESHOLD, SCENE_DEFAULT_CHECK_INTERVAL_SEC, SCENE_DEFAULT_OBSERVATION_SPACING_SEC, SCENE_DEFAULT_QUIET_SECONDS, SCENE_DEFAULT_UNCOVERED_POLICY, SCENE_DIVERGED, SCENE_RESET_RECAPTURES, SCOPE_PRESETS, SCRUB_THUMBNAIL_PRESETS, SCRUB_THUMBNAIL_PRESET_LABELS, SCRUB_THUMBNAIL_PRESET_ORDER, SENSOR_FEATURES, SENSOR_MAP, SOURCE_INFO_METADATA_KEY, STREAM_PROFILE_META, STREAM_QUALITY_LABELS, SUB_DETECTION_TYPES, SYSTEM_CAP_NAMES, SYSTEM_SCOPE_DEVICE_METHODS, SceneCheckSchema, SceneConditionSchema, SceneConfirmSchema, SceneMonitorSchema, SceneMonitorStateSchema, SceneMonitorStatusSchema, SceneReferenceSchema, SceneUnavailableSchema, SceneUncoveredPolicySchema, SceneVerdictSchema, ScopedTokenSchema, ScopedTokenSummarySchema, ScoredObjectEventSchema, ScriptRunnerStatusSchema, ScrubThumbnailPresetSchema, SearchResultSchema, SendEmailInputSchema, SendEmailResultSchema, SendResultSchema, SensorEventSchema, ServerBootModeSchema, ServerPackageStatusSchema, ServerRollbackInfoSchema, ServerUpdateActionResultSchema, ServerUpdateCheckResultSchema, ServerUpdateStateSchema, SetSiteLocationInputSchema, SettingsPatchSchema, SettingsRecordSchema, SettingsSchemaWithValuesSchema, SettingsUpdateResultSchema, ShmRingStatsSchema, SiteLocationSchema, SiteLocationSourceSchema, SiteLocationStatusSchema, SmokeStatusSchema, SmtpStatusSchema, SnapshotImageSchema, SourceInfoSchema, SpatialDetectionSchema, SsoBridgeClaimsSchema, StartEmbeddedInputSchema, StationaryObjectSchema, AbortUploadInputSchema as StorageAbortUploadInputSchema, BeginDownloadInputSchema as StorageBeginDownloadInputSchema, BeginDownloadResultSchema as StorageBeginDownloadResultSchema, BeginUploadInputSchema as StorageBeginUploadInputSchema, BeginUploadResultSchema as StorageBeginUploadResultSchema, EndDownloadInputSchema as StorageEndDownloadInputSchema, FinalizeUploadInputSchema as StorageFinalizeUploadInputSchema, StorageLocationDeclarationSchema, StorageLocationRefSchema, StorageLocationSchema, StorageLocationTypeSchema, StorageMigrationClassSchema, StorageMigrationDestinationsSchema, StorageMigrationFootageMoveInputSchema, StorageMigrationInputSchema, StorageMigrationJobSchema, StorageMigrationLeaseInputSchema, StorageMigrationMediaMoveInputSchema, StorageMigrationMoveSchema, StorageMigrationParticipantSchema, StorageMigrationPhaseSchema, StorageMigrationPlanSchema, ProviderInfoSchema as StorageProviderInfoSchema, ReadChunkInputSchema as StorageReadChunkInputSchema, TestLocationResultSchema as StorageTestLocationResultSchema, WriteChunkInputSchema as StorageWriteChunkInputSchema, StreamCodecSchema, StreamFormatSchema, StreamNetworkStatsSchema, StreamParamsOptionsSchema, StreamParamsStatusSchema, StreamProfileConfigSchema, StreamProfileOptionsSchema, StreamProfilePatchSchema, StreamProfileSchema, StreamSourceEntrySchema, StreamSourceSchema, SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, SubscribeFramesInputSchema, SubscribeFramesResultSchema, SwitchStatusSchema, SystemMetricsSchema, SystemMirror, TAXONOMY_COLORS, TIMELAPSE_DENSE_FLOOR_SEC, TIMEZONES, TRANSCODE_DOWN_MAX_BITRATE_KBPS, TRANSCODE_DOWN_MAX_HEIGHT, TamperStatusSchema, TankStatusSchema, TargetKindCapsSchema, TargetKindLevelSchema, TargetKindSchema, TargetSchema, TemperatureSensorStatusSchema, TerminalInstanceInfoSchema, TerminalLegacyCameraSchema, TerminalOutputBatchSchema, TerminalOutputEventSchema, TerminalProfileInfoSchema, TerminalSessionInfoSchema, TestConnectionResultSchema$1 as TestConnectionResultSchema, TestConnectionStatusEnum, TestResultSchema, TimelapseRuleInputSchema, TimelapseRulePatchSchema, TimelapseRuleSchema, TimelapseTemplateSchema, ToastSchema, TokenScopeSchema, TopologyNodeSchema, TopologyProcessSchema, TopologyServiceSchema, TrackCascadeCountsSchema, TrackEnvelopeSchema, TrackFlagsPatchSchema, TrackFlagsSchema, TrackProjectionSchema, TrackSchema, TrackSourceSchema, TrackStateSchema, TrackZoneFilterSchema, TrackedDetectionSchema, TrainingExportDeviceTotalsSchema, TrainingExportSummarySchema, TurnServerSchema, UNIT_TABLE, BrokerInfoSchema$1 as UnifiedBrokerInfoSchema, UnitConversionError, UpdateIntegrationInputSchema, UpdateStatusSchema, UpdateUserInputSchema, UserRecordSchema, UserSummarySchema, VISIT_MERGE_GAP_MS, VacuumControlStatusSchema, VacuumStateSchema, ValveStateSchema, ValveStatusSchema, VectorDeclareIndexInputSchema, VectorDeleteByFilterInputSchema, VectorDeleteInputSchema, VectorDeleteResultSchema, VectorFilterSchema, VectorGetInputSchema, VectorGetResultSchema, VectorItemSchema, VectorMatchSchema, VectorMetadataSchema, VectorMetricSchema, VectorQueryInputSchema, VectorQueryResultSchema, VectorStatsInputSchema, VectorStatsResultSchema, VectorUpsertInputSchema, VectorUpsertResultSchema, VibrationStatusSchema, VideoEncodeSchema, WEBRTC_EGRESS_PROFILE, WELL_KNOWN_TABS, WELL_KNOWN_TAB_MAP, WaterHeaterStatusSchema, WeatherStatusSchema, WebrtcStreamChoiceSchema, WebrtcStreamTargetSchema, WhiteBalanceModeSchema, WidgetHostEnum, WidgetLoginMethodSchema, WidgetMetadataSchema, WidgetRemoteSchema, WidgetSizeEnum, YAMNET_TO_MACRO, ZoneCrossingDirectionSchema, ZoneCrossingSchema, ZoneKindEnum, ZoneRuleModeEnum, ZoneRuleSchema, ZoneRuleStageEnum, ZoneRulesArraySchema, ZoneSchema, ZoneScopeBreakdownSchema, accessoriesCapability, accessoryStableId, addonPagesCapability, addonPagesSourceCapability, addonRoutesCapability, addonSettingsCapability, addonWidgetsCapability, addonWidgetsSourceCapability, addonsCapability, adminUiCapability, airQualitySensorCapability, alarmPanelCapability, alertsCapability, ambientLightSensorCapability, asBoolean, asJsonArray, asJsonObject, asNumber, asString, assertTimelapseCadences, audioAnalysisCapability, audioAnalyzerCapability, audioCodecCapability, audioIsFailClosed, audioKindId, audioLabelChoices, audioMetricsCapability, audioModeOf, audioOrDefaults, audioPlanFromEncodeProfile, authProviderCapability, autoAssignProfiles, automationControlCapability, backupCapability, bareAddonId, batteryCapability, bestLocationMatch, binaryCapability, bindAddonActions, brightnessCapability, brokerCapability, buildAddonRouteProvider, buildAudioArgs, buildEventKindDescriptor, buildFfmpegArgs, buildInputArgs, buildModelVariantGroups, buildNcTaxonomy, buildRoleScopes, buildStreamParamsConfigSchema, buildVideoArgs, buttonCapability, cameraCredentialsCapability, cameraPipelineConfigCapability, cameraStreamsCapability, canConvertUnit, canonicalEgressPlan, carbonMonoxideCapability, cellsToRects, classifyBearerPrincipal, classifyStream, classifyStreams, climateControlCapability, collectHydratedFieldEntries, collectHydratedFieldValues, colorCapability, colorForKind, commitWatchdogRestart, compileExpression, compileExpressionSafe, composeSwitchedOff, conditionDepth, conditionExclusionReason, conditionVisibleForKind, connectionTestCapability, connectivityCapability, consumablesCapability, contactCapability, controlCapability, convertUnit, coreBlockAddonId, coreBlockIdFromAddonId, coreBlocksCapability, cosineSimilarity, countConditionLeaves, coverCapability, createDeviceProxy, createDurableState, createEvent, createExpressionScope, createHwAccelCache, createLazyTrpcSource, createMirrorSource, createRuntimeStateBridge, createSliceHandle, createSystemProxy, customAction, customModelRegistryCapability, dataStoreProviderCapability, dayNightCapability, declarationOwnerNodeId, decodeVectorBase64, decoderCapability, defaultDeliveryForSection, defaultDeviceFor, defineCustomActions, deriveBatteryPresence, deriveCameraSwitches, deriveDetailCropRect, deriveRecordingMode, describeModelVariant, detectAccessRole, detectionPipelineCapability, deviceAdoptionCapability, deviceBackendToFormat, deviceCustomAction, deviceDiscoveryCapability, deviceExportCapability, deviceManagerCapability, deviceMatchesProfile, deviceOpsCapability, deviceProviderCapability, deviceSelectorMatches, deviceStateCapability, deviceStatusCapability, doorbellCapability, droppedConditionsForKind, egressTranscodeSharingKey, egressTransportFromRequest, embeddingEncoderCapability, emitDownForOwnedCaps, emitReadiness, encodeProfileFromStreamShape, encodeVectorBase64, enumSensorCapability, enumerateInferenceDevices, enumerateItemArrayFields, enumerateSchemaFields, errMsg, evaluateAst, evaluateExpressionSource, evaluatePoolMemory, evaluateZoneRules, event, eventEmitterCapability, eventsCapability, expandCapMethods, extractNestedAddonId, extractSourceInfoFromMetadata, faceGalleryCapability, fanControlCapability, featureProbeCapability, filesystemBrowseCapability, findTimezone, floodCapability, formatForBackend, formatForRuntime, gasCapability, generateAutomationBlock, getAudioMacroClassIds, getByPath, getCapsByProviderKind, getTaxonomyEntry, hasMotionTrigger, hfModelUrl, htmlToText, humidifierCapability, humiditySensorCapability, hydrateSchema, imageCapability, imageSettingsCapability, initialPoolMemoryState, integrationsCapability, intercomCapability, invocationFromEncodeProfile, isAgentOnlyPlacement, isArrayOutputSchema, isAudioLabelSelected, isAudioRule, isBaseConditionKey, isBatteryPresenceFault, isCollectionArrayMethod, isDeployableToAgent, isDetectionMacroClass, isDeviceConfigCap, isDeviceScopedCap, isEvent, isIsolatedBuiltin, isNode, isObjectInput, isOccupancyRule, isRestoredCap, isSameAddonId, isScheduleActive, isSoftwareDecode, isSystemDelivery, isVoidInput, jobKindSchema, kebabToCamel, knownValues, lawnMowerControlCapability, lifecycleJobSchema, lifecycleJobScopeSchema, lifecycleJobStateSchema, lifecycleTaskSchema, llmCapability, llmRuntimeCapability, localNetworkCapability, locationSimilarity, lockControlCapability, logBannerArgs, logDestinationCapability, logLevelAtMost, loginMethodCapability, looseSchema, makeProfileBrokerId, makeSourceBrokerId, mapAudioLabelToMacro, markdownToHtmlLite, markdownToText, maskUrlCredentials, mediaPlayerCapability, mergeSourceInfo, meshNetworkCapability, method, methodAccessForHttpMethod, metricsProviderCapability, modelConvertCapability, modelDistributorCapability, modelFormatForRuntime, motionCapability, motionDetectionCapability, motionTriggerCapability, motionZonesCapability, mqttBrokerCapability, nativeObjectDetectionCapability, networkAccessCapability, networkQualityCapability, nodePin, nodesCapability, normalizeAddonInitResult, normalizeAudioLabel, normalizeTokenScopes, normalizeUnit, notificationOutputCapability, notificationRulesCapability, notifierCapability, numericSensorCapability, oauthIntegrationCapability, objectInputDeclaresAddonId, osdCapability, osdManagerCapability, parseCameraStreamConfig, parseExpression, parseJsonArray, parseJsonObject, parseJsonUnknown, parseProcStatus, parseProfileBrokerId, parseRuleSection, parseStreamParamsFormPatch, patchAudio, petFeederCapability, pickAccessoryControl, pickDetailCropConvention, pickNativeLeaseOverride, pickPreferredRtspEntry, pickRestartCandidate, pickVideoEncoder, pickerForCondition, pipelineAnalyticsCapability, pipelineExecutorCapability, pipelineOrchestratorCapability, pipelineRunnerCapability, plateGalleryCapability, platformProbeCapability, poolMemoryThreshold, powerMeterCapability, prepareNotification, presenceCapability, pressureSensorCapability, principalMayReachAddon, privacyMaskCapability, procedureAuthKey, ptzAutotrackCapability, ptzCapability, pythonScriptForBackend, readDetailCropConvention, readDeviceStateFrom, readNativeLeaseOverride, readNodePin, readTimelapseGeneratedAt, readinessKey, rebootCapability, recordingCapability, recordingExportCapability, rectsToCells, requiresPython, resetPoolBaseline, resolveAddonExecution, resolveAddonGroup, resolveAddonPlacement, resolveAddonRuntime, resolveCapMount, resolveDetectionRuntime, resolveDeviceControlKind, resolveDeviceProfile, resolveEgressDecodeHwAccel, resolveFormat, resolveHydratedFieldValue, resolveModelFormat, resolveMutate, resolvePoolMemoryPolicy, resolveRecordingProfiles, resolveRunnerId, resolveScrubThumbnailGeometry, resolveVariantModelId, resolveViewableDeviceIds, roleSpec, ruleEditorSectionsForKind, ruleKindOf, ruleKindSpec, ruleMatchesSection, ruleSection, ruleSectionOf, ruleSeedForSection, runInferenceStep, runtimeDevices, runtimeStatePolicyFor, sceneMonitorCapability, scopeInherits, scopeKey, scopesAllowAddon, scopesAllowDeviceCap, scoreRuntimes, scriptRunnerCapability, selectAssignedProfileSlots, serverManagementCapability, setByPath, settingsStoreCapability, sleep, sleepCancellable, smokeCapability, smtpProviderCapability, snapshotCapability, ssoBridgeCapability, startReachabilityPoll, stateVocabularyFor, storageCapability, storageEvictableCapability, storageMigrationCapability, storageProviderCapability, streamBrokerCapability, streamCatalogCapability, streamParamsCapability, streamPixels, streamQualityLabel, subKindsOf, summarisePrivacyAudio, summarizeEffectiveScope, supportedRuntimes, switchCapability, switchedOffIds, synthesizeSourceInfo, systemCapability, systemEventFilterApplies, systemEventFilterAppliesToAnyKind, tamperCapability, taskLogEntrySchema, taskPhaseSchema, taskTargetSchema, temperatureSensorCapability, terminalSessionCapability, textToHtml, toDeviceSummary, toExpressionValue, toNodeId, toStreamSourceEntry, toastCapability, toggleAudioLabel, tokenize, transcodeBody, tryConvertUnit, turnProviderCapability, unitDimension, unitsForDimension, updateCapability, userManagementCapability, userPasskeysCapability, vacuumControlCapability, validateExpressionSource, validateRecipeBounds, valveCapability, vectorDimFromBase64, vectorStoreCapability, vibrationCapability, videoclipsCapability, viewerUiCapability, waterHeaterCapability, weatherCapability, webrtcClientHintsSchema, webrtcSessionCapability, wiringAddonHealthSchema, wiringHealthSnapshotSchema, wiringNodeHealthSchema, wiringProbeKindSchema, wiringProbeResultSchema, zodEntriesToConfigUI, zoneAnalyticsCapability, zoneRulesCapability, zonesCapability };
|
|
46913
|
+
export { ACCESSORY_LABEL, ACCESS_ROLES, ALEXA_EGRESS_PROFILE, ALL_CAPABILITY_DEFINITIONS, APPLE_SA_TO_MACRO, AUDIO_ANALYSIS_CAP_NAME, AUDIO_BACKEND_CHOICES, AUDIO_MACRO_LABELS, AUDIO_PRESETS, AccessoriesStatusSchema, AccessoryKind, AddBrokerInputSchema, AddonAutoUpdateSchema, AddonListItemSchema, AddonPageDeclarationSchema, AddonPageInfoSchema, AdoptInputSchema as AdoptionAdoptInputSchema, AdoptResultSchema as AdoptionAdoptResultSchema, AdoptionCandidateResultSchema, AdoptionFilterSchema, GetCandidateInputSchema as AdoptionGetCandidateInputSchema, AdoptionJobSchema, AdoptionJobStateSchema, ListCandidatesInputSchema as AdoptionListCandidatesInputSchema, ListCandidatesOutputSchema as AdoptionListCandidatesOutputSchema, AdoptionOutcomeSchema, ReleaseInputSchema as AdoptionReleaseInputSchema, AdoptionStatusSchema, AgentLoadSummarySchema, AirQualitySensorStatusSchema, AlarmArmModeSchema, AlarmPanelStatusSchema, AlarmStateSchema, AlertSchema, AlertSeveritySchema, AlertSourceSchema, AlertStatusSchema, AmbientLightSensorStatusSchema, ApiKeyRecordSchema, ApiKeySummarySchema, ArchiveEntrySchema, ArchiveManifestSchema, AttachmentMediaTypeSchema, AttachmentSchema, AudioAnalysisResultSchema, AudioAnalysisSettingsSchema, AudioChunkInputSchema, AudioClassSummarySchema, AudioClassificationLabelSchema, AudioClassificationResultSchema, AudioCodecInfoSchema, AudioDecodeSessionConfigSchema, AudioEncodeSchema, AudioEncodeSessionConfigSchema, AudioEncodedChunkSchema, AudioEventSchema, AudioLevelSchema, AudioMetricsHistoryPointSchema, AudioMetricsHistorySchema, AudioMetricsSnapshotSchema, AudioPcmChunkSchema, AuthResultSchema, AutoUpdateSettingsSchema, AutomationActionSchema, AutomationConditionOperatorSchema, AutomationConditionSchema, AutomationControlStatusSchema, AutomationRecipeSchema, AutomationTriggerSchema, AvailableIntegrationTypeSchema, BACKEND_TO_FORMAT, BASE_LIVE_EGRESS_PROFILE, BATTERY_DEVICE_PROFILE, BATTERY_UNREACHABLE_AFTER_MS, BOOT_RECOVERY_BACKOFF_MS, BacklightModeSchema, BackupDestinationInfoSchema, BackupEntrySchema, BaseAddon, BaseDevice, BaseDeviceProvider, BatteryStatusSchema, BinaryStatusSchema, BoundingBoxSchema, BrightnessStatusSchema, AddInputSchema as BrokerAddInputSchema, BrokerAudioClientSchema, BrokerClientsSchema, BrokerConnectionDetailsSchema, BrokerConsumerAttributionSchema, BrokerConsumerKindSchema, BrokerDecodedClientSchema, BrokerEncodedClientSchema, GetStateInputSchema as BrokerGetStateInputSchema, BrokerInfoSchema, BrokerProviderInfoSchema, PublishInputSchema as BrokerPublishInputSchema, RegistryStatusSchema as BrokerRegistryStatusSchema, BrokerRtspClientSchema, BrokerStatsSchema, BrokerStatusEnum, BrokerStatusSchema, SubscribeInputSchema as BrokerSubscribeInputSchema, SubscribeResultSchema as BrokerSubscribeResultSchema, TestConnectionResultSchema as BrokerTestConnectionResultSchema, UnsubscribeInputSchema as BrokerUnsubscribeInputSchema, CAMERA_SWITCH_CATALOG, CAMERA_SWITCH_ORDER, CAM_PROFILE_ORDER, CAPABILITY_NAMES, CAPABILITY_ROUTER_KEYS, CAP_NAMES_WITH_STATUS, CAP_NODE_PIN_CONTEXT_KEY, CAP_PROVIDER_KIND_MAP, CLUSTER_MODEL_SCOPED_STEPS, CLUSTER_MODEL_SECTION_ID, COCO_80_LABELS, COCO_TO_MACRO, CONNECTION_TEST_TIMEOUT_MS, CORE_BLOCKS_ADDON_ID, CORE_BLOCK_ADDON_PREFIX, CamProfileSchema, CamStreamDescriptorSchema, CamStreamKindSchema, CamStreamResolutionSchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraCredentialsSchema, CameraCredentialsStatusSchema, CameraDecoderShmSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionStatusSchema, CameraMetricsSchema, CameraMetricsWithDeviceIdSchema, CameraMotionStatusSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusDegradationReasonSchema, CameraStatusDegradationSchema, CameraStatusSchema, CameraStatusStageSchema, CameraStreamSchema, CameraSwitchAuthoritySchema, CameraSwitchGroupSchema, CameraSwitchIdSchema, CameraSwitchSchema, CameraSwitchUnavailableReasonSchema, CandidateQueryFilterSchema, CapScopeSchema, CapabilityBindingsSchema, CarbonMonoxideStatusSchema, ChargingStatus, ClientNetworkStatsSchema, ClimateControlStatusSchema, ClipPlaybackSchema, ClipSchema, ClusterAddonNodeDeploymentSchema, ClusterAddonStatusEntrySchema, CollectionColumnSchema, CollectionIndexSchema, ColorStatusSchema, ConfigEntrySchema, ConfigSectionWithValuesSchema, ConfigTabDeclarationSchema, ConnectionTestDescriptorSchema, ConnectionTestInputSchema, ConnectionTestOutcomeSchema, ConnectivityStatusSchema, ConsumableItemSchema, ConsumablesStatusSchema, ContactStatusSchema, ControlKindSchema, ControlStatusSchema, ConvertArtifactSchema, ConvertResultSchema, ConvertTargetSchema, CoreBlockCompileResultSchema, CoreBlockInputSchema, CoreBlockPlacementSchema, CoreBlockSchema, CoreBlockStatusSchema, CoverStateSchema, CoverStatusSchema, CreateApiKeyInputSchema, CreateApiKeyResultSchema, CreateIntegrationInputSchema, CreateScopedTokenInputSchema, CreateScopedTokenResultSchema, CreateUserInputSchema, CustomActionInputSchema, CustomModelDescriptorSchema, DATAPLANE_SECRET_HEADER, DECLARED_DEVICE_SWEEP_LIMIT, DECLARED_INTEGRATION_FIXED_KEY, DEFAULT_ADDON_PLACEMENT, DEFAULT_AUDIO_ANALYZER_CONFIG, DEFAULT_CLUSTER_STEP_MODELS, DEFAULT_DECODER_HWACCEL_CONFIG, DEFAULT_DETAIL_CROP_CONVENTION, DEFAULT_EVENTS_BAND_BUFFER_SEC, DEFAULT_EVENT_COLOR, DEFAULT_FEATURES, DEFAULT_NATIVE_LEASE_SETTINGS, DEFAULT_POOL_MEMORY_POLICY, DEFAULT_RECORDING_PROFILES, DEFAULT_RETENTION, DEFAULT_RUNTIME_STATE_DURABILITY, DEFAULT_SCRUB_THUMBNAIL_PRESET, DEFAULT_TIMELAPSE_PREVIEW_TEXT, DETAIL_CROP_PADDING_FIELD, DETAIL_CROP_PADDING_KEY, DETAIL_CROP_SECTION_ID, DETAIL_CROP_SQUARE_KEY, DETECTION_MACRO_CLASSES, DETECTION_PIPELINE_CAP_NAME, DEVICE_BACKEND_TO_FORMAT, DEVICE_CAP_NAMES, DEVICE_PROFILES, DEVICE_SCOPED_CAPS, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATE_READERS, DEVICE_STATUS_METHOD, DEVICE_TYPE_CONTROL_KIND, DEVICE_TYPE_INFO, EngineInfoSchema as DataStoreEngineInfoSchema, DayNightModeSchema, DayNightOptionsSchema, DayNightSettingsPatchSchema, DayNightStatusSchema, DeclaredDevices, DecodedAudioChunkSchema, DecodedFrameSchema, DecoderSessionConfigSchema, DecoderStatsSchema, DeleteIntegrationResultSchema, DetailCropConventionSchema, DetectionSourceSchema, DeviceCodeSeveritySchema, DeviceConfig, DeviceDiscoveryStatusSchema, ExposeInputSchema as DeviceExportExposeInputSchema, DeviceExportStatusSchema, UnexposeInputSchema as DeviceExportUnexposeInputSchema, DeviceFeature, DeviceInfoSchema, DeviceNetworkStatsSchema, DeviceRole, DeviceRuntimeState, DeviceSelectorSchema, DeviceStatusSchema, DeviceType, DiscoveredChildDeviceSchema, DiscoveredChildStatusSchema, DiscoveredDeviceSchema, DiscoveredTargetSchema, DiskReconcileJobSchema, DisposerChain, DoorbellPressEventSchema, DoorbellStatusSchema, EVENTFUL_CAP_NAMES, EVENT_KIND_BY_CAP, EVENT_PAD_MS, EVENT_TAXONOMY, EXPORT_DENSE_MAX_RANGES, EXPRESSION_BUILTINS, EXPRESSION_BUILTIN_NAMES, EXPRESSION_COMPILE_CACHE_CAPACITY, EXPRESSION_IDENTIFIER_RE, EXPRESSION_INJECTED_NOW, EgressEncodeSchema, EgressRateControlSchema, EgressTranscodeRequestSchema, EgressTranscodeSchema, ElementConfigStore, EmbeddingInfoSchema, EmbeddingResultSchema, EncodeProfileSchema, EncodedPacketSchema, EnrichedWidgetMetadataSchema, EnumSensorDateTimeFormatSchema, EnumSensorStatusSchema, EventCategory, EventEmitterStatusSchema, EventFireSchema, EventItemSchema, EventKindCategorySchema, EventKindDescriptorSchema, EventKindIconSchema, EventKindSchema, EventKindsForDeviceSchema, EventMediaArtifactSchema, EventMediaCoverageSchema, EventMediaKindSchema, EventMediaProductionSchema, EventSourceType, ExportBytesSchema, ExportDenseRangeSchema, ExportDenseSchema, ExportDownloadSchema, ExportOptionsSchema, ExportRecordSchema, ExportSetupFieldSchema, ExportSetupSchema, ExportSpeedSchema, ExportStateSchema, ExportTimelapseSchema, ExposedDeviceSchema, ExposureModeSchema, ExpressionBindingSourceSchema, ExpressionEvalError, ExpressionFieldBindingSchema, ExpressionGlobalBindingSchema, ExpressionLiteralBindingSchema, ExpressionParseError, ExpressionSourceSchema, FULL_IMAGE_BBOX, FanControlStatusSchema, FanDirectionSchema, FeatureManifestSchema, FeatureProbeStatusSchema, FloodStatusSchema, Fmp4BoxSplitter, FrameHandleFormatSchema, FrameHandleSchema, FrameInputSchema, GasStatusSchema, GetStreamWithCodecInputSchema, GlobalMetricsSchema, HAP_AUDIO_BASE, HAP_AUDIO_BITRATE_KBPS, HAP_AUDIO_VBV_KBITS, HAP_KEYFRAME_INTERVAL_SEC, HF_BASE_URL, HF_REPO, HWACCEL_OPTIONS, HealthStatusSchema, HfModelResolutionSchema, HistoryPointSchema, HistoryResolutionEnum, HumidifierStatusSchema, HumiditySensorStatusSchema, HvacModeSchema, ImageContractSchema, ImageContractStateSchema, ImageRotateSchema, ImageSettingsOptionsSchema, ImageSettingsPatchSchema, ImageSettingsStatusSchema, ImageStatusSchema, IngestOwnerSchema, InstalledPackageSchema, IntegrationLiteSchema, IntegrationWithStateSchema, IntercomAbilitySchema, IntercomStatusSchema, KNOWN_CAP_NAMES, KeyEventSchema, LOG_LEVEL_RANK, LabelAttributionSchema, LabelDefinitionSchema, LabelTierSchema, LawnMowerActivitySchema, LawnMowerControlStatusSchema, LinkedDeviceSchema, LinkedDevicesModeSchema, LlmDefaultSchema, LlmDefaultSelectorSchema, LlmDownloadProgressSchema, LlmErrorCodeSchema, LlmGenerateBaseInputSchema, LlmGenerateErrSchema, LlmGenerateOkSchema, LlmGenerateResultSchema, LlmImageSchema, LlmNodeModelSchema, LlmProfileKindDescriptorSchema, LlmProfileKindSchema, LlmProfileSchema, LlmRetryPolicySchema, LlmRuntimeCompleteInputSchema, LlmRuntimeDiskUsageSchema, LlmRuntimeNodeSchema, LlmRuntimeStatusSchema, LlmTimeoutDefaults, LlmUsageRollupSchema, LlmUsageSchema, LocateSegmentResultSchema, LocationStatSchema, LockControlStatusSchema, LockStateSchema, LogEntrySchema, LogLevelSchema, LogStreamEntrySchema, LoginMethodContributionSchema, LoginStageEnum, MACRO_LABELS, MAX_CLIP_EVENT_IDS, MAX_CLIP_LABELS, MAX_CONDITION_DEPTH, MAX_CONDITION_LEAVES, MAX_EXPRESSION_AST_NODES, MAX_EXPRESSION_BINDINGS, MAX_EXPRESSION_CALL_ARGS, MAX_EXPRESSION_EVAL_STEPS, MAX_EXPRESSION_SOURCE_LENGTH, METHOD_ACCESS_MAP, METHOD_DEVICE_SELECTORS, MODEL_FORMATS, MOTION_TRIGGER_FEATURE, ManagedModelCatalogEntrySchema, ManagedModelExtraFileSchema, ManagedModelRefSchema, ManagedRuntimeConfigSchema, MaskGridDimsSchema, MaskGridShapeSchema, MaskLineShapeSchema, MaskPointSchema, MaskPolygonShapeSchema, MaskPolygonVerticesSchema, MaskRectShapeSchema, MaskShapeKindSchema, MaskShapeSchema, MediaFileInfoSchema, MediaFileSchema, MediaPlayerRepeatSchema, MediaPlayerStateSchema, MediaPlayerStatusSchema, MeshPeerSchema, MeshStatusSchema, MethodAccessSchema, ModelCatalogEntrySchema, ModelConvertInputSchema, ModelConvertMetadataSchema, ModelDistributeInputSchema, ModelDistributeResultSchema, ModelExtraFileSchema, ModelFormatEntrySchema, ModelFormatsSchema, ModelSubstitutionSchema, ModelVariantGroupSchema, MotionAnalysisResultSchema, MotionEventSchema, MotionOnMotionChangedDataSchema, MotionRegionSchema, MotionSourceEnum, MotionSourcesSchema, MotionStatusSchema, MotionTriggerRuntimeStateSchema, MotionTriggerStatusSchema, MotionZoneOptionsSchema, MotionZonePatchSchema, MotionZoneRegionSchema, MotionZoneStatusSchema, StatusSchema as MqttBrokerStatusSchema, MutationFilterSchema, NATIVE_LEASE_ACTIVITY_FIELD, NATIVE_LEASE_ACTIVITY_KEY, NATIVE_LEASE_ADMISSION_FIELD, NATIVE_LEASE_ADMISSION_KEY, NATIVE_LEASE_BUDGET_FIELD, NATIVE_LEASE_BUDGET_KEY, NATIVE_LEASE_HOLD_FIELD, NATIVE_LEASE_HOLD_KEY, NATIVE_LEASE_SECTION_ID, NATIVE_LEASE_TILE_BUDGET_FIELD, NATIVE_LEASE_TILE_BUDGET_KEY, NC_ALARM_SYSTEM_EVENT_KINDS, NC_AUDIO_DBFS_FLOOR, NC_AUDIO_DB_MAX, NC_AUDIO_DB_MIN, NC_AUDIO_DB_OFFERED, NC_AUDIO_DB_STEP, NC_AUDIO_DEFAULTS, NC_AUDIO_HIT_PERCENT_MAX, NC_AUDIO_HIT_PERCENT_MIN, NC_AUDIO_SAMPLING_MAX_SEC, NC_AUDIO_SAMPLING_MIN_SEC, NC_AUDIO_SEED, NC_AUTHORABLE_SYSTEM_EVENT_KINDS, NC_BASE_CONDITION_KEYS, 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_OCCUPANCY_DEFAULTS, NC_RULE_EDITOR_SECTION_ORDER, NC_RULE_KIND_SPECS, NC_RULE_SECTIONS, NC_SNOOZE_MAX_MINUTES, NC_SYSTEM_DELIVERY, NC_SYSTEM_EVENT_FILTER_KEYS, NC_TAXONOMY, NativeCropBboxSchema, NativeCropRefSchema, NativeCropResultSchema, NativeDetectionSchema, NativeLeaseAdmissionSchema, NativeLeaseSettingsSchema, NativeObjectClassEnum, NativeObjectDetectionRuntimeStateSchema, NativeObjectDetectionStatusSchema, NcAlarmConfigSchema, NcAlarmModeCoverageSchema, NcAlarmSettingsPatchSchema, NcAlarmSettingsSchema, NcAlarmSkipReasonSchema, NcAlarmSkippedDeviceSchema, NcAudioConditionSchema, NcConditionDescriptorSchema, NcConditionsSchema, NcConfirmExpectSchema, NcConfirmSchema, NcCrossingSchema, NcDeliverySchema, NcDeviceStateConditionSchema, NcHistoryEntrySchema, NcHistoryFilterSchema, NcHistoryRecordKindSchema, NcHistoryStatusSchema, NcHistorySubjectSchema, NcMediaFrameSchema, NcMediaPolicySchema, NcOccupancyConditionSchema, NcPlateMatcherSchema, NcRuleActionSchema, NcRuleActionSequenceSchema, NcRuleActionsSchema, NcRuleInputSchema, NcRuleNotificationButtonSchema, NcRulePatchSchema, NcRuleSchema, NcRuleTargetSchema, NcSceneConditionSchema, NcScheduleSchema, NcScheduleWindowSchema, NcSnoozeInputSchema, NcSnoozeSchema, NcSnoozeScopeSchema, NcSnoozeSuppressedSchema, NcSystemEventConditionSchema, NcSystemEventKindSchema, NcTaxonomyEntrySchema, NcTaxonomySchema, NcTestResultSchema, NcThrottleGranularitySchema, NcThrottleSchema, NcZoneConditionSchema, NetworkAccessStatusSchema, NetworkAddressSchema, NetworkEndpointSchema, NotificationActionIconSchema, NotificationActionSchema, NotificationFormatSchema, NotificationSchema, NotifierStatusSchema, NumericSensorStatusSchema, OPS_LOG_DEFAULT_LIMIT, OPS_LOG_RING_DEFAULT_MAX, OauthIntegrationDescriptorSchema, ObjectEventSchema, OpsLogDomainSchema, OpsLogEntrySchema, OpsLogOpSchema, OpsLogQueryInputSchema, OpsLogReasonSchema, OrchestratorMetricsSchema, OsdOverlayKindEnum, OsdOverlayPatchSchema, OsdOverlaySchema, OsdPositionEnum, OsdRenderOutcomeEnum, OsdRenderResultSchema, OsdSlotBindingSchema, OsdSlotViewSchema, OsdSourceOptionSchema, OsdSourceSchema, OsdSourceValueTypeEnum, OsdStatusSchema, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, PIPELINE_FLOW_CAPABILITY_NAMES, PIPELINE_OWNER_CAPABILITY_NAMES, PRIVACY_MASK_CAP_NAME, PROVIDER_KIND_CAP_NAMES, PYTHON_SCRIPT, PackageUpdateSchema, PackageVersionInfoSchema, PasskeyLoginMethodSchema, PasskeySummarySchema, PcmSampleFormatSchema, PerScopeBreakdownSchema, PetFeederStatusSchema, PickStreamPreferencesSchema, PickStreamRequirementsSchema, PickedCamStreamSchema, PipelineAssignmentSchema, PipelineDefaultStepSchema, PipelineEngineChoiceSchema, PipelineRunResultBridge, PipelineStepInputSchema, PipelineValidationIssueSchema, PipelineValidationResultSchema, PlaceholderReasonSchema, PolygonPointSchema, PoolMemoryWatchdog, PowerMeterStatusSchema, PresenceStatusSchema, PressureSensorStatusSchema, PrivacyMaskOptionsSchema, PrivacyMaskPatchSchema, PrivacyMaskRegionSchema, PrivacyMaskShapeSchema, PrivacyMaskStatusSchema, ProfileRtspEntrySchema, ProfileSlotSchema, ProfileSlotStatusSchema, ProviderStatusSchema, PtzAutotrackRuntimeStateSchema, PtzAutotrackSettingsSchema, PtzAutotrackStatusSchema, PtzAutotrackTargetOptionSchema, PtzMoveCommandSchema, PtzOptionsSchema, PtzPositionSchema, PtzPresetSchema, PtzStatusSchema, QueryFilterSchema, RATE_CONTROL_RELAXED, RATE_CONTROL_TIGHT, REACHABILITY_FAILURES_TO_OFFLINE, REACHABILITY_POLL_INTERVAL_MS, REACHABILITY_PROBE_TIMEOUT_MS, RECOGNITION_TYPES, RECORDING_EXPORT_MAX_READ_BYTES, RESERVED_BINDING_NAMES, RESTORED_CAP_NAMES, RUNTIME_DEFAULTS, RUNTIME_STATE_POLICY, RUNTIME_TO_FORMAT, RawStateResultSchema, ReadGopBytesResultSchema, ReadSegmentBytesResultSchema, ReadinessRegistry, ReadinessTimeoutError, RecentTracksPageSchema, RecentTracksQueryInput, RecordingAvailabilitySchema, RecordingBandModeSchema, RecordingBandSchema, RecordingBandTriggersSchema, RecordingConfigSchema, RecordingDaysSchema, RecordingDeviceUsageSchema, RecordingLocationUsageSchema, RecordingManifestSchema, RecordingRangeSchema, RecordingRebalanceInputSchema, RecordingRebalanceMoveSchema, RecordingRebalancePlanSchema, RecordingRebalanceSkipReasonSchema, RecordingRebalanceSkipSchema, RecordingRetentionSchema, RecordingStatusSchema, RecordingStorageModeSchema, RecordingStorageUsageSchema, RecordingTriggersSchema, RecordingWeekdaySchema, RedirectLoginMethodSchema, RelocateFootageClassSchema, RelocateFootageInputSchema, RelocateJobSchema, RelocateJobStateSchema, RelocateMediaInputSchema, RenderedAsSchema, ReportMotionInputSchema, RetrainAnnotationDraftSchema, RetrainAnnotationKindSchema, RetrainAnnotationSchema, RetrainAnnotationSourceSchema, RetrainAssistResultSchema, RetrainAssistSubjectSchema, RetrainCopyRefusalSchema, RetrainFrameCandidateSchema, RetrainFrameListSchema, RetrainFrameSchema, RetrainFrameSelectionSchema, RetrainMacroClassSchema, RetrainStatusSchema, RetrainTrackSchema, RetrainTransitionResultSchema, RingBuffer, RtpSourceSchema, RtspRestreamEntrySchema, RunnerCameraConfigSchema, RunnerCameraDeviceUIFields, RunnerFrameSourceSchema, RunnerInferenceDeviceSchema, RunnerLocalLoadSchema, RunnerLocalMetricsSchema, SCENE_CONDITIONS, SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX, SCENE_CONFIRM_DEFAULT_TIMEOUT_MS, SCENE_DEFAULT_ANCHOR_THRESHOLD, SCENE_DEFAULT_CHECK_INTERVAL_SEC, SCENE_DEFAULT_OBSERVATION_SPACING_SEC, SCENE_DEFAULT_QUIET_SECONDS, SCENE_DEFAULT_UNCOVERED_POLICY, SCENE_DIVERGED, SCENE_RESET_RECAPTURES, SCOPE_PRESETS, SCRUB_THUMBNAIL_PRESETS, SCRUB_THUMBNAIL_PRESET_LABELS, SCRUB_THUMBNAIL_PRESET_ORDER, SENSOR_FEATURES, SENSOR_MAP, SOURCE_INFO_METADATA_KEY, STREAM_PROFILE_META, STREAM_QUALITY_LABELS, SUB_DETECTION_TYPES, SYSTEM_CAP_NAMES, SYSTEM_SCOPE_DEVICE_METHODS, SceneCheckSchema, SceneConditionSchema, SceneConfirmSchema, SceneMonitorSchema, SceneMonitorStateSchema, SceneMonitorStatusSchema, SceneReferenceSchema, SceneUnavailableSchema, SceneUncoveredPolicySchema, SceneVerdictSchema, ScopedTokenSchema, ScopedTokenSummarySchema, ScoredObjectEventSchema, ScriptRunnerStatusSchema, ScrubThumbnailPresetSchema, SearchResultSchema, SendEmailInputSchema, SendEmailResultSchema, SendResultSchema, SensorEventSchema, ServerBootModeSchema, ServerPackageStatusSchema, ServerRollbackInfoSchema, ServerUpdateActionResultSchema, ServerUpdateCheckResultSchema, ServerUpdateStateSchema, SetSiteLocationInputSchema, SettingsPatchSchema, SettingsRecordSchema, SettingsSchemaWithValuesSchema, SettingsUpdateResultSchema, ShmRingStatsSchema, SiteLocationSchema, SiteLocationSourceSchema, SiteLocationStatusSchema, SmokeStatusSchema, SmtpStatusSchema, SnapshotImageSchema, SourceInfoSchema, SpatialDetectionSchema, SsoBridgeClaimsSchema, StartEmbeddedInputSchema, StationaryObjectSchema, AbortUploadInputSchema as StorageAbortUploadInputSchema, BeginDownloadInputSchema as StorageBeginDownloadInputSchema, BeginDownloadResultSchema as StorageBeginDownloadResultSchema, BeginUploadInputSchema as StorageBeginUploadInputSchema, BeginUploadResultSchema as StorageBeginUploadResultSchema, EndDownloadInputSchema as StorageEndDownloadInputSchema, FinalizeUploadInputSchema as StorageFinalizeUploadInputSchema, StorageLocationDeclarationSchema, StorageLocationRefSchema, StorageLocationSchema, StorageLocationTypeSchema, StorageMigrationClassSchema, StorageMigrationDestinationsSchema, StorageMigrationFootageMoveInputSchema, StorageMigrationInputSchema, StorageMigrationJobSchema, StorageMigrationLeaseInputSchema, StorageMigrationMediaMoveInputSchema, StorageMigrationMoveSchema, StorageMigrationParticipantSchema, StorageMigrationPhaseSchema, StorageMigrationPlanSchema, ProviderInfoSchema as StorageProviderInfoSchema, ReadChunkInputSchema as StorageReadChunkInputSchema, TestLocationResultSchema as StorageTestLocationResultSchema, WriteChunkInputSchema as StorageWriteChunkInputSchema, StreamCodecSchema, StreamFormatSchema, StreamNetworkStatsSchema, StreamParamsOptionsSchema, StreamParamsStatusSchema, StreamProfileConfigSchema, StreamProfileOptionsSchema, StreamProfilePatchSchema, StreamProfileSchema, StreamSourceEntrySchema, StreamSourceSchema, SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, SubscribeFramesInputSchema, SubscribeFramesResultSchema, SwitchStatusSchema, SystemMetricsSchema, SystemMirror, TAXONOMY_COLORS, TIMELAPSE_DENSE_FLOOR_SEC, TIMEZONES, TRANSCODE_DOWN_MAX_BITRATE_KBPS, TRANSCODE_DOWN_MAX_HEIGHT, TamperStatusSchema, TankStatusSchema, TargetKindCapsSchema, TargetKindLevelSchema, TargetKindSchema, TargetSchema, TemperatureSensorStatusSchema, TerminalInstanceInfoSchema, TerminalLegacyCameraSchema, TerminalOutputBatchSchema, TerminalOutputEventSchema, TerminalProfileInfoSchema, TerminalSessionInfoSchema, TestConnectionResultSchema$1 as TestConnectionResultSchema, TestConnectionStatusEnum, TestResultSchema, TimelapseRuleInputSchema, TimelapseRulePatchSchema, TimelapseRuleSchema, TimelapseTemplateSchema, ToastSchema, TokenScopeSchema, TopologyNodeSchema, TopologyProcessSchema, TopologyServiceSchema, TrackCascadeCountsSchema, TrackEnvelopeSchema, TrackFlagsPatchSchema, TrackFlagsSchema, TrackProjectionSchema, TrackSchema, TrackSourceSchema, TrackStateSchema, TrackZoneFilterSchema, TrackedDetectionSchema, TrainingExportDeviceTotalsSchema, TrainingExportSummarySchema, TurnServerSchema, UNIT_TABLE, BrokerInfoSchema$1 as UnifiedBrokerInfoSchema, UnitConversionError, UpdateIntegrationInputSchema, UpdateStatusSchema, UpdateUserInputSchema, UserRecordSchema, UserSummarySchema, VISIT_MERGE_GAP_MS, VacuumControlStatusSchema, VacuumStateSchema, ValveStateSchema, ValveStatusSchema, VectorDeclareIndexInputSchema, VectorDeleteByFilterInputSchema, VectorDeleteInputSchema, VectorDeleteResultSchema, VectorFilterSchema, VectorGetInputSchema, VectorGetResultSchema, VectorItemSchema, VectorMatchSchema, VectorMetadataSchema, VectorMetricSchema, VectorQueryInputSchema, VectorQueryResultSchema, VectorStatsInputSchema, VectorStatsResultSchema, VectorUpsertInputSchema, VectorUpsertResultSchema, VibrationStatusSchema, VideoEncodeSchema, WEBRTC_EGRESS_PROFILE, WELL_KNOWN_TABS, WELL_KNOWN_TAB_MAP, WaterHeaterStatusSchema, WeatherStatusSchema, WebrtcStreamChoiceSchema, WebrtcStreamTargetSchema, WhiteBalanceModeSchema, WidgetHostEnum, WidgetLoginMethodSchema, WidgetMetadataSchema, WidgetRemoteSchema, WidgetSizeEnum, YAMNET_TO_MACRO, ZoneCrossingDirectionSchema, ZoneCrossingSchema, ZoneKindEnum, ZoneRuleModeEnum, ZoneRuleSchema, ZoneRuleStageEnum, ZoneRulesArraySchema, ZoneSchema, ZoneScopeBreakdownSchema, accessoriesCapability, accessoryStableId, addonPagesCapability, addonPagesSourceCapability, addonRoutesCapability, addonSettingsCapability, addonWidgetsCapability, addonWidgetsSourceCapability, addonsCapability, adminUiCapability, airQualitySensorCapability, alarmPanelCapability, alertsCapability, ambientLightSensorCapability, asBoolean, asJsonArray, asJsonObject, asNumber, asString, assertTimelapseCadences, audioAnalysisCapability, audioAnalyzerCapability, audioCodecCapability, audioIsFailClosed, audioKindId, audioLabelChoices, audioMetricsCapability, audioModeOf, audioOrDefaults, audioPlanFromEncodeProfile, authProviderCapability, autoAssignProfiles, automationControlCapability, backupCapability, bareAddonId, batteryCapability, bestLocationMatch, binaryCapability, bindAddonActions, brightnessCapability, brokerCapability, buildAddonRouteProvider, buildAudioArgs, buildEventKindDescriptor, buildFfmpegArgs, buildInputArgs, buildModelVariantGroups, buildNcTaxonomy, buildRoleScopes, buildStreamParamsConfigSchema, buildVideoArgs, buttonCapability, cameraCredentialsCapability, cameraPipelineConfigCapability, cameraStreamsCapability, canConvertUnit, canonicalEgressPlan, carbonMonoxideCapability, cellsToRects, classifyBearerPrincipal, classifyStream, classifyStreams, climateControlCapability, clusterModelSettingKey, collectHydratedFieldEntries, collectHydratedFieldValues, colorCapability, colorForKind, commitWatchdogRestart, compileExpression, compileExpressionSafe, composeSwitchedOff, conditionDepth, conditionExclusionReason, conditionVisibleForKind, connectionTestCapability, connectivityCapability, consumablesCapability, contactCapability, controlCapability, convertUnit, coreBlockAddonId, coreBlockIdFromAddonId, coreBlocksCapability, cosineSimilarity, countConditionLeaves, coverCapability, createDeviceProxy, createDurableState, createEvent, createExpressionScope, createHwAccelCache, createLazyTrpcSource, createMirrorSource, createRuntimeStateBridge, createSliceHandle, createSystemProxy, customAction, customModelRegistryCapability, dataStoreProviderCapability, dayNightCapability, declarationOwnerNodeId, decodeVectorBase64, decoderCapability, defaultDeliveryForSection, defaultDeviceFor, defineCustomActions, deriveBatteryPresence, deriveCameraSwitches, deriveDetailCropRect, deriveRecordingMode, describeModelVariant, detectAccessRole, detectionPipelineCapability, deviceAdoptionCapability, deviceBackendToFormat, deviceCustomAction, deviceDiscoveryCapability, deviceExportCapability, deviceManagerCapability, deviceMatchesProfile, deviceOpsCapability, deviceProviderCapability, deviceSelectorMatches, deviceStateCapability, deviceStatusCapability, doorbellCapability, droppedConditionsForKind, egressTranscodeSharingKey, egressTransportFromRequest, embeddingEncoderCapability, emitDownForOwnedCaps, emitReadiness, encodeProfileFromStreamShape, encodeVectorBase64, enumSensorCapability, enumerateInferenceDevices, enumerateItemArrayFields, enumerateSchemaFields, errMsg, evaluateAst, evaluateExpressionSource, evaluatePoolMemory, evaluateZoneRules, event, eventEmitterCapability, eventsCapability, expandCapMethods, extractNestedAddonId, extractSourceInfoFromMetadata, faceGalleryCapability, fanControlCapability, featureProbeCapability, filesystemBrowseCapability, findTimezone, floodCapability, formatForBackend, formatForRuntime, gasCapability, generateAutomationBlock, getAudioMacroClassIds, getByPath, getCapsByProviderKind, getTaxonomyEntry, hasMotionTrigger, hfModelUrl, htmlToText, humidifierCapability, humiditySensorCapability, hydrateSchema, imageCapability, imageSettingsCapability, initialPoolMemoryState, integrationsCapability, intercomCapability, invocationFromEncodeProfile, isAgentOnlyPlacement, isArrayOutputSchema, isAudioLabelSelected, isAudioRule, isBaseConditionKey, isBatteryPresenceFault, isClusterScopedStep, isCollectionArrayMethod, isDeployableToAgent, isDetectionMacroClass, isDeviceConfigCap, isDeviceScopedCap, isEvent, isIsolatedBuiltin, isNode, isObjectInput, isOccupancyRule, isRestoredCap, isSameAddonId, isScheduleActive, isSoftwareDecode, isSystemDelivery, isVoidInput, jobKindSchema, kebabToCamel, knownValues, lawnMowerControlCapability, lifecycleJobSchema, lifecycleJobScopeSchema, lifecycleJobStateSchema, lifecycleTaskSchema, llmCapability, llmRuntimeCapability, localNetworkCapability, locationSimilarity, lockControlCapability, logBannerArgs, logDestinationCapability, logLevelAtMost, loginMethodCapability, looseSchema, makeProfileBrokerId, makeSourceBrokerId, mapAudioLabelToMacro, markdownToHtmlLite, markdownToText, maskUrlCredentials, mediaPlayerCapability, mergeSourceInfo, meshNetworkCapability, method, methodAccessForHttpMethod, metricsProviderCapability, modelConvertCapability, modelDistributorCapability, modelFormatForRuntime, motionCapability, motionDetectionCapability, motionTriggerCapability, motionZonesCapability, mqttBrokerCapability, nativeObjectDetectionCapability, networkAccessCapability, networkQualityCapability, nodePin, nodesCapability, normalizeAddonInitResult, normalizeAudioLabel, normalizeTokenScopes, normalizeUnit, notificationOutputCapability, notificationRulesCapability, notifierCapability, numericSensorCapability, oauthIntegrationCapability, objectInputDeclaresAddonId, osdCapability, osdManagerCapability, parseCameraStreamConfig, parseExpression, parseJsonArray, parseJsonObject, parseJsonUnknown, parseProcStatus, parseProfileBrokerId, parseRuleSection, parseStreamParamsFormPatch, patchAudio, petFeederCapability, pickAccessoryControl, pickClusterStepModels, pickDetailCropConvention, pickNativeLeaseOverride, pickPreferredRtspEntry, pickRestartCandidate, pickVideoEncoder, pickerForCondition, pipelineAnalyticsCapability, pipelineExecutorCapability, pipelineOrchestratorCapability, pipelineRunnerCapability, plateGalleryCapability, platformProbeCapability, poolMemoryThreshold, powerMeterCapability, prepareNotification, presenceCapability, pressureSensorCapability, principalMayReachAddon, privacyMaskCapability, procedureAuthKey, ptzAutotrackCapability, ptzCapability, pythonScriptForBackend, readClusterStepModels, readDetailCropConvention, readDeviceStateFrom, readNativeLeaseOverride, readNodePin, readTimelapseGeneratedAt, readinessKey, rebootCapability, recordingCapability, recordingExportCapability, rectsToCells, requiresPython, resetPoolBaseline, resolveAddonExecution, resolveAddonGroup, resolveAddonPlacement, resolveAddonRuntime, resolveCapMount, resolveClusterStepModelId, resolveDetectionRuntime, resolveDeviceControlKind, resolveDeviceProfile, resolveEgressDecodeHwAccel, resolveFormat, resolveHydratedFieldValue, resolveModelFormat, resolveMutate, resolvePoolMemoryPolicy, resolveRecordingProfiles, resolveRunnerId, resolveScrubThumbnailGeometry, resolveVariantModelId, resolveViewableDeviceIds, roleSpec, ruleEditorSectionsForKind, ruleKindOf, ruleKindSpec, ruleMatchesSection, ruleSection, ruleSectionOf, ruleSeedForSection, runInferenceStep, runtimeDevices, runtimeStatePolicyFor, sceneMonitorCapability, scopeInherits, scopeKey, scopesAllowAddon, scopesAllowDeviceCap, scoreRuntimes, scriptRunnerCapability, selectAssignedProfileSlots, serverManagementCapability, setByPath, settingsStoreCapability, sleep, sleepCancellable, smokeCapability, smtpProviderCapability, snapshotCapability, ssoBridgeCapability, startReachabilityPoll, stateVocabularyFor, storageCapability, storageEvictableCapability, storageMigrationCapability, storageProviderCapability, streamBrokerCapability, streamCatalogCapability, streamParamsCapability, streamPixels, streamQualityLabel, subKindsOf, summarisePrivacyAudio, summarizeEffectiveScope, supportedRuntimes, switchCapability, switchedOffIds, synthesizeSourceInfo, systemCapability, systemEventFilterApplies, systemEventFilterAppliesToAnyKind, tamperCapability, taskLogEntrySchema, taskPhaseSchema, taskTargetSchema, temperatureSensorCapability, terminalSessionCapability, textToHtml, toDeviceSummary, toExpressionValue, toNodeId, toStreamSourceEntry, toastCapability, toggleAudioLabel, tokenize, transcodeBody, tryConvertUnit, turnProviderCapability, unitDimension, unitsForDimension, updateCapability, userManagementCapability, userPasskeysCapability, vacuumControlCapability, validateExpressionSource, validateRecipeBounds, valveCapability, vectorDimFromBase64, vectorStoreCapability, vibrationCapability, videoclipsCapability, viewerUiCapability, waterHeaterCapability, weatherCapability, webrtcClientHintsSchema, webrtcSessionCapability, wiringAddonHealthSchema, wiringHealthSnapshotSchema, wiringNodeHealthSchema, wiringProbeKindSchema, wiringProbeResultSchema, zodEntriesToConfigUI, zoneAnalyticsCapability, zoneRulesCapability, zonesCapability };
|
|
@@ -111,12 +111,25 @@ export type RecordingBand = z.infer<typeof RecordingBandSchema>;
|
|
|
111
111
|
* segment is ever finalized and the camera records nothing anyway. At the 10 s
|
|
112
112
|
* default segment length, 30 s leaves room for two full segments. `preBufferSec`
|
|
113
113
|
* is retroactive only — it costs nothing at record time, it merely keeps
|
|
114
|
-
* already-written segments
|
|
114
|
+
* already-written segments.
|
|
115
115
|
*
|
|
116
|
-
*
|
|
116
|
+
* ## Why `preBufferSec` is 15 and not one segment length
|
|
117
|
+
*
|
|
118
|
+
* It has to cover the broker's RECORDING pre-roll, which is media handed to the
|
|
119
|
+
* writer from BEFORE the trigger (D192/D193). If this bound were narrower, the
|
|
120
|
+
* keep gate would delete the very seconds the ring just supplied — two
|
|
121
|
+
* authorities disagreeing about the same footage, which is the failure D191 was
|
|
122
|
+
* written against. It is therefore set to `RECORDING_PRE_ROLL_MAX_MS` (15 s),
|
|
123
|
+
* the widest window the broker can be configured to serve, so an operator
|
|
124
|
+
* raising the cluster pre-roll can never walk past the gate silently. The
|
|
125
|
+
* addon-side guard is
|
|
126
|
+
* `packages/addon-pipeline/src/recorder/addon/__tests__/band-decision.spec.ts`.
|
|
127
|
+
*
|
|
128
|
+
* An EXPLICIT `0` is left alone: that is an operator statement, not an omission,
|
|
129
|
+
* and it is excluded from that invariant by name.
|
|
117
130
|
*/
|
|
118
131
|
export declare const DEFAULT_EVENTS_BAND_BUFFER_SEC: {
|
|
119
|
-
readonly preBufferSec:
|
|
132
|
+
readonly preBufferSec: 15;
|
|
120
133
|
readonly postBufferSec: 30;
|
|
121
134
|
};
|
|
122
135
|
export type DefaultEventsBandBufferSec = typeof DEFAULT_EVENTS_BAND_BUFFER_SEC;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How a step's model is chosen.
|
|
3
|
+
*
|
|
4
|
+
* - `'node'` — per (node, device). Free to differ across the fleet.
|
|
5
|
+
* - `'cluster'` — ONE value for the whole cluster. The step writes into a
|
|
6
|
+
* shared vector index, so two values would put two incomparable feature
|
|
7
|
+
* spaces in it with nothing in the data to show it.
|
|
8
|
+
*
|
|
9
|
+
* Absent on a {@link import('../types/pipeline-step.js').StepDefinition} means
|
|
10
|
+
* `'node'`, which is the safe reading: a step that never declared a scope has
|
|
11
|
+
* never had a cluster-wide row to read.
|
|
12
|
+
*/
|
|
13
|
+
export type StepModelScope = 'node' | 'cluster';
|
|
14
|
+
/** One selectable model for a cluster-scoped step. */
|
|
15
|
+
export interface ClusterModelOption {
|
|
16
|
+
readonly id: string;
|
|
17
|
+
readonly label: string;
|
|
18
|
+
}
|
|
19
|
+
/** One cluster-scoped step, as every non-pipeline package sees it. */
|
|
20
|
+
export interface ClusterModelScopedStep {
|
|
21
|
+
readonly stepId: string;
|
|
22
|
+
/** Operator-facing label for the settings row. */
|
|
23
|
+
readonly label: string;
|
|
24
|
+
/**
|
|
25
|
+
* The model in force when nobody has chosen — the step's catalog
|
|
26
|
+
* `defaultModelId`, so declaring the scope is behaviour-neutral.
|
|
27
|
+
*/
|
|
28
|
+
readonly defaultModelId: string;
|
|
29
|
+
/** The index a change invalidates, named in the operator-facing description. */
|
|
30
|
+
readonly indexName: string;
|
|
31
|
+
/**
|
|
32
|
+
* The choosable models, mirrored from the step's catalog (non-`legacy`
|
|
33
|
+
* entries) and guarded by `scripts/check-cluster-model-scope.ts`.
|
|
34
|
+
*
|
|
35
|
+
* Mirrored rather than derived because the orchestrator renders this dropdown
|
|
36
|
+
* and may not import an addon. A free-text field would have been less code
|
|
37
|
+
* and strictly worse: a typo there is not a validation error, it is a model
|
|
38
|
+
* that every node refuses, cluster-wide, and the symptom is "recognition
|
|
39
|
+
* stopped" with no bad value in sight.
|
|
40
|
+
*/
|
|
41
|
+
readonly options: readonly ClusterModelOption[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The cluster-scoped steps. Mirrored from the catalog's `modelScope: 'cluster'`
|
|
45
|
+
* declarations and guarded by `scripts/check-cluster-model-scope.ts`.
|
|
46
|
+
*/
|
|
47
|
+
export declare const CLUSTER_MODEL_SCOPED_STEPS: readonly ClusterModelScopedStep[];
|
|
48
|
+
/**
|
|
49
|
+
* Store identity of the cluster row inside `pipeline-orchestrator`'s GLOBAL
|
|
50
|
+
* (cluster-wide) settings — the same owner, and for the same reason, as the
|
|
51
|
+
* detail-crop convention: hub-resident and neutral between the addons that
|
|
52
|
+
* read it.
|
|
53
|
+
*/
|
|
54
|
+
export declare const CLUSTER_MODEL_SECTION_ID = "cluster-step-models";
|
|
55
|
+
/**
|
|
56
|
+
* The settings key holding one step's cluster model choice.
|
|
57
|
+
*
|
|
58
|
+
* Step-qualified so the keys stay unique across the addon's whole schema, which
|
|
59
|
+
* is what lets {@link pickClusterStepModels} walk every section instead of
|
|
60
|
+
* trusting the section id.
|
|
61
|
+
*/
|
|
62
|
+
export declare function clusterModelSettingKey(stepId: string): string;
|
|
63
|
+
/** True when this step's model is a cluster-wide choice rather than a per-node one. */
|
|
64
|
+
export declare function isClusterScopedStep(stepId: string): boolean;
|
|
65
|
+
/** `stepId → modelId` for every cluster-scoped step. Total: never missing a key. */
|
|
66
|
+
export type ClusterStepModels = Readonly<Record<string, string>>;
|
|
67
|
+
/** The cluster row when nobody has configured one — today's catalog defaults. */
|
|
68
|
+
export declare const DEFAULT_CLUSTER_STEP_MODELS: ClusterStepModels;
|
|
69
|
+
/**
|
|
70
|
+
* Narrow a FLAT settings record to the cluster row.
|
|
71
|
+
*
|
|
72
|
+
* Per-FIELD fallback, deliberately (same rule as `readDetailCropConvention`): a
|
|
73
|
+
* junk face model must not also discard a valid clip model. An absent, empty or
|
|
74
|
+
* non-string value resolves to the step's catalog default — the historical
|
|
75
|
+
* behaviour — never to a blank id, because a blank id downstream becomes
|
|
76
|
+
* "substitute the format default", which is precisely the substitution this
|
|
77
|
+
* scope exists to forbid.
|
|
78
|
+
*/
|
|
79
|
+
export declare function readClusterStepModels(config: Readonly<Record<string, unknown>>): ClusterStepModels;
|
|
80
|
+
/** One section of an `addon-settings.getGlobalSettings` payload. */
|
|
81
|
+
export interface HydratedClusterSection {
|
|
82
|
+
readonly fields: readonly unknown[];
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Minimal structural view of `ConfigUISchemaWithValues` — only what this walk
|
|
86
|
+
* needs. Structural on purpose: the readers are addons that must not depend on
|
|
87
|
+
* the writer's schema type.
|
|
88
|
+
*/
|
|
89
|
+
export interface HydratedClusterView {
|
|
90
|
+
readonly sections: readonly HydratedClusterSection[];
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Extract the cluster row from an `addon-settings.getGlobalSettings` payload.
|
|
94
|
+
*
|
|
95
|
+
* Walks EVERY section rather than looking inside {@link CLUSTER_MODEL_SECTION_ID}
|
|
96
|
+
* alone: the keys are unique across the addon's schema, and a section rename
|
|
97
|
+
* must not silently revert the whole cluster to the defaults. A `null` payload
|
|
98
|
+
* (addon mid-boot) is the defaults.
|
|
99
|
+
*/
|
|
100
|
+
export declare function pickClusterStepModels(view: HydratedClusterView | null): ClusterStepModels;
|
|
101
|
+
/**
|
|
102
|
+
* The cluster model for `stepId`, or `null` when the step is node-scoped.
|
|
103
|
+
*
|
|
104
|
+
* `null` is the signal to LEAVE THE CALLER'S RESOLUTION ALONE — it is not "no
|
|
105
|
+
* model". Returning a default here for a node-scoped step would quietly
|
|
106
|
+
* override every per-(node,device) selection in the fleet.
|
|
107
|
+
*/
|
|
108
|
+
export declare function resolveClusterStepModelId(stepId: string, models: ClusterStepModels): string | null;
|
|
@@ -95,6 +95,25 @@ export interface HydratedSettingsView {
|
|
|
95
95
|
* (addon mid-boot) is the default convention.
|
|
96
96
|
*/
|
|
97
97
|
export declare function pickDetailCropConvention(view: HydratedSettingsView | null): DetailCropConvention;
|
|
98
|
+
/**
|
|
99
|
+
* The normalised box that means "the image IS the subject".
|
|
100
|
+
*
|
|
101
|
+
* Used when the stored pixels are ALREADY the model's input — the 112×112
|
|
102
|
+
* aligned face template a gallery sample carries. There is no rectangle left to
|
|
103
|
+
* choose, and the convention must not choose one: re-detecting and re-aligning
|
|
104
|
+
* over a template applies a SECOND warp, passes every gate, and produces a
|
|
105
|
+
* plausible useless vector (session 2026-08-20 §3).
|
|
106
|
+
*
|
|
107
|
+
* Sending it as the whole frame with this box is exact rather than merely
|
|
108
|
+
* convenient, and the reason is a property of {@link deriveDetailCropRect}, not
|
|
109
|
+
* a coincidence: padding a full-frame box can only push OUTSIDE the frame, and
|
|
110
|
+
* both edge modes bring it straight back — unsquared truncates, squared cannot
|
|
111
|
+
* exceed the frame's short side and then slides inside. So for a SQUARE image
|
|
112
|
+
* the derivation is the identity under every convention value, and an operator
|
|
113
|
+
* changing the crop margin cannot silently re-cut an enrolled template.
|
|
114
|
+
* `face-reembed-pass.spec.ts` asserts that identity against the real function.
|
|
115
|
+
*/
|
|
116
|
+
export declare const FULL_IMAGE_BBOX: DetailCropRect;
|
|
98
117
|
/** Slider bounds for the operator-facing padding knob (orchestrator settings UI). */
|
|
99
118
|
export declare const DETAIL_CROP_PADDING_FIELD: {
|
|
100
119
|
readonly min: 0;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ConfigField } from '../interfaces/config-ui.js';
|
|
2
|
+
import type { StepModelScope } from '../pipeline/cluster-model-scope.js';
|
|
2
3
|
import type { ClassMapDefinition } from './labels.js';
|
|
3
4
|
import type { ModelCatalogEntry } from './models.js';
|
|
4
5
|
import type { PipelineSlot } from './pipeline.js';
|
|
@@ -12,7 +13,7 @@ export interface IPipelineStep {
|
|
|
12
13
|
readonly definition: StepDefinition;
|
|
13
14
|
getConfigSchema(): readonly ConfigField[];
|
|
14
15
|
}
|
|
15
|
-
export type PostprocessorType = 'yolo' | 'ssd' | 'rfdetr' | 'yolo-seg' | 'scrfd' | 'arcface' | 'clip' | 'softmax' | 'ctc' | 'saliency' | 'yamnet';
|
|
16
|
+
export type PostprocessorType = 'yolo' | 'ssd' | 'rfdetr' | 'yolonas' | 'yolo-seg' | 'scrfd' | 'arcface' | 'clip' | 'softmax' | 'ctc' | 'plate-slots' | 'saliency' | 'yamnet';
|
|
16
17
|
export interface StepDefinition {
|
|
17
18
|
/** Unique step identifier (e.g., 'object-detection', 'face-detection') */
|
|
18
19
|
readonly id: string;
|
|
@@ -75,6 +76,27 @@ export interface StepDefinition {
|
|
|
75
76
|
* duplicating the step definition per engine.
|
|
76
77
|
*/
|
|
77
78
|
readonly defaultModelIdByFormat?: Readonly<Record<string, string>>;
|
|
79
|
+
/**
|
|
80
|
+
* WHOSE choice this step's model is — see
|
|
81
|
+
* [`pipeline/cluster-model-scope.ts`](../pipeline/cluster-model-scope.ts).
|
|
82
|
+
*
|
|
83
|
+
* - `'node'` (the default when absent) — per (node, device). Two nodes may
|
|
84
|
+
* answer differently because nothing compares their outputs: a box is a
|
|
85
|
+
* box.
|
|
86
|
+
* - `'cluster'` — ONE value for the whole cluster, stored in ONE
|
|
87
|
+
* `pipeline-orchestrator` global row. Declared by a step that writes into a
|
|
88
|
+
* SHARED VECTOR INDEX (`face-embedding` → the enrolled gallery,
|
|
89
|
+
* `clip-embedding` → `vec_object_clip`), where a second model does not
|
|
90
|
+
* degrade the ranking, it makes it meaningless — and nothing inside a
|
|
91
|
+
* vector can reveal which encoder produced it.
|
|
92
|
+
*
|
|
93
|
+
* A `'cluster'` declaration changes the RESOLUTION RULE, not just the storage:
|
|
94
|
+
* a node whose format ships no build of the chosen model REFUSES the step and
|
|
95
|
+
* logs it, where a node-scoped step would substitute that format's default
|
|
96
|
+
* ([D54](../../../../docs/decisions/adr-0056.md)). Substituting is what fills
|
|
97
|
+
* one index from several encoders.
|
|
98
|
+
*/
|
|
99
|
+
readonly modelScope?: StepModelScope;
|
|
78
100
|
/**
|
|
79
101
|
* Whether a newly-seeded agent has this addon enabled by default.
|
|
80
102
|
* Absent = `true`. Operators can always toggle this after boot; this
|
|
@@ -135,6 +157,14 @@ export interface StepDefinition {
|
|
|
135
157
|
* `DEFAULT_MIN_TEXT_CONFIDENCE` (0, disabled).
|
|
136
158
|
*/
|
|
137
159
|
readonly minTextConfidence?: number;
|
|
160
|
+
/**
|
|
161
|
+
* Plausibility gate for a FIXED-SLOT plate reader (`plate-slots`): the
|
|
162
|
+
* minimum probability the WEAKEST emitted character must carry. It replaces
|
|
163
|
+
* {@link minTextLength}, which carries no information for a reader that emits
|
|
164
|
+
* a full-length string on every input including a blank wall. Forwarded to
|
|
165
|
+
* the Python postprocessor; absent ⇒ its `DEFAULT_MIN_CHAR_PROBABILITY`.
|
|
166
|
+
*/
|
|
167
|
+
readonly minCharProbability?: number;
|
|
138
168
|
/** COCO-to-macro class mapping (e.g., 'car' → 'vehicle') */
|
|
139
169
|
readonly classMap?: ClassMapDefinition;
|
|
140
170
|
/** UI grouping label — steps with the same group are displayed together (e.g., 'Segmentation') */
|
|
@@ -234,6 +264,11 @@ export interface PoolModelConfig {
|
|
|
234
264
|
readonly minTextLength?: number;
|
|
235
265
|
/** Plate-OCR plausibility gate: confidence floor. */
|
|
236
266
|
readonly minTextConfidence?: number;
|
|
267
|
+
/**
|
|
268
|
+
* Fixed-slot plate-OCR gate: minimum per-character probability. See
|
|
269
|
+
* {@link StepDefinition.minCharProbability}.
|
|
270
|
+
*/
|
|
271
|
+
readonly minCharProbability?: number;
|
|
237
272
|
/** Number of classes (for YOLO: 80 COCO or 1 for plate) */
|
|
238
273
|
readonly numClasses?: number;
|
|
239
274
|
/** Anchor strides for SCRFD (default [8, 16, 32]) */
|