@camstack/types 1.2.429 → 1.2.431
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/CHANGELOG.md +13 -0
- package/dist/addon.js +4 -3
- package/dist/addon.mjs +4 -3
- package/dist/automation/action.d.ts +210 -0
- package/dist/automation/condition-eval.d.ts +64 -0
- package/dist/automation/detection-trigger.d.ts +66 -0
- package/dist/automation/index.d.ts +12 -2
- package/dist/automation/recipe.d.ts +103 -1
- package/dist/automation/run-gate.d.ts +43 -0
- package/dist/automation/step-runner.d.ts +82 -0
- package/dist/automation/trace.d.ts +325 -0
- package/dist/capabilities/action-source.cap.d.ts +74 -0
- package/dist/capabilities/actions.cap.d.ts +459 -0
- package/dist/capabilities/core-blocks.cap.d.ts +761 -0
- package/dist/capabilities/index.d.ts +5 -1
- package/dist/client.js +73 -49
- package/dist/client.mjs +73 -49
- package/dist/enums/event-category.d.ts +5 -0
- package/dist/enums.js +1 -1
- package/dist/enums.mjs +1 -1
- package/dist/{event-category-Ave2VSxY.js → event-category-BhzwWQCH.js} +5 -0
- package/dist/{event-category-CT-hz5Rb.mjs → event-category-hdMR7CTW.mjs} +5 -0
- package/dist/generated/addon-api.d.ts +135 -0
- package/dist/generated/capability-router-map.d.ts +10 -4
- package/dist/generated/collection-array-methods.d.ts +1 -1
- package/dist/generated/device-proxy.d.ts +2 -0
- package/dist/generated/method-access-map.d.ts +1 -1
- package/dist/generated/method-device-selectors.d.ts +2 -2
- package/dist/generated/system-proxy.d.ts +5 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.js +2849 -579
- package/dist/index.mjs +2792 -580
- package/dist/interfaces/config-ui.d.ts +7 -0
- package/dist/{sleep-hRhTSDlN.js → sleep-5zRztaHa.js} +12 -2
- package/dist/{sleep-BE7IAR2p.mjs → sleep-BHjNez61.mjs} +12 -2
- package/dist/vendor-login-proxy/index.d.ts +2 -0
- package/dist/vendor-login-proxy/login-proxy.d.ts +55 -0
- package/dist/vendor-login-proxy/url-rewrite.d.ts +68 -0
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { $ as expandCapMethods, $n as REVALIDATE_AFTER_MS, $r as isSecretMarker, $t as RecordFieldPathSchema, A as HF_REPO, An as RecordUniqueViolationError, Ar as buildSecretRef, At as StreamSourceEntrySchema, B as withoutCallerStamp, Bn as RECORD_CLASSES, Br as isEvent, Bt as QUANTITY_BASE, Cn as InvalidRecordError, Cr as KeychainWriteRefusedError, Ct as CamStreamResolutionSchema, D as createSliceHandle, Dn as RecordNotFoundError, Dr as transformSecretWrite, Dt as ProfileRtspEntrySchema, E as createMirrorSource, En as RECORDS_ERROR_CODES, Er as resolveSecretMarkers, Et as FrameHandleSchema, F as RawStateResultSchema, Fn as UnknownRecordKindError, Fr as parseSecretRef, Ft as makeSourceBrokerId, G as adminUiCapability, Gn as RECORD_MAX_DATA_BYTES, Gr as dehydrateConfigField, Gt as isReadingQuantity, H as defineCustomActions, Hn as RECORD_DEFAULT_MAX_DATA_BYTES, Hr as WELL_KNOWN_TAB_MAP, Ht as baseUnitOf, I as deviceOpsCapability, In as asRecordsError, Ir as normalizeNodeId, It as parseProfileBrokerId, J as DEVICE_STATUS_METHOD, Jn as RECORD_QUERY_MAX, Jr as resolveHydratedFieldValue, Jt as defineEntryKind, K as DEFAULT_RUNTIME_STATE_DURABILITY, Kn as RECORD_MAX_INDEXES, Kr as dehydrateSchema, Kt as readingMeta, L as viewerUiCapability, Ln as recordsErrorFromMessage, Lr as createDurableState, Lt as selectAssignedProfileSlots, Mn as RevConflictError, Mr as globalSecretScope, Mt as SubscribeAudioChunksInputSchema, N as CAP_NAMES, Nn as TransactRefusedError, Nr as isSecretRef, Nt as SubscribeAudioChunksResultSchema, O as DEFAULT_TOKEN_EXPIRY, On as RecordSecretUnavailableError, Or as SECRET_REF_SCHEME, Ot as ProfileSlotSchema, Pn as UnindexedFilterError, Pr as normalizeSecretOwner, Pt as makeProfileBrokerId, Q as event, Qn as resolveSecretViewsIn, Qr as isSecretFieldView, Qt as EntryDescriptorSchema, R as DEVICE_CHILDREN_BATCH_MAX, Rn as RECORD_BATCH_MAX, Rr as createEvent, Rt as DEFAULT_DISPLAY_PREFERENCE, S as invokeTrpcLeaf, Sn as ForeignSecretMarkerError, Sr as secretTreeFromSchema, St as CamStreamKindSchema, T as createLazyTrpcSource, Tn as PlaintextSecretError, Tr as isSecretRefOwnedBy, Tt as DecodedAudioChunkSchema, U as describeCustomActions, Un as RECORD_DELETE_BATCH, Ur as collectHydratedFieldEntries, Ut as displayUnitFor, V as customAction, Vn as RECORD_DATABASES, Vr as WELL_KNOWN_TABS, Vt as ReadingQuantitySchema, W as deviceCustomAction, Wn as RECORD_ID_MAX_LENGTH, Wr as collectHydratedFieldValues, Wt as historyUnitFor, X as HISTORY_UNIT_LABELS, Xn as RECORD_SETTINGS_MAX_ROWS, Xr as classifySecretWrite, Xt as createRecordsAccess, Y as HISTORY_DEFAULT_MIN_INTERVAL_MS, Yn as RECORD_SECRET_COLLECTION_PREFIX, Yr as SECRET_CLEAR, Yt as entryBody, Z as PROVIDER_PIN_FIELD, Zn as RECORD_SWEEP_INTERVAL_MS, Zr as isSecretClear, Zt as assertTransactScope, _ as readErrorI18n, _n as collectZodSecretPaths, _r as classifyStoreError, _t as AudioStreamPickSchema, a as asJsonArray, ai as collectSecretConfigKeys, an as assertValidDeclaration, ar as registerKnownSecret, at as systemMethod, b as isDeviceScopedCap, bn as DeclarationRefusedError, br as parseSecretStatePath, bt as CAM_PROFILE_ORDER, c as asString, ci as omitTransientConfig, cn as REMOVE_LEAF, cr as PEER_BYTES_CHUNK_BYTES, ct as readNodePin, d as parseJsonUnknown, di as audioChunkBytesPerSample, dn as parseSecretPath, dr as PEER_BYTES_TICKET_TTL_MS, dt as ReadinessRegistry, ei as isSecretMarkerLike, en as RecordIndexSchema, er as createSecretsAccess, et as historyItemFieldPath, f as hfModelUrl, fi as expandAudioChunkToF32le, fn as recordArrayItemPath, fr as PeerBytesTicketSchema, ft as ReadinessTimeoutError, g as ErrorI18nPayloadSchema, gn as SECRET_META, gr as BaseAddon, gt as AudioChunkFormatSchema, h as ErrorCodeSchema, hn as secretArrayPrefixes, hr as DisposerChain, ht as scopeKey, i as asBoolean, ii as collectKeychainStoredKeys, in as StoredRecordKindDeclarationSchema, ir as knownSecretCount, it as resolveCapMount, j as RUNTIME_DEFAULTS, jn as RecordsError, jr as formatSecretScope, jt as StreamSourceSchema, k as HF_BASE_URL, kn as RecordTooLargeError, kr as arrayItemFieldPath, kt as ProfileSlotStatusSchema, l as parseJsonArray, li as schemaDeclaresAnyField, ln as collectSecretLeaves, lr as PEER_BYTES_MAX_OUTSTANDING, lt as toNodeId, m as CamstackError, mn as recordSecretRef, mr as SHARE_VIEW_KINDS, mt as readinessKey, n as sleepCancellable, ni as toSecretFieldView, nn as RecordKindNameSchema, nr as clearKnownSecrets, nt as method, o as asJsonObject, oi as isKeychainStoredField, on as declarationsOf, or as scrubKnownSecrets, ot as CAP_NODE_PIN_CONTEXT_KEY, p as BOOT_RECOVERY_BACKOFF_MS, pi as isAudioChunkFormat, pn as recordSecretCollection, pr as DATAPLANE_SECRET_HEADER, pt as emitDownForOwnedCaps, q as DEVICE_SETTINGS_CONTRIBUTION_METHODS, qn as RECORD_MAX_INDEX_FIELDS, qr as hydrateSchema, qt as makeInMemoryRecords, r as maskUrlCredentials, ri as REDACTED_SECRET, rn as RecordRetentionSchema, rr as forgetKnownSecret, rt as optionalMethod, s as asNumber, si as isSecretConfigField, sn as defineRecordKinds, sr as shortSecretRefHash, st as nodePin, t as sleep, ti as makeSecretMarker, tn as RecordKindDeclarationSchema, tr as MIN_SCRUBBED_LENGTH, tt as isDeviceConfigCap, u as parseJsonObject, ui as AUDIO_CHUNK_FORMATS, un as mapSecretLeaves, ur as PEER_BYTES_STALL_MS, ut as MODEL_FORMATS, v as userError, vn as isZodSecret, vr as normalizeAddonInitResult, vt as BrokerStatsSchema, w as createEventBusSliceSource, wn as NoCallerError, wr as collectSecretMarkerRefs, wt as CameraStreamSchema, x as createDeviceProxy, xn as FilterRequiredError, xr as secretTreeFromPaths, xt as CamProfileSchema, y as DEVICE_SCOPED_CAPS, yn as BatchTooLargeError, yr as mergeSecretStatePaths, yt as BrokerStatusSchema, z as CALLER_STAMPED_CAPABILITIES, zn as RECORD_BATCH_MAX_BYTES, zr as emitReadiness, zt as DISPLAY_PREFERENCES } from "./sleep-
|
|
2
|
-
import { i as publicEventCategories, n as OWNER_ONLY_EVENT_CATEGORIES, r as isOwnerOnlyEventCategory, t as EventCategory } from "./event-category-
|
|
1
|
+
import { $ as expandCapMethods, $n as REVALIDATE_AFTER_MS, $r as isSecretMarker, $t as RecordFieldPathSchema, A as HF_REPO, An as RecordUniqueViolationError, Ar as buildSecretRef, At as StreamSourceEntrySchema, B as withoutCallerStamp, Bn as RECORD_CLASSES, Br as isEvent, Bt as QUANTITY_BASE, Cn as InvalidRecordError, Cr as KeychainWriteRefusedError, Ct as CamStreamResolutionSchema, D as createSliceHandle, Dn as RecordNotFoundError, Dr as transformSecretWrite, Dt as ProfileRtspEntrySchema, E as createMirrorSource, En as RECORDS_ERROR_CODES, Er as resolveSecretMarkers, Et as FrameHandleSchema, F as RawStateResultSchema, Fn as UnknownRecordKindError, Fr as parseSecretRef, Ft as makeSourceBrokerId, G as adminUiCapability, Gn as RECORD_MAX_DATA_BYTES, Gr as dehydrateConfigField, Gt as isReadingQuantity, H as defineCustomActions, Hn as RECORD_DEFAULT_MAX_DATA_BYTES, Hr as WELL_KNOWN_TAB_MAP, Ht as baseUnitOf, I as deviceOpsCapability, In as asRecordsError, Ir as normalizeNodeId, It as parseProfileBrokerId, J as DEVICE_STATUS_METHOD, Jn as RECORD_QUERY_MAX, Jr as resolveHydratedFieldValue, Jt as defineEntryKind, K as DEFAULT_RUNTIME_STATE_DURABILITY, Kn as RECORD_MAX_INDEXES, Kr as dehydrateSchema, Kt as readingMeta, L as viewerUiCapability, Ln as recordsErrorFromMessage, Lr as createDurableState, Lt as selectAssignedProfileSlots, Mn as RevConflictError, Mr as globalSecretScope, Mt as SubscribeAudioChunksInputSchema, N as CAP_NAMES, Nn as TransactRefusedError, Nr as isSecretRef, Nt as SubscribeAudioChunksResultSchema, O as DEFAULT_TOKEN_EXPIRY, On as RecordSecretUnavailableError, Or as SECRET_REF_SCHEME, Ot as ProfileSlotSchema, Pn as UnindexedFilterError, Pr as normalizeSecretOwner, Pt as makeProfileBrokerId, Q as event, Qn as resolveSecretViewsIn, Qr as isSecretFieldView, Qt as EntryDescriptorSchema, R as DEVICE_CHILDREN_BATCH_MAX, Rn as RECORD_BATCH_MAX, Rr as createEvent, Rt as DEFAULT_DISPLAY_PREFERENCE, S as invokeTrpcLeaf, Sn as ForeignSecretMarkerError, Sr as secretTreeFromSchema, St as CamStreamKindSchema, T as createLazyTrpcSource, Tn as PlaintextSecretError, Tr as isSecretRefOwnedBy, Tt as DecodedAudioChunkSchema, U as describeCustomActions, Un as RECORD_DELETE_BATCH, Ur as collectHydratedFieldEntries, Ut as displayUnitFor, V as customAction, Vn as RECORD_DATABASES, Vr as WELL_KNOWN_TABS, Vt as ReadingQuantitySchema, W as deviceCustomAction, Wn as RECORD_ID_MAX_LENGTH, Wr as collectHydratedFieldValues, Wt as historyUnitFor, X as HISTORY_UNIT_LABELS, Xn as RECORD_SETTINGS_MAX_ROWS, Xr as classifySecretWrite, Xt as createRecordsAccess, Y as HISTORY_DEFAULT_MIN_INTERVAL_MS, Yn as RECORD_SECRET_COLLECTION_PREFIX, Yr as SECRET_CLEAR, Yt as entryBody, Z as PROVIDER_PIN_FIELD, Zn as RECORD_SWEEP_INTERVAL_MS, Zr as isSecretClear, Zt as assertTransactScope, _ as readErrorI18n, _n as collectZodSecretPaths, _r as classifyStoreError, _t as AudioStreamPickSchema, a as asJsonArray, ai as collectSecretConfigKeys, an as assertValidDeclaration, ar as registerKnownSecret, at as systemMethod, b as isDeviceScopedCap, bn as DeclarationRefusedError, br as parseSecretStatePath, bt as CAM_PROFILE_ORDER, c as asString, ci as omitTransientConfig, cn as REMOVE_LEAF, cr as PEER_BYTES_CHUNK_BYTES, ct as readNodePin, d as parseJsonUnknown, di as audioChunkBytesPerSample, dn as parseSecretPath, dr as PEER_BYTES_TICKET_TTL_MS, dt as ReadinessRegistry, ei as isSecretMarkerLike, en as RecordIndexSchema, er as createSecretsAccess, et as historyItemFieldPath, f as hfModelUrl, fi as expandAudioChunkToF32le, fn as recordArrayItemPath, fr as PeerBytesTicketSchema, ft as ReadinessTimeoutError, g as ErrorI18nPayloadSchema, gn as SECRET_META, gr as BaseAddon, gt as AudioChunkFormatSchema, h as ErrorCodeSchema, hn as secretArrayPrefixes, hr as DisposerChain, ht as scopeKey, i as asBoolean, ii as collectKeychainStoredKeys, in as StoredRecordKindDeclarationSchema, ir as knownSecretCount, it as resolveCapMount, j as RUNTIME_DEFAULTS, jn as RecordsError, jr as formatSecretScope, jt as StreamSourceSchema, k as HF_BASE_URL, kn as RecordTooLargeError, kr as arrayItemFieldPath, kt as ProfileSlotStatusSchema, l as parseJsonArray, li as schemaDeclaresAnyField, ln as collectSecretLeaves, lr as PEER_BYTES_MAX_OUTSTANDING, lt as toNodeId, m as CamstackError, mn as recordSecretRef, mr as SHARE_VIEW_KINDS, mt as readinessKey, n as sleepCancellable, ni as toSecretFieldView, nn as RecordKindNameSchema, nr as clearKnownSecrets, nt as method, o as asJsonObject, oi as isKeychainStoredField, on as declarationsOf, or as scrubKnownSecrets, ot as CAP_NODE_PIN_CONTEXT_KEY, p as BOOT_RECOVERY_BACKOFF_MS, pi as isAudioChunkFormat, pn as recordSecretCollection, pr as DATAPLANE_SECRET_HEADER, pt as emitDownForOwnedCaps, q as DEVICE_SETTINGS_CONTRIBUTION_METHODS, qn as RECORD_MAX_INDEX_FIELDS, qr as hydrateSchema, qt as makeInMemoryRecords, r as maskUrlCredentials, ri as REDACTED_SECRET, rn as RecordRetentionSchema, rr as forgetKnownSecret, rt as optionalMethod, s as asNumber, si as isSecretConfigField, sn as defineRecordKinds, sr as shortSecretRefHash, st as nodePin, t as sleep, ti as makeSecretMarker, tn as RecordKindDeclarationSchema, tr as MIN_SCRUBBED_LENGTH, tt as isDeviceConfigCap, u as parseJsonObject, ui as AUDIO_CHUNK_FORMATS, un as mapSecretLeaves, ur as PEER_BYTES_STALL_MS, ut as MODEL_FORMATS, v as userError, vn as isZodSecret, vr as normalizeAddonInitResult, vt as BrokerStatsSchema, w as createEventBusSliceSource, wn as NoCallerError, wr as collectSecretMarkerRefs, wt as CameraStreamSchema, x as createDeviceProxy, xn as FilterRequiredError, xr as secretTreeFromPaths, xt as CamProfileSchema, y as DEVICE_SCOPED_CAPS, yn as BatchTooLargeError, yr as mergeSecretStatePaths, yt as BrokerStatusSchema, z as CALLER_STAMPED_CAPABILITIES, zn as RECORD_BATCH_MAX_BYTES, zr as emitReadiness, zt as DISPLAY_PREFERENCES } from "./sleep-BHjNez61.mjs";
|
|
2
|
+
import { i as publicEventCategories, n as OWNER_ONLY_EVENT_CATEGORIES, r as isOwnerOnlyEventCategory, t as EventCategory } from "./event-category-hdMR7CTW.mjs";
|
|
3
3
|
import { $ as GroupTemplateIdSchema, $t as validateExpressionSource, A as composedDeviceStableId, An as sliceActiveValue, At as planResetTier, B as AGGREGATE_REDUCERS, Bn as AUDIO_PRESETS, Bt as wattMillisecondsToKwh, C as CompositionSeriesSourceSchema, Cn as SOURCE_CAPS, Ct as RollingWindowSchema, D as MAX_COMPOSITION_FIELDS_PER_FEATURE, Dn as evaluateSensorEdge, Dt as nextLocalMidnight, E as MAX_COMPOSITION_FEATURES, En as SOURCE_DEVICE_TYPES, Et as maxDurationMs, F as compositionSourceKey, Ft as STATISTIC_STATS, G as ArithmeticHelperSpecSchema, Gn as buildVideoArgs, Gt as isApplianceKind, H as ActiveCriterionSchema, Hn as buildAudioArgs, Ht as APPLIANCE_KINDS, I as featureFieldEntries, It as evaluateDerivative, J as DerivativeHelperSpecSchema, Jn as logBannerArgs, Jt as cloneStatefulExpressionMemory, K as BINARY_AGGREGATES, Kn as invocationFromEncodeProfile, Kt as sourcePickForAppliance, L as featureSources, Lt as evaluateStatistic, M as compositionItemFieldPath, Mn as FFMPEG_PATH_ENV, Mt as rollingDurationMs, N as compositionReadKey, Nt as statisticCadenceMs, O as MAX_COMPOSITION_ITEMS, On as evaluateSensorLevelEdge, Ot as openReset, P as compositionSliceKey, Pt as SERIES_KINDS, Q as GroupHelperSpecSchema, Qt as toExpressionValue, R as fieldReads, Rn as canonicalHash, Rt as integrateReading, S as CompositionSchema, Sn as DEFAULT_FIRST_SIGHTING_FRESHNESS_MS, St as ROLLING_SPANS, T as MAX_COMPOSITION_CODE_LENGTH, Tn as SOURCE_CAP_CHANGED_AT_FIELD, Tt as integralCadenceMs, U as AggregateReducerSchema, Un as buildFfmpegArgs, Ut as APPLIANCE_TEMPLATE_ID, V as ARITHMETIC_OPS, Vn as audioPlanFromEncodeProfile, Vt as APPLIANCE_DEFAULTS, W as ApplianceHelperSpecSchema, Wn as buildInputArgs, Wt as applianceDeviceType, X as ExpressionHelperSpecSchema, Xn as resolveStreamMaps, Xt as evaluateExpressionSource, Y as EXPRESSION_OUTPUTS, Yn as pickVideoEncoder, Yt as createStatefulExpressionMemory, Z as GROUP_TEMPLATE_IDS, Zt as evaluateStatefulExpressionCall, _ as CompositionFromSourceSchema, _n as evaluateCount, _t as HISTORY_TIERS, a as CUSTOMIZATION_BLOCK_NAME_PREFIX, an as tokenize, at as NUMERIC_AGGREGATES, b as CompositionNewTargetSchema, bn as ExpressionEvalError, bt as MIN_CUSTOM_MINUTES, c as CompositionCodeSourceSchema, cn as MAX_EXPRESSION_AST_NODES, ct as helperMembers, d as CompositionExpressionSourceSchema, dn as MAX_EXPRESSION_EVAL_STEPS, dt as CALENDAR_PERIODS, en as createExpressionScope, et as HelperMemberSchema, f as CompositionFeatureSchema, fn as MAX_EXPRESSION_SOURCE_LENGTH, ft as CalendarWindowSchema, g as CompositionForwardCommandSchema, gn as disarmRoseMemory, gt as HISTORY_SLOW_MS, h as CompositionFieldsFeatureSchema, hn as EXPRESSION_BUILTIN_NAMES, ht as HISTORY_FAST_MS, i as COMPOSITION_ITEM_KEY_RE, in as parseExpression, it as MAX_HELPER_MEMBERS, j as compositionFeatureEnabled, jn as sliceChangedAt, jt as planStatisticTier, k as composedDeviceRef, kn as isSourceCap, kt as openStatistic, l as CompositionCommandTargetSchema, ln as MAX_EXPRESSION_BINDINGS, lt as isHistoryHelper, m as CompositionFieldSourceSchema, mn as EXPRESSION_BUILTINS, mt as DEFAULT_HISTORY_RETENTION, n as COMPOSER_ADDON_ID, nn as compileExpression, nt as INTEGRAL_OUTPUTS, o as CompositionAggregateSourceSchema, on as EXPRESSION_COMPILE_CACHE_CAPACITY, ot as StatisticHelperSpecSchema, p as CompositionFieldReadSchema, pn as RESERVED_BINDING_NAMES, pt as DAY_MS, q as DERIVATIVE_UNITS, qn as isSoftwareDecode, qt as EXPRESSION_INJECTED_NOW, r as COMPOSITION_ITEM_ARRAY_PATH, rn as compileExpressionSafe, rt as IntegralHelperSpecSchema, s as CompositionBindingSchema, sn as EXPRESSION_IDENTIFIER_RE, st as ThresholdHelperSpecSchema, t as COMPOSED_DEVICE_STABLE_ID_PREFIX, tn as evaluateAst, tt as HelperSpecSchema, u as CompositionExistingTargetSchema, un as MAX_EXPRESSION_CALL_ARGS, ut as CompositionSourceRefSchema, v as CompositionItemEntrySchema, vn as evaluateRose, vt as HOUR_MS, w as CompositionTargetSchema, wn as SOURCE_CAP_ACTIVE_FIELD, wt as StatisticWindowSchema, x as CompositionPassthroughFeatureSchema, xn as ExpressionParseError, xt as RESET_PERIODS, y as CompositionLiteralBindingSchema, yn as isStatefulBuiltin, yt as MINUTE_MS, z as ACTIVE_CRITERIA, zn as Fmp4BoxSplitter, zt as KWH_PER_WATT_MS } from "./composition-Bb8iwHEJ.mjs";
|
|
4
4
|
import { NODE_COLOR_IDS, NodeColorIdSchema, assignNodeColorId } from "./node-color.mjs";
|
|
5
5
|
import { a as DeviceType, i as DeviceRole, n as ChargingStatus, r as DeviceFeature, t as errMsg } from "./err-msg-DIorGYeC.mjs";
|
|
@@ -8073,7 +8073,7 @@ var ExpressionSourceSchema = z.object({
|
|
|
8073
8073
|
*
|
|
8074
8074
|
* Three vocabularies, each salvaged rather than invented:
|
|
8075
8075
|
*
|
|
8076
|
-
* - **Triggers** — the only genuinely new surface.
|
|
8076
|
+
* - **Triggers** — the only genuinely new surface. Six members, none of which
|
|
8077
8077
|
* touches notification delivery. The NC keeps its four *pipeline* triggers;
|
|
8078
8078
|
* these are device/time triggers and the two sets do not overlap.
|
|
8079
8079
|
* - **Conditions** — `ALL`/`ANY`/`NOT` over two leaf kinds, bounded. The
|
|
@@ -8197,7 +8197,23 @@ var AutomationTriggerSchema = z.discriminatedUnion("kind", [
|
|
|
8197
8197
|
kind: z.literal("schedule"),
|
|
8198
8198
|
cron: z.string().min(1).max(120)
|
|
8199
8199
|
}),
|
|
8200
|
-
z.object({ kind: z.literal("manual") })
|
|
8200
|
+
z.object({ kind: z.literal("manual") }),
|
|
8201
|
+
z.object({
|
|
8202
|
+
kind: z.literal("detection"),
|
|
8203
|
+
/** Class names. A macro class (`animal`, `vehicle`, `person`, `package`)
|
|
8204
|
+
* matches every raw class that maps to it; any other name matches
|
|
8205
|
+
* exactly. */
|
|
8206
|
+
classes: z.array(z.string().min(1)).min(1),
|
|
8207
|
+
deviceIds: z.array(z.number().int().nonnegative()).min(1),
|
|
8208
|
+
/** The track must have visited at least one of these zones. */
|
|
8209
|
+
zones: z.array(z.string().min(1)).min(1).optional(),
|
|
8210
|
+
/** Best-so-far confidence the track must reach. */
|
|
8211
|
+
minScore: z.number().min(0).max(1).optional()
|
|
8212
|
+
}),
|
|
8213
|
+
z.object({
|
|
8214
|
+
kind: z.literal("interval"),
|
|
8215
|
+
minutes: z.number().int().min(1).max(1440)
|
|
8216
|
+
})
|
|
8201
8217
|
]);
|
|
8202
8218
|
/**
|
|
8203
8219
|
* One action step.
|
|
@@ -8217,28 +8233,47 @@ var AutomationTriggerSchema = z.discriminatedUnion("kind", [
|
|
|
8217
8233
|
* is called. The runner still receives a number and is untouched; the
|
|
8218
8234
|
* resolution is the recipe's job, not the runner's.
|
|
8219
8235
|
*/
|
|
8236
|
+
var AutomationWaitStepSchema = z.object({
|
|
8237
|
+
kind: z.literal("wait"),
|
|
8238
|
+
seconds: z.number().min(0).max(300)
|
|
8239
|
+
});
|
|
8240
|
+
var AutomationCapStepSchema = z.object({
|
|
8241
|
+
kind: z.literal("cap"),
|
|
8242
|
+
/**
|
|
8243
|
+
* One device, several same-family devices (locks / climate family / …),
|
|
8244
|
+
* or `{ $var }` for the device that triggered the run. An array is
|
|
8245
|
+
* fan-out at codegen — each id gets the same cap.method call.
|
|
8246
|
+
*/
|
|
8247
|
+
deviceId: z.union([
|
|
8248
|
+
z.number().int(),
|
|
8249
|
+
z.array(z.number().int()).min(1),
|
|
8250
|
+
z.object({ $var: z.string().min(1) })
|
|
8251
|
+
]),
|
|
8252
|
+
cap: z.string().min(1),
|
|
8253
|
+
method: z.string().min(1),
|
|
8254
|
+
/** Values may carry `{{vars.x}}` slots, or be exactly `{ $var: 'name' }`, which
|
|
8255
|
+
* SUBSTITUTE and do not evaluate (§3.2.3). Anything beyond substitution is
|
|
8256
|
+
* the expression leaf. */
|
|
8257
|
+
args: z.record(z.string(), z.unknown()).optional()
|
|
8258
|
+
});
|
|
8259
|
+
/**
|
|
8260
|
+
* The steps an internal Action may contain: cap and wait, and nothing that can
|
|
8261
|
+
* call back into an Action — so an Action can never reach itself (no cycles).
|
|
8262
|
+
*/
|
|
8263
|
+
var ActionStepSchema = z.discriminatedUnion("kind", [AutomationWaitStepSchema, AutomationCapStepSchema]);
|
|
8220
8264
|
var AutomationActionSchema = z.discriminatedUnion("kind", [
|
|
8265
|
+
AutomationWaitStepSchema,
|
|
8266
|
+
AutomationCapStepSchema,
|
|
8221
8267
|
z.object({
|
|
8222
|
-
kind: z.literal("
|
|
8223
|
-
|
|
8224
|
-
|
|
8225
|
-
|
|
8226
|
-
|
|
8227
|
-
|
|
8228
|
-
|
|
8229
|
-
|
|
8230
|
-
|
|
8231
|
-
*/
|
|
8232
|
-
deviceId: z.union([
|
|
8233
|
-
z.number().int(),
|
|
8234
|
-
z.array(z.number().int()).min(1),
|
|
8235
|
-
z.object({ $var: z.string().min(1) })
|
|
8236
|
-
]),
|
|
8237
|
-
cap: z.string().min(1),
|
|
8238
|
-
method: z.string().min(1),
|
|
8239
|
-
/** Values may carry `{{vars.x}}` slots, which SUBSTITUTE and do not
|
|
8240
|
-
* evaluate (§3.2.3). Anything beyond substitution is the expression leaf. */
|
|
8241
|
-
args: z.record(z.string(), z.unknown()).optional()
|
|
8268
|
+
kind: z.literal("action"),
|
|
8269
|
+
/** An entry of the `actions` surface (`internal:<uuid>` or `<addonId>:<localId>`). */
|
|
8270
|
+
actionId: z.string().min(1),
|
|
8271
|
+
/** Values for the action's declared variables; the others take their default. */
|
|
8272
|
+
variables: z.record(z.string(), z.union([
|
|
8273
|
+
z.string(),
|
|
8274
|
+
z.number(),
|
|
8275
|
+
z.boolean()
|
|
8276
|
+
])).optional()
|
|
8242
8277
|
}),
|
|
8243
8278
|
z.object({
|
|
8244
8279
|
kind: z.literal("code"),
|
|
@@ -8247,10 +8282,45 @@ var AutomationActionSchema = z.discriminatedUnion("kind", [
|
|
|
8247
8282
|
code: z.string().min(1).max(2e4)
|
|
8248
8283
|
})
|
|
8249
8284
|
]);
|
|
8285
|
+
/**
|
|
8286
|
+
* How a trigger that arrives while the automation is busy (or cooling down) is
|
|
8287
|
+
* handled. One of the automation's execution modes, never a property of its
|
|
8288
|
+
* actions. Absent means `single`.
|
|
8289
|
+
*
|
|
8290
|
+
* - `single` — drop the trigger while a run is in progress (traced + logged).
|
|
8291
|
+
* - `restart` — abort the run in progress (at its next step boundary), start fresh.
|
|
8292
|
+
* - `queued` — queue up to `max` triggers, drop the rest (traced).
|
|
8293
|
+
* - `parallel` — up to `max` runs at once, drop the rest (traced).
|
|
8294
|
+
* - `cooldown` — `single`, and no new run until `minutes` after the last run
|
|
8295
|
+
* STARTED; persisted across a restart. A manual trigger bypasses only this
|
|
8296
|
+
* wait, never the single/queued limits.
|
|
8297
|
+
*/
|
|
8298
|
+
var AutomationRunModeSchema = z.discriminatedUnion("mode", [
|
|
8299
|
+
z.object({ mode: z.literal("single") }),
|
|
8300
|
+
z.object({ mode: z.literal("restart") }),
|
|
8301
|
+
z.object({
|
|
8302
|
+
mode: z.literal("queued"),
|
|
8303
|
+
max: z.number().int().min(1).max(10)
|
|
8304
|
+
}),
|
|
8305
|
+
z.object({
|
|
8306
|
+
mode: z.literal("parallel"),
|
|
8307
|
+
max: z.number().int().min(1).max(10)
|
|
8308
|
+
}),
|
|
8309
|
+
z.object({
|
|
8310
|
+
mode: z.literal("cooldown"),
|
|
8311
|
+
minutes: z.number().int().min(1).max(1440)
|
|
8312
|
+
})
|
|
8313
|
+
]);
|
|
8314
|
+
/** Run traces kept per automation when the recipe does not say. */
|
|
8315
|
+
var DEFAULT_TRACE_KEEP = 20;
|
|
8316
|
+
var MAX_TRACE_KEEP = 100;
|
|
8250
8317
|
var AutomationRecipeSchema = z.object({
|
|
8251
8318
|
triggers: z.array(AutomationTriggerSchema),
|
|
8252
8319
|
conditions: AutomationConditionSchema.optional(),
|
|
8253
|
-
actions: z.array(AutomationActionSchema)
|
|
8320
|
+
actions: z.array(AutomationActionSchema),
|
|
8321
|
+
runMode: AutomationRunModeSchema.optional(),
|
|
8322
|
+
/** How many run traces the automation keeps (default {@link DEFAULT_TRACE_KEEP}). */
|
|
8323
|
+
keepTraces: z.number().int().min(1).max(100).optional()
|
|
8254
8324
|
});
|
|
8255
8325
|
/** Depth of a tree, root container = 1. A bare leaf is depth 1. */
|
|
8256
8326
|
function conditionDepth(cond) {
|
|
@@ -8302,19 +8372,23 @@ function validateRecipeBounds(recipe) {
|
|
|
8302
8372
|
/** How often the state mirror is re-read as the backstop for a dropped event
|
|
8303
8373
|
* (D8: an event WAKES the evaluation, the reconcile guarantees it). */
|
|
8304
8374
|
var RECONCILE_MS = 15e3;
|
|
8375
|
+
/** What a step trace shows before the step runs. */
|
|
8376
|
+
function stepMetaOf(action) {
|
|
8377
|
+
switch (action.kind) {
|
|
8378
|
+
case "wait": return { kind: "wait" };
|
|
8379
|
+
case "code": return { kind: "code" };
|
|
8380
|
+
case "action": return { kind: "action" };
|
|
8381
|
+
case "cap": return {
|
|
8382
|
+
kind: "cap",
|
|
8383
|
+
cap: action.cap,
|
|
8384
|
+
method: action.method,
|
|
8385
|
+
...typeof action.deviceId === "number" ? { deviceId: action.deviceId } : {}
|
|
8386
|
+
};
|
|
8387
|
+
}
|
|
8388
|
+
}
|
|
8305
8389
|
function j(value) {
|
|
8306
8390
|
return JSON.stringify(value);
|
|
8307
8391
|
}
|
|
8308
|
-
/** Emit the boolean tree as calls into the generated combinators. */
|
|
8309
|
-
function emitCondition(cond, indent) {
|
|
8310
|
-
switch (cond.kind) {
|
|
8311
|
-
case "all": return `allOf([\n${cond.children.map((c) => `${indent} () => ${emitCondition(c, `${indent} `)}`).join(",\n")}\n${indent}])`;
|
|
8312
|
-
case "any": return `anyOf([\n${cond.children.map((c) => `${indent} () => ${emitCondition(c, `${indent} `)}`).join(",\n")}\n${indent}])`;
|
|
8313
|
-
case "not": return `notOf(() => ${emitCondition(cond.child, indent)})`;
|
|
8314
|
-
case "condition": return `leaf(${j(cond.deviceId)}, ${j(cond.cap)}, ${j(cond.fieldPath)}, ${j(cond.operator)}, ${j(cond.value)})`;
|
|
8315
|
-
case "expression": return `exprLeaf(${j(cond.expr)}, ${j(cond.bindings)})`;
|
|
8316
|
-
}
|
|
8317
|
-
}
|
|
8318
8392
|
function emitTrigger(trigger, index) {
|
|
8319
8393
|
switch (trigger.kind) {
|
|
8320
8394
|
case "schedule": return ` // trigger ${index}: schedule — armed to the next minute boundary and
|
|
@@ -8390,31 +8464,79 @@ function emitTrigger(trigger, index) {
|
|
|
8390
8464
|
}`;
|
|
8391
8465
|
}
|
|
8392
8466
|
case "manual": return ` // trigger ${index}: manual — fired by automation-control.trigger
|
|
8393
|
-
// ("Run actions"), which runs the THEN half with an EMPTY vars bag
|
|
8467
|
+
// ("Run actions"), which runs the THEN half with an EMPTY vars bag. A manual
|
|
8468
|
+
// run bypasses only the cooldown wait, never the single/queued limits.`;
|
|
8469
|
+
case "interval": return ` // trigger ${index}: interval — every ${trigger.minutes} min, first run jittered so
|
|
8470
|
+
// blocks restarted together do not all fire on the same second.
|
|
8471
|
+
{
|
|
8472
|
+
let interval: ReturnType<typeof setInterval> | undefined
|
|
8473
|
+
const first = setTimeout(() => {
|
|
8474
|
+
void run({ kind: 'interval', at: Date.now() })
|
|
8475
|
+
interval = setInterval(() => { void run({ kind: 'interval', at: Date.now() }) }, ${j(trigger.minutes * 6e4)})
|
|
8476
|
+
}, Math.floor(Math.random() * Math.min(${j(trigger.minutes * 6e4)}, 30_000)) + 1)
|
|
8477
|
+
disposers.push(() => {
|
|
8478
|
+
clearTimeout(first)
|
|
8479
|
+
if (interval !== undefined) clearInterval(interval)
|
|
8480
|
+
})
|
|
8481
|
+
}`;
|
|
8482
|
+
case "detection": return ` // trigger ${index}: detection — ONE fire per (device, track); a rejected event is
|
|
8483
|
+
// traced with its reason and never fires.
|
|
8484
|
+
{
|
|
8485
|
+
const filter = new DetectionTriggerFilter(${j(trigger)})
|
|
8486
|
+
disposers.push(
|
|
8487
|
+
ctx.eventBus.subscribe(
|
|
8488
|
+
{ category: EventCategory.PipelineAnalyticsTrackLifecycle },
|
|
8489
|
+
(event) => {
|
|
8490
|
+
const decision = filter.evaluate(event.data, Date.now())
|
|
8491
|
+
if (decision.kind === 'ignore') return
|
|
8492
|
+
if (decision.kind === 'reject') {
|
|
8493
|
+
ctx.logger.debug('detection trigger rejected an event', {
|
|
8494
|
+
tags: { deviceId: decision.vars.deviceId },
|
|
8495
|
+
reason: decision.reason,
|
|
8496
|
+
})
|
|
8497
|
+
}
|
|
8498
|
+
void run(
|
|
8499
|
+
{ kind: 'detection', at: Date.now(), ...decision.vars },
|
|
8500
|
+
decision.reason,
|
|
8501
|
+
decision.kind === 'fire',
|
|
8502
|
+
)
|
|
8503
|
+
},
|
|
8504
|
+
),
|
|
8505
|
+
)
|
|
8506
|
+
}`;
|
|
8394
8507
|
}
|
|
8395
8508
|
}
|
|
8396
8509
|
function emitAction(action, index) {
|
|
8510
|
+
const step = (body) => ` {
|
|
8511
|
+
meta: STEP_META[${index}]!,
|
|
8512
|
+
run: async (scope) => {
|
|
8513
|
+
${body}
|
|
8514
|
+
},
|
|
8515
|
+
},`;
|
|
8397
8516
|
switch (action.kind) {
|
|
8398
|
-
case "wait": return `
|
|
8517
|
+
case "wait": return step(` await sleep(${j(action.seconds * 1e3)})`);
|
|
8399
8518
|
case "cap":
|
|
8400
|
-
if (Array.isArray(action.deviceId)) return `
|
|
8401
|
-
|
|
8519
|
+
if (Array.isArray(action.deviceId)) return step(` for (const deviceId of ${j(action.deviceId)}) {
|
|
8520
|
+
scope.setDeviceId(deviceId)
|
|
8402
8521
|
await actuate(deviceId, ${j(action.cap)}, ${j(action.method)}, ${j(action.args ?? {})}, vars)
|
|
8403
|
-
}
|
|
8404
|
-
|
|
8405
|
-
|
|
8406
|
-
|
|
8407
|
-
|
|
8408
|
-
|
|
8409
|
-
|
|
8410
|
-
|
|
8411
|
-
|
|
8412
|
-
|
|
8522
|
+
}`);
|
|
8523
|
+
return step(` const deviceId = ${typeof action.deviceId === "number" ? j(action.deviceId) : `resolveTarget(vars, ${j(action.deviceId.$var)})`}
|
|
8524
|
+
scope.setDeviceId(deviceId)
|
|
8525
|
+
await actuate(deviceId, ${j(action.cap)}, ${j(action.method)}, ${j(action.args ?? {})}, vars)`);
|
|
8526
|
+
case "action": return step(` // an Action run, awaited: the step takes THAT run's outcome
|
|
8527
|
+
const result = await ctx.api.actions.run.mutate({
|
|
8528
|
+
actionId: ${j(action.actionId)},
|
|
8529
|
+
variables: substituteVariables(${j(action.variables ?? {})}, vars),
|
|
8530
|
+
wait: true,
|
|
8531
|
+
origin: { blockId: BLOCK_ID ?? undefined },
|
|
8532
|
+
})
|
|
8533
|
+
if (result.outcome !== 'ran') {
|
|
8534
|
+
throw new Error('action ' + ${j(action.actionId)} + ' ' + result.outcome + (result.message === undefined ? '' : ': ' + result.message))
|
|
8535
|
+
}`);
|
|
8536
|
+
case "code": return step(` // inline code action — a fragment of THIS block, bundled by esbuild
|
|
8413
8537
|
await (async () => {
|
|
8414
8538
|
${action.code.split("\n").map((line) => ` ${line}`).join("\n")}
|
|
8415
|
-
})()
|
|
8416
|
-
break
|
|
8417
|
-
}`;
|
|
8539
|
+
})()`);
|
|
8418
8540
|
}
|
|
8419
8541
|
}
|
|
8420
8542
|
/**
|
|
@@ -8428,9 +8550,31 @@ function generateAutomationBlock(input) {
|
|
|
8428
8550
|
const boundsError = validateRecipeBounds(input.recipe);
|
|
8429
8551
|
if (boundsError !== null) throw new Error(`cannot generate an automation from an invalid recipe: ${boundsError}`);
|
|
8430
8552
|
const { name, recipe } = input;
|
|
8431
|
-
const
|
|
8432
|
-
|
|
8433
|
-
import {
|
|
8553
|
+
const runMode = recipe.runMode ?? { mode: "single" };
|
|
8554
|
+
const stepMeta = recipe.actions.map(stepMetaOf);
|
|
8555
|
+
return `import type {
|
|
8556
|
+
AddonContext,
|
|
8557
|
+
AutomationConditionTraceNode,
|
|
8558
|
+
AutomationRunTrace,
|
|
8559
|
+
AutomationRunVerdict,
|
|
8560
|
+
AutomationStepTrace,
|
|
8561
|
+
RunnableStep,
|
|
8562
|
+
} from '@camstack/types'
|
|
8563
|
+
import {
|
|
8564
|
+
ConditionMirror,
|
|
8565
|
+
DetectionTriggerFilter,
|
|
8566
|
+
EventCategory,
|
|
8567
|
+
RunGate,
|
|
8568
|
+
buildTriggerTrace,
|
|
8569
|
+
collectMirrorSources,
|
|
8570
|
+
coreBlockIdFromAddonId,
|
|
8571
|
+
evaluateConditionTree,
|
|
8572
|
+
isSkippedTrace,
|
|
8573
|
+
mergeSkipTraces,
|
|
8574
|
+
resolveDeviceTarget,
|
|
8575
|
+
resolveStepArgs,
|
|
8576
|
+
runSteps,
|
|
8577
|
+
} from '@camstack/types'
|
|
8434
8578
|
|
|
8435
8579
|
/**
|
|
8436
8580
|
* ${name}
|
|
@@ -8445,6 +8589,20 @@ const AUTOMATION_RECIPE = ${JSON.stringify(recipe, null, 2)} as const
|
|
|
8445
8589
|
|
|
8446
8590
|
const RECONCILE_MS = ${RECONCILE_MS}
|
|
8447
8591
|
|
|
8592
|
+
/** How triggers that arrive while busy (or cooling down) are handled. */
|
|
8593
|
+
const RUN_MODE = ${j(runMode)} as const
|
|
8594
|
+
|
|
8595
|
+
/** Run traces kept (a ring, held in the hub's runs ledger). */
|
|
8596
|
+
const KEEP_TRACES = ${recipe.keepTraces ?? 20}
|
|
8597
|
+
|
|
8598
|
+
const CONDITIONS = ${recipe.conditions === void 0 ? "undefined" : "AUTOMATION_RECIPE.conditions"}
|
|
8599
|
+
|
|
8600
|
+
/** Skips that repeat are folded into one trace; it goes to the hub after this. */
|
|
8601
|
+
const SKIP_FLUSH_MS = 5_000
|
|
8602
|
+
|
|
8603
|
+
/** Static facts about each action step, for its trace. */
|
|
8604
|
+
const STEP_META: ReadonlyArray<{ kind: string; cap?: string; method?: string; deviceId?: number }> = ${j(stepMeta)}
|
|
8605
|
+
|
|
8448
8606
|
/** A cap is named \`alarm-panel\`; \`ctx.api\` is keyed by the ROUTER name,
|
|
8449
8607
|
* \`alarmPanel\`. Indexing ctx.api with the cap name yields undefined and every
|
|
8450
8608
|
* action throws, so the conversion is not cosmetic. */
|
|
@@ -8495,137 +8653,170 @@ function matchField(field: string, value: number): boolean {
|
|
|
8495
8653
|
|
|
8496
8654
|
export default function block(ctx: AddonContext) {
|
|
8497
8655
|
const disposers: Array<() => void> = []
|
|
8498
|
-
const
|
|
8656
|
+
const gate = new RunGate(RUN_MODE)
|
|
8657
|
+
const mirror = new ConditionMirror(collectMirrorSources(CONDITIONS))
|
|
8658
|
+
const BLOCK_ID = coreBlockIdFromAddonId(ctx.id)
|
|
8659
|
+
/** The cooldown stamp: memory is the authority at fire time (D49); the hub ledger is read once at start. */
|
|
8660
|
+
let lastRunStartedAt: number | null = null
|
|
8661
|
+
/** True when the stamp could not be read at start — the first run is let through and says so. */
|
|
8662
|
+
let stampUnknown = false
|
|
8663
|
+
let sendChain: Promise<void> = Promise.resolve()
|
|
8664
|
+
let pendingSkip: AutomationRunTrace | undefined
|
|
8665
|
+
let skipTimer: ReturnType<typeof setTimeout> | undefined
|
|
8666
|
+
let stopped = false
|
|
8667
|
+
let runCounter = 0
|
|
8668
|
+
const runningTokens = new Set<RunToken>()
|
|
8669
|
+
const queue: QueuedRun[] = []
|
|
8499
8670
|
|
|
8500
|
-
|
|
8501
|
-
|
|
8502
|
-
|
|
8503
|
-
|
|
8504
|
-
|
|
8505
|
-
|
|
8506
|
-
|
|
8507
|
-
|
|
8508
|
-
|
|
8509
|
-
|
|
8510
|
-
|
|
8511
|
-
|
|
8512
|
-
|
|
8513
|
-
|
|
8671
|
+
interface RunToken {
|
|
8672
|
+
aborted: boolean
|
|
8673
|
+
wake?: () => void
|
|
8674
|
+
}
|
|
8675
|
+
interface QueuedRun {
|
|
8676
|
+
readonly trigger: Record<string, unknown>
|
|
8677
|
+
readonly reason: string
|
|
8678
|
+
readonly queuedAt: number
|
|
8679
|
+
}
|
|
8680
|
+
|
|
8681
|
+
/** Sleep that a restart can cut short. */
|
|
8682
|
+
const abortableSleep = (ms: number, token: RunToken): Promise<void> =>
|
|
8683
|
+
new Promise((resolve) => {
|
|
8684
|
+
const timer = setTimeout(resolve, ms)
|
|
8685
|
+
token.wake = () => {
|
|
8686
|
+
clearTimeout(timer)
|
|
8687
|
+
resolve()
|
|
8514
8688
|
}
|
|
8515
|
-
|
|
8516
|
-
|
|
8517
|
-
|
|
8689
|
+
})
|
|
8690
|
+
|
|
8691
|
+
// ── the hub's runs ledger: the stamp is read ONCE here, the ring is written through RPC ──
|
|
8692
|
+
async function loadState(): Promise<void> {
|
|
8693
|
+
if (BLOCK_ID === null) {
|
|
8694
|
+
ctx.logger.warn('this is not a core-block addon id — no run ledger, cooldown and traces will not survive a restart', { addonId: ctx.id })
|
|
8695
|
+
return
|
|
8696
|
+
}
|
|
8697
|
+
try {
|
|
8698
|
+
const doc = await ctx.api.coreBlocks.getAutomationRunState.query({ blockId: BLOCK_ID })
|
|
8699
|
+
lastRunStartedAt = doc.lastRunStartedAt
|
|
8700
|
+
} catch (err: unknown) {
|
|
8701
|
+
stampUnknown = true
|
|
8702
|
+
ctx.logger.warn('could not read the stored cooldown stamp — the first run is let through', {
|
|
8703
|
+
blockId: BLOCK_ID,
|
|
8704
|
+
error: err instanceof Error ? err.message : String(err),
|
|
8705
|
+
})
|
|
8518
8706
|
}
|
|
8519
8707
|
}
|
|
8520
8708
|
|
|
8521
|
-
function
|
|
8522
|
-
|
|
8523
|
-
|
|
8524
|
-
|
|
8525
|
-
|
|
8526
|
-
|
|
8527
|
-
|
|
8528
|
-
|
|
8529
|
-
|
|
8530
|
-
|
|
8531
|
-
|
|
8532
|
-
|
|
8709
|
+
function send(payload: { trace?: AutomationRunTrace; runStartedAt?: number }): Promise<void> {
|
|
8710
|
+
if (BLOCK_ID === null) return Promise.resolve()
|
|
8711
|
+
const blockId = BLOCK_ID
|
|
8712
|
+
sendChain = sendChain.then(async () => {
|
|
8713
|
+
try {
|
|
8714
|
+
await ctx.api.coreBlocks.reportAutomationRun.mutate({ blockId, keepTraces: KEEP_TRACES, ...payload })
|
|
8715
|
+
} catch (err: unknown) {
|
|
8716
|
+
ctx.logger.warn('could not report the run to the hub ledger', {
|
|
8717
|
+
blockId,
|
|
8718
|
+
error: err instanceof Error ? err.message : String(err),
|
|
8719
|
+
})
|
|
8720
|
+
}
|
|
8721
|
+
})
|
|
8722
|
+
return sendChain
|
|
8533
8723
|
}
|
|
8534
8724
|
|
|
8535
|
-
|
|
8536
|
-
|
|
8537
|
-
|
|
8538
|
-
|
|
8539
|
-
cap: string,
|
|
8540
|
-
fieldPath: string,
|
|
8541
|
-
operator: string,
|
|
8542
|
-
expected: unknown,
|
|
8543
|
-
): Promise<boolean> {
|
|
8544
|
-
const actual = await readField(deviceId, cap, fieldPath)
|
|
8545
|
-
if (actual === undefined) {
|
|
8546
|
-
ctx.logger.warn('condition leaf unresolvable — treated as false', {
|
|
8547
|
-
tags: { deviceId },
|
|
8548
|
-
cap,
|
|
8549
|
-
fieldPath,
|
|
8550
|
-
})
|
|
8551
|
-
return false
|
|
8725
|
+
function flushSkip(): void {
|
|
8726
|
+
if (skipTimer !== undefined) {
|
|
8727
|
+
clearTimeout(skipTimer)
|
|
8728
|
+
skipTimer = undefined
|
|
8552
8729
|
}
|
|
8553
|
-
|
|
8730
|
+
if (pendingSkip === undefined) return
|
|
8731
|
+
const trace = pendingSkip
|
|
8732
|
+
pendingSkip = undefined
|
|
8733
|
+
void send({ trace })
|
|
8554
8734
|
}
|
|
8555
8735
|
|
|
8556
|
-
/**
|
|
8557
|
-
|
|
8558
|
-
|
|
8559
|
-
|
|
8560
|
-
|
|
8561
|
-
|
|
8562
|
-
|
|
8563
|
-
|
|
8564
|
-
|
|
8565
|
-
|
|
8566
|
-
continue
|
|
8567
|
-
}
|
|
8568
|
-
const deviceId = await stableIdToDeviceId(binding.sourceStableId)
|
|
8569
|
-
if (deviceId === undefined) {
|
|
8570
|
-
ctx.logger.warn('condition leaf unresolvable — treated as false', {
|
|
8571
|
-
tags: { deviceId: -1 },
|
|
8572
|
-
binding: alias,
|
|
8573
|
-
})
|
|
8574
|
-
return false
|
|
8736
|
+
/** A skip identical to the one waiting is COUNTED on it; anything else flushes it first. */
|
|
8737
|
+
function record(trace: AutomationRunTrace): void {
|
|
8738
|
+
if (isSkippedTrace(trace)) {
|
|
8739
|
+
if (pendingSkip !== undefined) {
|
|
8740
|
+
const merged = mergeSkipTraces(pendingSkip, trace)
|
|
8741
|
+
if (merged !== null) {
|
|
8742
|
+
pendingSkip = merged
|
|
8743
|
+
return
|
|
8744
|
+
}
|
|
8745
|
+
flushSkip()
|
|
8575
8746
|
}
|
|
8576
|
-
|
|
8577
|
-
|
|
8747
|
+
pendingSkip = trace
|
|
8748
|
+
skipTimer = setTimeout(flushSkip, SKIP_FLUSH_MS)
|
|
8749
|
+
return
|
|
8578
8750
|
}
|
|
8579
|
-
|
|
8580
|
-
|
|
8581
|
-
|
|
8582
|
-
|
|
8751
|
+
flushSkip()
|
|
8752
|
+
void send({ trace })
|
|
8753
|
+
}
|
|
8754
|
+
|
|
8755
|
+
// ── the condition mirror (D49): memory only at fire time ──
|
|
8756
|
+
async function refreshMirror(): Promise<void> {
|
|
8757
|
+
const report = await mirror.refresh({
|
|
8758
|
+
fetchSlice: (deviceId, cap) => ctx.api.deviceState.getCapSlice.query({ deviceId, capName: cap }),
|
|
8759
|
+
fetchStableIds: async () => {
|
|
8760
|
+
const all = await ctx.api.deviceManager.listAll.query({})
|
|
8761
|
+
return new Map(all.devices.flatMap((d: { stableId?: string; id: number }) =>
|
|
8762
|
+
d.stableId === undefined ? [] : [[d.stableId, d.id] as [string, number]]))
|
|
8763
|
+
},
|
|
8764
|
+
})
|
|
8765
|
+
if (report.kept > 0) {
|
|
8766
|
+
ctx.logger.debug('condition mirror kept stale values for sources it could not read', report)
|
|
8583
8767
|
}
|
|
8584
|
-
return result.value === true
|
|
8585
8768
|
}
|
|
8586
8769
|
|
|
8587
|
-
|
|
8588
|
-
|
|
8770
|
+
/** Read one cap field off the state mirror. Returns undefined when the device,
|
|
8771
|
+
* the cap or the field cannot be resolved — the caller decides what that
|
|
8772
|
+
* means, and it always logs. (Used by the device-state TRIGGER, which the
|
|
8773
|
+
* reconcile backs; conditions read the ConditionMirror instead.) */
|
|
8774
|
+
async function readField(
|
|
8775
|
+
deviceId: number,
|
|
8776
|
+
cap: string,
|
|
8777
|
+
fieldPath: string,
|
|
8778
|
+
): Promise<unknown> {
|
|
8589
8779
|
try {
|
|
8590
|
-
const
|
|
8591
|
-
|
|
8592
|
-
|
|
8780
|
+
const slice = await ctx.api.deviceState.getCapSlice.query({ deviceId, capName: cap })
|
|
8781
|
+
let cursor: unknown = slice
|
|
8782
|
+
for (const part of fieldPath.split('.')) {
|
|
8783
|
+
if (cursor === null || typeof cursor !== 'object') return undefined
|
|
8784
|
+
cursor = (cursor as Record<string, unknown>)[part]
|
|
8785
|
+
}
|
|
8786
|
+
return cursor
|
|
8593
8787
|
} catch {
|
|
8594
8788
|
return undefined
|
|
8595
8789
|
}
|
|
8596
8790
|
}
|
|
8597
8791
|
|
|
8598
|
-
async function allOf(children: Array<() => Promise<boolean>>): Promise<boolean> {
|
|
8599
|
-
for (const c of children) { if (!(await c())) return false }
|
|
8600
|
-
return true
|
|
8601
|
-
}
|
|
8602
|
-
async function anyOf(children: Array<() => Promise<boolean>>): Promise<boolean> {
|
|
8603
|
-
for (const c of children) { if (await c()) return true }
|
|
8604
|
-
return false
|
|
8605
|
-
}
|
|
8606
|
-
async function notOf(child: () => Promise<boolean>): Promise<boolean> {
|
|
8607
|
-
return !(await child())
|
|
8608
|
-
}
|
|
8609
|
-
|
|
8610
8792
|
/** A {$var} action target, resolved from the run's bag BEFORE dispatch — the
|
|
8611
8793
|
* action runner only ever sees a number. */
|
|
8612
8794
|
function resolveTarget(vars: Record<string, unknown>, name: string): number {
|
|
8613
|
-
|
|
8614
|
-
if (typeof raw === 'number') return raw
|
|
8615
|
-
throw new Error('action target var "' + name + '" is not a device id')
|
|
8795
|
+
return resolveDeviceTarget(vars, name)
|
|
8616
8796
|
}
|
|
8617
8797
|
|
|
8618
|
-
|
|
8798
|
+
function warnMissingVar(name: string): void {
|
|
8799
|
+
ctx.logger.warn('template referenced a var that was never set', { var: name })
|
|
8800
|
+
}
|
|
8801
|
+
|
|
8802
|
+
/** Substitute {{vars.x}} slots and { $var } values. Substitution only — never evaluation. */
|
|
8619
8803
|
function substitute(value: unknown, vars: Record<string, unknown>): unknown {
|
|
8620
|
-
|
|
8621
|
-
|
|
8622
|
-
|
|
8623
|
-
|
|
8624
|
-
|
|
8625
|
-
|
|
8804
|
+
return resolveStepArgs(value, vars, warnMissingVar)
|
|
8805
|
+
}
|
|
8806
|
+
|
|
8807
|
+
/** The variables handed to an Action step, substituted and kept to primitives. */
|
|
8808
|
+
function substituteVariables(
|
|
8809
|
+
raw: Record<string, string | number | boolean>,
|
|
8810
|
+
vars: Record<string, unknown>,
|
|
8811
|
+
): Record<string, string | number | boolean> {
|
|
8812
|
+
const out: Record<string, string | number | boolean> = {}
|
|
8813
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
8814
|
+
const resolved = substitute(value, vars)
|
|
8815
|
+
if (typeof resolved === 'string' || typeof resolved === 'number' || typeof resolved === 'boolean') {
|
|
8816
|
+
out[key] = resolved
|
|
8626
8817
|
}
|
|
8627
|
-
|
|
8628
|
-
|
|
8818
|
+
}
|
|
8819
|
+
return out
|
|
8629
8820
|
}
|
|
8630
8821
|
|
|
8631
8822
|
async function actuate(
|
|
@@ -8635,8 +8826,9 @@ export default function block(ctx: AddonContext) {
|
|
|
8635
8826
|
args: Record<string, unknown>,
|
|
8636
8827
|
vars: Record<string, unknown>,
|
|
8637
8828
|
): Promise<void> {
|
|
8638
|
-
const
|
|
8639
|
-
|
|
8829
|
+
const substituted = substitute(args, vars)
|
|
8830
|
+
const resolved: Record<string, unknown> =
|
|
8831
|
+
substituted !== null && typeof substituted === 'object' ? { ...substituted } : {}
|
|
8640
8832
|
// Forked-addon ctx.api namespaces are tRPC Proxies over a noop function
|
|
8641
8833
|
// (typeof === 'function'), not plain objects — reject only null/undefined.
|
|
8642
8834
|
const client: unknown = Reflect.get(ctx.api, capToRouterKey(cap))
|
|
@@ -8650,48 +8842,1693 @@ export default function block(ctx: AddonContext) {
|
|
|
8650
8842
|
await mutate({ ...resolved, deviceId })
|
|
8651
8843
|
}
|
|
8652
8844
|
|
|
8653
|
-
|
|
8654
|
-
|
|
8655
|
-
|
|
8656
|
-
|
|
8657
|
-
|
|
8658
|
-
|
|
8659
|
-
|
|
8660
|
-
|
|
8661
|
-
|
|
8662
|
-
|
|
8845
|
+
/** The THEN half, through the ONE shared step runner: stops at the first
|
|
8846
|
+
* failure (continuing past a failed step executes an intent the operator
|
|
8847
|
+
* never expressed); every step is traced, the ones after a failure (or an
|
|
8848
|
+
* abort) are marked not-run. */
|
|
8849
|
+
async function runActions(
|
|
8850
|
+
vars: Record<string, unknown>,
|
|
8851
|
+
token: RunToken,
|
|
8852
|
+
): Promise<{ steps: readonly AutomationStepTrace[]; failed: boolean }> {
|
|
8853
|
+
const sleep = (ms: number): Promise<void> => abortableSleep(ms, token)
|
|
8854
|
+
const steps: RunnableStep[] = [
|
|
8663
8855
|
${recipe.actions.map((a, i) => emitAction(a, i)).join("\n")}
|
|
8664
|
-
|
|
8665
|
-
|
|
8856
|
+
]
|
|
8857
|
+
return runSteps(steps, {
|
|
8858
|
+
pathPrefix: 'actions',
|
|
8859
|
+
isAborted: () => token.aborted,
|
|
8860
|
+
abortReason: 'aborted by a restart',
|
|
8861
|
+
now: () => Date.now(),
|
|
8862
|
+
onFailure: (failure) => {
|
|
8666
8863
|
ctx.logger.warn('action failed — stopping the sequence', {
|
|
8667
|
-
|
|
8668
|
-
|
|
8864
|
+
...(failure.deviceId === undefined ? {} : { tags: { deviceId: failure.deviceId } }),
|
|
8865
|
+
step: failure.index,
|
|
8866
|
+
error: failure.message,
|
|
8669
8867
|
})
|
|
8868
|
+
},
|
|
8869
|
+
})
|
|
8870
|
+
}
|
|
8871
|
+
|
|
8872
|
+
function deviceTags(trigger: Record<string, unknown>): { tags?: { deviceId: number } } {
|
|
8873
|
+
const deviceId = trigger['deviceId']
|
|
8874
|
+
return typeof deviceId === 'number' ? { tags: { deviceId } } : {}
|
|
8875
|
+
}
|
|
8876
|
+
|
|
8877
|
+
function newRunId(at: number): string {
|
|
8878
|
+
runCounter += 1
|
|
8879
|
+
return at.toString(36) + '-' + runCounter.toString(36)
|
|
8880
|
+
}
|
|
8881
|
+
|
|
8882
|
+
/** A trigger that never became a run (rejected, or dropped by the run mode). */
|
|
8883
|
+
function skipTrace(
|
|
8884
|
+
trigger: Record<string, unknown>,
|
|
8885
|
+
reason: string,
|
|
8886
|
+
outcome: AutomationRunTrace['outcome'],
|
|
8887
|
+
verdict: AutomationRunVerdict | undefined,
|
|
8888
|
+
accepted: boolean,
|
|
8889
|
+
): AutomationRunTrace {
|
|
8890
|
+
const now = Date.now()
|
|
8891
|
+
return {
|
|
8892
|
+
runId: newRunId(now),
|
|
8893
|
+
startedAt: now,
|
|
8894
|
+
endedAt: now,
|
|
8895
|
+
trigger: buildTriggerTrace(trigger, accepted ? 'pass' : 'fail', reason),
|
|
8896
|
+
conditions: [],
|
|
8897
|
+
...(verdict === undefined ? {} : { verdict }),
|
|
8898
|
+
steps: [],
|
|
8899
|
+
outcome,
|
|
8900
|
+
repeat: 1,
|
|
8901
|
+
lastAt: now,
|
|
8902
|
+
}
|
|
8903
|
+
}
|
|
8904
|
+
|
|
8905
|
+
/** One admitted run: conditions (memory only), the cooldown, the actions. */
|
|
8906
|
+
async function execute(
|
|
8907
|
+
trigger: Record<string, unknown>,
|
|
8908
|
+
reason: string,
|
|
8909
|
+
admission: AutomationRunVerdict,
|
|
8910
|
+
): Promise<void> {
|
|
8911
|
+
const token: RunToken = { aborted: false }
|
|
8912
|
+
runningTokens.add(token)
|
|
8913
|
+
const startedAt = Date.now()
|
|
8914
|
+
const runId = newRunId(startedAt)
|
|
8915
|
+
let verdict = admission
|
|
8916
|
+
let outcome: AutomationRunTrace['outcome'] = 'ran'
|
|
8917
|
+
let nodes: AutomationConditionTraceNode[] = []
|
|
8918
|
+
let steps: AutomationStepTrace[] = []
|
|
8919
|
+
try {
|
|
8920
|
+
const evaluation = evaluateConditionTree(CONDITIONS, mirror, Date.now())
|
|
8921
|
+
nodes = [...evaluation.nodes]
|
|
8922
|
+
for (const node of nodes) {
|
|
8923
|
+
if (node.kind === 'condition' && node.observed === null && node.deviceId !== undefined) {
|
|
8924
|
+
ctx.logger.warn('condition leaf value unknown — treated as false', {
|
|
8925
|
+
tags: { deviceId: node.deviceId },
|
|
8926
|
+
path: node.path,
|
|
8927
|
+
cap: node.cap,
|
|
8928
|
+
fieldPath: node.fieldPath,
|
|
8929
|
+
})
|
|
8930
|
+
}
|
|
8931
|
+
}
|
|
8932
|
+
if (!evaluation.pass) {
|
|
8933
|
+
outcome = 'skipped-conditions'
|
|
8934
|
+
ctx.logger.debug('automation did not run — conditions were false', { trigger, ...deviceTags(trigger) })
|
|
8670
8935
|
return
|
|
8671
8936
|
}
|
|
8937
|
+
const letThrough = stampUnknown && RUN_MODE.mode === 'cooldown'
|
|
8938
|
+
const cooldown = letThrough
|
|
8939
|
+
? { ok: true, bypassed: true, reason: 'cooldown stamp unreadable at start — run let through' }
|
|
8940
|
+
: gate.cooldown({
|
|
8941
|
+
manual: trigger['kind'] === 'manual',
|
|
8942
|
+
now: Date.now(),
|
|
8943
|
+
lastRunStartedAt,
|
|
8944
|
+
})
|
|
8945
|
+
if (!cooldown.ok) {
|
|
8946
|
+
outcome = 'skipped-cooldown'
|
|
8947
|
+
verdict = { mode: RUN_MODE, decision: 'cooldown', reason: cooldown.reason }
|
|
8948
|
+
ctx.logger.info('automation did not run — ' + cooldown.reason, deviceTags(trigger))
|
|
8949
|
+
return
|
|
8950
|
+
}
|
|
8951
|
+
if (cooldown.bypassed) verdict = { mode: RUN_MODE, decision: 'bypass', reason: cooldown.reason }
|
|
8952
|
+
// Stamped when the actions START, and reported to the hub before they run,
|
|
8953
|
+
// so a restart mid-run cannot fire again inside the window.
|
|
8954
|
+
lastRunStartedAt = startedAt
|
|
8955
|
+
stampUnknown = false
|
|
8956
|
+
await send({ runStartedAt: startedAt })
|
|
8957
|
+
ctx.logger.info('automation running', { trigger, ...deviceTags(trigger) })
|
|
8958
|
+
const vars: Record<string, unknown> = { ...trigger }
|
|
8959
|
+
const result = await runActions(vars, token)
|
|
8960
|
+
steps = result.steps
|
|
8961
|
+
outcome = token.aborted ? 'aborted' : result.failed ? 'failed' : 'ran'
|
|
8962
|
+
} catch (err: unknown) {
|
|
8963
|
+
outcome = 'failed'
|
|
8964
|
+
ctx.logger.warn('automation run failed', { error: err instanceof Error ? err.message : String(err), ...deviceTags(trigger) })
|
|
8965
|
+
} finally {
|
|
8966
|
+
runningTokens.delete(token)
|
|
8967
|
+
const endedAt = Date.now()
|
|
8968
|
+
record({
|
|
8969
|
+
runId,
|
|
8970
|
+
startedAt,
|
|
8971
|
+
endedAt,
|
|
8972
|
+
trigger: buildTriggerTrace(trigger, 'pass', reason),
|
|
8973
|
+
conditions: nodes,
|
|
8974
|
+
verdict,
|
|
8975
|
+
steps,
|
|
8976
|
+
outcome,
|
|
8977
|
+
repeat: 1,
|
|
8978
|
+
lastAt: endedAt,
|
|
8979
|
+
})
|
|
8980
|
+
if (gate.release()) {
|
|
8981
|
+
const next = queue.shift()
|
|
8982
|
+
if (next !== undefined && !stopped) {
|
|
8983
|
+
void execute(next.trigger, next.reason, {
|
|
8984
|
+
mode: RUN_MODE,
|
|
8985
|
+
decision: 'queued',
|
|
8986
|
+
reason: 'queued, then ran after waiting ' + (Date.now() - next.queuedAt) + ' ms',
|
|
8987
|
+
})
|
|
8988
|
+
}
|
|
8989
|
+
}
|
|
8672
8990
|
}
|
|
8673
8991
|
}
|
|
8674
8992
|
|
|
8675
|
-
|
|
8676
|
-
|
|
8677
|
-
|
|
8678
|
-
|
|
8679
|
-
|
|
8993
|
+
/** Every trigger lands here. \`accepted\` = the trigger itself was satisfied
|
|
8994
|
+
* (a rejected detection event is only traced). */
|
|
8995
|
+
async function run(
|
|
8996
|
+
trigger: Record<string, unknown>,
|
|
8997
|
+
reason = 'fired',
|
|
8998
|
+
accepted = true,
|
|
8999
|
+
): Promise<void> {
|
|
9000
|
+
await ready
|
|
9001
|
+
if (stopped) return
|
|
9002
|
+
if (!accepted) {
|
|
9003
|
+
record(skipTrace(trigger, reason, 'skipped-trigger', undefined, false))
|
|
8680
9004
|
return
|
|
8681
9005
|
}
|
|
8682
|
-
|
|
8683
|
-
|
|
9006
|
+
const admission = gate.admit()
|
|
9007
|
+
const verdict: AutomationRunVerdict = { mode: RUN_MODE, decision: admission.decision, reason: admission.reason }
|
|
9008
|
+
switch (admission.decision) {
|
|
9009
|
+
case 'drop':
|
|
9010
|
+
ctx.logger.info('automation trigger dropped — ' + admission.reason, deviceTags(trigger))
|
|
9011
|
+
record(skipTrace(trigger, reason, 'skipped-overlap', verdict, true))
|
|
9012
|
+
return
|
|
9013
|
+
case 'queued':
|
|
9014
|
+
ctx.logger.info('automation trigger queued — ' + admission.reason, deviceTags(trigger))
|
|
9015
|
+
queue.push({ trigger, reason, queuedAt: Date.now() })
|
|
9016
|
+
return
|
|
9017
|
+
case 'restart':
|
|
9018
|
+
ctx.logger.info('automation restarting — ' + admission.reason, deviceTags(trigger))
|
|
9019
|
+
for (const running of runningTokens) {
|
|
9020
|
+
running.aborted = true
|
|
9021
|
+
running.wake?.()
|
|
9022
|
+
}
|
|
9023
|
+
break
|
|
9024
|
+
case 'run':
|
|
9025
|
+
break
|
|
9026
|
+
}
|
|
9027
|
+
await execute(trigger, reason, verdict)
|
|
9028
|
+
}
|
|
9029
|
+
|
|
9030
|
+
const ready: Promise<void> = (async () => {
|
|
9031
|
+
await loadState()
|
|
9032
|
+
await refreshMirror()
|
|
9033
|
+
})()
|
|
9034
|
+
|
|
9035
|
+
if (CONDITIONS !== undefined) {
|
|
9036
|
+
disposers.push(
|
|
9037
|
+
ctx.eventBus.subscribe({ category: EventCategory.DeviceStateChanged }, (event) => {
|
|
9038
|
+
const data = event.data
|
|
9039
|
+
const deviceId = data['deviceId']
|
|
9040
|
+
const capName = data['capName']
|
|
9041
|
+
if (typeof deviceId === 'number' && typeof capName === 'string') {
|
|
9042
|
+
mirror.apply(deviceId, capName, data['slice'])
|
|
9043
|
+
}
|
|
9044
|
+
}),
|
|
9045
|
+
)
|
|
9046
|
+
const mirrorReconcile = setInterval(() => { void refreshMirror() }, RECONCILE_MS)
|
|
9047
|
+
disposers.push(() => clearInterval(mirrorReconcile))
|
|
8684
9048
|
}
|
|
8685
9049
|
|
|
8686
9050
|
${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
8687
9051
|
|
|
8688
9052
|
return () => {
|
|
9053
|
+
stopped = true
|
|
9054
|
+
queue.length = 0
|
|
9055
|
+
flushSkip()
|
|
9056
|
+
for (const running of runningTokens) {
|
|
9057
|
+
running.aborted = true
|
|
9058
|
+
running.wake?.()
|
|
9059
|
+
}
|
|
8689
9060
|
for (const dispose of disposers) dispose()
|
|
8690
9061
|
}
|
|
8691
9062
|
}
|
|
8692
9063
|
`;
|
|
8693
9064
|
}
|
|
8694
9065
|
//#endregion
|
|
9066
|
+
//#region src/automation/condition-eval.ts
|
|
9067
|
+
/**
|
|
9068
|
+
* Evaluating an automation's condition tree against the ConditionMirror.
|
|
9069
|
+
*
|
|
9070
|
+
* D49: a trigger is a one-shot event, so its gate must never hang on a read
|
|
9071
|
+
* that can fail. Every field a condition leaf names is therefore kept in
|
|
9072
|
+
* memory — filled at start, updated off device state-changed events, reconciled
|
|
9073
|
+
* on a timer — and evaluation reads that memory ONLY. A value the mirror does
|
|
9074
|
+
* not hold is UNKNOWN, which is `fail` with a reason, never a throw and never a
|
|
9075
|
+
* `pass`. A failed refresh changes nothing: the previous value stays.
|
|
9076
|
+
*
|
|
9077
|
+
* The evaluator returns a node per tree position (containers, leaves, and the
|
|
9078
|
+
* ones a short-circuit never reached) with a stable path and a human reason, so
|
|
9079
|
+
* the editor can paint each block.
|
|
9080
|
+
*/
|
|
9081
|
+
function collectInto(cond, out) {
|
|
9082
|
+
switch (cond.kind) {
|
|
9083
|
+
case "all":
|
|
9084
|
+
case "any":
|
|
9085
|
+
for (const child of cond.children) collectInto(child, out);
|
|
9086
|
+
return;
|
|
9087
|
+
case "not":
|
|
9088
|
+
collectInto(cond.child, out);
|
|
9089
|
+
return;
|
|
9090
|
+
case "condition":
|
|
9091
|
+
out.push({
|
|
9092
|
+
kind: "device",
|
|
9093
|
+
deviceId: cond.deviceId,
|
|
9094
|
+
cap: cond.cap
|
|
9095
|
+
});
|
|
9096
|
+
return;
|
|
9097
|
+
case "expression":
|
|
9098
|
+
for (const binding of Object.values(cond.bindings)) if (binding.kind === "global") out.push({
|
|
9099
|
+
kind: "stable",
|
|
9100
|
+
stableId: binding.sourceStableId,
|
|
9101
|
+
cap: binding.cap
|
|
9102
|
+
});
|
|
9103
|
+
return;
|
|
9104
|
+
}
|
|
9105
|
+
}
|
|
9106
|
+
/** Every (device, cap) a tree reads, deduplicated. */
|
|
9107
|
+
function collectMirrorSources(cond) {
|
|
9108
|
+
if (cond === void 0) return [];
|
|
9109
|
+
const all = [];
|
|
9110
|
+
collectInto(cond, all);
|
|
9111
|
+
const seen = /* @__PURE__ */ new Set();
|
|
9112
|
+
return all.filter((s) => {
|
|
9113
|
+
const key = s.kind === "device" ? `d|${s.deviceId}|${s.cap}` : `s|${s.stableId}|${s.cap}`;
|
|
9114
|
+
if (seen.has(key)) return false;
|
|
9115
|
+
seen.add(key);
|
|
9116
|
+
return true;
|
|
9117
|
+
});
|
|
9118
|
+
}
|
|
9119
|
+
function sliceKey(deviceId, cap) {
|
|
9120
|
+
return `${deviceId}|${cap}`;
|
|
9121
|
+
}
|
|
9122
|
+
function pick$1(slice, fieldPath) {
|
|
9123
|
+
let cursor = slice;
|
|
9124
|
+
for (const part of fieldPath.split(".")) {
|
|
9125
|
+
if (cursor === null || typeof cursor !== "object") return void 0;
|
|
9126
|
+
cursor = Reflect.get(cursor, part);
|
|
9127
|
+
}
|
|
9128
|
+
return cursor;
|
|
9129
|
+
}
|
|
9130
|
+
function isSliceObject(value) {
|
|
9131
|
+
return typeof value === "object" && value !== null;
|
|
9132
|
+
}
|
|
9133
|
+
var ConditionMirror = class {
|
|
9134
|
+
sources;
|
|
9135
|
+
slices = /* @__PURE__ */ new Map();
|
|
9136
|
+
stableIds = /* @__PURE__ */ new Map();
|
|
9137
|
+
watched;
|
|
9138
|
+
constructor(sources) {
|
|
9139
|
+
this.sources = sources;
|
|
9140
|
+
this.watched = new Set(sources.filter((s) => s.kind === "device").map((s) => sliceKey(s.deviceId, s.cap)));
|
|
9141
|
+
}
|
|
9142
|
+
/** A `device.state-changed` event. Slices nobody reads are ignored. */
|
|
9143
|
+
apply(deviceId, cap, slice) {
|
|
9144
|
+
const key = sliceKey(deviceId, cap);
|
|
9145
|
+
if (!isSliceObject(slice)) return;
|
|
9146
|
+
if (!this.watched.has(key) && !this.isStableTarget(deviceId, cap)) return;
|
|
9147
|
+
this.slices.set(key, slice);
|
|
9148
|
+
}
|
|
9149
|
+
isStableTarget(deviceId, cap) {
|
|
9150
|
+
for (const s of this.sources) if (s.kind === "stable" && s.cap === cap && this.stableIds.get(s.stableId) === deviceId) return true;
|
|
9151
|
+
return false;
|
|
9152
|
+
}
|
|
9153
|
+
read(deviceId, cap, fieldPath) {
|
|
9154
|
+
const slice = this.slices.get(sliceKey(deviceId, cap));
|
|
9155
|
+
return slice === void 0 ? void 0 : pick$1(slice, fieldPath);
|
|
9156
|
+
}
|
|
9157
|
+
readStable(stableId, cap, fieldPath) {
|
|
9158
|
+
const deviceId = this.stableIds.get(stableId);
|
|
9159
|
+
return deviceId === void 0 ? void 0 : this.read(deviceId, cap, fieldPath);
|
|
9160
|
+
}
|
|
9161
|
+
/** Fill / reconcile. A read that fails or answers nothing keeps the old value. */
|
|
9162
|
+
async refresh(fetchers) {
|
|
9163
|
+
let updated = 0;
|
|
9164
|
+
let kept = 0;
|
|
9165
|
+
if (this.sources.some((s) => s.kind === "stable")) try {
|
|
9166
|
+
this.stableIds = await fetchers.fetchStableIds();
|
|
9167
|
+
} catch {}
|
|
9168
|
+
const targets = /* @__PURE__ */ new Map();
|
|
9169
|
+
for (const s of this.sources) {
|
|
9170
|
+
const deviceId = s.kind === "device" ? s.deviceId : this.stableIds.get(s.stableId);
|
|
9171
|
+
if (deviceId === void 0) {
|
|
9172
|
+
kept += 1;
|
|
9173
|
+
continue;
|
|
9174
|
+
}
|
|
9175
|
+
targets.set(sliceKey(deviceId, s.cap), {
|
|
9176
|
+
deviceId,
|
|
9177
|
+
cap: s.cap
|
|
9178
|
+
});
|
|
9179
|
+
}
|
|
9180
|
+
for (const [key, target] of targets) try {
|
|
9181
|
+
const slice = await fetchers.fetchSlice(target.deviceId, target.cap);
|
|
9182
|
+
if (isSliceObject(slice)) {
|
|
9183
|
+
this.slices.set(key, slice);
|
|
9184
|
+
updated += 1;
|
|
9185
|
+
} else kept += 1;
|
|
9186
|
+
} catch {
|
|
9187
|
+
kept += 1;
|
|
9188
|
+
}
|
|
9189
|
+
return {
|
|
9190
|
+
updated,
|
|
9191
|
+
kept
|
|
9192
|
+
};
|
|
9193
|
+
}
|
|
9194
|
+
};
|
|
9195
|
+
var OPERATOR_SYMBOL = {
|
|
9196
|
+
eq: "=",
|
|
9197
|
+
ne: "≠",
|
|
9198
|
+
gt: ">",
|
|
9199
|
+
gte: "≥",
|
|
9200
|
+
lt: "<",
|
|
9201
|
+
lte: "≤",
|
|
9202
|
+
contains: "contains",
|
|
9203
|
+
in: "in"
|
|
9204
|
+
};
|
|
9205
|
+
function compare(actual, operator, expected) {
|
|
9206
|
+
switch (operator) {
|
|
9207
|
+
case "eq": return actual === expected;
|
|
9208
|
+
case "ne": return actual !== expected;
|
|
9209
|
+
case "gt": return typeof actual === "number" && typeof expected === "number" && actual > expected;
|
|
9210
|
+
case "gte": return typeof actual === "number" && typeof expected === "number" && actual >= expected;
|
|
9211
|
+
case "lt": return typeof actual === "number" && typeof expected === "number" && actual < expected;
|
|
9212
|
+
case "lte": return typeof actual === "number" && typeof expected === "number" && actual <= expected;
|
|
9213
|
+
case "contains": return typeof actual === "string" && typeof expected === "string" && actual.includes(expected);
|
|
9214
|
+
case "in": return Array.isArray(expected) && expected.some((v) => v === actual);
|
|
9215
|
+
}
|
|
9216
|
+
}
|
|
9217
|
+
function toTraceValue(value) {
|
|
9218
|
+
if (value === void 0 || value === null) return null;
|
|
9219
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return value;
|
|
9220
|
+
if (Array.isArray(value) && value.every((v) => typeof v === "string" || typeof v === "number")) return value;
|
|
9221
|
+
return JSON.stringify(value);
|
|
9222
|
+
}
|
|
9223
|
+
function show(value) {
|
|
9224
|
+
return Array.isArray(value) ? `[${value.join(", ")}]` : String(value);
|
|
9225
|
+
}
|
|
9226
|
+
function markSkipped(cond, path, why, out) {
|
|
9227
|
+
out.push({
|
|
9228
|
+
path,
|
|
9229
|
+
kind: cond.kind,
|
|
9230
|
+
outcome: "not-evaluated",
|
|
9231
|
+
reason: why
|
|
9232
|
+
});
|
|
9233
|
+
if (cond.kind === "all" || cond.kind === "any") cond.children.forEach((c, i) => {
|
|
9234
|
+
markSkipped(c, `${path}.${i}`, why, out);
|
|
9235
|
+
});
|
|
9236
|
+
else if (cond.kind === "not") markSkipped(cond.child, `${path}.0`, why, out);
|
|
9237
|
+
}
|
|
9238
|
+
function evalNode(cond, path, reader, now, out) {
|
|
9239
|
+
switch (cond.kind) {
|
|
9240
|
+
case "condition": {
|
|
9241
|
+
const observed = reader.read(cond.deviceId, cond.cap, cond.fieldPath);
|
|
9242
|
+
const base = {
|
|
9243
|
+
path,
|
|
9244
|
+
kind: cond.kind,
|
|
9245
|
+
deviceId: cond.deviceId,
|
|
9246
|
+
cap: cond.cap,
|
|
9247
|
+
fieldPath: cond.fieldPath,
|
|
9248
|
+
operator: cond.operator,
|
|
9249
|
+
expected: toTraceValue(cond.value),
|
|
9250
|
+
observed: toTraceValue(observed)
|
|
9251
|
+
};
|
|
9252
|
+
if (observed === void 0) {
|
|
9253
|
+
out.push({
|
|
9254
|
+
...base,
|
|
9255
|
+
outcome: "fail",
|
|
9256
|
+
reason: `${cond.fieldPath} value unknown → fail`
|
|
9257
|
+
});
|
|
9258
|
+
return false;
|
|
9259
|
+
}
|
|
9260
|
+
const ok = compare(observed, cond.operator, cond.value);
|
|
9261
|
+
out.push({
|
|
9262
|
+
...base,
|
|
9263
|
+
outcome: ok ? "pass" : "fail",
|
|
9264
|
+
reason: `${cond.fieldPath} ${show(observed)}, expected ${OPERATOR_SYMBOL[cond.operator]} ${show(cond.value)} → ${ok ? "pass" : "fail"}`
|
|
9265
|
+
});
|
|
9266
|
+
return ok;
|
|
9267
|
+
}
|
|
9268
|
+
case "expression": {
|
|
9269
|
+
const values = {};
|
|
9270
|
+
for (const [alias, binding] of Object.entries(cond.bindings)) {
|
|
9271
|
+
if (binding.kind === "literal") {
|
|
9272
|
+
values[alias] = toExpressionValue(binding.value) ?? null;
|
|
9273
|
+
continue;
|
|
9274
|
+
}
|
|
9275
|
+
const raw = binding.kind === "global" ? reader.readStable(binding.sourceStableId, binding.cap, binding.fieldPath) : void 0;
|
|
9276
|
+
if (raw === void 0) {
|
|
9277
|
+
out.push({
|
|
9278
|
+
path,
|
|
9279
|
+
kind: cond.kind,
|
|
9280
|
+
outcome: "fail",
|
|
9281
|
+
reason: `${alias} value unknown → fail`
|
|
9282
|
+
});
|
|
9283
|
+
return false;
|
|
9284
|
+
}
|
|
9285
|
+
values[alias] = toExpressionValue(raw) ?? null;
|
|
9286
|
+
}
|
|
9287
|
+
const result = evaluateExpressionSource(cond.expr, values, now);
|
|
9288
|
+
if (!result.ok) {
|
|
9289
|
+
out.push({
|
|
9290
|
+
path,
|
|
9291
|
+
kind: cond.kind,
|
|
9292
|
+
outcome: "fail",
|
|
9293
|
+
reason: `${cond.expr}: ${result.error} → fail`
|
|
9294
|
+
});
|
|
9295
|
+
return false;
|
|
9296
|
+
}
|
|
9297
|
+
const ok = result.value === true;
|
|
9298
|
+
out.push({
|
|
9299
|
+
path,
|
|
9300
|
+
kind: cond.kind,
|
|
9301
|
+
outcome: ok ? "pass" : "fail",
|
|
9302
|
+
reason: `${cond.expr} with ${JSON.stringify(values)} → ${ok ? "pass" : "fail"}`
|
|
9303
|
+
});
|
|
9304
|
+
return ok;
|
|
9305
|
+
}
|
|
9306
|
+
case "not": {
|
|
9307
|
+
const at = out.length;
|
|
9308
|
+
out.push({
|
|
9309
|
+
path,
|
|
9310
|
+
kind: "not",
|
|
9311
|
+
outcome: "not-evaluated",
|
|
9312
|
+
reason: ""
|
|
9313
|
+
});
|
|
9314
|
+
const inner = evalNode(cond.child, `${path}.0`, reader, now, out);
|
|
9315
|
+
const ok = !inner;
|
|
9316
|
+
out.splice(at, 1, {
|
|
9317
|
+
path,
|
|
9318
|
+
kind: "not",
|
|
9319
|
+
outcome: ok ? "pass" : "fail",
|
|
9320
|
+
reason: `not (${inner ? "pass" : "fail"}) → ${ok ? "pass" : "fail"}`
|
|
9321
|
+
});
|
|
9322
|
+
return ok;
|
|
9323
|
+
}
|
|
9324
|
+
case "all":
|
|
9325
|
+
case "any": {
|
|
9326
|
+
const isAll = cond.kind === "all";
|
|
9327
|
+
const at = out.length;
|
|
9328
|
+
out.push({
|
|
9329
|
+
path,
|
|
9330
|
+
kind: cond.kind,
|
|
9331
|
+
outcome: "not-evaluated",
|
|
9332
|
+
reason: ""
|
|
9333
|
+
});
|
|
9334
|
+
let decided = null;
|
|
9335
|
+
for (let i = 0; i < cond.children.length; i += 1) {
|
|
9336
|
+
const child = cond.children[i];
|
|
9337
|
+
if (child === void 0) continue;
|
|
9338
|
+
if (decided !== null) {
|
|
9339
|
+
markSkipped(child, `${path}.${i}`, `short-circuited by ${path}.${decided}`, out);
|
|
9340
|
+
continue;
|
|
9341
|
+
}
|
|
9342
|
+
const ok = evalNode(child, `${path}.${i}`, reader, now, out);
|
|
9343
|
+
if (isAll ? !ok : ok) decided = i;
|
|
9344
|
+
}
|
|
9345
|
+
const ok = isAll ? decided === null : decided !== null;
|
|
9346
|
+
const reason = isAll ? ok ? `all ${cond.children.length} passed → pass` : `${path}.${decided} failed → fail` : ok ? `${path}.${decided} passed → pass` : `none of ${cond.children.length} passed → fail`;
|
|
9347
|
+
out.splice(at, 1, {
|
|
9348
|
+
path,
|
|
9349
|
+
kind: cond.kind,
|
|
9350
|
+
outcome: ok ? "pass" : "fail",
|
|
9351
|
+
reason
|
|
9352
|
+
});
|
|
9353
|
+
return ok;
|
|
9354
|
+
}
|
|
9355
|
+
}
|
|
9356
|
+
}
|
|
9357
|
+
/** No condition tree is a pass with no nodes. */
|
|
9358
|
+
function evaluateConditionTree(cond, reader, now) {
|
|
9359
|
+
if (cond === void 0) return {
|
|
9360
|
+
pass: true,
|
|
9361
|
+
nodes: []
|
|
9362
|
+
};
|
|
9363
|
+
const nodes = [];
|
|
9364
|
+
return {
|
|
9365
|
+
pass: evalNode(cond, "conditions", reader, now, nodes),
|
|
9366
|
+
nodes
|
|
9367
|
+
};
|
|
9368
|
+
}
|
|
9369
|
+
//#endregion
|
|
9370
|
+
//#region src/catalogs/coco-classmap.ts
|
|
9371
|
+
var COCO_80_LABELS = [
|
|
9372
|
+
{
|
|
9373
|
+
id: "person",
|
|
9374
|
+
name: "Person"
|
|
9375
|
+
},
|
|
9376
|
+
{
|
|
9377
|
+
id: "bicycle",
|
|
9378
|
+
name: "Bicycle"
|
|
9379
|
+
},
|
|
9380
|
+
{
|
|
9381
|
+
id: "car",
|
|
9382
|
+
name: "Car"
|
|
9383
|
+
},
|
|
9384
|
+
{
|
|
9385
|
+
id: "motorcycle",
|
|
9386
|
+
name: "Motorcycle"
|
|
9387
|
+
},
|
|
9388
|
+
{
|
|
9389
|
+
id: "airplane",
|
|
9390
|
+
name: "Airplane"
|
|
9391
|
+
},
|
|
9392
|
+
{
|
|
9393
|
+
id: "bus",
|
|
9394
|
+
name: "Bus"
|
|
9395
|
+
},
|
|
9396
|
+
{
|
|
9397
|
+
id: "train",
|
|
9398
|
+
name: "Train"
|
|
9399
|
+
},
|
|
9400
|
+
{
|
|
9401
|
+
id: "truck",
|
|
9402
|
+
name: "Truck"
|
|
9403
|
+
},
|
|
9404
|
+
{
|
|
9405
|
+
id: "boat",
|
|
9406
|
+
name: "Boat"
|
|
9407
|
+
},
|
|
9408
|
+
{
|
|
9409
|
+
id: "traffic light",
|
|
9410
|
+
name: "Traffic Light"
|
|
9411
|
+
},
|
|
9412
|
+
{
|
|
9413
|
+
id: "fire hydrant",
|
|
9414
|
+
name: "Fire Hydrant"
|
|
9415
|
+
},
|
|
9416
|
+
{
|
|
9417
|
+
id: "stop sign",
|
|
9418
|
+
name: "Stop Sign"
|
|
9419
|
+
},
|
|
9420
|
+
{
|
|
9421
|
+
id: "parking meter",
|
|
9422
|
+
name: "Parking Meter"
|
|
9423
|
+
},
|
|
9424
|
+
{
|
|
9425
|
+
id: "bench",
|
|
9426
|
+
name: "Bench"
|
|
9427
|
+
},
|
|
9428
|
+
{
|
|
9429
|
+
id: "bird",
|
|
9430
|
+
name: "Bird"
|
|
9431
|
+
},
|
|
9432
|
+
{
|
|
9433
|
+
id: "cat",
|
|
9434
|
+
name: "Cat"
|
|
9435
|
+
},
|
|
9436
|
+
{
|
|
9437
|
+
id: "dog",
|
|
9438
|
+
name: "Dog"
|
|
9439
|
+
},
|
|
9440
|
+
{
|
|
9441
|
+
id: "horse",
|
|
9442
|
+
name: "Horse"
|
|
9443
|
+
},
|
|
9444
|
+
{
|
|
9445
|
+
id: "sheep",
|
|
9446
|
+
name: "Sheep"
|
|
9447
|
+
},
|
|
9448
|
+
{
|
|
9449
|
+
id: "cow",
|
|
9450
|
+
name: "Cow"
|
|
9451
|
+
},
|
|
9452
|
+
{
|
|
9453
|
+
id: "elephant",
|
|
9454
|
+
name: "Elephant"
|
|
9455
|
+
},
|
|
9456
|
+
{
|
|
9457
|
+
id: "bear",
|
|
9458
|
+
name: "Bear"
|
|
9459
|
+
},
|
|
9460
|
+
{
|
|
9461
|
+
id: "zebra",
|
|
9462
|
+
name: "Zebra"
|
|
9463
|
+
},
|
|
9464
|
+
{
|
|
9465
|
+
id: "giraffe",
|
|
9466
|
+
name: "Giraffe"
|
|
9467
|
+
},
|
|
9468
|
+
{
|
|
9469
|
+
id: "backpack",
|
|
9470
|
+
name: "Backpack"
|
|
9471
|
+
},
|
|
9472
|
+
{
|
|
9473
|
+
id: "umbrella",
|
|
9474
|
+
name: "Umbrella"
|
|
9475
|
+
},
|
|
9476
|
+
{
|
|
9477
|
+
id: "handbag",
|
|
9478
|
+
name: "Handbag"
|
|
9479
|
+
},
|
|
9480
|
+
{
|
|
9481
|
+
id: "tie",
|
|
9482
|
+
name: "Tie"
|
|
9483
|
+
},
|
|
9484
|
+
{
|
|
9485
|
+
id: "suitcase",
|
|
9486
|
+
name: "Suitcase"
|
|
9487
|
+
},
|
|
9488
|
+
{
|
|
9489
|
+
id: "frisbee",
|
|
9490
|
+
name: "Frisbee"
|
|
9491
|
+
},
|
|
9492
|
+
{
|
|
9493
|
+
id: "skis",
|
|
9494
|
+
name: "Skis"
|
|
9495
|
+
},
|
|
9496
|
+
{
|
|
9497
|
+
id: "snowboard",
|
|
9498
|
+
name: "Snowboard"
|
|
9499
|
+
},
|
|
9500
|
+
{
|
|
9501
|
+
id: "sports ball",
|
|
9502
|
+
name: "Sports Ball"
|
|
9503
|
+
},
|
|
9504
|
+
{
|
|
9505
|
+
id: "kite",
|
|
9506
|
+
name: "Kite"
|
|
9507
|
+
},
|
|
9508
|
+
{
|
|
9509
|
+
id: "baseball bat",
|
|
9510
|
+
name: "Baseball Bat"
|
|
9511
|
+
},
|
|
9512
|
+
{
|
|
9513
|
+
id: "baseball glove",
|
|
9514
|
+
name: "Baseball Glove"
|
|
9515
|
+
},
|
|
9516
|
+
{
|
|
9517
|
+
id: "skateboard",
|
|
9518
|
+
name: "Skateboard"
|
|
9519
|
+
},
|
|
9520
|
+
{
|
|
9521
|
+
id: "surfboard",
|
|
9522
|
+
name: "Surfboard"
|
|
9523
|
+
},
|
|
9524
|
+
{
|
|
9525
|
+
id: "tennis racket",
|
|
9526
|
+
name: "Tennis Racket"
|
|
9527
|
+
},
|
|
9528
|
+
{
|
|
9529
|
+
id: "bottle",
|
|
9530
|
+
name: "Bottle"
|
|
9531
|
+
},
|
|
9532
|
+
{
|
|
9533
|
+
id: "wine glass",
|
|
9534
|
+
name: "Wine Glass"
|
|
9535
|
+
},
|
|
9536
|
+
{
|
|
9537
|
+
id: "cup",
|
|
9538
|
+
name: "Cup"
|
|
9539
|
+
},
|
|
9540
|
+
{
|
|
9541
|
+
id: "fork",
|
|
9542
|
+
name: "Fork"
|
|
9543
|
+
},
|
|
9544
|
+
{
|
|
9545
|
+
id: "knife",
|
|
9546
|
+
name: "Knife"
|
|
9547
|
+
},
|
|
9548
|
+
{
|
|
9549
|
+
id: "spoon",
|
|
9550
|
+
name: "Spoon"
|
|
9551
|
+
},
|
|
9552
|
+
{
|
|
9553
|
+
id: "bowl",
|
|
9554
|
+
name: "Bowl"
|
|
9555
|
+
},
|
|
9556
|
+
{
|
|
9557
|
+
id: "banana",
|
|
9558
|
+
name: "Banana"
|
|
9559
|
+
},
|
|
9560
|
+
{
|
|
9561
|
+
id: "apple",
|
|
9562
|
+
name: "Apple"
|
|
9563
|
+
},
|
|
9564
|
+
{
|
|
9565
|
+
id: "sandwich",
|
|
9566
|
+
name: "Sandwich"
|
|
9567
|
+
},
|
|
9568
|
+
{
|
|
9569
|
+
id: "orange",
|
|
9570
|
+
name: "Orange"
|
|
9571
|
+
},
|
|
9572
|
+
{
|
|
9573
|
+
id: "broccoli",
|
|
9574
|
+
name: "Broccoli"
|
|
9575
|
+
},
|
|
9576
|
+
{
|
|
9577
|
+
id: "carrot",
|
|
9578
|
+
name: "Carrot"
|
|
9579
|
+
},
|
|
9580
|
+
{
|
|
9581
|
+
id: "hot dog",
|
|
9582
|
+
name: "Hot Dog"
|
|
9583
|
+
},
|
|
9584
|
+
{
|
|
9585
|
+
id: "pizza",
|
|
9586
|
+
name: "Pizza"
|
|
9587
|
+
},
|
|
9588
|
+
{
|
|
9589
|
+
id: "donut",
|
|
9590
|
+
name: "Donut"
|
|
9591
|
+
},
|
|
9592
|
+
{
|
|
9593
|
+
id: "cake",
|
|
9594
|
+
name: "Cake"
|
|
9595
|
+
},
|
|
9596
|
+
{
|
|
9597
|
+
id: "chair",
|
|
9598
|
+
name: "Chair"
|
|
9599
|
+
},
|
|
9600
|
+
{
|
|
9601
|
+
id: "couch",
|
|
9602
|
+
name: "Couch"
|
|
9603
|
+
},
|
|
9604
|
+
{
|
|
9605
|
+
id: "potted plant",
|
|
9606
|
+
name: "Potted Plant"
|
|
9607
|
+
},
|
|
9608
|
+
{
|
|
9609
|
+
id: "bed",
|
|
9610
|
+
name: "Bed"
|
|
9611
|
+
},
|
|
9612
|
+
{
|
|
9613
|
+
id: "dining table",
|
|
9614
|
+
name: "Dining Table"
|
|
9615
|
+
},
|
|
9616
|
+
{
|
|
9617
|
+
id: "toilet",
|
|
9618
|
+
name: "Toilet"
|
|
9619
|
+
},
|
|
9620
|
+
{
|
|
9621
|
+
id: "tv",
|
|
9622
|
+
name: "TV"
|
|
9623
|
+
},
|
|
9624
|
+
{
|
|
9625
|
+
id: "laptop",
|
|
9626
|
+
name: "Laptop"
|
|
9627
|
+
},
|
|
9628
|
+
{
|
|
9629
|
+
id: "mouse",
|
|
9630
|
+
name: "Mouse"
|
|
9631
|
+
},
|
|
9632
|
+
{
|
|
9633
|
+
id: "remote",
|
|
9634
|
+
name: "Remote"
|
|
9635
|
+
},
|
|
9636
|
+
{
|
|
9637
|
+
id: "keyboard",
|
|
9638
|
+
name: "Keyboard"
|
|
9639
|
+
},
|
|
9640
|
+
{
|
|
9641
|
+
id: "cell phone",
|
|
9642
|
+
name: "Cell Phone"
|
|
9643
|
+
},
|
|
9644
|
+
{
|
|
9645
|
+
id: "microwave",
|
|
9646
|
+
name: "Microwave"
|
|
9647
|
+
},
|
|
9648
|
+
{
|
|
9649
|
+
id: "oven",
|
|
9650
|
+
name: "Oven"
|
|
9651
|
+
},
|
|
9652
|
+
{
|
|
9653
|
+
id: "toaster",
|
|
9654
|
+
name: "Toaster"
|
|
9655
|
+
},
|
|
9656
|
+
{
|
|
9657
|
+
id: "sink",
|
|
9658
|
+
name: "Sink"
|
|
9659
|
+
},
|
|
9660
|
+
{
|
|
9661
|
+
id: "refrigerator",
|
|
9662
|
+
name: "Refrigerator"
|
|
9663
|
+
},
|
|
9664
|
+
{
|
|
9665
|
+
id: "book",
|
|
9666
|
+
name: "Book"
|
|
9667
|
+
},
|
|
9668
|
+
{
|
|
9669
|
+
id: "clock",
|
|
9670
|
+
name: "Clock"
|
|
9671
|
+
},
|
|
9672
|
+
{
|
|
9673
|
+
id: "vase",
|
|
9674
|
+
name: "Vase"
|
|
9675
|
+
},
|
|
9676
|
+
{
|
|
9677
|
+
id: "scissors",
|
|
9678
|
+
name: "Scissors"
|
|
9679
|
+
},
|
|
9680
|
+
{
|
|
9681
|
+
id: "teddy bear",
|
|
9682
|
+
name: "Teddy Bear"
|
|
9683
|
+
},
|
|
9684
|
+
{
|
|
9685
|
+
id: "hair drier",
|
|
9686
|
+
name: "Hair Drier"
|
|
9687
|
+
},
|
|
9688
|
+
{
|
|
9689
|
+
id: "toothbrush",
|
|
9690
|
+
name: "Toothbrush"
|
|
9691
|
+
}
|
|
9692
|
+
];
|
|
9693
|
+
var MACRO_LABELS = [
|
|
9694
|
+
{
|
|
9695
|
+
id: "person",
|
|
9696
|
+
name: "Person"
|
|
9697
|
+
},
|
|
9698
|
+
{
|
|
9699
|
+
id: "vehicle",
|
|
9700
|
+
name: "Vehicle"
|
|
9701
|
+
},
|
|
9702
|
+
{
|
|
9703
|
+
id: "animal",
|
|
9704
|
+
name: "Animal"
|
|
9705
|
+
},
|
|
9706
|
+
{
|
|
9707
|
+
id: "package",
|
|
9708
|
+
name: "Package"
|
|
9709
|
+
}
|
|
9710
|
+
];
|
|
9711
|
+
/**
|
|
9712
|
+
* The class names a per-class COUNT can ever be keyed on — the macro ids, and
|
|
9713
|
+
* only those.
|
|
9714
|
+
*
|
|
9715
|
+
* `preserveOriginal: false` below is the whole reason this set exists: the
|
|
9716
|
+
* executor maps each raw COCO label onto its macro and DROPS everything else,
|
|
9717
|
+
* so a tracked detection's `className` is always one of {@link MACRO_LABELS}.
|
|
9718
|
+
* Any surface that indexes counts by class name — the ZoneAnalytics occupancy
|
|
9719
|
+
* snapshot's `byClass`, and therefore every occupancy rule — can match nothing
|
|
9720
|
+
* else. Derived from the catalog, never hand-listed, so a new macro joins it by
|
|
9721
|
+
* being declared once.
|
|
9722
|
+
*
|
|
9723
|
+
* Cost of not having it, 2026-08-12: the notification rule editor offered the
|
|
9724
|
+
* full taxonomy for an occupancy class (occupancy is the one condition that
|
|
9725
|
+
* does not go through the engine's macro-expanding `expandClassSelector`), two
|
|
9726
|
+
* live rules were authored on `car`, and both counters read 0 forever.
|
|
9727
|
+
*/
|
|
9728
|
+
var DETECTION_MACRO_CLASSES = new Set(MACRO_LABELS.map((l) => l.id));
|
|
9729
|
+
/** True when `className` is a macro the detector can actually emit (and hence a
|
|
9730
|
+
* class a count can be keyed on) — see {@link DETECTION_MACRO_CLASSES}. */
|
|
9731
|
+
function isDetectionMacroClass(className) {
|
|
9732
|
+
return DETECTION_MACRO_CLASSES.has(className.trim().toLowerCase());
|
|
9733
|
+
}
|
|
9734
|
+
var COCO_TO_MACRO = {
|
|
9735
|
+
mapping: {
|
|
9736
|
+
person: "person",
|
|
9737
|
+
bicycle: "vehicle",
|
|
9738
|
+
car: "vehicle",
|
|
9739
|
+
motorcycle: "vehicle",
|
|
9740
|
+
airplane: "vehicle",
|
|
9741
|
+
bus: "vehicle",
|
|
9742
|
+
train: "vehicle",
|
|
9743
|
+
truck: "vehicle",
|
|
9744
|
+
boat: "vehicle",
|
|
9745
|
+
bird: "animal",
|
|
9746
|
+
cat: "animal",
|
|
9747
|
+
dog: "animal",
|
|
9748
|
+
horse: "animal",
|
|
9749
|
+
sheep: "animal",
|
|
9750
|
+
cow: "animal",
|
|
9751
|
+
elephant: "animal",
|
|
9752
|
+
bear: "animal",
|
|
9753
|
+
zebra: "animal",
|
|
9754
|
+
giraffe: "animal",
|
|
9755
|
+
suitcase: "package",
|
|
9756
|
+
backpack: "package",
|
|
9757
|
+
handbag: "package"
|
|
9758
|
+
},
|
|
9759
|
+
preserveOriginal: false
|
|
9760
|
+
};
|
|
9761
|
+
var MACRO_NAMES = new Set(Object.values(COCO_TO_MACRO.mapping));
|
|
9762
|
+
function macroOf(className) {
|
|
9763
|
+
return COCO_TO_MACRO.mapping[className] ?? className;
|
|
9764
|
+
}
|
|
9765
|
+
/** `animal` matches a dog; `dog` matches only a dog (a cat is also an animal). */
|
|
9766
|
+
function detectionClassMatches(wanted, actual) {
|
|
9767
|
+
const w = wanted.toLowerCase();
|
|
9768
|
+
const a = actual.toLowerCase();
|
|
9769
|
+
if (w === a) return true;
|
|
9770
|
+
return MACRO_NAMES.has(w) && macroOf(a) === w;
|
|
9771
|
+
}
|
|
9772
|
+
function isPhase(value) {
|
|
9773
|
+
return value === "start" || value === "update" || value === "end";
|
|
9774
|
+
}
|
|
9775
|
+
var DetectionTriggerFilter = class {
|
|
9776
|
+
trigger;
|
|
9777
|
+
/** `${deviceId}|${trackId}` → fired at. Insertion-ordered, so the oldest is first. */
|
|
9778
|
+
fired = /* @__PURE__ */ new Map();
|
|
9779
|
+
constructor(trigger) {
|
|
9780
|
+
this.trigger = trigger;
|
|
9781
|
+
}
|
|
9782
|
+
get firedCount() {
|
|
9783
|
+
return this.fired.size;
|
|
9784
|
+
}
|
|
9785
|
+
evaluate(event, now) {
|
|
9786
|
+
const { deviceId, trackId, phase } = event;
|
|
9787
|
+
if (typeof deviceId !== "number" || typeof trackId !== "string" || !isPhase(phase)) return {
|
|
9788
|
+
kind: "ignore",
|
|
9789
|
+
why: "malformed track-lifecycle event"
|
|
9790
|
+
};
|
|
9791
|
+
if (!this.trigger.deviceIds.includes(deviceId)) return {
|
|
9792
|
+
kind: "ignore",
|
|
9793
|
+
why: `device ${deviceId} is not one of the trigger's devices`
|
|
9794
|
+
};
|
|
9795
|
+
const key = `${deviceId}|${trackId}`;
|
|
9796
|
+
if (phase === "end") {
|
|
9797
|
+
this.fired.delete(key);
|
|
9798
|
+
return {
|
|
9799
|
+
kind: "ignore",
|
|
9800
|
+
why: "track ended"
|
|
9801
|
+
};
|
|
9802
|
+
}
|
|
9803
|
+
this.expire(now);
|
|
9804
|
+
const className = typeof event.bestClassName === "string" ? event.bestClassName : "";
|
|
9805
|
+
const score = typeof event.bestConfidence === "number" ? event.bestConfidence : 0;
|
|
9806
|
+
const vars = {
|
|
9807
|
+
deviceId,
|
|
9808
|
+
className,
|
|
9809
|
+
trackId,
|
|
9810
|
+
score
|
|
9811
|
+
};
|
|
9812
|
+
if (this.fired.has(key)) return {
|
|
9813
|
+
kind: "reject",
|
|
9814
|
+
reason: `already fired for track ${trackId}`,
|
|
9815
|
+
vars
|
|
9816
|
+
};
|
|
9817
|
+
if (!this.trigger.classes.some((c) => detectionClassMatches(c, className))) return {
|
|
9818
|
+
kind: "reject",
|
|
9819
|
+
reason: `class ${className || "unknown"} not in [${this.trigger.classes.join(", ")}]`,
|
|
9820
|
+
vars
|
|
9821
|
+
};
|
|
9822
|
+
if (this.trigger.minScore !== void 0 && score < this.trigger.minScore) return {
|
|
9823
|
+
kind: "reject",
|
|
9824
|
+
reason: `score ${score} < ${this.trigger.minScore}`,
|
|
9825
|
+
vars
|
|
9826
|
+
};
|
|
9827
|
+
if (this.trigger.zones !== void 0) {
|
|
9828
|
+
const visited = Array.isArray(event.zonesVisited) ? event.zonesVisited.filter((z) => typeof z === "string") : [];
|
|
9829
|
+
if (!this.trigger.zones.some((z) => visited.includes(z))) return {
|
|
9830
|
+
kind: "reject",
|
|
9831
|
+
reason: `zone mismatch: visited [${visited.join(", ")}], wanted [${this.trigger.zones.join(", ")}]`,
|
|
9832
|
+
vars
|
|
9833
|
+
};
|
|
9834
|
+
}
|
|
9835
|
+
this.remember(key, now);
|
|
9836
|
+
return {
|
|
9837
|
+
kind: "fire",
|
|
9838
|
+
reason: `${className} ${score} on device ${deviceId}`,
|
|
9839
|
+
vars
|
|
9840
|
+
};
|
|
9841
|
+
}
|
|
9842
|
+
remember(key, now) {
|
|
9843
|
+
this.fired.set(key, now);
|
|
9844
|
+
while (this.fired.size > 512) {
|
|
9845
|
+
const oldest = this.fired.keys().next();
|
|
9846
|
+
if (oldest.done === true) break;
|
|
9847
|
+
this.fired.delete(oldest.value);
|
|
9848
|
+
}
|
|
9849
|
+
}
|
|
9850
|
+
expire(now) {
|
|
9851
|
+
for (const [key, at] of this.fired) {
|
|
9852
|
+
if (now - at < 9e5) break;
|
|
9853
|
+
this.fired.delete(key);
|
|
9854
|
+
}
|
|
9855
|
+
}
|
|
9856
|
+
};
|
|
9857
|
+
//#endregion
|
|
9858
|
+
//#region src/automation/run-gate.ts
|
|
9859
|
+
var MINUTE_MS$1 = 6e4;
|
|
9860
|
+
function minutes(ms) {
|
|
9861
|
+
return (ms / MINUTE_MS$1).toFixed(1);
|
|
9862
|
+
}
|
|
9863
|
+
var RunGate = class {
|
|
9864
|
+
mode;
|
|
9865
|
+
active = 0;
|
|
9866
|
+
pending = 0;
|
|
9867
|
+
constructor(mode) {
|
|
9868
|
+
this.mode = mode;
|
|
9869
|
+
}
|
|
9870
|
+
get activeRuns() {
|
|
9871
|
+
return this.active;
|
|
9872
|
+
}
|
|
9873
|
+
get queuedTriggers() {
|
|
9874
|
+
return this.pending;
|
|
9875
|
+
}
|
|
9876
|
+
admit() {
|
|
9877
|
+
const mode = this.mode;
|
|
9878
|
+
switch (mode.mode) {
|
|
9879
|
+
case "single":
|
|
9880
|
+
case "cooldown":
|
|
9881
|
+
if (this.active > 0) return {
|
|
9882
|
+
decision: "drop",
|
|
9883
|
+
reason: `${mode.mode}: a run is already in progress`
|
|
9884
|
+
};
|
|
9885
|
+
this.active += 1;
|
|
9886
|
+
return {
|
|
9887
|
+
decision: "run",
|
|
9888
|
+
reason: `${mode.mode}: no run in progress`
|
|
9889
|
+
};
|
|
9890
|
+
case "restart":
|
|
9891
|
+
if (this.active > 0) {
|
|
9892
|
+
this.active += 1;
|
|
9893
|
+
return {
|
|
9894
|
+
decision: "restart",
|
|
9895
|
+
reason: `restart: aborting ${this.active - 1} run(s) in progress`
|
|
9896
|
+
};
|
|
9897
|
+
}
|
|
9898
|
+
this.active += 1;
|
|
9899
|
+
return {
|
|
9900
|
+
decision: "run",
|
|
9901
|
+
reason: "restart: no run in progress"
|
|
9902
|
+
};
|
|
9903
|
+
case "queued":
|
|
9904
|
+
if (this.active === 0) {
|
|
9905
|
+
this.active += 1;
|
|
9906
|
+
return {
|
|
9907
|
+
decision: "run",
|
|
9908
|
+
reason: "queued: no run in progress"
|
|
9909
|
+
};
|
|
9910
|
+
}
|
|
9911
|
+
if (this.pending < mode.max) {
|
|
9912
|
+
this.pending += 1;
|
|
9913
|
+
return {
|
|
9914
|
+
decision: "queued",
|
|
9915
|
+
reason: `queued: a run is in progress, waiting ${this.pending} of ${mode.max}`
|
|
9916
|
+
};
|
|
9917
|
+
}
|
|
9918
|
+
return {
|
|
9919
|
+
decision: "drop",
|
|
9920
|
+
reason: `queued: a run is in progress and the queue is full (${mode.max})`
|
|
9921
|
+
};
|
|
9922
|
+
case "parallel":
|
|
9923
|
+
if (this.active < mode.max) {
|
|
9924
|
+
this.active += 1;
|
|
9925
|
+
return {
|
|
9926
|
+
decision: "run",
|
|
9927
|
+
reason: `parallel: ${this.active} of ${mode.max} running`
|
|
9928
|
+
};
|
|
9929
|
+
}
|
|
9930
|
+
return {
|
|
9931
|
+
decision: "drop",
|
|
9932
|
+
reason: `parallel: ${mode.max} runs already in progress`
|
|
9933
|
+
};
|
|
9934
|
+
}
|
|
9935
|
+
}
|
|
9936
|
+
/** The run holding a slot ended (any outcome). True = a queued trigger took the slot. */
|
|
9937
|
+
release() {
|
|
9938
|
+
if (this.active > 0) this.active -= 1;
|
|
9939
|
+
if (this.mode.mode === "queued" && this.pending > 0) {
|
|
9940
|
+
this.pending -= 1;
|
|
9941
|
+
this.active += 1;
|
|
9942
|
+
return true;
|
|
9943
|
+
}
|
|
9944
|
+
return false;
|
|
9945
|
+
}
|
|
9946
|
+
/** Checked AFTER the conditions pass. Always `ok` outside `cooldown` mode. */
|
|
9947
|
+
cooldown(input) {
|
|
9948
|
+
if (this.mode.mode !== "cooldown") return {
|
|
9949
|
+
ok: true,
|
|
9950
|
+
bypassed: false,
|
|
9951
|
+
reason: ""
|
|
9952
|
+
};
|
|
9953
|
+
const waitMs = this.mode.minutes * MINUTE_MS$1;
|
|
9954
|
+
if (input.lastRunStartedAt === null) return {
|
|
9955
|
+
ok: true,
|
|
9956
|
+
bypassed: false,
|
|
9957
|
+
reason: `cooldown ${this.mode.minutes} min: no earlier run`
|
|
9958
|
+
};
|
|
9959
|
+
const elapsed = input.now - input.lastRunStartedAt;
|
|
9960
|
+
if (elapsed >= waitMs) return {
|
|
9961
|
+
ok: true,
|
|
9962
|
+
bypassed: false,
|
|
9963
|
+
reason: `cooldown ${this.mode.minutes} min: last run started ${minutes(elapsed)} min ago`
|
|
9964
|
+
};
|
|
9965
|
+
const left = `${minutes(waitMs - elapsed)} min left`;
|
|
9966
|
+
if (input.manual) return {
|
|
9967
|
+
ok: true,
|
|
9968
|
+
bypassed: true,
|
|
9969
|
+
reason: `cooldown ${this.mode.minutes} min bypassed by a manual trigger (${left})`
|
|
9970
|
+
};
|
|
9971
|
+
return {
|
|
9972
|
+
ok: false,
|
|
9973
|
+
bypassed: false,
|
|
9974
|
+
reason: `cooldown ${this.mode.minutes} min: last run started ${minutes(elapsed)} min ago, ${left}`
|
|
9975
|
+
};
|
|
9976
|
+
}
|
|
9977
|
+
};
|
|
9978
|
+
//#endregion
|
|
9979
|
+
//#region src/automation/trace.ts
|
|
9980
|
+
/**
|
|
9981
|
+
* Run traces — what an automation (or, later, an Action run) DID, node by node,
|
|
9982
|
+
* so the editor can paint every block green or red with its reason.
|
|
9983
|
+
*
|
|
9984
|
+
* A trace is data, not a log: it covers the WHOLE tree — the trigger stage,
|
|
9985
|
+
* every condition node (containers and leaves, including the ones a
|
|
9986
|
+
* short-circuit never reached), the run-mode verdict and every action step —
|
|
9987
|
+
* each addressed by a stable path (`conditions.0.1`, `actions.2`, or `steps.N`
|
|
9988
|
+
* for an Action run). Skipped
|
|
9989
|
+
* evaluations are traced too, and identical consecutive skips collapse into a
|
|
9990
|
+
* repeat count so a trigger that fails every 5 minutes cannot flush real runs.
|
|
9991
|
+
*
|
|
9992
|
+
* {@link AutomationStepTraceSchema} is deliberately free of automation
|
|
9993
|
+
* vocabulary so an Action run records the same step shape.
|
|
9994
|
+
*/
|
|
9995
|
+
/** A value a trace may show: JSON primitives and short lists, nothing deeper. */
|
|
9996
|
+
var TraceValueSchema = z.union([
|
|
9997
|
+
z.string(),
|
|
9998
|
+
z.number(),
|
|
9999
|
+
z.boolean(),
|
|
10000
|
+
z.null(),
|
|
10001
|
+
z.array(z.union([z.string(), z.number()]))
|
|
10002
|
+
]);
|
|
10003
|
+
var AutomationRunOutcomeSchema = z.enum([
|
|
10004
|
+
"ran",
|
|
10005
|
+
"skipped-trigger",
|
|
10006
|
+
"skipped-conditions",
|
|
10007
|
+
"skipped-cooldown",
|
|
10008
|
+
"skipped-overlap",
|
|
10009
|
+
"failed",
|
|
10010
|
+
"aborted"
|
|
10011
|
+
]);
|
|
10012
|
+
/** `not-evaluated` = a short-circuit never reached the node. */
|
|
10013
|
+
var TraceNodeOutcomeSchema = z.enum([
|
|
10014
|
+
"pass",
|
|
10015
|
+
"fail",
|
|
10016
|
+
"not-evaluated"
|
|
10017
|
+
]);
|
|
10018
|
+
var AutomationTriggerTraceSchema = z.object({
|
|
10019
|
+
kind: z.string().min(1),
|
|
10020
|
+
outcome: z.enum(["pass", "fail"]),
|
|
10021
|
+
/** Why an event was rejected ("class person not in [dog]") or what fired. */
|
|
10022
|
+
reason: z.string(),
|
|
10023
|
+
/** deviceId, className, trackId, score … — only what the trigger exposes. */
|
|
10024
|
+
vars: z.record(z.string(), TraceValueSchema)
|
|
10025
|
+
});
|
|
10026
|
+
var AutomationConditionTraceNodeSchema = z.object({
|
|
10027
|
+
/** `conditions` for the root, `conditions.<i>` for its i-th child, … */
|
|
10028
|
+
path: z.string().min(1),
|
|
10029
|
+
kind: z.enum([
|
|
10030
|
+
"all",
|
|
10031
|
+
"any",
|
|
10032
|
+
"not",
|
|
10033
|
+
"condition",
|
|
10034
|
+
"expression"
|
|
10035
|
+
]),
|
|
10036
|
+
outcome: TraceNodeOutcomeSchema,
|
|
10037
|
+
reason: z.string(),
|
|
10038
|
+
deviceId: z.number().int().optional(),
|
|
10039
|
+
cap: z.string().optional(),
|
|
10040
|
+
fieldPath: z.string().optional(),
|
|
10041
|
+
operator: z.string().optional(),
|
|
10042
|
+
expected: TraceValueSchema.optional(),
|
|
10043
|
+
/** What the mirror held; `null` when it held nothing (unknown). */
|
|
10044
|
+
observed: TraceValueSchema.optional()
|
|
10045
|
+
});
|
|
10046
|
+
var AutomationRunVerdictSchema = z.object({
|
|
10047
|
+
mode: AutomationRunModeSchema,
|
|
10048
|
+
decision: z.enum([
|
|
10049
|
+
"run",
|
|
10050
|
+
"queued",
|
|
10051
|
+
"restart",
|
|
10052
|
+
"drop",
|
|
10053
|
+
"cooldown",
|
|
10054
|
+
"bypass"
|
|
10055
|
+
]),
|
|
10056
|
+
reason: z.string()
|
|
10057
|
+
});
|
|
10058
|
+
/** One executed (or not-run) step — shared by automations and Action runs. */
|
|
10059
|
+
var AutomationStepTraceSchema = z.object({
|
|
10060
|
+
/** `actions.<i>` */
|
|
10061
|
+
path: z.string().min(1),
|
|
10062
|
+
kind: z.string().min(1),
|
|
10063
|
+
cap: z.string().optional(),
|
|
10064
|
+
method: z.string().optional(),
|
|
10065
|
+
deviceId: z.number().int().optional(),
|
|
10066
|
+
startedAt: z.number().optional(),
|
|
10067
|
+
endedAt: z.number().optional(),
|
|
10068
|
+
outcome: z.enum([
|
|
10069
|
+
"ok",
|
|
10070
|
+
"error",
|
|
10071
|
+
"not-run"
|
|
10072
|
+
]),
|
|
10073
|
+
message: z.string().optional()
|
|
10074
|
+
});
|
|
10075
|
+
var AutomationRunTraceSchema = z.object({
|
|
10076
|
+
runId: z.string().min(1),
|
|
10077
|
+
startedAt: z.number(),
|
|
10078
|
+
endedAt: z.number(),
|
|
10079
|
+
trigger: AutomationTriggerTraceSchema,
|
|
10080
|
+
conditions: z.array(AutomationConditionTraceNodeSchema),
|
|
10081
|
+
verdict: AutomationRunVerdictSchema.optional(),
|
|
10082
|
+
steps: z.array(AutomationStepTraceSchema),
|
|
10083
|
+
outcome: AutomationRunOutcomeSchema,
|
|
10084
|
+
/** How many identical consecutive skips this trace stands for (>= 1). */
|
|
10085
|
+
repeat: z.number().int().min(1),
|
|
10086
|
+
/** When the latest of those repeats happened. */
|
|
10087
|
+
lastAt: z.number()
|
|
10088
|
+
});
|
|
10089
|
+
/**
|
|
10090
|
+
* What the hub's `runs` ledger holds for one owner (`automation:<blockId>` or
|
|
10091
|
+
* `action:<actionId>`): the cooldown stamp and the trace ring.
|
|
10092
|
+
*/
|
|
10093
|
+
var AutomationStateDocSchema = z.object({
|
|
10094
|
+
version: z.literal(1),
|
|
10095
|
+
lastRunStartedAt: z.number().nullable(),
|
|
10096
|
+
traces: z.array(AutomationRunTraceSchema)
|
|
10097
|
+
});
|
|
10098
|
+
/** The state of an owner that never reported. */
|
|
10099
|
+
var EMPTY_AUTOMATION_STATE = {
|
|
10100
|
+
version: 1,
|
|
10101
|
+
lastRunStartedAt: null,
|
|
10102
|
+
traces: []
|
|
10103
|
+
};
|
|
10104
|
+
function isSkippedTrace(trace) {
|
|
10105
|
+
return trace.outcome.startsWith("skipped-");
|
|
10106
|
+
}
|
|
10107
|
+
/** Numbers vary between repeats of the same cause ("0.41 < 0.6" / "0.43 < 0.6"). */
|
|
10108
|
+
function normaliseReason(reason) {
|
|
10109
|
+
return reason.replace(/\d+(\.\d+)?/g, "#");
|
|
10110
|
+
}
|
|
10111
|
+
/** Two skips with the same signature are the same event repeating. */
|
|
10112
|
+
function skipSignature(trace) {
|
|
10113
|
+
return JSON.stringify([
|
|
10114
|
+
trace.outcome,
|
|
10115
|
+
trace.trigger.kind,
|
|
10116
|
+
trace.trigger.outcome,
|
|
10117
|
+
normaliseReason(trace.trigger.reason),
|
|
10118
|
+
trace.verdict === void 0 ? null : [trace.verdict.decision, normaliseReason(trace.verdict.reason)],
|
|
10119
|
+
trace.conditions.map((n) => [n.path, n.outcome])
|
|
10120
|
+
]);
|
|
10121
|
+
}
|
|
10122
|
+
/**
|
|
10123
|
+
* `next` folded into `prev` when both are skips of the same signature (the
|
|
10124
|
+
* repeat count and the latest time move on), else null. Used by the block
|
|
10125
|
+
* BEFORE it sends, so a trigger that fails every few seconds costs one RPC per
|
|
10126
|
+
* flush, not one per skip; the ledger applies the same rule through
|
|
10127
|
+
* {@link appendTrace}.
|
|
10128
|
+
*/
|
|
10129
|
+
function mergeSkipTraces(prev, next) {
|
|
10130
|
+
if (!isSkippedTrace(prev) || !isSkippedTrace(next)) return null;
|
|
10131
|
+
if (skipSignature(prev) !== skipSignature(next)) return null;
|
|
10132
|
+
return {
|
|
10133
|
+
...prev,
|
|
10134
|
+
repeat: prev.repeat + next.repeat,
|
|
10135
|
+
lastAt: next.lastAt,
|
|
10136
|
+
endedAt: next.endedAt
|
|
10137
|
+
};
|
|
10138
|
+
}
|
|
10139
|
+
/**
|
|
10140
|
+
* Append a trace to a ring of at most `keep` entries, without mutating it.
|
|
10141
|
+
*
|
|
10142
|
+
* - A skip identical to the previous trace is counted on that trace
|
|
10143
|
+
* (`repeat`, `lastAt`), not appended.
|
|
10144
|
+
* - When the ring is full, the oldest SKIPPED trace goes first; a real run is
|
|
10145
|
+
* evicted only when every trace is a run. A noisy skip stream therefore
|
|
10146
|
+
* cannot push the runs the operator is looking for out of the ring.
|
|
10147
|
+
*/
|
|
10148
|
+
function appendTrace(ring, trace, keep) {
|
|
10149
|
+
const last = ring[ring.length - 1];
|
|
10150
|
+
const merged = last === void 0 ? null : mergeSkipTraces(last, trace);
|
|
10151
|
+
if (merged !== null) return [...ring.slice(0, -1), merged];
|
|
10152
|
+
const next = [...ring, trace];
|
|
10153
|
+
while (next.length > keep) {
|
|
10154
|
+
const skipAt = next.findIndex((t, i) => i < next.length - 1 && isSkippedTrace(t));
|
|
10155
|
+
next.splice(skipAt === -1 ? 0 : skipAt, 1);
|
|
10156
|
+
}
|
|
10157
|
+
return next;
|
|
10158
|
+
}
|
|
10159
|
+
/**
|
|
10160
|
+
* The trigger stage of a trace from the bag a trigger handed to `run()`:
|
|
10161
|
+
* primitives only (a device-state `to` that is an object is left out), minus the
|
|
10162
|
+
* bookkeeping keys `kind` and `at`.
|
|
10163
|
+
*/
|
|
10164
|
+
function buildTriggerTrace(trigger, outcome, reason) {
|
|
10165
|
+
const vars = {};
|
|
10166
|
+
for (const [key, value] of Object.entries(trigger)) {
|
|
10167
|
+
if (key === "kind" || key === "at") continue;
|
|
10168
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean" || value === null) vars[key] = value;
|
|
10169
|
+
}
|
|
10170
|
+
return {
|
|
10171
|
+
kind: typeof trigger["kind"] === "string" ? trigger["kind"] : "unknown",
|
|
10172
|
+
outcome,
|
|
10173
|
+
reason,
|
|
10174
|
+
vars
|
|
10175
|
+
};
|
|
10176
|
+
}
|
|
10177
|
+
//#endregion
|
|
10178
|
+
//#region src/automation/action.ts
|
|
10179
|
+
/**
|
|
10180
|
+
* Actions — named, runnable things an operator (or an automation) can start,
|
|
10181
|
+
* declared as LIST ENTRIES, never as devices.
|
|
10182
|
+
*
|
|
10183
|
+
* An entry is either **internal** (a short list of cap/wait steps kept in the
|
|
10184
|
+
* hub's `actions` record kind) or declared by an addon through the
|
|
10185
|
+
* `action-source` collection (a Home Assistant script, a scene …). The one
|
|
10186
|
+
* surface the UI and automations talk to is the `actions` cap; it keeps no
|
|
10187
|
+
* catalog of its own (D3) — every `list` asks the providers live.
|
|
10188
|
+
*
|
|
10189
|
+
* This file is the data half: the entry schema, the variables an entry may
|
|
10190
|
+
* declare, and the pure resolution of the values a run was given. It holds no
|
|
10191
|
+
* runtime.
|
|
10192
|
+
*/
|
|
10193
|
+
/** What a variable's value is. `select` takes one of `options`. */
|
|
10194
|
+
var ActionVariableTypeSchema = z.enum([
|
|
10195
|
+
"string",
|
|
10196
|
+
"number",
|
|
10197
|
+
"boolean",
|
|
10198
|
+
"select"
|
|
10199
|
+
]);
|
|
10200
|
+
var ACTION_VARIABLE_NAME_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
10201
|
+
var ActionVariableValueSchema = z.union([
|
|
10202
|
+
z.string(),
|
|
10203
|
+
z.number(),
|
|
10204
|
+
z.boolean()
|
|
10205
|
+
]);
|
|
10206
|
+
/**
|
|
10207
|
+
* One declared variable. Steps reference it as `{ $var: 'name' }` (the whole
|
|
10208
|
+
* value) or `{{vars.name}}` (inside a string) in their args.
|
|
10209
|
+
*/
|
|
10210
|
+
var ActionVariableSchema = z.object({
|
|
10211
|
+
name: z.string().regex(ACTION_VARIABLE_NAME_RE),
|
|
10212
|
+
label: z.string().min(1).max(120).optional(),
|
|
10213
|
+
type: ActionVariableTypeSchema,
|
|
10214
|
+
required: z.boolean().optional(),
|
|
10215
|
+
default: ActionVariableValueSchema.optional(),
|
|
10216
|
+
/** The allowed values of a `select`. */
|
|
10217
|
+
options: z.array(z.string().min(1)).min(1).optional()
|
|
10218
|
+
}).superRefine((v, ctx) => {
|
|
10219
|
+
if (v.type === "select" && v.options === void 0) ctx.addIssue({
|
|
10220
|
+
code: "custom",
|
|
10221
|
+
message: "a select variable needs options",
|
|
10222
|
+
path: ["options"]
|
|
10223
|
+
});
|
|
10224
|
+
if (v.default !== void 0 && variableValueError(v, v.default) !== null) ctx.addIssue({
|
|
10225
|
+
code: "custom",
|
|
10226
|
+
message: variableValueError(v, v.default) ?? "invalid default",
|
|
10227
|
+
path: ["default"]
|
|
10228
|
+
});
|
|
10229
|
+
});
|
|
10230
|
+
/** Why `value` is not a legal value for the variable, or null when it is. */
|
|
10231
|
+
function variableValueError(variable, value) {
|
|
10232
|
+
switch (variable.type) {
|
|
10233
|
+
case "string": return typeof value === "string" ? null : `variable "${variable.name}" must be a string`;
|
|
10234
|
+
case "number": return typeof value === "number" && Number.isFinite(value) ? null : `variable "${variable.name}" must be a number`;
|
|
10235
|
+
case "boolean": return typeof value === "boolean" ? null : `variable "${variable.name}" must be true or false`;
|
|
10236
|
+
case "select": return typeof value === "string" && (variable.options ?? []).includes(value) ? null : `variable "${variable.name}" must be one of ${(variable.options ?? []).join(", ")}`;
|
|
10237
|
+
}
|
|
10238
|
+
}
|
|
10239
|
+
/**
|
|
10240
|
+
* The values a run starts with: what the caller gave, checked against the
|
|
10241
|
+
* declaration, with defaults filled. A value the entry did not declare is
|
|
10242
|
+
* REFUSED — a typo in a variable name must not silently run with the default.
|
|
10243
|
+
*/
|
|
10244
|
+
function resolveActionVariables(declared, given) {
|
|
10245
|
+
const decls = declared ?? [];
|
|
10246
|
+
const provided = given ?? {};
|
|
10247
|
+
for (const name of Object.keys(provided)) if (!decls.some((d) => d.name === name)) return {
|
|
10248
|
+
ok: false,
|
|
10249
|
+
error: `unknown variable "${name}"`
|
|
10250
|
+
};
|
|
10251
|
+
const values = {};
|
|
10252
|
+
for (const decl of decls) {
|
|
10253
|
+
const value = provided[decl.name] ?? decl.default;
|
|
10254
|
+
if (value === void 0) {
|
|
10255
|
+
if (decl.required === true) return {
|
|
10256
|
+
ok: false,
|
|
10257
|
+
error: `variable "${decl.name}" is required`
|
|
10258
|
+
};
|
|
10259
|
+
continue;
|
|
10260
|
+
}
|
|
10261
|
+
const error = variableValueError(decl, value);
|
|
10262
|
+
if (error !== null) return {
|
|
10263
|
+
ok: false,
|
|
10264
|
+
error
|
|
10265
|
+
};
|
|
10266
|
+
values[decl.name] = value;
|
|
10267
|
+
}
|
|
10268
|
+
return {
|
|
10269
|
+
ok: true,
|
|
10270
|
+
values
|
|
10271
|
+
};
|
|
10272
|
+
}
|
|
10273
|
+
var ActionSourceKindSchema = z.enum(["internal", "addon"]);
|
|
10274
|
+
/** Prefix of an internal action's id. */
|
|
10275
|
+
var INTERNAL_ACTION_PREFIX = "internal:";
|
|
10276
|
+
function internalActionId(uuid) {
|
|
10277
|
+
return `${INTERNAL_ACTION_PREFIX}${uuid}`;
|
|
10278
|
+
}
|
|
10279
|
+
function isInternalActionId(actionId) {
|
|
10280
|
+
return actionId.startsWith("internal:") && actionId.length > 9;
|
|
10281
|
+
}
|
|
10282
|
+
/** The addon behind a `<addonId>:<localId>` id, or null for anything else (internal included). */
|
|
10283
|
+
function addonIdOfActionId(actionId) {
|
|
10284
|
+
if (isInternalActionId(actionId)) return null;
|
|
10285
|
+
const at = actionId.indexOf(":");
|
|
10286
|
+
return at > 0 && at < actionId.length - 1 ? actionId.slice(0, at) : null;
|
|
10287
|
+
}
|
|
10288
|
+
var ActionStatusSchema = z.object({
|
|
10289
|
+
isRunning: z.boolean(),
|
|
10290
|
+
/** Ms epoch the latest run STARTED; null when it never ran. */
|
|
10291
|
+
lastRunAt: z.number().nullable(),
|
|
10292
|
+
/** The latest run's failure; null on success or when it never ran. */
|
|
10293
|
+
lastError: z.string().nullable()
|
|
10294
|
+
});
|
|
10295
|
+
var IDLE_ACTION_STATUS = {
|
|
10296
|
+
isRunning: false,
|
|
10297
|
+
lastRunAt: null,
|
|
10298
|
+
lastError: null
|
|
10299
|
+
};
|
|
10300
|
+
var ActionEntrySchema = z.object({
|
|
10301
|
+
/** `internal:<uuid>` or `<addonId>:<localId>`. */
|
|
10302
|
+
id: z.string().min(3),
|
|
10303
|
+
name: z.string().min(1).max(120),
|
|
10304
|
+
/** The addon that declared it; `core-blocks` for an internal one. */
|
|
10305
|
+
addonId: z.string().min(1),
|
|
10306
|
+
source: ActionSourceKindSchema,
|
|
10307
|
+
/** An addon-declared entry is edited where it was declared. */
|
|
10308
|
+
readOnly: z.boolean(),
|
|
10309
|
+
/** Internal only: cap and wait steps. No action-in-action, so no cycles. */
|
|
10310
|
+
steps: z.array(ActionStepSchema).min(1).max(50).optional(),
|
|
10311
|
+
variables: z.array(ActionVariableSchema).max(20).optional(),
|
|
10312
|
+
status: ActionStatusSchema
|
|
10313
|
+
}).superRefine((entry, ctx) => {
|
|
10314
|
+
if (entry.source === "internal") {
|
|
10315
|
+
if (!isInternalActionId(entry.id)) ctx.addIssue({
|
|
10316
|
+
code: "custom",
|
|
10317
|
+
message: "an internal action id is internal:<uuid>",
|
|
10318
|
+
path: ["id"]
|
|
10319
|
+
});
|
|
10320
|
+
return;
|
|
10321
|
+
}
|
|
10322
|
+
if (entry.steps !== void 0) ctx.addIssue({
|
|
10323
|
+
code: "custom",
|
|
10324
|
+
message: "only an internal action carries steps",
|
|
10325
|
+
path: ["steps"]
|
|
10326
|
+
});
|
|
10327
|
+
if (!entry.readOnly) ctx.addIssue({
|
|
10328
|
+
code: "custom",
|
|
10329
|
+
message: "an addon action is read-only here",
|
|
10330
|
+
path: ["readOnly"]
|
|
10331
|
+
});
|
|
10332
|
+
if (addonIdOfActionId(entry.id) === null) ctx.addIssue({
|
|
10333
|
+
code: "custom",
|
|
10334
|
+
message: "an addon action id is <addonId>:<localId>",
|
|
10335
|
+
path: ["id"]
|
|
10336
|
+
});
|
|
10337
|
+
});
|
|
10338
|
+
/** What an operator writes for an internal action. */
|
|
10339
|
+
var ActionInputSchema = z.object({
|
|
10340
|
+
name: z.string().min(1).max(120),
|
|
10341
|
+
steps: z.array(ActionStepSchema).min(1).max(50),
|
|
10342
|
+
variables: z.array(ActionVariableSchema).max(20).optional()
|
|
10343
|
+
});
|
|
10344
|
+
/** Who started a run. Absent = the operator pressed it. */
|
|
10345
|
+
var ActionRunOriginSchema = z.object({
|
|
10346
|
+
/** The automation block whose step started it. */
|
|
10347
|
+
blockId: z.string().min(1).optional() });
|
|
10348
|
+
/** `started` = the caller did not ask to wait. */
|
|
10349
|
+
var ActionRunOutcomeSchema = z.union([AutomationRunOutcomeSchema, z.literal("started")]);
|
|
10350
|
+
var ActionRunResultSchema = z.object({
|
|
10351
|
+
runId: z.string().min(1),
|
|
10352
|
+
outcome: ActionRunOutcomeSchema,
|
|
10353
|
+
/** Why it did not run, or what failed. */
|
|
10354
|
+
message: z.string().optional()
|
|
10355
|
+
});
|
|
10356
|
+
var ActionErrorCodeSchema = z.enum([
|
|
10357
|
+
"not-found",
|
|
10358
|
+
"read-only",
|
|
10359
|
+
"invalid-variables",
|
|
10360
|
+
"invalid-steps",
|
|
10361
|
+
"not-linked",
|
|
10362
|
+
"busy"
|
|
10363
|
+
]);
|
|
10364
|
+
/**
|
|
10365
|
+
* A refusal with a reason a caller can branch on. The code leads the message
|
|
10366
|
+
* (`[read-only] …`) because a cap call flattens an error to its text.
|
|
10367
|
+
*/
|
|
10368
|
+
var ActionError = class extends Error {
|
|
10369
|
+
code;
|
|
10370
|
+
constructor(code, message) {
|
|
10371
|
+
super(`[${code}] ${message}`);
|
|
10372
|
+
this.name = "ActionError";
|
|
10373
|
+
this.code = code;
|
|
10374
|
+
}
|
|
10375
|
+
};
|
|
10376
|
+
/** The run-state change `actions.onRunChanged` carries. */
|
|
10377
|
+
var ActionRunChangedSchema = z.object({
|
|
10378
|
+
actionId: z.string(),
|
|
10379
|
+
runId: z.string(),
|
|
10380
|
+
isRunning: z.boolean(),
|
|
10381
|
+
/** Set when the run ended. */
|
|
10382
|
+
outcome: AutomationRunOutcomeSchema.optional(),
|
|
10383
|
+
lastRunAt: z.number().nullable(),
|
|
10384
|
+
lastError: z.string().nullable()
|
|
10385
|
+
});
|
|
10386
|
+
//#endregion
|
|
10387
|
+
//#region src/automation/step-runner.ts
|
|
10388
|
+
function errorMessage(err) {
|
|
10389
|
+
return err instanceof Error ? err.message : String(err);
|
|
10390
|
+
}
|
|
10391
|
+
async function runSteps(steps, options) {
|
|
10392
|
+
const traces = [];
|
|
10393
|
+
let failed = false;
|
|
10394
|
+
let aborted = false;
|
|
10395
|
+
for (const [index, step] of steps.entries()) {
|
|
10396
|
+
const path = `${options.pathPrefix}.${index}`;
|
|
10397
|
+
if (failed || aborted || options.isAborted()) {
|
|
10398
|
+
if (!failed) aborted = true;
|
|
10399
|
+
traces.push({
|
|
10400
|
+
...step.meta,
|
|
10401
|
+
path,
|
|
10402
|
+
outcome: "not-run",
|
|
10403
|
+
message: failed ? "an earlier step failed" : options.abortReason
|
|
10404
|
+
});
|
|
10405
|
+
continue;
|
|
10406
|
+
}
|
|
10407
|
+
const startedAt = options.now();
|
|
10408
|
+
let deviceId = step.meta.deviceId;
|
|
10409
|
+
const scope = { setDeviceId: (id) => {
|
|
10410
|
+
deviceId = id;
|
|
10411
|
+
} };
|
|
10412
|
+
try {
|
|
10413
|
+
await step.run(scope);
|
|
10414
|
+
traces.push({
|
|
10415
|
+
...step.meta,
|
|
10416
|
+
...deviceId === void 0 ? {} : { deviceId },
|
|
10417
|
+
path,
|
|
10418
|
+
startedAt,
|
|
10419
|
+
endedAt: options.now(),
|
|
10420
|
+
outcome: "ok"
|
|
10421
|
+
});
|
|
10422
|
+
} catch (err) {
|
|
10423
|
+
failed = true;
|
|
10424
|
+
const message = errorMessage(err);
|
|
10425
|
+
options.onFailure({
|
|
10426
|
+
index,
|
|
10427
|
+
path,
|
|
10428
|
+
message,
|
|
10429
|
+
deviceId
|
|
10430
|
+
});
|
|
10431
|
+
traces.push({
|
|
10432
|
+
...step.meta,
|
|
10433
|
+
...deviceId === void 0 ? {} : { deviceId },
|
|
10434
|
+
path,
|
|
10435
|
+
startedAt,
|
|
10436
|
+
endedAt: options.now(),
|
|
10437
|
+
outcome: "error",
|
|
10438
|
+
message
|
|
10439
|
+
});
|
|
10440
|
+
}
|
|
10441
|
+
}
|
|
10442
|
+
return {
|
|
10443
|
+
steps: traces,
|
|
10444
|
+
failed,
|
|
10445
|
+
aborted: aborted && !failed
|
|
10446
|
+
};
|
|
10447
|
+
}
|
|
10448
|
+
function isVarRef(value) {
|
|
10449
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) return false;
|
|
10450
|
+
const keys = Object.keys(value);
|
|
10451
|
+
return keys.length === 1 && keys[0] === "$var" && typeof Reflect.get(value, "$var") === "string";
|
|
10452
|
+
}
|
|
10453
|
+
var TEMPLATE_RE = /\{\{\s*vars\.([A-Za-z_][A-Za-z0-9_]*)\s*\}\}/g;
|
|
10454
|
+
/**
|
|
10455
|
+
* Substitute a step's args from the run's variables. SUBSTITUTION only, never
|
|
10456
|
+
* evaluation:
|
|
10457
|
+
* - a value that is exactly `{ $var: 'name' }` becomes the variable's value,
|
|
10458
|
+
* keeping its type (a number stays a number);
|
|
10459
|
+
* - `{{vars.name}}` inside a string becomes its text.
|
|
10460
|
+
* A variable that is not set THROWS — a step must not run with a hole where
|
|
10461
|
+
* the operator meant a value. (`{{vars.x}}` keeps the automation behaviour:
|
|
10462
|
+
* the hole is reported through `onMissing` and rendered empty.)
|
|
10463
|
+
*/
|
|
10464
|
+
function resolveStepArgs(value, vars, onMissing) {
|
|
10465
|
+
if (isVarRef(value)) {
|
|
10466
|
+
const found = vars[value.$var];
|
|
10467
|
+
if (found === void 0) throw new Error(`variable "${value.$var}" is not set`);
|
|
10468
|
+
return found;
|
|
10469
|
+
}
|
|
10470
|
+
if (typeof value === "string") return value.replace(TEMPLATE_RE, (_m, key) => {
|
|
10471
|
+
const v = vars[key];
|
|
10472
|
+
if (v === void 0) {
|
|
10473
|
+
onMissing(key);
|
|
10474
|
+
return "";
|
|
10475
|
+
}
|
|
10476
|
+
return String(v);
|
|
10477
|
+
});
|
|
10478
|
+
if (Array.isArray(value)) return value.map((v) => resolveStepArgs(v, vars, onMissing));
|
|
10479
|
+
if (value !== null && typeof value === "object") return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, resolveStepArgs(v, vars, onMissing)]));
|
|
10480
|
+
return value;
|
|
10481
|
+
}
|
|
10482
|
+
/** A `{ $var }` device target, resolved from the bag BEFORE dispatch. */
|
|
10483
|
+
function resolveDeviceTarget(vars, name) {
|
|
10484
|
+
const raw = vars[name];
|
|
10485
|
+
if (typeof raw === "number") return raw;
|
|
10486
|
+
throw new Error(`action target var "${name}" is not a device id`);
|
|
10487
|
+
}
|
|
10488
|
+
function stepMetaOfAction(step) {
|
|
10489
|
+
if (step.kind === "wait") return { kind: "wait" };
|
|
10490
|
+
return {
|
|
10491
|
+
kind: "cap",
|
|
10492
|
+
cap: step.cap,
|
|
10493
|
+
method: step.method,
|
|
10494
|
+
...typeof step.deviceId === "number" ? { deviceId: step.deviceId } : {}
|
|
10495
|
+
};
|
|
10496
|
+
}
|
|
10497
|
+
function isPlainRecord(value) {
|
|
10498
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
10499
|
+
}
|
|
10500
|
+
/**
|
|
10501
|
+
* The runnable form of an internal Action's steps, bound to one run's
|
|
10502
|
+
* variables. Variables are substituted per step, at the moment it runs, so a
|
|
10503
|
+
* missing one fails THAT step (traced) and leaves the later ones not-run.
|
|
10504
|
+
*/
|
|
10505
|
+
function buildActionSteps(steps, vars, deps) {
|
|
10506
|
+
return steps.map((step) => {
|
|
10507
|
+
const meta = stepMetaOfAction(step);
|
|
10508
|
+
if (step.kind === "wait") return {
|
|
10509
|
+
meta,
|
|
10510
|
+
run: () => deps.sleep(step.seconds * 1e3)
|
|
10511
|
+
};
|
|
10512
|
+
return {
|
|
10513
|
+
meta,
|
|
10514
|
+
run: async (scope) => {
|
|
10515
|
+
const resolved = resolveStepArgs(step.args ?? {}, vars, deps.onMissingVar);
|
|
10516
|
+
const args = isPlainRecord(resolved) ? resolved : {};
|
|
10517
|
+
const targets = typeof step.deviceId === "number" ? [step.deviceId] : Array.isArray(step.deviceId) ? step.deviceId : [resolveDeviceTarget(vars, step.deviceId.$var)];
|
|
10518
|
+
for (const deviceId of targets) {
|
|
10519
|
+
scope.setDeviceId(deviceId);
|
|
10520
|
+
await deps.invokeCap({
|
|
10521
|
+
deviceId,
|
|
10522
|
+
cap: step.cap,
|
|
10523
|
+
method: step.method,
|
|
10524
|
+
args
|
|
10525
|
+
});
|
|
10526
|
+
}
|
|
10527
|
+
}
|
|
10528
|
+
};
|
|
10529
|
+
});
|
|
10530
|
+
}
|
|
10531
|
+
//#endregion
|
|
8695
10532
|
//#region src/capabilities/addon-pages.cap.ts
|
|
8696
10533
|
/**
|
|
8697
10534
|
* `addon-pages` — system-scoped singleton aggregator cap. Public-facing
|
|
@@ -16237,7 +18074,29 @@ var coreBlocksCapability = {
|
|
|
16237
18074
|
kind: "mutation",
|
|
16238
18075
|
auth: "admin",
|
|
16239
18076
|
access: "view"
|
|
16240
|
-
})
|
|
18077
|
+
}),
|
|
18078
|
+
/**
|
|
18079
|
+
* An automation block reports one run (or one coalesced skip) to the hub's
|
|
18080
|
+
* `runs` ledger. Only the block itself may: the transport stamps
|
|
18081
|
+
* `callerAddonId`, and anything but `core-block-<blockId>` is refused.
|
|
18082
|
+
* `keepTraces` bounds the ring; `runStartedAt` moves the cooldown stamp.
|
|
18083
|
+
*/
|
|
18084
|
+
reportAutomationRun: method(z.object({
|
|
18085
|
+
blockId: z.string().min(1),
|
|
18086
|
+
trace: AutomationRunTraceSchema.optional(),
|
|
18087
|
+
runStartedAt: z.number().optional(),
|
|
18088
|
+
keepTraces: z.number().int().min(1).max(100).optional()
|
|
18089
|
+
}), z.void(), {
|
|
18090
|
+
kind: "mutation",
|
|
18091
|
+
auth: "admin"
|
|
18092
|
+
}),
|
|
18093
|
+
/** The cooldown stamp and trace ring a block reads ONCE, at start. Owner-only. */
|
|
18094
|
+
getAutomationRunState: method(z.object({ blockId: z.string().min(1) }), AutomationStateDocSchema, { auth: "admin" }),
|
|
18095
|
+
/** An automation's run traces, newest last. The operator's read. */
|
|
18096
|
+
getTraces: method(z.object({ blockId: z.string().min(1) }), z.object({
|
|
18097
|
+
traces: z.array(AutomationRunTraceSchema),
|
|
18098
|
+
lastError: z.string().nullable()
|
|
18099
|
+
}), { auth: "admin" })
|
|
16241
18100
|
}
|
|
16242
18101
|
};
|
|
16243
18102
|
//#endregion
|
|
@@ -41834,7 +43693,7 @@ function autoRankFor(role, endpoint) {
|
|
|
41834
43693
|
if (isPlausibleLan(endpoint)) return 3;
|
|
41835
43694
|
return null;
|
|
41836
43695
|
}
|
|
41837
|
-
var LOOPBACK_HOSTS = new Set([
|
|
43696
|
+
var LOOPBACK_HOSTS$1 = new Set([
|
|
41838
43697
|
"localhost",
|
|
41839
43698
|
"0.0.0.0",
|
|
41840
43699
|
"::1",
|
|
@@ -41842,9 +43701,9 @@ var LOOPBACK_HOSTS = new Set([
|
|
|
41842
43701
|
"::",
|
|
41843
43702
|
"[::]"
|
|
41844
43703
|
]);
|
|
41845
|
-
function isLoopbackHost(hostname) {
|
|
43704
|
+
function isLoopbackHost$1(hostname) {
|
|
41846
43705
|
const h = hostname.toLowerCase();
|
|
41847
|
-
if (LOOPBACK_HOSTS.has(h) || h.endsWith(".localhost")) return true;
|
|
43706
|
+
if (LOOPBACK_HOSTS$1.has(h) || h.endsWith(".localhost")) return true;
|
|
41848
43707
|
return /^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(h);
|
|
41849
43708
|
}
|
|
41850
43709
|
/**
|
|
@@ -41879,7 +43738,7 @@ function validateCustomAddress(raw) {
|
|
|
41879
43738
|
ok: false,
|
|
41880
43739
|
reason: "The address has no host."
|
|
41881
43740
|
};
|
|
41882
|
-
if (isLoopbackHost(parsed.hostname)) return {
|
|
43741
|
+
if (isLoopbackHost$1(parsed.hostname)) return {
|
|
41883
43742
|
ok: false,
|
|
41884
43743
|
reason: "A loopback address names whoever dials it, never this hub — use an address other machines reach."
|
|
41885
43744
|
};
|
|
@@ -44541,398 +46400,6 @@ var notificationOutputCapability = {
|
|
|
44541
46400
|
}
|
|
44542
46401
|
};
|
|
44543
46402
|
//#endregion
|
|
44544
|
-
//#region src/catalogs/coco-classmap.ts
|
|
44545
|
-
var COCO_80_LABELS = [
|
|
44546
|
-
{
|
|
44547
|
-
id: "person",
|
|
44548
|
-
name: "Person"
|
|
44549
|
-
},
|
|
44550
|
-
{
|
|
44551
|
-
id: "bicycle",
|
|
44552
|
-
name: "Bicycle"
|
|
44553
|
-
},
|
|
44554
|
-
{
|
|
44555
|
-
id: "car",
|
|
44556
|
-
name: "Car"
|
|
44557
|
-
},
|
|
44558
|
-
{
|
|
44559
|
-
id: "motorcycle",
|
|
44560
|
-
name: "Motorcycle"
|
|
44561
|
-
},
|
|
44562
|
-
{
|
|
44563
|
-
id: "airplane",
|
|
44564
|
-
name: "Airplane"
|
|
44565
|
-
},
|
|
44566
|
-
{
|
|
44567
|
-
id: "bus",
|
|
44568
|
-
name: "Bus"
|
|
44569
|
-
},
|
|
44570
|
-
{
|
|
44571
|
-
id: "train",
|
|
44572
|
-
name: "Train"
|
|
44573
|
-
},
|
|
44574
|
-
{
|
|
44575
|
-
id: "truck",
|
|
44576
|
-
name: "Truck"
|
|
44577
|
-
},
|
|
44578
|
-
{
|
|
44579
|
-
id: "boat",
|
|
44580
|
-
name: "Boat"
|
|
44581
|
-
},
|
|
44582
|
-
{
|
|
44583
|
-
id: "traffic light",
|
|
44584
|
-
name: "Traffic Light"
|
|
44585
|
-
},
|
|
44586
|
-
{
|
|
44587
|
-
id: "fire hydrant",
|
|
44588
|
-
name: "Fire Hydrant"
|
|
44589
|
-
},
|
|
44590
|
-
{
|
|
44591
|
-
id: "stop sign",
|
|
44592
|
-
name: "Stop Sign"
|
|
44593
|
-
},
|
|
44594
|
-
{
|
|
44595
|
-
id: "parking meter",
|
|
44596
|
-
name: "Parking Meter"
|
|
44597
|
-
},
|
|
44598
|
-
{
|
|
44599
|
-
id: "bench",
|
|
44600
|
-
name: "Bench"
|
|
44601
|
-
},
|
|
44602
|
-
{
|
|
44603
|
-
id: "bird",
|
|
44604
|
-
name: "Bird"
|
|
44605
|
-
},
|
|
44606
|
-
{
|
|
44607
|
-
id: "cat",
|
|
44608
|
-
name: "Cat"
|
|
44609
|
-
},
|
|
44610
|
-
{
|
|
44611
|
-
id: "dog",
|
|
44612
|
-
name: "Dog"
|
|
44613
|
-
},
|
|
44614
|
-
{
|
|
44615
|
-
id: "horse",
|
|
44616
|
-
name: "Horse"
|
|
44617
|
-
},
|
|
44618
|
-
{
|
|
44619
|
-
id: "sheep",
|
|
44620
|
-
name: "Sheep"
|
|
44621
|
-
},
|
|
44622
|
-
{
|
|
44623
|
-
id: "cow",
|
|
44624
|
-
name: "Cow"
|
|
44625
|
-
},
|
|
44626
|
-
{
|
|
44627
|
-
id: "elephant",
|
|
44628
|
-
name: "Elephant"
|
|
44629
|
-
},
|
|
44630
|
-
{
|
|
44631
|
-
id: "bear",
|
|
44632
|
-
name: "Bear"
|
|
44633
|
-
},
|
|
44634
|
-
{
|
|
44635
|
-
id: "zebra",
|
|
44636
|
-
name: "Zebra"
|
|
44637
|
-
},
|
|
44638
|
-
{
|
|
44639
|
-
id: "giraffe",
|
|
44640
|
-
name: "Giraffe"
|
|
44641
|
-
},
|
|
44642
|
-
{
|
|
44643
|
-
id: "backpack",
|
|
44644
|
-
name: "Backpack"
|
|
44645
|
-
},
|
|
44646
|
-
{
|
|
44647
|
-
id: "umbrella",
|
|
44648
|
-
name: "Umbrella"
|
|
44649
|
-
},
|
|
44650
|
-
{
|
|
44651
|
-
id: "handbag",
|
|
44652
|
-
name: "Handbag"
|
|
44653
|
-
},
|
|
44654
|
-
{
|
|
44655
|
-
id: "tie",
|
|
44656
|
-
name: "Tie"
|
|
44657
|
-
},
|
|
44658
|
-
{
|
|
44659
|
-
id: "suitcase",
|
|
44660
|
-
name: "Suitcase"
|
|
44661
|
-
},
|
|
44662
|
-
{
|
|
44663
|
-
id: "frisbee",
|
|
44664
|
-
name: "Frisbee"
|
|
44665
|
-
},
|
|
44666
|
-
{
|
|
44667
|
-
id: "skis",
|
|
44668
|
-
name: "Skis"
|
|
44669
|
-
},
|
|
44670
|
-
{
|
|
44671
|
-
id: "snowboard",
|
|
44672
|
-
name: "Snowboard"
|
|
44673
|
-
},
|
|
44674
|
-
{
|
|
44675
|
-
id: "sports ball",
|
|
44676
|
-
name: "Sports Ball"
|
|
44677
|
-
},
|
|
44678
|
-
{
|
|
44679
|
-
id: "kite",
|
|
44680
|
-
name: "Kite"
|
|
44681
|
-
},
|
|
44682
|
-
{
|
|
44683
|
-
id: "baseball bat",
|
|
44684
|
-
name: "Baseball Bat"
|
|
44685
|
-
},
|
|
44686
|
-
{
|
|
44687
|
-
id: "baseball glove",
|
|
44688
|
-
name: "Baseball Glove"
|
|
44689
|
-
},
|
|
44690
|
-
{
|
|
44691
|
-
id: "skateboard",
|
|
44692
|
-
name: "Skateboard"
|
|
44693
|
-
},
|
|
44694
|
-
{
|
|
44695
|
-
id: "surfboard",
|
|
44696
|
-
name: "Surfboard"
|
|
44697
|
-
},
|
|
44698
|
-
{
|
|
44699
|
-
id: "tennis racket",
|
|
44700
|
-
name: "Tennis Racket"
|
|
44701
|
-
},
|
|
44702
|
-
{
|
|
44703
|
-
id: "bottle",
|
|
44704
|
-
name: "Bottle"
|
|
44705
|
-
},
|
|
44706
|
-
{
|
|
44707
|
-
id: "wine glass",
|
|
44708
|
-
name: "Wine Glass"
|
|
44709
|
-
},
|
|
44710
|
-
{
|
|
44711
|
-
id: "cup",
|
|
44712
|
-
name: "Cup"
|
|
44713
|
-
},
|
|
44714
|
-
{
|
|
44715
|
-
id: "fork",
|
|
44716
|
-
name: "Fork"
|
|
44717
|
-
},
|
|
44718
|
-
{
|
|
44719
|
-
id: "knife",
|
|
44720
|
-
name: "Knife"
|
|
44721
|
-
},
|
|
44722
|
-
{
|
|
44723
|
-
id: "spoon",
|
|
44724
|
-
name: "Spoon"
|
|
44725
|
-
},
|
|
44726
|
-
{
|
|
44727
|
-
id: "bowl",
|
|
44728
|
-
name: "Bowl"
|
|
44729
|
-
},
|
|
44730
|
-
{
|
|
44731
|
-
id: "banana",
|
|
44732
|
-
name: "Banana"
|
|
44733
|
-
},
|
|
44734
|
-
{
|
|
44735
|
-
id: "apple",
|
|
44736
|
-
name: "Apple"
|
|
44737
|
-
},
|
|
44738
|
-
{
|
|
44739
|
-
id: "sandwich",
|
|
44740
|
-
name: "Sandwich"
|
|
44741
|
-
},
|
|
44742
|
-
{
|
|
44743
|
-
id: "orange",
|
|
44744
|
-
name: "Orange"
|
|
44745
|
-
},
|
|
44746
|
-
{
|
|
44747
|
-
id: "broccoli",
|
|
44748
|
-
name: "Broccoli"
|
|
44749
|
-
},
|
|
44750
|
-
{
|
|
44751
|
-
id: "carrot",
|
|
44752
|
-
name: "Carrot"
|
|
44753
|
-
},
|
|
44754
|
-
{
|
|
44755
|
-
id: "hot dog",
|
|
44756
|
-
name: "Hot Dog"
|
|
44757
|
-
},
|
|
44758
|
-
{
|
|
44759
|
-
id: "pizza",
|
|
44760
|
-
name: "Pizza"
|
|
44761
|
-
},
|
|
44762
|
-
{
|
|
44763
|
-
id: "donut",
|
|
44764
|
-
name: "Donut"
|
|
44765
|
-
},
|
|
44766
|
-
{
|
|
44767
|
-
id: "cake",
|
|
44768
|
-
name: "Cake"
|
|
44769
|
-
},
|
|
44770
|
-
{
|
|
44771
|
-
id: "chair",
|
|
44772
|
-
name: "Chair"
|
|
44773
|
-
},
|
|
44774
|
-
{
|
|
44775
|
-
id: "couch",
|
|
44776
|
-
name: "Couch"
|
|
44777
|
-
},
|
|
44778
|
-
{
|
|
44779
|
-
id: "potted plant",
|
|
44780
|
-
name: "Potted Plant"
|
|
44781
|
-
},
|
|
44782
|
-
{
|
|
44783
|
-
id: "bed",
|
|
44784
|
-
name: "Bed"
|
|
44785
|
-
},
|
|
44786
|
-
{
|
|
44787
|
-
id: "dining table",
|
|
44788
|
-
name: "Dining Table"
|
|
44789
|
-
},
|
|
44790
|
-
{
|
|
44791
|
-
id: "toilet",
|
|
44792
|
-
name: "Toilet"
|
|
44793
|
-
},
|
|
44794
|
-
{
|
|
44795
|
-
id: "tv",
|
|
44796
|
-
name: "TV"
|
|
44797
|
-
},
|
|
44798
|
-
{
|
|
44799
|
-
id: "laptop",
|
|
44800
|
-
name: "Laptop"
|
|
44801
|
-
},
|
|
44802
|
-
{
|
|
44803
|
-
id: "mouse",
|
|
44804
|
-
name: "Mouse"
|
|
44805
|
-
},
|
|
44806
|
-
{
|
|
44807
|
-
id: "remote",
|
|
44808
|
-
name: "Remote"
|
|
44809
|
-
},
|
|
44810
|
-
{
|
|
44811
|
-
id: "keyboard",
|
|
44812
|
-
name: "Keyboard"
|
|
44813
|
-
},
|
|
44814
|
-
{
|
|
44815
|
-
id: "cell phone",
|
|
44816
|
-
name: "Cell Phone"
|
|
44817
|
-
},
|
|
44818
|
-
{
|
|
44819
|
-
id: "microwave",
|
|
44820
|
-
name: "Microwave"
|
|
44821
|
-
},
|
|
44822
|
-
{
|
|
44823
|
-
id: "oven",
|
|
44824
|
-
name: "Oven"
|
|
44825
|
-
},
|
|
44826
|
-
{
|
|
44827
|
-
id: "toaster",
|
|
44828
|
-
name: "Toaster"
|
|
44829
|
-
},
|
|
44830
|
-
{
|
|
44831
|
-
id: "sink",
|
|
44832
|
-
name: "Sink"
|
|
44833
|
-
},
|
|
44834
|
-
{
|
|
44835
|
-
id: "refrigerator",
|
|
44836
|
-
name: "Refrigerator"
|
|
44837
|
-
},
|
|
44838
|
-
{
|
|
44839
|
-
id: "book",
|
|
44840
|
-
name: "Book"
|
|
44841
|
-
},
|
|
44842
|
-
{
|
|
44843
|
-
id: "clock",
|
|
44844
|
-
name: "Clock"
|
|
44845
|
-
},
|
|
44846
|
-
{
|
|
44847
|
-
id: "vase",
|
|
44848
|
-
name: "Vase"
|
|
44849
|
-
},
|
|
44850
|
-
{
|
|
44851
|
-
id: "scissors",
|
|
44852
|
-
name: "Scissors"
|
|
44853
|
-
},
|
|
44854
|
-
{
|
|
44855
|
-
id: "teddy bear",
|
|
44856
|
-
name: "Teddy Bear"
|
|
44857
|
-
},
|
|
44858
|
-
{
|
|
44859
|
-
id: "hair drier",
|
|
44860
|
-
name: "Hair Drier"
|
|
44861
|
-
},
|
|
44862
|
-
{
|
|
44863
|
-
id: "toothbrush",
|
|
44864
|
-
name: "Toothbrush"
|
|
44865
|
-
}
|
|
44866
|
-
];
|
|
44867
|
-
var MACRO_LABELS = [
|
|
44868
|
-
{
|
|
44869
|
-
id: "person",
|
|
44870
|
-
name: "Person"
|
|
44871
|
-
},
|
|
44872
|
-
{
|
|
44873
|
-
id: "vehicle",
|
|
44874
|
-
name: "Vehicle"
|
|
44875
|
-
},
|
|
44876
|
-
{
|
|
44877
|
-
id: "animal",
|
|
44878
|
-
name: "Animal"
|
|
44879
|
-
},
|
|
44880
|
-
{
|
|
44881
|
-
id: "package",
|
|
44882
|
-
name: "Package"
|
|
44883
|
-
}
|
|
44884
|
-
];
|
|
44885
|
-
/**
|
|
44886
|
-
* The class names a per-class COUNT can ever be keyed on — the macro ids, and
|
|
44887
|
-
* only those.
|
|
44888
|
-
*
|
|
44889
|
-
* `preserveOriginal: false` below is the whole reason this set exists: the
|
|
44890
|
-
* executor maps each raw COCO label onto its macro and DROPS everything else,
|
|
44891
|
-
* so a tracked detection's `className` is always one of {@link MACRO_LABELS}.
|
|
44892
|
-
* Any surface that indexes counts by class name — the ZoneAnalytics occupancy
|
|
44893
|
-
* snapshot's `byClass`, and therefore every occupancy rule — can match nothing
|
|
44894
|
-
* else. Derived from the catalog, never hand-listed, so a new macro joins it by
|
|
44895
|
-
* being declared once.
|
|
44896
|
-
*
|
|
44897
|
-
* Cost of not having it, 2026-08-12: the notification rule editor offered the
|
|
44898
|
-
* full taxonomy for an occupancy class (occupancy is the one condition that
|
|
44899
|
-
* does not go through the engine's macro-expanding `expandClassSelector`), two
|
|
44900
|
-
* live rules were authored on `car`, and both counters read 0 forever.
|
|
44901
|
-
*/
|
|
44902
|
-
var DETECTION_MACRO_CLASSES = new Set(MACRO_LABELS.map((l) => l.id));
|
|
44903
|
-
/** True when `className` is a macro the detector can actually emit (and hence a
|
|
44904
|
-
* class a count can be keyed on) — see {@link DETECTION_MACRO_CLASSES}. */
|
|
44905
|
-
function isDetectionMacroClass(className) {
|
|
44906
|
-
return DETECTION_MACRO_CLASSES.has(className.trim().toLowerCase());
|
|
44907
|
-
}
|
|
44908
|
-
var COCO_TO_MACRO = {
|
|
44909
|
-
mapping: {
|
|
44910
|
-
person: "person",
|
|
44911
|
-
bicycle: "vehicle",
|
|
44912
|
-
car: "vehicle",
|
|
44913
|
-
motorcycle: "vehicle",
|
|
44914
|
-
airplane: "vehicle",
|
|
44915
|
-
bus: "vehicle",
|
|
44916
|
-
train: "vehicle",
|
|
44917
|
-
truck: "vehicle",
|
|
44918
|
-
boat: "vehicle",
|
|
44919
|
-
bird: "animal",
|
|
44920
|
-
cat: "animal",
|
|
44921
|
-
dog: "animal",
|
|
44922
|
-
horse: "animal",
|
|
44923
|
-
sheep: "animal",
|
|
44924
|
-
cow: "animal",
|
|
44925
|
-
elephant: "animal",
|
|
44926
|
-
bear: "animal",
|
|
44927
|
-
zebra: "animal",
|
|
44928
|
-
giraffe: "animal",
|
|
44929
|
-
suitcase: "package",
|
|
44930
|
-
backpack: "package",
|
|
44931
|
-
handbag: "package"
|
|
44932
|
-
},
|
|
44933
|
-
preserveOriginal: false
|
|
44934
|
-
};
|
|
44935
|
-
//#endregion
|
|
44936
46403
|
//#region src/catalogs/audio-classmap.ts
|
|
44937
46404
|
var AUDIO_MACRO_LABELS = [
|
|
44938
46405
|
{
|
|
@@ -62876,6 +64343,152 @@ var audioMetricsCapability = {
|
|
|
62876
64343
|
history: "none"
|
|
62877
64344
|
};
|
|
62878
64345
|
//#endregion
|
|
64346
|
+
//#region src/capabilities/action-source.cap.ts
|
|
64347
|
+
/**
|
|
64348
|
+
* action-source — an addon DECLARES runnable actions (a Home Assistant script,
|
|
64349
|
+
* a scene, a vendor routine) as list entries. Never as devices.
|
|
64350
|
+
*
|
|
64351
|
+
* It mirrors `notification-output`: `listActions` returns an array, so the
|
|
64352
|
+
* generated cap mount concat-fans it across every provider; `runAction` and
|
|
64353
|
+
* `stopAction` route to ONE provider by the `addonId` the generated collection
|
|
64354
|
+
* router extracts from the call input.
|
|
64355
|
+
*
|
|
64356
|
+
* Nobody but the `actions` surface (the core-blocks builtin) calls this cap.
|
|
64357
|
+
* The UI and automations talk to `actions`, which fans out here LIVE on every
|
|
64358
|
+
* `list` and keeps no catalog of its own (D3: no shadow registry).
|
|
64359
|
+
*
|
|
64360
|
+
* `listActions` entries carry `source: 'addon'`, `readOnly: true`, an id of
|
|
64361
|
+
* `<addonId>:<localId>` and an idle `status` (the provider may fill what it
|
|
64362
|
+
* knows). `actionId` on `runAction` / `stopAction` is the full entry id.
|
|
64363
|
+
*/
|
|
64364
|
+
var actionSourceCapability = {
|
|
64365
|
+
name: "action-source",
|
|
64366
|
+
scope: "system",
|
|
64367
|
+
mode: "collection",
|
|
64368
|
+
methods: {
|
|
64369
|
+
listActions: method(z.object({}), z.array(ActionEntrySchema), { auth: "admin" }),
|
|
64370
|
+
runAction: method(z.object({
|
|
64371
|
+
actionId: z.string().min(1),
|
|
64372
|
+
variables: z.record(z.string(), ActionVariableValueSchema).optional()
|
|
64373
|
+
}), z.void(), {
|
|
64374
|
+
kind: "mutation",
|
|
64375
|
+
auth: "admin"
|
|
64376
|
+
}),
|
|
64377
|
+
stopAction: method(z.object({ actionId: z.string().min(1) }), z.void(), {
|
|
64378
|
+
kind: "mutation",
|
|
64379
|
+
auth: "admin"
|
|
64380
|
+
})
|
|
64381
|
+
}
|
|
64382
|
+
};
|
|
64383
|
+
//#endregion
|
|
64384
|
+
//#region src/capabilities/actions.cap.ts
|
|
64385
|
+
/**
|
|
64386
|
+
* actions — the ONE surface for runnable actions, for the UI and for
|
|
64387
|
+
* automations. Provided by the core-blocks builtin on the hub.
|
|
64388
|
+
*
|
|
64389
|
+
* An action is a LIST ENTRY, not a device (D883): either internal (cap and wait
|
|
64390
|
+
* steps, kept in the hub's `actions` record kind) or declared by an addon over
|
|
64391
|
+
* `action-source`. `list` asks every `action-source` provider LIVE and overlays
|
|
64392
|
+
* the run status from the hub's `runs` ledger; there is no catalog here to
|
|
64393
|
+
* drift (D3).
|
|
64394
|
+
*
|
|
64395
|
+
* **Permissions follow the camera, as linked devices do.** An action is linked
|
|
64396
|
+
* to cameras by the operator (`setLinks`, D356: nothing links itself). A
|
|
64397
|
+
* non-admin may `get` / `run` an action only through a camera they may see that
|
|
64398
|
+
* links it: they name the camera (`deviceId`, a top-level field so the scope
|
|
64399
|
+
* gate sees it) and the provider refuses an action that camera does not link.
|
|
64400
|
+
* An admin, and an in-process caller (an automation block), may run any action.
|
|
64401
|
+
* Every refusal is typed (`[not-linked] …`) and logged.
|
|
64402
|
+
*
|
|
64403
|
+
* A second `run` of an action that is already running is REFUSED — traced and
|
|
64404
|
+
* logged — never queued.
|
|
64405
|
+
*/
|
|
64406
|
+
var ActionIdInput = z.object({ actionId: z.string().min(1) });
|
|
64407
|
+
var ActionLinksSchema = z.object({
|
|
64408
|
+
deviceId: z.number().int().nonnegative(),
|
|
64409
|
+
actionIds: z.array(z.string().min(1)).max(100)
|
|
64410
|
+
});
|
|
64411
|
+
var actionsCapability = {
|
|
64412
|
+
name: "actions",
|
|
64413
|
+
scope: "system",
|
|
64414
|
+
mode: "singleton",
|
|
64415
|
+
methods: {
|
|
64416
|
+
/** Every action, live from the providers, with its run status. Admin. */
|
|
64417
|
+
list: method(z.object({}), z.array(ActionEntrySchema), { auth: "admin" }),
|
|
64418
|
+
/**
|
|
64419
|
+
* One action. A non-admin names the camera (`deviceId`) that links it.
|
|
64420
|
+
* `null` when it does not exist.
|
|
64421
|
+
*/
|
|
64422
|
+
get: method(z.object({
|
|
64423
|
+
actionId: z.string().min(1),
|
|
64424
|
+
deviceId: z.number().int().nonnegative().optional()
|
|
64425
|
+
}), z.object({ action: ActionEntrySchema.nullable() }), {
|
|
64426
|
+
role: "viewer",
|
|
64427
|
+
auth: "protected",
|
|
64428
|
+
kind: "query",
|
|
64429
|
+
caller: "required"
|
|
64430
|
+
}),
|
|
64431
|
+
/**
|
|
64432
|
+
* Start an action. `wait` holds the call until the run ended (an automation
|
|
64433
|
+
* step does); without it the call returns `started`. A non-admin names the
|
|
64434
|
+
* camera (`deviceId`) that links the action.
|
|
64435
|
+
*/
|
|
64436
|
+
run: method(z.object({
|
|
64437
|
+
actionId: z.string().min(1),
|
|
64438
|
+
variables: z.record(z.string(), ActionVariableValueSchema).optional(),
|
|
64439
|
+
wait: z.boolean().optional(),
|
|
64440
|
+
origin: ActionRunOriginSchema.optional(),
|
|
64441
|
+
deviceId: z.number().int().nonnegative().optional()
|
|
64442
|
+
}), ActionRunResultSchema, {
|
|
64443
|
+
role: "viewer",
|
|
64444
|
+
auth: "protected",
|
|
64445
|
+
kind: "mutation",
|
|
64446
|
+
caller: "required"
|
|
64447
|
+
}),
|
|
64448
|
+
stop: method(ActionIdInput, z.void(), {
|
|
64449
|
+
kind: "mutation",
|
|
64450
|
+
auth: "admin"
|
|
64451
|
+
}),
|
|
64452
|
+
getTraces: method(ActionIdInput, z.object({ traces: z.array(AutomationRunTraceSchema) }), { auth: "admin" }),
|
|
64453
|
+
/** Internal actions only. A read-only (addon) entry is refused with `[read-only]`. */
|
|
64454
|
+
create: method(z.object({ action: ActionInputSchema }), z.object({ action: ActionEntrySchema }), {
|
|
64455
|
+
kind: "mutation",
|
|
64456
|
+
auth: "admin"
|
|
64457
|
+
}),
|
|
64458
|
+
update: method(z.object({
|
|
64459
|
+
actionId: z.string().min(1),
|
|
64460
|
+
action: ActionInputSchema.partial()
|
|
64461
|
+
}), z.object({ action: ActionEntrySchema }), {
|
|
64462
|
+
kind: "mutation",
|
|
64463
|
+
auth: "admin"
|
|
64464
|
+
}),
|
|
64465
|
+
delete: method(ActionIdInput, z.void(), {
|
|
64466
|
+
kind: "mutation",
|
|
64467
|
+
auth: "admin"
|
|
64468
|
+
}),
|
|
64469
|
+
/**
|
|
64470
|
+
* What a viewer sees under a camera: the actions this camera LINKS, with
|
|
64471
|
+
* their variables, and only when the caller may see the camera. The scope
|
|
64472
|
+
* gate admits the camera; the answer is cut to the linked ones.
|
|
64473
|
+
*/
|
|
64474
|
+
listForCamera: method(z.object({ deviceId: z.number().int().nonnegative() }), z.array(ActionEntrySchema), {
|
|
64475
|
+
role: "viewer",
|
|
64476
|
+
auth: "protected",
|
|
64477
|
+
kind: "query"
|
|
64478
|
+
}),
|
|
64479
|
+
/** The actions a camera links. Admin (the picker). */
|
|
64480
|
+
getLinks: method(z.object({ deviceId: z.number().int().nonnegative() }), ActionLinksSchema, { auth: "admin" }),
|
|
64481
|
+
/** Replace a camera's linked actions with what the operator picked. */
|
|
64482
|
+
setLinks: method(ActionLinksSchema, ActionLinksSchema, {
|
|
64483
|
+
kind: "mutation",
|
|
64484
|
+
auth: "admin"
|
|
64485
|
+
})
|
|
64486
|
+
},
|
|
64487
|
+
events: {
|
|
64488
|
+
/** A run started or ended. Telemetry (D8): `list` is the authority. */
|
|
64489
|
+
onRunChanged: { data: ActionRunChangedSchema } }
|
|
64490
|
+
};
|
|
64491
|
+
//#endregion
|
|
62879
64492
|
//#region src/capabilities/automation-control.cap.ts
|
|
62880
64493
|
/**
|
|
62881
64494
|
* Automation-control cap. Models HA `automation.*` entities on
|
|
@@ -85468,6 +87081,104 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
85468
87081
|
access: "create",
|
|
85469
87082
|
role: "admin"
|
|
85470
87083
|
},
|
|
87084
|
+
"actions.create": {
|
|
87085
|
+
capName: "actions",
|
|
87086
|
+
capScope: "system",
|
|
87087
|
+
addonId: null,
|
|
87088
|
+
access: "create",
|
|
87089
|
+
role: "admin"
|
|
87090
|
+
},
|
|
87091
|
+
"actions.delete": {
|
|
87092
|
+
capName: "actions",
|
|
87093
|
+
capScope: "system",
|
|
87094
|
+
addonId: null,
|
|
87095
|
+
access: "delete",
|
|
87096
|
+
role: "admin"
|
|
87097
|
+
},
|
|
87098
|
+
"actions.get": {
|
|
87099
|
+
capName: "actions",
|
|
87100
|
+
capScope: "system",
|
|
87101
|
+
addonId: null,
|
|
87102
|
+
access: "view",
|
|
87103
|
+
role: "viewer"
|
|
87104
|
+
},
|
|
87105
|
+
"actions.getLinks": {
|
|
87106
|
+
capName: "actions",
|
|
87107
|
+
capScope: "system",
|
|
87108
|
+
addonId: null,
|
|
87109
|
+
access: "view",
|
|
87110
|
+
role: "admin"
|
|
87111
|
+
},
|
|
87112
|
+
"actions.getTraces": {
|
|
87113
|
+
capName: "actions",
|
|
87114
|
+
capScope: "system",
|
|
87115
|
+
addonId: null,
|
|
87116
|
+
access: "view",
|
|
87117
|
+
role: "admin"
|
|
87118
|
+
},
|
|
87119
|
+
"actions.list": {
|
|
87120
|
+
capName: "actions",
|
|
87121
|
+
capScope: "system",
|
|
87122
|
+
addonId: null,
|
|
87123
|
+
access: "view",
|
|
87124
|
+
role: "admin"
|
|
87125
|
+
},
|
|
87126
|
+
"actions.listForCamera": {
|
|
87127
|
+
capName: "actions",
|
|
87128
|
+
capScope: "system",
|
|
87129
|
+
addonId: null,
|
|
87130
|
+
access: "view",
|
|
87131
|
+
role: "viewer"
|
|
87132
|
+
},
|
|
87133
|
+
"actions.run": {
|
|
87134
|
+
capName: "actions",
|
|
87135
|
+
capScope: "system",
|
|
87136
|
+
addonId: null,
|
|
87137
|
+
access: "create",
|
|
87138
|
+
role: "viewer"
|
|
87139
|
+
},
|
|
87140
|
+
"actions.setLinks": {
|
|
87141
|
+
capName: "actions",
|
|
87142
|
+
capScope: "system",
|
|
87143
|
+
addonId: null,
|
|
87144
|
+
access: "create",
|
|
87145
|
+
role: "admin"
|
|
87146
|
+
},
|
|
87147
|
+
"actions.stop": {
|
|
87148
|
+
capName: "actions",
|
|
87149
|
+
capScope: "system",
|
|
87150
|
+
addonId: null,
|
|
87151
|
+
access: "create",
|
|
87152
|
+
role: "admin"
|
|
87153
|
+
},
|
|
87154
|
+
"actions.update": {
|
|
87155
|
+
capName: "actions",
|
|
87156
|
+
capScope: "system",
|
|
87157
|
+
addonId: null,
|
|
87158
|
+
access: "create",
|
|
87159
|
+
role: "admin"
|
|
87160
|
+
},
|
|
87161
|
+
"actionSource.listActions": {
|
|
87162
|
+
capName: "action-source",
|
|
87163
|
+
capScope: "system",
|
|
87164
|
+
addonId: null,
|
|
87165
|
+
access: "view",
|
|
87166
|
+
role: "admin"
|
|
87167
|
+
},
|
|
87168
|
+
"actionSource.runAction": {
|
|
87169
|
+
capName: "action-source",
|
|
87170
|
+
capScope: "system",
|
|
87171
|
+
addonId: null,
|
|
87172
|
+
access: "create",
|
|
87173
|
+
role: "admin"
|
|
87174
|
+
},
|
|
87175
|
+
"actionSource.stopAction": {
|
|
87176
|
+
capName: "action-source",
|
|
87177
|
+
capScope: "system",
|
|
87178
|
+
addonId: null,
|
|
87179
|
+
access: "create",
|
|
87180
|
+
role: "admin"
|
|
87181
|
+
},
|
|
85471
87182
|
"addonPages.listPages": {
|
|
85472
87183
|
capName: "addon-pages",
|
|
85473
87184
|
capScope: "system",
|
|
@@ -86749,6 +88460,13 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
86749
88460
|
access: "view",
|
|
86750
88461
|
role: "admin"
|
|
86751
88462
|
},
|
|
88463
|
+
"coreBlocks.getAutomationRunState": {
|
|
88464
|
+
capName: "core-blocks",
|
|
88465
|
+
capScope: "system",
|
|
88466
|
+
addonId: null,
|
|
88467
|
+
access: "view",
|
|
88468
|
+
role: "admin"
|
|
88469
|
+
},
|
|
86752
88470
|
"coreBlocks.getBlockSettings": {
|
|
86753
88471
|
capName: "core-blocks",
|
|
86754
88472
|
capScope: "system",
|
|
@@ -86770,6 +88488,13 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
86770
88488
|
access: "view",
|
|
86771
88489
|
role: "admin"
|
|
86772
88490
|
},
|
|
88491
|
+
"coreBlocks.getTraces": {
|
|
88492
|
+
capName: "core-blocks",
|
|
88493
|
+
capScope: "system",
|
|
88494
|
+
addonId: null,
|
|
88495
|
+
access: "view",
|
|
88496
|
+
role: "admin"
|
|
88497
|
+
},
|
|
86773
88498
|
"coreBlocks.getTypeDefs": {
|
|
86774
88499
|
capName: "core-blocks",
|
|
86775
88500
|
capScope: "system",
|
|
@@ -86805,6 +88530,13 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
86805
88530
|
access: "create",
|
|
86806
88531
|
role: "admin"
|
|
86807
88532
|
},
|
|
88533
|
+
"coreBlocks.reportAutomationRun": {
|
|
88534
|
+
capName: "core-blocks",
|
|
88535
|
+
capScope: "system",
|
|
88536
|
+
addonId: null,
|
|
88537
|
+
access: "create",
|
|
88538
|
+
role: "admin"
|
|
88539
|
+
},
|
|
86808
88540
|
"coreBlocks.restart": {
|
|
86809
88541
|
capName: "core-blocks",
|
|
86810
88542
|
capScope: "system",
|
|
@@ -95167,6 +96899,8 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
95167
96899
|
/** Set of all known cap names — handy for the scope picker. */
|
|
95168
96900
|
var KNOWN_CAP_NAMES = [
|
|
95169
96901
|
"accessories",
|
|
96902
|
+
"action-source",
|
|
96903
|
+
"actions",
|
|
95170
96904
|
"addon-pages",
|
|
95171
96905
|
"addon-pages-source",
|
|
95172
96906
|
"addon-routes",
|
|
@@ -95452,6 +97186,8 @@ var DEVICE_CAP_NAMES = [
|
|
|
95452
97186
|
];
|
|
95453
97187
|
/** Every cap declared as `scope: 'system'` — drives the `category:system` matcher. */
|
|
95454
97188
|
var SYSTEM_CAP_NAMES = [
|
|
97189
|
+
"action-source",
|
|
97190
|
+
"actions",
|
|
95455
97191
|
"addon-pages",
|
|
95456
97192
|
"addon-pages-source",
|
|
95457
97193
|
"addon-routes",
|
|
@@ -99350,6 +101086,8 @@ var ML = "model and training machinery — no device action";
|
|
|
99350
101086
|
var INTERNAL = "internal plumbing between addons — never operator-facing";
|
|
99351
101087
|
/** Every system-scoped cap, with why it is not a device's vocabulary. */
|
|
99352
101088
|
var SYSTEM_CAP_VOCABULARY = {
|
|
101089
|
+
"action-source": system(INTERNAL),
|
|
101090
|
+
actions: system("declared actions — run from the Actions page and from the cameras that link them"),
|
|
99353
101091
|
"addon-pages": system(UI_PLUMBING),
|
|
99354
101092
|
"addon-pages-source": system(UI_PLUMBING),
|
|
99355
101093
|
"addon-routes": system(UI_PLUMBING),
|
|
@@ -101256,6 +102994,8 @@ var CAP_NAMES_WITH_STATUS = [
|
|
|
101256
102994
|
//#region src/generated/capability-router-map.ts
|
|
101257
102995
|
var CAPABILITY_NAMES = {
|
|
101258
102996
|
accessories: "accessories",
|
|
102997
|
+
actionSource: "action-source",
|
|
102998
|
+
actions: "actions",
|
|
101259
102999
|
addonPages: "addon-pages",
|
|
101260
103000
|
addonPagesSource: "addon-pages-source",
|
|
101261
103001
|
addonRoutes: "addon-routes",
|
|
@@ -101447,6 +103187,14 @@ var CAPABILITY_ROUTER_KEYS = [
|
|
|
101447
103187
|
key: "accessories",
|
|
101448
103188
|
name: "accessories"
|
|
101449
103189
|
},
|
|
103190
|
+
{
|
|
103191
|
+
key: "actionSource",
|
|
103192
|
+
name: "action-source"
|
|
103193
|
+
},
|
|
103194
|
+
{
|
|
103195
|
+
key: "actions",
|
|
103196
|
+
name: "actions"
|
|
103197
|
+
},
|
|
101450
103198
|
{
|
|
101451
103199
|
key: "addonPages",
|
|
101452
103200
|
name: "addon-pages"
|
|
@@ -102195,6 +103943,8 @@ var CAPABILITY_ROUTER_KEYS = [
|
|
|
102195
103943
|
*/
|
|
102196
103944
|
var ALL_CAPABILITY_DEFINITIONS = [
|
|
102197
103945
|
accessoriesCapability,
|
|
103946
|
+
actionSourceCapability,
|
|
103947
|
+
actionsCapability,
|
|
102198
103948
|
addonPagesCapability,
|
|
102199
103949
|
addonPagesSourceCapability,
|
|
102200
103950
|
addonRoutesCapability,
|
|
@@ -102397,6 +104147,31 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
102397
104147
|
form: "single",
|
|
102398
104148
|
optional: false
|
|
102399
104149
|
}],
|
|
104150
|
+
"actions.get": [{
|
|
104151
|
+
name: "deviceId",
|
|
104152
|
+
form: "single",
|
|
104153
|
+
optional: true
|
|
104154
|
+
}],
|
|
104155
|
+
"actions.getLinks": [{
|
|
104156
|
+
name: "deviceId",
|
|
104157
|
+
form: "single",
|
|
104158
|
+
optional: false
|
|
104159
|
+
}],
|
|
104160
|
+
"actions.listForCamera": [{
|
|
104161
|
+
name: "deviceId",
|
|
104162
|
+
form: "single",
|
|
104163
|
+
optional: false
|
|
104164
|
+
}],
|
|
104165
|
+
"actions.run": [{
|
|
104166
|
+
name: "deviceId",
|
|
104167
|
+
form: "single",
|
|
104168
|
+
optional: true
|
|
104169
|
+
}],
|
|
104170
|
+
"actions.setLinks": [{
|
|
104171
|
+
name: "deviceId",
|
|
104172
|
+
form: "single",
|
|
104173
|
+
optional: false
|
|
104174
|
+
}],
|
|
102400
104175
|
"addonSettings.getDeviceSettings": [{
|
|
102401
104176
|
name: "deviceId",
|
|
102402
104177
|
form: "single",
|
|
@@ -105168,6 +106943,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
105168
106943
|
/** Cap-method paths that carry a device reference AND live on a system-scope
|
|
105169
106944
|
* cap — the set the v3 device check newly reaches. */
|
|
105170
106945
|
var SYSTEM_SCOPE_DEVICE_METHODS = [
|
|
106946
|
+
"actions.get",
|
|
106947
|
+
"actions.getLinks",
|
|
106948
|
+
"actions.listForCamera",
|
|
106949
|
+
"actions.run",
|
|
106950
|
+
"actions.setLinks",
|
|
105171
106951
|
"addonSettings.getDeviceSettings",
|
|
105172
106952
|
"addonSettings.updateDeviceSettings",
|
|
105173
106953
|
"audioAnalyzer.attachDevice",
|
|
@@ -106382,6 +108162,20 @@ function createSystemProxy(api) {
|
|
|
106382
108162
|
return invokeTrpcLeaf(api, capProp, method, kind, input, push);
|
|
106383
108163
|
}
|
|
106384
108164
|
return {
|
|
108165
|
+
actions: {
|
|
108166
|
+
list: (input) => dispatch("actions", "list", "query", input),
|
|
108167
|
+
stop: (input) => dispatch("actions", "stop", "mutation", input),
|
|
108168
|
+
getTraces: (input) => dispatch("actions", "getTraces", "query", input),
|
|
108169
|
+
create: (input) => dispatch("actions", "create", "mutation", input),
|
|
108170
|
+
update: (input) => dispatch("actions", "update", "mutation", input),
|
|
108171
|
+
delete: (input) => dispatch("actions", "delete", "mutation", input),
|
|
108172
|
+
setLinks: (input) => dispatch("actions", "setLinks", "mutation", input)
|
|
108173
|
+
},
|
|
108174
|
+
actionSource: {
|
|
108175
|
+
listActions: (input) => dispatch("actionSource", "listActions", "query", input),
|
|
108176
|
+
runAction: (input) => dispatch("actionSource", "runAction", "mutation", input),
|
|
108177
|
+
stopAction: (input) => dispatch("actionSource", "stopAction", "mutation", input)
|
|
108178
|
+
},
|
|
106385
108179
|
addonPages: { listPages: (input) => dispatch("addonPages", "listPages", "query", input) },
|
|
106386
108180
|
addons: {
|
|
106387
108181
|
list: (input) => dispatch("addons", "list", "query", input),
|
|
@@ -106525,7 +108319,10 @@ function createSystemProxy(api) {
|
|
|
106525
108319
|
listCompositions: (input) => dispatch("coreBlocks", "listCompositions", "query", input),
|
|
106526
108320
|
getCustomization: (input) => dispatch("coreBlocks", "getCustomization", "query", input),
|
|
106527
108321
|
listComposableCaps: (input) => dispatch("coreBlocks", "listComposableCaps", "query", input),
|
|
106528
|
-
validateComposition: (input) => dispatch("coreBlocks", "validateComposition", "mutation", input)
|
|
108322
|
+
validateComposition: (input) => dispatch("coreBlocks", "validateComposition", "mutation", input),
|
|
108323
|
+
reportAutomationRun: (input) => dispatch("coreBlocks", "reportAutomationRun", "mutation", input),
|
|
108324
|
+
getAutomationRunState: (input) => dispatch("coreBlocks", "getAutomationRunState", "query", input),
|
|
108325
|
+
getTraces: (input) => dispatch("coreBlocks", "getTraces", "query", input)
|
|
106529
108326
|
},
|
|
106530
108327
|
decoder: {
|
|
106531
108328
|
getInfo: (input) => dispatch("decoder", "getInfo", "query", input),
|
|
@@ -116047,6 +117844,421 @@ function parseOauthLandingFragment(hash) {
|
|
|
116047
117844
|
};
|
|
116048
117845
|
}
|
|
116049
117846
|
//#endregion
|
|
117847
|
+
//#region src/vendor-login-proxy/url-rewrite.ts
|
|
117848
|
+
var LOOPBACK_HOSTS = new Set([
|
|
117849
|
+
"127.0.0.1",
|
|
117850
|
+
"localhost",
|
|
117851
|
+
"[::1]"
|
|
117852
|
+
]);
|
|
117853
|
+
function hostWithoutPort(host) {
|
|
117854
|
+
if (host.startsWith("[")) return host.slice(0, host.indexOf("]") + 1);
|
|
117855
|
+
const colon = host.indexOf(":");
|
|
117856
|
+
return colon === -1 ? host : host.slice(0, colon);
|
|
117857
|
+
}
|
|
117858
|
+
function isLoopbackHost(host) {
|
|
117859
|
+
return LOOPBACK_HOSTS.has(hostWithoutPort(host.toLowerCase()));
|
|
117860
|
+
}
|
|
117861
|
+
/** An allow-list entry is valid when it is a bare host[:port] and `http` only targets loopback. */
|
|
117862
|
+
function isValidUpstream(upstream) {
|
|
117863
|
+
if (upstream.host.length === 0 || !/^[a-z0-9.[\]:-]+$/.test(upstream.host)) return false;
|
|
117864
|
+
return upstream.scheme === "https" || isLoopbackHost(upstream.host);
|
|
117865
|
+
}
|
|
117866
|
+
function findUpstream(route, host) {
|
|
117867
|
+
const wanted = host.toLowerCase();
|
|
117868
|
+
return route.upstreams.find((upstream) => upstream.host === wanted);
|
|
117869
|
+
}
|
|
117870
|
+
/** `<basePath>/<host><pathname><search>` — what the browser is sent to. */
|
|
117871
|
+
function proxyPathFor(route, host, pathname, search = "") {
|
|
117872
|
+
return `${route.basePath}/${host}${pathname.startsWith("/") ? pathname : `/${pathname}`}${search}`;
|
|
117873
|
+
}
|
|
117874
|
+
/** Split `/<attemptId>/<host>/<rest…>[?query]` (the data-plane view of a request). */
|
|
117875
|
+
function parseProxyPath(rawUrl) {
|
|
117876
|
+
const queryAt = rawUrl.indexOf("?");
|
|
117877
|
+
const path = queryAt === -1 ? rawUrl : rawUrl.slice(0, queryAt);
|
|
117878
|
+
const search = queryAt === -1 ? "" : rawUrl.slice(queryAt);
|
|
117879
|
+
const match = /^\/([A-Za-z0-9_-]{8,128})\/([^/]+)(\/.*)?$/.exec(path);
|
|
117880
|
+
if (match === null) return null;
|
|
117881
|
+
const attemptId = match[1];
|
|
117882
|
+
const host = match[2];
|
|
117883
|
+
if (attemptId === void 0 || host === void 0) return null;
|
|
117884
|
+
return {
|
|
117885
|
+
attemptId,
|
|
117886
|
+
host: host.toLowerCase(),
|
|
117887
|
+
pathname: match[3] ?? "/",
|
|
117888
|
+
search
|
|
117889
|
+
};
|
|
117890
|
+
}
|
|
117891
|
+
/** The vendor URL a proxied request targets, or null when the host would not stay `host`. */
|
|
117892
|
+
function upstreamUrlFor(upstream, parsed) {
|
|
117893
|
+
try {
|
|
117894
|
+
const url = new URL(`${upstream.scheme}://${upstream.host}${parsed.pathname}${parsed.search}`);
|
|
117895
|
+
return url.host.toLowerCase() === upstream.host ? url : null;
|
|
117896
|
+
} catch {
|
|
117897
|
+
return null;
|
|
117898
|
+
}
|
|
117899
|
+
}
|
|
117900
|
+
function escapeRegex(value) {
|
|
117901
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
117902
|
+
}
|
|
117903
|
+
/** A Location (or any URL value) to a vendor host becomes a proxy path; anything else is unchanged. */
|
|
117904
|
+
function rewriteLocation(location, currentUpstream, route) {
|
|
117905
|
+
let resolved;
|
|
117906
|
+
try {
|
|
117907
|
+
resolved = new URL(location, `${currentUpstream.scheme}://${currentUpstream.host}/`);
|
|
117908
|
+
} catch {
|
|
117909
|
+
return location;
|
|
117910
|
+
}
|
|
117911
|
+
if (resolved.protocol !== "https:" && resolved.protocol !== "http:") return location;
|
|
117912
|
+
const target = findUpstream(route, resolved.host);
|
|
117913
|
+
if (target === void 0) return location;
|
|
117914
|
+
return `${proxyPathFor(route, target.host, resolved.pathname, resolved.search)}${resolved.hash}`;
|
|
117915
|
+
}
|
|
117916
|
+
/** Characters that may precede a URL that STARTS a value (never `=`, `?`, `&`, `%3D`). */
|
|
117917
|
+
var VALUE_START = String.raw`(?<=^|["'(\s>,\[{])`;
|
|
117918
|
+
/**
|
|
117919
|
+
* Rewrite vendor URLs in a text body: absolute (`https://host/…`), protocol-relative
|
|
117920
|
+
* (`//host/…`) and JSON-escaped (`https:\/\/host\/…`) when they start a value; and, in
|
|
117921
|
+
* HTML/CSS, root-relative references (`href="/x"`, `url(/x)`) which would otherwise
|
|
117922
|
+
* escape the proxy mount and land on the hub.
|
|
117923
|
+
*/
|
|
117924
|
+
function rewriteBody(body, kind, currentUpstream, route) {
|
|
117925
|
+
let out = body;
|
|
117926
|
+
for (const upstream of route.upstreams) {
|
|
117927
|
+
const host = escapeRegex(upstream.host);
|
|
117928
|
+
const plain = new RegExp(`${VALUE_START}(?:https?:)?//${host}(?=[/"'?#\\s)\\]},<]|$)`, "g");
|
|
117929
|
+
out = out.replace(plain, `${route.basePath}/${upstream.host}`);
|
|
117930
|
+
const escapedBase = `${route.basePath}/${upstream.host}`.replace(/\//g, "\\/");
|
|
117931
|
+
const escaped = new RegExp(`${VALUE_START}(?:https?:)?\\\\/\\\\/${host}(?=\\\\/|["'?#\\s)\\]},<]|$)`, "g");
|
|
117932
|
+
out = out.replace(escaped, escapedBase);
|
|
117933
|
+
}
|
|
117934
|
+
const current = `${route.basePath}/${currentUpstream.host}/`;
|
|
117935
|
+
const notMounted = `(?!/)(?!${escapeRegex(route.basePath.slice(1))}/)`;
|
|
117936
|
+
if (kind === "html") {
|
|
117937
|
+
const attribute = String.raw`(\b(?:href|src|action|formaction|poster|data-href|data-src)\s*=\s*["'])/`;
|
|
117938
|
+
out = out.replace(new RegExp(`${attribute}${notMounted}`, "gi"), `$1${current}`);
|
|
117939
|
+
}
|
|
117940
|
+
if (kind === "html" || kind === "css") {
|
|
117941
|
+
const cssUrl = String.raw`(url\(\s*["']?)/`;
|
|
117942
|
+
out = out.replace(new RegExp(`${cssUrl}${notMounted}`, "gi"), `$1${current}`);
|
|
117943
|
+
}
|
|
117944
|
+
return out;
|
|
117945
|
+
}
|
|
117946
|
+
/**
|
|
117947
|
+
* A vendor `Set-Cookie` for the browser: no `Domain` (the cookie belongs to the hub
|
|
117948
|
+
* origin), `Path` narrowed to this attempt's prefix, `Secure` kept (the hub is HTTPS).
|
|
117949
|
+
*/
|
|
117950
|
+
function rewriteSetCookie(cookie, route) {
|
|
117951
|
+
const kept = cookie.split(";").map((part) => part.trim()).filter((part, index) => {
|
|
117952
|
+
if (index === 0) return true;
|
|
117953
|
+
const name = part.split("=")[0]?.trim().toLowerCase() ?? "";
|
|
117954
|
+
return name !== "domain" && name !== "path";
|
|
117955
|
+
});
|
|
117956
|
+
kept.push(`Path=${route.basePath}/`);
|
|
117957
|
+
return kept.join("; ");
|
|
117958
|
+
}
|
|
117959
|
+
/**
|
|
117960
|
+
* A browser `Referer` that points into this proxy, turned back into the vendor URL it
|
|
117961
|
+
* stands for. A Referer that is not ours is dropped (null): it names the hub.
|
|
117962
|
+
*/
|
|
117963
|
+
function rewriteReferer(referer, route) {
|
|
117964
|
+
let url;
|
|
117965
|
+
try {
|
|
117966
|
+
url = new URL(referer, "http://hub.invalid");
|
|
117967
|
+
} catch {
|
|
117968
|
+
return null;
|
|
117969
|
+
}
|
|
117970
|
+
if (!url.pathname.startsWith(`${route.basePath}/`)) return null;
|
|
117971
|
+
const rest = /^\/([^/]+)(\/.*)?$/.exec(url.pathname.slice(route.basePath.length));
|
|
117972
|
+
const host = rest?.[1]?.toLowerCase();
|
|
117973
|
+
if (host === void 0) return null;
|
|
117974
|
+
const upstream = findUpstream(route, host);
|
|
117975
|
+
if (upstream === void 0) return null;
|
|
117976
|
+
return `${upstream.scheme}://${upstream.host}${rest?.[2] ?? "/"}${url.search}`;
|
|
117977
|
+
}
|
|
117978
|
+
/** Cookies the browser holds for the hub itself must never reach a vendor. */
|
|
117979
|
+
function filterForwardedCookies(cookieHeader) {
|
|
117980
|
+
return cookieHeader.split(";").map((part) => part.trim()).filter((part) => part.length > 0 && !part.toLowerCase().startsWith("camstack_")).join("; ");
|
|
117981
|
+
}
|
|
117982
|
+
//#endregion
|
|
117983
|
+
//#region src/vendor-login-proxy/login-proxy.ts
|
|
117984
|
+
var MAX_REQUEST_BODY_BYTES = 2 * 1024 * 1024;
|
|
117985
|
+
var MAX_TEXT_BODY_BYTES = 4 * 1024 * 1024;
|
|
117986
|
+
/** Request headers that are never forwarded to the vendor. */
|
|
117987
|
+
var DROP_REQUEST_HEADERS = new Set([
|
|
117988
|
+
"host",
|
|
117989
|
+
"connection",
|
|
117990
|
+
"keep-alive",
|
|
117991
|
+
"proxy-authorization",
|
|
117992
|
+
"proxy-connection",
|
|
117993
|
+
"te",
|
|
117994
|
+
"trailer",
|
|
117995
|
+
"transfer-encoding",
|
|
117996
|
+
"upgrade",
|
|
117997
|
+
"content-length",
|
|
117998
|
+
"accept-encoding",
|
|
117999
|
+
"authorization",
|
|
118000
|
+
"cookie",
|
|
118001
|
+
"origin",
|
|
118002
|
+
"referer",
|
|
118003
|
+
"x-camstack-dataplane-secret",
|
|
118004
|
+
"x-forwarded-for",
|
|
118005
|
+
"x-forwarded-host",
|
|
118006
|
+
"x-forwarded-proto",
|
|
118007
|
+
"x-forwarded-prefix",
|
|
118008
|
+
"x-real-ip",
|
|
118009
|
+
"forwarded"
|
|
118010
|
+
]);
|
|
118011
|
+
/**
|
|
118012
|
+
* Response headers dropped: framing/CSP/HSTS that break a page under another origin, and
|
|
118013
|
+
* the ones that no longer describe the (decoded, possibly rewritten) body.
|
|
118014
|
+
*/
|
|
118015
|
+
var DROP_RESPONSE_HEADERS = new Set([
|
|
118016
|
+
"content-security-policy",
|
|
118017
|
+
"content-security-policy-report-only",
|
|
118018
|
+
"x-frame-options",
|
|
118019
|
+
"strict-transport-security",
|
|
118020
|
+
"public-key-pins",
|
|
118021
|
+
"report-to",
|
|
118022
|
+
"nel",
|
|
118023
|
+
"content-encoding",
|
|
118024
|
+
"content-length",
|
|
118025
|
+
"transfer-encoding",
|
|
118026
|
+
"connection",
|
|
118027
|
+
"keep-alive",
|
|
118028
|
+
"set-cookie",
|
|
118029
|
+
"location"
|
|
118030
|
+
]);
|
|
118031
|
+
function bodyKindOf(contentType) {
|
|
118032
|
+
const type = contentType.toLowerCase();
|
|
118033
|
+
if (type.includes("text/html") || type.includes("application/xhtml")) return "html";
|
|
118034
|
+
if (type.includes("text/css")) return "css";
|
|
118035
|
+
if (type.startsWith("text/") || type.includes("javascript") || type.includes("json") || type.includes("xml")) return "other";
|
|
118036
|
+
return null;
|
|
118037
|
+
}
|
|
118038
|
+
function firstHeader(value) {
|
|
118039
|
+
return Array.isArray(value) ? value[0] : value;
|
|
118040
|
+
}
|
|
118041
|
+
async function readRequestBody(req) {
|
|
118042
|
+
const chunks = [];
|
|
118043
|
+
let size = 0;
|
|
118044
|
+
for await (const chunk of req) {
|
|
118045
|
+
const buf = typeof chunk === "string" ? Buffer.from(chunk) : Buffer.from(chunk);
|
|
118046
|
+
size += buf.length;
|
|
118047
|
+
if (size > MAX_REQUEST_BODY_BYTES) return "too-large";
|
|
118048
|
+
chunks.push(buf);
|
|
118049
|
+
}
|
|
118050
|
+
return Buffer.concat(chunks);
|
|
118051
|
+
}
|
|
118052
|
+
function sendPlain(res, status, text) {
|
|
118053
|
+
res.writeHead(status, {
|
|
118054
|
+
"content-type": "text/plain; charset=utf-8",
|
|
118055
|
+
"cache-control": "no-store"
|
|
118056
|
+
});
|
|
118057
|
+
res.end(text);
|
|
118058
|
+
}
|
|
118059
|
+
var VendorLoginProxy = class {
|
|
118060
|
+
#addonId;
|
|
118061
|
+
#prefix;
|
|
118062
|
+
#logger;
|
|
118063
|
+
#now;
|
|
118064
|
+
#fetch;
|
|
118065
|
+
#attempts = /* @__PURE__ */ new Map();
|
|
118066
|
+
constructor(options) {
|
|
118067
|
+
this.#addonId = options.addonId;
|
|
118068
|
+
this.#prefix = options.prefix;
|
|
118069
|
+
this.#logger = options.logger;
|
|
118070
|
+
this.#now = options.now ?? (() => Date.now());
|
|
118071
|
+
this.#fetch = options.fetchFn ?? globalThis.fetch.bind(globalThis);
|
|
118072
|
+
}
|
|
118073
|
+
/** The `DataPlaneHandler` to pass to `ctx.dataPlane.serve({ prefix, access: 'admin', … })`. */
|
|
118074
|
+
handler = (req, res) => this.#handle(req, res);
|
|
118075
|
+
/** Register an attempt. A one-shot capability: refused hosts are rejected up front. */
|
|
118076
|
+
open(spec) {
|
|
118077
|
+
for (const upstream of spec.upstreams) if (!isValidUpstream(upstream)) throw new Error(`vendor login proxy: upstream ${upstream.host} is not allowed`);
|
|
118078
|
+
this.#attempts.set(spec.attemptId, {
|
|
118079
|
+
expiresAtMs: spec.expiresAtMs,
|
|
118080
|
+
upstreams: spec.upstreams,
|
|
118081
|
+
evaluate: async (view) => {
|
|
118082
|
+
const verdict = await spec.terminal(view);
|
|
118083
|
+
if (verdict.kind === "continue") return verdict;
|
|
118084
|
+
return {
|
|
118085
|
+
kind: "done",
|
|
118086
|
+
landing: await spec.onDone(verdict.payload)
|
|
118087
|
+
};
|
|
118088
|
+
}
|
|
118089
|
+
});
|
|
118090
|
+
}
|
|
118091
|
+
close(attemptId) {
|
|
118092
|
+
this.#attempts.delete(attemptId);
|
|
118093
|
+
}
|
|
118094
|
+
isOpen(attemptId) {
|
|
118095
|
+
const attempt = this.#attempts.get(attemptId);
|
|
118096
|
+
return attempt !== void 0 && this.#now() <= attempt.expiresAtMs;
|
|
118097
|
+
}
|
|
118098
|
+
/**
|
|
118099
|
+
* The hub-relative path that opens `vendorUrl` through the proxy for this attempt:
|
|
118100
|
+
* the URL the browser is sent to. Null when the host is not in the attempt's list.
|
|
118101
|
+
*/
|
|
118102
|
+
entryPath(attemptId, vendorUrl) {
|
|
118103
|
+
const attempt = this.#attempts.get(attemptId);
|
|
118104
|
+
if (attempt === void 0) return null;
|
|
118105
|
+
const url = new URL(vendorUrl);
|
|
118106
|
+
if (findUpstream({
|
|
118107
|
+
basePath: "",
|
|
118108
|
+
upstreams: attempt.upstreams
|
|
118109
|
+
}, url.host) === void 0) return null;
|
|
118110
|
+
return `/addon/${this.#addonId}/${this.#prefix}/${attemptId}/${url.host}${url.pathname}${url.search}`;
|
|
118111
|
+
}
|
|
118112
|
+
#routeFor(attemptId, attempt, forwardedPrefix) {
|
|
118113
|
+
return {
|
|
118114
|
+
basePath: `${forwardedPrefix}/addon/${this.#addonId}/${this.#prefix}/${attemptId}`,
|
|
118115
|
+
upstreams: attempt.upstreams
|
|
118116
|
+
};
|
|
118117
|
+
}
|
|
118118
|
+
async #handle(req, res) {
|
|
118119
|
+
try {
|
|
118120
|
+
await this.#serve(req, res);
|
|
118121
|
+
} catch (err) {
|
|
118122
|
+
this.#logger.warn("vendor login proxy: request failed", { meta: {
|
|
118123
|
+
addonId: this.#addonId,
|
|
118124
|
+
error: err instanceof Error ? err.name : "unknown"
|
|
118125
|
+
} });
|
|
118126
|
+
if (!res.headersSent) sendPlain(res, 502, "The sign-in page could not be reached.");
|
|
118127
|
+
else res.end();
|
|
118128
|
+
}
|
|
118129
|
+
}
|
|
118130
|
+
async #serve(req, res) {
|
|
118131
|
+
const parsed = parseProxyPath(req.url ?? "/");
|
|
118132
|
+
if (parsed === null) {
|
|
118133
|
+
sendPlain(res, 404, "Not found");
|
|
118134
|
+
return;
|
|
118135
|
+
}
|
|
118136
|
+
const forwardedPrefix = (firstHeader(req.headers["x-forwarded-prefix"]) ?? "").replace(/\/+$/, "");
|
|
118137
|
+
const attempt = this.#attempts.get(parsed.attemptId);
|
|
118138
|
+
if (attempt === void 0 || this.#now() > attempt.expiresAtMs) {
|
|
118139
|
+
if (attempt !== void 0) this.#attempts.delete(parsed.attemptId);
|
|
118140
|
+
this.#logger.info("vendor login proxy: attempt refused", { meta: {
|
|
118141
|
+
addonId: this.#addonId,
|
|
118142
|
+
reason: attempt === void 0 ? "missing" : "expired"
|
|
118143
|
+
} });
|
|
118144
|
+
this.#redirect(res, forwardedPrefix, {
|
|
118145
|
+
status: "error",
|
|
118146
|
+
addonId: this.#addonId,
|
|
118147
|
+
reason: "invalid_state"
|
|
118148
|
+
});
|
|
118149
|
+
return;
|
|
118150
|
+
}
|
|
118151
|
+
const route = this.#routeFor(parsed.attemptId, attempt, forwardedPrefix);
|
|
118152
|
+
const upstream = findUpstream(route, parsed.host);
|
|
118153
|
+
const target = upstream === void 0 ? null : upstreamUrlFor(upstream, parsed);
|
|
118154
|
+
if (upstream === void 0 || target === null) {
|
|
118155
|
+
this.#logger.warn("vendor login proxy: host refused", { meta: {
|
|
118156
|
+
addonId: this.#addonId,
|
|
118157
|
+
host: parsed.host
|
|
118158
|
+
} });
|
|
118159
|
+
sendPlain(res, 404, "Not found");
|
|
118160
|
+
return;
|
|
118161
|
+
}
|
|
118162
|
+
const method = (req.method ?? "GET").toUpperCase();
|
|
118163
|
+
let body;
|
|
118164
|
+
if (method !== "GET" && method !== "HEAD") {
|
|
118165
|
+
const read = await readRequestBody(req);
|
|
118166
|
+
if (read === "too-large") {
|
|
118167
|
+
sendPlain(res, 413, "Request too large");
|
|
118168
|
+
return;
|
|
118169
|
+
}
|
|
118170
|
+
body = read;
|
|
118171
|
+
}
|
|
118172
|
+
const headers = this.#requestHeaders(req, route, upstream);
|
|
118173
|
+
const upstreamRes = await this.#fetch(target, {
|
|
118174
|
+
method,
|
|
118175
|
+
headers,
|
|
118176
|
+
redirect: "manual",
|
|
118177
|
+
...body !== void 0 && body.length > 0 ? { body: new Uint8Array(body) } : {}
|
|
118178
|
+
});
|
|
118179
|
+
const location = upstreamRes.headers.get("location");
|
|
118180
|
+
const setCookies = upstreamRes.headers.getSetCookie();
|
|
118181
|
+
const kind = bodyKindOf(upstreamRes.headers.get("content-type") ?? "");
|
|
118182
|
+
const declaredLength = Number(upstreamRes.headers.get("content-length") ?? "0");
|
|
118183
|
+
const text = kind !== null && !(declaredLength > MAX_TEXT_BODY_BYTES) && method !== "HEAD" ? await upstreamRes.text() : null;
|
|
118184
|
+
this.#logger.debug("vendor login proxy: upstream answered", { meta: {
|
|
118185
|
+
addonId: this.#addonId,
|
|
118186
|
+
host: upstream.host,
|
|
118187
|
+
status: upstreamRes.status,
|
|
118188
|
+
method
|
|
118189
|
+
} });
|
|
118190
|
+
const settled = await attempt.evaluate({
|
|
118191
|
+
status: upstreamRes.status,
|
|
118192
|
+
url: target.toString(),
|
|
118193
|
+
location,
|
|
118194
|
+
setCookies,
|
|
118195
|
+
bodyText: text
|
|
118196
|
+
});
|
|
118197
|
+
if (settled.kind === "done") {
|
|
118198
|
+
this.#attempts.delete(parsed.attemptId);
|
|
118199
|
+
this.#logger.info("vendor login proxy: sign-in finished", { meta: {
|
|
118200
|
+
addonId: this.#addonId,
|
|
118201
|
+
status: settled.landing.status
|
|
118202
|
+
} });
|
|
118203
|
+
this.#redirect(res, forwardedPrefix, settled.landing);
|
|
118204
|
+
return;
|
|
118205
|
+
}
|
|
118206
|
+
const out = {};
|
|
118207
|
+
upstreamRes.headers.forEach((value, name) => {
|
|
118208
|
+
if (!DROP_RESPONSE_HEADERS.has(name.toLowerCase())) out[name] = value;
|
|
118209
|
+
});
|
|
118210
|
+
if (setCookies.length > 0) out["set-cookie"] = setCookies.map((c) => rewriteSetCookie(c, route));
|
|
118211
|
+
if (location !== null) out["location"] = rewriteLocation(location, upstream, route);
|
|
118212
|
+
out["cache-control"] = "no-store";
|
|
118213
|
+
if (text !== null && kind !== null) {
|
|
118214
|
+
const rewritten = rewriteBody(text, kind, upstream, route);
|
|
118215
|
+
res.writeHead(upstreamRes.status, out);
|
|
118216
|
+
res.end(rewritten);
|
|
118217
|
+
return;
|
|
118218
|
+
}
|
|
118219
|
+
res.writeHead(upstreamRes.status, out);
|
|
118220
|
+
await this.#pipeBody(upstreamRes, res);
|
|
118221
|
+
}
|
|
118222
|
+
#requestHeaders(req, route, upstream) {
|
|
118223
|
+
const headers = {};
|
|
118224
|
+
for (const [name, value] of Object.entries(req.headers)) {
|
|
118225
|
+
const lower = name.toLowerCase();
|
|
118226
|
+
if (DROP_REQUEST_HEADERS.has(lower) || value === void 0) continue;
|
|
118227
|
+
headers[lower] = Array.isArray(value) ? value.join(", ") : value;
|
|
118228
|
+
}
|
|
118229
|
+
const cookie = filterForwardedCookies(firstHeader(req.headers["cookie"]) ?? "");
|
|
118230
|
+
if (cookie.length > 0) headers["cookie"] = cookie;
|
|
118231
|
+
if (req.headers["origin"] !== void 0) headers["origin"] = `${upstream.scheme}://${upstream.host}`;
|
|
118232
|
+
const referer = firstHeader(req.headers["referer"]);
|
|
118233
|
+
if (referer !== void 0) {
|
|
118234
|
+
const back = rewriteReferer(referer, route);
|
|
118235
|
+
if (back !== null) headers["referer"] = back;
|
|
118236
|
+
}
|
|
118237
|
+
return headers;
|
|
118238
|
+
}
|
|
118239
|
+
async #pipeBody(upstreamRes, res) {
|
|
118240
|
+
if (upstreamRes.body === null) {
|
|
118241
|
+
res.end();
|
|
118242
|
+
return;
|
|
118243
|
+
}
|
|
118244
|
+
for await (const chunk of upstreamRes.body) {
|
|
118245
|
+
if (!res.write(chunk)) await new Promise((resolve) => {
|
|
118246
|
+
res.once("drain", resolve);
|
|
118247
|
+
res.once("close", resolve);
|
|
118248
|
+
});
|
|
118249
|
+
if (res.destroyed) return;
|
|
118250
|
+
}
|
|
118251
|
+
res.end();
|
|
118252
|
+
}
|
|
118253
|
+
#redirect(res, forwardedPrefix, outcome) {
|
|
118254
|
+
res.writeHead(302, {
|
|
118255
|
+
location: `${forwardedPrefix}${oauthLandingUrl(null, outcome)}`,
|
|
118256
|
+
"cache-control": "no-store"
|
|
118257
|
+
});
|
|
118258
|
+
res.end();
|
|
118259
|
+
}
|
|
118260
|
+
};
|
|
118261
|
+
//#endregion
|
|
116050
118262
|
//#region src/utils/pool-memory-watchdog.ts
|
|
116051
118263
|
var MB = 1024 * 1024;
|
|
116052
118264
|
var DEFAULT_POOL_MEMORY_POLICY = {
|
|
@@ -117100,4 +119312,4 @@ function armRemovalReconcile(opts) {
|
|
|
117100
119312
|
return () => clearInterval(timer);
|
|
117101
119313
|
}
|
|
117102
119314
|
//#endregion
|
|
117103
|
-
export { ACCESSORY_LABEL, ACCESS_ROLES, ACTIVE_CRITERIA, ACTUATOR_METHODS, ACTUATOR_TEMPLATE_IDS, ADMIN_SCOPE, AGENT_MDNS_QUERY_NAME, AGENT_MDNS_SERVICE_TYPE, AGENT_MDNS_TXT_KEYS, AGGREGATE_REDUCERS, AGGREGATE_THROUGHPUT_BY_KIND, ALEXA_EGRESS_PROFILE, ALL_CAPABILITY_DEFINITIONS, ALL_METHOD_ACCESS, APPEARANCE_BIN_COUNT, APPEARANCE_BLOCKS, APPEARANCE_DESCRIPTOR_VERSION, APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT, APPLE_SA_TO_MACRO, APPLIANCE_DEFAULTS, APPLIANCE_EXPORT, APPLIANCE_KINDS, APPLIANCE_TEMPLATE_ID, APP_AUTH_CALLBACK_MAX_LENGTH, APP_AUTH_CALLBACK_URLS, APP_FLOW_DEFAULT_REDIRECT, APP_FLOW_REFUSAL_MESSAGES, APP_FLOW_STATE_PREFIX, APP_REFUSED_PATH, APP_START_REFUSAL_MESSAGES, ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT, ARITHMETIC_OPS, AUDIO_ANALYSIS_CAP_NAME, AUDIO_BACKEND_CHOICES, AUDIO_CHUNK_FORMATS, AUDIO_GRADIENT_ALPHAS, AUDIO_MACRO_LABELS, AUDIO_NOT_CLASSIFIED_REASONS, AUDIO_PRESETS, AUDIO_SCALE_EPOCH_ISO, AUDIO_SCALE_EPOCH_MS, AUTOMATIC_HUB_ADDRESS_FLAGS, AUTO_SHARE_HEADROOM, AUTO_TUNE_FAMILY, AcceleratorComputeSchema, AcceleratorKindSchema, AccessoriesStatusSchema, AccessoryKind, ActiveCriterionSchema, AddBrokerInputSchema, AddRetrainFrameFromRecordingResultSchema, AddonAutoUpdateSchema, AddonListItemSchema, AddonPageDeclarationSchema, AddonPageInfoSchema, AddonRoutesScopeSchema, AdminLinkTargetEnum, 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, AggregateReducerSchema, AirQualitySensorStatusSchema, AlarmArmModeSchema, AlarmPanelStatusSchema, AlarmStateSchema, AlertEpisodePayloadSchema, AlertSchema, AlertSeveritySchema, AlertSourceSchema, AlertStatusSchema, AmbientLightSensorStatusSchema, AnalyticsLtsSeriesSchema, AppFlowPurposeSchema, AppLoginPathSchema, AppPageLangSchema, AppleFmAvailabilitySchema, AppleFmUnavailableReasonSchema, ApplianceHelperSpecSchema, ArchiveEntrySchema, ArchiveManifestSchema, ArchiveSqliteSnapshotSchema, ArchivedDebugNoteQueryInputSchema, ArchivedDebugNoteSchema, ArithmeticHelperSpecSchema, AttachmentMediaTypeSchema, AttachmentSchema, AudioAnalysisResultSchema, AudioAnalysisSettingsSchema, AudioAttachDeviceInputSchema, AudioAttachDeviceResultSchema, AudioChunkFormatSchema, AudioChunkInputSchema, AudioClassSummarySchema, AudioClassificationLabelSchema, AudioClassificationResultSchema, AudioClassifyOutcomeSchema, AudioCodecInfoSchema, AudioDecodeSessionConfigSchema, AudioDetachDeviceResultSchema, AudioEncodeSchema, AudioEncodeSessionConfigSchema, AudioEncodedChunkSchema, AudioEventSchema, AudioLevelSchema, AudioMetricsHistoryPointSchema, AudioMetricsHistorySchema, AudioMetricsSnapshotSchema, AudioPcmChunkSchema, AudioStreamPickSchema, AuthResultSchema, AutoTuneApplyInputSchema, AutoTuneApplyResultSchema, AutoTuneOptionsSchema, AutoTunePhaseResultSchema, AutoTunePlanSchema, AutoTuneWarningSchema, AutoUpdateSettingsSchema, AutomationActionSchema, AutomationConditionOperatorSchema, AutomationConditionSchema, AutomationControlStatusSchema, AutomationRecipeSchema, AutomationTriggerSchema, AvailableIntegrationTypeSchema, BASE_DEVICE_CAPS, BASE_LIVE_EGRESS_PROFILE, BATTERY_DEVICE_PROFILE, BATTERY_UNREACHABLE_AFTER_MS, BENCH_ROOT_STEP_ID, BINARY_AGGREGATES, BIRTH_DECISION_DEFAULT_LIMIT, BOOT_RECOVERY_BACKOFF_MS, BUILTIN_RESULT_KINDS, BackgroundRunRegistry, BacklightModeSchema, BackupArchiveEncryptionSchema, BackupDestinationInfoSchema, BackupEncryptionStatusSchema, BackupEntrySchema, BackupRunPhaseSchema, BackupRunSchema, BackupRunStateSchema, BackupTriggerResultSchema, BaseAddon, BaseDevice, BaseDeviceProvider, BatchTooLargeError, BatteryStatusSchema, BinaryStatusSchema, BirthDecisionCropSourceSchema, BirthDecisionQueryInputSchema, BirthDecisionRecordSchema, BirthDecisionVerdictSchema, BoundingBoxSchema, BrightnessStatusSchema, AddInputSchema as BrokerAddInputSchema, BrokerAudioClientSchema, BrokerClientsSchema, BrokerConnectionDetailsSchema, BrokerConsumerAttributionSchema, BrokerConsumerKindSchema, BrokerEncodedClientSchema, GetStateInputSchema as BrokerGetStateInputSchema, BrokerInfoSchema, BrokerInfoSchema as UnifiedBrokerInfoSchema, BrokerProviderInfoSchema, PublishInputSchema as BrokerPublishInputSchema, RegistryStatusSchema as BrokerRegistryStatusSchema, BrokerRtspClientSchema, BrokerStatsSchema, BrokerStatusEnum, BrokerStatusSchema, SubscribeInputSchema as BrokerSubscribeInputSchema, SubscribeResultSchema as BrokerSubscribeResultSchema, TestConnectionResultSchema as BrokerTestConnectionResultSchema, UnsubscribeInputSchema as BrokerUnsubscribeInputSchema, BucketAccumulator, BulkRecordSchema, CALENDAR_PERIODS, CALLER_STAMPED_CAPABILITIES, CAMERA_SENSORS_NOT_LOADED, CAMERA_SENSORS_SETTINGS_KEY, CAMERA_SWITCH_CATALOG, CAMERA_SWITCH_ORDER, CAMERA_TRIGGER, CAMSTACK_APP_LINK_ORIGIN, CAMSTACK_EVENT_PREFIX, CAM_PROFILE_ORDER, CAPABILITY_NAMES, CAPABILITY_ROUTER_KEYS, CAP_CUSTOMIZE_CATALOG, CAP_NAMES_WITH_STATUS, CAP_NODE_PIN_CONTEXT_KEY, CAP_PROVIDER_KIND_MAP, CAP_RUNTIME_FIELD_UNITS, CAP_VOCABULARY, CAP_VOCABULARY_BY_NAME, CATALOG_LANGS, CLASS_MAP_MACRO_TARGETS, CLIP_BROKER_PACED_RATES, CLIP_LABEL_EVENT_FETCH_LIMIT, CLIP_PLAYBACK_OPTIONS, CLIP_REALTIME_SOURCE_RATES, CLIP_REASON_HEADER_MAX, CLIP_SEARCH_STRICTNESS, CLIP_STILL_DISPOSITION_HEADER, CLIP_STILL_REASON_CODE_HEADER, CLIP_STILL_REASON_HEADER, CLIP_STREAM_SOURCE_RATES, CLIP_STREAM_TRANSPORT_HEADER, CLIP_STRICTNESS_FACTOR, CLIP_VECTOR_INDEX_PATTERN, CLUSTER_MODEL_CHOICE_UNREADABLE_REASONS, CLUSTER_MODEL_SCOPED_STEPS, CLUSTER_MODEL_SECTION_ID, CLUSTER_STEP_SETTING_FIELDS, COCO_80_LABELS, COCO_TO_MACRO, COMPOSED_DEVICE_STABLE_ID_PREFIX, COMPOSED_ITEM_FIXED_FIELDS, COMPOSER_ADDON_ID, COMPOSER_RUNNER_ID, COMPOSITION_EVENT_CATEGORY, COMPOSITION_ITEM_ARRAY_PATH, COMPOSITION_ITEM_KEY_RE, CONNECTION_TEST_TIMEOUT_MS, CONTAINER_CHILD_PRIORITY, CORAL_DEFAULT_MODEL_ID, CORE_BLOCKS_ADDON_ID, CORE_BLOCK_ADDON_PREFIX, CORE_ULTRA_265K_IGPU_CLOCK_MHZ, CORE_ULTRA_265K_IGPU_EU, CREDENTIAL_TOKEN_AUDIENCE, CREDENTIAL_TOKEN_KIND, CROP_CLASS_FLOORS, CROP_SUPPLY_SOURCES, CROP_SUPPLY_STEP_IDS, CUSTOMIZATION_BLOCK_NAME_PREFIX, CalendarColorSchema, CalendarEntrySchema, CalendarEventSchema, CalendarInfoSchema, CalendarListEventsInputSchema, CalendarPreferenceEntrySchema, CalendarPreferencesSchema, CalendarSetPreferenceInputSchema, CalendarSourceKindSchema, CalendarWindowSchema, CamProfileSchema, CamStreamDescriptorSchema, CamStreamKindSchema, CamStreamResolutionSchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraCredentialsSchema, CameraCredentialsStatusSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionSourceSchema, CameraDetectionStatusSchema, CameraMetricsSchema, CameraMetricsWithDeviceIdSchema, CameraMotionStatusSchema, CameraOccupancySnapshotForDeviceSchema, CameraOwnMotionSchema, CameraRawLevelSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSensorAttachmentSchema, CameraSensorEntrySchema, CameraSensorModeSchema, CameraSensorRefSchema, CameraSensorsConfigSchema, CameraSensorsNotEnforcedSchema, CameraSensorsNotForwardedSchema, CameraSensorsStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusDegradationReasonSchema, CameraStatusDegradationSchema, CameraStatusSchema, CameraStatusStageSchema, CameraStreamSchema, CameraSwitchAuthoritySchema, CameraSwitchGroupSchema, CameraSwitchIdSchema, CameraSwitchSchema, CameraSwitchUnavailableReasonSchema, CameraSwitchWarningSchema, CamstackError, CandidateQueryFilterSchema, CapScopeSchema, CapabilityBindingsSchema, CapacityFallbackSchema, CapacitySourceSchema, CarbonMonoxideStatusSchema, CatalogFileSchema, CatalogLangSchema, ChargingStatus, ClaimOutcomeSchema, ClaimsListingSchema, CleanupDeletedDevicesResultSchema, ClearTrackRelationInputSchema, ClearTrackRelationResultSchema, ClientNetworkStatsSchema, ClimateControlStatusSchema, ClipBytesOfferSchema, ClipBytesSchema, ClipExportFailureSchema, ClipModelMetaSchema, ClipPlaybackOptionsSchema, ClipPlaybackSchema, ClipSchema, ClipSearchStrictnessSchema, ClipSourceAvailabilitySchema, ClipSourceSchema, ClipStillDispositionSchema, ClipStillRefusalCodeSchema, ClipStreamAudioReasonSchema, ClipStreamAudioSchema, ClipStreamDialSchema, ClipWakeSchema, ClusterAddonNodeDeploymentSchema, ClusterAddonStatusEntrySchema, ClusterModelChoiceSchema, CollectionColumnSchema, CollectionIndexSchema, ColorStatusSchema, CompleteEnrollmentInputSchema, CompleteEnrollmentOutputSchema, CompleteEnrollmentResultSchema, ComposableCapabilitiesSchema, ComposableCapabilitySchema, ComposableFieldSchema, ComposerApplyInputSchema, ComposerApplyResultSchema, ComposerBlockSchema, ComposerBlockVerdictSchema, ComposerUnreadableBlockSchema, CompositionAggregateSourceSchema, CompositionBindingSchema, CompositionBlockInputSchema, CompositionBlockStateSchema, CompositionCodeSourceSchema, CompositionCommandTargetSchema, CompositionCustomizationReadSchema, CompositionEventPlanSchema, CompositionExistingTargetSchema, CompositionExpressionSourceSchema, CompositionFeatureModeSchema, CompositionFeaturePlanSchema, CompositionFeatureSchema, CompositionFieldItemSchema, CompositionFieldKindSchema, CompositionFieldPlanSchema, CompositionFieldReadSchema, CompositionFieldRoleSchema, CompositionFieldSourceSchema, CompositionFieldStateKindSchema, CompositionFieldStateSchema, CompositionFieldsFeatureSchema, CompositionForwardCommandSchema, CompositionFromSourceSchema, CompositionGetReadSchema, CompositionGraphError, CompositionItemEntrySchema, CompositionListReadSchema, CompositionLiteralBindingSchema, CompositionNewTargetSchema, CompositionPassthroughFeatureSchema, CompositionProblemCodeSchema, CompositionProblemSchema, CompositionRunStatusSchema, CompositionSchema, CompositionSeriesSourceSchema, CompositionSourceRefSchema, CompositionStateReadSchema, CompositionTargetSchema, CompositionUnavailableModeSchema, CompositionValidationSchema, CompositionViewSchema, ConfigEntrySchema, ConfigSectionWithValuesSchema, ConfigTabDeclarationSchema, ConnectionTestDescriptorSchema, ConnectionTestInputSchema, ConnectionTestOutcomeSchema, ConnectivityStatusSchema, ConsumableFormSchema, ConsumableItemSchema, ConsumableKindSchema, ConsumableLevelSchema, ConsumableRemainingKindSchema, ConsumableRemainingSchema, ConsumableStatusSchema, ConsumablesStatusSchema, ContactStatusSchema, ControlKindSchema, ControlStatusSchema, ConvertArtifactSchema, ConvertResultSchema, ConvertTargetSchema, CoreBlockCompileInputSchema, CoreBlockCompileResultSchema, CoreBlockFilesSchema, CoreBlockInputFieldsSchema, CoreBlockInputSchema, CoreBlockPlacementSchema, CoreBlockSchema, CoreBlockSourceSchema, CoreBlockStatusSchema, CoverStateSchema, CoverStatusSchema, CreateIntegrationInputSchema, CreateUserInputSchema, CredentialScopeSchema, CredentialTokenClaimsSchema, CustomActionInputSchema, CustomModelDescriptorSchema, CustomizeAssignmentStatusSchema, DATABASE_SNAPSHOT_PARTIAL_SUFFIX, DATABASE_SNAPSHOT_SUFFIX, DATABASE_SNAPSHOT_TIMEOUT_MS, DATAPLANE_SECRET_HEADER, DATA_STORE_DATABASES, DAYS_PER_WEEK, DAY_MS, DAY_NAMES, DECLARED_DEVICE_SWEEP_LIMIT, DECLARED_INTEGRATION_FIXED_KEY, DEFAULT_ADDON_PLACEMENT, DEFAULT_AUDIO_ANALYZER_CONFIG, DEFAULT_CAMERA_FPS, DEFAULT_CAMERA_SENSOR_MODE, DEFAULT_CATALOG_LANG, DEFAULT_CLUSTER_STEP_MODELS, DEFAULT_CLUSTER_STEP_SETTINGS, DEFAULT_CORE_BLOCK_ENTRY, DEFAULT_DECODER_HWACCEL_CONFIG, DEFAULT_DETAIL_CROP_CONVENTION, DEFAULT_DISPLAY_PREFERENCE, DEFAULT_EVENTS_BAND_BUFFER_SEC, DEFAULT_EVENT_COLOR, DEFAULT_FEATURES, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS, DEFAULT_HEADROOM, DEFAULT_HISTORY_RETENTION, DEFAULT_MIN_LANDMARK_FACE_SIZE_PX, DEFAULT_MIN_SESSIONS_PER_DEVICE, DEFAULT_NATIVE_LEASE_SETTINGS, DEFAULT_OVERLAY_LAYERS, DEFAULT_POOL_MEMORY_POLICY, DEFAULT_RECORDING_PROFILES, DEFAULT_RETENTION, DEFAULT_RUNTIME_STATE_DURABILITY, DEFAULT_SESSION_LOST_DEBOUNCE_MS, DEFAULT_SESSION_PLACEMENT_POLICY, DEFAULT_SHARE_SOURCE, DEFAULT_TIMELAPSE_PREVIEW_TEXT, DEFAULT_TOKEN_EXPIRY, DEFAULT_VIEWER_SCOPE, DEFINITIVE_DEVICE_REFUSALS, DERIVATIVE_UNITS, DERIVED_CAMERA_SILENCED_CAP_NAMES, DETAIL_CROP_PADDING_FIELD, DETAIL_CROP_PADDING_KEY, DETAIL_CROP_SECTION_ID, DETAIL_CROP_SQUARE_KEY, DETECTION_MACRO_CLASSES, DETECTION_PIPELINE_CAP_NAME, DETECTOR_ACCURACY, DETECTOR_PERF, DEVICE_BACKEND_TO_FORMAT, DEVICE_CAP_NAMES, DEVICE_CERT_RENEW_WINDOW_DAYS, DEVICE_CERT_SIGNATURE, DEVICE_CERT_VALIDITY_DAYS, DEVICE_CHILDREN_BATCH_MAX, DEVICE_DEFINITIVE_REFUSALS_BEFORE_DELETE, DEVICE_DO_ACTIONS, DEVICE_ENROLLMENT_TTL_MS, DEVICE_HISTORY_ENERGY_KEY, DEVICE_HISTORY_ORPHAN_DELETE_MAX, DEVICE_HISTORY_ORPHAN_LIST_MAX, DEVICE_HISTORY_QUERY_MANY_MAX_ITEMS, DEVICE_NONCE_TTL_MS, DEVICE_PROFILES, DEVICE_RAMP, DEVICE_REFRESH_REFUSAL_PREFIX, DEVICE_RESTORE_RETRY_CONCURRENCY, DEVICE_RESTORE_RETRY_DELAYS_MS, DEVICE_SAN_CREDENTIAL_PREFIX, DEVICE_SAN_USER_PREFIX, DEVICE_SCOPED_CAPS, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_SIGNATURE_MESSAGE_VERSION, DEVICE_STATE_READERS, DEVICE_STATUS_METHOD, DEVICE_TOMBSTONE_RETENTION_MS, DEVICE_TYPE_CONTROL_KIND, DEVICE_TYPE_DO_CAPS, DEVICE_TYPE_INFO, DISPLAY_PREFERENCES, DISPLAY_PRESETS, DOORBELL_RISE_DEBOUNCE_MS, DataStoreDatabaseSchema, EngineInfoSchema as DataStoreEngineInfoSchema, DatabaseSnapshotRequestSchema, DatabaseSnapshotResultSchema, DatabaseSnapshotTableSchema, DatabaseSnapshotTargetsSchema, DatabaseSnapshotWrittenSchema, DayNightModeSchema, DayNightOptionsSchema, DayNightSettingsPatchSchema, DayNightStatusSchema, DeclarationRefusedError, DeclareCollectionInputSchema, DeclareKindResultSchema, DeclaredDevices, DecodedAudioChunkSchema, DeleteIntegrationResultSchema, DerivativeHelperSpecSchema, DetailCropConventionSchema, DetectionCatalogClassMapSchema, DetectionSourceSchema, DetectionSourcesSchema, DeviceAdminLinkSchema, DeviceCaStatusSchema, DeviceCertificateLoginMethodSchema, DeviceCertificateSettingsSchema, DeviceChallengeResultSchema, DeviceChallengeSchema, DeviceCodeSeveritySchema, DeviceConfig, DeviceCredentialSchema, DeviceCredentialStatusSchema, DeviceDataEntrySchema, DeviceDiscoveryStatusSchema, DeviceEnrollProofSchema, ExposeInputSchema as DeviceExportExposeInputSchema, DeviceExportStatusSchema, UnexposeInputSchema as DeviceExportUnexposeInputSchema, DeviceFeature, DeviceHistoryKindSchema, DeviceHistoryOrphanDeleteRefusalSchema, DeviceHistoryOrphanReasonSchema, DeviceHistoryProducerKindSchema, DeviceHistoryRefusalReasonSchema, DeviceHistoryResolutionSchema, DeviceHistoryStatusSchema, DeviceHistorySubjectSchema, DeviceInfoSchema, DeviceModelChoiceSchema, DeviceNetworkStatsSchema, DevicePlatformSchema, DeviceProofInputSchema, DeviceRecommendationSchema, DeviceRefusalReasonSchema, DeviceRefusalSchema, DeviceRemovedInputSchema, DeviceRemovedResultSchema, DeviceRestoreRetryScheduler, DeviceRole, DeviceRuntimeState, DeviceSelectorSchema, DeviceSignaturePurposeSchema, DeviceStatusSchema, DeviceTombstoneSchema, DeviceType, DiagnosticIdSchema, DiagnosticWindowPatchSchema, DiagnosticWindowSchema, DiscoveredChildDeviceSchema, DiscoveredChildStatusSchema, DiscoveredDeviceSchema, DiscoveredTargetSchema, DishwasherAccessSchema, DishwasherAvailabilitySchema, DishwasherOperationStateSchema, DishwasherOptionDescriptorSchema, DishwasherOptionsSchema, DishwasherProgramSchema, DishwasherStateSchema, DishwasherStatusSchema, DishwasherValueSchema, DiskReconcileJobSchema, DisposerChain, DoorbellPressEventSchema, DoorbellStatusSchema, EMBEDDING_MODEL_FAILED, EMBEDDING_REQUIREMENTS_FAILED, EMBEDDING_REQUIREMENTS_UNAVAILABLE, ESTIMATE_COMPUTE_RATIO_MAX, ESTIMATE_COMPUTE_RATIO_MIN, EVENTFUL_CAP_NAMES, EVENT_DENSITY_BATCH_MAX, EVENT_KIND_BY_CAP, EVENT_KIND_LABELS, EVENT_KIND_LABEL_KEYS, EVENT_OWNER_TYPES, EVENT_PAD_MS, EVENT_TAXONOMY, EXPORT_DENSE_MAX_RANGES, EXPRESSION_BUILTINS, EXPRESSION_BUILTIN_NAMES, EXPRESSION_COMPILE_CACHE_CAPACITY, EXPRESSION_IDENTIFIER_RE, EXPRESSION_INJECTED_NOW, EXPRESSION_OUTPUTS, EXTENSION_HOST_DEVICE_TYPES, EXTENSION_SLOTS, EXTENSION_SLOT_IDS, EXTENSION_SLOT_LISTING_METHOD, EXTENSION_SLOT_REF_SEPARATOR, EffectiveDeviceShareSchema, EffectiveNodeShareSchema, EffectiveSharesSchema, EffectiveTuningSchema, EgressEncodeSchema, EgressRateControlSchema, EgressTranscodeRequestSchema, EgressTranscodeSchema, ElementConfigStore, EmbeddingFailedModelSchema, EmbeddingFailedRequirementSchema, EmbeddingInfoSchema, EmbeddingRefusalCodeSchema, EmbeddingResultSchema, EmbeddingTowerSchema, EncodeProfileSchema, EnrichedWidgetMetadataSchema, EnrollSelfInputSchema, EntryDescriptorSchema, EntryKindInfoSchema, EntryViewSchema, EnumSensorDateTimeFormatSchema, EnumSensorStatusSchema, ErrorCodeSchema, ErrorI18nPayloadSchema, EventCategory, EventDensityBucketSchema, EventDensityForDeviceSchema, EventEmitterStatusSchema, EventFireSchema, EventKindCategorySchema, EventKindDescriptorSchema, EventKindIconSchema, EventKindSchema, EventKindsForDeviceSchema, EventMediaArtifactSchema, EventMediaCoverageSchema, EventMediaKindSchema, EventMediaProductionSchema, EventOwnerTypeSchema, EventSourceType, ExportBytesSchema, ExportClipSubjectSchema, ExportDenseRangeSchema, ExportDenseSchema, ExportDownloadSchema, ExportFootageSubjectSchema, ExportOptionsSchema, ExportRecordSchema, ExportSetupFieldSchema, ExportSetupSchema, ExportSpeedSchema, ExportStateSchema, ExportSubjectSchema, ExportTimelapseSchema, ExposedDeviceSchema, ExposureModeSchema, ExpressionBindingSourceSchema, ExpressionEvalError, ExpressionFieldBindingSchema, ExpressionGlobalBindingSchema, ExpressionHelperSpecSchema, ExpressionLiteralBindingSchema, ExpressionParseError, ExpressionSourceSchema, ExtensionCandidateSchema, ExtensionCandidatesSchema, ExtensionSetResultSchema, ExtensionSetSlotInputSchema, ExtensionSlotActivationSchema, ExtensionSlotIdSchema, ExtensionSlotRefInputSchema, ExtensionSlotRowSchema, ExtensionSlotSourceSchema, ExtensionSlotStateSchema, ExtensionSlotUnreachableSchema, ExtensionSlotValueSchema, ExtensionSourceAvailabilitySchema, ExtensionSourceHealthSchema, ExtensionSourceSchema, ExternalIdentityKeySchema, ExternalIdentitySchema, FACE_RESCORE_INTERVAL_FIELD, FACE_RESCORE_INTERVAL_KEY, FACE_RESCORE_INTERVAL_MIN_RUNNING, FACE_RESCORE_SECTION_ID, FAN_OUT_CONCURRENCY, FEEDER_EXAMPLE_ADDON_ID, FEEDER_EXAMPLE_HA_DEVICE_ID, FFMPEG_PATH_ENV, FIRST_LEVEL_MACRO_CLASSES, FULL_IMAGE_BBOX, FailureContributionSchema, FailureCounters, FailureReasonCountSchema, FanControlStatusSchema, FanDirectionSchema, FeatureManifestSchema, FeatureProbeStatusSchema, FieldClaimModeSchema, FieldClaimSchema, FilterRequiredError, FloodStatusSchema, Fmp4BoxSplitter, ForeignSecretMarkerError, FrameHandleSchema, FrameInputSchema, FrameLazyCountersSchema, FrameLazyMetricsSchema, G711_SCALE_CORRECTION_DB, GROUP_TEMPLATES, GROUP_TEMPLATE_IDS, GasStatusSchema, GetLoggingSettingsInputSchema, GetStreamWithCodecInputSchema, GlobalMetricsSchema, GridLayoutPatchSchema, GridLayoutViewSchema, GroupActiveSchema, GroupCommandResultSchema, GroupCommandsSchema, GroupHelperSpecSchema, GroupStatusSchema, GroupTemplateIdSchema, HAP_AUDIO_BASE, HAP_AUDIO_BITRATE_KBPS, HAP_AUDIO_VBV_KBITS, HAP_KEYFRAME_INTERVAL_SEC, HF_BASE_URL, HF_REPO, HISTORY_BUCKET_MS, HISTORY_CATALOG, HISTORY_DEFAULT_MIN_INTERVAL_MS, HISTORY_FAST_MS, HISTORY_ITEM_CATALOG, HISTORY_NONE_CAPS, HISTORY_SLOW_MS, HISTORY_TIERS, HISTORY_UNIT_LABELS, HOURS_PER_DAY, HOUR_MS, HUB_ADDRESS_ROLES, HUB_MDNS_QUERY_NAME, HUB_MDNS_ROLE, HUB_MDNS_SERVICE_TYPE, HUB_MDNS_TXT_KEYS, HUB_VIEWER_MOUNT, HWACCEL_OPTIONS, HardwareClassIdSchema, HealthStatusSchema, HeatingValveStatusSchema, HelperMemberSchema, HelperSpecSchema, HfModelResolutionSchema, HistoryPointSchema, HistoryResolutionEnum, HttpsLeafInfoSchema, HubAddressRoleSchema, HumidifierStatusSchema, HumiditySensorStatusSchema, HvacModeSchema, ICON_CATALOG_SOURCE, ICON_CATEGORIES, ICON_ENTRIES, ICON_KEYS, ICON_VIEWER_MODULES, INFERENCE_DEVICE_EXCLUSION_REASONS, INITIAL_PULSE, INITIAL_SPAN, INTEGRAL_OUTPUTS, INVERTIBLE_CAPS, IconKeySchema, ImageContractSchema, ImageContractStateSchema, ImageRotateSchema, ImageSettingsOptionsSchema, ImageSettingsPatchSchema, ImageSettingsStatusSchema, ImageStatusSchema, ImportModelBundleInputSchema, ImportModelBundleResultSchema, InferenceDeviceExclusionReasonSchema, IngestOwnerSchema, InstalledPackageSchema, IntegralHelperSpecSchema, IntegrationLiteSchema, IntegrationSessionReporter, IntegrationWithStateSchema, IntercomAbilitySchema, IntercomStatusSchema, InvalidRecordError, KEYCHAIN_MAX_REFS_PER_CALL, KEYCHAIN_RESET_CONFIRMATION, KEYCHAIN_RESET_TRIGGER_ACTOR, KNOWN_CAP_NAMES, KWH_PER_WATT_MS, KeptReasonSchema, KeyEventSchema, KeychainAdminSecretSchema, KeychainAuditActionSchema, KeychainAuditEntrySchema, KeychainKeySourceKindSchema, KeychainKeySourceSchema, KeychainResetRecordSchema, KeychainResolveEntrySchema, KeychainResolveResultSchema, KeychainSecretMetaSchema, KeychainSecretUsageSchema, KeychainStateSchema, KeychainStatusSchema, KeychainUnavailableReasonSchema, KeychainWriteRefusedError, LABEL_SUPPLY_MACRO, LABEL_SUPPLY_STEP_IDS, LABEL_SUPPLY_VOCABULARIES, LEGACY_READ_ONLY_CONFIG_KEY, LIGHT_SHARED_CAPS, LINKED_DEVICES_SLOT, LINKED_LABEL_STEP_PREFIX, LLM_PROFILE_KIND_PATTERN, LOAD_CONTRIBUTION_ATTRIBUTIONS, LOAD_CONTRIBUTION_ROLES, LOCATION_DESCRIPTION_MAX, LOCATION_ICON_FALLBACK, LOG_CHANNEL_TICK_MS, LOG_LEVEL_RANK, LTS_SCOPE_CLASS_SEPARATOR, LabelAttributionSchema, LabelDefinitionSchema, LabelTierSchema, LatencySourceSchema, LawnMowerActivitySchema, LawnMowerControlStatusSchema, LedgerWalkDeviceReportSchema, LedgerWalkInputSchema, LedgerWalkRefusalSchema, LedgerWalkReportSchema, LedgerWalkSkipCountsSchema, LedgerWalkSkipReasonSchema, LegacyStorageLocationDefaultSchema, LinkedDeviceSchema, LinkedDevicesModeSchema, LinkedDevicesSlotValueSchema, ListNodeBenchmarkResultsInputSchema, ListTrackRelationsInputSchema, ListTrackRelationsResultSchema, LiveViewerCountSchema, LlmDefaultSchema, LlmDefaultSelectorSchema, LlmDownloadProgressSchema, LlmErrorCodeSchema, LlmGenerateBaseInputSchema, LlmGenerateErrSchema, LlmGenerateOkSchema, LlmGenerateResultSchema, LlmImageSchema, LlmListModelsErrorCodeSchema, LlmListModelsInputSchema, LlmListModelsResultSchema, LlmModelFeaturesSchema, LlmModelInfoSchema, LlmNodeModelSchema, LlmProfileFieldSchema, LlmProfileKindDescriptorSchema, LlmProfileKindSchema, LlmProfileSchema, LlmProviderConfigSchema, LlmProviderWidgetSchema, LlmRefusalSourceSchema, LlmRetryPolicySchema, LlmRuntimeAppleCompleteInputSchema, LlmRuntimeCancelInputSchema, LlmRuntimeCompleteInputSchema, LlmRuntimeDiskUsageSchema, LlmRuntimeNodeSchema, LlmRuntimeStatusSchema, LlmTimeoutDefaults, LlmUsageRollupSchema, LlmUsageSchema, LoadBalancingSharesInputSchema, LoadContributionSchema, LocateSegmentResultSchema, LocationDescriptionAssignmentSchema, LocationIconAssignmentSchema, LocationStatSchema, LockControlStatusSchema, LockStateSchema, LogChannelApplyResultSchema, LogChannelDescriptorSchema, LogChannelGate, LogChannelLevelSchema, LogChannelRegistry, LogChannelWindowPatchSchema, LogChannelWindowSchema, LogChannelWindowStateSchema, LogEntrySchema, LogLevelSchema, LogReadCapabilitiesSchema, LogReadEntrySchema, LogReadQuerySchema, LogReadResultSchema, LogStreamEntrySchema, LoggingEffectiveSchema, LoggingExplicitSchema, LoggingLevelLayerSchema, LoggingLevelSourceSchema, LoggingScopeKindSchema, LoggingSettingsPatchSchema, LoggingSettingsStateSchema, LoginMethodContributionSchema, LoginStageEnum, LtsBucketSchema, MACRO_LABELS, MASK_EMITTING_POSTPROCESSORS, MASK_SUPPLY_STEP_IDS, MAX_ARCHIVED_DEBUG_NOTES, MAX_BIRTH_DECISION_RECORDS, MAX_BIRTH_LATENCY_PROXY_MS, MAX_CAMERA_SENSORS, MAX_CLIP_EVENT_IDS, MAX_CLIP_LABELS, MAX_COMPOSITION_CODE_LENGTH, MAX_COMPOSITION_FEATURES, MAX_COMPOSITION_FIELDS_PER_FEATURE, MAX_COMPOSITION_ITEMS, 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, MAX_HELPER_MEMBERS, MAX_KEYS, MAX_REASONS_PER_KEY, MAX_REQUEUED_BUCKETS_PER_SERIES, MAX_SENSOR_TRIGGER_DEVICES, MAX_TRACK_DEBUG_NOTE_LEN, MAX_TRACK_PURITIES, MAX_TRACK_RELATIONS, MEDIA_OWNER_TYPES, MEDIA_PRESENCE_OWNER_KINDS, METHOD_ACCESS_MAP, METHOD_DEVICE_SELECTORS, MINUTES_PER_DAY, MINUTE_MS, MIN_CUSTOM_MINUTES, MIN_SCRUBBED_LENGTH, MIN_SESSIONS_PER_DEVICE_RANGE, MODEL_FORMATS, MODEL_HOSTING, MODEL_PROVIDER_IDS, MOTION_CLOSE_AFTER_MS, MOTION_CROP_DISPATCH_KEY, MOTION_CROP_MAX_REGIONS, MOTION_CROP_MOTION_PAD, MOTION_CROP_TRACKED_PAD, MOTION_SOURCE_LABELS, MOTION_SPAN_TIMEOUT_MS, MOTION_TRIGGER_FEATURE, ManagedModelCatalogEntrySchema, ManagedModelExtraFileSchema, ManagedModelRefSchema, ManagedRuntimeConfigSchema, MaskGridDimsSchema, MaskGridShapeSchema, MaskLineShapeSchema, MaskPointSchema, MaskPolygonShapeSchema, MaskPolygonVerticesSchema, MaskRectShapeSchema, MaskShapeKindSchema, MaskShapeSchema, MediaFileInfoSchema, MediaFileKindEnum, MediaFileRefSchema, MediaFileSchema, MediaPlayerRepeatSchema, MediaPlayerStateSchema, MediaPlayerStatusSchema, MediaPresenceOwnerKindSchema, MediaRelocateModeSchema, MeshLeafInfoSchema, MeshPeerSchema, MeshStatusSchema, MeterStatusSchema, MethodAccessSchema, MigrateDeviceResultSchema, MigrateSwitchOutcomeSchema, MigrateSwitchReportSchema, ModelBundleFileSchema, ModelCatalogEntrySchema, ModelConvertInputSchema, ModelConvertMetadataSchema, ModelDistributeInputSchema, ModelDistributeResultSchema, ModelExtraFileSchema, ModelFormatEntrySchema, ModelFormatPrecisionSchema, ModelFormatsSchema, ModelLicenseSchema, ModelOnDiskStateSchema, ModelPinChangeSchema, ModelProviderIdSchema, ModelSubstitutionSchema, ModelVariantGroupSchema, MotionAnalysisResultSchema, MotionEventSchema, MotionOnMotionChangedDataSchema, MotionRegionSchema, MotionSourceEnum, MotionSourcesSchema, MotionStatusSchema, MotionTriggerRuntimeStateSchema, MotionTriggerStatusSchema, MotionTriggeredBySchema, MotionZoneOptionsSchema, MotionZonePatchSchema, MotionZoneRegionSchema, MotionZoneStatusSchema, BrokerInfoSchema$1 as MqttBrokerInfoSchema, StatusSchema as MqttBrokerStatusSchema, MutationFilterSchema, N100_IGPU_CLOCK_MHZ, N100_IGPU_EU, 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_SCENE_BUDGET_FIELD, NATIVE_LEASE_SCENE_BUDGET_KEY, NATIVE_LEASE_SECTION_ID, NATIVE_LEASE_TILE_BUDGET_FIELD, NATIVE_LEASE_TILE_BUDGET_KEY, NAVIGATION_ACTION_CATALOG, NAVIGATION_LIGHT_LEVEL_MAX, NAVIGATION_LIGHT_LEVEL_MIN, NC_ALARM_CONTROLLABLE_CAPS, NC_ALARM_DEFAULT_PROFILE_ID, NC_ALARM_DEFAULT_PROFILE_NAME, NC_ALARM_DEFAULT_TRIGGERED_DURATION_SEC, NC_ALARM_DELAY_FIELDS, NC_ALARM_DELAY_MAX_SEC, NC_ALARM_NONBLOCKING_MAX, NC_ALARM_NOTIFY_FIELDS, NC_ALARM_OPENING_EVENT_KINDS, NC_ALARM_SENSORS_MAX, NC_ALARM_SYSTEM_DEFAULT_DELAYS, NC_ALARM_SYSTEM_EVENT_KINDS, NC_ALARM_TRIGGERED_MAX_SEC, NC_AUDIO_CONFIRM_HITS_DEFAULT, NC_AUDIO_CONFIRM_HITS_MAX, NC_AUDIO_CONFIRM_HITS_MIN, NC_AUDIO_CONFIRM_WINDOW_MAX_SEC, NC_AUDIO_CONFIRM_WINDOW_MIN_SEC, NC_AUDIO_CONFIRM_WINDOW_SEC_DEFAULT, 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_BATTERY_CONSUMABLE_SYSTEM_EVENT_KINDS, NC_CAMERA_SCOPE_CAP_NAME, NC_CLIP_POST_ROLL_DEFAULT_SEC, NC_CLIP_PRE_ROLL_DEFAULT_SEC, NC_CLIP_RETENTION_MAX_SEC, 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_CONSUMABLE_LOW_PERCENT_DEFAULT, NC_CONSUMABLE_LOW_PERCENT_MAX, NC_CONSUMABLE_SYSTEM_EVENT_KINDS, NC_DEFAULT_SNOOZE_MINUTES, NC_GROUPING_DEFAULT_SEC, NC_GROUPING_MAX_SEC, NC_GROUPING_MIN_SEC, NC_HISTORY_LIMIT_DEFAULT, NC_HISTORY_LIMIT_MAX, NC_LEGACY_SYSTEM_EVENT_KINDS, NC_MAX_PER_TRACK_IMMEDIATE, NC_MEDIA_IMAGE_MODES, NC_OCCUPANCY_DEFAULTS, NC_RULE_CLEARABLE_KEYS, NC_RULE_EDITOR_SECTION_ORDER, NC_RULE_KIND_SPECS, NC_RULE_RETIRED_CLEAR_KEYS, NC_RULE_SECTIONS, NC_SENSOR_RAISED_FIELD_BY_KIND, NC_SENSOR_TRANSITION_KINDS, NC_SENSOR_TRANSITION_NEVER_FIRES_WARNING, NC_SENSOR_TRANSITION_UNSUPPORTED_REASON, NC_SERVER_PACKAGE_NAME, NC_SNOOZE_MAX_MINUTES, NC_STATE_SUMMARY_SECTION_IDS, NC_SYSTEM_DELIVERY, NC_SYSTEM_EVENT_CLASS_SPECS, NC_SYSTEM_EVENT_CONDITION_FILTER_KEYS, NC_SYSTEM_EVENT_FAMILIES, NC_SYSTEM_EVENT_FAMILY, NC_SYSTEM_EVENT_FAMILY_FILTERS, NC_SYSTEM_EVENT_FILTER_KEYS, NC_SYSTEM_EVENT_KIND_GROUP_SPECS, NC_SYSTEM_EVENT_SUMMARY_FAMILIES, NC_SYSTEM_RULE_KINDS, NC_TAXONOMY, NC_TEMPLATE_HELD_BACK_SYSTEM_EVENT_KINDS, NC_TEMPLATE_VARS, NC_UPDATE_EVENT_PACKAGE_NAMES, NETWORK_LINK_TYPES, NETWORK_LINK_UNKNOWN, NODE_BENCHMARK_DEFAULTS, NODE_COLOR_IDS, NO_MEASURED_CAPACITY, NUMERIC_AGGREGATES, NativeCropBboxSchema, NativeCropRefSchema, NativeCropResultSchema, NativeDetectionSchema, NativeLeaseAdmissionSchema, NativeLeaseSettingsSchema, NativeObjectClassEnum, NativeObjectDetectionOptionsSchema, NativeObjectDetectionRuntimeStateSchema, NativeObjectDetectionSettingsPatchSchema, NativeObjectDetectionStatusSchema, NativeObjectGeometryEnum, NavigationActionEntrySchema, NavigationActionIdSchema, NavigationEntryKindSchema, NavigationFeaturesSchema, NavigationLightModeSchema, NavigationModeSchema, NavigationMoveCommandSchema, NavigationPointSchema, NavigationRuntimeStateSchema, NavigationStatusSchema, NcActionBindingSchema, NcAlarmBlockingEditSchema, NcAlarmBlockingSchema, NcAlarmConfigSchema, NcAlarmCreateProfileInputSchema, NcAlarmModeCoverageSchema, NcAlarmModeDelaysEditSchema, NcAlarmModeDelaysSchema, NcAlarmModeDeviceListSchema, NcAlarmNonBlockingEditSchema, NcAlarmNonBlockingSchema, NcAlarmPostTriggeredActionSchema, NcAlarmProfileIdInputSchema, NcAlarmProfileMetaSchema, NcAlarmProfilesViewSchema, NcAlarmRenameProfileInputSchema, NcAlarmSecureOnArmEditSchema, NcAlarmSecureOnArmOffSchema, NcAlarmSensorReadingSchema, NcAlarmSensorStateSchema, NcAlarmSensorsInputSchema, NcAlarmSensorsSchema, NcAlarmSettingsPatchSchema, NcAlarmSettingsSchema, NcAlarmSkipReasonSchema, NcAlarmSkippedDeviceSchema, NcAudioConditionSchema, NcClipRetentionAskSchema, NcClipRetentionPlanSchema, NcConditionDescriptorSchema, NcConditionsSchema, NcConfirmExpectSchema, NcConfirmSchema, NcCrossingSchema, NcDeliverySchema, NcDeviceStateConditionSchema, NcHistoryEntrySchema, NcHistoryFilterSchema, NcHistoryRecordKindSchema, NcHistoryStatusSchema, NcHistorySubjectSchema, NcHookBindingsSchema, NcLegacyRuleActionSequenceSchema, NcLinkedCameraModeSchema, NcMediaFrameSchema, NcMediaImageSchema, NcMediaPolicySchema, NcOccupancyConditionSchema, NcPlateMatcherSchema, NcRuleActionSchema, NcRuleActionSequenceSchema, NcRuleActionsSchema, NcRuleClearableKeySchema, NcRuleInputSchema, NcRuleKindSchema, NcRuleLastRunSchema, NcRuleLastRunsSchema, NcRuleNotificationButtonSchema, NcRulePatchSchema, NcRuleSchema, NcRuleTargetSchema, NcRuleUpdateInputSchema, NcSceneConditionSchema, NcScheduleSchema, NcScheduleWindowSchema, NcSensorTransitionSchema, NcSharedSequenceInputSchema, NcSharedSequenceSchema, NcSnoozeInputSchema, NcSnoozeSchema, NcSnoozeScopeSchema, NcSnoozeSuppressedSchema, NcStateSummaryPreviewRowSchema, NcStateSummaryPreviewSchema, NcStateSummaryPreviewSectionSchema, NcStateSummarySectionIdSchema, NcStateSummarySplitSchema, NcSystemEventConditionSchema, NcSystemEventDeliveryModeSchema, NcSystemEventDeliverySchema, NcSystemEventKindSchema, NcTaxonomyEntrySchema, NcTaxonomySchema, NcTemplateFamilySchema, NcTemplateFieldSchema, NcTemplatePreviewInputSchema, NcTemplatePreviewSchema, NcTemplateVarContextSchema, NcTemplateVarDescriptorSchema, NcTemplateVarGroupSchema, NcTemplateVarKindSchema, NcTestResultSchema, NcThrottleGranularitySchema, NcThrottleSchema, NcZoneConditionSchema, NetworkAccessStatusSchema, NetworkAddressSchema, NetworkEndpointSchema, NetworkLinkStatusSchema, NetworkTunnelStartedDataSchema, NoCallerError, NodeBenchCellSchema, NodeBenchClipSchema, NodeBenchDeviceCellSchema, NodeBenchFingerprintSchema, NodeBenchLimitSchema, NodeBenchPipelineCellSchema, NodeBenchProgressSchema, NodeBenchRampStepSchema, NodeBenchRunnerInputSchema, NodeBenchRunnerStateSchema, NodeBenchRunnerStatusSchema, NodeBenchmarkCandidatesSchema, NodeBenchmarkDevicePlanSchema, NodeBenchmarkEndReasonSchema, NodeBenchmarkManifestSchema, NodeBenchmarkMovingCameraSchema, NodeBenchmarkPhaseSchema, NodeBenchmarkPlanSchema, NodeBenchmarkPreflightSchema, NodeBenchmarkRefusalKindSchema, NodeBenchmarkRefusalSchema, NodeBenchmarkResultSchema, NodeBenchmarkResultViewSchema, NodeBenchmarkRunSchema, NodeBenchmarkStateSchema, NodeBenchmarkStatusSchema, NodeBenchmarkStayingCameraSchema, NodeColorIdSchema, NodeDeviceChangeSchema, NodeDirectoryEntrySchema, NodeDirectorySchema, NodeHttpsStateSchema, NodeRecommendationSchema, NotificationActionIconSchema, NotificationActionSchema, NotificationFormatSchema, NotificationSchema, NotifierStatusSchema, NumericSensorStatusSchema, OAUTH_LANDING_PATH, OAUTH_LANDING_REASONS, OBJECT_DETECTION_STEP_ID, OPERATOR_WRITTEN_STALE_MS, OPS_LOG_DEFAULT_LIMIT, OPS_LOG_RING_DEFAULT_MAX, OVERFLOW_REASON, OVERLAY_LAYERS, OWNER_ONLY_EVENT_CATEGORIES, OauthIntegrationDescriptorSchema, ObjectEventSchema, OccupancyBurstRefusalSchema, OccupancyLookAnswerSchema, OccupancyLookRefusalSchema, OccupancyLookRequestSchema, OidcConnectionSchema, OidcConnectionUpdateInputSchema, OnboardFieldSupportSchema, OnboardRecordTrackSchema, OnboardScheduleSupportSchema, OnboardStorageSchema, OnboardStorageVolumeSchema, OpsLogDomainSchema, OpsLogEntrySchema, OpsLogOpSchema, OpsLogQueryInputSchema, OpsLogReasonSchema, OrchestratorMetricsSchema, OrphanDeviceDataSchema, OsdNamedTemplateSchema, OsdOverlayKindEnum, OsdOverlayPatchSchema, OsdOverlaySchema, OsdPositionEnum, OsdRenderOutcomeEnum, OsdRenderResultSchema, OsdSlotBindingSchema, OsdSlotViewSchema, OsdSourceOptionSchema, OsdSourceSchema, OsdSourceValueTypeEnum, OsdStatusSchema, OsdTemplateBindingSchema, OsdTemplateFormatSchema, OsdTemplatePickSchema, OsdTemplateTokenKindSchema, OverrideDraftSchema, PALETTE_BACKGROUNDS, PALETTE_ENTRY_IDS, PALETTE_MIN_CONTRAST, PALETTE_MIN_DELTA_E, PALETTE_MIN_DELTA_E_MARK, PALETTE_PRESET_IDS, PEER_BYTES_CHUNK_BYTES, PEER_BYTES_MAX_OUTSTANDING, PEER_BYTES_STALL_MS, PEER_BYTES_TICKET_TTL_MS, PENDING_BLOCK_ID, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, PHOENIX_780M_CU, PIPELINE_ANALYTICS_CAP_NAME, PIPELINE_FLOW_CAPABILITY_NAMES, PIPELINE_OWNER_CAPABILITY_NAMES, PIPELINE_RAMP, PLUG_APPLIANCE_TYPES, PLUS_CATALOG_CLASS_FLOORS, PLUS_CATALOG_STOCK_CLASS_FLOORS, PLUS_CATALOG_TO_MACRO, PLUS_CATALOG_UNMAPPED_LABELS, PREFERENCES_MAX_DEVICE_ID_LENGTH, PREFERENCES_MAX_NAMESPACES, PREFERENCES_MAX_VALUE_BYTES, PREFERENCES_NAMESPACE_PATTERN, PREFERENCES_SELF_SCOPE, PRIVACY_MASK_CAP_NAME, PROVIDER_KIND_CAP_NAMES, PROVIDER_PIN_FIELD, PUBLIC_ENDPOINT_HTTP_REASON, PYTHON_SCRIPT, PackageInstallationSchema, PackageInstallationsSchema, PackageLlmVerdictSchema, PackageUpdateSchema, PackageVersionInfoSchema, PaletteRejectedError, ParkRefusalSchema, ParkTrackFrameResultSchema, ParkedFrameKindSchema, ParkedTrackFrameSchema, PasskeyLoginMethodSchema, PasskeySummarySchema, PcmSampleFormatSchema, PeerBytesTicketSchema, PerScopeBreakdownSchema, PetFeederStatusSchema, PickStreamPreferencesSchema, PickStreamRequirementsSchema, PickedCamStreamSchema, PipelineAssignmentSchema, PipelineDefaultStepSchema, PipelineEngineChoiceSchema, PipelineModelFormatStatusSchema, PipelineRunResultBridge, PipelineStepInputSchema, PipelineValidationIssueSchema, PipelineValidationResultSchema, PlaceholderReasonSchema, PlacementDeviceStatsSchema, PlacementNodeStatsSchema, PlacementStatsInputSchema, PlacementStatsSchema, PlaintextSecretError, PolygonPointSchema, PoolMemoryWatchdog, PowerMeterStatusSchema, PrecisionGopsSchema, PreferenceDeviceIdSchema, PreferenceNamespaceSchema, PreferenceRowSchema, PreferenceValueSchema, PreferencesChangedSinceInputSchema, PreferencesChangedSinceOutputSchema, PreferencesDeleteInputSchema, PreferencesDeleteOutputSchema, PreferencesGetInputSchema, PreferencesGetOutputSchema, PreferencesPutInputSchema, PreferencesPutOutputSchema, PreferencesSelfScopeSchema, PresenceStatusSchema, PressureSensorStatusSchema, PrivacyMaskOptionsSchema, PrivacyMaskPatchSchema, PrivacyMaskRegionSchema, PrivacyMaskShapeSchema, PrivacyMaskStatusSchema, ProbeTargetConfigResultSchema, ProfileRtspEntrySchema, ProfileSlotSchema, ProfileSlotStatusSchema, ProviderJobStateSchema, ProviderJobStatusSchema, ProviderMotionDataSchema, ProviderStatusSchema, PtzAutotrackRuntimeStateSchema, PtzAutotrackSettingsSchema, PtzAutotrackStatusSchema, PtzAutotrackTargetOptionSchema, PtzHomePresetSchema, PtzHomeReturnSchema, PtzMoveCommandSchema, PtzOptionsSchema, PtzPositionSchema, PtzPresetFunctionSchema, PtzPresetSchema, PtzStatusSchema, QUANTITY_BASE, QueryFilterSchema, RATE_CONTROL_RELAXED, RATE_CONTROL_TIGHT, REACHABILITY_FAILURES_TO_OFFLINE, REACHABILITY_POLL_INTERVAL_MS, REACHABILITY_PROBE_TIMEOUT_MS, RECALL_TIE, RECOGNITION_TYPES, RECORDING_AUDIO_TRIGGER_OFFERED_DBFS, RECORDING_EXPORT_MAX_READ_BYTES, RECORDING_SOURCE_CAMSTACK, RECORDING_SOURCE_CAMSTACK_ADDON, RECORDING_TIMELINE_BATCH_MAX, RECORDS_ERROR_CODES, RECORD_BATCH_MAX, RECORD_BATCH_MAX_BYTES, RECORD_CLASSES, RECORD_DATABASES, RECORD_DEFAULT_MAX_DATA_BYTES, RECORD_DELETE_BATCH, RECORD_ID_MAX_LENGTH, RECORD_MAX_DATA_BYTES, RECORD_MAX_INDEXES, RECORD_MAX_INDEX_FIELDS, RECORD_QUERY_MAX, RECORD_SECRET_COLLECTION_PREFIX, RECORD_SETTINGS_MAX_ROWS, RECORD_SWEEP_INTERVAL_MS, RECOVERY_CROP_MAX_SIDE_PX, RECOVERY_CROP_MIN_SIDE_PX, RECOVERY_CROP_PADDING_RATIO, RECOVERY_EDGE_MARGIN_PX, RECOVERY_FUSE_CONTAINMENT, RECOVERY_FUSE_IOU, RECOVERY_MAX_CROPS_PER_FRAME, RECOVERY_MAX_REGION_FRAME_FRACTION, RECOVERY_MIN_INTERVAL_MS, RECOVERY_MIN_UNCOVERED_FRACTION, RECOVERY_MOTION_MAX_AGE_MS, RECOVERY_VIEW_PX, REDACTED_SECRET, REFERENCE_COMPUTE, REFERENCE_MATCH_FRACTION, REMOVAL_RECONCILE_INTERVAL_MS, REMOVED_MODEL_IDS, REMOVE_LEAF, RESERVED_BINDING_NAMES, RESERVED_COLLECTION_SOURCES, RESET_PERIODS, RESTORED_CAP_NAMES, RETRAIN_REVIEW_ADJUSTED_IOU, RETRAIN_REVIEW_MATCH_IOU, RETRAIN_REVIEW_STATUSES, RETRAIN_REVISION_CONFLICT, REVALIDATE_AFTER_MS, ROLLING_SPANS, ROOM_EXAMPLE_MOTION_SOURCES, ROOM_EXAMPLE_TEMPERATURE_SOURCES, ROOM_OCCUPANCY_WINDOW_MS, ROOT_BUCKET_KEY, ROOT_CHILD_CONTAINMENT_MIN, ROOT_FACE_REFINE_INPUT_PX, ROOT_FACE_REFINE_SCALE, ROOT_SUPPLIABLE_STEP_IDS, RUNNING_POWER_START_DELAY_MS, RUNNING_POWER_STOP_DELAY_MS, RUNNING_POWER_THRESHOLD_WATTS, RUNNING_STATE_COLD, RUNTIME_DEFAULTS, RUNTIME_STATE_POLICY, RUNTIME_STATE_REFRESH_MISS_COOLDOWN_MS, RUNTIME_TO_FORMAT, RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, RawStateResultSchema, ReadGopBytesResultSchema, ReadSegmentBytesResultSchema, ReadWindowBytesResultSchema, ReadinessRegistry, ReadinessTimeoutError, ReadingQuantitySchema, RebuildObjectEmbeddingsRefusalSchema, RecentTracksPageSchema, RecentTracksQueryInput, RecommendationReasonSchema, RecordBodySchema, RecordFieldPathSchema, RecordIdSchema, RecordIndexSchema, RecordInputSchema, RecordKindDeclarationSchema, RecordKindNameSchema, RecordNotFoundError, RecordQueryInputSchema, RecordQueryResultSchema, RecordRetentionSchema, RecordSecretRefsSchema, RecordSecretUnavailableError, RecordTooLargeError, RecordTransactOpSchema, RecordTriggerSchema, RecordUniqueViolationError, RecordViewSchema, RecordWhereSchema, RecordWindowSchema, RecordingAvailabilityForDeviceSchema, RecordingAvailabilitySchema, RecordingBandAudioSchema, RecordingBandModeSchema, RecordingBandSchema, RecordingBandTriggersSchema, RecordingConfigSchema, RecordingDaysForDeviceSchema, RecordingDaysSchema, RecordingDeviceUsageSchema, RecordingLocationUsageSchema, RecordingManifestSchema, RecordingObjectTriggerClassSchema, RecordingOnboardOptionsSchema, RecordingOnboardPatchSchema, RecordingOnboardStatusSchema, RecordingPlaybackSchema, RecordingRangeSchema, RecordingReadSchema, RecordingRebalanceInputSchema, RecordingRebalanceMoveSchema, RecordingRebalancePlanSchema, RecordingRebalanceSkipReasonSchema, RecordingRebalanceSkipSchema, RecordingRetentionSchema, RecordingSignalRuntimeStateSchema, RecordingSignalStatusSchema, RecordingSourceAvailabilitySchema, RecordingSourceOptionsSchema, RecordingSourceSchema, RecordingStatusSchema, RecordingStorageModeSchema, RecordingStorageUsageSchema, RecordingTriggersSchema, RecordingWeekdaySchema, RecordsError, RedirectLoginMethodSchema, RelocatableMediaCountInputSchema, RelocatableMediaCountSchema, RelocateFootageClassSchema, RelocateFootageInputSchema, RelocateJobSchema, RelocateJobStateSchema, RelocateMediaInputSchema, RelocateResidueInputSchema, RelocateResidueSchema, RenderedAsSchema, RenewDeviceCertificateOutputSchema, RenewDeviceCertificateResultSchema, ReportMotionInputSchema, ReportedFailureContributionSchema, ReportedLoadContributionSchema, RequestCensusGroupSchema, RequestCensusProcedureSchema, RequestCensusSnapshotSchema, RequestCensusStatusSchema, RetrainAnnotationDraftSchema, RetrainAnnotationKindSchema, RetrainAnnotationSchema, RetrainAnnotationSourceSchema, RetrainArchiveResultSchema, RetrainArchiveTargetSchema, RetrainAssistProfileSchema, RetrainAssistResultSchema, RetrainAssistSubjectSchema, RetrainBoxReviewSchema, RetrainCollectionCreateResultSchema, RetrainCollectionRenameResultSchema, RetrainCollectionSchema, RetrainCopyRefusalSchema, RetrainCorpusFilterSchema, RetrainCorpusKpiCameraRowSchema, RetrainCorpusKpiSchema, RetrainCorpusPageFrameSchema, RetrainCorpusPageSchema, RetrainDatasetSelectionSchema, RetrainDatasetStatsSchema, RetrainDatasetVersionSchema, RetrainDismissedSchema, RetrainExportFilterSchema, RetrainExportLayoutSchema, RetrainFrameCandidateSchema, RetrainFrameListSchema, RetrainFrameOriginSchema, RetrainFrameReviewSchema, RetrainFrameSchema, RetrainFrameSelectionSchema, RetrainFrameWorkStateSchema, RetrainLlmAssistResultSchema, RetrainLlmProposalSchema, RetrainLlmReviewSchema, RetrainMacroClassSchema, RetrainOriginSchema, RetrainPipelineBoxSchema, RetrainReviewStatusSchema, RetrainStatusSchema, RetrainTrackSchema, RetrainTrainingCorpusResolveResultSchema, RetrainTrainingCorpusSelectionSchema, RetrainTransitionResultSchema, RevConflictError, RevokeOwnDeviceCertificateResultSchema, RingBuffer, RollingWindowSchema, RootStepSupplySchema, RtpSourceSchema, RtspRestreamEntrySchema, RunnerBootCheckSchema, RunnerCameraConfigSchema, RunnerCameraDeviceUIFields, RunnerFrameSourceSchema, RunnerInferenceDeviceSchema, RunnerJumpStepProvisioningSchema, RunnerLocalLoadSchema, RunnerLocalMetricsSchema, RunnerRefusalSchema, RunningStateSourceSchema, RunningStateStatusSchema, 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, SECRET_CLEAR, SECRET_META, SECRET_REF_SCHEME, SENSOR_FEATURES, SENSOR_MAP, SERIAL_CAPACITY_CAMERA_FPS, SERIES_KINDS, SERVER_NAME_MAX_LENGTH, SERVER_NAME_SETTING_KEY, SESSION_LOST_ALERT_CATEGORY, SESSION_PLACEMENT_SETTING_KEY, SHARE_AFFINITY_TOLERANCE_SESSIONS, SHARE_SOURCE_SETTING_KEY, SHARE_VIEW_KINDS, SHARE_VIEW_MAX_DEVICES, SINGLE_HUB_ADDRESS_ROLES, SOURCE_CAPS, SOURCE_CAP_ACTIVE_FIELD, SOURCE_CAP_CHANGED_AT_FIELD, SOURCE_DEVICE_TYPES, SOURCE_INFO_METADATA_KEY, SSO_STATE_COOKIE, SSO_STATE_COOKIE_MAX_AGE_SEC, STATE_LABELS, STATE_LABEL_KEYS, STATIONARY_OVERLAY_STYLE, STATISTIC_STATS, STORAGE_ACCESS_FALLBACK, STORAGE_BYTES_PER_GB, STORAGE_LOCATION_MODES, STREAM_PROFILE_META, STREAM_QUALITY_LABELS, SUBJECT_PATH_DWELL_EPS, SUBJECT_PATH_FULL_FRAME_COVERAGE, SUBJECT_PATH_MAX_POINTS, SUB_DETECTION_TYPES, SYSTEM_CAP_NAMES, SYSTEM_SCOPE_DEVICE_METHODS, SceneCheckSchema, SceneConditionSchema, SceneConfirmSchema, SceneMonitorSchema, SceneMonitorStateSchema, SceneMonitorStatusForDeviceSchema, SceneMonitorStatusSchema, SceneReferenceSchema, SceneUnavailableSchema, SceneUncoveredPolicySchema, SceneVerdictSchema, ScopedTokenSchema, ScoredObjectEventSchema, ScriptRunnerStatusSchema, SearchResultSchema, SendEmailInputSchema, SendEmailResultSchema, SendResultSchema, SensorEventSchema, ServerBootModeSchema, ServerNameInfoSchema, ServerNameSchema, ServerPackageStatusSchema, ServerRollbackInfoSchema, ServerUpdateActionResultSchema, ServerUpdateCheckResultSchema, ServerUpdateOutcomeSchema, ServerUpdateStateSchema, SessionHealthTracker, SessionPlacementPolicySchema, SessionTriggerSchema, SetCameraSensorsInputSchema, SetLoggingSettingsInputSchema, SetShareSourceInputSchema, SetSiteLocationInputSchema, SetTrackPurityInputSchema, SetTrackPurityResultSchema, SetTrackRelationInputSchema, SettingsPatchSchema, SettingsRecordSchema, SettingsSchemaWithValuesSchema, SettingsUpdateResultSchema, ShareSourceSchema, ShareViewGrantSchema, ShareViewScopeSchema, ShareWeightsSchema, SiteLocationSchema, SiteLocationSourceSchema, SiteLocationStatusSchema, SiteZoneSchema, SmokeStatusSchema, SmtpStatusSchema, SnapshotImageSchema, SourceInfoSchema, SpatialDetectionSchema, SsoBridgeClaimsSchema, StaleDevicePinSchema, StartEmbeddedInputSchema, StartEnrollmentOutputSchema, StationaryObjectSchema, StatisticHelperSpecSchema, StatisticWindowSchema, AbortUploadInputSchema as StorageAbortUploadInputSchema, StorageAccessSchema, BeginDownloadInputSchema as StorageBeginDownloadInputSchema, BeginDownloadResultSchema as StorageBeginDownloadResultSchema, BeginUploadInputSchema as StorageBeginUploadInputSchema, BeginUploadResultSchema as StorageBeginUploadResultSchema, StorageCleanupInputSchema, StorageCleanupJobSchema, StorageCleanupPhaseSchema, StorageCleanupStatusInputSchema, StorageDrainProgressSchema, EndDownloadInputSchema as StorageEndDownloadInputSchema, StorageEvictionPolicySchema, FinalizeUploadInputSchema as StorageFinalizeUploadInputSchema, StorageKindSchema, StorageLocationDeclarationSchema, StorageLocationModeSchema, StorageLocationRefSchema, StorageLocationSchema, StorageLocationTypeSchema, StorageMigrationClassSchema, StorageMigrationDestinationsSchema, StorageMigrationDrainInputSchema, StorageMigrationFindingCodeSchema, StorageMigrationFindingSchema, StorageMigrationFootageMoveInputSchema, StorageMigrationInputSchema, StorageMigrationJobSchema, StorageMigrationLaneSchema, StorageMigrationLeaseInputSchema, StorageMigrationMediaMoveInputSchema, StorageMigrationModeSchema, StorageMigrationMoveProgressSchema, StorageMigrationMoveSchema, StorageMigrationMoverSchema, StorageMigrationParticipantSchema, StorageMigrationPhaseSchema, StorageMigrationPlanSchema, StorageMigrationResidueSchema, StorageMigrationSourcesSchema, StorageOccupancyReportSchema, ProviderInfoSchema as StorageProviderInfoSchema, ReadChunkInputSchema as StorageReadChunkInputSchema, StorageTableSchema, TestLocationResultSchema as StorageTestLocationResultSchema, WriteChunkInputSchema as StorageWriteChunkInputSchema, StoredRecordKindDeclarationSchema, StreamCodecSchema, StreamFormatSchema, StreamNetworkStatsSchema, StreamParamsOptionsSchema, StreamParamsStatusSchema, StreamProfileConfigSchema, StreamProfileOptionsSchema, StreamProfilePatchSchema, StreamProfileSchema, StreamSignalSchema, StreamSignalsStatusSchema, StreamSourceEntrySchema, StreamSourceSchema, SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, SuggestSharesInputSchema, SuggestSharesResultSchema, SuggestedDeviceShareSchema, SuggestedNodeShareSchema, SuppliedRootOutputSchema, SwitchStatusSchema, SystemHeldSecretNameSchema, SystemMetricsSchema, SystemMirror, TIMELAPSE_DENSE_FLOOR_SEC, TIMEZONES, TRACK_RELATIONS_DEFAULT_LIMIT, TRAINING_JOB_SCHEMA, TRAINING_RESULT_SCHEMA, TRANSCODE_DOWN_MAX_BITRATE_KBPS, TRANSCODE_DOWN_MAX_HEIGHT, TamperStatusSchema, TargetKindCapsSchema, TargetKindLevelSchema, TargetKindSchema, TargetSchema, TemperatureSensorStatusSchema, TerminalInstanceInfoSchema, TerminalLegacyCameraSchema, TerminalOutputBatchSchema, TerminalOutputEventSchema, TerminalProfileInfoSchema, TerminalSessionInfoSchema, TestConnectionResultSchema$1 as TestConnectionResultSchema, TestConnectionStatusEnum, TestResultSchema, ThresholdHelperSpecSchema, TimelapseRuleInputSchema, TimelapseRulePatchSchema, TimelapseRuleSchema, TimelapseTemplateSchema, ToastSchema, TokenScopeSchema, TopologyNodeSchema, TopologyProcessSchema, TopologyServiceSchema, TrackCascadeCountsSchema, TrackEnvelopeSchema, TrackFlagsPatchSchema, TrackFlagsSchema, TrackPlacementSchema, TrackProjectionSchema, TrackPuritySchema, TrackPurityValueSchema, TrackRelationKindSchema, TrackRelationRefusalSchema, TrackRelationSchema, TrackSchema, TrackSideSchema, TrackSourceSchema, TrackStateSchema, TrackZoneFilterSchema, TrackedDetectionSchema, TrainerSourceRefSchema, TrainingAcceleratorRefSchema, TrainingBaseModelSchema, TrainingCanarySchema, TrainingCanaryTargetSchema, TrainingCatalogDraftSchema, TrainingCorpusSelectionSchema, TrainingCredentialCheckSchema, TrainingEvalClassSchema, TrainingEvalReportSchema, TrainingEventSchema, TrainingExportDeviceTotalsSchema, TrainingExportSchema, TrainingExportSummarySchema, TrainingFailureReasonSchema, TrainingGpuOptionSchema, TrainingJobPlanSchema, TrainingJobRequestSchema, TrainingJobSchema, TrainingJobSpecSchema, TrainingJobStateSchema, TrainingLogLineSchema, TrainingPresetSchema, TrainingProgressPointSchema, TrainingProviderDefaultsSchema, TrainingProviderDescriptorSchema, TrainingProviderEntrySchema, TrainingProviderTypeSchema, TrainingProviderUpdateEntryInputSchema, TrainingRefusalReasonSchema, TrainingRegionOptionSchema, TrainingResultFileSchema, TrainingResultSchema, TrainingSplitPlanSchema, TrainingStageSchema, TransactRefusedError, TransportPlaneCountsSchema, TransportPlaneSchema, TurnServerSchema, UNATTRIBUTED_BUCKET_KEY, UNIT_TABLE, UNLOCK_CONFIRMATION, USE_ROOT_MODEL_DEFAULTS, USE_ROOT_MODEL_SETTING_KEY, UnindexedFilterError, UninstallNodeOutcomeSchema, UninstallNodeResultSchema, UninstallPackageResultSchema, UnitConversionError, UnknownRecordKindError, UnreleasedClaimSchema, UnstampedEventMediaCountSchema, UnstampedRowsSchema, UpdateBlockerSchema, UpdateIntegrationInputSchema, UpdateStatusSchema, UpdateUserInputSchema, UserRecordSchema, UserScopeSchema, UserSummarySchema, VECTOR_INDEX_DIM_CONFLICT, VIDEOCLIPS_MAX_OFFER_BYTES, VIDEOCLIPS_MAX_READ_BYTES, VIEWER_FEATURES, VIEWER_FEATURE_IDS, VISIT_MERGE_GAP_MS, VOCAB_TEMPLATES, VacuumControlStatusSchema, VacuumStateSchema, ValveStateSchema, ValveStatusSchema, VectorDeclareIndexInputSchema, VectorDeleteByFilterInputSchema, VectorDeleteInputSchema, VectorDeleteResultSchema, VectorFilterSchema, VectorGetInputSchema, VectorGetResultSchema, VectorItemSchema, VectorMatchSchema, VectorMetadataSchema, VectorMetricSchema, VectorQueryInputSchema, VectorQueryResultSchema, VectorStatsInputSchema, VectorStatsResultSchema, VectorUpsertInputSchema, VectorUpsertResultSchema, VibrationStatusSchema, VideoEncodeSchema, ViewerDeviceAllowSchema, ViewerFeatureIdSchema, ViewerTokenScopeSchema, WEBRTC_CLIMB_HOLD_CODES, WEBRTC_EGRESS_PROFILE, WEBRTC_TRY_BLOCKERS, WEEKLY_MASK_LENGTH, WELL_KNOWN_TABS, WELL_KNOWN_TAB_MAP, WaterHeaterStatusSchema, WeatherStatusSchema, WebrtcClimbHoldSchema, WebrtcLadderDecisionSchema, WebrtcSessionDebugSchema, WebrtcStreamChoiceSchema, WebrtcStreamTargetSchema, WebrtcTierFailureSchema, WhiteBalanceModeSchema, WidgetHostEnum, WidgetLoginMethodSchema, WidgetMetadataSchema, WidgetRemoteSchema, WidgetSizeEnum, WrapperActivationReadSchema, WrapperEvidenceSchema, WrapperIdentitySchema, WrapperKindSchema, YAMNET_TO_MACRO, ZoneCrossingDirectionSchema, ZoneCrossingSchema, ZoneKindEnum, ZoneRuleModeEnum, ZoneRuleSchema, ZoneRuleStageEnum, ZoneRulesArraySchema, ZoneSchema, ZoneScopeBreakdownSchema, __resetLogChannelRegistryForTests, acceleratorKindOf, accessoriesCapability, accessoryChildrenComplete, accessoryChildrenUnknown, accessoryStableId, actionsForBoundCaps, actionsForDevice, actionsForDeviceType, actionsForDevices, activateAlarmProfile, activeForReducer, actuatorMethodRow, addonCatalogHref, addonPagesCapability, addonPagesSourceCapability, addonRoutesCapability, addonSettingsCapability, addonWidgetsCapability, addonWidgetsSourceCapability, addonsCapability, adminUiCapability, advertisedHubOrigins, aggregateThroughputFactor, airQualitySensorCapability, alarmDeviceBlocksArming, alarmDeviceSecureOnArm, alarmPanelCapability, alarmPatchLanded, alarmProfileById, alertEpisodeId, alertEpisodeKind, alertEpisodePayload, alertNodeId, alertsCapability, allDoActions, allowedSuppliedEffect, ambientLightSensorCapability, annotateClipsWithEventLabels, appFlowLocation, applianceDeviceType, applianceExport, applyBlockingEdit, applyCropClassFloors, applyModeDelaysEdits, applyModeDeviceListEdit, applyModelBoundSettings, applyNonBlockingEdit, applySecureOnArmEdit, arithmeticDraft, armRemovalReconcile, arrayItemFieldPath, asBoolean, asJsonArray, asJsonObject, asNumber, asRecordsError, asString, assertTimelapseCadences, assertTransactScope, assertValidDeclaration, assignNodeColorId, audioAnalysisCapability, audioAnalyzerCapability, audioChunkBytesPerSample, audioCodecCapability, audioIsFailClosed, audioKindId, audioLabelChoices, audioMetricsCapability, audioModeOf, audioOrDefaults, audioPlanFromEncodeProfile, audioScaleEraOf, authProviderCapability, autoAssignProfiles, automationControlCapability, backupCapability, bareAddonId, baseUnitOf, batteryCapability, bestLocationMatch, binaryCapability, bindAddonActions, brightnessCapability, brokerCapability, bucketStartOf, buildAddonRouteProvider, buildAudioArgs, buildBenchStepTree, buildCapabilityLookup, buildDeviceAdminUrl, buildDeviceEnrollmentLink, buildDeviceSignatureMessage, buildEventKindDescriptor, buildFfmpegArgs, buildInputArgs, buildModelVariantGroups, buildNcTaxonomy, buildPlusCatalogClassMap, buildRoleScopes, buildSecretRef, buildSessionLostAlert, buildStreamParamsConfigSchema, buildSubjectPath, buildVideoArgs, buildViewerLink, builtCapabilityBlockers, bundledCamstack, buttonCapability, calendarEventLocalSpan, calendarEventOnLocalDay, calendarSourceCapability, calendarsCapability, cameraCredentialsCapability, cameraGridLayoutCapability, cameraOwnsMotionViaSensor, cameraPipelineConfigCapability, cameraScopedStepSettings, cameraSensorRefKey, cameraStreamsCapability, canConvertUnit, canonicalEgressPlan, canonicalIconKey, canonicalizeAppCallback, capabilityScopesOf, capacityForModel, capacitySessionsOf, carbonMonoxideCapability, cellsToRects, checkRoleAddress, claimedRequestOrigins, classifyBearerPrincipal, classifyCamerasForBenchmark, classifyFieldSource, classifyInferenceHardware, classifyRetrainReview, classifySecretWrite, classifyStoreError, classifyStream, classifyStreams, clearKnownSecrets, clearModelBoundOverrides, clearModelBoundSetting, climateControlCapability, clipEventLabelDepsFromApi, clipExportFailure, clipExportFailureOf, clipLabelsForWindow, clipReasonHeaderValue, cloneAlarmSettings, cloneStatefulExpressionMemory, clusterModelSettingKey, clusterStepSettingFieldsFor, clusterStepSettingKey, codecIsAccepted, collectHydratedFieldEntries, collectHydratedFieldValues, collectKeychainStoredKeys, collectModelBoundKeys, collectSecretConfigKeys, collectSecretLeaves, collectSecretMarkerRefs, collectZodSecretPaths, colorCapability, colorForKind, commitWatchdogRestart, compareToTarget, compileExpression, compileExpressionSafe, compileHelper, compileKeyedArrayOverride, compilePulseOverride, compileScalarOverride, compileSpanOverride, composeSwitchedOff, composedDeviceRef, composedDeviceStableId, composerCapability, compositionEdges, compositionFeatureEnabled, compositionFieldKey, compositionFillStatus, compositionItemFieldPath, compositionReadKey, compositionSliceKey, compositionSourceKey, compositionSourceRefs, computeCapacityShares, computeScores, conditionDepth, conditionExclusionReason, conditionVisibleForKind, connectionTestCapability, connectivityCapability, consumableFormOf, consumableKindOf, consumableLowPercentOf, consumablesCapability, contactCapability, containingParentIndex, controlCapability, convertPresetFeature, convertUnit, convertUnitTargets, coralUsableUnits, coreBlockAddonId, coreBlockComposition, coreBlockIdFromAddonId, coreBlockSourceKind, coreBlocksCapability, cosineSimilarity, countConditionLeaves, countRecoverySkips, coverCapability, createAlarmProfile, createDeviceExtensionProvider, createDeviceProxy, createDurableState, createEvent, createEventBusSliceSource, createExpressionScope, createHwAccelCache, createLazyTrpcSource, createLogChannelsProvider, createMirrorSource, createRecordsAccess, createRuntimeStateBridge, createSecretsAccess, createSliceHandle, createStatefulExpressionMemory, createSystemProxy, customAction, customModelRegistryCapability, dataStoreProviderCapability, databaseSnapshotCapability, dayNightCapability, dayOfWeekToIndex, declarationOwnerNodeId, declarationsOf, declareLogChannel, declaredSeriesKind, decodeCompositionToCards, decodeKeyedArrayOverride, decodePulseOverride, decodeScalarOverride, decodeVectorBase64, decoderCapability, defaultDeliveryForSection, defaultDeviceFor, defineCustomActions, defineEntryKind, defineExtensionSlotProvider, defineRecordKinds, dehydrateConfigField, dehydrateSchema, deleteAlarmProfile, derivativeDraft, derivativeUnitLabel, deriveBatteryPresence, deriveCameraSwitches, deriveDetailCropRect, deriveMaskSupplies, derivePostTriggeredAction, deriveRecordingMode, deriveRootFaceRefineRect, deriveRootSupplies, describeComposableCaps, describeCustomActions, describeModelVariant, describeOnboardClamp, describeOnboardRefusal, describeRootSupplies, describeRootSupply, describeStateField, describeSystemEventDeliveryProblem, describeSystemEventFamilyProblem, describeTopLevelStateFields, detectAccessRole, detectionPipelineCapability, deviceAdminLinkCapability, deviceAdoptionCapability, deviceAttentionKind, deviceBackendToFormat, deviceCredentialsCapability, deviceCustomAction, deviceDiscoveryCapability, deviceDoFamily, deviceExportCapability, deviceExtensionCapability, deviceHistoryCapability, deviceManagerCapability, deviceMatchesProfile, deviceOpsCapability, deviceProviderCapability, deviceRefusalFromMessage, deviceRemovalHookCapability, deviceSelectorMatches, deviceStateCapability, deviceStatusCapability, diffStepSettings, disarmRoseMemory, dishwasherCapability, displayPaletteCapability, displayUnitFor, doActionSelectValue, dominantClipLabels, doorbellCapability, droppedConditionsForKind, edgetpuDelegateDevice, effectiveStepSettings, egressTranscodeSharingKey, egressTransportFromRequest, electByShare, electByShareWithAffinity, eligibleUnderBenchmark, embeddingEncoderCapability, embeddingModelFailedError, embeddingModelFailedOf, embeddingRefusalOf, embeddingRequirementsFailedError, embeddingRequirementsUnavailableError, emitDownForOwnedCaps, emitReadiness, emitsCollectionSelector, encodeCardsToComposition, encodeProfileFromStreamShape, encodeVectorBase64, ensureAlarmProfiles, entryBody, enumSensorCapability, enumerateInferenceDevices, enumerateItemArrayFields, enumerateSchemaFields, errMsg, estimateNodeBenchmarkDurationMs, evaluateAggregate, evaluateAst, evaluateCompositionField, evaluateCount, evaluateDerivative, evaluateExpressionSource, evaluatePoolMemory, evaluateRose, evaluateSensorEdge, evaluateSensorLevelEdge, evaluateStatefulExpressionCall, evaluateStatistic, evaluateZoneRules, event, eventEmitterCapability, eventKindLabel, eventOverlapsClipWindow, evictionPolicyForMode, evictionPolicyOfLocation, expandAudioChunkToF32le, expandCapMethods, expandContainer, expandSystemEventClasses, exportSubjectOf, exposeBlockDevices, expressionContainsBuiltinCall, expressionDraft, extensionSlotRef, extractNestedAddonId, extractSourceInfoFromMetadata, faceGalleryCapability, failureContributionCapability, failureRate, fanControlCapability, fanOutTargets, featureFieldEntries, featureOfRole, featureProbeCapability, featureSources, feederCustomizationExample, feederExampleSources, ffmpegRate, fieldEntryToSource, fieldReads, fieldUnitKeys, fieldsPinnedAtValueBelow, filesystemBrowseCapability, findCandidateCycles, findCompositionCycles, findTimezone, floodCapability, foldSnapshotByFunction, foreignCapacityCells, forgetKnownSecret, formatDeviceRevoker, formatForRuntime, formatMediaOwnerKey, formatMinutes, formatPaletteViolations, formatParkedFor, formatReading, formatSecretScope, formulaProblem, freshResults, fuseRecoveredDetections, gasCapability, gbToBytes, generateAutomationBlock, getAudioMacroClassIds, getByPath, getCapsByProviderKind, getLogChannelRegistry, getTaxonomyEntry, gifDeriveSpeed, gifFilterComplex, gifFromMp4Args, globalSecretScope, grantRowsOf, groupActiveCapability, groupCommandsCapability, groupStatusCapability, groupTemplate, hasModelBoundOverrides, hasMotionTrigger, hasUrlScheme, heatingValveCapability, helperMembers, helperSaveProblems, hfModelUrl, historyFieldsFor, historyItemFieldPath, historyUnitFor, htmlToText, hubAddressHostname, hubMotionNativeProvider, humidifierCapability, humiditySensorCapability, hydrateSchema, iconCategoryLabel, iconEntry, iconsInCategory, imageCapability, imageModesForKind, imageSettingsCapability, inferExpressionKinds, inferModelProvider, ingestReading, initialPoolMemoryState, integralCadenceMs, integralDraft, integrateReading, integrationsCapability, intercomCapability, interpolate, interpretStoredClusterModel, invalidClusterStepModelEntries, invertPresetFeature, invocationFromEncodeProfile, isAgentOnlyPlacement, isAlarmControllableCap, isAlertEpisodeOpen, isAlertEpisodeSeverity, isAppLinkBase, isAppStartRefusal, isApplianceKind, isArrayOutputSchema, isAudioChunkFormat, isAudioClassName, isAudioLabelSelected, isAudioRule, isAutomaticShareSource, isBaseConditionKey, isBatteryPresenceFault, isClusterScopedStep, isCollectionArrayMethod, isCredentialTokenPayload, isDefaultAlarmProfileId, isDefaultAppConnectionEndpoint, isDefinitiveDeviceRefusal, isDeployableToAgent, isDetectionMacroClass, isDeviceConfigCap, isDeviceScopedCap, isDoActionActuatable, isDoPickerDeviceType, isDrawableSubjectPath, isEmbeddingModelFailed, isEvent, isEventKindLabelKey, isEventOwnerType, isFirstLevelMacroClass, isHeldBackTemplateVar, isHistoryHelper, isIconKey, isIsolatedBuiltin, isKeychainStoredField, isKnownTemplateVar, isLabelSupplyStepId, isLocationEnabled, isMediaOwnerType, isModelScopedStepSettingKey, isNode, isOauthLandingReason, isObjectInput, isOccupancyRule, isOwnerOnlyEventCategory, isPlugApplianceType, isReadingQuantity, isRemovedModelId, isRestoredCap, isRetiredClearKey, isRootSuppliableStepId, isSameAddonId, isScheduleActive, isSecretClear, isSecretConfigField, isSecretFieldView, isSecretMarker, isSecretMarkerLike, isSecretRef, isSecretRefOwnedBy, isSingleHubAddressRole, isSoftwareDecode, isSourceCap, isStateLabelKey, isStatefulBuiltin, isStorageLocationMode, isSystemDelivery, isSystemEventFamily, isSystemEventRecoveryKind, isSystemEventSummaryRule, isSystemRuleKind, isUnfilledRequiredProblem, isVectorIndexDimConflict, isVoidInput, isZodSecret, ituDbfsFromPreEpoch, jobKindSchema, kebabToCamel, keychainAdminCapability, keychainCapability, kindOfValue, kindsForDiscriminator, knownSecretCount, knownValues, lawnMowerControlCapability, legacyAutoLinkIds, legacyImageMode, legacyModeOf, lifecycleJobSchema, lifecycleJobScopeSchema, lifecycleJobStateSchema, lifecycleTaskSchema, linkedLabelStepId, linkedStepOf, listBenchDetailSteps, llmCapability, llmRuntimeCapability, loadContributionCapability, localNetworkCapability, localizeConfigTree, locationIconKey, locationSimilarity, lockControlCapability, logBannerArgs, logChannelsCapability, logDestinationCapability, logLevelAtMost, loginMethodCapability, looseSchema, makeInMemoryRecords, makeProfileBrokerId, makeSecretMarker, makeSourceBrokerId, mapAudioLabelToMacro, mapSecretLeaves, markFieldEdited, markdownToHtmlLite, markdownToText, maskUrlCredentials, matchDoAction, maxDurationMs, mayReadLocation, mayWriteToLocation, measuredCapacityFromResults, measuredDetectorCells, mediaPlayerCapability, memoizePinnedFfmpeg, mergeClipLabels, mergeKeyedArrayItem, mergeOverrides, mergeScalarTarget, mergeSecretStatePaths, mergeSettingsBags, mergeSourceInfo, meshNetworkCapability, meterCapability, method, methodAccessForHttpMethod, methodRefusal, methodRoleOf, metricsProviderCapability, migrateLegacyDeviceSignalConfig, minutesToTimeOfDay, modeMayRead, modeMayWrite, modelBindingKey, modelConvertCapability, modelDistributorCapability, modelFormatForRuntime, modelScopedStepSettingKeys, motionCapability, motionDetectionCapability, motionSourceLabel, motionTriggerCapability, motionZonesCapability, mqttBrokerCapability, nativeObjectDetectionCapability, navigationCapability, ncAlarmSystemDefaultSettings, ncMediaPolicyError, networkAccessCapability, networkLinkCapability, networkQualityCapability, nextLocalMidnight, nodeBenchmarkRefusals, nodeCertificatesCapability, nodePickerItems, nodePin, nodesCapability, normalizeAddonInitResult, normalizeAudioLabel, normalizeCoreBlockWrite, normalizeNcMediaPolicy, normalizeNodeId, normalizeOrigin, normalizeSecretOwner, normalizeTokenScopes, normalizeUnit, normalizedArea, notificationOutputCapability, notificationRulesCapability, notifierCapability, numericSensorCapability, oauthIntegrationCapability, oauthLandingUrl, objectInputDeclaresAddonId, objectInputDeclaresRequiredDeviceId, occupancyScope, oidcConnectionsCapability, omitTransientConfig, openReset, openStatistic, optionalAncestors, optionalMethod, osdCapability, osdManagerCapability, overlayClusterStepSettings, ownedSlice, packagePickerItems, paintHex, paletteEntryLabel, paletteFromInput, paletteFromStored, paletteLegend, paletteResultSchema, paletteSwatchSchema, parseAcceleratorFactsJson, parseAdminBase, parseAlertEpisodePayload, parseAppAuthCallback, parseAppFlowRequest, parseAppPageLang, parseCameraStreamConfig, parseColorInput, parseCredentialScopes, parseDeviceEnrollmentLink, parseExpression, parseJsonArray, parseJsonObject, parseJsonUnknown, parseMediaOwnerKey, parseOauthLandingFragment, parseOccupancyScope, parseProcStatus, parseProfileBrokerId, parseRetrainRevisionConflict, parseRuleSection, parseSecretPath, parseSecretRef, parseSecretStatePath, parseSessionPlacementPolicy, parseShareSource, parseStreamParamsFormPatch, parseTrainingEventLine, patchAudio, petFeederCapability, pickAccessoryControl, pickAppLinkHub, pickClusterStepModels, pickClusterStepSettings, pickDetailCropConvention, pickFaceRescoreIntervalMinutes, pickInvalidClusterStepModels, pickNativeLeaseOverride, pickPreferredRtspEntry, pickRequestOrigin, pickRestartCandidate, pickVideoEncoder, pickerForCondition, pickerForRuleClasses, pinUnderBenchmark, pipelineAnalyticsCapability, pipelineExecutorCapability, pipelineOrchestratorCapability, pipelineRunnerCapability, planComposition, planCompositionEvents, planItems, planMotionCropRegions, planMotionCrops, planRecoveryCrops, planResetTier, planStatisticTier, plateGalleryCapability, platformProbeCapability, plusCatalogDefaultClassFloors, plusCatalogLabelFields, poolMemoryThreshold, powerMeterCapability, prepareNotification, presenceCapability, presetById, pressureSensorCapability, primaryCapForRole, principalMayReachAddon, privacyMaskCapability, problemsBlockSave, procedureAuthKey, projectKeyedArrayAssignment, projectPulseAssignment, projectScalarAssignment, projectSpanAssignment, projectSubjectPath, providerMotionEvent, ptzAutotrackCapability, ptzCapability, publicEventCategories, pythonScriptForBackend, quantityFromUnit, rankStreams, readClusterStepModels, readClusterStepSettings, readDetailCropConvention, readDeviceStateFrom, readErrorI18n, readFaceRescoreIntervalMinutes, readHubMotionDetected, readHubMotionStatus, readKeyedArrayItems, readMotionTriggeredBy, readNativeLeaseOverride, readNodePin, readRecoveryRecipe, readRecoveryRecipeForSteps, readTimelapseGeneratedAt, readUseRootModel, readinessKey, readingMeta, rebootCapability, recommendNode, reconcileBlockDevices, reconcileRemovedDevices, recordArrayItemPath, recordEntriesCapability, recordSecretCollection, recordSecretRef, recordingArchiveCapability, recordingCapability, recordingExportCapability, recordingOnboardCapability, recordingSignalCapability, recordsCapability, recordsErrorFromMessage, rectsToCells, reducePoints, reducerForActive, registerKnownSecret, remapCropDetections, removeScalarTarget, renameAlarmProfile, renderVocabPhrase, replacedFieldKeys, reportIsScalable, requestMountPrefix, requiredTopLevelKeys, requiresPython, reservedSourceOwner, resetPoolBaseline, resolveAddonExecution, resolveAddonGroup, resolveAddonPlacement, resolveAppConnections, resolveBucketMs, resolveCapMount, resolveClipSearchMinScore, resolveClusterStepModelId, resolveContainerPrimaryChild, resolveCoreBlockEntry, resolveCoreBlockFiles, resolveCreateExportSubject, resolveDeviceControlKind, resolveDeviceProfile, resolveEffectiveShares, resolveEgressDecodeHwAccel, resolveExportProfiles, resolveFormat, resolveHubAddressRoles, resolveHydratedFieldValue, resolveIconKey, resolveInternalAddress, resolveLatencyColumn, resolveLocationMode, resolveMethodAuth, resolveMethodRole, resolveModeDelays, resolveModeNotifyPolicy, resolveModelBoundSetting, resolveMutate, resolveNcMediaImage, resolveNotificationTapAddress, resolvePoolMemoryPolicy, resolvePublicEndpoint, resolveRecordingProfiles, resolveRootSupply, resolveRunnerId, resolveSecretMarkers, resolveSecretViewsIn, resolveServerName, resolveStreamMaps, resolveVariantModelId, resolveViewableDeviceIds, resultCellKey, resultStandings, retrainBoxIou, retrainRevisionConflictMessage, roleSpec, rollingDurationMs, roomCompositionExample, rootSuppliesOf, rootSupplyServes, ruleAutoTriggersAlarm, ruleBelongsToAlarm, ruleDeviceCompatCapNames, ruleDeviceCompatCapQueries, ruleEditorSectionsForKind, ruleGatedOnArmedState, ruleGroupingApplies, ruleKindOf, ruleKindSpec, ruleMatchesSection, ruleSection, ruleSectionOf, ruleSeedForSection, ruleTriggerZoneIds, runFanOut, runInferenceStep, runningFromDishwasherOperation, runningFromLawnMower, runningFromMediaPlayer, runningFromVacuumState, runningStateCapability, runtimeDevices, runtimeFieldUnit, runtimeStatePolicyFor, sameDoFamily, sameHelperBody, sameRead, scalarTargetCount, sceneMonitorCapability, scheduleForSendTimes, schemaDeclaresAnyField, scopeInherits, scopeKey, scopesAllowAddon, scopesAllowAddonRoutes, scopesAllowDeviceCap, scopesAllowOwnPreferences, scopesGrantAdmin, scoreRuntimes, scriptRunnerCapability, scrubKnownSecrets, searchIcons, secretArrayPrefixes, secretTreeFromPaths, secretTreeFromSchema, secureActuationFor, selectAppConnectionEndpoints, selectAssignedProfileSlots, selectRecoveryStep, sendTimesForEditor, sendTimesOfSchedule, sensorRaisedOf, sensorTransitionNeverFires, sensorTransitionOffered, servedTemplateVars, serverManagementCapability, sessionLostAlertId, sessionsOfDeviceCell, setByPath, setFormulaExpr, setPaletteInputSchema, settingValuesEqual, settingsBelow, settingsStoreCapability, shareViewGrantOf, sharedActuatorFeatures, sharedActuatorMethods, sharedColorModes, sharedLightCaps, shortHostname, shortSecretRefHash, signalPercentFromBars, signalPercentFromRssi, siteZoneKey, sleep, sleepCancellable, sliceActiveValue, sliceChangedAt, smokeCapability, smtpProviderCapability, snapshotCapability, sourcePickForAppliance, sourcePickForHistory, sourcePickForMath, sourcePickForTemplate, splitTranslationRef, squareAround, ssoBridgeCapability, startMoverUnderClearance, startReachabilityPoll, stateLabel, stateVocabularyFor, statisticCadenceMs, statisticDraft, stepModelRunsOnFormat, stepPulse, stepSettingSource, stepSpan, storageAdminCapability, storageCapability, storageEvictableCapability, storageMigrationCapability, storageOccupancyCapability, storageProviderCapability, storedFromReady, storedPaletteSchema, streamBrokerCapability, streamCatalogCapability, streamParamsCapability, streamPixels, streamQualityLabel, streamSignalsCapability, stripRetiredBandPreBufferSec, strippedOfLegacyReadOnly, subKindsOf, subjectHasPath, subjectPathSampleFromBox, subjectPathSvgPoints, summarisePrivacyAudio, summarizeEffectiveScope, summarizeReview, supplyFor, supportedRuntimes, swatchHex, switchCapability, switchedOffIds, syncActiveAlarmProfileSettings, synthesizeSourceInfo, systemCapability, systemEventClassKinds, systemEventClassOf, systemEventClassesFor, systemEventDeliveryProblems, systemEventFamilyOf, systemEventFamilyProblems, systemEventFilterApplies, systemEventFilterAppliesToAnyKind, systemEventKindNamesOf, systemEventKindsOfFamily, systemEventSummaryScheduleOf, systemEventSummarySplitOf, systemFamilyOfKind, systemRuleKindOf, tamperCapability, targetFeature, taskLogEntrySchema, taskPhaseSchema, taskTargetSchema, temperatureSensorCapability, templateCarriesSummary, templateDeviceType, templateVarDeliveryApplies, templateVarKindApplies, templateVarSystemEventApplies, templateVarsFor, terminalSessionCapability, textToHtml, thresholdDraft, thresholdToBase, thresholdToDisplay, timeOfDayToMinutes, toAppLinkHubOrigin, toDeviceSummary, toExpressionValue, toNodeId, toPercentShares, toSecretFieldView, toStreamSourceEntry, toastCapability, toggleAudioLabel, tokenize, trainingCapability, trainingProviderCapability, transcodeBody, transformSecretWrite, tryConvertDelta, tryConvertUnit, turnProviderCapability, unitCompanionField, unitDimension, unitsForDimension, unreachableExtensionSlotRow, unwrapSchema, updateCapability, userError, userManagementCapability, userPasskeysCapability, vacuumControlCapability, validateComposition, validateCustomAddress, validateExpressionSource, validatePalette, validateRecipeBounds, valveCapability, vectorDimFromBase64, vectorIndexDimConflictError, vectorStoreCapability, vibrationCapability, videoclipsCapability, viewerAdmitsDevice, viewerHoldsRole, viewerLinkBaseOf, viewerScopeOf, viewerUiCapability, actionsForDevice$1 as vocabularyActionsForDevice, triggersForDevice as vocabularyTriggersForDevice, waterHeaterCapability, wattMillisecondsToKwh, weatherCapability, webrtcClientHintsSchema, webrtcSessionCapability, weeklyMaskIndex, weeklyMaskIsUniform, weeklyMaskToWindows, widenDeviceConstructor, windowsToWeeklyMask, wiringAddonHealthSchema, wiringHealthSnapshotSchema, wiringNodeHealthSchema, wiringProbeKindSchema, wiringProbeResultSchema, withClipEventLabels, withFieldFrom, withLocationMode, withSystemEventClasses, withoutCallerStamp, withoutField, withoutKeyedArrayItem, writeModelBoundSetting, zodEntriesToConfigUI, zoneAnalyticsCapability, zoneRulesCapability, zonesCapability };
|
|
119315
|
+
export { ACCESSORY_LABEL, ACCESS_ROLES, ACTIVE_CRITERIA, ACTUATOR_METHODS, ACTUATOR_TEMPLATE_IDS, ADMIN_SCOPE, AGENT_MDNS_QUERY_NAME, AGENT_MDNS_SERVICE_TYPE, AGENT_MDNS_TXT_KEYS, AGGREGATE_REDUCERS, AGGREGATE_THROUGHPUT_BY_KIND, ALEXA_EGRESS_PROFILE, ALL_CAPABILITY_DEFINITIONS, ALL_METHOD_ACCESS, APPEARANCE_BIN_COUNT, APPEARANCE_BLOCKS, APPEARANCE_DESCRIPTOR_VERSION, APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT, APPLE_SA_TO_MACRO, APPLIANCE_DEFAULTS, APPLIANCE_EXPORT, APPLIANCE_KINDS, APPLIANCE_TEMPLATE_ID, APP_AUTH_CALLBACK_MAX_LENGTH, APP_AUTH_CALLBACK_URLS, APP_FLOW_DEFAULT_REDIRECT, APP_FLOW_REFUSAL_MESSAGES, APP_FLOW_STATE_PREFIX, APP_REFUSED_PATH, APP_START_REFUSAL_MESSAGES, ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT, ARITHMETIC_OPS, AUDIO_ANALYSIS_CAP_NAME, AUDIO_BACKEND_CHOICES, AUDIO_CHUNK_FORMATS, AUDIO_GRADIENT_ALPHAS, AUDIO_MACRO_LABELS, AUDIO_NOT_CLASSIFIED_REASONS, AUDIO_PRESETS, AUDIO_SCALE_EPOCH_ISO, AUDIO_SCALE_EPOCH_MS, AUTOMATIC_HUB_ADDRESS_FLAGS, AUTO_SHARE_HEADROOM, AUTO_TUNE_FAMILY, AcceleratorComputeSchema, AcceleratorKindSchema, AccessoriesStatusSchema, AccessoryKind, ActionEntrySchema, ActionError, ActionErrorCodeSchema, ActionInputSchema, ActionLinksSchema, ActionRunChangedSchema, ActionRunOriginSchema, ActionRunOutcomeSchema, ActionRunResultSchema, ActionSourceKindSchema, ActionStatusSchema, ActionStepSchema, ActionVariableSchema, ActionVariableTypeSchema, ActionVariableValueSchema, ActiveCriterionSchema, AddBrokerInputSchema, AddRetrainFrameFromRecordingResultSchema, AddonAutoUpdateSchema, AddonListItemSchema, AddonPageDeclarationSchema, AddonPageInfoSchema, AddonRoutesScopeSchema, AdminLinkTargetEnum, 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, AggregateReducerSchema, AirQualitySensorStatusSchema, AlarmArmModeSchema, AlarmPanelStatusSchema, AlarmStateSchema, AlertEpisodePayloadSchema, AlertSchema, AlertSeveritySchema, AlertSourceSchema, AlertStatusSchema, AmbientLightSensorStatusSchema, AnalyticsLtsSeriesSchema, AppFlowPurposeSchema, AppLoginPathSchema, AppPageLangSchema, AppleFmAvailabilitySchema, AppleFmUnavailableReasonSchema, ApplianceHelperSpecSchema, ArchiveEntrySchema, ArchiveManifestSchema, ArchiveSqliteSnapshotSchema, ArchivedDebugNoteQueryInputSchema, ArchivedDebugNoteSchema, ArithmeticHelperSpecSchema, AttachmentMediaTypeSchema, AttachmentSchema, AudioAnalysisResultSchema, AudioAnalysisSettingsSchema, AudioAttachDeviceInputSchema, AudioAttachDeviceResultSchema, AudioChunkFormatSchema, AudioChunkInputSchema, AudioClassSummarySchema, AudioClassificationLabelSchema, AudioClassificationResultSchema, AudioClassifyOutcomeSchema, AudioCodecInfoSchema, AudioDecodeSessionConfigSchema, AudioDetachDeviceResultSchema, AudioEncodeSchema, AudioEncodeSessionConfigSchema, AudioEncodedChunkSchema, AudioEventSchema, AudioLevelSchema, AudioMetricsHistoryPointSchema, AudioMetricsHistorySchema, AudioMetricsSnapshotSchema, AudioPcmChunkSchema, AudioStreamPickSchema, AuthResultSchema, AutoTuneApplyInputSchema, AutoTuneApplyResultSchema, AutoTuneOptionsSchema, AutoTunePhaseResultSchema, AutoTunePlanSchema, AutoTuneWarningSchema, AutoUpdateSettingsSchema, AutomationActionSchema, AutomationCapStepSchema, AutomationConditionOperatorSchema, AutomationConditionSchema, AutomationConditionTraceNodeSchema, AutomationControlStatusSchema, AutomationRecipeSchema, AutomationRunModeSchema, AutomationRunOutcomeSchema, AutomationRunTraceSchema, AutomationRunVerdictSchema, AutomationStateDocSchema, AutomationStepTraceSchema, AutomationTriggerSchema, AutomationTriggerTraceSchema, AutomationWaitStepSchema, AvailableIntegrationTypeSchema, BASE_DEVICE_CAPS, BASE_LIVE_EGRESS_PROFILE, BATTERY_DEVICE_PROFILE, BATTERY_UNREACHABLE_AFTER_MS, BENCH_ROOT_STEP_ID, BINARY_AGGREGATES, BIRTH_DECISION_DEFAULT_LIMIT, BOOT_RECOVERY_BACKOFF_MS, BUILTIN_RESULT_KINDS, BackgroundRunRegistry, BacklightModeSchema, BackupArchiveEncryptionSchema, BackupDestinationInfoSchema, BackupEncryptionStatusSchema, BackupEntrySchema, BackupRunPhaseSchema, BackupRunSchema, BackupRunStateSchema, BackupTriggerResultSchema, BaseAddon, BaseDevice, BaseDeviceProvider, BatchTooLargeError, BatteryStatusSchema, BinaryStatusSchema, BirthDecisionCropSourceSchema, BirthDecisionQueryInputSchema, BirthDecisionRecordSchema, BirthDecisionVerdictSchema, BoundingBoxSchema, BrightnessStatusSchema, AddInputSchema as BrokerAddInputSchema, BrokerAudioClientSchema, BrokerClientsSchema, BrokerConnectionDetailsSchema, BrokerConsumerAttributionSchema, BrokerConsumerKindSchema, BrokerEncodedClientSchema, GetStateInputSchema as BrokerGetStateInputSchema, BrokerInfoSchema, BrokerInfoSchema as UnifiedBrokerInfoSchema, BrokerProviderInfoSchema, PublishInputSchema as BrokerPublishInputSchema, RegistryStatusSchema as BrokerRegistryStatusSchema, BrokerRtspClientSchema, BrokerStatsSchema, BrokerStatusEnum, BrokerStatusSchema, SubscribeInputSchema as BrokerSubscribeInputSchema, SubscribeResultSchema as BrokerSubscribeResultSchema, TestConnectionResultSchema as BrokerTestConnectionResultSchema, UnsubscribeInputSchema as BrokerUnsubscribeInputSchema, BucketAccumulator, BulkRecordSchema, CALENDAR_PERIODS, CALLER_STAMPED_CAPABILITIES, CAMERA_SENSORS_NOT_LOADED, CAMERA_SENSORS_SETTINGS_KEY, CAMERA_SWITCH_CATALOG, CAMERA_SWITCH_ORDER, CAMERA_TRIGGER, CAMSTACK_APP_LINK_ORIGIN, CAMSTACK_EVENT_PREFIX, CAM_PROFILE_ORDER, CAPABILITY_NAMES, CAPABILITY_ROUTER_KEYS, CAP_CUSTOMIZE_CATALOG, CAP_NAMES_WITH_STATUS, CAP_NODE_PIN_CONTEXT_KEY, CAP_PROVIDER_KIND_MAP, CAP_RUNTIME_FIELD_UNITS, CAP_VOCABULARY, CAP_VOCABULARY_BY_NAME, CATALOG_LANGS, CLASS_MAP_MACRO_TARGETS, CLIP_BROKER_PACED_RATES, CLIP_LABEL_EVENT_FETCH_LIMIT, CLIP_PLAYBACK_OPTIONS, CLIP_REALTIME_SOURCE_RATES, CLIP_REASON_HEADER_MAX, CLIP_SEARCH_STRICTNESS, CLIP_STILL_DISPOSITION_HEADER, CLIP_STILL_REASON_CODE_HEADER, CLIP_STILL_REASON_HEADER, CLIP_STREAM_SOURCE_RATES, CLIP_STREAM_TRANSPORT_HEADER, CLIP_STRICTNESS_FACTOR, CLIP_VECTOR_INDEX_PATTERN, CLUSTER_MODEL_CHOICE_UNREADABLE_REASONS, CLUSTER_MODEL_SCOPED_STEPS, CLUSTER_MODEL_SECTION_ID, CLUSTER_STEP_SETTING_FIELDS, COCO_80_LABELS, COCO_TO_MACRO, COMPOSED_DEVICE_STABLE_ID_PREFIX, COMPOSED_ITEM_FIXED_FIELDS, COMPOSER_ADDON_ID, COMPOSER_RUNNER_ID, COMPOSITION_EVENT_CATEGORY, COMPOSITION_ITEM_ARRAY_PATH, COMPOSITION_ITEM_KEY_RE, CONNECTION_TEST_TIMEOUT_MS, CONTAINER_CHILD_PRIORITY, CORAL_DEFAULT_MODEL_ID, CORE_BLOCKS_ADDON_ID, CORE_BLOCK_ADDON_PREFIX, CORE_ULTRA_265K_IGPU_CLOCK_MHZ, CORE_ULTRA_265K_IGPU_EU, CREDENTIAL_TOKEN_AUDIENCE, CREDENTIAL_TOKEN_KIND, CROP_CLASS_FLOORS, CROP_SUPPLY_SOURCES, CROP_SUPPLY_STEP_IDS, CUSTOMIZATION_BLOCK_NAME_PREFIX, CalendarColorSchema, CalendarEntrySchema, CalendarEventSchema, CalendarInfoSchema, CalendarListEventsInputSchema, CalendarPreferenceEntrySchema, CalendarPreferencesSchema, CalendarSetPreferenceInputSchema, CalendarSourceKindSchema, CalendarWindowSchema, CamProfileSchema, CamStreamDescriptorSchema, CamStreamKindSchema, CamStreamResolutionSchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraCredentialsSchema, CameraCredentialsStatusSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionSourceSchema, CameraDetectionStatusSchema, CameraMetricsSchema, CameraMetricsWithDeviceIdSchema, CameraMotionStatusSchema, CameraOccupancySnapshotForDeviceSchema, CameraOwnMotionSchema, CameraRawLevelSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSensorAttachmentSchema, CameraSensorEntrySchema, CameraSensorModeSchema, CameraSensorRefSchema, CameraSensorsConfigSchema, CameraSensorsNotEnforcedSchema, CameraSensorsNotForwardedSchema, CameraSensorsStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusDegradationReasonSchema, CameraStatusDegradationSchema, CameraStatusSchema, CameraStatusStageSchema, CameraStreamSchema, CameraSwitchAuthoritySchema, CameraSwitchGroupSchema, CameraSwitchIdSchema, CameraSwitchSchema, CameraSwitchUnavailableReasonSchema, CameraSwitchWarningSchema, CamstackError, CandidateQueryFilterSchema, CapScopeSchema, CapabilityBindingsSchema, CapacityFallbackSchema, CapacitySourceSchema, CarbonMonoxideStatusSchema, CatalogFileSchema, CatalogLangSchema, ChargingStatus, ClaimOutcomeSchema, ClaimsListingSchema, CleanupDeletedDevicesResultSchema, ClearTrackRelationInputSchema, ClearTrackRelationResultSchema, ClientNetworkStatsSchema, ClimateControlStatusSchema, ClipBytesOfferSchema, ClipBytesSchema, ClipExportFailureSchema, ClipModelMetaSchema, ClipPlaybackOptionsSchema, ClipPlaybackSchema, ClipSchema, ClipSearchStrictnessSchema, ClipSourceAvailabilitySchema, ClipSourceSchema, ClipStillDispositionSchema, ClipStillRefusalCodeSchema, ClipStreamAudioReasonSchema, ClipStreamAudioSchema, ClipStreamDialSchema, ClipWakeSchema, ClusterAddonNodeDeploymentSchema, ClusterAddonStatusEntrySchema, ClusterModelChoiceSchema, CollectionColumnSchema, CollectionIndexSchema, ColorStatusSchema, CompleteEnrollmentInputSchema, CompleteEnrollmentOutputSchema, CompleteEnrollmentResultSchema, ComposableCapabilitiesSchema, ComposableCapabilitySchema, ComposableFieldSchema, ComposerApplyInputSchema, ComposerApplyResultSchema, ComposerBlockSchema, ComposerBlockVerdictSchema, ComposerUnreadableBlockSchema, CompositionAggregateSourceSchema, CompositionBindingSchema, CompositionBlockInputSchema, CompositionBlockStateSchema, CompositionCodeSourceSchema, CompositionCommandTargetSchema, CompositionCustomizationReadSchema, CompositionEventPlanSchema, CompositionExistingTargetSchema, CompositionExpressionSourceSchema, CompositionFeatureModeSchema, CompositionFeaturePlanSchema, CompositionFeatureSchema, CompositionFieldItemSchema, CompositionFieldKindSchema, CompositionFieldPlanSchema, CompositionFieldReadSchema, CompositionFieldRoleSchema, CompositionFieldSourceSchema, CompositionFieldStateKindSchema, CompositionFieldStateSchema, CompositionFieldsFeatureSchema, CompositionForwardCommandSchema, CompositionFromSourceSchema, CompositionGetReadSchema, CompositionGraphError, CompositionItemEntrySchema, CompositionListReadSchema, CompositionLiteralBindingSchema, CompositionNewTargetSchema, CompositionPassthroughFeatureSchema, CompositionProblemCodeSchema, CompositionProblemSchema, CompositionRunStatusSchema, CompositionSchema, CompositionSeriesSourceSchema, CompositionSourceRefSchema, CompositionStateReadSchema, CompositionTargetSchema, CompositionUnavailableModeSchema, CompositionValidationSchema, CompositionViewSchema, ConditionMirror, ConfigEntrySchema, ConfigSectionWithValuesSchema, ConfigTabDeclarationSchema, ConnectionTestDescriptorSchema, ConnectionTestInputSchema, ConnectionTestOutcomeSchema, ConnectivityStatusSchema, ConsumableFormSchema, ConsumableItemSchema, ConsumableKindSchema, ConsumableLevelSchema, ConsumableRemainingKindSchema, ConsumableRemainingSchema, ConsumableStatusSchema, ConsumablesStatusSchema, ContactStatusSchema, ControlKindSchema, ControlStatusSchema, ConvertArtifactSchema, ConvertResultSchema, ConvertTargetSchema, CoreBlockCompileInputSchema, CoreBlockCompileResultSchema, CoreBlockFilesSchema, CoreBlockInputFieldsSchema, CoreBlockInputSchema, CoreBlockPlacementSchema, CoreBlockSchema, CoreBlockSourceSchema, CoreBlockStatusSchema, CoverStateSchema, CoverStatusSchema, CreateIntegrationInputSchema, CreateUserInputSchema, CredentialScopeSchema, CredentialTokenClaimsSchema, CustomActionInputSchema, CustomModelDescriptorSchema, CustomizeAssignmentStatusSchema, DATABASE_SNAPSHOT_PARTIAL_SUFFIX, DATABASE_SNAPSHOT_SUFFIX, DATABASE_SNAPSHOT_TIMEOUT_MS, DATAPLANE_SECRET_HEADER, DATA_STORE_DATABASES, DAYS_PER_WEEK, DAY_MS, DAY_NAMES, DECLARED_DEVICE_SWEEP_LIMIT, DECLARED_INTEGRATION_FIXED_KEY, DEFAULT_ADDON_PLACEMENT, DEFAULT_AUDIO_ANALYZER_CONFIG, DEFAULT_CAMERA_FPS, DEFAULT_CAMERA_SENSOR_MODE, DEFAULT_CATALOG_LANG, DEFAULT_CLUSTER_STEP_MODELS, DEFAULT_CLUSTER_STEP_SETTINGS, DEFAULT_CORE_BLOCK_ENTRY, DEFAULT_DECODER_HWACCEL_CONFIG, DEFAULT_DETAIL_CROP_CONVENTION, DEFAULT_DISPLAY_PREFERENCE, DEFAULT_EVENTS_BAND_BUFFER_SEC, DEFAULT_EVENT_COLOR, DEFAULT_FEATURES, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS, DEFAULT_HEADROOM, DEFAULT_HISTORY_RETENTION, DEFAULT_MIN_LANDMARK_FACE_SIZE_PX, DEFAULT_MIN_SESSIONS_PER_DEVICE, DEFAULT_NATIVE_LEASE_SETTINGS, DEFAULT_OVERLAY_LAYERS, DEFAULT_POOL_MEMORY_POLICY, DEFAULT_RECORDING_PROFILES, DEFAULT_RETENTION, DEFAULT_RUNTIME_STATE_DURABILITY, DEFAULT_SESSION_LOST_DEBOUNCE_MS, DEFAULT_SESSION_PLACEMENT_POLICY, DEFAULT_SHARE_SOURCE, DEFAULT_TIMELAPSE_PREVIEW_TEXT, DEFAULT_TOKEN_EXPIRY, DEFAULT_TRACE_KEEP, DEFAULT_VIEWER_SCOPE, DEFINITIVE_DEVICE_REFUSALS, DERIVATIVE_UNITS, DERIVED_CAMERA_SILENCED_CAP_NAMES, DETAIL_CROP_PADDING_FIELD, DETAIL_CROP_PADDING_KEY, DETAIL_CROP_SECTION_ID, DETAIL_CROP_SQUARE_KEY, DETECTION_MACRO_CLASSES, DETECTION_PIPELINE_CAP_NAME, DETECTOR_ACCURACY, DETECTOR_PERF, DEVICE_BACKEND_TO_FORMAT, DEVICE_CAP_NAMES, DEVICE_CERT_RENEW_WINDOW_DAYS, DEVICE_CERT_SIGNATURE, DEVICE_CERT_VALIDITY_DAYS, DEVICE_CHILDREN_BATCH_MAX, DEVICE_DEFINITIVE_REFUSALS_BEFORE_DELETE, DEVICE_DO_ACTIONS, DEVICE_ENROLLMENT_TTL_MS, DEVICE_HISTORY_ENERGY_KEY, DEVICE_HISTORY_ORPHAN_DELETE_MAX, DEVICE_HISTORY_ORPHAN_LIST_MAX, DEVICE_HISTORY_QUERY_MANY_MAX_ITEMS, DEVICE_NONCE_TTL_MS, DEVICE_PROFILES, DEVICE_RAMP, DEVICE_REFRESH_REFUSAL_PREFIX, DEVICE_RESTORE_RETRY_CONCURRENCY, DEVICE_RESTORE_RETRY_DELAYS_MS, DEVICE_SAN_CREDENTIAL_PREFIX, DEVICE_SAN_USER_PREFIX, DEVICE_SCOPED_CAPS, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_SIGNATURE_MESSAGE_VERSION, DEVICE_STATE_READERS, DEVICE_STATUS_METHOD, DEVICE_TOMBSTONE_RETENTION_MS, DEVICE_TYPE_CONTROL_KIND, DEVICE_TYPE_DO_CAPS, DEVICE_TYPE_INFO, DISPLAY_PREFERENCES, DISPLAY_PRESETS, DOORBELL_RISE_DEBOUNCE_MS, DataStoreDatabaseSchema, EngineInfoSchema as DataStoreEngineInfoSchema, DatabaseSnapshotRequestSchema, DatabaseSnapshotResultSchema, DatabaseSnapshotTableSchema, DatabaseSnapshotTargetsSchema, DatabaseSnapshotWrittenSchema, DayNightModeSchema, DayNightOptionsSchema, DayNightSettingsPatchSchema, DayNightStatusSchema, DeclarationRefusedError, DeclareCollectionInputSchema, DeclareKindResultSchema, DeclaredDevices, DecodedAudioChunkSchema, DeleteIntegrationResultSchema, DerivativeHelperSpecSchema, DetailCropConventionSchema, DetectionCatalogClassMapSchema, DetectionSourceSchema, DetectionSourcesSchema, DetectionTriggerFilter, DeviceAdminLinkSchema, DeviceCaStatusSchema, DeviceCertificateLoginMethodSchema, DeviceCertificateSettingsSchema, DeviceChallengeResultSchema, DeviceChallengeSchema, DeviceCodeSeveritySchema, DeviceConfig, DeviceCredentialSchema, DeviceCredentialStatusSchema, DeviceDataEntrySchema, DeviceDiscoveryStatusSchema, DeviceEnrollProofSchema, ExposeInputSchema as DeviceExportExposeInputSchema, DeviceExportStatusSchema, UnexposeInputSchema as DeviceExportUnexposeInputSchema, DeviceFeature, DeviceHistoryKindSchema, DeviceHistoryOrphanDeleteRefusalSchema, DeviceHistoryOrphanReasonSchema, DeviceHistoryProducerKindSchema, DeviceHistoryRefusalReasonSchema, DeviceHistoryResolutionSchema, DeviceHistoryStatusSchema, DeviceHistorySubjectSchema, DeviceInfoSchema, DeviceModelChoiceSchema, DeviceNetworkStatsSchema, DevicePlatformSchema, DeviceProofInputSchema, DeviceRecommendationSchema, DeviceRefusalReasonSchema, DeviceRefusalSchema, DeviceRemovedInputSchema, DeviceRemovedResultSchema, DeviceRestoreRetryScheduler, DeviceRole, DeviceRuntimeState, DeviceSelectorSchema, DeviceSignaturePurposeSchema, DeviceStatusSchema, DeviceTombstoneSchema, DeviceType, DiagnosticIdSchema, DiagnosticWindowPatchSchema, DiagnosticWindowSchema, DiscoveredChildDeviceSchema, DiscoveredChildStatusSchema, DiscoveredDeviceSchema, DiscoveredTargetSchema, DishwasherAccessSchema, DishwasherAvailabilitySchema, DishwasherOperationStateSchema, DishwasherOptionDescriptorSchema, DishwasherOptionsSchema, DishwasherProgramSchema, DishwasherStateSchema, DishwasherStatusSchema, DishwasherValueSchema, DiskReconcileJobSchema, DisposerChain, DoorbellPressEventSchema, DoorbellStatusSchema, EMBEDDING_MODEL_FAILED, EMBEDDING_REQUIREMENTS_FAILED, EMBEDDING_REQUIREMENTS_UNAVAILABLE, EMPTY_AUTOMATION_STATE, ESTIMATE_COMPUTE_RATIO_MAX, ESTIMATE_COMPUTE_RATIO_MIN, EVENTFUL_CAP_NAMES, EVENT_DENSITY_BATCH_MAX, EVENT_KIND_BY_CAP, EVENT_KIND_LABELS, EVENT_KIND_LABEL_KEYS, EVENT_OWNER_TYPES, EVENT_PAD_MS, EVENT_TAXONOMY, EXPORT_DENSE_MAX_RANGES, EXPRESSION_BUILTINS, EXPRESSION_BUILTIN_NAMES, EXPRESSION_COMPILE_CACHE_CAPACITY, EXPRESSION_IDENTIFIER_RE, EXPRESSION_INJECTED_NOW, EXPRESSION_OUTPUTS, EXTENSION_HOST_DEVICE_TYPES, EXTENSION_SLOTS, EXTENSION_SLOT_IDS, EXTENSION_SLOT_LISTING_METHOD, EXTENSION_SLOT_REF_SEPARATOR, EffectiveDeviceShareSchema, EffectiveNodeShareSchema, EffectiveSharesSchema, EffectiveTuningSchema, EgressEncodeSchema, EgressRateControlSchema, EgressTranscodeRequestSchema, EgressTranscodeSchema, ElementConfigStore, EmbeddingFailedModelSchema, EmbeddingFailedRequirementSchema, EmbeddingInfoSchema, EmbeddingRefusalCodeSchema, EmbeddingResultSchema, EmbeddingTowerSchema, EncodeProfileSchema, EnrichedWidgetMetadataSchema, EnrollSelfInputSchema, EntryDescriptorSchema, EntryKindInfoSchema, EntryViewSchema, EnumSensorDateTimeFormatSchema, EnumSensorStatusSchema, ErrorCodeSchema, ErrorI18nPayloadSchema, EventCategory, EventDensityBucketSchema, EventDensityForDeviceSchema, EventEmitterStatusSchema, EventFireSchema, EventKindCategorySchema, EventKindDescriptorSchema, EventKindIconSchema, EventKindSchema, EventKindsForDeviceSchema, EventMediaArtifactSchema, EventMediaCoverageSchema, EventMediaKindSchema, EventMediaProductionSchema, EventOwnerTypeSchema, EventSourceType, ExportBytesSchema, ExportClipSubjectSchema, ExportDenseRangeSchema, ExportDenseSchema, ExportDownloadSchema, ExportFootageSubjectSchema, ExportOptionsSchema, ExportRecordSchema, ExportSetupFieldSchema, ExportSetupSchema, ExportSpeedSchema, ExportStateSchema, ExportSubjectSchema, ExportTimelapseSchema, ExposedDeviceSchema, ExposureModeSchema, ExpressionBindingSourceSchema, ExpressionEvalError, ExpressionFieldBindingSchema, ExpressionGlobalBindingSchema, ExpressionHelperSpecSchema, ExpressionLiteralBindingSchema, ExpressionParseError, ExpressionSourceSchema, ExtensionCandidateSchema, ExtensionCandidatesSchema, ExtensionSetResultSchema, ExtensionSetSlotInputSchema, ExtensionSlotActivationSchema, ExtensionSlotIdSchema, ExtensionSlotRefInputSchema, ExtensionSlotRowSchema, ExtensionSlotSourceSchema, ExtensionSlotStateSchema, ExtensionSlotUnreachableSchema, ExtensionSlotValueSchema, ExtensionSourceAvailabilitySchema, ExtensionSourceHealthSchema, ExtensionSourceSchema, ExternalIdentityKeySchema, ExternalIdentitySchema, FACE_RESCORE_INTERVAL_FIELD, FACE_RESCORE_INTERVAL_KEY, FACE_RESCORE_INTERVAL_MIN_RUNNING, FACE_RESCORE_SECTION_ID, FAN_OUT_CONCURRENCY, FEEDER_EXAMPLE_ADDON_ID, FEEDER_EXAMPLE_HA_DEVICE_ID, FFMPEG_PATH_ENV, FIRST_LEVEL_MACRO_CLASSES, FULL_IMAGE_BBOX, FailureContributionSchema, FailureCounters, FailureReasonCountSchema, FanControlStatusSchema, FanDirectionSchema, FeatureManifestSchema, FeatureProbeStatusSchema, FieldClaimModeSchema, FieldClaimSchema, FilterRequiredError, FloodStatusSchema, Fmp4BoxSplitter, ForeignSecretMarkerError, FrameHandleSchema, FrameInputSchema, FrameLazyCountersSchema, FrameLazyMetricsSchema, G711_SCALE_CORRECTION_DB, GROUP_TEMPLATES, GROUP_TEMPLATE_IDS, GasStatusSchema, GetLoggingSettingsInputSchema, GetStreamWithCodecInputSchema, GlobalMetricsSchema, GridLayoutPatchSchema, GridLayoutViewSchema, GroupActiveSchema, GroupCommandResultSchema, GroupCommandsSchema, GroupHelperSpecSchema, GroupStatusSchema, GroupTemplateIdSchema, HAP_AUDIO_BASE, HAP_AUDIO_BITRATE_KBPS, HAP_AUDIO_VBV_KBITS, HAP_KEYFRAME_INTERVAL_SEC, HF_BASE_URL, HF_REPO, HISTORY_BUCKET_MS, HISTORY_CATALOG, HISTORY_DEFAULT_MIN_INTERVAL_MS, HISTORY_FAST_MS, HISTORY_ITEM_CATALOG, HISTORY_NONE_CAPS, HISTORY_SLOW_MS, HISTORY_TIERS, HISTORY_UNIT_LABELS, HOURS_PER_DAY, HOUR_MS, HUB_ADDRESS_ROLES, HUB_MDNS_QUERY_NAME, HUB_MDNS_ROLE, HUB_MDNS_SERVICE_TYPE, HUB_MDNS_TXT_KEYS, HUB_VIEWER_MOUNT, HWACCEL_OPTIONS, HardwareClassIdSchema, HealthStatusSchema, HeatingValveStatusSchema, HelperMemberSchema, HelperSpecSchema, HfModelResolutionSchema, HistoryPointSchema, HistoryResolutionEnum, HttpsLeafInfoSchema, HubAddressRoleSchema, HumidifierStatusSchema, HumiditySensorStatusSchema, HvacModeSchema, ICON_CATALOG_SOURCE, ICON_CATEGORIES, ICON_ENTRIES, ICON_KEYS, ICON_VIEWER_MODULES, IDLE_ACTION_STATUS, INFERENCE_DEVICE_EXCLUSION_REASONS, INITIAL_PULSE, INITIAL_SPAN, INTEGRAL_OUTPUTS, INTERNAL_ACTION_PREFIX, INVERTIBLE_CAPS, IconKeySchema, ImageContractSchema, ImageContractStateSchema, ImageRotateSchema, ImageSettingsOptionsSchema, ImageSettingsPatchSchema, ImageSettingsStatusSchema, ImageStatusSchema, ImportModelBundleInputSchema, ImportModelBundleResultSchema, InferenceDeviceExclusionReasonSchema, IngestOwnerSchema, InstalledPackageSchema, IntegralHelperSpecSchema, IntegrationLiteSchema, IntegrationSessionReporter, IntegrationWithStateSchema, IntercomAbilitySchema, IntercomStatusSchema, InvalidRecordError, KEYCHAIN_MAX_REFS_PER_CALL, KEYCHAIN_RESET_CONFIRMATION, KEYCHAIN_RESET_TRIGGER_ACTOR, KNOWN_CAP_NAMES, KWH_PER_WATT_MS, KeptReasonSchema, KeyEventSchema, KeychainAdminSecretSchema, KeychainAuditActionSchema, KeychainAuditEntrySchema, KeychainKeySourceKindSchema, KeychainKeySourceSchema, KeychainResetRecordSchema, KeychainResolveEntrySchema, KeychainResolveResultSchema, KeychainSecretMetaSchema, KeychainSecretUsageSchema, KeychainStateSchema, KeychainStatusSchema, KeychainUnavailableReasonSchema, KeychainWriteRefusedError, LABEL_SUPPLY_MACRO, LABEL_SUPPLY_STEP_IDS, LABEL_SUPPLY_VOCABULARIES, LEGACY_READ_ONLY_CONFIG_KEY, LIGHT_SHARED_CAPS, LINKED_DEVICES_SLOT, LINKED_LABEL_STEP_PREFIX, LLM_PROFILE_KIND_PATTERN, LOAD_CONTRIBUTION_ATTRIBUTIONS, LOAD_CONTRIBUTION_ROLES, LOCATION_DESCRIPTION_MAX, LOCATION_ICON_FALLBACK, LOG_CHANNEL_TICK_MS, LOG_LEVEL_RANK, LTS_SCOPE_CLASS_SEPARATOR, LabelAttributionSchema, LabelDefinitionSchema, LabelTierSchema, LatencySourceSchema, LawnMowerActivitySchema, LawnMowerControlStatusSchema, LedgerWalkDeviceReportSchema, LedgerWalkInputSchema, LedgerWalkRefusalSchema, LedgerWalkReportSchema, LedgerWalkSkipCountsSchema, LedgerWalkSkipReasonSchema, LegacyStorageLocationDefaultSchema, LinkedDeviceSchema, LinkedDevicesModeSchema, LinkedDevicesSlotValueSchema, ListNodeBenchmarkResultsInputSchema, ListTrackRelationsInputSchema, ListTrackRelationsResultSchema, LiveViewerCountSchema, LlmDefaultSchema, LlmDefaultSelectorSchema, LlmDownloadProgressSchema, LlmErrorCodeSchema, LlmGenerateBaseInputSchema, LlmGenerateErrSchema, LlmGenerateOkSchema, LlmGenerateResultSchema, LlmImageSchema, LlmListModelsErrorCodeSchema, LlmListModelsInputSchema, LlmListModelsResultSchema, LlmModelFeaturesSchema, LlmModelInfoSchema, LlmNodeModelSchema, LlmProfileFieldSchema, LlmProfileKindDescriptorSchema, LlmProfileKindSchema, LlmProfileSchema, LlmProviderConfigSchema, LlmProviderWidgetSchema, LlmRefusalSourceSchema, LlmRetryPolicySchema, LlmRuntimeAppleCompleteInputSchema, LlmRuntimeCancelInputSchema, LlmRuntimeCompleteInputSchema, LlmRuntimeDiskUsageSchema, LlmRuntimeNodeSchema, LlmRuntimeStatusSchema, LlmTimeoutDefaults, LlmUsageRollupSchema, LlmUsageSchema, LoadBalancingSharesInputSchema, LoadContributionSchema, LocateSegmentResultSchema, LocationDescriptionAssignmentSchema, LocationIconAssignmentSchema, LocationStatSchema, LockControlStatusSchema, LockStateSchema, LogChannelApplyResultSchema, LogChannelDescriptorSchema, LogChannelGate, LogChannelLevelSchema, LogChannelRegistry, LogChannelWindowPatchSchema, LogChannelWindowSchema, LogChannelWindowStateSchema, LogEntrySchema, LogLevelSchema, LogReadCapabilitiesSchema, LogReadEntrySchema, LogReadQuerySchema, LogReadResultSchema, LogStreamEntrySchema, LoggingEffectiveSchema, LoggingExplicitSchema, LoggingLevelLayerSchema, LoggingLevelSourceSchema, LoggingScopeKindSchema, LoggingSettingsPatchSchema, LoggingSettingsStateSchema, LoginMethodContributionSchema, LoginStageEnum, LtsBucketSchema, MACRO_LABELS, MASK_EMITTING_POSTPROCESSORS, MASK_SUPPLY_STEP_IDS, MAX_ARCHIVED_DEBUG_NOTES, MAX_BIRTH_DECISION_RECORDS, MAX_BIRTH_LATENCY_PROXY_MS, MAX_CAMERA_SENSORS, MAX_CLIP_EVENT_IDS, MAX_CLIP_LABELS, MAX_COMPOSITION_CODE_LENGTH, MAX_COMPOSITION_FEATURES, MAX_COMPOSITION_FIELDS_PER_FEATURE, MAX_COMPOSITION_ITEMS, 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, MAX_HELPER_MEMBERS, MAX_KEYS, MAX_REASONS_PER_KEY, MAX_REQUEUED_BUCKETS_PER_SERIES, MAX_SENSOR_TRIGGER_DEVICES, MAX_TRACE_KEEP, MAX_TRACK_DEBUG_NOTE_LEN, MAX_TRACK_PURITIES, MAX_TRACK_RELATIONS, MEDIA_OWNER_TYPES, MEDIA_PRESENCE_OWNER_KINDS, METHOD_ACCESS_MAP, METHOD_DEVICE_SELECTORS, MINUTES_PER_DAY, MINUTE_MS, MIN_CUSTOM_MINUTES, MIN_SCRUBBED_LENGTH, MIN_SESSIONS_PER_DEVICE_RANGE, MODEL_FORMATS, MODEL_HOSTING, MODEL_PROVIDER_IDS, MOTION_CLOSE_AFTER_MS, MOTION_CROP_DISPATCH_KEY, MOTION_CROP_MAX_REGIONS, MOTION_CROP_MOTION_PAD, MOTION_CROP_TRACKED_PAD, MOTION_SOURCE_LABELS, MOTION_SPAN_TIMEOUT_MS, MOTION_TRIGGER_FEATURE, ManagedModelCatalogEntrySchema, ManagedModelExtraFileSchema, ManagedModelRefSchema, ManagedRuntimeConfigSchema, MaskGridDimsSchema, MaskGridShapeSchema, MaskLineShapeSchema, MaskPointSchema, MaskPolygonShapeSchema, MaskPolygonVerticesSchema, MaskRectShapeSchema, MaskShapeKindSchema, MaskShapeSchema, MediaFileInfoSchema, MediaFileKindEnum, MediaFileRefSchema, MediaFileSchema, MediaPlayerRepeatSchema, MediaPlayerStateSchema, MediaPlayerStatusSchema, MediaPresenceOwnerKindSchema, MediaRelocateModeSchema, MeshLeafInfoSchema, MeshPeerSchema, MeshStatusSchema, MeterStatusSchema, MethodAccessSchema, MigrateDeviceResultSchema, MigrateSwitchOutcomeSchema, MigrateSwitchReportSchema, ModelBundleFileSchema, ModelCatalogEntrySchema, ModelConvertInputSchema, ModelConvertMetadataSchema, ModelDistributeInputSchema, ModelDistributeResultSchema, ModelExtraFileSchema, ModelFormatEntrySchema, ModelFormatPrecisionSchema, ModelFormatsSchema, ModelLicenseSchema, ModelOnDiskStateSchema, ModelPinChangeSchema, ModelProviderIdSchema, ModelSubstitutionSchema, ModelVariantGroupSchema, MotionAnalysisResultSchema, MotionEventSchema, MotionOnMotionChangedDataSchema, MotionRegionSchema, MotionSourceEnum, MotionSourcesSchema, MotionStatusSchema, MotionTriggerRuntimeStateSchema, MotionTriggerStatusSchema, MotionTriggeredBySchema, MotionZoneOptionsSchema, MotionZonePatchSchema, MotionZoneRegionSchema, MotionZoneStatusSchema, BrokerInfoSchema$1 as MqttBrokerInfoSchema, StatusSchema as MqttBrokerStatusSchema, MutationFilterSchema, N100_IGPU_CLOCK_MHZ, N100_IGPU_EU, 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_SCENE_BUDGET_FIELD, NATIVE_LEASE_SCENE_BUDGET_KEY, NATIVE_LEASE_SECTION_ID, NATIVE_LEASE_TILE_BUDGET_FIELD, NATIVE_LEASE_TILE_BUDGET_KEY, NAVIGATION_ACTION_CATALOG, NAVIGATION_LIGHT_LEVEL_MAX, NAVIGATION_LIGHT_LEVEL_MIN, NC_ALARM_CONTROLLABLE_CAPS, NC_ALARM_DEFAULT_PROFILE_ID, NC_ALARM_DEFAULT_PROFILE_NAME, NC_ALARM_DEFAULT_TRIGGERED_DURATION_SEC, NC_ALARM_DELAY_FIELDS, NC_ALARM_DELAY_MAX_SEC, NC_ALARM_NONBLOCKING_MAX, NC_ALARM_NOTIFY_FIELDS, NC_ALARM_OPENING_EVENT_KINDS, NC_ALARM_SENSORS_MAX, NC_ALARM_SYSTEM_DEFAULT_DELAYS, NC_ALARM_SYSTEM_EVENT_KINDS, NC_ALARM_TRIGGERED_MAX_SEC, NC_AUDIO_CONFIRM_HITS_DEFAULT, NC_AUDIO_CONFIRM_HITS_MAX, NC_AUDIO_CONFIRM_HITS_MIN, NC_AUDIO_CONFIRM_WINDOW_MAX_SEC, NC_AUDIO_CONFIRM_WINDOW_MIN_SEC, NC_AUDIO_CONFIRM_WINDOW_SEC_DEFAULT, 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_BATTERY_CONSUMABLE_SYSTEM_EVENT_KINDS, NC_CAMERA_SCOPE_CAP_NAME, NC_CLIP_POST_ROLL_DEFAULT_SEC, NC_CLIP_PRE_ROLL_DEFAULT_SEC, NC_CLIP_RETENTION_MAX_SEC, 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_CONSUMABLE_LOW_PERCENT_DEFAULT, NC_CONSUMABLE_LOW_PERCENT_MAX, NC_CONSUMABLE_SYSTEM_EVENT_KINDS, NC_DEFAULT_SNOOZE_MINUTES, NC_GROUPING_DEFAULT_SEC, NC_GROUPING_MAX_SEC, NC_GROUPING_MIN_SEC, NC_HISTORY_LIMIT_DEFAULT, NC_HISTORY_LIMIT_MAX, NC_LEGACY_SYSTEM_EVENT_KINDS, NC_MAX_PER_TRACK_IMMEDIATE, NC_MEDIA_IMAGE_MODES, NC_OCCUPANCY_DEFAULTS, NC_RULE_CLEARABLE_KEYS, NC_RULE_EDITOR_SECTION_ORDER, NC_RULE_KIND_SPECS, NC_RULE_RETIRED_CLEAR_KEYS, NC_RULE_SECTIONS, NC_SENSOR_RAISED_FIELD_BY_KIND, NC_SENSOR_TRANSITION_KINDS, NC_SENSOR_TRANSITION_NEVER_FIRES_WARNING, NC_SENSOR_TRANSITION_UNSUPPORTED_REASON, NC_SERVER_PACKAGE_NAME, NC_SNOOZE_MAX_MINUTES, NC_STATE_SUMMARY_SECTION_IDS, NC_SYSTEM_DELIVERY, NC_SYSTEM_EVENT_CLASS_SPECS, NC_SYSTEM_EVENT_CONDITION_FILTER_KEYS, NC_SYSTEM_EVENT_FAMILIES, NC_SYSTEM_EVENT_FAMILY, NC_SYSTEM_EVENT_FAMILY_FILTERS, NC_SYSTEM_EVENT_FILTER_KEYS, NC_SYSTEM_EVENT_KIND_GROUP_SPECS, NC_SYSTEM_EVENT_SUMMARY_FAMILIES, NC_SYSTEM_RULE_KINDS, NC_TAXONOMY, NC_TEMPLATE_HELD_BACK_SYSTEM_EVENT_KINDS, NC_TEMPLATE_VARS, NC_UPDATE_EVENT_PACKAGE_NAMES, NETWORK_LINK_TYPES, NETWORK_LINK_UNKNOWN, NODE_BENCHMARK_DEFAULTS, NODE_COLOR_IDS, NO_MEASURED_CAPACITY, NUMERIC_AGGREGATES, NativeCropBboxSchema, NativeCropRefSchema, NativeCropResultSchema, NativeDetectionSchema, NativeLeaseAdmissionSchema, NativeLeaseSettingsSchema, NativeObjectClassEnum, NativeObjectDetectionOptionsSchema, NativeObjectDetectionRuntimeStateSchema, NativeObjectDetectionSettingsPatchSchema, NativeObjectDetectionStatusSchema, NativeObjectGeometryEnum, NavigationActionEntrySchema, NavigationActionIdSchema, NavigationEntryKindSchema, NavigationFeaturesSchema, NavigationLightModeSchema, NavigationModeSchema, NavigationMoveCommandSchema, NavigationPointSchema, NavigationRuntimeStateSchema, NavigationStatusSchema, NcActionBindingSchema, NcAlarmBlockingEditSchema, NcAlarmBlockingSchema, NcAlarmConfigSchema, NcAlarmCreateProfileInputSchema, NcAlarmModeCoverageSchema, NcAlarmModeDelaysEditSchema, NcAlarmModeDelaysSchema, NcAlarmModeDeviceListSchema, NcAlarmNonBlockingEditSchema, NcAlarmNonBlockingSchema, NcAlarmPostTriggeredActionSchema, NcAlarmProfileIdInputSchema, NcAlarmProfileMetaSchema, NcAlarmProfilesViewSchema, NcAlarmRenameProfileInputSchema, NcAlarmSecureOnArmEditSchema, NcAlarmSecureOnArmOffSchema, NcAlarmSensorReadingSchema, NcAlarmSensorStateSchema, NcAlarmSensorsInputSchema, NcAlarmSensorsSchema, NcAlarmSettingsPatchSchema, NcAlarmSettingsSchema, NcAlarmSkipReasonSchema, NcAlarmSkippedDeviceSchema, NcAudioConditionSchema, NcClipRetentionAskSchema, NcClipRetentionPlanSchema, NcConditionDescriptorSchema, NcConditionsSchema, NcConfirmExpectSchema, NcConfirmSchema, NcCrossingSchema, NcDeliverySchema, NcDeviceStateConditionSchema, NcHistoryEntrySchema, NcHistoryFilterSchema, NcHistoryRecordKindSchema, NcHistoryStatusSchema, NcHistorySubjectSchema, NcHookBindingsSchema, NcLegacyRuleActionSequenceSchema, NcLinkedCameraModeSchema, NcMediaFrameSchema, NcMediaImageSchema, NcMediaPolicySchema, NcOccupancyConditionSchema, NcPlateMatcherSchema, NcRuleActionSchema, NcRuleActionSequenceSchema, NcRuleActionsSchema, NcRuleClearableKeySchema, NcRuleInputSchema, NcRuleKindSchema, NcRuleLastRunSchema, NcRuleLastRunsSchema, NcRuleNotificationButtonSchema, NcRulePatchSchema, NcRuleSchema, NcRuleTargetSchema, NcRuleUpdateInputSchema, NcSceneConditionSchema, NcScheduleSchema, NcScheduleWindowSchema, NcSensorTransitionSchema, NcSharedSequenceInputSchema, NcSharedSequenceSchema, NcSnoozeInputSchema, NcSnoozeSchema, NcSnoozeScopeSchema, NcSnoozeSuppressedSchema, NcStateSummaryPreviewRowSchema, NcStateSummaryPreviewSchema, NcStateSummaryPreviewSectionSchema, NcStateSummarySectionIdSchema, NcStateSummarySplitSchema, NcSystemEventConditionSchema, NcSystemEventDeliveryModeSchema, NcSystemEventDeliverySchema, NcSystemEventKindSchema, NcTaxonomyEntrySchema, NcTaxonomySchema, NcTemplateFamilySchema, NcTemplateFieldSchema, NcTemplatePreviewInputSchema, NcTemplatePreviewSchema, NcTemplateVarContextSchema, NcTemplateVarDescriptorSchema, NcTemplateVarGroupSchema, NcTemplateVarKindSchema, NcTestResultSchema, NcThrottleGranularitySchema, NcThrottleSchema, NcZoneConditionSchema, NetworkAccessStatusSchema, NetworkAddressSchema, NetworkEndpointSchema, NetworkLinkStatusSchema, NetworkTunnelStartedDataSchema, NoCallerError, NodeBenchCellSchema, NodeBenchClipSchema, NodeBenchDeviceCellSchema, NodeBenchFingerprintSchema, NodeBenchLimitSchema, NodeBenchPipelineCellSchema, NodeBenchProgressSchema, NodeBenchRampStepSchema, NodeBenchRunnerInputSchema, NodeBenchRunnerStateSchema, NodeBenchRunnerStatusSchema, NodeBenchmarkCandidatesSchema, NodeBenchmarkDevicePlanSchema, NodeBenchmarkEndReasonSchema, NodeBenchmarkManifestSchema, NodeBenchmarkMovingCameraSchema, NodeBenchmarkPhaseSchema, NodeBenchmarkPlanSchema, NodeBenchmarkPreflightSchema, NodeBenchmarkRefusalKindSchema, NodeBenchmarkRefusalSchema, NodeBenchmarkResultSchema, NodeBenchmarkResultViewSchema, NodeBenchmarkRunSchema, NodeBenchmarkStateSchema, NodeBenchmarkStatusSchema, NodeBenchmarkStayingCameraSchema, NodeColorIdSchema, NodeDeviceChangeSchema, NodeDirectoryEntrySchema, NodeDirectorySchema, NodeHttpsStateSchema, NodeRecommendationSchema, NotificationActionIconSchema, NotificationActionSchema, NotificationFormatSchema, NotificationSchema, NotifierStatusSchema, NumericSensorStatusSchema, OAUTH_LANDING_PATH, OAUTH_LANDING_REASONS, OBJECT_DETECTION_STEP_ID, OPERATOR_WRITTEN_STALE_MS, OPS_LOG_DEFAULT_LIMIT, OPS_LOG_RING_DEFAULT_MAX, OVERFLOW_REASON, OVERLAY_LAYERS, OWNER_ONLY_EVENT_CATEGORIES, OauthIntegrationDescriptorSchema, ObjectEventSchema, OccupancyBurstRefusalSchema, OccupancyLookAnswerSchema, OccupancyLookRefusalSchema, OccupancyLookRequestSchema, OidcConnectionSchema, OidcConnectionUpdateInputSchema, OnboardFieldSupportSchema, OnboardRecordTrackSchema, OnboardScheduleSupportSchema, OnboardStorageSchema, OnboardStorageVolumeSchema, OpsLogDomainSchema, OpsLogEntrySchema, OpsLogOpSchema, OpsLogQueryInputSchema, OpsLogReasonSchema, OrchestratorMetricsSchema, OrphanDeviceDataSchema, OsdNamedTemplateSchema, OsdOverlayKindEnum, OsdOverlayPatchSchema, OsdOverlaySchema, OsdPositionEnum, OsdRenderOutcomeEnum, OsdRenderResultSchema, OsdSlotBindingSchema, OsdSlotViewSchema, OsdSourceOptionSchema, OsdSourceSchema, OsdSourceValueTypeEnum, OsdStatusSchema, OsdTemplateBindingSchema, OsdTemplateFormatSchema, OsdTemplatePickSchema, OsdTemplateTokenKindSchema, OverrideDraftSchema, PALETTE_BACKGROUNDS, PALETTE_ENTRY_IDS, PALETTE_MIN_CONTRAST, PALETTE_MIN_DELTA_E, PALETTE_MIN_DELTA_E_MARK, PALETTE_PRESET_IDS, PEER_BYTES_CHUNK_BYTES, PEER_BYTES_MAX_OUTSTANDING, PEER_BYTES_STALL_MS, PEER_BYTES_TICKET_TTL_MS, PENDING_BLOCK_ID, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, PHOENIX_780M_CU, PIPELINE_ANALYTICS_CAP_NAME, PIPELINE_FLOW_CAPABILITY_NAMES, PIPELINE_OWNER_CAPABILITY_NAMES, PIPELINE_RAMP, PLUG_APPLIANCE_TYPES, PLUS_CATALOG_CLASS_FLOORS, PLUS_CATALOG_STOCK_CLASS_FLOORS, PLUS_CATALOG_TO_MACRO, PLUS_CATALOG_UNMAPPED_LABELS, PREFERENCES_MAX_DEVICE_ID_LENGTH, PREFERENCES_MAX_NAMESPACES, PREFERENCES_MAX_VALUE_BYTES, PREFERENCES_NAMESPACE_PATTERN, PREFERENCES_SELF_SCOPE, PRIVACY_MASK_CAP_NAME, PROVIDER_KIND_CAP_NAMES, PROVIDER_PIN_FIELD, PUBLIC_ENDPOINT_HTTP_REASON, PYTHON_SCRIPT, PackageInstallationSchema, PackageInstallationsSchema, PackageLlmVerdictSchema, PackageUpdateSchema, PackageVersionInfoSchema, PaletteRejectedError, ParkRefusalSchema, ParkTrackFrameResultSchema, ParkedFrameKindSchema, ParkedTrackFrameSchema, PasskeyLoginMethodSchema, PasskeySummarySchema, PcmSampleFormatSchema, PeerBytesTicketSchema, PerScopeBreakdownSchema, PetFeederStatusSchema, PickStreamPreferencesSchema, PickStreamRequirementsSchema, PickedCamStreamSchema, PipelineAssignmentSchema, PipelineDefaultStepSchema, PipelineEngineChoiceSchema, PipelineModelFormatStatusSchema, PipelineRunResultBridge, PipelineStepInputSchema, PipelineValidationIssueSchema, PipelineValidationResultSchema, PlaceholderReasonSchema, PlacementDeviceStatsSchema, PlacementNodeStatsSchema, PlacementStatsInputSchema, PlacementStatsSchema, PlaintextSecretError, PolygonPointSchema, PoolMemoryWatchdog, PowerMeterStatusSchema, PrecisionGopsSchema, PreferenceDeviceIdSchema, PreferenceNamespaceSchema, PreferenceRowSchema, PreferenceValueSchema, PreferencesChangedSinceInputSchema, PreferencesChangedSinceOutputSchema, PreferencesDeleteInputSchema, PreferencesDeleteOutputSchema, PreferencesGetInputSchema, PreferencesGetOutputSchema, PreferencesPutInputSchema, PreferencesPutOutputSchema, PreferencesSelfScopeSchema, PresenceStatusSchema, PressureSensorStatusSchema, PrivacyMaskOptionsSchema, PrivacyMaskPatchSchema, PrivacyMaskRegionSchema, PrivacyMaskShapeSchema, PrivacyMaskStatusSchema, ProbeTargetConfigResultSchema, ProfileRtspEntrySchema, ProfileSlotSchema, ProfileSlotStatusSchema, ProviderJobStateSchema, ProviderJobStatusSchema, ProviderMotionDataSchema, ProviderStatusSchema, PtzAutotrackRuntimeStateSchema, PtzAutotrackSettingsSchema, PtzAutotrackStatusSchema, PtzAutotrackTargetOptionSchema, PtzHomePresetSchema, PtzHomeReturnSchema, PtzMoveCommandSchema, PtzOptionsSchema, PtzPositionSchema, PtzPresetFunctionSchema, PtzPresetSchema, PtzStatusSchema, QUANTITY_BASE, QueryFilterSchema, RATE_CONTROL_RELAXED, RATE_CONTROL_TIGHT, REACHABILITY_FAILURES_TO_OFFLINE, REACHABILITY_POLL_INTERVAL_MS, REACHABILITY_PROBE_TIMEOUT_MS, RECALL_TIE, RECOGNITION_TYPES, RECORDING_AUDIO_TRIGGER_OFFERED_DBFS, RECORDING_EXPORT_MAX_READ_BYTES, RECORDING_SOURCE_CAMSTACK, RECORDING_SOURCE_CAMSTACK_ADDON, RECORDING_TIMELINE_BATCH_MAX, RECORDS_ERROR_CODES, RECORD_BATCH_MAX, RECORD_BATCH_MAX_BYTES, RECORD_CLASSES, RECORD_DATABASES, RECORD_DEFAULT_MAX_DATA_BYTES, RECORD_DELETE_BATCH, RECORD_ID_MAX_LENGTH, RECORD_MAX_DATA_BYTES, RECORD_MAX_INDEXES, RECORD_MAX_INDEX_FIELDS, RECORD_QUERY_MAX, RECORD_SECRET_COLLECTION_PREFIX, RECORD_SETTINGS_MAX_ROWS, RECORD_SWEEP_INTERVAL_MS, RECOVERY_CROP_MAX_SIDE_PX, RECOVERY_CROP_MIN_SIDE_PX, RECOVERY_CROP_PADDING_RATIO, RECOVERY_EDGE_MARGIN_PX, RECOVERY_FUSE_CONTAINMENT, RECOVERY_FUSE_IOU, RECOVERY_MAX_CROPS_PER_FRAME, RECOVERY_MAX_REGION_FRAME_FRACTION, RECOVERY_MIN_INTERVAL_MS, RECOVERY_MIN_UNCOVERED_FRACTION, RECOVERY_MOTION_MAX_AGE_MS, RECOVERY_VIEW_PX, REDACTED_SECRET, REFERENCE_COMPUTE, REFERENCE_MATCH_FRACTION, REMOVAL_RECONCILE_INTERVAL_MS, REMOVED_MODEL_IDS, REMOVE_LEAF, RESERVED_BINDING_NAMES, RESERVED_COLLECTION_SOURCES, RESET_PERIODS, RESTORED_CAP_NAMES, RETRAIN_REVIEW_ADJUSTED_IOU, RETRAIN_REVIEW_MATCH_IOU, RETRAIN_REVIEW_STATUSES, RETRAIN_REVISION_CONFLICT, REVALIDATE_AFTER_MS, ROLLING_SPANS, ROOM_EXAMPLE_MOTION_SOURCES, ROOM_EXAMPLE_TEMPERATURE_SOURCES, ROOM_OCCUPANCY_WINDOW_MS, ROOT_BUCKET_KEY, ROOT_CHILD_CONTAINMENT_MIN, ROOT_FACE_REFINE_INPUT_PX, ROOT_FACE_REFINE_SCALE, ROOT_SUPPLIABLE_STEP_IDS, RUNNING_POWER_START_DELAY_MS, RUNNING_POWER_STOP_DELAY_MS, RUNNING_POWER_THRESHOLD_WATTS, RUNNING_STATE_COLD, RUNTIME_DEFAULTS, RUNTIME_STATE_POLICY, RUNTIME_STATE_REFRESH_MISS_COOLDOWN_MS, RUNTIME_TO_FORMAT, RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, RawStateResultSchema, ReadGopBytesResultSchema, ReadSegmentBytesResultSchema, ReadWindowBytesResultSchema, ReadinessRegistry, ReadinessTimeoutError, ReadingQuantitySchema, RebuildObjectEmbeddingsRefusalSchema, RecentTracksPageSchema, RecentTracksQueryInput, RecommendationReasonSchema, RecordBodySchema, RecordFieldPathSchema, RecordIdSchema, RecordIndexSchema, RecordInputSchema, RecordKindDeclarationSchema, RecordKindNameSchema, RecordNotFoundError, RecordQueryInputSchema, RecordQueryResultSchema, RecordRetentionSchema, RecordSecretRefsSchema, RecordSecretUnavailableError, RecordTooLargeError, RecordTransactOpSchema, RecordTriggerSchema, RecordUniqueViolationError, RecordViewSchema, RecordWhereSchema, RecordWindowSchema, RecordingAvailabilityForDeviceSchema, RecordingAvailabilitySchema, RecordingBandAudioSchema, RecordingBandModeSchema, RecordingBandSchema, RecordingBandTriggersSchema, RecordingConfigSchema, RecordingDaysForDeviceSchema, RecordingDaysSchema, RecordingDeviceUsageSchema, RecordingLocationUsageSchema, RecordingManifestSchema, RecordingObjectTriggerClassSchema, RecordingOnboardOptionsSchema, RecordingOnboardPatchSchema, RecordingOnboardStatusSchema, RecordingPlaybackSchema, RecordingRangeSchema, RecordingReadSchema, RecordingRebalanceInputSchema, RecordingRebalanceMoveSchema, RecordingRebalancePlanSchema, RecordingRebalanceSkipReasonSchema, RecordingRebalanceSkipSchema, RecordingRetentionSchema, RecordingSignalRuntimeStateSchema, RecordingSignalStatusSchema, RecordingSourceAvailabilitySchema, RecordingSourceOptionsSchema, RecordingSourceSchema, RecordingStatusSchema, RecordingStorageModeSchema, RecordingStorageUsageSchema, RecordingTriggersSchema, RecordingWeekdaySchema, RecordsError, RedirectLoginMethodSchema, RelocatableMediaCountInputSchema, RelocatableMediaCountSchema, RelocateFootageClassSchema, RelocateFootageInputSchema, RelocateJobSchema, RelocateJobStateSchema, RelocateMediaInputSchema, RelocateResidueInputSchema, RelocateResidueSchema, RenderedAsSchema, RenewDeviceCertificateOutputSchema, RenewDeviceCertificateResultSchema, ReportMotionInputSchema, ReportedFailureContributionSchema, ReportedLoadContributionSchema, RequestCensusGroupSchema, RequestCensusProcedureSchema, RequestCensusSnapshotSchema, RequestCensusStatusSchema, RetrainAnnotationDraftSchema, RetrainAnnotationKindSchema, RetrainAnnotationSchema, RetrainAnnotationSourceSchema, RetrainArchiveResultSchema, RetrainArchiveTargetSchema, RetrainAssistProfileSchema, RetrainAssistResultSchema, RetrainAssistSubjectSchema, RetrainBoxReviewSchema, RetrainCollectionCreateResultSchema, RetrainCollectionRenameResultSchema, RetrainCollectionSchema, RetrainCopyRefusalSchema, RetrainCorpusFilterSchema, RetrainCorpusKpiCameraRowSchema, RetrainCorpusKpiSchema, RetrainCorpusPageFrameSchema, RetrainCorpusPageSchema, RetrainDatasetSelectionSchema, RetrainDatasetStatsSchema, RetrainDatasetVersionSchema, RetrainDismissedSchema, RetrainExportFilterSchema, RetrainExportLayoutSchema, RetrainFrameCandidateSchema, RetrainFrameListSchema, RetrainFrameOriginSchema, RetrainFrameReviewSchema, RetrainFrameSchema, RetrainFrameSelectionSchema, RetrainFrameWorkStateSchema, RetrainLlmAssistResultSchema, RetrainLlmProposalSchema, RetrainLlmReviewSchema, RetrainMacroClassSchema, RetrainOriginSchema, RetrainPipelineBoxSchema, RetrainReviewStatusSchema, RetrainStatusSchema, RetrainTrackSchema, RetrainTrainingCorpusResolveResultSchema, RetrainTrainingCorpusSelectionSchema, RetrainTransitionResultSchema, RevConflictError, RevokeOwnDeviceCertificateResultSchema, RingBuffer, RollingWindowSchema, RootStepSupplySchema, RtpSourceSchema, RtspRestreamEntrySchema, RunGate, RunnerBootCheckSchema, RunnerCameraConfigSchema, RunnerCameraDeviceUIFields, RunnerFrameSourceSchema, RunnerInferenceDeviceSchema, RunnerJumpStepProvisioningSchema, RunnerLocalLoadSchema, RunnerLocalMetricsSchema, RunnerRefusalSchema, RunningStateSourceSchema, RunningStateStatusSchema, 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, SECRET_CLEAR, SECRET_META, SECRET_REF_SCHEME, SENSOR_FEATURES, SENSOR_MAP, SERIAL_CAPACITY_CAMERA_FPS, SERIES_KINDS, SERVER_NAME_MAX_LENGTH, SERVER_NAME_SETTING_KEY, SESSION_LOST_ALERT_CATEGORY, SESSION_PLACEMENT_SETTING_KEY, SHARE_AFFINITY_TOLERANCE_SESSIONS, SHARE_SOURCE_SETTING_KEY, SHARE_VIEW_KINDS, SHARE_VIEW_MAX_DEVICES, SINGLE_HUB_ADDRESS_ROLES, SOURCE_CAPS, SOURCE_CAP_ACTIVE_FIELD, SOURCE_CAP_CHANGED_AT_FIELD, SOURCE_DEVICE_TYPES, SOURCE_INFO_METADATA_KEY, SSO_STATE_COOKIE, SSO_STATE_COOKIE_MAX_AGE_SEC, STATE_LABELS, STATE_LABEL_KEYS, STATIONARY_OVERLAY_STYLE, STATISTIC_STATS, STORAGE_ACCESS_FALLBACK, STORAGE_BYTES_PER_GB, STORAGE_LOCATION_MODES, STREAM_PROFILE_META, STREAM_QUALITY_LABELS, SUBJECT_PATH_DWELL_EPS, SUBJECT_PATH_FULL_FRAME_COVERAGE, SUBJECT_PATH_MAX_POINTS, SUB_DETECTION_TYPES, SYSTEM_CAP_NAMES, SYSTEM_SCOPE_DEVICE_METHODS, SceneCheckSchema, SceneConditionSchema, SceneConfirmSchema, SceneMonitorSchema, SceneMonitorStateSchema, SceneMonitorStatusForDeviceSchema, SceneMonitorStatusSchema, SceneReferenceSchema, SceneUnavailableSchema, SceneUncoveredPolicySchema, SceneVerdictSchema, ScopedTokenSchema, ScoredObjectEventSchema, ScriptRunnerStatusSchema, SearchResultSchema, SendEmailInputSchema, SendEmailResultSchema, SendResultSchema, SensorEventSchema, ServerBootModeSchema, ServerNameInfoSchema, ServerNameSchema, ServerPackageStatusSchema, ServerRollbackInfoSchema, ServerUpdateActionResultSchema, ServerUpdateCheckResultSchema, ServerUpdateOutcomeSchema, ServerUpdateStateSchema, SessionHealthTracker, SessionPlacementPolicySchema, SessionTriggerSchema, SetCameraSensorsInputSchema, SetLoggingSettingsInputSchema, SetShareSourceInputSchema, SetSiteLocationInputSchema, SetTrackPurityInputSchema, SetTrackPurityResultSchema, SetTrackRelationInputSchema, SettingsPatchSchema, SettingsRecordSchema, SettingsSchemaWithValuesSchema, SettingsUpdateResultSchema, ShareSourceSchema, ShareViewGrantSchema, ShareViewScopeSchema, ShareWeightsSchema, SiteLocationSchema, SiteLocationSourceSchema, SiteLocationStatusSchema, SiteZoneSchema, SmokeStatusSchema, SmtpStatusSchema, SnapshotImageSchema, SourceInfoSchema, SpatialDetectionSchema, SsoBridgeClaimsSchema, StaleDevicePinSchema, StartEmbeddedInputSchema, StartEnrollmentOutputSchema, StationaryObjectSchema, StatisticHelperSpecSchema, StatisticWindowSchema, AbortUploadInputSchema as StorageAbortUploadInputSchema, StorageAccessSchema, BeginDownloadInputSchema as StorageBeginDownloadInputSchema, BeginDownloadResultSchema as StorageBeginDownloadResultSchema, BeginUploadInputSchema as StorageBeginUploadInputSchema, BeginUploadResultSchema as StorageBeginUploadResultSchema, StorageCleanupInputSchema, StorageCleanupJobSchema, StorageCleanupPhaseSchema, StorageCleanupStatusInputSchema, StorageDrainProgressSchema, EndDownloadInputSchema as StorageEndDownloadInputSchema, StorageEvictionPolicySchema, FinalizeUploadInputSchema as StorageFinalizeUploadInputSchema, StorageKindSchema, StorageLocationDeclarationSchema, StorageLocationModeSchema, StorageLocationRefSchema, StorageLocationSchema, StorageLocationTypeSchema, StorageMigrationClassSchema, StorageMigrationDestinationsSchema, StorageMigrationDrainInputSchema, StorageMigrationFindingCodeSchema, StorageMigrationFindingSchema, StorageMigrationFootageMoveInputSchema, StorageMigrationInputSchema, StorageMigrationJobSchema, StorageMigrationLaneSchema, StorageMigrationLeaseInputSchema, StorageMigrationMediaMoveInputSchema, StorageMigrationModeSchema, StorageMigrationMoveProgressSchema, StorageMigrationMoveSchema, StorageMigrationMoverSchema, StorageMigrationParticipantSchema, StorageMigrationPhaseSchema, StorageMigrationPlanSchema, StorageMigrationResidueSchema, StorageMigrationSourcesSchema, StorageOccupancyReportSchema, ProviderInfoSchema as StorageProviderInfoSchema, ReadChunkInputSchema as StorageReadChunkInputSchema, StorageTableSchema, TestLocationResultSchema as StorageTestLocationResultSchema, WriteChunkInputSchema as StorageWriteChunkInputSchema, StoredRecordKindDeclarationSchema, StreamCodecSchema, StreamFormatSchema, StreamNetworkStatsSchema, StreamParamsOptionsSchema, StreamParamsStatusSchema, StreamProfileConfigSchema, StreamProfileOptionsSchema, StreamProfilePatchSchema, StreamProfileSchema, StreamSignalSchema, StreamSignalsStatusSchema, StreamSourceEntrySchema, StreamSourceSchema, SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, SuggestSharesInputSchema, SuggestSharesResultSchema, SuggestedDeviceShareSchema, SuggestedNodeShareSchema, SuppliedRootOutputSchema, SwitchStatusSchema, SystemHeldSecretNameSchema, SystemMetricsSchema, SystemMirror, TIMELAPSE_DENSE_FLOOR_SEC, TIMEZONES, TRACK_RELATIONS_DEFAULT_LIMIT, TRAINING_JOB_SCHEMA, TRAINING_RESULT_SCHEMA, TRANSCODE_DOWN_MAX_BITRATE_KBPS, TRANSCODE_DOWN_MAX_HEIGHT, TamperStatusSchema, TargetKindCapsSchema, TargetKindLevelSchema, TargetKindSchema, TargetSchema, TemperatureSensorStatusSchema, TerminalInstanceInfoSchema, TerminalLegacyCameraSchema, TerminalOutputBatchSchema, TerminalOutputEventSchema, TerminalProfileInfoSchema, TerminalSessionInfoSchema, TestConnectionResultSchema$1 as TestConnectionResultSchema, TestConnectionStatusEnum, TestResultSchema, ThresholdHelperSpecSchema, TimelapseRuleInputSchema, TimelapseRulePatchSchema, TimelapseRuleSchema, TimelapseTemplateSchema, ToastSchema, TokenScopeSchema, TopologyNodeSchema, TopologyProcessSchema, TopologyServiceSchema, TraceNodeOutcomeSchema, TraceValueSchema, TrackCascadeCountsSchema, TrackEnvelopeSchema, TrackFlagsPatchSchema, TrackFlagsSchema, TrackPlacementSchema, TrackProjectionSchema, TrackPuritySchema, TrackPurityValueSchema, TrackRelationKindSchema, TrackRelationRefusalSchema, TrackRelationSchema, TrackSchema, TrackSideSchema, TrackSourceSchema, TrackStateSchema, TrackZoneFilterSchema, TrackedDetectionSchema, TrainerSourceRefSchema, TrainingAcceleratorRefSchema, TrainingBaseModelSchema, TrainingCanarySchema, TrainingCanaryTargetSchema, TrainingCatalogDraftSchema, TrainingCorpusSelectionSchema, TrainingCredentialCheckSchema, TrainingEvalClassSchema, TrainingEvalReportSchema, TrainingEventSchema, TrainingExportDeviceTotalsSchema, TrainingExportSchema, TrainingExportSummarySchema, TrainingFailureReasonSchema, TrainingGpuOptionSchema, TrainingJobPlanSchema, TrainingJobRequestSchema, TrainingJobSchema, TrainingJobSpecSchema, TrainingJobStateSchema, TrainingLogLineSchema, TrainingPresetSchema, TrainingProgressPointSchema, TrainingProviderDefaultsSchema, TrainingProviderDescriptorSchema, TrainingProviderEntrySchema, TrainingProviderTypeSchema, TrainingProviderUpdateEntryInputSchema, TrainingRefusalReasonSchema, TrainingRegionOptionSchema, TrainingResultFileSchema, TrainingResultSchema, TrainingSplitPlanSchema, TrainingStageSchema, TransactRefusedError, TransportPlaneCountsSchema, TransportPlaneSchema, TurnServerSchema, UNATTRIBUTED_BUCKET_KEY, UNIT_TABLE, UNLOCK_CONFIRMATION, USE_ROOT_MODEL_DEFAULTS, USE_ROOT_MODEL_SETTING_KEY, UnindexedFilterError, UninstallNodeOutcomeSchema, UninstallNodeResultSchema, UninstallPackageResultSchema, UnitConversionError, UnknownRecordKindError, UnreleasedClaimSchema, UnstampedEventMediaCountSchema, UnstampedRowsSchema, UpdateBlockerSchema, UpdateIntegrationInputSchema, UpdateStatusSchema, UpdateUserInputSchema, UserRecordSchema, UserScopeSchema, UserSummarySchema, VECTOR_INDEX_DIM_CONFLICT, VIDEOCLIPS_MAX_OFFER_BYTES, VIDEOCLIPS_MAX_READ_BYTES, VIEWER_FEATURES, VIEWER_FEATURE_IDS, VISIT_MERGE_GAP_MS, VOCAB_TEMPLATES, VacuumControlStatusSchema, VacuumStateSchema, ValveStateSchema, ValveStatusSchema, VectorDeclareIndexInputSchema, VectorDeleteByFilterInputSchema, VectorDeleteInputSchema, VectorDeleteResultSchema, VectorFilterSchema, VectorGetInputSchema, VectorGetResultSchema, VectorItemSchema, VectorMatchSchema, VectorMetadataSchema, VectorMetricSchema, VectorQueryInputSchema, VectorQueryResultSchema, VectorStatsInputSchema, VectorStatsResultSchema, VectorUpsertInputSchema, VectorUpsertResultSchema, VendorLoginProxy, VibrationStatusSchema, VideoEncodeSchema, ViewerDeviceAllowSchema, ViewerFeatureIdSchema, ViewerTokenScopeSchema, WEBRTC_CLIMB_HOLD_CODES, WEBRTC_EGRESS_PROFILE, WEBRTC_TRY_BLOCKERS, WEEKLY_MASK_LENGTH, WELL_KNOWN_TABS, WELL_KNOWN_TAB_MAP, WaterHeaterStatusSchema, WeatherStatusSchema, WebrtcClimbHoldSchema, WebrtcLadderDecisionSchema, WebrtcSessionDebugSchema, WebrtcStreamChoiceSchema, WebrtcStreamTargetSchema, WebrtcTierFailureSchema, WhiteBalanceModeSchema, WidgetHostEnum, WidgetLoginMethodSchema, WidgetMetadataSchema, WidgetRemoteSchema, WidgetSizeEnum, WrapperActivationReadSchema, WrapperEvidenceSchema, WrapperIdentitySchema, WrapperKindSchema, YAMNET_TO_MACRO, ZoneCrossingDirectionSchema, ZoneCrossingSchema, ZoneKindEnum, ZoneRuleModeEnum, ZoneRuleSchema, ZoneRuleStageEnum, ZoneRulesArraySchema, ZoneSchema, ZoneScopeBreakdownSchema, __resetLogChannelRegistryForTests, acceleratorKindOf, accessoriesCapability, accessoryChildrenComplete, accessoryChildrenUnknown, accessoryStableId, actionSourceCapability, actionsCapability, actionsForBoundCaps, actionsForDevice, actionsForDeviceType, actionsForDevices, activateAlarmProfile, activeForReducer, actuatorMethodRow, addonCatalogHref, addonIdOfActionId, addonPagesCapability, addonPagesSourceCapability, addonRoutesCapability, addonSettingsCapability, addonWidgetsCapability, addonWidgetsSourceCapability, addonsCapability, adminUiCapability, advertisedHubOrigins, aggregateThroughputFactor, airQualitySensorCapability, alarmDeviceBlocksArming, alarmDeviceSecureOnArm, alarmPanelCapability, alarmPatchLanded, alarmProfileById, alertEpisodeId, alertEpisodeKind, alertEpisodePayload, alertNodeId, alertsCapability, allDoActions, allowedSuppliedEffect, ambientLightSensorCapability, annotateClipsWithEventLabels, appFlowLocation, appendTrace, applianceDeviceType, applianceExport, applyBlockingEdit, applyCropClassFloors, applyModeDelaysEdits, applyModeDeviceListEdit, applyModelBoundSettings, applyNonBlockingEdit, applySecureOnArmEdit, arithmeticDraft, armRemovalReconcile, arrayItemFieldPath, asBoolean, asJsonArray, asJsonObject, asNumber, asRecordsError, asString, assertTimelapseCadences, assertTransactScope, assertValidDeclaration, assignNodeColorId, audioAnalysisCapability, audioAnalyzerCapability, audioChunkBytesPerSample, audioCodecCapability, audioIsFailClosed, audioKindId, audioLabelChoices, audioMetricsCapability, audioModeOf, audioOrDefaults, audioPlanFromEncodeProfile, audioScaleEraOf, authProviderCapability, autoAssignProfiles, automationControlCapability, backupCapability, bareAddonId, baseUnitOf, batteryCapability, bestLocationMatch, binaryCapability, bindAddonActions, brightnessCapability, brokerCapability, bucketStartOf, buildActionSteps, buildAddonRouteProvider, buildAudioArgs, buildBenchStepTree, buildCapabilityLookup, buildDeviceAdminUrl, buildDeviceEnrollmentLink, buildDeviceSignatureMessage, buildEventKindDescriptor, buildFfmpegArgs, buildInputArgs, buildModelVariantGroups, buildNcTaxonomy, buildPlusCatalogClassMap, buildRoleScopes, buildSecretRef, buildSessionLostAlert, buildStreamParamsConfigSchema, buildSubjectPath, buildTriggerTrace, buildVideoArgs, buildViewerLink, builtCapabilityBlockers, bundledCamstack, buttonCapability, calendarEventLocalSpan, calendarEventOnLocalDay, calendarSourceCapability, calendarsCapability, cameraCredentialsCapability, cameraGridLayoutCapability, cameraOwnsMotionViaSensor, cameraPipelineConfigCapability, cameraScopedStepSettings, cameraSensorRefKey, cameraStreamsCapability, canConvertUnit, canonicalEgressPlan, canonicalIconKey, canonicalizeAppCallback, capabilityScopesOf, capacityForModel, capacitySessionsOf, carbonMonoxideCapability, cellsToRects, checkRoleAddress, claimedRequestOrigins, classifyBearerPrincipal, classifyCamerasForBenchmark, classifyFieldSource, classifyInferenceHardware, classifyRetrainReview, classifySecretWrite, classifyStoreError, classifyStream, classifyStreams, clearKnownSecrets, clearModelBoundOverrides, clearModelBoundSetting, climateControlCapability, clipEventLabelDepsFromApi, clipExportFailure, clipExportFailureOf, clipLabelsForWindow, clipReasonHeaderValue, cloneAlarmSettings, cloneStatefulExpressionMemory, clusterModelSettingKey, clusterStepSettingFieldsFor, clusterStepSettingKey, codecIsAccepted, collectHydratedFieldEntries, collectHydratedFieldValues, collectKeychainStoredKeys, collectMirrorSources, collectModelBoundKeys, collectSecretConfigKeys, collectSecretLeaves, collectSecretMarkerRefs, collectZodSecretPaths, colorCapability, colorForKind, commitWatchdogRestart, compareToTarget, compileExpression, compileExpressionSafe, compileHelper, compileKeyedArrayOverride, compilePulseOverride, compileScalarOverride, compileSpanOverride, composeSwitchedOff, composedDeviceRef, composedDeviceStableId, composerCapability, compositionEdges, compositionFeatureEnabled, compositionFieldKey, compositionFillStatus, compositionItemFieldPath, compositionReadKey, compositionSliceKey, compositionSourceKey, compositionSourceRefs, computeCapacityShares, computeScores, conditionDepth, conditionExclusionReason, conditionVisibleForKind, connectionTestCapability, connectivityCapability, consumableFormOf, consumableKindOf, consumableLowPercentOf, consumablesCapability, contactCapability, containingParentIndex, controlCapability, convertPresetFeature, convertUnit, convertUnitTargets, coralUsableUnits, coreBlockAddonId, coreBlockComposition, coreBlockIdFromAddonId, coreBlockSourceKind, coreBlocksCapability, cosineSimilarity, countConditionLeaves, countRecoverySkips, coverCapability, createAlarmProfile, createDeviceExtensionProvider, createDeviceProxy, createDurableState, createEvent, createEventBusSliceSource, createExpressionScope, createHwAccelCache, createLazyTrpcSource, createLogChannelsProvider, createMirrorSource, createRecordsAccess, createRuntimeStateBridge, createSecretsAccess, createSliceHandle, createStatefulExpressionMemory, createSystemProxy, customAction, customModelRegistryCapability, dataStoreProviderCapability, databaseSnapshotCapability, dayNightCapability, dayOfWeekToIndex, declarationOwnerNodeId, declarationsOf, declareLogChannel, declaredSeriesKind, decodeCompositionToCards, decodeKeyedArrayOverride, decodePulseOverride, decodeScalarOverride, decodeVectorBase64, decoderCapability, defaultDeliveryForSection, defaultDeviceFor, defineCustomActions, defineEntryKind, defineExtensionSlotProvider, defineRecordKinds, dehydrateConfigField, dehydrateSchema, deleteAlarmProfile, derivativeDraft, derivativeUnitLabel, deriveBatteryPresence, deriveCameraSwitches, deriveDetailCropRect, deriveMaskSupplies, derivePostTriggeredAction, deriveRecordingMode, deriveRootFaceRefineRect, deriveRootSupplies, describeComposableCaps, describeCustomActions, describeModelVariant, describeOnboardClamp, describeOnboardRefusal, describeRootSupplies, describeRootSupply, describeStateField, describeSystemEventDeliveryProblem, describeSystemEventFamilyProblem, describeTopLevelStateFields, detectAccessRole, detectionClassMatches, detectionPipelineCapability, deviceAdminLinkCapability, deviceAdoptionCapability, deviceAttentionKind, deviceBackendToFormat, deviceCredentialsCapability, deviceCustomAction, deviceDiscoveryCapability, deviceDoFamily, deviceExportCapability, deviceExtensionCapability, deviceHistoryCapability, deviceManagerCapability, deviceMatchesProfile, deviceOpsCapability, deviceProviderCapability, deviceRefusalFromMessage, deviceRemovalHookCapability, deviceSelectorMatches, deviceStateCapability, deviceStatusCapability, diffStepSettings, disarmRoseMemory, dishwasherCapability, displayPaletteCapability, displayUnitFor, doActionSelectValue, dominantClipLabels, doorbellCapability, droppedConditionsForKind, edgetpuDelegateDevice, effectiveStepSettings, egressTranscodeSharingKey, egressTransportFromRequest, electByShare, electByShareWithAffinity, eligibleUnderBenchmark, embeddingEncoderCapability, embeddingModelFailedError, embeddingModelFailedOf, embeddingRefusalOf, embeddingRequirementsFailedError, embeddingRequirementsUnavailableError, emitDownForOwnedCaps, emitReadiness, emitsCollectionSelector, encodeCardsToComposition, encodeProfileFromStreamShape, encodeVectorBase64, ensureAlarmProfiles, entryBody, enumSensorCapability, enumerateInferenceDevices, enumerateItemArrayFields, enumerateSchemaFields, errMsg, estimateNodeBenchmarkDurationMs, evaluateAggregate, evaluateAst, evaluateCompositionField, evaluateConditionTree, evaluateCount, evaluateDerivative, evaluateExpressionSource, evaluatePoolMemory, evaluateRose, evaluateSensorEdge, evaluateSensorLevelEdge, evaluateStatefulExpressionCall, evaluateStatistic, evaluateZoneRules, event, eventEmitterCapability, eventKindLabel, eventOverlapsClipWindow, evictionPolicyForMode, evictionPolicyOfLocation, expandAudioChunkToF32le, expandCapMethods, expandContainer, expandSystemEventClasses, exportSubjectOf, exposeBlockDevices, expressionContainsBuiltinCall, expressionDraft, extensionSlotRef, extractNestedAddonId, extractSourceInfoFromMetadata, faceGalleryCapability, failureContributionCapability, failureRate, fanControlCapability, fanOutTargets, featureFieldEntries, featureOfRole, featureProbeCapability, featureSources, feederCustomizationExample, feederExampleSources, ffmpegRate, fieldEntryToSource, fieldReads, fieldUnitKeys, fieldsPinnedAtValueBelow, filesystemBrowseCapability, findCandidateCycles, findCompositionCycles, findTimezone, floodCapability, foldSnapshotByFunction, foreignCapacityCells, forgetKnownSecret, formatDeviceRevoker, formatForRuntime, formatMediaOwnerKey, formatMinutes, formatPaletteViolations, formatParkedFor, formatReading, formatSecretScope, formulaProblem, freshResults, fuseRecoveredDetections, gasCapability, gbToBytes, generateAutomationBlock, getAudioMacroClassIds, getByPath, getCapsByProviderKind, getLogChannelRegistry, getTaxonomyEntry, gifDeriveSpeed, gifFilterComplex, gifFromMp4Args, globalSecretScope, grantRowsOf, groupActiveCapability, groupCommandsCapability, groupStatusCapability, groupTemplate, hasModelBoundOverrides, hasMotionTrigger, hasUrlScheme, heatingValveCapability, helperMembers, helperSaveProblems, hfModelUrl, historyFieldsFor, historyItemFieldPath, historyUnitFor, htmlToText, hubAddressHostname, hubMotionNativeProvider, humidifierCapability, humiditySensorCapability, hydrateSchema, iconCategoryLabel, iconEntry, iconsInCategory, imageCapability, imageModesForKind, imageSettingsCapability, inferExpressionKinds, inferModelProvider, ingestReading, initialPoolMemoryState, integralCadenceMs, integralDraft, integrateReading, integrationsCapability, intercomCapability, internalActionId, interpolate, interpretStoredClusterModel, invalidClusterStepModelEntries, invertPresetFeature, invocationFromEncodeProfile, isAgentOnlyPlacement, isAlarmControllableCap, isAlertEpisodeOpen, isAlertEpisodeSeverity, isAppLinkBase, isAppStartRefusal, isApplianceKind, isArrayOutputSchema, isAudioChunkFormat, isAudioClassName, isAudioLabelSelected, isAudioRule, isAutomaticShareSource, isBaseConditionKey, isBatteryPresenceFault, isClusterScopedStep, isCollectionArrayMethod, isCredentialTokenPayload, isDefaultAlarmProfileId, isDefaultAppConnectionEndpoint, isDefinitiveDeviceRefusal, isDeployableToAgent, isDetectionMacroClass, isDeviceConfigCap, isDeviceScopedCap, isDoActionActuatable, isDoPickerDeviceType, isDrawableSubjectPath, isEmbeddingModelFailed, isEvent, isEventKindLabelKey, isEventOwnerType, isFirstLevelMacroClass, isHeldBackTemplateVar, isHistoryHelper, isIconKey, isInternalActionId, isIsolatedBuiltin, isKeychainStoredField, isKnownTemplateVar, isLabelSupplyStepId, isLocationEnabled, isMediaOwnerType, isModelScopedStepSettingKey, isNode, isOauthLandingReason, isObjectInput, isOccupancyRule, isOwnerOnlyEventCategory, isPlugApplianceType, isReadingQuantity, isRemovedModelId, isRestoredCap, isRetiredClearKey, isRootSuppliableStepId, isSameAddonId, isScheduleActive, isSecretClear, isSecretConfigField, isSecretFieldView, isSecretMarker, isSecretMarkerLike, isSecretRef, isSecretRefOwnedBy, isSingleHubAddressRole, isSkippedTrace, isSoftwareDecode, isSourceCap, isStateLabelKey, isStatefulBuiltin, isStorageLocationMode, isSystemDelivery, isSystemEventFamily, isSystemEventRecoveryKind, isSystemEventSummaryRule, isSystemRuleKind, isUnfilledRequiredProblem, isVectorIndexDimConflict, isVoidInput, isZodSecret, ituDbfsFromPreEpoch, jobKindSchema, kebabToCamel, keychainAdminCapability, keychainCapability, kindOfValue, kindsForDiscriminator, knownSecretCount, knownValues, lawnMowerControlCapability, legacyAutoLinkIds, legacyImageMode, legacyModeOf, lifecycleJobSchema, lifecycleJobScopeSchema, lifecycleJobStateSchema, lifecycleTaskSchema, linkedLabelStepId, linkedStepOf, listBenchDetailSteps, llmCapability, llmRuntimeCapability, loadContributionCapability, localNetworkCapability, localizeConfigTree, locationIconKey, locationSimilarity, lockControlCapability, logBannerArgs, logChannelsCapability, logDestinationCapability, logLevelAtMost, loginMethodCapability, looseSchema, makeInMemoryRecords, makeProfileBrokerId, makeSecretMarker, makeSourceBrokerId, mapAudioLabelToMacro, mapSecretLeaves, markFieldEdited, markdownToHtmlLite, markdownToText, maskUrlCredentials, matchDoAction, maxDurationMs, mayReadLocation, mayWriteToLocation, measuredCapacityFromResults, measuredDetectorCells, mediaPlayerCapability, memoizePinnedFfmpeg, mergeClipLabels, mergeKeyedArrayItem, mergeOverrides, mergeScalarTarget, mergeSecretStatePaths, mergeSettingsBags, mergeSkipTraces, mergeSourceInfo, meshNetworkCapability, meterCapability, method, methodAccessForHttpMethod, methodRefusal, methodRoleOf, metricsProviderCapability, migrateLegacyDeviceSignalConfig, minutesToTimeOfDay, modeMayRead, modeMayWrite, modelBindingKey, modelConvertCapability, modelDistributorCapability, modelFormatForRuntime, modelScopedStepSettingKeys, motionCapability, motionDetectionCapability, motionSourceLabel, motionTriggerCapability, motionZonesCapability, mqttBrokerCapability, nativeObjectDetectionCapability, navigationCapability, ncAlarmSystemDefaultSettings, ncMediaPolicyError, networkAccessCapability, networkLinkCapability, networkQualityCapability, nextLocalMidnight, nodeBenchmarkRefusals, nodeCertificatesCapability, nodePickerItems, nodePin, nodesCapability, normalizeAddonInitResult, normalizeAudioLabel, normalizeCoreBlockWrite, normalizeNcMediaPolicy, normalizeNodeId, normalizeOrigin, normalizeSecretOwner, normalizeTokenScopes, normalizeUnit, normalizedArea, notificationOutputCapability, notificationRulesCapability, notifierCapability, numericSensorCapability, oauthIntegrationCapability, oauthLandingUrl, objectInputDeclaresAddonId, objectInputDeclaresRequiredDeviceId, occupancyScope, oidcConnectionsCapability, omitTransientConfig, openReset, openStatistic, optionalAncestors, optionalMethod, osdCapability, osdManagerCapability, overlayClusterStepSettings, ownedSlice, packagePickerItems, paintHex, paletteEntryLabel, paletteFromInput, paletteFromStored, paletteLegend, paletteResultSchema, paletteSwatchSchema, parseAcceleratorFactsJson, parseAdminBase, parseAlertEpisodePayload, parseAppAuthCallback, parseAppFlowRequest, parseAppPageLang, parseCameraStreamConfig, parseColorInput, parseCredentialScopes, parseDeviceEnrollmentLink, parseExpression, parseJsonArray, parseJsonObject, parseJsonUnknown, parseMediaOwnerKey, parseOauthLandingFragment, parseOccupancyScope, parseProcStatus, parseProfileBrokerId, parseRetrainRevisionConflict, parseRuleSection, parseSecretPath, parseSecretRef, parseSecretStatePath, parseSessionPlacementPolicy, parseShareSource, parseStreamParamsFormPatch, parseTrainingEventLine, patchAudio, petFeederCapability, pickAccessoryControl, pickAppLinkHub, pickClusterStepModels, pickClusterStepSettings, pickDetailCropConvention, pickFaceRescoreIntervalMinutes, pickInvalidClusterStepModels, pickNativeLeaseOverride, pickPreferredRtspEntry, pickRequestOrigin, pickRestartCandidate, pickVideoEncoder, pickerForCondition, pickerForRuleClasses, pinUnderBenchmark, pipelineAnalyticsCapability, pipelineExecutorCapability, pipelineOrchestratorCapability, pipelineRunnerCapability, planComposition, planCompositionEvents, planItems, planMotionCropRegions, planMotionCrops, planRecoveryCrops, planResetTier, planStatisticTier, plateGalleryCapability, platformProbeCapability, plusCatalogDefaultClassFloors, plusCatalogLabelFields, poolMemoryThreshold, powerMeterCapability, prepareNotification, presenceCapability, presetById, pressureSensorCapability, primaryCapForRole, principalMayReachAddon, privacyMaskCapability, problemsBlockSave, procedureAuthKey, projectKeyedArrayAssignment, projectPulseAssignment, projectScalarAssignment, projectSpanAssignment, projectSubjectPath, providerMotionEvent, ptzAutotrackCapability, ptzCapability, publicEventCategories, pythonScriptForBackend, quantityFromUnit, rankStreams, readClusterStepModels, readClusterStepSettings, readDetailCropConvention, readDeviceStateFrom, readErrorI18n, readFaceRescoreIntervalMinutes, readHubMotionDetected, readHubMotionStatus, readKeyedArrayItems, readMotionTriggeredBy, readNativeLeaseOverride, readNodePin, readRecoveryRecipe, readRecoveryRecipeForSteps, readTimelapseGeneratedAt, readUseRootModel, readinessKey, readingMeta, rebootCapability, recommendNode, reconcileBlockDevices, reconcileRemovedDevices, recordArrayItemPath, recordEntriesCapability, recordSecretCollection, recordSecretRef, recordingArchiveCapability, recordingCapability, recordingExportCapability, recordingOnboardCapability, recordingSignalCapability, recordsCapability, recordsErrorFromMessage, rectsToCells, reducePoints, reducerForActive, registerKnownSecret, remapCropDetections, removeScalarTarget, renameAlarmProfile, renderVocabPhrase, replacedFieldKeys, reportIsScalable, requestMountPrefix, requiredTopLevelKeys, requiresPython, reservedSourceOwner, resetPoolBaseline, resolveActionVariables, resolveAddonExecution, resolveAddonGroup, resolveAddonPlacement, resolveAppConnections, resolveBucketMs, resolveCapMount, resolveClipSearchMinScore, resolveClusterStepModelId, resolveContainerPrimaryChild, resolveCoreBlockEntry, resolveCoreBlockFiles, resolveCreateExportSubject, resolveDeviceControlKind, resolveDeviceProfile, resolveDeviceTarget, resolveEffectiveShares, resolveEgressDecodeHwAccel, resolveExportProfiles, resolveFormat, resolveHubAddressRoles, resolveHydratedFieldValue, resolveIconKey, resolveInternalAddress, resolveLatencyColumn, resolveLocationMode, resolveMethodAuth, resolveMethodRole, resolveModeDelays, resolveModeNotifyPolicy, resolveModelBoundSetting, resolveMutate, resolveNcMediaImage, resolveNotificationTapAddress, resolvePoolMemoryPolicy, resolvePublicEndpoint, resolveRecordingProfiles, resolveRootSupply, resolveRunnerId, resolveSecretMarkers, resolveSecretViewsIn, resolveServerName, resolveStepArgs, resolveStreamMaps, resolveVariantModelId, resolveViewableDeviceIds, resultCellKey, resultStandings, retrainBoxIou, retrainRevisionConflictMessage, rewriteBody as rewriteLoginProxyBody, rewriteLocation as rewriteLoginProxyLocation, rewriteReferer as rewriteLoginProxyReferer, rewriteSetCookie as rewriteLoginProxySetCookie, roleSpec, rollingDurationMs, roomCompositionExample, rootSuppliesOf, rootSupplyServes, ruleAutoTriggersAlarm, ruleBelongsToAlarm, ruleDeviceCompatCapNames, ruleDeviceCompatCapQueries, ruleEditorSectionsForKind, ruleGatedOnArmedState, ruleGroupingApplies, ruleKindOf, ruleKindSpec, ruleMatchesSection, ruleSection, ruleSectionOf, ruleSeedForSection, ruleTriggerZoneIds, runFanOut, runInferenceStep, runSteps, runningFromDishwasherOperation, runningFromLawnMower, runningFromMediaPlayer, runningFromVacuumState, runningStateCapability, runtimeDevices, runtimeFieldUnit, runtimeStatePolicyFor, sameDoFamily, sameHelperBody, sameRead, scalarTargetCount, sceneMonitorCapability, scheduleForSendTimes, schemaDeclaresAnyField, scopeInherits, scopeKey, scopesAllowAddon, scopesAllowAddonRoutes, scopesAllowDeviceCap, scopesAllowOwnPreferences, scopesGrantAdmin, scoreRuntimes, scriptRunnerCapability, scrubKnownSecrets, searchIcons, secretArrayPrefixes, secretTreeFromPaths, secretTreeFromSchema, secureActuationFor, selectAppConnectionEndpoints, selectAssignedProfileSlots, selectRecoveryStep, sendTimesForEditor, sendTimesOfSchedule, sensorRaisedOf, sensorTransitionNeverFires, sensorTransitionOffered, servedTemplateVars, serverManagementCapability, sessionLostAlertId, sessionsOfDeviceCell, setByPath, setFormulaExpr, setPaletteInputSchema, settingValuesEqual, settingsBelow, settingsStoreCapability, shareViewGrantOf, sharedActuatorFeatures, sharedActuatorMethods, sharedColorModes, sharedLightCaps, shortHostname, shortSecretRefHash, signalPercentFromBars, signalPercentFromRssi, siteZoneKey, skipSignature, sleep, sleepCancellable, sliceActiveValue, sliceChangedAt, smokeCapability, smtpProviderCapability, snapshotCapability, sourcePickForAppliance, sourcePickForHistory, sourcePickForMath, sourcePickForTemplate, splitTranslationRef, squareAround, ssoBridgeCapability, startMoverUnderClearance, startReachabilityPoll, stateLabel, stateVocabularyFor, statisticCadenceMs, statisticDraft, stepModelRunsOnFormat, stepPulse, stepSettingSource, stepSpan, storageAdminCapability, storageCapability, storageEvictableCapability, storageMigrationCapability, storageOccupancyCapability, storageProviderCapability, storedFromReady, storedPaletteSchema, streamBrokerCapability, streamCatalogCapability, streamParamsCapability, streamPixels, streamQualityLabel, streamSignalsCapability, stripRetiredBandPreBufferSec, strippedOfLegacyReadOnly, subKindsOf, subjectHasPath, subjectPathSampleFromBox, subjectPathSvgPoints, summarisePrivacyAudio, summarizeEffectiveScope, summarizeReview, supplyFor, supportedRuntimes, swatchHex, switchCapability, switchedOffIds, syncActiveAlarmProfileSettings, synthesizeSourceInfo, systemCapability, systemEventClassKinds, systemEventClassOf, systemEventClassesFor, systemEventDeliveryProblems, systemEventFamilyOf, systemEventFamilyProblems, systemEventFilterApplies, systemEventFilterAppliesToAnyKind, systemEventKindNamesOf, systemEventKindsOfFamily, systemEventSummaryScheduleOf, systemEventSummarySplitOf, systemFamilyOfKind, systemRuleKindOf, tamperCapability, targetFeature, taskLogEntrySchema, taskPhaseSchema, taskTargetSchema, temperatureSensorCapability, templateCarriesSummary, templateDeviceType, templateVarDeliveryApplies, templateVarKindApplies, templateVarSystemEventApplies, templateVarsFor, terminalSessionCapability, textToHtml, thresholdDraft, thresholdToBase, thresholdToDisplay, timeOfDayToMinutes, toAppLinkHubOrigin, toDeviceSummary, toExpressionValue, toNodeId, toPercentShares, toSecretFieldView, toStreamSourceEntry, toastCapability, toggleAudioLabel, tokenize, trainingCapability, trainingProviderCapability, transcodeBody, transformSecretWrite, tryConvertDelta, tryConvertUnit, turnProviderCapability, unitCompanionField, unitDimension, unitsForDimension, unreachableExtensionSlotRow, unwrapSchema, updateCapability, userError, userManagementCapability, userPasskeysCapability, vacuumControlCapability, validateComposition, validateCustomAddress, validateExpressionSource, validatePalette, validateRecipeBounds, valveCapability, vectorDimFromBase64, vectorIndexDimConflictError, vectorStoreCapability, vibrationCapability, videoclipsCapability, viewerAdmitsDevice, viewerHoldsRole, viewerLinkBaseOf, viewerScopeOf, viewerUiCapability, actionsForDevice$1 as vocabularyActionsForDevice, triggersForDevice as vocabularyTriggersForDevice, waterHeaterCapability, wattMillisecondsToKwh, weatherCapability, webrtcClientHintsSchema, webrtcSessionCapability, weeklyMaskIndex, weeklyMaskIsUniform, weeklyMaskToWindows, widenDeviceConstructor, windowsToWeeklyMask, wiringAddonHealthSchema, wiringHealthSnapshotSchema, wiringNodeHealthSchema, wiringProbeKindSchema, wiringProbeResultSchema, withClipEventLabels, withFieldFrom, withLocationMode, withSystemEventClasses, withoutCallerStamp, withoutField, withoutKeyedArrayItem, writeModelBoundSetting, zodEntriesToConfigUI, zoneAnalyticsCapability, zoneRulesCapability, zonesCapability };
|