@camstack/types 1.2.112 → 1.2.114
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/capabilities/face-gallery.cap.d.ts +60 -0
- package/dist/capabilities/index.d.ts +2 -2
- package/dist/capabilities/recording.cap.d.ts +18 -0
- package/dist/capabilities/system.cap.d.ts +618 -1
- package/dist/catalogs/index.d.ts +1 -0
- package/dist/catalogs/sensor-active-state.d.ts +130 -0
- package/dist/generated/addon-api.d.ts +21 -0
- package/dist/generated/method-access-map.d.ts +1 -1
- package/dist/generated/system-proxy.d.ts +1 -1
- package/dist/index.d.ts +7 -6
- package/dist/index.js +882 -107
- package/dist/index.mjs +850 -108
- package/dist/interfaces/recording-config.d.ts +44 -0
- package/dist/pipeline/native-lease.d.ts +9 -1
- package/dist/types/detection.d.ts +11 -2
- package/dist/types/labels.d.ts +26 -0
- package/package.json +1 -1
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LA tabella "quale booleano di questo tipo di device conta come ALTO", e il
|
|
3
|
+
* valutatore puro del suo FRONTE.
|
|
4
|
+
*
|
|
5
|
+
* Viveva dentro il builtin virtual-doorbell
|
|
6
|
+
* (`@camstack/system` — `builtins/doorbell/trigger-engine.ts`) e i suoi
|
|
7
|
+
* predicati erano privati al modulo. Il recorder ne ha bisogno per il trigger
|
|
8
|
+
* `RecordingTriggers.sensorDeviceIds`: copiarla avrebbe creato la SECONDA
|
|
9
|
+
* tabella, che diverge alla prima cap aggiunta e il cui sintomo — "il sensore
|
|
10
|
+
* fa suonare il campanello ma non registra" — è esattamente D62. Quindi si
|
|
11
|
+
* SPOSTA qui e il doorbell la ri-esporta.
|
|
12
|
+
*
|
|
13
|
+
* ⚠ NON è `DEVICE_STATE_READERS` (`catalogs/device-state-vocabulary.ts`), e le
|
|
14
|
+
* due non vanno unificate: quella risponde a "qual è la PAROLA di stato per una
|
|
15
|
+
* regola" (e include `presence`, `cover`, `alarm-panel`), questa a "qual è il
|
|
16
|
+
* booleano il cui FRONTE conta". Vocabolari deliberatamente diversi.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Known binary / switch source caps → the boolean slice field whose
|
|
20
|
+
* false→true rise counts as ACTIVE. Every entry is "fire on active".
|
|
21
|
+
* Sensors whose "active" reading is not a plain boolean (presence's string
|
|
22
|
+
* state, connectivity's connected flag) are deliberately excluded — a
|
|
23
|
+
* reconnect is not a doorbell press, and it is not a recording either.
|
|
24
|
+
*/
|
|
25
|
+
export declare const SOURCE_CAP_ACTIVE_FIELD: Readonly<Record<string, string>>;
|
|
26
|
+
/**
|
|
27
|
+
* The same caps → the slice field carrying the ms-epoch timestamp of the
|
|
28
|
+
* last transition. Every source cap MUST appear here (guarded by a spec):
|
|
29
|
+
* without a transition timestamp the evaluator cannot tell a genuine rise
|
|
30
|
+
* from a boot-time hydration when the FIRST slice it ever sees is already
|
|
31
|
+
* active, and errs towards silence — swallowing the rise.
|
|
32
|
+
*
|
|
33
|
+
* These timestamps are UPSTREAM ones, not ingest ones: the Home Assistant
|
|
34
|
+
* provider derives them from `state.last_changed`, so they survive our own
|
|
35
|
+
* restarts and correctly read as "hours ago" for a state that has been
|
|
36
|
+
* active for hours. `motion` names its rise timestamp `lastDetectedAt`.
|
|
37
|
+
*/
|
|
38
|
+
export declare const SOURCE_CAP_CHANGED_AT_FIELD: Readonly<Record<string, string>>;
|
|
39
|
+
/** Cap names whose presence in a device's bindings qualify it as a source. */
|
|
40
|
+
export declare const SOURCE_CAPS: readonly string[];
|
|
41
|
+
/**
|
|
42
|
+
* Device `type` values (from `DeviceType`) that can host a binary/switch
|
|
43
|
+
* source cap. Used by the camera's `device-multiselect` picker as the
|
|
44
|
+
* CLIENT-SIDE filter, alongside `SOURCE_CAPS`.
|
|
45
|
+
*
|
|
46
|
+
* Why types and not caps alone: the shared picker filters
|
|
47
|
+
* `deviceManager.listAll` rows client-side, and those rows carry only the
|
|
48
|
+
* device's advertised `features` — NOT its registered cap list. On the live
|
|
49
|
+
* cluster binary sensors and switches advertise EMPTY features (features
|
|
50
|
+
* mirror only a handful of caps like `motion-trigger`), so a caps-only
|
|
51
|
+
* filter matched against `features` would list nothing (the very bug this
|
|
52
|
+
* replaced, which relied on the now-empty `getAllBindings`). Matching by
|
|
53
|
+
* `type` is the reliable client-side signal; the union with `SOURCE_CAPS`
|
|
54
|
+
* still captures any device that DOES advertise a source-cap feature.
|
|
55
|
+
* `sensor` covers contact/motion/flood/gas/smoke/CO/vibration/tamper,
|
|
56
|
+
* `switch` covers switches, `control` covers generic binary actuators.
|
|
57
|
+
*/
|
|
58
|
+
export declare const SOURCE_DEVICE_TYPES: readonly string[];
|
|
59
|
+
/** True when a cap is a recognised binary/switch source. */
|
|
60
|
+
export declare function isSourceCap(capName: string): boolean;
|
|
61
|
+
/** Extract the "active" boolean a source cap's slice carries, or null when
|
|
62
|
+
* the cap is unknown or the field is missing / non-boolean. */
|
|
63
|
+
export declare function sliceActiveValue(capName: string, slice: Readonly<Record<string, unknown>>): boolean | null;
|
|
64
|
+
/** Ms-epoch transition timestamp a source cap's slice carries, or null when
|
|
65
|
+
* it is absent, non-numeric or the zero "never observed" sentinel. */
|
|
66
|
+
export declare function sliceChangedAt(capName: string, slice: Readonly<Record<string, unknown>>): number | null;
|
|
67
|
+
/**
|
|
68
|
+
* Perché una slice non ha portato un fronte alto. Stesso vocabolario che il
|
|
69
|
+
* virtual-doorbell riporta dal 2026-08-05: UN enum, così "perché non è scattato
|
|
70
|
+
* niente" ha una risposta sola, chiunque lo chieda.
|
|
71
|
+
*/
|
|
72
|
+
export type SensorEdgeIgnoreReason =
|
|
73
|
+
/** Not a recognised binary/switch source cap. */
|
|
74
|
+
'unknown-cap'
|
|
75
|
+
/** Recognised cap, but its active field is missing or not a boolean. */
|
|
76
|
+
| 'non-boolean-value'
|
|
77
|
+
/** First sighting, INACTIVE — nothing can have been lost. */
|
|
78
|
+
| 'baseline-seeded-inactive'
|
|
79
|
+
/** First sighting, ALREADY ACTIVE, and we could not prove it is a fresh
|
|
80
|
+
* transition. A genuine rise MAY have been swallowed here. */
|
|
81
|
+
| 'baseline-seeded-stale-active'
|
|
82
|
+
/** Re-emission carrying the same binary value. */
|
|
83
|
+
| 'no-change'
|
|
84
|
+
/** The falling edge — switch-off / contact-close never fires. */
|
|
85
|
+
| 'falling-edge';
|
|
86
|
+
export interface SensorEdgeInput {
|
|
87
|
+
readonly capName: string;
|
|
88
|
+
readonly slice: Readonly<Record<string, unknown>>;
|
|
89
|
+
/** Ultimo booleano osservato per questa `(device, cap)`; `undefined` = mai vista. */
|
|
90
|
+
readonly prior: boolean | undefined;
|
|
91
|
+
/** Quando l'OSSERVATORE ha iniziato a guardare — il pavimento per una prima
|
|
92
|
+
* osservazione già attiva. Ogni osservatore ha il suo. */
|
|
93
|
+
readonly startedAtMs: number;
|
|
94
|
+
readonly nowMs: number;
|
|
95
|
+
readonly firstSightingFreshnessMs: number;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* `value` è restituito su ogni cammino in cui la slice PORTAVA un booleano,
|
|
99
|
+
* anche quando non c'è fronte: il chiamante aggiorna la sua memoria con quello
|
|
100
|
+
* e non rilegge la slice. Su `unknown-cap` / `non-boolean-value` è `null` e la
|
|
101
|
+
* memoria non va toccata.
|
|
102
|
+
*/
|
|
103
|
+
export type SensorEdgeVerdict = {
|
|
104
|
+
readonly edge: 'rising';
|
|
105
|
+
readonly value: true;
|
|
106
|
+
} | {
|
|
107
|
+
readonly edge: 'none';
|
|
108
|
+
readonly value: boolean | null;
|
|
109
|
+
readonly reason: SensorEdgeIgnoreReason;
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* How recent a source's own transition timestamp must be for a FIRST
|
|
113
|
+
* sighting that is already active to count as a genuine rise rather than a
|
|
114
|
+
* hydration of long-standing state.
|
|
115
|
+
*/
|
|
116
|
+
export declare const DEFAULT_FIRST_SIGHTING_FRESHNESS_MS = 30000;
|
|
117
|
+
/**
|
|
118
|
+
* IL fronte. Puro: nessun orologio proprio, nessuna memoria — il chiamante
|
|
119
|
+
* porta `prior`, `nowMs` e il proprio `startedAtMs`.
|
|
120
|
+
*
|
|
121
|
+
* Il caso della PRIMA slice già attiva è trattato esplicitamente e vale come
|
|
122
|
+
* fronte solo se il timestamp UPSTREAM della transizione è posteriore a
|
|
123
|
+
* `startedAtMs` **e** entro `firstSightingFreshnessMs`. Entrambe le metà
|
|
124
|
+
* servono: la sola freschezza scatterebbe su un'idratazione al boot di uno
|
|
125
|
+
* stato flippato pochi secondi prima del riavvio, e il solo "dopo che abbiamo
|
|
126
|
+
* iniziato" scatterebbe, su un processo di lunga vita, per una sorgente
|
|
127
|
+
* adottata oggi il cui stato è cambiato ieri. Il caso ambiguo ERRA VERSO IL
|
|
128
|
+
* SILENZIO e lo dichiara (`baseline-seeded-stale-active`).
|
|
129
|
+
*/
|
|
130
|
+
export declare function evaluateSensorEdge(input: SensorEdgeInput): SensorEdgeVerdict;
|
|
@@ -7684,6 +7684,27 @@ export type AppRouter = TrpcCoreRouter<{
|
|
|
7684
7684
|
output: z.infer<typeof systemCapability.methods.detectSiteLocation.output>;
|
|
7685
7685
|
meta: object;
|
|
7686
7686
|
}>;
|
|
7687
|
+
getRequestCensus: TRPCQueryProcedure<{
|
|
7688
|
+
input: {
|
|
7689
|
+
nodeId?: string | undefined;
|
|
7690
|
+
} | undefined;
|
|
7691
|
+
output: z.infer<typeof systemCapability.methods.getRequestCensus.output>;
|
|
7692
|
+
meta: object;
|
|
7693
|
+
}>;
|
|
7694
|
+
getLoggingSettings: TRPCQueryProcedure<{
|
|
7695
|
+
input: {
|
|
7696
|
+
[x: string]: unknown;
|
|
7697
|
+
} & z.input<typeof systemCapability.methods.getLoggingSettings.input>;
|
|
7698
|
+
output: z.infer<typeof systemCapability.methods.getLoggingSettings.output>;
|
|
7699
|
+
meta: object;
|
|
7700
|
+
}>;
|
|
7701
|
+
setLoggingSettings: TRPCMutationProcedure<{
|
|
7702
|
+
input: {
|
|
7703
|
+
[x: string]: unknown;
|
|
7704
|
+
} & z.input<typeof systemCapability.methods.setLoggingSettings.input>;
|
|
7705
|
+
output: z.infer<typeof systemCapability.methods.setLoggingSettings.output>;
|
|
7706
|
+
meta: object;
|
|
7707
|
+
}>;
|
|
7687
7708
|
}>>;
|
|
7688
7709
|
tamper: TRPCBuiltRouter<{
|
|
7689
7710
|
ctx: TrpcContext;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* scope+access check inside `protectedProcedure` (see
|
|
7
7
|
* `server/backend/src/api/trpc/trpc.middleware.ts`).
|
|
8
8
|
*
|
|
9
|
-
* Coverage:
|
|
9
|
+
* Coverage: 966 method paths across 123 capabilities.
|
|
10
10
|
*/
|
|
11
11
|
import type { CapabilityMethodAccess } from '../capabilities/capability-definition.js';
|
|
12
12
|
export interface MethodAccessRecord {
|
|
@@ -94,7 +94,7 @@ export interface SystemProxy {
|
|
|
94
94
|
readonly storage: Pick<InferProvider<typeof storageCapability>, 'resolve' | 'write' | 'read' | 'exists' | 'list' | 'delete' | 'getAvailableSpace' | 'beginUpload' | 'writeChunk' | 'finalizeUpload' | 'abortUpload' | 'beginDownload' | 'readChunk' | 'endDownload' | 'listLocations' | 'getDefaultLocation' | 'listLocationDeclarations' | 'upsertLocation' | 'deleteLocation' | 'testLocation' | 'listProviders' | 'testConfig'>;
|
|
95
95
|
readonly storageMigration: Pick<InferProvider<typeof storageMigrationCapability>, 'plan' | 'start' | 'status' | 'cancel'>;
|
|
96
96
|
readonly streamBroker: Pick<InferProvider<typeof streamBrokerCapability>, 'fetchEventMedia' | 'listAllCameraStreams' | 'listAllProfileSlots' | 'getBrokerStats' | 'probeStream' | 'listClients' | 'killClient' | 'getStreamUrl' | 'getStreamWithCodec' | 'releaseStreamWithCodec' | 'acquireEgressTranscode' | 'releaseEgressTranscode' | 'subscribeAudioChunks' | 'pullAudioChunks' | 'unsubscribeAudioChunks' | 'subscribeFrames' | 'pullFrameHandles' | 'unsubscribeFrames' | 'setPreBufferDuration' | 'getPreBufferInfo' | 'getRtspPort' | 'getAllRtspEntries' | 'getRtspEntry' | 'regenerateRtspToken' | 'setRtspEnabled' | 'isRtspEnabled'>;
|
|
97
|
-
readonly system: Pick<InferProvider<typeof systemCapability>, 'info' | 'health' | 'featureFlags' | 'networkAddresses' | 'getRetentionConfig' | 'setRetentionConfig' | 'forceRetentionCleanup' | 'getSiteLocation' | 'setSiteLocation' | 'detectSiteLocation'>;
|
|
97
|
+
readonly system: Pick<InferProvider<typeof systemCapability>, 'info' | 'health' | 'featureFlags' | 'networkAddresses' | 'getRetentionConfig' | 'setRetentionConfig' | 'forceRetentionCleanup' | 'getSiteLocation' | 'setSiteLocation' | 'detectSiteLocation' | 'getRequestCensus' | 'getLoggingSettings' | 'setLoggingSettings'>;
|
|
98
98
|
readonly terminalSession: Pick<InferProvider<typeof terminalSessionCapability>, 'listProfiles' | 'listInstances' | 'createInstance' | 'updateInstance' | 'deleteInstance' | 'setInstanceEnabled' | 'listLegacyCameras' | 'adoptLegacyMonitor' | 'listSessions' | 'openSession' | 'resize' | 'pullOutput' | 'writeInput' | 'close'>;
|
|
99
99
|
readonly toast: Pick<InferProvider<typeof toastCapability>, 'onToast'>;
|
|
100
100
|
readonly turnProvider: Pick<InferProvider<typeof turnProviderCapability>, 'getTurnServers'>;
|
package/dist/index.d.ts
CHANGED
|
@@ -122,6 +122,7 @@ export * from './capabilities/index.js';
|
|
|
122
122
|
export { APPLE_SA_TO_MACRO, AUDIO_MACRO_LABELS, getAudioMacroClassIds, mapAudioLabelToMacro, YAMNET_TO_MACRO, } from './catalogs/audio-classmap.js';
|
|
123
123
|
export { COCO_80_LABELS, COCO_TO_MACRO, DETECTION_MACRO_CLASSES, isDetectionMacroClass, MACRO_LABELS, } from './catalogs/coco-classmap.js';
|
|
124
124
|
export { DEVICE_STATE_READERS, readDeviceStateFrom, stateVocabularyFor, } from './catalogs/device-state-vocabulary.js';
|
|
125
|
+
export { DEFAULT_FIRST_SIGHTING_FRESHNESS_MS, evaluateSensorEdge, isSourceCap, type SensorEdgeIgnoreReason, type SensorEdgeInput, type SensorEdgeVerdict, SOURCE_CAP_ACTIVE_FIELD, SOURCE_CAP_CHANGED_AT_FIELD, SOURCE_CAPS, SOURCE_DEVICE_TYPES, sliceActiveValue, sliceChangedAt, } from './catalogs/sensor-active-state.js';
|
|
125
126
|
export { colorForKind, DEFAULT_EVENT_COLOR, EVENT_TAXONOMY, type EventTaxonomyCategory, type EventTaxonomyEntry, type EventTaxonomyLevel, getTaxonomyEntry, subKindsOf, TAXONOMY_COLORS, } from './catalogs/event-taxonomy.js';
|
|
126
127
|
export { buildNcTaxonomy, NC_TAXONOMY, type NcTaxonomy, type NcTaxonomyEntry, NcTaxonomyEntrySchema, NcTaxonomySchema, } from './catalogs/nc-taxonomy.js';
|
|
127
128
|
export * from './constants.js';
|
|
@@ -131,6 +132,8 @@ export type { AccessoryChildSpec } from './device/base-device.js';
|
|
|
131
132
|
export { BaseDevice } from './device/base-device.js';
|
|
132
133
|
export type { DeviceSummary, DiscoveryCandidate, FieldProbeResult, } from './device/base-device-provider.js';
|
|
133
134
|
export { BaseDeviceProvider, toDeviceSummary } from './device/base-device-provider.js';
|
|
135
|
+
export type { BatteryPresence, BatteryPresenceInput } from './device/battery-presence.js';
|
|
136
|
+
export { BATTERY_UNREACHABLE_AFTER_MS, deriveBatteryPresence, isBatteryPresenceFault, } from './device/battery-presence.js';
|
|
134
137
|
export type { ICameraDevice, StreamSourceEntry } from './device/camera-device.js';
|
|
135
138
|
export type { DeclarationPlacement, DeclaredDeviceOutcome, DeclaredDevicePorts, DeclaredDeviceRow, DeclaredDevicesResult, DeclaredDevicesSpec, DeclaredIntegrationRow, DeviceDeclaration, } from './device/declared-device.js';
|
|
136
139
|
export { DECLARED_DEVICE_SWEEP_LIMIT, DECLARED_INTEGRATION_FIXED_KEY, DeclaredDevices, declarationOwnerNodeId, } from './device/declared-device.js';
|
|
@@ -148,8 +151,6 @@ export { DeviceRuntimeState } from './device/device-runtime-state.js';
|
|
|
148
151
|
export type { SliceEventBus, SliceHandle, SliceHandleApi, SliceHandleSource, } from './device/device-state-handle.js';
|
|
149
152
|
export { createEventBusSliceSource, createLazyTrpcSource, createMirrorSource, createSliceHandle, } from './device/device-state-handle.js';
|
|
150
153
|
export { ChargingStatus, DeviceFeature, DeviceRole, DeviceType } from './device/device-type.js';
|
|
151
|
-
export type { BatteryPresence, BatteryPresenceInput } from './device/battery-presence.js';
|
|
152
|
-
export { BATTERY_UNREACHABLE_AFTER_MS, deriveBatteryPresence, isBatteryPresenceFault, } from './device/battery-presence.js';
|
|
153
154
|
export type { IBatteryOperated, IDoorbellButton, INativeSnapshot, IPanTiltZoom, IRebootable, ITwoWayAudio, } from './device/features.js';
|
|
154
155
|
export { getByPath, setByPath } from './device/path-util.js';
|
|
155
156
|
export type { ReachabilityPollHandle, ReachabilityPollLogger, ReachabilityPollOptions, } from './device/reachability-poll.js';
|
|
@@ -191,7 +192,7 @@ export type { AudioCodecInfo, AudioDecodeSessionConfig, AudioEncodedChunk, Audio
|
|
|
191
192
|
export type { StreamQuality } from './interfaces/device-capabilities/camera.js';
|
|
192
193
|
export { STREAM_QUALITY_LABELS, streamQualityLabel, } from './interfaces/device-capabilities/camera.js';
|
|
193
194
|
export * from './lifecycle/index.js';
|
|
194
|
-
export { audioIsFailClosed, audioKindId, audioLabelChoices, audioModeOf, audioOrDefaults, isAudioLabelSelected,
|
|
195
|
+
export { audioIsFailClosed, audioKindId, audioLabelChoices, audioModeOf, audioOrDefaults, isAudioLabelSelected, 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_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, type NcAudioLabelChoice, type NcAudioMode, type NcAudioPatch, normalizeAudioLabel, patchAudio, toggleAudioLabel, } from './notification/audio-condition.js';
|
|
195
196
|
export { isBaseConditionKey, knownValues, NC_BASE_CONDITION_KEYS, type NcBaseConditionKey, pickerForCondition, type TaxonomyGroup, type TaxonomyOption, type TaxonomyPicker, } from './notification/condition-taxonomy.js';
|
|
196
197
|
export { type PreparedAction, type PreparedAttachment, type PreparedNotification, prepareNotification, type ResolvedLevel, } from './notification/degrade-engine.js';
|
|
197
198
|
export { htmlToText, markdownToHtmlLite, markdownToText, type NotificationFormat as NotificationBodyFormat, resolveFormat, textToHtml, transcodeBody, } from './notification/format-transcode.js';
|
|
@@ -201,8 +202,8 @@ export { NC_SYSTEM_EVENT_FILTER_KEYS, type NcSystemEventFilterKey, systemEventFi
|
|
|
201
202
|
export type { TimelapseCadencePair, TimelapsePreviewMode, TimelapseRule, TimelapseRuleInput, TimelapseRulePatch, TimelapseTemplate, } from './notification/timelapse-rule.js';
|
|
202
203
|
export { assertTimelapseCadences, DEFAULT_TIMELAPSE_PREVIEW_TEXT, readTimelapseGeneratedAt, TIMELAPSE_DENSE_FLOOR_SEC, TimelapseRuleInputSchema, TimelapseRulePatchSchema, TimelapseRuleSchema, TimelapseTemplateSchema, } from './notification/timelapse-rule.js';
|
|
203
204
|
export { CLUSTER_MODEL_SCOPED_STEPS, CLUSTER_MODEL_SECTION_ID, CLUSTER_STEP_SETTING_FIELDS, type ClusterModelScopedStep, type ClusterStepModels, type ClusterStepSettingField, type ClusterStepSettings, clusterModelSettingKey, clusterStepSettingFieldsFor, clusterStepSettingKey, DEFAULT_CLUSTER_STEP_MODELS, DEFAULT_CLUSTER_STEP_SETTINGS, DEFAULT_MIN_LANDMARK_FACE_SIZE_PX, type HydratedClusterSection, type HydratedClusterView, isClusterScopedStep, overlayClusterStepSettings, pickClusterStepModels, pickClusterStepSettings, readClusterStepModels, readClusterStepSettings, resolveClusterStepModelId, type StepModelScope, } from './pipeline/cluster-model-scope.js';
|
|
204
|
-
export { DEFAULT_DETAIL_CROP_CONVENTION, DETAIL_CROP_PADDING_FIELD, DETAIL_CROP_PADDING_KEY, DETAIL_CROP_SECTION_ID, DETAIL_CROP_SQUARE_KEY,
|
|
205
|
-
export { DEFAULT_NATIVE_LEASE_SETTINGS, NATIVE_LEASE_ACTIVITY_FIELD, NATIVE_LEASE_ACTIVITY_KEY, NATIVE_LEASE_ADMISSION_FIELD, NATIVE_LEASE_ADMISSION_KEY, NATIVE_LEASE_BUDGET_FIELD, NATIVE_LEASE_BUDGET_KEY, NATIVE_LEASE_HOLD_FIELD, NATIVE_LEASE_HOLD_KEY, NATIVE_LEASE_SECTION_ID, NATIVE_LEASE_TILE_BUDGET_FIELD, NATIVE_LEASE_TILE_BUDGET_KEY, type NativeLeaseAdmission, NativeLeaseAdmissionSchema, type NativeLeaseKnob, type NativeLeaseNumberKnob, type NativeLeaseSettings, type NativeLeaseSettingsOverride, NativeLeaseSettingsSchema, pickNativeLeaseOverride, readNativeLeaseOverride, } from './pipeline/native-lease.js';
|
|
205
|
+
export { DEFAULT_DETAIL_CROP_CONVENTION, DETAIL_CROP_PADDING_FIELD, DETAIL_CROP_PADDING_KEY, DETAIL_CROP_SECTION_ID, DETAIL_CROP_SQUARE_KEY, type DetailCropConvention, DetailCropConventionSchema, type DetailCropRect, deriveDetailCropRect, FULL_IMAGE_BBOX, type HydratedSettingsSection, type HydratedSettingsView, pickDetailCropConvention, readDetailCropConvention, } from './pipeline/detail-crop.js';
|
|
206
|
+
export { DEFAULT_NATIVE_LEASE_SETTINGS, NATIVE_LEASE_ACTIVITY_FIELD, NATIVE_LEASE_ACTIVITY_KEY, NATIVE_LEASE_ADMISSION_FIELD, NATIVE_LEASE_ADMISSION_KEY, NATIVE_LEASE_BUDGET_FIELD, NATIVE_LEASE_BUDGET_KEY, NATIVE_LEASE_HOLD_FIELD, NATIVE_LEASE_HOLD_KEY, NATIVE_LEASE_SCENE_BUDGET_FIELD, NATIVE_LEASE_SCENE_BUDGET_KEY, NATIVE_LEASE_SECTION_ID, NATIVE_LEASE_TILE_BUDGET_FIELD, NATIVE_LEASE_TILE_BUDGET_KEY, type NativeLeaseAdmission, NativeLeaseAdmissionSchema, type NativeLeaseKnob, type NativeLeaseNumberKnob, type NativeLeaseSettings, type NativeLeaseSettingsOverride, NativeLeaseSettingsSchema, pickNativeLeaseOverride, readNativeLeaseOverride, } from './pipeline/native-lease.js';
|
|
206
207
|
export { ACCESS_ROLES, type AccessRoleAssignment, type AccessRoleId, type AccessRoleSpec, buildRoleScopes, detectAccessRole, roleSpec, } from './schemas/access-roles.js';
|
|
207
208
|
export { type ApiKeyRecord, ApiKeyRecordSchema, type CapScope, CapScopeSchema, type DeviceSelector, DeviceSelectorSchema, type DeviceTokenScope, type MethodAccess, MethodAccessSchema, type ScopedToken, ScopedTokenSchema, type TokenScope, TokenScopeSchema, type UserRecord, UserRecordSchema, } from './schemas/auth-records.js';
|
|
208
209
|
export { type DeviceMetaLike, type DeviceReachSummary, deviceSelectorMatches, type EffectiveScope, normalizeTokenScopes, resolveViewableDeviceIds, type ScopeGrantSummary, scopeInherits, summarizeEffectiveScope, } from './schemas/device-selector.js';
|
|
@@ -218,7 +219,7 @@ export { errMsg } from './utils/err-msg.js';
|
|
|
218
219
|
export { hfModelUrl } from './utils/hf-url.js';
|
|
219
220
|
export { asBoolean, asJsonArray, asJsonObject, asNumber, asString, parseJsonArray, parseJsonObject, parseJsonUnknown, } from './utils/json-safe.js';
|
|
220
221
|
export { maskUrlCredentials } from './utils/mask-url.js';
|
|
221
|
-
export {
|
|
222
|
+
export { commitWatchdogRestart, DEFAULT_POOL_MEMORY_POLICY, evaluatePoolMemory, initialPoolMemoryState, type PoolMemoryAction, type PoolMemoryPolicy, type PoolMemoryState, type PoolMemoryTelemetry, type PoolMemoryVerdict, PoolMemoryWatchdog, type PoolMemoryWatchdogOptions, type ProcMemory, parseProcStatus, pickRestartCandidate, poolMemoryThreshold, type RestartCandidate, resetPoolBaseline, resolvePoolMemoryPolicy, } from './utils/pool-memory-watchdog.js';
|
|
222
223
|
export { cellsToRects, type NormRect, rectsToCells } from './utils/privacy-grid-raster.js';
|
|
223
224
|
export { RingBuffer } from './utils/ring-buffer.js';
|
|
224
225
|
export type { InferenceStepResult } from './utils/run-inference-step.js';
|