@camstack/types 1.2.399 → 1.2.401

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.
@@ -72,9 +72,11 @@ export interface ConfigSection {
72
72
  * inside the same top tab in `order` sequence — used for the
73
73
  * Zones tab where orchestrator (geometry CRUD) + motion-wasm
74
74
  * (motion rules) + detection-pipeline (detection rules) all
75
- * contribute to one operator surface.
75
+ * contribute to one operator surface. `'hero'` shows the section ONCE
76
+ * directly under the device's hero card, outside every tab — the
77
+ * Consumables section (D915).
76
78
  */
77
- readonly location?: 'settings' | 'top-tab';
79
+ readonly location?: 'settings' | 'top-tab' | 'hero';
78
80
  /** Sort order within the tab. Lower = top. */
79
81
  readonly order?: number;
80
82
  /**
@@ -7,6 +7,12 @@ export interface DeviceMeasuredCapacity {
7
7
  readonly maxSessions: number;
8
8
  readonly modelId: string | null;
9
9
  readonly measuredAtMs: number;
10
+ /**
11
+ * Which measurement the number comes from: a `pipeline` cell's sessions, or
12
+ * a `device` cell's `kMax` read as sessions (an upper bound — see
13
+ * `sessionsOfDeviceCell`). Absent = a source that does not say.
14
+ */
15
+ readonly phase?: 'pipeline' | 'device';
10
16
  }
11
17
  /** One node's measured capacity. */
12
18
  export interface NodeMeasuredCapacity {
@@ -22,6 +28,27 @@ export interface NodeCapacitySource {
22
28
  /** The usable (fresh) measured capacity of each asked node that has any. */
23
29
  readMeasuredCapacity(nodeIds: readonly string[]): Promise<ReadonlyMap<string, NodeMeasuredCapacity>>;
24
30
  }
31
+ /**
32
+ * The measured capacity of `deviceKey` for the model it runs NOW, or
33
+ * undefined. A cell measured for another model says nothing about this one
34
+ * (a failed load of a heavier build is not this build's capacity), and a cell
35
+ * that names no model cannot be matched. The ONE predicate behind both the
36
+ * automatic shares and the automatic benchmark's "has results".
37
+ */
38
+ export declare function capacityForModel(node: NodeMeasuredCapacity | undefined, deviceKey: string, modelId: string | null): DeviceMeasuredCapacity | undefined;
39
+ /** A measured cell the shares ignore: it is for a model the device does not run now. */
40
+ export interface ForeignCapacityCell {
41
+ readonly nodeId: string;
42
+ readonly deviceKey: string;
43
+ readonly measuredModelId: string;
44
+ /** The model Auto tune pins on the device now, or null = none chosen. */
45
+ readonly runsModelId: string | null;
46
+ }
47
+ /**
48
+ * Every measured (device × model) cell that no device runs now — what
49
+ * {@link capacityForModel} skips, so the caller can say so once.
50
+ */
51
+ export declare function foreignCapacityCells(recommendations: readonly NodeRecommendation[], measured: ReadonlyMap<string, NodeMeasuredCapacity>): readonly ForeignCapacityCell[];
25
52
  /** A source that has no results — the benchmark store before it exists. */
26
53
  export declare const NO_MEASURED_CAPACITY: NodeCapacitySource;
27
54
  /** Integer shares summing to 100 (largest remainder); ties broken by key. */
@@ -59,3 +59,49 @@ export type ShareElection = {
59
59
  readonly kind: 'none';
60
60
  };
61
61
  export declare function electByShare(candidates: readonly ShareCandidate[]): ShareElection;
62
+ /**
63
+ * Affinity (D916, amends D913): a camera's sessions are short and frequent, and
64
+ * every election is a fresh one — with the recency memory rotating on purpose,
65
+ * one camera hopped node on 11 of 14 sessions in ten minutes, each hop a stream
66
+ * dial, a decode-worker fork and a cold pre-roll. The candidate a camera ran on
67
+ * last is kept while its deficit is within {@link SHARE_AFFINITY_TOLERANCE_SESSIONS}
68
+ * of the turn holder's, and while it has room (offered, not capped, not
69
+ * drowning). It moves only when the share is really off — and because a kept
70
+ * session still counts toward its candidate, the cumulative split still follows
71
+ * the shares: no candidate runs more than about one session over its share
72
+ * before its cameras leave.
73
+ */
74
+ export declare const SHARE_AFFINITY_TOLERANCE_SESSIONS = 1;
75
+ export type ShareAffinityReason =
76
+ /** The camera has no remembered placement (first session, or it expired). */
77
+ 'no-previous'
78
+ /** The previous candidate is not offered this time (offline, ineligible, in backoff). */
79
+ | 'previous-ineligible'
80
+ /** The previous candidate is at its cap or drowning. */
81
+ | 'previous-no-room'
82
+ /** The share rule elected the previous candidate anyway. */
83
+ | 'previous-is-turn'
84
+ /** Kept: the previous candidate is within the tolerance of the turn holder. */
85
+ | 'within-one-session'
86
+ /** Moved: the previous candidate is more than the tolerance over its share. */
87
+ | 'share-off';
88
+ /** One candidate as the election saw it — what the election line logs. */
89
+ export interface ShareScoredCandidate {
90
+ readonly key: string;
91
+ readonly share: number;
92
+ readonly running: number;
93
+ readonly recent: number;
94
+ readonly deficit: number;
95
+ }
96
+ export interface ShareAffinityElection {
97
+ readonly election: ShareElection;
98
+ /** True when the elected candidate is the previous one. */
99
+ readonly sticky: boolean;
100
+ readonly affinityReason: ShareAffinityReason;
101
+ readonly previousKey: string | null;
102
+ /** The candidate the plain share rule elected (null when nothing was). */
103
+ readonly turnKey: string | null;
104
+ readonly scored: readonly ShareScoredCandidate[];
105
+ }
106
+ /** {@link electByShare}, keeping the previous candidate while the share allows it. */
107
+ export declare function electByShareWithAffinity(candidates: readonly ShareCandidate[], previousKey: string | null, toleranceSessions?: number): ShareAffinityElection;
@@ -46,7 +46,21 @@ export interface MeasuredDetectorCell {
46
46
  /** deviceKey → modelId → the fresh `device` measurement on `nodeId`. */
47
47
  export declare function measuredDetectorCells(rows: readonly NodeBenchmarkResult[], nodeId: string, ctx: StandingContext): Readonly<Record<string, Readonly<Record<string, MeasuredDetectorCell>>>>;
48
48
  /**
49
- * Per node, each device at its newest fresh `pipeline` measurement — the
50
- * `NodeCapacitySource` answer the automatic shares read.
49
+ * Parallel sessions a `device`-phase cell stands for.
50
+ *
51
+ * Both numbers are "streams at the camera rate the hardware carried inside
52
+ * the frame interval" (`kMax` for the detector alone, `maxSessions` for the
53
+ * detector plus its enrichment steps) and the benchmark page already shows
54
+ * `kMax` as "streams", so the unit is the same and the conversion is the
55
+ * identity. It is an UPPER bound for a session that also runs enrichment —
56
+ * which is why a `pipeline` cell for the same model always wins over it.
57
+ */
58
+ export declare function sessionsOfDeviceCell(kMax: number): number;
59
+ /**
60
+ * Per node, every (device × model) at its best fresh measurement: the newest
61
+ * `pipeline` cell, else the newest `device` cell read as
62
+ * {@link sessionsOfDeviceCell}. Several models of one device are kept apart —
63
+ * the caller picks the one the device runs NOW (a cell for another model says
64
+ * nothing about it).
51
65
  */
52
66
  export declare function measuredCapacityFromResults(rows: readonly NodeBenchmarkResult[], nodeIds: readonly string[], ctx: StandingContext): ReadonlyMap<string, NodeMeasuredCapacity>;
@@ -6028,6 +6028,10 @@ var HISTORY_UNIT_LABELS = {
6028
6028
  kbps: "kbps",
6029
6029
  fps: "fps"
6030
6030
  };
6031
+ /** The catalog field path of an item field: `<itemsPath>[].<field>` (`items[].level`). */
6032
+ function historyItemFieldPath(itemsPath, field) {
6033
+ return `${itemsPath}[].${field}`;
6034
+ }
6031
6035
  /** Capture floor (ms) applied to `gauge` / `counter` series when a field states none. */
6032
6036
  var HISTORY_DEFAULT_MIN_INTERVAL_MS = 1e4;
6033
6037
  /**
@@ -6084,7 +6088,11 @@ var ContributionSectionSchema = z.object({
6084
6088
  z.literal(4)
6085
6089
  ]).optional(),
6086
6090
  tab: z.string().optional(),
6087
- location: z.enum(["settings", "top-tab"]).optional(),
6091
+ location: z.enum([
6092
+ "settings",
6093
+ "top-tab",
6094
+ "hero"
6095
+ ]).optional(),
6088
6096
  order: z.number().optional(),
6089
6097
  fields: z.array(z.any())
6090
6098
  });
@@ -8177,4 +8185,4 @@ function sleepCancellable(ms, signal) {
8177
8185
  });
8178
8186
  }
8179
8187
  //#endregion
8180
- export { optionalMethod as $, PeerBytesTicketSchema as $n, expandAudioChunkToF32le as $r, recordArrayItemPath as $t, HF_REPO as A, RECORD_DELETE_BATCH as An, collectHydratedFieldEntries as Ar, makeProfileBrokerId as At, describeCustomActions as B, REVALIDATE_AFTER_MS as Bn, isSecretMarker as Br, RecordFieldPathSchema as Bt, addonSliceHandleApi as C, asRecordsError as Cn, normalizeNodeId as Cr, ProfileRtspEntrySchema as Ct, createSliceHandle as D, RECORD_CLASSES as Dn, isEvent as Dr, StreamSourceSchema as Dt, createMirrorSource as E, RECORD_BATCH_MAX_BYTES as En, emitReadiness as Er, StreamSourceEntrySchema$1 as Et, DEVICE_CHILDREN_BATCH_MAX as F, RECORD_QUERY_MAX as Fn, resolveHydratedFieldValue as Fr, defineEntryKind as Ft, DEVICE_STATUS_METHOD as G, knownSecretCount as Gn, collectKeychainStoredKeys as Gr, StoredRecordKindDeclarationSchema as Gt, adminUiCapability as H, MIN_SCRUBBED_LENGTH as Hn, makeSecretMarker as Hr, RecordKindDeclarationSchema as Ht, CALLER_STAMPED_CAPABILITIES as I, RECORD_SECRET_COLLECTION_PREFIX as In, SECRET_CLEAR as Ir, entryBody as It, PROVIDER_PIN_FIELD as J, shortSecretRefHash as Jn, isSecretConfigField as Jr, defineRecordKinds as Jt, HISTORY_DEFAULT_MIN_INTERVAL_MS as K, registerKnownSecret as Kn, collectSecretConfigKeys as Kr, assertValidDeclaration as Kt, withoutCallerStamp as L, RECORD_SETTINGS_MAX_ROWS as Ln, classifySecretWrite as Lr, createRecordsAccess as Lt, RawStateResultSchema as M, RECORD_MAX_DATA_BYTES as Mn, dehydrateConfigField as Mr, parseProfileBrokerId as Mt, deviceOpsCapability as N, RECORD_MAX_INDEXES as Nn, dehydrateSchema as Nr, selectAssignedProfileSlots as Nt, DEFAULT_TOKEN_EXPIRY as O, RECORD_DATABASES as On, WELL_KNOWN_TABS as Or, SubscribeAudioChunksInputSchema as Ot, viewerUiCapability as P, RECORD_MAX_INDEX_FIELDS as Pn, hydrateSchema as Pr, makeInMemoryRecords as Pt, method as Q, PEER_BYTES_TICKET_TTL_MS as Qn, audioChunkBytesPerSample as Qr, parseSecretPath as Qt, customAction as R, RECORD_SWEEP_INTERVAL_MS as Rn, isSecretClear as Rr, assertTransactScope as Rt, invokeTrpcLeaf as S, UnknownRecordKindError as Sn, parseSecretRef as Sr, FrameHandleSchema as St, createLazyTrpcSource as T, RECORD_BATCH_MAX as Tn, createEvent as Tr, ProfileSlotStatusSchema as Tt, DEFAULT_RUNTIME_STATE_DURABILITY as U, clearKnownSecrets as Un, toSecretFieldView as Ur, RecordKindNameSchema as Ut, deviceCustomAction as V, createSecretsAccess as Vn, isSecretMarkerLike as Vr, RecordIndexSchema as Vt, DEVICE_SETTINGS_CONTRIBUTION_METHODS as W, forgetKnownSecret as Wn, REDACTED_SECRET as Wr, RecordRetentionSchema as Wt, expandCapMethods as X, PEER_BYTES_MAX_OUTSTANDING as Xn, schemaDeclaresAnyField as Xr, collectSecretLeaves as Xt, event as Y, PEER_BYTES_CHUNK_BYTES as Yn, omitTransientConfig as Yr, REMOVE_LEAF as Yt, isDeviceConfigCap as Z, PEER_BYTES_STALL_MS as Zn, AUDIO_CHUNK_FORMATS as Zr, mapSecretLeaves as Zt, readErrorI18n as _, RecordUniqueViolationError as _n, buildSecretRef as _r, CamProfileSchema as _t, asJsonArray as a, isZodSecret as an, normalizeAddonInitResult as ar, toNodeId as at, isDeviceScopedCap as b, TransactRefusedError as bn, isSecretRef as br, CameraStreamSchema as bt, asString as c, FilterRequiredError as cn, secretTreeFromPaths as cr, ReadinessTimeoutError as ct, parseJsonUnknown as d, NoCallerError as dn, collectSecretMarkerRefs as dr, scopeKey as dt, isAudioChunkFormat as ei, recordSecretCollection as en, DATAPLANE_SECRET_HEADER as er, resolveCapMount as et, hfModelUrl as f, PlaintextSecretError as fn, isSecretRefOwnedBy as fr, AudioChunkFormatSchema as ft, ErrorI18nPayloadSchema as g, RecordTooLargeError as gn, arrayItemFieldPath as gr, CAM_PROFILE_ORDER as gt, ErrorCodeSchema as h, RecordSecretUnavailableError as hn, SECRET_REF_SCHEME as hr, BrokerStatusSchema as ht, asBoolean as i, collectZodSecretPaths as in, classifyStoreError as ir, readNodePin as it, RUNTIME_DEFAULTS as j, RECORD_ID_MAX_LENGTH as jn, collectHydratedFieldValues as jr, makeSourceBrokerId as jt, HF_BASE_URL as k, RECORD_DEFAULT_MAX_DATA_BYTES as kn, WELL_KNOWN_TAB_MAP as kr, SubscribeAudioChunksResultSchema as kt, parseJsonArray as l, ForeignSecretMarkerError as ln, secretTreeFromSchema as lr, emitDownForOwnedCaps as lt, CamstackError as m, RecordNotFoundError as mn, transformSecretWrite as mr, BrokerStatsSchema as mt, sleepCancellable as n, secretArrayPrefixes as nn, DisposerChain as nr, CAP_NODE_PIN_CONTEXT_KEY as nt, asJsonObject as o, BatchTooLargeError as on, mergeSecretStatePaths as or, MODEL_FORMATS as ot, BOOT_RECOVERY_BACKOFF_MS as p, RECORDS_ERROR_CODES as pn, resolveSecretMarkers as pr, AudioStreamPickSchema as pt, HISTORY_UNIT_LABELS as q, scrubKnownSecrets as qn, isKeychainStoredField as qr, declarationsOf as qt, maskUrlCredentials as r, SECRET_META as rn, BaseAddon as rr, nodePin as rt, asNumber as s, DeclarationRefusedError as sn, parseSecretStatePath as sr, ReadinessRegistry as st, sleep as t, recordSecretRef as tn, SHARE_VIEW_KINDS as tr, systemMethod as tt, parseJsonObject as u, InvalidRecordError as un, KeychainWriteRefusedError as ur, readinessKey as ut, userError as v, RecordsError as vn, formatSecretScope as vr, CamStreamKindSchema as vt, createEventBusSliceSource as w, recordsErrorFromMessage as wn, createDurableState as wr, ProfileSlotSchema as wt, createDeviceProxy as x, UnindexedFilterError as xn, normalizeSecretOwner as xr, DecodedAudioChunkSchema as xt, DEVICE_SCOPED_CAPS as y, RevConflictError as yn, globalSecretScope as yr, CamStreamResolutionSchema as yt, defineCustomActions as z, resolveSecretViewsIn as zn, isSecretFieldView as zr, EntryDescriptorSchema as zt };
8188
+ export { method as $, PEER_BYTES_TICKET_TTL_MS as $n, audioChunkBytesPerSample as $r, parseSecretPath as $t, HF_REPO as A, RECORD_DEFAULT_MAX_DATA_BYTES as An, WELL_KNOWN_TAB_MAP as Ar, SubscribeAudioChunksResultSchema as At, describeCustomActions as B, resolveSecretViewsIn as Bn, isSecretFieldView as Br, EntryDescriptorSchema as Bt, addonSliceHandleApi as C, UnknownRecordKindError as Cn, parseSecretRef as Cr, FrameHandleSchema as Ct, createSliceHandle as D, RECORD_BATCH_MAX_BYTES as Dn, emitReadiness as Dr, StreamSourceEntrySchema$1 as Dt, createMirrorSource as E, RECORD_BATCH_MAX as En, createEvent as Er, ProfileSlotStatusSchema as Et, DEVICE_CHILDREN_BATCH_MAX as F, RECORD_MAX_INDEX_FIELDS as Fn, hydrateSchema as Fr, makeInMemoryRecords as Ft, DEVICE_STATUS_METHOD as G, forgetKnownSecret as Gn, REDACTED_SECRET as Gr, RecordRetentionSchema as Gt, adminUiCapability as H, createSecretsAccess as Hn, isSecretMarkerLike as Hr, RecordIndexSchema as Ht, CALLER_STAMPED_CAPABILITIES as I, RECORD_QUERY_MAX as In, resolveHydratedFieldValue as Ir, defineEntryKind as It, PROVIDER_PIN_FIELD as J, scrubKnownSecrets as Jn, isKeychainStoredField as Jr, declarationsOf as Jt, HISTORY_DEFAULT_MIN_INTERVAL_MS as K, knownSecretCount as Kn, collectKeychainStoredKeys as Kr, StoredRecordKindDeclarationSchema as Kt, withoutCallerStamp as L, RECORD_SECRET_COLLECTION_PREFIX as Ln, SECRET_CLEAR as Lr, entryBody as Lt, RawStateResultSchema as M, RECORD_ID_MAX_LENGTH as Mn, collectHydratedFieldValues as Mr, makeSourceBrokerId as Mt, deviceOpsCapability as N, RECORD_MAX_DATA_BYTES as Nn, dehydrateConfigField as Nr, parseProfileBrokerId as Nt, DEFAULT_TOKEN_EXPIRY as O, RECORD_CLASSES as On, isEvent as Or, StreamSourceSchema as Ot, viewerUiCapability as P, RECORD_MAX_INDEXES as Pn, dehydrateSchema as Pr, selectAssignedProfileSlots as Pt, isDeviceConfigCap as Q, PEER_BYTES_STALL_MS as Qn, AUDIO_CHUNK_FORMATS as Qr, mapSecretLeaves as Qt, customAction as R, RECORD_SETTINGS_MAX_ROWS as Rn, classifySecretWrite as Rr, createRecordsAccess as Rt, invokeTrpcLeaf as S, UnindexedFilterError as Sn, normalizeSecretOwner as Sr, DecodedAudioChunkSchema as St, createLazyTrpcSource as T, recordsErrorFromMessage as Tn, createDurableState as Tr, ProfileSlotSchema as Tt, DEFAULT_RUNTIME_STATE_DURABILITY as U, MIN_SCRUBBED_LENGTH as Un, makeSecretMarker as Ur, RecordKindDeclarationSchema as Ut, deviceCustomAction as V, REVALIDATE_AFTER_MS as Vn, isSecretMarker as Vr, RecordFieldPathSchema as Vt, DEVICE_SETTINGS_CONTRIBUTION_METHODS as W, clearKnownSecrets as Wn, toSecretFieldView as Wr, RecordKindNameSchema as Wt, expandCapMethods as X, PEER_BYTES_CHUNK_BYTES as Xn, omitTransientConfig as Xr, REMOVE_LEAF as Xt, event as Y, shortSecretRefHash as Yn, isSecretConfigField as Yr, defineRecordKinds as Yt, historyItemFieldPath as Z, PEER_BYTES_MAX_OUTSTANDING as Zn, schemaDeclaresAnyField as Zr, collectSecretLeaves as Zt, readErrorI18n as _, RecordTooLargeError as _n, arrayItemFieldPath as _r, CAM_PROFILE_ORDER as _t, asJsonArray as a, collectZodSecretPaths as an, classifyStoreError as ar, readNodePin as at, isDeviceScopedCap as b, RevConflictError as bn, globalSecretScope as br, CamStreamResolutionSchema as bt, asString as c, DeclarationRefusedError as cn, parseSecretStatePath as cr, ReadinessRegistry as ct, parseJsonUnknown as d, InvalidRecordError as dn, KeychainWriteRefusedError as dr, readinessKey as dt, expandAudioChunkToF32le as ei, recordArrayItemPath as en, PeerBytesTicketSchema as er, optionalMethod as et, hfModelUrl as f, NoCallerError as fn, collectSecretMarkerRefs as fr, scopeKey as ft, ErrorI18nPayloadSchema as g, RecordSecretUnavailableError as gn, SECRET_REF_SCHEME as gr, BrokerStatusSchema as gt, ErrorCodeSchema as h, RecordNotFoundError as hn, transformSecretWrite as hr, BrokerStatsSchema as ht, asBoolean as i, SECRET_META as in, BaseAddon as ir, nodePin as it, RUNTIME_DEFAULTS as j, RECORD_DELETE_BATCH as jn, collectHydratedFieldEntries as jr, makeProfileBrokerId as jt, HF_BASE_URL as k, RECORD_DATABASES as kn, WELL_KNOWN_TABS as kr, SubscribeAudioChunksInputSchema as kt, parseJsonArray as l, FilterRequiredError as ln, secretTreeFromPaths as lr, ReadinessTimeoutError as lt, CamstackError as m, RECORDS_ERROR_CODES as mn, resolveSecretMarkers as mr, AudioStreamPickSchema as mt, sleepCancellable as n, recordSecretRef as nn, SHARE_VIEW_KINDS as nr, systemMethod as nt, asJsonObject as o, isZodSecret as on, normalizeAddonInitResult as or, toNodeId as ot, BOOT_RECOVERY_BACKOFF_MS as p, PlaintextSecretError as pn, isSecretRefOwnedBy as pr, AudioChunkFormatSchema as pt, HISTORY_UNIT_LABELS as q, registerKnownSecret as qn, collectSecretConfigKeys as qr, assertValidDeclaration as qt, maskUrlCredentials as r, secretArrayPrefixes as rn, DisposerChain as rr, CAP_NODE_PIN_CONTEXT_KEY as rt, asNumber as s, BatchTooLargeError as sn, mergeSecretStatePaths as sr, MODEL_FORMATS as st, sleep as t, isAudioChunkFormat as ti, recordSecretCollection as tn, DATAPLANE_SECRET_HEADER as tr, resolveCapMount as tt, parseJsonObject as u, ForeignSecretMarkerError as un, secretTreeFromSchema as ur, emitDownForOwnedCaps as ut, userError as v, RecordUniqueViolationError as vn, buildSecretRef as vr, CamProfileSchema as vt, createEventBusSliceSource as w, asRecordsError as wn, normalizeNodeId as wr, ProfileRtspEntrySchema as wt, createDeviceProxy as x, TransactRefusedError as xn, isSecretRef as xr, CameraStreamSchema as xt, DEVICE_SCOPED_CAPS as y, RecordsError as yn, formatSecretScope as yr, CamStreamKindSchema as yt, defineCustomActions as z, RECORD_SWEEP_INTERVAL_MS as zn, isSecretClear as zr, assertTransactScope as zt };
@@ -6028,6 +6028,10 @@ var HISTORY_UNIT_LABELS = {
6028
6028
  kbps: "kbps",
6029
6029
  fps: "fps"
6030
6030
  };
6031
+ /** The catalog field path of an item field: `<itemsPath>[].<field>` (`items[].level`). */
6032
+ function historyItemFieldPath(itemsPath, field) {
6033
+ return `${itemsPath}[].${field}`;
6034
+ }
6031
6035
  /** Capture floor (ms) applied to `gauge` / `counter` series when a field states none. */
6032
6036
  var HISTORY_DEFAULT_MIN_INTERVAL_MS = 1e4;
6033
6037
  /**
@@ -6084,7 +6088,11 @@ var ContributionSectionSchema = zod.z.object({
6084
6088
  zod.z.literal(4)
6085
6089
  ]).optional(),
6086
6090
  tab: zod.z.string().optional(),
6087
- location: zod.z.enum(["settings", "top-tab"]).optional(),
6091
+ location: zod.z.enum([
6092
+ "settings",
6093
+ "top-tab",
6094
+ "hero"
6095
+ ]).optional(),
6088
6096
  order: zod.z.number().optional(),
6089
6097
  fields: zod.z.array(zod.z.any())
6090
6098
  });
@@ -9077,6 +9085,12 @@ Object.defineProperty(exports, "hfModelUrl", {
9077
9085
  return hfModelUrl;
9078
9086
  }
9079
9087
  });
9088
+ Object.defineProperty(exports, "historyItemFieldPath", {
9089
+ enumerable: true,
9090
+ get: function() {
9091
+ return historyItemFieldPath;
9092
+ }
9093
+ });
9080
9094
  Object.defineProperty(exports, "hydrateSchema", {
9081
9095
  enumerable: true,
9082
9096
  get: function() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/types",
3
- "version": "1.2.399",
3
+ "version": "1.2.401",
4
4
  "description": "Shared types, interfaces, and model catalogs for the CamStack detection ecosystem",
5
5
  "keywords": [
6
6
  "camstack",