@camstack/types 1.2.275 → 1.2.277

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.
@@ -71,8 +71,8 @@ export declare const RecordTriggerSchema: z.ZodEnum<{
71
71
  vehicle: "vehicle";
72
72
  animal: "animal";
73
73
  motion: "motion";
74
- loitering: "loitering";
75
74
  continuous: "continuous";
75
+ loitering: "loitering";
76
76
  lineCrossing: "lineCrossing";
77
77
  intrusion: "intrusion";
78
78
  alarmInput: "alarmInput";
@@ -93,8 +93,8 @@ export declare const RecordWindowSchema: z.ZodObject<{
93
93
  vehicle: "vehicle";
94
94
  animal: "animal";
95
95
  motion: "motion";
96
- loitering: "loitering";
97
96
  continuous: "continuous";
97
+ loitering: "loitering";
98
98
  lineCrossing: "lineCrossing";
99
99
  intrusion: "intrusion";
100
100
  alarmInput: "alarmInput";
@@ -221,8 +221,8 @@ export declare const RecordingOnboardStatusSchema: z.ZodObject<{
221
221
  vehicle: "vehicle";
222
222
  animal: "animal";
223
223
  motion: "motion";
224
- loitering: "loitering";
225
224
  continuous: "continuous";
225
+ loitering: "loitering";
226
226
  lineCrossing: "lineCrossing";
227
227
  intrusion: "intrusion";
228
228
  alarmInput: "alarmInput";
@@ -292,8 +292,8 @@ export declare const OnboardScheduleSupportSchema: z.ZodObject<{
292
292
  vehicle: "vehicle";
293
293
  animal: "animal";
294
294
  motion: "motion";
295
- loitering: "loitering";
296
295
  continuous: "continuous";
296
+ loitering: "loitering";
297
297
  lineCrossing: "lineCrossing";
298
298
  intrusion: "intrusion";
299
299
  alarmInput: "alarmInput";
@@ -383,8 +383,8 @@ export declare const RecordingOnboardOptionsSchema: z.ZodObject<{
383
383
  vehicle: "vehicle";
384
384
  animal: "animal";
385
385
  motion: "motion";
386
- loitering: "loitering";
387
386
  continuous: "continuous";
387
+ loitering: "loitering";
388
388
  lineCrossing: "lineCrossing";
389
389
  intrusion: "intrusion";
390
390
  alarmInput: "alarmInput";
@@ -413,8 +413,8 @@ export declare const RecordingOnboardPatchSchema: z.ZodObject<{
413
413
  vehicle: "vehicle";
414
414
  animal: "animal";
415
415
  motion: "motion";
416
- loitering: "loitering";
417
416
  continuous: "continuous";
417
+ loitering: "loitering";
418
418
  lineCrossing: "lineCrossing";
419
419
  intrusion: "intrusion";
420
420
  alarmInput: "alarmInput";
@@ -533,8 +533,8 @@ export declare const recordingOnboardCapability: {
533
533
  vehicle: "vehicle";
534
534
  animal: "animal";
535
535
  motion: "motion";
536
- loitering: "loitering";
537
536
  continuous: "continuous";
537
+ loitering: "loitering";
538
538
  lineCrossing: "lineCrossing";
539
539
  intrusion: "intrusion";
540
540
  alarmInput: "alarmInput";
@@ -556,8 +556,8 @@ export declare const recordingOnboardCapability: {
556
556
  vehicle: "vehicle";
557
557
  animal: "animal";
558
558
  motion: "motion";
559
- loitering: "loitering";
560
559
  continuous: "continuous";
560
+ loitering: "loitering";
561
561
  lineCrossing: "lineCrossing";
562
562
  intrusion: "intrusion";
563
563
  alarmInput: "alarmInput";
@@ -614,8 +614,8 @@ export declare const recordingOnboardCapability: {
614
614
  vehicle: "vehicle";
615
615
  animal: "animal";
616
616
  motion: "motion";
617
- loitering: "loitering";
618
617
  continuous: "continuous";
618
+ loitering: "loitering";
619
619
  lineCrossing: "lineCrossing";
620
620
  intrusion: "intrusion";
621
621
  alarmInput: "alarmInput";
@@ -674,8 +674,8 @@ export declare const recordingOnboardCapability: {
674
674
  vehicle: "vehicle";
675
675
  animal: "animal";
676
676
  motion: "motion";
677
- loitering: "loitering";
678
677
  continuous: "continuous";
678
+ loitering: "loitering";
679
679
  lineCrossing: "lineCrossing";
680
680
  intrusion: "intrusion";
681
681
  alarmInput: "alarmInput";
@@ -0,0 +1,70 @@
1
+ /**
2
+ * What a composition may BUILD on a device type (G2, D676): the caps a new
3
+ * device of that type, or an existing one that lacks them, can be given. The
4
+ * blockers are the validator's own refusal codes, and a spec compares this
5
+ * listing with `planComposition` for every capability — the editor can never
6
+ * offer a feature the save would refuse for the same reason.
7
+ */
8
+ import { z } from 'zod';
9
+ import type { CapabilityDefinition } from '../capabilities/capability-definition.js';
10
+ import type { DeviceType } from '../device/device-type.js';
11
+ import { type CompositionProblemCode } from './composition-report.js';
12
+ export declare const ComposableFieldSchema: z.ZodObject<{
13
+ path: z.ZodString;
14
+ kind: z.ZodEnum<{
15
+ string: "string";
16
+ number: "number";
17
+ boolean: "boolean";
18
+ enum: "enum";
19
+ }>;
20
+ nullable: z.ZodBoolean;
21
+ required: z.ZodBoolean;
22
+ enumValues: z.ZodOptional<z.ZodArray<z.ZodString>>;
23
+ }, z.core.$strip>;
24
+ export type ComposableField = z.infer<typeof ComposableFieldSchema>;
25
+ export declare const ComposableCapabilitySchema: z.ZodObject<{
26
+ cap: z.ZodString;
27
+ fields: z.ZodArray<z.ZodObject<{
28
+ path: z.ZodString;
29
+ kind: z.ZodEnum<{
30
+ string: "string";
31
+ number: "number";
32
+ boolean: "boolean";
33
+ enum: "enum";
34
+ }>;
35
+ nullable: z.ZodBoolean;
36
+ required: z.ZodBoolean;
37
+ enumValues: z.ZodOptional<z.ZodArray<z.ZodString>>;
38
+ }, z.core.$strip>>;
39
+ itemArray: z.ZodOptional<z.ZodObject<{
40
+ path: z.ZodString;
41
+ keyField: z.ZodString;
42
+ }, z.core.$strip>>;
43
+ }, z.core.$strip>;
44
+ export type ComposableCapability = z.infer<typeof ComposableCapabilitySchema>;
45
+ export declare const ComposableCapabilitiesSchema: z.ZodObject<{
46
+ caps: z.ZodArray<z.ZodObject<{
47
+ cap: z.ZodString;
48
+ fields: z.ZodArray<z.ZodObject<{
49
+ path: z.ZodString;
50
+ kind: z.ZodEnum<{
51
+ string: "string";
52
+ number: "number";
53
+ boolean: "boolean";
54
+ enum: "enum";
55
+ }>;
56
+ nullable: z.ZodBoolean;
57
+ required: z.ZodBoolean;
58
+ enumValues: z.ZodOptional<z.ZodArray<z.ZodString>>;
59
+ }, z.core.$strip>>;
60
+ itemArray: z.ZodOptional<z.ZodObject<{
61
+ path: z.ZodString;
62
+ keyField: z.ZodString;
63
+ }, z.core.$strip>>;
64
+ }, z.core.$strip>>;
65
+ }, z.core.$strip>;
66
+ export type ComposableCapabilities = z.infer<typeof ComposableCapabilitiesSchema>;
67
+ /** Why a cap cannot be BUILT (new device, or added to an existing one) on `deviceType`; [] = it can. */
68
+ export declare function builtCapabilityBlockers(def: CapabilityDefinition, deviceType: DeviceType): readonly CompositionProblemCode[];
69
+ /** Every cap with no blocker, sorted by name. */
70
+ export declare function describeComposableCaps(defs: readonly CapabilityDefinition[], deviceType: DeviceType): readonly ComposableCapability[];
@@ -1,34 +1,3 @@
1
- /**
2
- * One composed field, evaluated from what its sources say NOW (D659).
3
- *
4
- * Pure. The composer calls it on every source change, and the slice-5 editor
5
- * will call it for its live preview, so both see the same answer.
6
- *
7
- * The rules (spec §2):
8
- * - a source that is offline or unreadable keeps its last value and is marked
9
- * STALE; the field is stale and keeps computing (D49);
10
- * - a source that is GONE makes the field UNAVAILABLE, `fatal`, and never a
11
- * plausible number (D393);
12
- * - a source that is unavailable but NOT gone (e.g. a cap unregistered at
13
- * runtime, R7b) makes the field UNAVAILABLE, non-fatal, `value: null`: it
14
- * may come back on its own, no block failure is raised for it;
15
- * - an expression that fails on a value makes the field unavailable for that
16
- * value, and NOT fatal: the next value may compute.
17
- *
18
- * `confirmed` (D663, D49): whether a NON-fatal unavailability is an ANSWER — a
19
- * cap the provider unregistered and a re-read agreed, a field the source
20
- * reported without, an expression that failed on a value — or only the
21
- * absence of one (a failed read, a first or empty read, a source not tracked
22
- * yet). Only a confirmed unavailability may hand a `release`-mode field back
23
- * to the native provider; an unconfirmed one holds it on its last value.
24
- * Absent means NOT confirmed. Fatal is always confirmed.
25
- *
26
- * When an expression has more than one unavailable binding, a FATAL one always
27
- * wins the outcome, regardless of position: every binding is scanned before
28
- * the field is judged, so an earlier non-fatal binding (e.g. a cap that is
29
- * momentarily unregistered) can never hide a later fatal one (a deleted
30
- * source) behind an early return.
31
- */
32
1
  import type { ExpressionValue } from '../expression/ast.js';
33
2
  import { type StatefulExpressionMemory } from '../expression/expression-source.js';
34
3
  import { type CompositionFieldRead, type CompositionFieldSource } from './composition.js';
@@ -2,6 +2,7 @@
2
2
  * Compositions: composed devices (D659). This is the module barrel; leaf files
3
3
  * inside @camstack/types import the deep modules, never this file.
4
4
  */
5
+ export * from './composable-caps.js';
5
6
  export * from './composition.js';
6
7
  export * from './composition-events.js';
7
8
  export * from './composition-graph.js';
@@ -10,5 +11,6 @@ export * from './composition-report.js';
10
11
  export * from './evaluate-field.js';
11
12
  export * from './examples.js';
12
13
  export * from './expression-kinds.js';
14
+ export * from './presets/doorbell-feature.js';
13
15
  export * from './state-fields.js';
14
16
  export * from './validate-composition.js';
@@ -0,0 +1,20 @@
1
+ import type { CompositionFieldsFeature, CompositionSourceRef } from '../composition.js';
2
+ /** A rise closer than this to the previous one is the same press (D671). */
3
+ export declare const DOORBELL_RISE_DEBOUNCE_MS = 2000;
4
+ /** One source cap of one device that rings: its level field and its transition time. */
5
+ export interface DoorbellFeatureSource {
6
+ readonly source: CompositionSourceRef;
7
+ readonly cap: string;
8
+ readonly activeField: string;
9
+ readonly changedAtField: string;
10
+ }
11
+ export interface DoorbellFeatureInput {
12
+ /** The device the doorbell cap lands on — `pressCountSinceStart` reads its own `lastPressedAt`. */
13
+ readonly camera: CompositionSourceRef;
14
+ readonly sources: readonly DoorbellFeatureSource[];
15
+ readonly enabled: boolean;
16
+ }
17
+ /** Every source cap of `source` that `SOURCE_CAP_ACTIVE_FIELD` knows AND the device has bound. */
18
+ export declare function doorbellFeatureSources(source: CompositionSourceRef, boundCaps: readonly string[]): readonly DoorbellFeatureSource[];
19
+ /** The D671 feature, byte for byte what the migration writes. Throws on zero sources. */
20
+ export declare function buildDoorbellCompositionFeature(input: DoorbellFeatureInput): CompositionFieldsFeature;
@@ -1631,6 +1631,13 @@ export type AppRouter = TrpcCoreRouter<{
1631
1631
  output: z.infer<typeof coreBlocksCapability.methods.getCustomization.output>;
1632
1632
  meta: object;
1633
1633
  }>;
1634
+ listComposableCaps: TRPCQueryProcedure<{
1635
+ input: {
1636
+ [x: string]: unknown;
1637
+ } & z.input<typeof coreBlocksCapability.methods.listComposableCaps.input>;
1638
+ output: z.infer<typeof coreBlocksCapability.methods.listComposableCaps.output>;
1639
+ meta: object;
1640
+ }>;
1634
1641
  validateComposition: TRPCMutationProcedure<{
1635
1642
  input: {
1636
1643
  [x: string]: unknown;
@@ -5508,6 +5515,34 @@ export type AppRouter = TrpcCoreRouter<{
5508
5515
  output: z.infer<typeof pipelineAnalyticsCapability.methods.listArchivedDebugNotes.output>;
5509
5516
  meta: object;
5510
5517
  }>;
5518
+ setTrackRelation: TRPCMutationProcedure<{
5519
+ input: {
5520
+ [x: string]: unknown;
5521
+ } & z.input<typeof pipelineAnalyticsCapability.methods.setTrackRelation.input>;
5522
+ output: z.infer<typeof pipelineAnalyticsCapability.methods.setTrackRelation.output>;
5523
+ meta: object;
5524
+ }>;
5525
+ clearTrackRelation: TRPCMutationProcedure<{
5526
+ input: {
5527
+ [x: string]: unknown;
5528
+ } & z.input<typeof pipelineAnalyticsCapability.methods.clearTrackRelation.input>;
5529
+ output: z.infer<typeof pipelineAnalyticsCapability.methods.clearTrackRelation.output>;
5530
+ meta: object;
5531
+ }>;
5532
+ setTrackPurity: TRPCMutationProcedure<{
5533
+ input: {
5534
+ [x: string]: unknown;
5535
+ } & z.input<typeof pipelineAnalyticsCapability.methods.setTrackPurity.input>;
5536
+ output: z.infer<typeof pipelineAnalyticsCapability.methods.setTrackPurity.output>;
5537
+ meta: object;
5538
+ }>;
5539
+ listTrackRelations: TRPCQueryProcedure<{
5540
+ input: {
5541
+ [x: string]: unknown;
5542
+ } & z.input<typeof pipelineAnalyticsCapability.methods.listTrackRelations.input>;
5543
+ output: z.infer<typeof pipelineAnalyticsCapability.methods.listTrackRelations.output>;
5544
+ meta: object;
5545
+ }>;
5511
5546
  listBirthDecisions: TRPCQueryProcedure<{
5512
5547
  input: {
5513
5548
  [x: string]: unknown;
@@ -6390,6 +6425,13 @@ export type AppRouter = TrpcCoreRouter<{
6390
6425
  output: z.infer<typeof pipelineOrchestratorCapability.methods.getCameraStatuses.output>;
6391
6426
  meta: object;
6392
6427
  }>;
6428
+ setCameraSensors: TRPCMutationProcedure<{
6429
+ input: {
6430
+ [x: string]: unknown;
6431
+ } & z.input<typeof pipelineOrchestratorCapability.methods.setCameraSensors.input>;
6432
+ output: z.infer<typeof pipelineOrchestratorCapability.methods.setCameraSensors.output>;
6433
+ meta: object;
6434
+ }>;
6393
6435
  reconcileFromDisk: TRPCMutationProcedure<{
6394
6436
  input: {
6395
6437
  nodeId?: string | undefined;
@@ -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: 1189 method paths across 162 capabilities.
9
+ * Coverage: 1195 method paths across 162 capabilities.
10
10
  */
11
11
  import type { CapabilityMethodAccess } from '../capabilities/capability-definition.js';
12
12
  export interface MethodAccessRecord {
@@ -6,8 +6,8 @@
6
6
  * system-scope cap that takes a deviceId was previously never device-filtered
7
7
  * — see the generator header).
8
8
  *
9
- * Coverage: 402 methods carry a device reference, of which
10
- * 143 are on SYSTEM-scope caps.
9
+ * Coverage: 407 methods carry a device reference, of which
10
+ * 144 are on SYSTEM-scope caps.
11
11
  *
12
12
  * Top-level fields, number arrays, and one-level arrays of objects carrying
13
13
  * a numeric device field (targets[].deviceId) are all mapped; the matcher
@@ -65,7 +65,7 @@ export interface SystemProxy {
65
65
  readonly backup: Pick<InferProvider<typeof backupCapability>, 'listDestinations' | 'trigger' | 'listRuns' | 'cancel' | 'list' | 'listLocations' | 'getEntries' | 'restore' | 'delete' | 'listArchives' | 'upsertDestinationPolicy' | 'previewSchedule' | 'listSchedules' | 'upsertSchedule' | 'deleteSchedule'>;
66
66
  readonly broker: Pick<InferProvider<typeof brokerCapability>, 'list' | 'get' | 'listProviders' | 'add' | 'remove' | 'testConnection' | 'getSettings' | 'setSettings' | 'getBrokerConfig' | 'getSettingsSchema' | 'testSettings' | 'publish' | 'subscribe' | 'unsubscribe' | 'getState' | 'getStatus'>;
67
67
  readonly connectionTest: Pick<InferProvider<typeof connectionTestCapability>, 'testSettings' | 'describeTest'>;
68
- readonly coreBlocks: Pick<InferProvider<typeof coreBlocksCapability>, 'list' | 'get' | 'create' | 'update' | 'delete' | 'setEnabled' | 'restart' | 'compile' | 'getTypeDefs' | 'createComposition' | 'updateComposition' | 'getComposition' | 'listCompositions' | 'getCustomization' | 'validateComposition'>;
68
+ readonly coreBlocks: Pick<InferProvider<typeof coreBlocksCapability>, 'list' | 'get' | 'create' | 'update' | 'delete' | 'setEnabled' | 'restart' | 'compile' | 'getTypeDefs' | 'createComposition' | 'updateComposition' | 'getComposition' | 'listCompositions' | 'getCustomization' | 'listComposableCaps' | 'validateComposition'>;
69
69
  readonly decoder: Pick<InferProvider<typeof decoderCapability>, 'supportsCodec' | 'getInfo' | 'createSession' | 'destroySession' | 'pushPacket' | 'openStream' | 'pullFrames' | 'pullHandles' | 'getFrame' | 'getShmStats' | 'updateConfig' | 'getStats' | 'listActiveSessions' | 'reprobeHwaccel'>;
70
70
  readonly deviceAdoption: Pick<InferProvider<typeof deviceAdoptionCapability>, 'listCandidateFilters' | 'listCandidates' | 'getCandidate' | 'refresh' | 'adopt' | 'release' | 'resync'>;
71
71
  readonly deviceExport: Pick<InferProvider<typeof deviceExportCapability>, 'getStatus' | 'listSupportedDeviceKinds' | 'listExposedDevices' | 'exposeDevice' | 'unexposeDevice'>;
@@ -86,7 +86,7 @@ export interface SystemProxy {
86
86
  readonly notificationRules: Pick<InferProvider<typeof notificationRulesCapability>, 'listRules' | 'getRule' | 'createRule' | 'updateRule' | 'deleteRule' | 'setRuleEnabled' | 'getClipRetentionAsks' | 'listDeviceMutes' | 'testRule' | 'previewStateSummary' | 'getConditionCatalog' | 'getTemplateCatalog' | 'previewTemplate' | 'getHistory' | 'getRuleLastRuns' | 'resolveArtifactUrl' | 'listSnoozes' | 'createSnooze' | 'cancelSnooze' | 'getAlarmConfig' | 'setAlarmConfig'>;
87
87
  readonly osdManager: Pick<InferProvider<typeof osdManagerCapability>, 'getConditionSupport' | 'copyDeviceConfiguration'>;
88
88
  readonly pipelineExecutor: Pick<InferProvider<typeof pipelineExecutorCapability>, 'getAvailableEngines' | 'getSelectedEngine' | 'getDefaultSteps' | 'getEngineProvisioning' | 'getVideoPipelineSteps' | 'setVideoPipelineSteps' | 'clearDeviceOverrides' | 'getInferenceDeviceHealth' | 'rearmInferenceDevice' | 'getSchema' | 'getGlobalSteps' | 'getGlobalPipelineConfig' | 'getOrchestratorConfigSchema' | 'validatePipeline' | 'listTemplates' | 'saveTemplate' | 'updateTemplate' | 'deleteTemplate' | 'getCapabilities' | 'getAddonModels' | 'downloadModel' | 'deleteModel' | 'cacheFrameInPool' | 'inferCached' | 'uncacheFrame' | 'getEffectiveTuning' | 'listLoadedEngines' | 'spinEngine' | 'killEngine' | 'listReferenceImages' | 'getReferenceImage' | 'getReferenceAudioFiles' | 'getReferenceAudio' | 'getAudioCapabilities' | 'runAudioTest' | 'getDetectionConfigSchema'>;
89
- readonly pipelineOrchestrator: Pick<InferProvider<typeof pipelineOrchestratorCapability>, 'pauseForStorageMigration' | 'resumeForStorageMigration' | 'rebalance' | 'getPipelineAssignments' | 'getAgentLoad' | 'getClusterModelChoice' | 'getGlobalMetrics' | 'getCapabilityBindings' | 'setCapabilityBinding' | 'getIngestOwner' | 'getAudioNodeLoad' | 'getAudioAssignments' | 'getAgentSettings' | 'listAgentSettings' | 'removeAgentSettings' | 'setAgentMaxCameras' | 'setAgentDetectWeight' | 'setAgentCapabilities' | 'setAgentDecodeLimits' | 'setAgentReachableHost' | 'setAgentInferenceDevices' | 'getNodeInferenceDevices' | 'resetNodePipelineDefaults' | 'getCameraStatuses' | 'reconcileFromDisk' | 'getReconcileFromDiskStatus' | 'listTemplates' | 'saveTemplate' | 'updateTemplate' | 'deleteTemplate'>;
89
+ readonly pipelineOrchestrator: Pick<InferProvider<typeof pipelineOrchestratorCapability>, 'pauseForStorageMigration' | 'resumeForStorageMigration' | 'rebalance' | 'getPipelineAssignments' | 'getAgentLoad' | 'getClusterModelChoice' | 'getGlobalMetrics' | 'getCapabilityBindings' | 'setCapabilityBinding' | 'getIngestOwner' | 'getAudioNodeLoad' | 'getAudioAssignments' | 'getAgentSettings' | 'listAgentSettings' | 'removeAgentSettings' | 'setAgentMaxCameras' | 'setAgentDetectWeight' | 'setAgentCapabilities' | 'setAgentDecodeLimits' | 'setAgentReachableHost' | 'setAgentInferenceDevices' | 'getNodeInferenceDevices' | 'resetNodePipelineDefaults' | 'getCameraStatuses' | 'setCameraSensors' | 'reconcileFromDisk' | 'getReconcileFromDiskStatus' | 'listTemplates' | 'saveTemplate' | 'updateTemplate' | 'deleteTemplate'>;
90
90
  readonly pipelineRunner: Pick<InferProvider<typeof pipelineRunnerCapability>, 'attachCamera' | 'reportMotion' | 'getLocalLoad' | 'getLocalMetrics' | 'getAllCameraMetrics' | 'getLocalCameras' | 'getNativeCrop' | 'runStatelessStep'>;
91
91
  readonly plateGallery: Pick<InferProvider<typeof plateGalleryCapability>, 'getPlateMedia' | 'searchPlates' | 'suggestPlateClusters' | 'correctPlateText' | 'deletePlate' | 'listVehicles' | 'createVehicle' | 'renameVehicle' | 'deleteVehicle' | 'listVehicleSamples' | 'removeVehicleSample' | 'assignPlate' | 'unassignPlate' | 'assignPlates' | 'unassignPlates'>;
92
92
  readonly recordingArchive: Pick<InferProvider<typeof recordingArchiveCapability>, 'getAvailabilityBatch' | 'getDaysWithRecordingsBatch' | 'getStorageUsage' | 'listOpsLog' | 'pauseForStorageMigration' | 'resumeForStorageMigration' | 'refreshStorageLocationsForMigration' | 'startStorageMigrationMove' | 'getStorageMigrationMoveStatus' | 'cancelStorageMigrationMove' | 'relocateFootage' | 'listRelocateJobs' | 'getRelocateResidue' | 'reconcileLedgerAgainstDisk' | 'cancelRelocateJob' | 'planStorageRebalance' | 'startStorageRebalance' | 'getPlacement' | 'setDevicePlacement'>;
package/dist/index.d.ts CHANGED
@@ -52,6 +52,7 @@ export { collectSecretConfigKeys, isSecretConfigField, REDACTED_SECRET, schemaDe
52
52
  export type * from './interfaces/context.js';
53
53
  export * from './interfaces/birth-decision-ledger.js';
54
54
  export * from './interfaces/debug-note-archive.js';
55
+ export * from './interfaces/track-relations.js';
55
56
  export type * from './interfaces/decoder.js';
56
57
  export type * from './interfaces/detection-addon.js';
57
58
  export type { DeviceEvent, DeviceMetadata, DeviceState } from './interfaces/device.js';