@stndrds/schema 1.0.0-alpha.265 → 1.0.0-alpha.266

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.
Files changed (47) hide show
  1. package/dist/all--B2_3ksI.d.ts +465 -0
  2. package/dist/all-D5zeUllO.d.mts +465 -0
  3. package/dist/chunk-6ZDH3EJA.js +1261 -0
  4. package/dist/chunk-F6ATLCIR.mjs +1214 -0
  5. package/dist/{chunk-ZBQEMIAV.js → chunk-FDIAOFHS.js} +11 -8
  6. package/dist/{chunk-UXCJ3NI4.mjs → chunk-KDHDC7E6.mjs} +150 -9
  7. package/dist/{chunk-U36ZIBEM.mjs → chunk-O73ROMWQ.mjs} +15 -6
  8. package/dist/{chunk-QIWADKYA.mjs → chunk-POULKEJM.mjs} +11 -9
  9. package/dist/{chunk-EBGRZUIH.js → chunk-Q4SZAMJT.js} +5 -0
  10. package/dist/{chunk-NGGU6BSN.mjs → chunk-QMLO7V5E.mjs} +6 -6
  11. package/dist/{chunk-L4U5QEQL.js → chunk-QN2N3IJZ.js} +158 -8
  12. package/dist/{chunk-JUKLL5RJ.mjs → chunk-R5LAJCBU.mjs} +5 -2
  13. package/dist/{chunk-NI3HCSYH.js → chunk-V6Q7HCA7.js} +11 -11
  14. package/dist/{chunk-QAF3HNKQ.js → chunk-ZPFOKBIN.js} +16 -5
  15. package/dist/exceptions.d.mts +21 -8
  16. package/dist/exceptions.d.ts +21 -8
  17. package/dist/exceptions.js +42 -38
  18. package/dist/exceptions.mjs +1 -1
  19. package/dist/helpers-C1VVEAOO.d.mts +76 -0
  20. package/dist/helpers-vQ6kp8ET.d.ts +76 -0
  21. package/dist/index-Bq1KrQkR.d.ts +2413 -0
  22. package/dist/index-DtxtOBYT.d.mts +2413 -0
  23. package/dist/index.d.mts +1489 -2222
  24. package/dist/index.d.ts +1489 -2222
  25. package/dist/index.js +1274 -1038
  26. package/dist/index.mjs +894 -905
  27. package/dist/{helpers-eyrnPJEF.d.ts → objects-A1ED9af-.d.ts} +32 -77
  28. package/dist/{helpers-uKLet0kF.d.mts → objects-BCaBw2ef.d.mts} +32 -77
  29. package/dist/validation/all.d.mts +4 -2
  30. package/dist/validation/all.d.ts +4 -2
  31. package/dist/validation/all.js +88 -16
  32. package/dist/validation/all.mjs +9 -9
  33. package/dist/validation/complex/phone.js +2 -2
  34. package/dist/validation/complex/phone.mjs +1 -1
  35. package/dist/validation/config/index.d.mts +5 -18
  36. package/dist/validation/config/index.d.ts +5 -18
  37. package/dist/validation/config/index.js +34 -4
  38. package/dist/validation/config/index.mjs +7 -1
  39. package/dist/validation/object/index.d.mts +2 -2
  40. package/dist/validation/object/index.d.ts +2 -2
  41. package/dist/validation/object/index.js +19 -19
  42. package/dist/validation/object/index.mjs +7 -7
  43. package/dist/validation/primitives/text.js +2 -2
  44. package/dist/validation/primitives/text.mjs +1 -1
  45. package/package.json +2 -2
  46. package/dist/chunk-PGERPYDR.js +0 -2
  47. package/dist/chunk-SP3PNHYF.mjs +0 -1
package/dist/index.d.mts CHANGED
@@ -1,19 +1,27 @@
1
- import { i as ComputedValueType, j as ComputedReturnType, f as AttributeType, k as ComputedOptionsSource, l as ComputedDependency, m as ComputedPlan, e as RollupAttribute, n as ComputedFormulaAstNode, A as Attribute, o as LocationGranularity, p as Location, F as FormulaAttribute, D as DateAttribute, q as DateRangeValue, r as DocumentAttribute, d as StatusAttribute, c as SelectAttribute, b as MultiselectAttribute, s as Phone, t as Currency, U as UserAttribute, u as PropertySchema, g as CheckboxAttribute, C as CurrencyAttribute, v as TimeFormat, T as TextAttribute, N as NumberAttribute, P as PhoneAttribute, O as Option, L as LocationAttribute, w as FormulaReturnType, R as RelationAttribute, B as BilateralConfig, S as SingleRelationAttribute, M as MultiRelationAttribute, x as RelationTarget, a as RichtextAttribute, y as RollupFunction, z as UserReferenceType } from './attributes-lBLiOIY3.mjs';
1
+ import { S as SortRule, F as FilterState, V as ViewType, a as ViewConfig, C as ConfigOverrides, P as PermissionScope, A as Action, b as FilterOperator, c as SystemResource, d as ProviderName, M as ModelDefinition, e as AgentSchedule, f as AgentExecutionConfig, g as AgentApprovalPolicy, T as TriggerEventType, h as AgentTriggerBlueprint, i as AgentBlueprint, D as DetailViewConfig, j as DetailViewDefinition, k as SidePanelConfig, l as Field, m as AttributeGroupField, n as FieldGroup, R as RelationGroup, G as Group, o as TableTab, p as CreateMode, q as Tab, L as ListViewConfig, r as ListViewDefinition, s as ViewDefinition, t as ListViewTab, u as FilterValue, v as FilterRule, w as DynamicValue, x as RelativeDateValue } from './index-DtxtOBYT.mjs';
2
+ export { y as AIAvailableModel, z as AIBatchAnswerValue, B as AIBatchQuestion, E as AIBatchQuestionAnswer, H as AIBatchQuestionOption, I as AIBatchQuestionType, J as AIChatMessage, K as AIChatMessagePart, N as AIChatMessagePartType, O as AIChatNotification, Q as AICompactionSummary, U as AIMemoryEntry, W as AIMemoryType, X as AIMessageRole, Y as AIProviderMetrics, Z as AIQuestion, _ as AIQuestionAnswer, $ as AIQuestionOption, a0 as AIQuestionType, a1 as AISubagentStatus, a2 as AITodoItem, a3 as AITodoList, a4 as AITodoStatus, a5 as AIToolCall, a6 as AIToolCallStatus, a7 as AIUsageMetrics, a8 as ALL_ACTIONS, a9 as AccessLevel, aa as ActivityTab, ab as AddAttributeInput, ac as AdvancedFilterState, ad as AgentConfig, ae as AgentDashboard, af as AgentDefinition, ag as AgentEvent, ah as AgentMessageAttachment, ai as AgentMessagePart, aj as AgentMission, ak as AgentMissionArtifact, al as AgentMissionPage, am as AgentMissionPolicy, an as AgentMissionRubric, ao as AgentMissionRubricCriterion, ap as AgentMissionStatus, aq as AgentMissionVerification, ar as AgentMissionView, as as AgentRequiredPermission, at as AgentRun, au as AgentRunStatus, av as AgentSession, aw as AgentSessionMessage, ax as AgentSessionMode, ay as AgentSessionStatus, az as AgentTodoPlan, aA as AgentTodoPlanStatus, aB as AgentTodoPlanView, aC as AgentToolCall, aD as AgentTriggerDefinition, aE as AgentTriggerType, aF as ApprovalMode, aG as AssignRoleInput, aH as CompactionStrategy, aI as CreateCustomObjectInput, aJ as CreateDocument, aK as CreateDocumentLink, aL as CreateFile, aM as CreatePermissionInput, aN as CreateRoleInput, aO as CreateViewInput, aP as CriticConfig, aQ as CurrencyFilterValue, aR as CustomTab, aS as DEFAULT_APPROVAL_POLICY, aT as Document, aU as DocumentFile, aV as DocumentKind, aW as DocumentListOptions, aX as DocumentWithFiles, aY as DocumentWithSubCount, aZ as DocumentsTab, a_ as EdgeQuantifier, a$ as EffectivePermissions, b0 as EmailsTab, b1 as ExtendedFilterRule, b2 as File, b3 as FileOcrStatus, b4 as FilterCombinator, b5 as FilterGroup, b6 as FormDensity, b7 as FormSubmittedAgentEvent, b8 as FormTab, b9 as FormsTab, ba as HumanRequestNeed, bb as InverseSource, bc as ListViewLayout, bd as MAX_TODOS, be as MAX_TODO_DESCRIPTION_CHARS, bf as MAX_TODO_ID_CHARS, bg as MAX_TODO_RESULT_CHARS, bh as MentionEntityType, bi as MentionReference, bj as MentionedContext, bk as MentionedEntityContext, bl as NO_VALUE_OPERATORS, bm as NoValueOperator, bn as OPERATORS_BY_TYPE, bo as ObjectPermissions, bp as Permission, bq as PhoneFilterValue, br as QueryState, bs as ReasoningPartData, bt as RecordAgentEvent, bu as RecordDocuments, bv as RelationOption, bw as RelationOptionsResponse, bx as RelationSource, by as RetryPolicy, bz as RichtextTab, bA as Role, bB as SESSION_TERMINAL_STATUSES, bC as SessionApprovalMode, bD as SortDirection, bE as StorageProvider, bF as StreamEventCompactionEnd, bG as StreamEventCompactionFailed, bH as StreamEventCompactionStart, bI as StreamEventMessagePersisted, bJ as StreamEventMessageUpdated, bK as StreamEventMissionUpdate, bL as StreamEventTodoPlanUpdate, bM as StreamEventUsage, bN as SystemPermissions, bO as TODO_PLAN_STATUSES, bP as TODO_STATUSES, bQ as TabType, bR as TableSource, bS as TerminalSessionStatus, bT as TextPartData, bU as ThinkingPartData, bV as ToolImpact, bW as ToolPartData, bX as ToolPartErrorCode, bY as ToolPartState, bZ as UpdateDocument, b_ as UpdateFile, b$ as UpdateObjectInput, c0 as UpdateRoleInput, c1 as UpdateViewInput, c2 as UserRoleAssignment, c3 as ViewOverlay, c4 as accessLevelToActions, c5 as actionsToAccessLevel, c6 as agentDisplayName, c7 as getRollupFilterOperators, c8 as isDetailView, c9 as isFieldGroup, ca as isListView, cb as isNoValueOperator, cc as isRelationGroup, cd as isTerminalSessionStatus, ce as multiselectOptionWriteSchema, cf as parseAttributeConfig, cg as parseAttributeConfigForCreate, ch as parseAttributeConfigForUpdate, ci as selectOptionWriteSchema, cj as statusGroupSchema, ck as statusOptionWriteSchema } from './index-DtxtOBYT.mjs';
3
+ import { i as ComputedValueType, j as ComputedReturnType, f as AttributeType, k as ComputedOptionsSource, l as ComputedDependency, m as ComputedPlan, e as RollupAttribute, n as ComputedFormulaAstNode, A as Attribute, o as LocationGranularity, p as Location, F as FormulaAttribute, D as DateAttribute, q as DateRangeValue, r as DocumentAttribute, d as StatusAttribute, c as SelectAttribute, b as MultiselectAttribute, s as Phone, t as Currency, U as UserAttribute, T as TextAttribute, u as PropertySchema, g as CheckboxAttribute, C as CurrencyAttribute, v as TimeFormat, N as NumberAttribute, P as PhoneAttribute, O as Option, L as LocationAttribute, w as FormulaReturnType, R as RelationAttribute, B as BilateralConfig, S as SingleRelationAttribute, M as MultiRelationAttribute, x as RelationTarget, a as RichtextAttribute, y as RollupFunction, z as UserReferenceType } from './attributes-lBLiOIY3.mjs';
2
4
  export { E as AttributeGroup, G as BaseAttribute, h as ComputedAttributeState, H as ComputedFieldKind, I as ComputedFormulaBinaryNode, J as ComputedFormulaBinaryOperator, K as ComputedFormulaCallNode, Q as ComputedFormulaLiteralNode, V as ComputedFormulaParseError, W as ComputedFormulaPathNode, X as ComputedStateStatus, Y as DateFormat, Z as DateValue, _ as NumberUnit, $ as OptionPropertyAttribute, a0 as PropertyAttribute, a1 as PropertyType, a2 as RELATION_TARGET_ANY, a3 as RichTextAttribute, a4 as StatusGroup, a5 as hasOptions, a6 as inferInverseCardinality, a7 as isAttributeSortable, a8 as isBilateralRelation, a9 as isUniversalRelation, aa as parseComputedFormula, ab as resolvePropertyDefinitions } from './attributes-lBLiOIY3.mjs';
3
- import { IconName, MimeType, ColorId, CountryIso3, CurrencyCode } from '@stndrds/constants';
5
+ import { IconName, ColorId, CountryIso3, CurrencyCode } from '@stndrds/constants';
4
6
  import { Uuid, TenantId } from './utils.mjs';
5
7
  export { UserId, asTenantId, asUserId, deepEqual, generateId, indexBy } from './utils.mjs';
6
- import { D as DocumentLayout, T as Timestamps, O as ObjectDefinition } from './helpers-uKLet0kF.mjs';
7
- export { h as DocumentLayoutVariant, F as FolderPreset, M as MAX_PRESET_DEPTH, j as ObjectAttribute, k as ObjectRecord, P as PresetNode, R as RESERVED_ATTRIBUTE_NAMES, l as RESERVED_OBJECT_NAMES, m as ReservedAttributeName, n as ReservedObjectName, S as SYSTEM_FIELD_NAMES, o as SystemFieldName, c as createFormAttributeValidator, r as rejectUnknownAttributesOrThrow, v as validateDraft, a as validateDraftOrThrow, b as validateObject, d as validateObjectOrThrow } from './helpers-uKLet0kF.mjs';
8
+ import { a as ObjectRecord, D as DocumentLayout, T as Timestamps, R as ResourceVisibility, O as ObjectDefinition, L as ListViewTabVisibility } from './objects-BCaBw2ef.mjs';
9
+ export { b as DocumentLayoutVariant, F as FolderPreset, c as LIST_VIEW_TAB_VISIBILITIES, M as MAX_PRESET_DEPTH, d as ObjectAttribute, P as PresetNode, e as RESERVED_ATTRIBUTE_NAMES, f as RESERVED_OBJECT_NAMES, g as RESOURCE_VISIBILITIES, h as ReservedAttributeName, i as ReservedObjectName, S as SYSTEM_FIELD_NAMES, j as SystemFieldName } from './objects-BCaBw2ef.mjs';
8
10
  import { M as MigrationDefinition } from './migrations-BXd2ZGfM.mjs';
9
11
  export { B as BuiltInTransform, S as SchemaOperation } from './migrations-BXd2ZGfM.mjs';
10
- export { AccessDeniedError, AttributeInUseError, AttributeNotFoundError, AttributeUsage, ChangeTypeNotSupportedError, ConcurrentModificationError, DestructiveSyncNotAllowedError, DuplicateError, ForbiddenError, MemoryNotFoundError, MigrationTimeoutError, NotFoundError, NotImplementedError, ObjectNotFoundError, ObjectReferencedError, OrphanSystemAttributeError, ProtectedResourceError, ProtectedRoleError, RecordNotFoundError, RecordReference, RecordReferencedError, RepositoryError, RepositoryOperation, RoleNotFoundError, SchemaError, SchemaErrorCode, SearchBackendError, StorageError, StorageOperation, SyncCascadeError, SyncConflictError, SyncError, SystemEntityImmutableError, ValidationError, ValidationErrorDetail, isAttributeInUseError, isNotFoundError, isObjectReferencedError, isProtectedResourceError, isRecordReferencedError, isSchemaError, isValidationError } from './exceptions.mjs';
12
+ import { ValidationError } from './exceptions.mjs';
13
+ export { AccessDeniedError, AttributeInUseError, AttributeNotFoundError, AttributeUsage, ChangeTypeNotSupportedError, ConcurrentModificationError, DestructiveSyncNotAllowedError, DuplicateError, ForbiddenError, MemoryNotFoundError, MigrationTimeoutError, NotFoundError, NotImplementedError, ObjectNotFoundError, ObjectReferencedError, OrphanSystemAttributeError, ProtectedResourceError, ProtectedRoleError, RecordNotFoundError, RecordReference, RecordReferencedError, RepositoryError, RepositoryOperation, RoleNotFoundError, SchemaError, SchemaErrorCode, SchemaPlanNotFoundError, SearchBackendError, StorageError, StorageOperation, SyncCascadeError, SyncConflictError, SyncError, SystemEntityImmutableError, ValidationErrorDetail, isAttributeInUseError, isNotFoundError, isObjectReferencedError, isProtectedResourceError, isRecordReferencedError, isSchemaError, isValidationError } from './exceptions.mjs';
11
14
  import { StandardSchemaV1 } from '@standard-schema/spec';
12
15
  export { StandardSchemaV1 } from '@standard-schema/spec';
13
- import z from 'zod';
16
+ import z, { z as z$1 } from 'zod';
14
17
  export { V as ValidationMessages } from './types-DNz3ITS-.mjs';
15
18
  export { DEFAULT_VALIDATION_MESSAGES, formatZodErrors } from './validation/core/index.mjs';
16
- export { parseAttributeConfig } from './validation/config/index.mjs';
19
+ export { S as SCHEMA_LIMITS, c as colorIdSchema, d as detailTabSchema, a as detailViewConfigSchema, i as iconNameSchema, b as inverseSourceSchema, l as listViewConfigSchema, e as listViewTabSchema, p as parseViewConfig, r as relationSourceSchema, t as tableSourceSchema, v as viewConfigByTypeSchema, f as viewTypeSchema } from './all-D5zeUllO.mjs';
20
+ export { a as createFormAttributeValidator, r as rejectUnknownAttributesOrThrow, b as validateDraft, d as validateDraftOrThrow, e as validateObject, f as validateObjectOrThrow } from './helpers-C1VVEAOO.mjs';
21
+ export { createCheckboxValidator } from './validation/primitives/checkbox.mjs';
22
+ export { createDateValidator } from './validation/primitives/date.mjs';
23
+ export { createNumberValidator } from './validation/primitives/number.mjs';
24
+ export { createTextValidator } from './validation/primitives/text.mjs';
17
25
 
18
26
  declare const COMPUTED_FUNCTION_NAMES: readonly ["if", "concat", "sum", "avg", "count", "min", "max", "earliest", "latest", "unique", "first", "percent_empty", "percent_not_empty", "count_empty", "count_not_empty", "count_unique"];
19
27
  type ComputedFunctionName = (typeof COMPUTED_FUNCTION_NAMES)[number];
@@ -86,168 +94,6 @@ interface ComputedFunctionMetadata {
86
94
  }
87
95
  declare const COMPUTED_FUNCTION_METADATA: ComputedFunctionMetadata[];
88
96
 
89
- /** Operators for text-based attributes */
90
- type TextFilterOperator = "is" | "is_not" | "contains" | "not_contains" | "starts_with" | "ends_with" | "is_empty" | "is_not_empty";
91
- /** Operators for number-based attributes */
92
- type NumberFilterOperator = "eq" | "neq" | "lt" | "gt" | "lte" | "gte" | "is_empty" | "is_not_empty";
93
- /** Operators for checkbox */
94
- type CheckboxFilterOperator = "is_checked" | "is_not_checked";
95
- /** Operators for date-based attributes */
96
- type DateFilterOperator = "is" | "is_not" | "before" | "after" | "on_or_before" | "on_or_after" | "is_within" | "day_month_eq" | "is_empty" | "is_not_empty";
97
- /** Operators for select-based attributes (supports single or multi-value filtering) */
98
- type SelectFilterOperator = "is" | "is_not" | "any_of" | "none_of" | "is_empty" | "is_not_empty";
99
- /** Operators for multiselect-based attributes */
100
- type MultiselectFilterOperator = "contains" | "not_contains" | "is_empty" | "is_not_empty";
101
- /**
102
- * Operators for relation-based attributes (covers single, multi-value, and
103
- * reference-shaped filtering — file, user, relation, document all share the
104
- * same edge-backed operator set as of Phase 4.4).
105
- */
106
- type RelationFilterOperator = "is" | "is_not" | "any_of" | "none_of" | "contains" | "not_contains" | "is_empty" | "is_not_empty";
107
- /** All possible filter operators */
108
- type FilterOperator = TextFilterOperator | NumberFilterOperator | CheckboxFilterOperator | DateFilterOperator | SelectFilterOperator | MultiselectFilterOperator | RelationFilterOperator;
109
- /** Relative date value for "is_within" operator */
110
- interface RelativeDateValue {
111
- amount: number;
112
- unit: "days" | "weeks" | "months" | "years";
113
- direction: "past" | "future";
114
- }
115
- /** Currency filter value with amount and optional currency codes
116
- * - code: undefined or [] = any currency
117
- * - code: string[] = filter by specific currencies
118
- */
119
- interface CurrencyFilterValue {
120
- value: number | null;
121
- code?: string[];
122
- }
123
- /** Phone filter value with number and optional country code */
124
- interface PhoneFilterValue {
125
- phoneNumber: string | null;
126
- countryCode?: string;
127
- }
128
- /**
129
- * A filter value resolved at query time from the execution context.
130
- * Stored verbatim in a view's filter; replaced with a concrete value by the
131
- * runtime before reaching any query layer. Discriminated by the `dynamic` key —
132
- * no static FilterValue carries it.
133
- */
134
- type DynamicValue = {
135
- dynamic: "actor";
136
- ref: "current";
137
- } | {
138
- dynamic: "date";
139
- anchor: "today";
140
- } | {
141
- dynamic: "date";
142
- anchor: "now";
143
- };
144
- /** Filter value can be various types depending on the attribute */
145
- type FilterValue = string | number | boolean | string[] | RelativeDateValue | CurrencyFilterValue | PhoneFilterValue | DynamicValue | null;
146
- /** Existence quantifier for qualified edge rules. Maps to SQL EXISTS / NOT EXISTS. */
147
- type EdgeQuantifier = "any" | "none";
148
- /** A single filter rule */
149
- interface FilterRule {
150
- /** Root attribute name (scalar attribute, or a reference attribute when `property` is set). */
151
- attribute: string;
152
- /**
153
- * If set, this rule filters on a qualified edge property.
154
- * Requires `attribute` to be a reference attribute (today: `relation` or `document`) that has `.qualifyWith()`.
155
- * The `operator` must be valid for the property's type, not the root attribute's type.
156
- */
157
- property?: string;
158
- /**
159
- * Existence quantifier for qualified edge rules ("at least one" vs "none").
160
- * Only valid when `property` is set. Maps to SQL EXISTS / NOT EXISTS.
161
- * Defaults to the operator-derived polarity when omitted.
162
- */
163
- quantifier?: EdgeQuantifier;
164
- /** Filter operator */
165
- operator: FilterOperator;
166
- /** Filter value (null for operators like is_empty) */
167
- value: FilterValue;
168
- }
169
- /**
170
- * Extended filter rule with optional attribute definition.
171
- * When provided, enables smarter type-aware filtering (e.g., array operators for multiselect).
172
- */
173
- interface ExtendedFilterRule extends FilterRule {
174
- /** Full attribute definition for type-aware filtering */
175
- attributeDef?: Attribute;
176
- }
177
- /** Combinator for filter rules */
178
- type FilterCombinator = "and" | "or";
179
- /** Complete filter state (simple mode) */
180
- interface FilterState {
181
- /** How to combine rules */
182
- combinator: FilterCombinator;
183
- /** List of filter rules */
184
- rules: FilterRule[];
185
- }
186
- /**
187
- * A filter group containing rules (used in advanced mode)
188
- * Groups can be nested up to 2 levels deep
189
- */
190
- interface FilterGroup {
191
- /** Unique identifier for this group */
192
- id: string;
193
- /** How to combine rules within this group */
194
- combinator: FilterCombinator;
195
- /** List of filter rules in this group */
196
- rules: FilterRule[];
197
- }
198
- /**
199
- * Advanced filter state with nested groups
200
- * Structure: AdvancedFilterState -> FilterGroup[] -> FilterRule[]
201
- * Maximum 2 levels of nesting
202
- */
203
- interface AdvancedFilterState {
204
- /** How to combine groups at the top level */
205
- combinator: FilterCombinator;
206
- /** List of filter groups */
207
- groups: FilterGroup[];
208
- }
209
- /** Sort direction */
210
- type SortDirection = "asc" | "desc";
211
- /** A single sort rule */
212
- interface SortRule {
213
- /** Attribute name to sort by */
214
- attribute: string;
215
- /** Sort direction */
216
- direction: SortDirection;
217
- }
218
- /** Complete query state with search, filters, sorts, and pagination */
219
- interface QueryState {
220
- /** Full-text search query */
221
- search?: string;
222
- /** Filter configuration (simple mode) */
223
- filters?: FilterState;
224
- /** Advanced filter configuration (grouped mode) */
225
- advancedFilters?: AdvancedFilterState;
226
- /** Sort configuration (multiple sorts supported) */
227
- sorts?: SortRule[];
228
- /** Pagination */
229
- limit?: number;
230
- offset?: number;
231
- }
232
- /** Mapping of attribute types to their valid operators (rollup excluded — use getRollupFilterOperators()) */
233
- declare const OPERATORS_BY_TYPE: Record<Exclude<AttributeType, "rollup">, readonly FilterOperator[]>;
234
- /** Check if an operator requires a value */
235
- type NoValueOperator = "is_empty" | "is_not_empty" | "is_checked" | "is_not_checked";
236
- /** Operators that don't require a value */
237
- declare const NO_VALUE_OPERATORS: readonly NoValueOperator[];
238
- /**
239
- * Check if an operator requires a value
240
- */
241
- declare function isNoValueOperator(operator: FilterOperator): operator is NoValueOperator;
242
- /**
243
- * Get the filter operators for a rollup attribute based on its aggregation function and target type.
244
- *
245
- * - earliest / latest → date operators
246
- * - original → operators matching targetAttributeType (falls back to numeric if unknown)
247
- * - all other functions → numeric operators (sum, avg, count, percent, etc.)
248
- */
249
- declare function getRollupFilterOperators(attr: RollupAttribute): readonly FilterOperator[];
250
-
251
97
  /**
252
98
  * Generic list options for pagination and sorting
253
99
  */
@@ -273,8 +119,31 @@ interface ListOptions {
273
119
  }
274
120
 
275
121
  type CountMode = "none" | "estimated" | "exact";
276
- interface CollectionPage {
122
+ /**
123
+ * Row cap for `countMode: "estimated"`.
124
+ *
125
+ * The list RPC stops counting here, so the mode has a bounded cost on any
126
+ * tenant. Below the cap the count happens to be exact; at the cap it means "at
127
+ * least this many", and `totalIsExact` is what tells the two apart.
128
+ *
129
+ * Mirrored in `list_filtered_object_records`; change both together.
130
+ */
131
+ declare const ESTIMATED_COUNT_CAP = 10000;
132
+ /** Canonical continuation metadata shared by collection and search responses. */
133
+ interface ContinuationPage {
277
134
  hasMore: boolean;
135
+ /** Raw backend continuation. Consumers must prefer this to offset arithmetic. */
136
+ nextOffset?: number;
137
+ /**
138
+ * False when the reported total is a lower bound rather than the real count —
139
+ * either because `countMode: "estimated"` stopped at
140
+ * {@link ESTIMATED_COUNT_CAP}, or because filtering left the backend unable to
141
+ * count what it did not fetch. Derive it from the response, never from the
142
+ * requested mode: asking for `"exact"` does not make an answer exact.
143
+ */
144
+ totalIsExact?: boolean;
145
+ }
146
+ interface CollectionPage extends ContinuationPage {
278
147
  total: number | null;
279
148
  countMode: CountMode;
280
149
  }
@@ -293,6 +162,8 @@ interface PageInfo {
293
162
  hasMore: boolean;
294
163
  total: number | null;
295
164
  countMode: CountMode;
165
+ /** See {@link ContinuationPage.totalIsExact}. */
166
+ totalIsExact?: boolean;
296
167
  }
297
168
  /** Legacy/internal offset-based pagination response. */
298
169
  interface PageResponse<T> {
@@ -306,426 +177,6 @@ interface PageOptions {
306
177
  countMode?: CountMode;
307
178
  }
308
179
 
309
- /**
310
- * Type of view - determines the config structure
311
- */
312
- type ViewType = "detail" | "list";
313
- /**
314
- * Creation behavior when clicking the "+" button
315
- * - `redirect`: Create the record then navigate to its detail page
316
- * - `inline`: Insert an empty row in the table (no navigation)
317
- * - `peek`: Create a draft immediately and open it in the record stack side panel
318
- */
319
- type CreateMode = "redirect" | "inline" | "peek";
320
- /**
321
- * Inline attribute group configuration
322
- * Groups multiple attributes into a single composite field with dropdown editing
323
- */
324
- interface AttributeGroupField {
325
- /** Unique identifier for the group */
326
- id: string;
327
- /** Display label for the composite field */
328
- label: string;
329
- /** Description shown in the dropdown */
330
- description?: string;
331
- /** Attribute names to include in this group */
332
- attributes: string[];
333
- /**
334
- * Template for the display value
335
- * Uses {attributeName} syntax for interpolation
336
- * @example "{billing_street}, {billing_city} {billing_postal_code}"
337
- */
338
- displayTemplate?: string;
339
- }
340
- /**
341
- * Field definition within a form group
342
- * Can be either a single attribute or an inline attribute group
343
- */
344
- interface Field {
345
- /** Attribute name to display (for single attribute fields) */
346
- attribute?: string;
347
- /** Inline attribute group (groups multiple attributes into one composite field) */
348
- attributeGroup?: AttributeGroupField;
349
- /** Grid span (1-12 columns) */
350
- span?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
351
- /** Override label for this view (only for single attribute fields) */
352
- label?: string;
353
- /** Force read-only display */
354
- readOnly?: boolean;
355
- }
356
- /**
357
- * Base properties shared by all group types
358
- */
359
- interface BaseGroup {
360
- id: string;
361
- label: string;
362
- description?: string;
363
- collapsible?: boolean;
364
- collapsed?: boolean;
365
- order?: number;
366
- }
367
- /**
368
- * Group of fields for organizing forms (default group type)
369
- */
370
- interface FieldGroup extends BaseGroup {
371
- /** Discriminant — optional for backward compatibility with existing data */
372
- type?: "fields";
373
- fields: Field[];
374
- }
375
- /**
376
- * Group that displays related records for a relation attribute
377
- */
378
- interface RelationGroup extends BaseGroup {
379
- type: "relation";
380
- /** Relation attribute name on the source object */
381
- attribute: string;
382
- /** Columns to display (auto-detected from target object if empty) */
383
- columns?: string[];
384
- /** Read-only mode */
385
- readOnly?: boolean;
386
- /** Allow creating new related records */
387
- allowCreate?: boolean;
388
- /**
389
- * Two-level traversal — display records from the target's relation.
390
- * When set, parent rows become grouping headers and the sub-rows
391
- * (from `through.attribute`) are the primary display.
392
- *
393
- * @example attribute = "members", through.attribute = "companies"
394
- * → displays companies of each member
395
- */
396
- through?: {
397
- /** Relation attribute on the first-level target object */
398
- attribute: string;
399
- };
400
- }
401
- /**
402
- * Discriminated union of all group types
403
- */
404
- type Group = FieldGroup | RelationGroup;
405
- type TabType = "form" | "table" | "custom" | "activity" | "richtext" | "documents" | "forms" | "emails";
406
- /**
407
- * Base properties shared by all tab types
408
- */
409
- interface BaseTab {
410
- id: string;
411
- name: string;
412
- label: string;
413
- icon?: IconName;
414
- order?: number;
415
- }
416
- /**
417
- * Form layout density
418
- */
419
- type FormDensity = "compact" | "comfortable" | "spacious";
420
- /**
421
- * Form tab - displays attributes organized in groups
422
- */
423
- interface FormTab extends BaseTab {
424
- type: "form";
425
- groups: Group[];
426
- /** Number of grid columns (1, 2, or 3). Default: 2 */
427
- formColumns?: 1 | 2 | 3;
428
- /** Layout density. Default: "comfortable" */
429
- density?: FormDensity;
430
- }
431
- /**
432
- * Direct relation on the current object
433
- *
434
- * @example Contact.companies → shows Companies linked via the "companies" relation
435
- */
436
- interface RelationSource {
437
- type: "relation";
438
- /** Relation attribute name on the current object */
439
- attribute: string;
440
- }
441
- /**
442
- * Inverse lookup — records from another object that point to us
443
- *
444
- * @example On Company, show Contacts where Contact.company = this Company
445
- */
446
- interface InverseSource {
447
- type: "inverse";
448
- /** Object name that has the relation to us */
449
- object: string;
450
- /** Relation attribute name on the source object that points to us */
451
- attribute: string;
452
- }
453
- /**
454
- * Where table data comes from — either a direct relation or an inverse lookup
455
- */
456
- type TableSource = RelationSource | InverseSource;
457
- /**
458
- * Table tab - displays related records in a table
459
- *
460
- * The `source` field determines where data comes from.
461
- *
462
- * @example Direct: source = { type: "relation", attribute: "members" }
463
- * @example Inverse: source = { type: "inverse", object: "contacts", attribute: "company" }
464
- */
465
- interface TableTab extends BaseTab {
466
- type: "table";
467
- /** Where the data comes from */
468
- source: TableSource;
469
- /** Columns to display (attribute names from the resolved target object) */
470
- columns: string[];
471
- /**
472
- * Traverse a 2nd-level relation to display nested data.
473
- * When active, `columns` stores the 2nd-level object's attribute names.
474
- *
475
- * @example source.attribute = "members", through.attribute = "companies"
476
- * → displays companies of each member
477
- */
478
- through?: {
479
- /** Relation attribute on the first-level target object */
480
- attribute: string;
481
- /** Show _source and _target columns */
482
- showSourceTarget?: boolean;
483
- };
484
- /** Allow creating new records */
485
- allowCreate?: boolean;
486
- /** Creation behavior when allowCreate is true. Default: "redirect" */
487
- createMode?: CreateMode;
488
- /** Allow inline editing */
489
- allowEdit?: boolean;
490
- /** Allow deleting records */
491
- allowDelete?: boolean;
492
- /** Default filters applied to the table */
493
- filters?: FilterState;
494
- /** Default sort rules */
495
- sorts?: SortRule[];
496
- }
497
- /**
498
- * Custom tab - renders a developer-defined component
499
- */
500
- interface CustomTab extends BaseTab {
501
- type: "custom";
502
- /** Component identifier to render */
503
- component: string;
504
- /** Props to pass to the component */
505
- props?: Record<string, unknown>;
506
- }
507
- /**
508
- * Activity tab - displays activity feed for the current record
509
- */
510
- interface ActivityTab extends BaseTab {
511
- type: "activity";
512
- limit?: number;
513
- }
514
- /**
515
- * Richtext tab - displays a block editor for a richtext attribute
516
- */
517
- interface RichtextTab extends BaseTab {
518
- type: "richtext";
519
- /** Richtext attribute to display in the BlockEditor */
520
- attribute: string;
521
- /** Optional text attribute for an editable title input above the editor */
522
- titleAttribute?: string;
523
- }
524
- /**
525
- * Documents tab - displays all documents attached to the record
526
- */
527
- interface DocumentsTab extends BaseTab {
528
- type: "documents";
529
- allowUpload?: boolean;
530
- allowRemove?: boolean;
531
- hideAttachments?: boolean;
532
- }
533
- /**
534
- * Forms tab - displays available forms for creating related records
535
- */
536
- interface FormsTab extends BaseTab {
537
- type: "forms";
538
- /** Object name to filter forms by slot (derived from record context, but can be overridden) */
539
- objectName?: string;
540
- }
541
- /**
542
- * Emails tab - displays emails associated with the record at query time via the
543
- * values of configured email-bearing text attributes. Config-only: no schema change.
544
- */
545
- interface EmailsTab extends BaseTab {
546
- type: "emails";
547
- /** Names of text attributes whose values hold email addresses to match on. */
548
- emailAttributeIds: string[];
549
- }
550
- /**
551
- * Union of all tab types (for detail views)
552
- */
553
- type Tab = FormTab | TableTab | CustomTab | ActivityTab | RichtextTab | DocumentsTab | FormsTab | EmailsTab;
554
- /**
555
- * List view layout mode
556
- * - `table`: Table/grid layout
557
- * - `kanban`: Kanban board layout (grouped by attribute)
558
- */
559
- type ListViewLayout = "table" | "kanban";
560
- /**
561
- * Tab within a list view — each tab carries its own full display configuration.
562
- *
563
- * @example
564
- * ```typescript
565
- * const tabs: ListViewTab[] = [
566
- * { id: "all", label: "All Contacts", default: true, layout: "table", columns: ["name", "email", "status"] },
567
- * { id: "active", label: "Active", layout: "table", columns: ["name", "email"], filters: activeFilter },
568
- * { id: "pipeline", label: "Pipeline", layout: "kanban", columns: ["name", "amount"], groupByAttribute: "stage" },
569
- * ];
570
- * ```
571
- */
572
- interface ListViewTab {
573
- /** Unique identifier */
574
- id: string;
575
- /** Display label */
576
- label: string;
577
- /** Icon */
578
- icon?: IconName;
579
- /** Default tab (shown on load) */
580
- default?: boolean;
581
- /** Layout mode */
582
- layout: ListViewLayout;
583
- /** Attribute names to display as columns */
584
- columns: string[];
585
- /** Column widths in pixels */
586
- columnSizing?: Record<string, number>;
587
- /** Filters applied to this tab */
588
- filters?: FilterGroup;
589
- /** Sort rules for this tab */
590
- sorts?: SortRule[];
591
- /** Attribute to group by (required when layout is "kanban") */
592
- groupByAttribute?: string;
593
- /** When true, the tab is read-only: no cell editing, no create, no delete */
594
- readOnly?: boolean;
595
- /** Creation behavior when clicking "+". Default: "redirect" */
596
- createMode?: CreateMode;
597
- /** User attribute to display on kanban cards (bottom-left) */
598
- cardUserAttribute?: string;
599
- /** Date attribute to display on kanban cards (bottom-right) */
600
- cardDateAttribute?: string;
601
- /** Order of kanban columns (by option value) - for kanban layout only */
602
- kanbanColumnOrder?: string[];
603
- /** Visibility of kanban columns (by option value) - for kanban layout only */
604
- kanbanColumnVisibility?: Record<string, boolean>;
605
- /** Pinned kanban columns (by option value) - for kanban layout only */
606
- kanbanPinnedColumns?: string[];
607
- }
608
- /**
609
- * Configuration for the side panel displayed alongside tab content.
610
- * When present, a right-side panel shows the configured attributes as flat fields.
611
- */
612
- interface SidePanelConfig {
613
- /** Attribute names to display as flat fields in the panel */
614
- attributes: string[];
615
- /** Width in pixels. @default 320 */
616
- width?: number;
617
- }
618
- /**
619
- * Configuration for detail views (RecordEditView)
620
- */
621
- interface DetailViewConfig {
622
- /** Tabs in this view */
623
- tabs: Tab[];
624
- /** Optional side panel with flat attribute fields */
625
- sidePanel?: SidePanelConfig;
626
- }
627
- /**
628
- * Configuration for list views (RecordsView)
629
- *
630
- * Each tab carries its own full config (layout, columns, filters, sorts, groupBy).
631
- * The view only holds shared base filters applied to ALL tabs.
632
- */
633
- interface ListViewConfig {
634
- /** Base filters applied to ALL tabs (scoping, tenant, etc.) */
635
- defaultFilters?: FilterGroup;
636
- /** Tabs — at least one required. Each carries its own full config. */
637
- tabs: ListViewTab[];
638
- }
639
- /**
640
- * Union of all view configs
641
- */
642
- type ViewConfig = DetailViewConfig | ListViewConfig;
643
- /**
644
- * Base view properties shared by all view types
645
- */
646
- interface BaseViewDefinition {
647
- /** Unique identifier (UUID, assigned by database) */
648
- id?: string;
649
- /** Technical name (kebab-case) */
650
- name: string;
651
- /** Display label */
652
- label: string;
653
- /** Description */
654
- description?: string;
655
- /** Icon */
656
- icon?: IconName;
657
- /** Object this view belongs to (object name) */
658
- object: string;
659
- /** Default view for this object+type combination */
660
- default?: boolean;
661
- /** Extensible metadata */
662
- metadata?: Record<string, unknown>;
663
- }
664
- /**
665
- * Detail view definition
666
- */
667
- interface DetailViewDefinition extends BaseViewDefinition {
668
- type: "detail";
669
- config: DetailViewConfig;
670
- }
671
- /**
672
- * List view definition
673
- */
674
- interface ListViewDefinition extends BaseViewDefinition {
675
- type: "list";
676
- config: ListViewConfig;
677
- }
678
- /**
679
- * Unified view definition - discriminated union by type
680
- */
681
- type ViewDefinition = DetailViewDefinition | ListViewDefinition;
682
- /**
683
- * Configuration overrides for user customizations
684
- * Only stores the delta from the source view
685
- */
686
- interface ConfigOverrides {
687
- tabs?: ListViewTab[];
688
- hiddenTabIds?: string[];
689
- detailTabs?: Tab[];
690
- hiddenDetailTabIds?: string[];
691
- }
692
- /**
693
- * User customization overlay for a view
694
- * Stored per user, merged at runtime with the source view
695
- */
696
- interface ViewOverlay {
697
- /** Unique identifier */
698
- id: string;
699
- /** View ID this overlay applies to (UUID or virtual ID) */
700
- viewId: string;
701
- /** User ID who owns this overlay */
702
- userId: string;
703
- /** Configuration overrides (delta only) */
704
- configOverrides: ConfigOverrides;
705
- /** User's default view for this object (stored in overlay) */
706
- isUserDefault?: boolean;
707
- /** Created timestamp */
708
- createdAt: Date;
709
- /** Updated timestamp */
710
- updatedAt: Date;
711
- }
712
- /**
713
- * Check if a view is a detail view
714
- */
715
- declare function isDetailView(view: ViewDefinition): view is DetailViewDefinition;
716
- /**
717
- * Check if a view is a list view
718
- */
719
- declare function isListView(view: ViewDefinition): view is ListViewDefinition;
720
- /**
721
- * Check if a group is a field group (default type)
722
- */
723
- declare function isFieldGroup(group: Group): group is FieldGroup;
724
- /**
725
- * Check if a group is a relation group
726
- */
727
- declare function isRelationGroup(group: Group): group is RelationGroup;
728
-
729
180
  /**
730
181
  * Object as stored in database (metadata)
731
182
  */
@@ -940,14 +391,30 @@ interface GlobalSearchResultItem {
940
391
  /**
941
392
  * Global search grouped result
942
393
  */
943
- interface GlobalSearchGroupedResult {
394
+ interface AuthorizedSearchPage extends ContinuationPage {
395
+ total: number;
396
+ /**
397
+ * Whether `total` is the real filtered count or only a lower bound.
398
+ *
399
+ * Pinning this to `false` would make it a constant, and a constant carries no
400
+ * information — callers (the agent tools in particular) read it precisely to
401
+ * know whether they may state a count.
402
+ */
403
+ totalIsExact: boolean;
404
+ }
405
+ interface AuthorizedRecordSearchResult extends AuthorizedSearchPage {
406
+ records: ObjectRecord[];
407
+ }
408
+ interface AuthorizedGlobalSearchResult extends AuthorizedSearchPage {
409
+ results: GlobalSearchResultItem[];
410
+ }
411
+ interface GlobalSearchGroupedResult extends AuthorizedSearchPage {
944
412
  groups: Array<{
945
413
  objectName: string;
946
414
  objectLabel: string;
947
415
  results: GlobalSearchResultItem[];
948
416
  totalInGroup: number;
949
417
  }>;
950
- total: number;
951
418
  }
952
419
  /**
953
420
  * File-specific list options
@@ -1235,274 +702,35 @@ interface AssignActorRoleInput {
1235
702
  }
1236
703
 
1237
704
  /**
1238
- * Scope of a permission rule.
1239
- * - `object`: Controls access to an entire object type (business data)
1240
- * - `system`: Controls access to platform resources (people, workspace, API keys, etc.)
705
+ * Legacy permission payload stored with an API key.
706
+ * Runtime authorization uses the API key actor's effective permissions.
1241
707
  */
1242
- type PermissionScope = "object" | "system";
708
+ interface ApiKeyPermission {
709
+ scope: PermissionScope;
710
+ target: string;
711
+ actions: Action[];
712
+ }
713
+ interface ApiKey {
714
+ id: string;
715
+ tenantId: string;
716
+ userProfileId: string | null;
717
+ name: string;
718
+ prefix: string;
719
+ /** Legacy metadata; not the runtime authorization source of truth. */
720
+ permissions: ApiKeyPermission[];
721
+ expiresAt: string | null;
722
+ lastUsedAt: string | null;
723
+ revokedAt: string | null;
724
+ createdAt: string;
725
+ createdBy: string;
726
+ }
727
+ /** Returned only at creation time — the only time the plaintext secret is available. */
728
+ interface ApiKeyWithSecret extends ApiKey {
729
+ secret: string;
730
+ }
1243
731
  /**
1244
- * Actions that can be performed on a resource.
1245
- *
1246
- * `observe` is intentionally excluded from `ALL_ACTIONS` ("full" preset) — it
1247
- * is only meaningful for runnable resources (agent sessions) where it grants
1248
- * read-only visibility on the run timeline without implying CRUD.
1249
- */
1250
- type Action = "read" | "create" | "update" | "delete" | "manage" | "observe";
1251
- /**
1252
- * System resources that can be managed.
1253
- * - `people`: User profiles, invitations, roles and permissions
1254
- * - `workspace`: Tenant settings and workspace-level configuration
1255
- * - `architect`: Architect settings, templates, and configurations
1256
- */
1257
- type SystemResource = "people" | "workspace" | "architect" | "feature-flags" | "files" | "views" | "forms" | "documents" | "audit" | "api-keys" | "connectors" | "env-vars" | "session";
1258
- /**
1259
- * Preset access levels for simplified permission configuration.
1260
- * - `full`: All CRUD actions
1261
- * - `read-only`: Only read action
1262
- * - `none`: No actions
1263
- * - `custom`: Manual selection of individual actions
1264
- */
1265
- type AccessLevel = "full" | "read-only" | "none" | "custom";
1266
- declare const ALL_ACTIONS: Action[];
1267
- /**
1268
- * Derive an AccessLevel from a list of actions.
1269
- */
1270
- declare function actionsToAccessLevel(actions: Action[]): AccessLevel;
1271
- /**
1272
- * Convert an AccessLevel preset to its corresponding actions.
1273
- */
1274
- declare function accessLevelToActions(level: Exclude<AccessLevel, "custom">): Action[];
1275
- /**
1276
- * Role definition - Groups permissions together.
1277
- *
1278
- * Roles are tenant-scoped and can be system-defined (immutable) or custom.
1279
- *
1280
- * @example
1281
- * ```typescript
1282
- * const ownerRole: Role = {
1283
- * id: "role-123",
1284
- * tenantId: "tenant-456",
1285
- * name: "owner",
1286
- * label: "Owner",
1287
- * description: "Full access to all platform features and data",
1288
- * system: true,
1289
- * createdAt: new Date(),
1290
- * updatedAt: new Date(),
1291
- * };
1292
- * ```
1293
- */
1294
- interface Role extends Timestamps {
1295
- id: Uuid;
1296
- tenantId: Uuid;
1297
- /**
1298
- * Technical name (unique per tenant, used in code).
1299
- * Examples: "owner", "member", "sales_manager"
1300
- */
1301
- name: string;
1302
- /**
1303
- * Display name shown in UI.
1304
- */
1305
- label: string;
1306
- /**
1307
- * Optional description of the role's purpose.
1308
- */
1309
- description?: string;
1310
- /**
1311
- * If true, this role cannot be modified or deleted.
1312
- * Used for built-in roles like "owner".
1313
- */
1314
- system: boolean;
1315
- }
1316
- /**
1317
- * Permission definition - Grants specific actions on a target.
1318
- *
1319
- * A permission belongs to a role and defines what actions are allowed
1320
- * on a specific target (object or system resource).
1321
- *
1322
- * @example
1323
- * ```typescript
1324
- * // Allow read and update on companies object
1325
- * const permission: Permission = {
1326
- * id: "perm-123",
1327
- * roleId: "role-456",
1328
- * scope: "object",
1329
- * target: "companies",
1330
- * actions: ["read", "update"],
1331
- * createdAt: new Date(),
1332
- * };
1333
- *
1334
- * // Wildcard permission for all objects
1335
- * const wildcardPerm: Permission = {
1336
- * id: "perm-789",
1337
- * roleId: "role-456",
1338
- * scope: "object",
1339
- * target: "*",
1340
- * actions: ["read", "create", "update", "delete"],
1341
- * createdAt: new Date(),
1342
- * };
1343
- * ```
1344
- */
1345
- interface Permission {
1346
- id: Uuid;
1347
- roleId: Uuid;
1348
- /**
1349
- * Scope of this permission.
1350
- */
1351
- scope: PermissionScope;
1352
- /**
1353
- * Target of the permission.
1354
- * - For `object` scope: object name (e.g., "companies") or "*" for all
1355
- * - For `system` scope: system resource (e.g., "people", "workspace") or "*" for all
1356
- */
1357
- target: string;
1358
- /**
1359
- * Actions allowed on the target.
1360
- */
1361
- actions: Action[];
1362
- createdAt: Date;
1363
- }
1364
- /**
1365
- * Links a user profile to a role within a tenant.
1366
- *
1367
- * A user can have multiple roles, and their permissions are additive (union).
1368
- *
1369
- * Note: `userProfileId` references UserProfile.id from the user_profiles table,
1370
- * NOT the auth provider ID (authId). This keeps permissions tied to the
1371
- * application's user management, not the authentication layer.
1372
- */
1373
- interface UserRoleAssignment {
1374
- id: Uuid;
1375
- /**
1376
- * User profile ID (UserProfile.id from user_profiles table).
1377
- * This links to the application's user management system,
1378
- * not the auth provider's user ID.
1379
- */
1380
- userProfileId: Uuid;
1381
- roleId: Uuid;
1382
- tenantId: Uuid;
1383
- /**
1384
- * When the role was assigned.
1385
- */
1386
- assignedAt: Date;
1387
- /**
1388
- * Actor ID of who assigned this role (for audit trail).
1389
- */
1390
- assignedBy?: Uuid;
1391
- }
1392
- /**
1393
- * Computed permissions for a user.
1394
- *
1395
- * This is the merged result of all roles assigned to a user.
1396
- * Returned by the API for permission checks.
1397
- */
1398
- interface EffectivePermissions {
1399
- /**
1400
- * Object-level permissions.
1401
- * Key is the object name, value is array of allowed actions.
1402
- * Special key "*" means permission applies to all objects.
1403
- */
1404
- objectPermissions: Record<string, Action[]>;
1405
- /**
1406
- * System-level permissions.
1407
- * Key is the system resource (people, workspace), value is array of allowed actions.
1408
- * Special key "*" means permission applies to all system resources.
1409
- */
1410
- systemPermissions: Record<string, Action[]>;
1411
- }
1412
- /**
1413
- * Permissions for a specific object.
1414
- * Convenience type for frontend use.
1415
- */
1416
- interface ObjectPermissions {
1417
- canRead: boolean;
1418
- canCreate: boolean;
1419
- canUpdate: boolean;
1420
- canDelete: boolean;
1421
- canManage: boolean;
1422
- }
1423
- /**
1424
- * Permissions for a specific system resource.
1425
- * Convenience type for frontend use.
1426
- */
1427
- interface SystemPermissions {
1428
- canRead: boolean;
1429
- canCreate: boolean;
1430
- canUpdate: boolean;
1431
- canDelete: boolean;
1432
- canManage: boolean;
1433
- }
1434
- /**
1435
- * Input for creating a new role.
1436
- * TenantId is automatically set from TenantContext.
1437
- */
1438
- interface CreateRoleInput {
1439
- name: string;
1440
- label: string;
1441
- description?: string;
1442
- /** Framework-owned default roles are system:true (immutable, auto-assignable). Custom roles default false. */
1443
- system?: boolean;
1444
- }
1445
- /**
1446
- * Input for updating an existing role.
1447
- */
1448
- interface UpdateRoleInput {
1449
- label?: string;
1450
- description?: string;
1451
- }
1452
- /**
1453
- * Input for creating a permission.
1454
- */
1455
- interface CreatePermissionInput {
1456
- scope: PermissionScope;
1457
- target: string;
1458
- /**
1459
- * Actions allowed on the target.
1460
- */
1461
- actions: Action[];
1462
- }
1463
- /**
1464
- * Input for assigning a role to a user.
1465
- */
1466
- interface AssignRoleInput {
1467
- /**
1468
- * User profile ID (UserProfile.id).
1469
- */
1470
- userProfileId: Uuid;
1471
- roleId: Uuid;
1472
- tenantId: Uuid;
1473
- assignedBy?: Uuid;
1474
- }
1475
-
1476
- /**
1477
- * Legacy permission payload stored with an API key.
1478
- * Runtime authorization uses the API key actor's effective permissions.
1479
- */
1480
- interface ApiKeyPermission {
1481
- scope: PermissionScope;
1482
- target: string;
1483
- actions: Action[];
1484
- }
1485
- interface ApiKey {
1486
- id: string;
1487
- tenantId: string;
1488
- userProfileId: string | null;
1489
- name: string;
1490
- prefix: string;
1491
- /** Legacy metadata; not the runtime authorization source of truth. */
1492
- permissions: ApiKeyPermission[];
1493
- expiresAt: string | null;
1494
- lastUsedAt: string | null;
1495
- revokedAt: string | null;
1496
- createdAt: string;
1497
- createdBy: string;
1498
- }
1499
- /** Returned only at creation time — the only time the plaintext secret is available. */
1500
- interface ApiKeyWithSecret extends ApiKey {
1501
- secret: string;
1502
- }
1503
- /**
1504
- * Returned by validateKey — provides everything downstream needs.
1505
- * Permissions come from actor-native effective permissions.
732
+ * Returned by validateKey provides everything downstream needs.
733
+ * Permissions come from actor-native effective permissions.
1506
734
  */
1507
735
  interface ApiKeyAuthContext {
1508
736
  tenantId: string;
@@ -1550,54 +778,6 @@ interface EnvVarEntry {
1550
778
  updatedAt: string;
1551
779
  }
1552
780
 
1553
- /**
1554
- * Type of mentionable entity
1555
- */
1556
- type MentionEntityType = "user" | "record" | (string & {});
1557
- /**
1558
- * A mention reference stored with a message
1559
- */
1560
- interface MentionReference {
1561
- /** Unique ID for this mention instance */
1562
- id: string;
1563
- /** Entity type (user, record, or custom) */
1564
- type: MentionEntityType;
1565
- /** Entity ID (user ID or record ID) */
1566
- entityId: string;
1567
- /** Display label at time of mention (cached for display even if entity is deleted) */
1568
- label: string;
1569
- /** Object name for records, undefined for users */
1570
- objectName?: string;
1571
- /** Start position in the message text */
1572
- startIndex: number;
1573
- /** End position in the message text */
1574
- endIndex: number;
1575
- }
1576
- /**
1577
- * Context data for a mentioned entity (sent to AI)
1578
- */
1579
- interface MentionedEntityContext {
1580
- /** Entity type */
1581
- type: MentionEntityType;
1582
- /** Entity ID */
1583
- entityId: string;
1584
- /** Display label */
1585
- label: string;
1586
- /** Object name for records */
1587
- objectName?: string;
1588
- /** Additional context data (record values, user details, etc.) */
1589
- data?: Record<string, unknown>;
1590
- }
1591
- /**
1592
- * Full mention context for AI
1593
- */
1594
- interface MentionedContext {
1595
- /** All mentioned entities with their context data */
1596
- entities: MentionedEntityContext[];
1597
- /** Summary text for AI system prompt */
1598
- summary: string;
1599
- }
1600
-
1601
781
  declare const NOTIFICATION_KINDS: readonly ["fyi", "task", "question", "handoff", "system"];
1602
782
  type NotificationKind = (typeof NOTIFICATION_KINDS)[number];
1603
783
  declare const NOTIFICATION_PRIORITIES: readonly ["low", "normal", "high", "urgent"];
@@ -1719,1173 +899,167 @@ declare const IDENTITY_PROPERTIES: readonly ["name", "type"];
1719
899
  * Behavior properties - Protected for system attributes
1720
900
  * These affect business logic and data integrity.
1721
901
  */
1722
- declare const BEHAVIOR_PROPERTIES: readonly ["required", "hidden", "archived", "deprecated", "defaultValue", "config", "order", "unique"];
1723
- /**
1724
- * Presentation properties - Always modifiable
1725
- * These only affect display, not logic.
1726
- */
1727
- declare const PRESENTATION_PROPERTIES: readonly ["label", "description", "placeholder", "icon"];
1728
-
1729
- /**
1730
- * Type of resource that can be audited
1731
- */
1732
- declare const AUDIT_RESOURCE_TYPES: readonly ["record", "object", "attribute", "user", "role", "settings", "file"];
1733
- type AuditResourceType = (typeof AUDIT_RESOURCE_TYPES)[number];
1734
- /**
1735
- * Actions that can be audited
1736
- */
1737
- declare const AUDIT_ACTIONS: readonly ["record.created", "record.updated", "record.deleted", "record.restored", "record.purged", "object.created", "object.updated", "object.deleted", "attribute.created", "attribute.updated", "attribute.deleted", "user.created", "user.invited", "user.updated", "user.deleted", "user.login", "user.logout", "role.created", "role.updated", "role.deleted", "role.assigned", "role.revoked", "settings.updated", "file.uploaded", "file.updated", "file.deleted"];
1738
- type AuditAction = (typeof AUDIT_ACTIONS)[number];
1739
- /**
1740
- * Actor type - who performed the action
1741
- */
1742
- type AuditActorType = ActorType;
1743
- /**
1744
- * Detail of a change on a field
1745
- */
1746
- interface AuditChange {
1747
- /** Field name that was changed */
1748
- field: string;
1749
- /** Previous value (undefined for new fields) */
1750
- oldValue: unknown;
1751
- /** New value (undefined for deleted fields) */
1752
- newValue: unknown;
1753
- /** Resolved label for oldValue when the field is a relation. */
1754
- oldLabel?: string;
1755
- /** Resolved label for newValue when the field is a relation. */
1756
- newLabel?: string;
1757
- /** Resolved labels for oldValue array, aligned by index. */
1758
- oldLabels?: string[];
1759
- /** Resolved labels for newValue array, aligned by index. */
1760
- newLabels?: string[];
1761
- }
1762
- /**
1763
- * Audit log entry - immutable record of an action
1764
- */
1765
- interface AuditLogEntry {
1766
- id: Uuid;
1767
- tenantId: Uuid;
1768
- /** actors.id of the actor (null for system actions) */
1769
- actorId?: string;
1770
- /** Denormalized email for search (in case user is deleted) */
1771
- actorEmail?: string;
1772
- /** Type of actor */
1773
- actorType: AuditActorType;
1774
- /** Direct parent actor in a delegation chain (e.g. user who launched the agent). */
1775
- triggeredByActorId?: string;
1776
- /** Root human actor at the top of a delegation chain. Null in pure-autonomous runs. */
1777
- rootActorId?: string;
1778
- action: AuditAction;
1779
- resourceType: AuditResourceType;
1780
- resourceId: Uuid;
1781
- /** Human-readable label (record name, object label, etc.) */
1782
- resourceLabel?: string;
1783
- /** Object technical name (e.g., "companies", "contacts") */
1784
- objectName?: string;
1785
- /** Object UUID */
1786
- objectId?: Uuid;
1787
- changes?: AuditChange[];
1788
- /** Extra context (IP, user-agent, requestId, etc.) */
1789
- metadata?: Record<string, unknown>;
1790
- createdAt: Date;
1791
- }
1792
- /**
1793
- * Input for creating an audit log entry.
1794
- * Tenant ID is automatically set from execution context.
1795
- */
1796
- interface CreateAuditLogInput {
1797
- /** actors.id of the actor (null for system actions) */
1798
- actorId?: string;
1799
- /** Denormalized actor email for display purposes. */
1800
- actorEmail?: string;
1801
- actorType?: AuditActorType;
1802
- action: AuditAction;
1803
- resourceType: AuditResourceType;
1804
- resourceId: string;
1805
- resourceLabel?: string;
1806
- objectName?: string;
1807
- objectId?: string;
1808
- changes?: AuditChange[];
1809
- metadata?: Record<string, unknown>;
1810
- /** Direct parent in a delegation chain (e.g. user who launched the agent). */
1811
- triggeredByActorId?: string;
1812
- /** Root human actor at the top of a delegation chain. */
1813
- rootActorId?: string;
1814
- }
1815
- /**
1816
- * Valid column names for sorting audit log entries.
1817
- * Maps to snake_case database column names used in Supabase queries.
1818
- */
1819
- type AuditSortField = "created_at" | "action" | "resource_type" | "actor_id" | "actor_email" | "object_name";
1820
- /**
1821
- * Options for listing audit logs
1822
- */
1823
- interface AuditListOptions {
1824
- limit?: number;
1825
- offset?: number;
1826
- action?: AuditAction | AuditAction[];
1827
- resourceType?: AuditResourceType | AuditResourceType[];
1828
- objectName?: string;
1829
- actorId?: string;
1830
- from?: Date;
1831
- to?: Date;
1832
- sorts?: Array<{
1833
- field: AuditSortField;
1834
- direction: "asc" | "desc";
1835
- }>;
1836
- }
1837
- /**
1838
- * Options for AuditService
1839
- */
1840
- interface AuditServiceOptions {
1841
- /**
1842
- * If true, audit logging is async (fire-and-forget).
1843
- * Better performance but logs might be lost on crash.
1844
- * @default false
1845
- */
1846
- async?: boolean;
1847
- /**
1848
- * Batch size for async mode.
1849
- * Logs are buffered and flushed when batch is full or after flushIntervalMs.
1850
- * @default 10
1851
- */
1852
- batchSize?: number;
1853
- /**
1854
- * Flush interval in ms for async mode.
1855
- * @default 1000
1856
- */
1857
- flushIntervalMs?: number;
1858
- }
1859
- /**
1860
- * A single field-level history entry, derived from an audit log change.
1861
- * Client-safe — no tenant or internal IDs.
1862
- */
1863
- interface FieldHistoryEntry {
1864
- id: string;
1865
- field: string;
1866
- oldValue: unknown;
1867
- newValue: unknown;
1868
- oldLabel?: string;
1869
- newLabel?: string;
1870
- oldLabels?: string[];
1871
- newLabels?: string[];
1872
- actorEmail?: string;
1873
- createdAt: Date;
1874
- }
1875
-
1876
- type DocumentKind = "file" | "folder";
1877
- interface Document extends Timestamps {
1878
- id: Uuid;
1879
- tenantId: Uuid;
1880
- title: string;
1881
- kind: DocumentKind;
1882
- parentId?: Uuid | null;
1883
- description?: string;
1884
- contentHash?: string;
1885
- createdBy?: Uuid;
1886
- updatedBy?: Uuid;
1887
- deletedAt?: Date | null;
1888
- /**
1889
- * Fractional ordering position within `(tenantId, parentId)`. Lower values
1890
- * sort first. New rows default to `max(siblings) + 1024` so reorderings can
1891
- * insert between neighbours without renumbering. The server may rebalance
1892
- * positions in the background to keep the spacing bounded.
1893
- */
1894
- position: number;
1895
- }
1896
- interface DocumentWithSubCount extends Document {
1897
- subCount: number | null;
1898
- }
1899
- /** OCR processing lifecycle for a single file within a document pack. */
1900
- type FileOcrStatus = "pending" | "processing" | "completed" | "failed";
1901
- /**
1902
- * A single anonymous file belonging to a document pack.
1903
- * Unlike the slot-based model, files carry no slot name — order within the
1904
- * pack is `position` only, and `name` is provenance (originalName), never a
1905
- * label rendered in the UI.
1906
- */
1907
- interface DocumentFile {
1908
- id: Uuid;
1909
- documentId: Uuid;
1910
- position: number;
1911
- /** Provenance only (originalName) — never rendered as a label. */
1912
- name: string;
1913
- mimeType: string;
1914
- size: number;
1915
- ocrStatus: FileOcrStatus | null;
1916
- ocrText: string | null;
1917
- ocrConfidence: number | null;
1918
- processedAt: Date | null;
1919
- }
1920
- type DocumentWithFiles = Document & {
1921
- files: DocumentFile[];
1922
- };
1923
- interface CreateDocument {
1924
- title: string;
1925
- kind?: DocumentKind;
1926
- parentId?: Uuid | null;
1927
- description?: string;
1928
- position?: number;
1929
- }
1930
- /**
1931
- * Reference to a record attribute that should atomically attach a freshly
1932
- * created Document. Passed alongside `CreateDocument` to make creation
1933
- * link-aware end-to-end (client → REST → service → repo).
1934
- *
1935
- * The server requires this — orphan Documents are not creatable through the
1936
- * REST API.
1937
- */
1938
- interface CreateDocumentLink {
1939
- objectName: string;
1940
- sourceRecordId: string;
1941
- attributeName: string;
1942
- }
1943
- interface UpdateDocument {
1944
- title?: string;
1945
- parentId?: Uuid | null;
1946
- position?: number;
1947
- }
1948
- interface DocumentListOptions {
1949
- limit?: number;
1950
- offset?: number;
1951
- }
1952
- interface RecordDocuments {
1953
- /** Documents grouped by attribute name (includes system 'attachments' attribute) */
1954
- byAttribute: Record<string, DocumentWithFiles[]>;
1955
- }
1956
-
1957
- /**
1958
- * Storage provider type
1959
- */
1960
- type StorageProvider = "s3" | "gcs" | "azure" | "local" | "cloudflare-r2" | string;
1961
- /**
1962
- * File - Represents uploaded file metadata and storage info
1963
- *
1964
- * ARCHITECTURE:
1965
- * - Fixed table (no custom attributes)
1966
- * - Manages file storage metadata
1967
- * - uploadedBy links to user_profiles table
1968
- * - Supports soft delete via deletedAt
1969
- *
1970
- * @example
1971
- * ```typescript
1972
- * const file: File = {
1973
- * id: "file-123",
1974
- * tenantId: "tenant-456",
1975
- * name: "contract-2025.pdf",
1976
- * originalName: "Contract Acme Corp 2025.pdf",
1977
- * mimeType: "application/pdf",
1978
- * size: 2458624,
1979
- * storageProvider: "s3",
1980
- * storagePath: "tenants/456/files/2025/11/contract-2025.pdf",
1981
- * storageBucket: "my-app-files",
1982
- * url: "https://cdn.example.com/files/file-123",
1983
- * uploadedBy: "profile-789",
1984
- * folderPath: "/contracts/2025",
1985
- * createdAt: new Date(),
1986
- * updatedAt: new Date(),
1987
- * };
1988
- * ```
1989
- */
1990
- interface File extends Timestamps {
1991
- id: Uuid;
1992
- tenantId: Uuid;
1993
- /**
1994
- * File name (sanitized for storage)
1995
- */
1996
- name: string;
1997
- /**
1998
- * Original file name (as uploaded by user)
1999
- */
2000
- originalName: string;
2001
- /**
2002
- * MIME type (e.g., "application/pdf", "image/jpeg")
2003
- */
2004
- mimeType: MimeType | string;
2005
- /**
2006
- * File size in bytes
2007
- */
2008
- size: number;
2009
- /**
2010
- * Storage provider (s3, gcs, azure, local, etc.)
2011
- */
2012
- storageProvider: StorageProvider;
2013
- /**
2014
- * Path in the storage bucket
2015
- */
2016
- storagePath: string;
2017
- /**
2018
- * Storage bucket name (if applicable)
2019
- */
2020
- storageBucket?: string;
2021
- /**
2022
- * Public or signed URL to access the file
2023
- */
2024
- url: string;
2025
- /**
2026
- * User who uploaded the file (FK to user_profiles)
2027
- * Optional for system-generated files or anonymous uploads.
2028
- */
2029
- uploadedBy?: Uuid;
2030
- /**
2031
- * Folder path for organization (e.g., "/contracts/2025")
2032
- */
2033
- folderPath?: string;
2034
- /**
2035
- * Soft delete timestamp (null = not deleted)
2036
- */
2037
- deletedAt?: Date;
2038
- /**
2039
- * Document this file belongs to, when the file is a member of a document
2040
- * pack. NULL for files that aren't part of a document (e.g. freshly
2041
- * uploaded blobs not yet attached to a pack).
2042
- */
2043
- documentId?: Uuid | null;
2044
- /**
2045
- * Append-only position within the owning document pack (plain integer,
2046
- * `max(position) + 1`). Packs are NOT reorderable (spec §2).
2047
- */
2048
- position?: number | null;
2049
- /**
2050
- * OCR processing status for this file, when applicable.
2051
- */
2052
- ocrStatus?: FileOcrStatus | null;
2053
- /**
2054
- * Extracted OCR text, when processing has completed.
2055
- */
2056
- ocrText?: string | null;
2057
- /**
2058
- * OCR confidence score, when processing has completed.
2059
- */
2060
- ocrConfidence?: number | null;
2061
- /**
2062
- * Timestamp of the last OCR processing attempt.
2063
- */
2064
- processedAt?: Date | null;
2065
- }
2066
- /**
2067
- * Data required to create a new file record
2068
- */
2069
- /**
2070
- * Data for creating a new file.
2071
- * Tenant ID is automatically set from execution context.
2072
- */
2073
- interface CreateFile {
2074
- name: string;
2075
- originalName: string;
2076
- mimeType: MimeType | string;
2077
- size: number;
2078
- storageProvider: StorageProvider;
2079
- storagePath: string;
2080
- storageBucket?: string;
2081
- url: string;
2082
- uploadedBy?: Uuid;
2083
- folderPath?: string;
2084
- documentId?: Uuid | null;
2085
- position?: number | null;
2086
- ocrStatus?: FileOcrStatus | null;
2087
- ocrText?: string | null;
2088
- ocrConfidence?: number | null;
2089
- processedAt?: Date | null;
2090
- }
2091
- /**
2092
- * Data for updating an existing file record
2093
- */
2094
- interface UpdateFile {
2095
- name?: string;
2096
- folderPath?: string;
2097
- documentId?: Uuid | null;
2098
- position?: number | null;
2099
- ocrStatus?: FileOcrStatus | null;
2100
- ocrText?: string | null;
2101
- ocrConfidence?: number | null;
2102
- processedAt?: Date | null;
2103
- }
2104
-
2105
- /**
2106
- * Outcome of a compaction pass: a no-op (context already small enough), an LLM
2107
- * `summary`, or a degraded `truncation` (the summarizer failed/timed out/returned
2108
- * empty, so older messages were dropped and a notice injected). Canonical home —
2109
- * `runtime` re-exports this and `react` imports it; never duplicate the literals.
2110
- */
2111
- type CompactionStrategy = "no-op" | "summary" | "truncation";
2112
- type AgentRunStatus = "pending" | "running" | "completed" | "failed" | "cancelled" | "paused";
2113
- type AgentSessionStatus = "active" | "idle" | "completed" | "failed" | "cancelled" | "waiting_human" | "waiting_agents" | "timeout" | "expired";
2114
- type AgentSessionMode = "interactive" | "autonomous";
2115
- type AgentMissionPolicy = "off" | "observe" | "enforce";
2116
- type AgentMissionStatus = "active" | "verifying" | "completed" | "needs_review" | "abandoned";
2117
- type AgentTodoPlanStatus = "active" | "completed" | "promoted" | "abandoned";
2118
- type TriggerEventType = "record.created" | "record.updated" | "record.deleted" | "form.submitted" | "agent.completed" | "webhook" | "schedule";
2119
- type AgentTriggerType = Extract<TriggerEventType, "record.created" | "record.updated" | "record.deleted">;
2120
- type ProviderName = "anthropic" | "openai" | "google" | "mistral";
2121
- interface ModelDefinition {
2122
- provider: ProviderName;
2123
- model: string;
2124
- maxTokens?: number;
2125
- /**
2126
- * Total context window in tokens (e.g. 200000 for Claude Sonnet).
2127
- * Required by the compaction subsystem when this model is used as the
2128
- * summary model; optional otherwise.
2129
- */
2130
- contextWindow?: number;
2131
- }
2132
- interface RetryPolicy {
2133
- maxRetries: number;
2134
- backoffMs: number;
2135
- backoffMultiplier: number;
2136
- }
2137
- interface AgentExecutionConfig {
2138
- maxConcurrentRuns: number;
2139
- retryPolicy: RetryPolicy;
2140
- timeoutMs: number;
2141
- costLimitUsd?: number;
2142
- }
2143
- /**
2144
- * Shared base config used by AgentDefinition, inline runs, and AgentSession.
2145
- */
2146
- interface AgentConfig {
2147
- systemPrompt: string;
2148
- model: ModelDefinition;
2149
- tools?: string[];
2150
- timeoutMs?: number;
2151
- costLimitUsd?: number | null;
2152
- canDelegate: boolean;
2153
- maxDepth: number;
2154
- maxTreeCostUsd?: number;
2155
- critic?: CriticConfig;
2156
- missionPolicy?: AgentMissionPolicy;
2157
- }
2158
- interface CriticConfig {
2159
- enabled: boolean;
2160
- model?: ModelDefinition;
2161
- systemPrompt?: string;
2162
- maxRetries?: number;
2163
- }
2164
- /**
2165
- * Standalone trigger definition (replaces embedded AgentTrigger[]).
2166
- * Triggers are now first-class entities with their own lifecycle.
2167
- */
2168
- interface AgentTriggerDefinition {
2169
- id: string;
2170
- tenantId: string;
2171
- definitionId: string;
2172
- name?: string;
2173
- eventType: TriggerEventType;
2174
- objectId?: string;
2175
- watchedFields?: string[];
2176
- formDefinitionId?: string;
2177
- sourceAgentId?: string;
2178
- webhookPath?: string;
2179
- cronExpression?: string;
2180
- timezone?: string;
2181
- filter?: FilterState;
2182
- inputBuilder?: string;
2183
- debounceMs?: number;
2184
- enabled: boolean;
2185
- lastFiredAt?: Date;
2186
- createdAt: Date;
2187
- updatedAt: Date;
2188
- }
2189
- interface AgentSchedule {
2190
- cron: string;
2191
- timezone?: string;
2192
- enabled: boolean;
2193
- input?: Record<string, unknown>;
2194
- inputBuilder?: string;
2195
- }
2196
- /**
2197
- * Declarative trigger carried by an {@link AgentBlueprint}. The boot sync
2198
- * reconciles the agent's AgentTriggerDefinition rows to match, using `name`
2199
- * as the stable identity.
2200
- */
2201
- interface AgentTriggerBlueprint {
2202
- name: string;
2203
- eventType: TriggerEventType;
2204
- objectId?: string;
2205
- watchedFields?: string[];
2206
- formDefinitionId?: string;
2207
- sourceAgentId?: string;
2208
- webhookPath?: string;
2209
- cronExpression?: string;
2210
- timezone?: string;
2211
- filter?: FilterState;
2212
- inputBuilder?: string;
2213
- debounceMs?: number;
2214
- enabled: boolean;
2215
- }
2216
- /**
2217
- * Code-declared agent definition produced by the `agent()` builder.
2218
- * Contains everything an AgentDefinition needs except runtime-assigned
2219
- * fields (id, tenantId, createdBy, timestamps). `system: true` blueprints
2220
- * are seeded/reconciled at boot and immutable through the public API.
2221
- */
2222
- interface AgentBlueprint {
2223
- name: string;
2224
- icon?: string;
2225
- description?: string;
2226
- systemPrompt: string;
2227
- model: ModelDefinition;
2228
- tools?: string[];
2229
- schedule?: AgentSchedule;
2230
- config: AgentExecutionConfig;
2231
- canDelegate?: boolean;
2232
- maxDepth?: number;
2233
- maxTreeCostUsd?: number;
2234
- system: boolean;
2235
- triggers: AgentTriggerBlueprint[];
2236
- }
2237
- interface AgentMessageAttachment {
2238
- id: string;
2239
- name: string;
2240
- mimeType: string;
2241
- size: number;
2242
- }
2243
- interface AgentMissionArtifact {
2244
- path: string;
2245
- description: string;
2246
- mediaType?: string;
2247
- }
2248
- interface AgentMissionRubricCriterion {
2249
- id: string;
2250
- description: string;
2251
- }
2252
- interface AgentMissionRubric {
2253
- criteria: AgentMissionRubricCriterion[];
2254
- createdAt: string;
2255
- }
2256
- interface AgentMissionVerification {
2257
- cycle: number;
2258
- attempts: number;
2259
- maxAttempts: number;
2260
- lastVerdict?: "pass" | "fail";
2261
- lastFeedback?: string;
2262
- missingCriteria?: string[];
2263
- lastEvidenceHash?: string;
2264
- pendingEvidenceHash?: string;
2265
- lastAttemptAt?: string;
2266
- verifierCostUsd?: number;
2267
- verifierInputTokens?: number;
2268
- verifierOutputTokens?: number;
2269
- }
2270
- interface AgentMission {
2271
- id: string;
2272
- tenantId: string;
2273
- sessionId: string;
2274
- activationMessageId?: string;
2275
- status: AgentMissionStatus;
2276
- objective: string;
2277
- todos: AITodoItem[];
2278
- artifacts: AgentMissionArtifact[];
2279
- rubric?: AgentMissionRubric;
2280
- verification: AgentMissionVerification;
2281
- version: number;
2282
- createdBy?: string;
2283
- createdAt: Date;
2284
- updatedAt: Date;
2285
- completedAt?: Date;
2286
- }
2287
- /** UI-safe mission lifecycle snapshot returned by REST and realtime surfaces. */
2288
- interface AgentMissionView {
2289
- id: string;
2290
- sessionId: string;
2291
- status: AgentMissionStatus;
2292
- objective: string;
2293
- todos: AITodoItem[];
2294
- artifacts: AgentMissionArtifact[];
2295
- verification: Pick<AgentMissionVerification, "cycle" | "attempts" | "maxAttempts" | "lastVerdict" | "lastFeedback" | "missingCriteria" | "lastAttemptAt">;
2296
- version: number;
2297
- createdAt: string;
2298
- updatedAt: string;
2299
- completedAt?: string;
2300
- }
2301
- interface AgentMissionPage {
2302
- items: AgentMissionView[];
2303
- nextCursor?: string;
2304
- }
2305
- /** A lightweight, pre-mission todo plan scoped to one agent session. */
2306
- interface AgentTodoPlan {
2307
- id: string;
2308
- tenantId: string;
2309
- sessionId: string;
2310
- activationMessageId?: string;
2311
- status: AgentTodoPlanStatus;
2312
- todos: AITodoItem[];
2313
- version: number;
2314
- createdBy?: string;
2315
- createdAt: Date;
2316
- updatedAt: Date;
2317
- completedAt?: Date;
2318
- promotedMissionId?: string;
2319
- }
2320
- /** UI-safe todo plan lifecycle snapshot returned by REST and realtime surfaces. */
2321
- interface AgentTodoPlanView {
2322
- id: string;
2323
- sessionId: string;
2324
- status: AgentTodoPlanStatus;
2325
- todos: AITodoItem[];
2326
- version: number;
2327
- createdAt: string;
2328
- updatedAt: string;
2329
- completedAt?: string;
2330
- promotedMissionId?: string;
2331
- }
2332
- interface AgentDefinition {
2333
- id: string;
2334
- tenantId: string;
2335
- name: string;
2336
- icon?: string;
2337
- description?: string;
2338
- systemPrompt: string;
2339
- model: ModelDefinition;
2340
- tools?: string[];
2341
- schedule?: AgentSchedule;
2342
- config: AgentExecutionConfig;
2343
- /** Code-declared (immutable via public API); reconciled by the boot sync. */
2344
- system: boolean;
2345
- createdBy: string;
2346
- createdAt: Date;
2347
- updatedAt: Date;
2348
- deletedAt?: Date;
2349
- canDelegate?: boolean;
2350
- maxDepth?: number;
2351
- maxTreeCostUsd?: number;
2352
- critic?: CriticConfig;
2353
- missionPolicy?: AgentMissionPolicy;
2354
- autoDecide?: boolean;
2355
- fileIds?: string[];
2356
- attachments?: File[];
2357
- }
2358
- interface AgentRun {
2359
- id: string;
2360
- definitionId?: string;
2361
- parentRunId?: string;
2362
- depth: number;
2363
- inlineConfig?: AgentConfig;
2364
- tenantId: string;
2365
- createdBy?: string;
2366
- status: AgentRunStatus;
2367
- retryCount: number;
2368
- input: Record<string, unknown>;
2369
- output?: Record<string, unknown>;
2370
- error?: string;
2371
- tokenUsage?: {
2372
- input: number;
2373
- output: number;
2374
- };
2375
- costUsd?: number;
2376
- startedAt?: Date;
2377
- completedAt?: Date;
2378
- createdAt: Date;
2379
- sessionId?: string;
2380
- rootRunId?: string;
2381
- triggerId?: string;
2382
- /** Source domain-event id that launched this run; used for redelivery idempotency. */
2383
- sourceEventId?: string;
2384
- treeCostUsd?: number;
2385
- effectiveSystemPrompt?: string;
2386
- /** Monotonic fencing token, incremented on each lease acquisition. */
2387
- attemptId?: number;
2388
- /** Worker id currently holding the execution lease (null when free). */
2389
- leaseOwner?: string;
2390
- /** When the current lease expires; a run is re-acquirable once past this. */
2391
- leaseExpiresAt?: Date;
2392
- }
2393
- interface AgentSession {
2394
- id: string;
2395
- tenantId: string;
2396
- mode: AgentSessionMode;
2397
- status: AgentSessionStatus;
2398
- definitionId?: string;
2399
- inlineConfig?: AgentConfig;
2400
- parentSessionId?: string;
2401
- rootSessionId: string;
2402
- depth: number;
2403
- missionPrompt?: string;
2404
- treeCostUsd: number;
2405
- name?: string;
2406
- metadata?: Record<string, unknown>;
2407
- createdBy?: string;
2408
- createdAt: Date;
2409
- updatedAt: Date;
2410
- completedAt?: Date;
2411
- expiresAt?: Date;
2412
- archivedAt?: Date;
2413
- /** Per-actor read marker. Populated by list endpoints when the caller is known. */
2414
- lastReadAt?: Date;
2415
- /** Convenience flag: true when session has activity since `lastReadAt` (or never read). */
2416
- isUnread?: boolean;
2417
- }
2418
- type ToolPartState = "streaming" | "running" | "completed" | "error";
2419
- /**
2420
- * Structured cause for a tool part that ended in `state: "error"` without the
2421
- * tool having run. Lets the UI render a localized explanation instead of the
2422
- * raw error string.
2423
- */
2424
- type ToolPartErrorCode = "output_limit_reached" | "interrupted";
2425
- type AgentMessagePart = {
2426
- type: "text";
2427
- text: string;
2428
- } | {
2429
- type: "reasoning";
2430
- text: string;
2431
- } | {
2432
- type: "error";
2433
- error: string;
2434
- errorClass?: string;
2435
- } | {
2436
- type: "tool";
2437
- toolCallId: string;
2438
- name: string;
2439
- args: Record<string, unknown>;
2440
- result?: unknown;
2441
- error?: string;
2442
- errorCode?: ToolPartErrorCode;
2443
- state: ToolPartState;
2444
- durationMs?: number;
2445
- } | {
2446
- type: "file";
2447
- fileId: string;
2448
- name: string;
2449
- mimeType: string;
2450
- } | {
2451
- type: "compaction";
2452
- state: "in-progress";
2453
- reason: "preflight_threshold" | "overflow_recovery";
2454
- estimatedTokens?: number;
2455
- reportedTokens?: number;
2456
- } | {
2457
- type: "compaction";
2458
- state: "completed";
2459
- tokensBefore: number;
2460
- tokensAfter: number;
2461
- tokensSaved: number;
2462
- strategy: CompactionStrategy;
2463
- durationMs: number;
2464
- /**
2465
- * Raw summary text produced by the summarizer LLM. Persisted so that
2466
- * follow-up turns can reuse it instead of re-running the summarizer.
2467
- */
2468
- summary?: string;
2469
- } | {
2470
- type: "compaction";
2471
- state: "failed";
2472
- /** Human-readable reason from the CompactionImpossibleError. */
2473
- reason: string;
2474
- durationMs?: number;
2475
- };
2476
- /**
2477
- * Persisted message in an agent session.
2478
- * Unified type for both interactive and autonomous sessions.
2479
- */
2480
- interface AgentSessionMessage {
2481
- id: string;
2482
- sessionId: string;
2483
- tenantId?: string;
2484
- runId?: string;
2485
- role: "user" | "assistant" | "system" | "tool";
2486
- parts: AgentMessagePart[];
2487
- attachments?: AgentMessageAttachment[];
2488
- mentions?: MentionReference[];
2489
- model?: ModelDefinition;
2490
- tokenUsage?: {
2491
- input: number;
2492
- output: number;
2493
- };
2494
- metadata?: Record<string, unknown>;
2495
- createdAt: Date;
2496
- }
2497
- interface AgentToolCall {
2498
- id: string;
2499
- name: string;
2500
- arguments: Record<string, unknown>;
2501
- result?: unknown;
2502
- error?: string;
2503
- durationMs?: number;
2504
- /** Set by StreamEventAccumulator.reconcile() when the tool call was cut off before completing. */
2505
- errorCode?: ToolPartErrorCode;
2506
- }
2507
- interface RecordAgentEvent {
2508
- type: AgentTriggerType;
2509
- objectId: string;
2510
- recordId: string;
2511
- tenantId: string;
2512
- data?: Record<string, unknown>;
2513
- }
2514
- interface FormSubmittedAgentEvent {
2515
- type: "form.submitted";
2516
- tenantId: string;
2517
- formId: string;
2518
- formName: string;
2519
- submissionId: string;
2520
- createdBy?: string;
2521
- createdRecordIds: Record<string, string>;
2522
- data: {
2523
- formId: string;
2524
- formName: string;
2525
- submissionId: string;
2526
- createdBy?: string;
2527
- createdRecordIds: Record<string, string>;
2528
- slotValues: Record<string, Record<string, unknown>>;
2529
- stepValues: Record<string, Record<string, unknown>>;
2530
- };
2531
- }
2532
- type AgentEvent = RecordAgentEvent | FormSubmittedAgentEvent;
2533
- interface AgentDashboard {
2534
- activeRuns: number;
2535
- pendingRuns: number;
2536
- failedToday: number;
2537
- completedToday: number;
2538
- totalCostToday: number;
2539
- totalCostWeek: number;
2540
- }
2541
- /**
2542
- * Message role in a conversation
2543
- */
2544
- type AIMessageRole = "user" | "assistant";
2545
- /**
2546
- * An AI model available for selection by the user.
2547
- * Configured on the backend and exposed via GET /agent/models.
2548
- */
2549
- interface AIAvailableModel {
2550
- /** Model identifier exposed to the UI (e.g. "claude-sonnet-4-6") */
2551
- id: string;
2552
- /**
2553
- * Provider model ID sent to the underlying SDK. Defaults to `id` when omitted.
2554
- * Use this to register multiple registry entries (different `contextWindow`,
2555
- * `label`, etc.) that route to the same upstream model — e.g. a test entry
2556
- * with a reduced context window for QA of the compaction system.
2557
- */
2558
- apiModelId?: string;
2559
- /** Provider name (e.g. "anthropic", "google") */
2560
- provider: string;
2561
- /** Display label (e.g. "Claude 4.6 Sonnet") */
2562
- label: string;
2563
- /** Whether this is the default model */
2564
- isDefault?: boolean;
2565
- /**
2566
- * Total context window in tokens. Optional — resolved from the vendored
2567
- * models.dev snapshot when omitted. Set explicitly only for a deliberate cap
2568
- * (e.g. a QA reduced-window entry).
2569
- */
2570
- contextWindow?: number;
2571
- /**
2572
- * Maximum output tokens. Optional — resolved from the models.dev snapshot when
2573
- * omitted. Set explicitly only for a deliberate cap.
2574
- */
2575
- maxOutputTokens?: number;
2576
- /**
2577
- * Set true for a model newer than the models.dev snapshot. When true,
2578
- * `contextWindow` and `maxOutputTokens` MUST be provided explicitly. Token
2579
- * cost stays unknown (never developer-specified) until the snapshot lists it.
2580
- */
2581
- unverified?: boolean;
2582
- /** If true, this model is used for generating compaction summaries */
2583
- isCompactionModel?: boolean;
2584
- /** If true, this model is used for fast utility generations (regex, formula, …) */
2585
- isUtilityModel?: boolean;
2586
- }
2587
- /**
2588
- * Tool call status during execution
2589
- */
2590
- type AIToolCallStatus = "pending" | "running" | "streaming" | "success" | "error";
2591
- /**
2592
- * Tool call information for chat UI
2593
- */
2594
- interface AIToolCall {
2595
- /** Unique tool call ID */
2596
- id: string;
2597
- /** Tool name */
2598
- name: string;
2599
- /** Tool arguments */
2600
- args?: Record<string, unknown>;
2601
- /** Tool result (when complete) */
2602
- result?: unknown;
2603
- /** Error message if failed */
2604
- error?: string;
2605
- /** Execution status */
2606
- status: AIToolCallStatus;
2607
- }
2608
- /**
2609
- * Part type for message content
2610
- */
2611
- type AIChatMessagePartType = "text" | "attachment" | "tool" | "thinking" | "reasoning" | "todo" | "question" | "error" | "approval" | "record" | "search-results" | "compaction" | (string & {});
2612
- /**
2613
- * Data for text part
2614
- */
2615
- interface TextPartData {
2616
- text: string;
2617
- isStreaming?: boolean;
2618
- }
2619
- /**
2620
- * Data for tool part (same as AIToolCall)
2621
- */
2622
- interface ToolPartData {
2623
- id: string;
2624
- name: string;
2625
- args?: Record<string, unknown>;
2626
- result?: unknown;
2627
- error?: string;
2628
- errorCode?: ToolPartErrorCode;
2629
- status: AIToolCallStatus;
2630
- /** Raw JSON string accumulating during tool-input streaming (cleared on tool_input_end) */
2631
- partialInput?: string;
2632
- }
2633
- /**
2634
- * Data for thinking part
2635
- */
2636
- interface ThinkingPartData {
2637
- isStreaming: boolean;
2638
- startTime?: number;
2639
- }
2640
- /**
2641
- * Data for reasoning part (Extended Thinking content)
2642
- */
2643
- interface ReasoningPartData {
2644
- /** Reasoning content (accumulated during streaming) */
2645
- content: string;
2646
- /** Whether reasoning is still streaming */
2647
- isStreaming: boolean;
2648
- /** Start timestamp for elapsed time display */
2649
- startTime?: number;
2650
- }
2651
- /**
2652
- * A part of a chat message.
2653
- * Parts are ordered chronologically as they arrive from the stream.
2654
- */
2655
- interface AIChatMessagePart {
2656
- /** Part type */
2657
- type: AIChatMessagePartType;
2658
- /** Unique part ID */
2659
- id: string;
2660
- /** Part-specific data */
2661
- data: unknown;
2662
- }
2663
- /**
2664
- * Terminal status of a dispatched subagent, mirrored onto the parent-visible
2665
- * notification. `completed` reads as success; everything else reads as failure.
2666
- */
2667
- type AISubagentStatus = "completed" | "failed" | "cancelled" | "timeout" | "expired";
2668
- /**
2669
- * Narrow, UI-ready projection of an `agent-notification` message. Derived by the
2670
- * react mapper from the raw `AgentSessionMessage.metadata` so the UI never has to
2671
- * touch untrusted wrapper text: the title comes from {@link childName}/{@link status}
2672
- * and {@link body} is the child's report already unwrapped from its `<subagent_result>`
2673
- * envelope.
2674
- */
2675
- interface AIChatNotification {
2676
- childSessionId: string;
2677
- childName: string;
2678
- status: AISubagentStatus;
2679
- /** Child's report, unwrapped from the `<subagent_result>` envelope; rendered as markdown. */
2680
- body: string;
2681
- }
2682
- /**
2683
- * Chat message for runtime/streaming.
2684
- *
2685
- * All content is represented as ordered parts (text, tools, thinking, etc.)
2686
- * Parts are in chronological order as they arrive from the stream.
2687
- *
2688
- * Used in:
2689
- * - useAgentChat hook
2690
- * - AI chat UI components
2691
- * - Stream processing
2692
- */
2693
- interface AIChatMessage {
2694
- /** Unique message ID */
2695
- id: string;
2696
- /** Message role */
2697
- role: AIMessageRole;
2698
- /** Ordered message parts (text, tools, thinking, etc.) */
2699
- parts: AIChatMessagePart[];
2700
- /** Whether the message is still streaming */
2701
- isStreaming?: boolean;
2702
- /** Message timestamp */
2703
- timestamp?: Date;
2704
- /** Error message if the message failed */
2705
- error?: string;
2706
- /**
2707
- * Present only for subagent-completion notifications. When set, the UI renders
2708
- * a compact collapsible callout in the agent flow instead of a user bubble, and
2709
- * ignores {@link parts} (which still hold the raw wrapper text).
2710
- */
2711
- notification?: AIChatNotification;
2712
- /**
2713
- * Tokens reported by the provider after this message completed. The `input`
2714
- * value reflects the size of the conversation Anthropic actually saw on
2715
- * that turn — used by the chat composer to render a context-window
2716
- * progress ring.
2717
- */
2718
- tokenUsage?: {
2719
- input: number;
2720
- output: number;
2721
- };
2722
- }
2723
- /**
2724
- * Question types supported by the agent
2725
- */
2726
- type AIQuestionType = "text" | "choice" | "confirm" | "multiselect";
2727
- /**
2728
- * Option for choice/multiselect questions
2729
- */
2730
- interface AIQuestionOption {
2731
- value: string;
2732
- label: string;
2733
- description?: string;
2734
- }
2735
- /**
2736
- * Question from the agent to the user
2737
- */
2738
- interface AIQuestion {
2739
- /** Unique question ID */
2740
- id: string;
2741
- /** Question type */
2742
- type: AIQuestionType;
2743
- /** Question text */
2744
- question: string;
2745
- /** Options for choice/multiselect */
2746
- options?: AIQuestionOption[];
2747
- /** Placeholder for text input */
2748
- placeholder?: string;
2749
- /** Whether answer is required */
2750
- required?: boolean;
2751
- /** Min selections for multiselect */
2752
- minSelections?: number;
2753
- /** Max selections for multiselect */
2754
- maxSelections?: number;
2755
- }
2756
- /**
2757
- * Answer format for questions
2758
- */
2759
- type AIQuestionAnswer = {
2760
- type: "text";
2761
- value: string;
2762
- } | {
2763
- type: "choice";
2764
- value: string;
2765
- } | {
2766
- type: "confirm";
2767
- value: boolean;
2768
- } | {
2769
- type: "multiselect";
2770
- value: string[];
2771
- };
902
+ declare const BEHAVIOR_PROPERTIES: readonly ["required", "hidden", "archived", "deprecated", "defaultValue", "config", "order", "unique"];
2772
903
  /**
2773
- * Option for batch questions
904
+ * Presentation properties - Always modifiable
905
+ * These only affect display, not logic.
2774
906
  */
2775
- interface AIBatchQuestionOption {
2776
- /** Value returned when selected */
2777
- value: string;
2778
- /** Display label */
2779
- label: string;
2780
- }
907
+ declare const PRESENTATION_PROPERTIES: readonly ["label", "description", "placeholder", "icon"];
908
+
2781
909
  /**
2782
- * Question in a batch (for ask_questions tool)
910
+ * Type of resource that can be audited
2783
911
  */
2784
- interface AIBatchQuestion {
2785
- /** Unique question ID */
2786
- id: string;
2787
- /** Question text to display */
2788
- question: string;
2789
- /** Predefined options (if provided, displayed as buttons) */
2790
- options?: AIBatchQuestionOption[];
2791
- /** Allow custom text input in addition to options */
2792
- allowCustomAnswer?: boolean;
2793
- /** Placeholder for custom input field */
2794
- placeholder?: string;
2795
- }
912
+ declare const AUDIT_RESOURCE_TYPES: readonly ["record", "object", "attribute", "view", "user", "role", "settings", "file", "agent"];
913
+ type AuditResourceType = (typeof AUDIT_RESOURCE_TYPES)[number];
2796
914
  /**
2797
- * Answer returned by the AgentQuestions widget
915
+ * Actions that can be audited
2798
916
  */
2799
- interface AIBatchQuestionAnswer {
2800
- /** True if user skipped all questions */
2801
- skipped: boolean;
2802
- /** Map of question ID to answer value */
2803
- answers: Record<string, string>;
2804
- }
917
+ declare const AUDIT_ACTIONS: readonly ["record.created", "record.updated", "record.deleted", "record.restored", "record.purged", "object.created", "object.updated", "object.deleted", "attribute.created", "attribute.updated", "attribute.deleted", "view.created", "view.updated", "view.deleted", "user.created", "user.invited", "user.updated", "user.deleted", "user.login", "user.logout", "role.created", "role.updated", "role.deleted", "role.assigned", "role.revoked", "settings.updated", "file.uploaded", "file.updated", "file.deleted"];
918
+ type AuditAction = (typeof AUDIT_ACTIONS)[number];
2805
919
  /**
2806
- * Todo item status
920
+ * Actor type - who performed the action
2807
921
  */
2808
- type AITodoStatus = "pending" | "in_progress" | "completed" | "blocked";
922
+ type AuditActorType = ActorType;
2809
923
  /**
2810
- * Todo item in a task list
924
+ * Detail of a change on a field
2811
925
  */
2812
- interface AITodoItem {
2813
- id: string;
2814
- description: string;
2815
- status: AITodoStatus;
2816
- result?: string;
2817
- updatedAt?: number;
926
+ interface AuditChange {
927
+ /** Field name that was changed */
928
+ field: string;
929
+ /** Previous value (undefined for new fields) */
930
+ oldValue: unknown;
931
+ /** New value (undefined for deleted fields) */
932
+ newValue: unknown;
933
+ /** Resolved label for oldValue when the field is a relation. */
934
+ oldLabel?: string;
935
+ /** Resolved label for newValue when the field is a relation. */
936
+ newLabel?: string;
937
+ /** Resolved labels for oldValue array, aligned by index. */
938
+ oldLabels?: string[];
939
+ /** Resolved labels for newValue array, aligned by index. */
940
+ newLabels?: string[];
2818
941
  }
2819
942
  /**
2820
- * Todo list managed by the agent
943
+ * Audit log entry - immutable record of an action
2821
944
  */
2822
- interface AITodoList {
2823
- items: AITodoItem[];
2824
- progress: number;
2825
- isComplete: boolean;
945
+ interface AuditLogEntry {
946
+ id: Uuid;
947
+ tenantId: Uuid;
948
+ /** actors.id of the actor (null for system actions) */
949
+ actorId?: string;
950
+ /** Denormalized email for search (in case user is deleted) */
951
+ actorEmail?: string;
952
+ /** Type of actor */
953
+ actorType: AuditActorType;
954
+ /** Direct parent actor in a delegation chain (e.g. user who launched the agent). */
955
+ triggeredByActorId?: string;
956
+ /** Root human actor at the top of a delegation chain. Null in pure-autonomous runs. */
957
+ rootActorId?: string;
958
+ action: AuditAction;
959
+ resourceType: AuditResourceType;
960
+ resourceId: Uuid;
961
+ /** Human-readable label (record name, object label, etc.) */
962
+ resourceLabel?: string;
963
+ /** Object technical name (e.g., "companies", "contacts") */
964
+ objectName?: string;
965
+ /** Object UUID */
966
+ objectId?: Uuid;
967
+ changes?: AuditChange[];
968
+ /** Extra context (IP, user-agent, requestId, etc.) */
969
+ metadata?: Record<string, unknown>;
970
+ createdAt: Date;
2826
971
  }
2827
972
  /**
2828
- * AI Usage Metrics record
973
+ * Input for creating an audit log entry.
974
+ * Tenant ID is automatically set from execution context.
2829
975
  */
2830
- interface AIUsageMetrics {
2831
- id: string;
2832
- tenantId: string;
2833
- date: Date;
2834
- requestCount: number;
2835
- totalTokens: number;
2836
- totalCost: number;
2837
- providerBreakdown: Record<string, AIProviderMetrics>;
2838
- toolUsage: Record<string, number>;
976
+ interface CreateAuditLogInput {
977
+ /** actors.id of the actor (null for system actions) */
978
+ actorId?: string;
979
+ /** Denormalized actor email for display purposes. */
980
+ actorEmail?: string;
981
+ actorType?: AuditActorType;
982
+ action: AuditAction;
983
+ resourceType: AuditResourceType;
984
+ resourceId: string;
985
+ resourceLabel?: string;
986
+ objectName?: string;
987
+ objectId?: string;
988
+ changes?: AuditChange[];
989
+ metadata?: Record<string, unknown>;
990
+ /** Direct parent in a delegation chain (e.g. user who launched the agent). */
991
+ triggeredByActorId?: string;
992
+ /** Root human actor at the top of a delegation chain. */
993
+ rootActorId?: string;
2839
994
  }
2840
995
  /**
2841
- * Provider-specific metrics
996
+ * Valid column names for sorting audit log entries.
997
+ * Maps to snake_case database column names used in Supabase queries.
2842
998
  */
2843
- interface AIProviderMetrics {
2844
- requests: number;
2845
- tokens: number;
2846
- cost: number;
2847
- }
999
+ type AuditSortField = "created_at" | "action" | "resource_type" | "actor_id" | "actor_email" | "object_name";
2848
1000
  /**
2849
- * Memory type for categorization
2850
- *
2851
- * - `soul`: Tenant identity and persona (admin-managed)
2852
- * - `user`: Per-user facts and preferences
2853
- * - `daily`: Auto-generated daily summaries
2854
- * - `session`: Auto-generated conversation summaries
1001
+ * Options for listing audit logs
2855
1002
  */
2856
- type AIMemoryType = "soul" | "user" | "daily" | "session";
1003
+ interface AuditListOptions {
1004
+ limit?: number;
1005
+ offset?: number;
1006
+ action?: AuditAction | AuditAction[];
1007
+ resourceType?: AuditResourceType | AuditResourceType[];
1008
+ objectName?: string;
1009
+ actorId?: string;
1010
+ from?: Date;
1011
+ to?: Date;
1012
+ sorts?: Array<{
1013
+ field: AuditSortField;
1014
+ direction: "asc" | "desc";
1015
+ }>;
1016
+ }
2857
1017
  /**
2858
- * Advanced memory entry for OpenClaw-style memory system
1018
+ * Options for AuditService
2859
1019
  */
2860
- interface AIMemoryEntry {
2861
- id: string;
2862
- tenantId: string;
2863
- userId: string | null;
2864
- conversationId: string | null;
2865
- type: AIMemoryType;
2866
- content: string;
2867
- embedding: number[] | null;
2868
- importance: number;
2869
- source: string;
2870
- createdAt: Date;
2871
- updatedAt: Date;
2872
- expiresAt: Date | null;
1020
+ interface AuditServiceOptions {
1021
+ /**
1022
+ * If true, audit logging is async (fire-and-forget).
1023
+ * Better performance but logs might be lost on crash.
1024
+ * @default false
1025
+ */
1026
+ async?: boolean;
1027
+ /**
1028
+ * Batch size for async mode.
1029
+ * Logs are buffered and flushed when batch is full or after flushIntervalMs.
1030
+ * @default 10
1031
+ */
1032
+ batchSize?: number;
1033
+ /**
1034
+ * Flush interval in ms for async mode.
1035
+ * @default 1000
1036
+ */
1037
+ flushIntervalMs?: number;
2873
1038
  }
2874
1039
  /**
2875
- * Compaction summary for conversation history compression
1040
+ * A single field-level history entry, derived from an audit log change.
1041
+ * Client-safe — no tenant or internal IDs.
2876
1042
  */
2877
- interface AICompactionSummary {
1043
+ interface FieldHistoryEntry {
2878
1044
  id: string;
2879
- tenantId: string;
2880
- userId: string;
2881
- conversationId: string;
2882
- summary: string;
2883
- originalMessageCount: number;
2884
- tokenCountBefore: number;
2885
- tokenCountAfter: number;
2886
- compactedAt: Date;
1045
+ field: string;
1046
+ oldValue: unknown;
1047
+ newValue: unknown;
1048
+ oldLabel?: string;
1049
+ newLabel?: string;
1050
+ oldLabels?: string[];
1051
+ newLabels?: string[];
1052
+ actorEmail?: string;
1053
+ createdAt: Date;
2887
1054
  }
2888
1055
 
1056
+ /**
1057
+ * The minimum every capability predicate in this file reads: the type, plus
1058
+ * whatever else of a full `Attribute` the caller happens to hold. Exported so
1059
+ * callers that only have a partial attribute — a plan's proposed attribute, a
1060
+ * schema snapshot row — can ask the same questions as callers holding the real
1061
+ * thing, instead of restating the rules.
1062
+ */
2889
1063
  type AttributeLike = Pick<Attribute, "type"> & Partial<Attribute>;
2890
1064
  type AttributeLifecycleCapabilities = {
2891
1065
  active: boolean;
@@ -3596,6 +1770,10 @@ interface RecordMetadata {
3596
1770
  createdAt: Date;
3597
1771
  /** Last update timestamp */
3598
1772
  updatedAt: Date;
1773
+ /** Workspace-wide or actor-private visibility assigned by runtime policy. */
1774
+ visibility: ResourceVisibility;
1775
+ /** Owning actor for private records; null for workspace records. */
1776
+ ownedBy: Uuid | null;
3599
1777
  /**
3600
1778
  * Actor ID who created this record.
3601
1779
  * Automatically set by RecordService when actorId is configured.
@@ -3623,7 +1801,11 @@ interface RecordMetadata {
3623
1801
  * Note: `metadata` is part of RecordMetadata but NOT a SystemField because
3624
1802
  * it is writable by developers via insert/update.
3625
1803
  */
3626
- type SystemFields = "id" | "createdAt" | "updatedAt" | "createdBy" | "lastUpdatedBy";
1804
+ type SystemFields = "id" | "createdAt" | "updatedAt" | "createdBy" | "lastUpdatedBy" | "visibility" | "ownedBy";
1805
+ /** Remove policy/system-owned fields even when `T` carries an open custom-key index signature. */
1806
+ type WithoutSystemFields<T> = Omit<T, SystemFields> & {
1807
+ [K in SystemFields]?: never;
1808
+ };
3627
1809
 
3628
1810
  /**
3629
1811
  * Extract the record type from an ObjectBuilder instance
@@ -3671,7 +1853,7 @@ type ExtractRecordInput<TBuilder> = TBuilder extends {
3671
1853
  _types: {
3672
1854
  input: infer R;
3673
1855
  };
3674
- } ? Omit<WithCustomAttributes$1<R>, SystemFields> : never;
1856
+ } ? WithoutSystemFields<WithCustomAttributes$1<R>> : never;
3675
1857
  /**
3676
1858
  * Extract the input type without custom attributes (strict mode)
3677
1859
  * Omits system fields (id, createdAt, updatedAt) as they are managed automatically.
@@ -3680,7 +1862,7 @@ type ExtractRecordInputStrict<TBuilder> = TBuilder extends {
3680
1862
  _types: {
3681
1863
  input: infer R;
3682
1864
  };
3683
- } ? Omit<R, SystemFields> : never;
1865
+ } ? WithoutSystemFields<R> : never;
3684
1866
  /**
3685
1867
  * Extract the update type from an ObjectBuilder instance
3686
1868
  * Includes support for custom attributes.
@@ -3690,7 +1872,7 @@ type ExtractRecordUpdate<TBuilder> = TBuilder extends {
3690
1872
  _types: {
3691
1873
  update: infer R;
3692
1874
  };
3693
- } ? Omit<WithCustomAttributes$1<R>, SystemFields> : never;
1875
+ } ? WithoutSystemFields<WithCustomAttributes$1<R>> : never;
3694
1876
  /**
3695
1877
  * Extract the update type without custom attributes (strict mode)
3696
1878
  * Omits system fields (id, createdAt, updatedAt) as they are managed automatically.
@@ -3699,7 +1881,7 @@ type ExtractRecordUpdateStrict<TBuilder> = TBuilder extends {
3699
1881
  _types: {
3700
1882
  update: infer R;
3701
1883
  };
3702
- } ? Omit<R, SystemFields> : never;
1884
+ } ? WithoutSystemFields<R> : never;
3703
1885
 
3704
1886
  /** Lifecycle of a Reflex. There is no "broken" state: a failing reflex disarms itself. */
3705
1887
  type ReflexState = "learning" | "armed" | "disarmed";
@@ -4032,6 +2214,114 @@ interface InviteUserInput {
4032
2214
  redirectTo?: string;
4033
2215
  }
4034
2216
 
2217
+ /**
2218
+ * The `GET /schema/state` wire contract, shared by the runtime that produces it
2219
+ * and the CLI that consumes it.
2220
+ *
2221
+ * The CLI used to re-declare all of this by hand, under a comment reading
2222
+ * "Mirrored (not imported — the CLI must not depend on @stndrds/runtime) …
2223
+ * Keep these in sync". A maintenance instruction written in a comment is what a
2224
+ * contract looks like when nothing owns it: the CLI's view key once omitted
2225
+ * `type` while the server keyed views by `(object, name, type)`, so two
2226
+ * code-defined views sharing a name collided and overwrite POSTs carried the
2227
+ * wrong `viewId` (#1251).
2228
+ *
2229
+ * These are deliberately **wire** types, not the runtime's internal ones. A
2230
+ * response is JSON from a server whose version the caller does not control, so
2231
+ * `icon` is a plain string rather than the `IconName` union and `hashVersion` is
2232
+ * a number rather than the literal `1` — a stricter type here would be a
2233
+ * guarantee nothing checks. The runtime narrows on its own side, where it
2234
+ * produces the values.
2235
+ */
2236
+ /** A resolution ack attached to a view. */
2237
+ interface ViewStateResolution {
2238
+ codeHash: string;
2239
+ dbHash: string;
2240
+ resolvedBy: Uuid;
2241
+ createdAt: string;
2242
+ }
2243
+ /** Field-level runtime-vs-baseline delta for a diverged view. */
2244
+ interface ViewConfigDelta {
2245
+ tabsAdded: string[];
2246
+ tabsRemoved: string[];
2247
+ tabsChanged: Array<{
2248
+ name: string;
2249
+ changedKeys: string[];
2250
+ }>;
2251
+ topLevelChanged: string[];
2252
+ }
2253
+ /**
2254
+ * Current state of one code-defined (system) view row: its stored content plus
2255
+ * enough hash information to classify drift against the code-defined registry
2256
+ * (in sync / db-ahead / code-ahead / conflict).
2257
+ */
2258
+ interface ViewStateEntry {
2259
+ viewId: Uuid;
2260
+ object: string;
2261
+ name: string;
2262
+ type: ViewType;
2263
+ /** Content-hash of the view's CURRENT stored content. */
2264
+ dbHash: string;
2265
+ /** Content-hash the row was last known to match; `null` if never synced. */
2266
+ baselineHash: string | null;
2267
+ config: ViewConfig;
2268
+ label: string;
2269
+ description: string | null;
2270
+ icon: string | null;
2271
+ default: boolean;
2272
+ metadata: Record<string, unknown> | null;
2273
+ resolutions: ViewStateResolution[];
2274
+ /** Null when the row is in sync or has no stored baseline config. */
2275
+ delta: ViewConfigDelta | null;
2276
+ }
2277
+ interface DriftAttributeInfo {
2278
+ name: string;
2279
+ label: string;
2280
+ type: string;
2281
+ config: Record<string, unknown>;
2282
+ tolerated: boolean;
2283
+ isRelation: boolean;
2284
+ }
2285
+ interface CustomObjectInfo {
2286
+ name: string;
2287
+ label: string;
2288
+ attributes: DriftAttributeInfo[];
2289
+ }
2290
+ interface SystemObjectDriftInfo {
2291
+ objectName: string;
2292
+ objectLabel: string;
2293
+ sealed: boolean;
2294
+ customAttributes: DriftAttributeInfo[];
2295
+ }
2296
+ interface SchemaDriftResult {
2297
+ tenant: string;
2298
+ hasUnexpectedDrift: boolean;
2299
+ customObjects: CustomObjectInfo[];
2300
+ systemObjectDrift: SystemObjectDriftInfo[];
2301
+ summary: {
2302
+ totalCustomObjects: number;
2303
+ totalCustomAttributes: number;
2304
+ totalUnexpected: number;
2305
+ };
2306
+ }
2307
+ /**
2308
+ * Full schema state a CLI diff/pull needs: code-defined view rows with their
2309
+ * current vs. baseline hashes and pending overwrite resolutions, plus object
2310
+ * and attribute drift.
2311
+ */
2312
+ interface SchemaState {
2313
+ tenant: string;
2314
+ hashVersion: number;
2315
+ views: ViewStateEntry[];
2316
+ drift: SchemaDriftResult;
2317
+ }
2318
+ /**
2319
+ * The one place the view identity is spelled out. The server keys views by
2320
+ * `(object, name, type)`; a consumer that drops `type` collides two
2321
+ * code-defined views sharing a name (#1251).
2322
+ */
2323
+ declare function viewStateKey(view: Pick<ViewStateEntry, "object" | "name" | "type">): string;
2324
+
4035
2325
  /**
4036
2326
  * Contracts for the AI generation module (regex, formula, …).
4037
2327
  * Client-safe: no prompts or server logic here.
@@ -4070,144 +2360,15 @@ interface AIGenerationUsage {
4070
2360
  inputTokens: number;
4071
2361
  outputTokens: number;
4072
2362
  }
4073
- /** Result of a successful generation. */
4074
- interface AIGenerationResult {
4075
- /** The final value to apply (the regex pattern / the formula expression). */
4076
- value: string;
4077
- /** Plain-language explanation of what was generated. */
4078
- explanation?: string;
4079
- /** Token usage for the whole request (sum across repair attempts). */
4080
- usage: AIGenerationUsage;
4081
- }
4082
-
4083
- interface AddAttributeInput {
4084
- name: string;
4085
- label: string;
4086
- type: AttributeType;
4087
- required?: boolean;
4088
- unique?: boolean;
4089
- description?: string;
4090
- placeholder?: string;
4091
- icon?: IconName;
4092
- defaultValue?: unknown;
4093
- metadata?: Record<string, unknown>;
4094
- [key: string]: unknown;
4095
- }
4096
- interface CreateCustomObjectInput {
4097
- name: string;
4098
- label: string;
4099
- pluralLabel?: string;
4100
- labelExpression: string;
4101
- embeddingExpression?: string;
4102
- description?: string;
4103
- icon?: IconName;
4104
- attributes?: (Attribute | {
4105
- build: () => Attribute;
4106
- })[];
4107
- metadata?: Record<string, unknown>;
4108
- }
4109
- interface UpdateObjectInput {
4110
- label?: string;
4111
- pluralLabel?: string;
4112
- description?: string;
4113
- icon?: IconName;
4114
- labelExpression?: string;
4115
- embeddingExpression?: string;
4116
- metadata?: Record<string, unknown>;
4117
- }
4118
- interface CreateViewInput {
4119
- objectName: string;
4120
- type: ViewType;
4121
- name: string;
4122
- label: string;
4123
- description?: string;
4124
- icon?: IconName;
4125
- config: ViewConfig;
4126
- default?: boolean;
4127
- metadata?: Record<string, unknown>;
4128
- }
4129
- interface UpdateViewInput {
4130
- label?: string;
4131
- description?: string;
4132
- icon?: IconName;
4133
- config?: ViewConfig;
4134
- default?: boolean;
4135
- metadata?: Record<string, unknown>;
4136
- }
4137
- interface RelationOption {
4138
- id: string;
4139
- objectId: string;
4140
- objectName: string;
4141
- objectLabel: string;
4142
- objectIcon?: string;
4143
- label: string;
4144
- }
4145
- interface RelationOptionsResponse {
4146
- options: RelationOption[];
4147
- hasMore: boolean;
4148
- total: number;
4149
- }
4150
- interface StreamEventMessagePersisted {
4151
- type: "message_persisted";
4152
- message: AgentSessionMessage;
4153
- }
4154
- /**
4155
- * An already-persisted message had its parts updated out-of-band (e.g. a
4156
- * pending HITL tool part closed when the user replied). Clients replace the
4157
- * stored message in place without touching streaming state.
4158
- */
4159
- interface StreamEventMessageUpdated {
4160
- type: "message_updated";
4161
- message: AgentSessionMessage;
4162
- }
4163
- /** A committed, UI-safe mission lifecycle snapshot. */
4164
- interface StreamEventMissionUpdate {
4165
- type: "mission_update";
4166
- mission: AgentMissionView;
4167
- }
4168
- /** A committed, UI-safe lightweight todo plan lifecycle snapshot. */
4169
- interface StreamEventTodoPlanUpdate {
4170
- type: "todo_plan_update";
4171
- plan: AgentTodoPlanView;
4172
- }
4173
- interface StreamEventCompactionStart {
4174
- type: "compaction_start";
4175
- reason: "preflight_threshold" | "overflow_recovery";
4176
- estimatedTokens?: number;
4177
- reportedTokens?: number;
4178
- }
4179
- interface StreamEventCompactionEnd {
4180
- type: "compaction_end";
4181
- tokensBefore: number;
4182
- tokensAfter: number;
4183
- tokensSaved: number;
4184
- strategy: CompactionStrategy;
4185
- durationMs: number;
4186
- summary?: string;
4187
- }
4188
- interface StreamEventCompactionFailed {
4189
- type: "compaction_failed";
4190
- reason: string;
4191
- }
4192
- /**
4193
- * Emitted once per agent turn, just before `complete`, carrying the exact
4194
- * provider token usage enriched with context-window utilization and cost.
4195
- * All fields are computed server-side — consumers display without recalculating.
4196
- */
4197
- interface StreamEventUsage {
4198
- type: "usage";
4199
- inputTokens: number;
4200
- outputTokens: number;
4201
- totalTokens: number;
4202
- cacheReadTokens?: number;
4203
- cacheCreationTokens?: number;
4204
- /** Context window size of the model (in tokens). */
4205
- contextWindow: number;
4206
- /** totalTokens / contextWindow, clamped to [0, 1]. Computed server-side. */
4207
- utilization: number;
4208
- /** Estimated cost in USD. Undefined when pricing is unknown — never faked. */
4209
- costUsd?: number;
4210
- }
2363
+ /** Result of a successful generation. */
2364
+ interface AIGenerationResult {
2365
+ /** The final value to apply (the regex pattern / the formula expression). */
2366
+ value: string;
2367
+ /** Plain-language explanation of what was generated. */
2368
+ explanation?: string;
2369
+ /** Token usage for the whole request (sum across repair attempts). */
2370
+ usage: AIGenerationUsage;
2371
+ }
4211
2372
 
4212
2373
  /**
4213
2374
  * Utility functions for working with objects.
@@ -4244,11 +2405,85 @@ declare function isNotEmpty(obj: unknown): obj is Record<string, unknown>;
4244
2405
  */
4245
2406
  declare function toUndefinedIfEmpty<T extends Record<string, unknown>>(obj: T | undefined | null): T | undefined;
4246
2407
 
2408
+ /**
2409
+ * The one byte-size display concept.
2410
+ *
2411
+ * Decimal (1000-based), because that is what the product shows and what every
2412
+ * locale's size string is built from. Binary limits (`FILE_SIZE`, `KILOBYTES`)
2413
+ * stay 1024-based — a ceiling and a label answer different questions, and
2414
+ * conflating them is what made the previous unification bounce.
2415
+ *
2416
+ * Magnitude and label are separate on purpose: locales format the same
2417
+ * magnitude with their own unit words, while non-UI surfaces (CLI tables, agent
2418
+ * prompt XML) want the English label and would otherwise re-derive the maths.
2419
+ */
2420
+ interface ByteMagnitude {
2421
+ /** Rounded value in the chosen unit, e.g. `1.2` for 1_200_000 bytes → MB. */
2422
+ value: number;
2423
+ /** Index into a 5-entry unit table: 0=bytes, 1=K, 2=M, 3=G, 4=T. */
2424
+ unitIndex: number;
2425
+ }
2426
+ /** Locale-agnostic magnitude — every size string in the product starts here. */
2427
+ declare function computeByteMagnitude(bytes: number): ByteMagnitude;
2428
+ /** English unit labels, indexed by {@link ByteMagnitude.unitIndex}. */
2429
+ declare const BYTE_UNIT_LABELS: readonly ["B", "KB", "MB", "GB", "TB"];
2430
+ /**
2431
+ * English size string — `"1.5 MB"`. For surfaces with no locale of their own:
2432
+ * the CLI, and the file listings an agent reads. An agent and a human must not
2433
+ * see two different sizes for the same file.
2434
+ */
2435
+ declare function formatByteSize(bytes: number): string;
2436
+
2437
+ /**
2438
+ * The one definition of what `format: email | url | slug` means.
2439
+ *
2440
+ * Three representations of the same rule used to coexist: the attribute-config
2441
+ * UI stored `{ format }` with no pattern, the code builders wrote a hardcoded
2442
+ * `pattern` with no format, and the validator read only `pattern`. So a text
2443
+ * attribute configured as Email in the UI was validated by nothing at all, and
2444
+ * one declared with `.email()` came back to that UI as a custom regex.
2445
+ */
2446
+ declare const TEXT_FORMAT_PATTERNS: {
2447
+ readonly email: "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
2448
+ readonly url: "^https?:\\/\\/[\\w\\-]+(\\.[\\w\\-]+)+[/#?]?.*$";
2449
+ readonly slug: "^[a-z0-9]+(?:-[a-z0-9]+)*$";
2450
+ };
2451
+ /**
2452
+ * The pattern a text attribute is actually validated against.
2453
+ *
2454
+ * An explicit `pattern` wins: it is the escape hatch for rules no preset covers,
2455
+ * and a caller who wrote one means it. Otherwise the declared `format` supplies
2456
+ * one. An attribute with neither stays unconstrained.
2457
+ */
2458
+ declare function resolveTextPattern(attr: Pick<TextAttribute, "format" | "pattern">): string | undefined;
2459
+
4247
2460
  declare const DOCUMENT_SYSTEM_ATTRIBUTES: {
4248
2461
  readonly ATTACHMENTS: "attachments";
4249
2462
  };
4250
2463
  declare function isDocumentAttribute(attr: Attribute): attr is DocumentAttribute;
4251
- declare function matchesMime(mime: string, accepted: string[] | undefined): boolean;
2464
+ /** The parts of a file an `accepts` pattern can be matched against. */
2465
+ interface AcceptsCandidate {
2466
+ /** File name, used only by `.ext` patterns. */
2467
+ name: string;
2468
+ mimeType: string;
2469
+ }
2470
+ /**
2471
+ * The single definition of "does this file satisfy `accepts`", shared by the
2472
+ * runtime document validator and every UI file picker.
2473
+ *
2474
+ * A pattern is one of the three forms the HTML `accept` attribute allows:
2475
+ * a MIME glob (`image/*`), an exact MIME type, or an extension (`.pdf`).
2476
+ * Extensions are supported because `FileInput` forwards the same string to a
2477
+ * native `<input accept>` — rejecting here what the browser's own dialog
2478
+ * offered would be stricter than the picker the user just used. They follow
2479
+ * the HTML rule exactly: a case-insensitive **suffix** match on the file name,
2480
+ * so `.gz` and `.tar.gz` both match `archive.tar.gz` and `.env` matches itself.
2481
+ *
2482
+ * An absent or empty `accepts` is unconstrained: a document attribute that
2483
+ * declares no restriction accepts anything, and the client must not be
2484
+ * stricter than the server that stores the file.
2485
+ */
2486
+ declare function matchesAccepts(file: AcceptsCandidate, accepts: string[] | null | undefined): boolean;
4252
2487
 
4253
2488
  /**
4254
2489
  * The set of attribute types allowed as relation/document properties.
@@ -4330,6 +2565,17 @@ declare function formatLocationValue(location: Location | null | undefined, gran
4330
2565
  */
4331
2566
  declare function formatAttributeValue(value: unknown, attribute: Attribute): string;
4332
2567
 
2568
+ /**
2569
+ * Validate a labelExpression and return detailed result
2570
+ *
2571
+ * @param expression - The labelExpression to validate
2572
+ * @returns Validation result with success status and extracted info
2573
+ */
2574
+ declare function validateLabelExpression(expression: string): {
2575
+ success: boolean;
2576
+ error?: string;
2577
+ attributes?: string[];
2578
+ };
4333
2579
  /**
4334
2580
  * Apply a sequence of pipes to a string value.
4335
2581
  * Reusable utility for any template-like system that needs pipe processing.
@@ -4478,6 +2724,17 @@ declare function normalizeDateValue(value: unknown, attr: Pick<DateAttribute, "e
4478
2724
  */
4479
2725
  declare function dateValueStart(value: unknown): string | null;
4480
2726
 
2727
+ /** Server-owned metadata key carrying the human/root creator principal. */
2728
+ declare const RECORD_CREATOR_ROOT_ACTOR_METADATA_KEY = "__creatorRootActorId";
2729
+ /**
2730
+ * Resolve who may manage creator-scoped record actions.
2731
+ *
2732
+ * New delegated records persist their root principal in metadata while
2733
+ * retaining the actual agent in `createdBy`. Legacy records fall back to the
2734
+ * direct creator actor.
2735
+ */
2736
+ declare function getRecordCreatorPrincipalId(record: Pick<ObjectRecord, "createdBy" | "metadata">): string | undefined;
2737
+
4481
2738
  /**
4482
2739
  * Attribute fields stored in dedicated database columns (not in config JSONB).
4483
2740
  * Used to determine which properties are extracted into the config column during sync.
@@ -4605,6 +2862,19 @@ declare class AgentBuilder {
4605
2862
  private readonly bp;
4606
2863
  constructor(config: AgentBuilderConfig);
4607
2864
  description(value: string): this;
2865
+ /**
2866
+ * Display text shown wherever this agent's identity is rendered in the
2867
+ * UI — a separate concern from `name` (the stable identity the boot sync
2868
+ * matches rows on). Falls back to `name` when never called.
2869
+ *
2870
+ * @example
2871
+ * ```typescript
2872
+ * agent({ name: "architecte" })
2873
+ * .label("Architecte")
2874
+ * // ...
2875
+ * ```
2876
+ */
2877
+ label(value: string): this;
4608
2878
  icon(value: string): this;
4609
2879
  systemPrompt(value: string): this;
4610
2880
  model(provider: ProviderName, model: string, options?: Pick<ModelDefinition, "maxTokens" | "contextWindow">): this;
@@ -4628,6 +2898,23 @@ declare class AgentBuilder {
4628
2898
  maxDepth?: number;
4629
2899
  maxTreeCostUsd?: number;
4630
2900
  }): this;
2901
+ approval(value: Partial<AgentApprovalPolicy>): this;
2902
+ /** Runtime-agent visibility. Code-declared system agents must stay workspace-visible. */
2903
+ visibility(value: ResourceVisibility): this;
2904
+ /**
2905
+ * Gate this agent behind a system permission: an actor lacking `action` on
2906
+ * `resource` never sees it in the agent list and cannot open a session
2907
+ * against it. Reuses the same permission vocabulary that guards the
2908
+ * matching HTTP surface — do not invent a new resource/action pair.
2909
+ *
2910
+ * @example
2911
+ * ```typescript
2912
+ * agent({ name: "architecte" })
2913
+ * .requiresPermission("architect", "update")
2914
+ * // ...
2915
+ * ```
2916
+ */
2917
+ requiresPermission(resource: SystemResource, action: Action): this;
4631
2918
  /**
4632
2919
  * Declare a trigger. `name` is the stable identity the boot sync uses to
4633
2920
  * reconcile trigger rows; `enabled` defaults to true.
@@ -5467,6 +3754,15 @@ declare class DocumentAttributeBuilder<TName extends string, TRequired extends b
5467
3754
  */
5468
3755
  declare function document<TName extends string>(config: TypedBuilderConfig<TName>): DocumentAttributeBuilder<TName, false>;
5469
3756
 
3757
+ /**
3758
+ * Validate object name format: kebab-case (slug format), max 63 characters.
3759
+ * Single source of truth for `ObjectBuilder`'s private `validateName` (write
3760
+ * time, via `object(...).build()`) and `SchemaPlanValidator` (propose time,
3761
+ * for both new-object names and — via `parseAttributeConfig`-style reuse —
3762
+ * anywhere else an object name needs the same shape check). Kept next to
3763
+ * `validateAttributeName` rather than duplicating the regex a second time.
3764
+ */
3765
+ declare function validateObjectName(name: string): void;
5470
3766
  /**
5471
3767
  * Validate attribute name as valid variable identifier
5472
3768
  */
@@ -5740,11 +4036,11 @@ declare class ObjectBuilder<TRecord extends Record<string, unknown> = {}> implem
5740
4036
  /** Full record type with custom attributes and metadata (same as ExtractRecord) */
5741
4037
  record: WithCustomAttributes<TRecord> & RecordMetadata;
5742
4038
  /** Input type for creating records, omits system fields (same as ExtractRecordInput) */
5743
- create: Omit<WithCustomAttributes<TRecord>, SystemFields>;
4039
+ create: WithoutSystemFields<WithCustomAttributes<TRecord>>;
5744
4040
  /** Partial type for updating records, omits system fields (same as ExtractRecordUpdate) */
5745
- update: Omit<WithCustomAttributes<{
4041
+ update: WithoutSystemFields<WithCustomAttributes<{
5746
4042
  [K in keyof TRecord]?: TRecord[K];
5747
- }>, SystemFields>;
4043
+ }>>;
5748
4044
  };
5749
4045
  /**
5750
4046
  * Standard Schema v1 interface implementation.
@@ -6020,14 +4316,6 @@ declare class RelationGroupBuilder {
6020
4316
  * Allow creating new related records inline
6021
4317
  */
6022
4318
  allowCreate(value?: boolean): this;
6023
- /**
6024
- * Enable two-level traversal (through mode).
6025
- * Parent rows become grouping headers; sub-rows from `attribute` are the primary display.
6026
- *
6027
- * @param attribute - Relation attribute on the first-level target object
6028
- * @example .through("companies") — display companies linked via each member
6029
- */
6030
- through(attribute: string): this;
6031
4319
  /**
6032
4320
  * Build the relation group definition
6033
4321
  */
@@ -6059,13 +4347,6 @@ interface BaseTabConfig {
6059
4347
  * .tableFrom("contacts", "company")
6060
4348
  * .columns("firstName", "lastName", "email")
6061
4349
  * .crud()
6062
- *
6063
- * // 2-level traversal
6064
- * .tab("members-companies", "Entreprises des membres")
6065
- * .table("members")
6066
- * .through("companies")
6067
- * .columns("legalName", "legalForm", "companies__role")
6068
- * .showSourceTarget()
6069
4350
  * ```
6070
4351
  */
6071
4352
  declare class TableTabConfig {
@@ -6122,18 +4403,6 @@ declare class TableTabConfig {
6122
4403
  * @example .sort("lastName") or .sort("createdAt", "desc")
6123
4404
  */
6124
4405
  sort(attribute: string, direction?: "asc" | "desc"): this;
6125
- /**
6126
- * Traverse a 2nd-level relation to display nested data.
6127
- * When active, `tab.columns` stores the 2nd-level object's attribute names.
6128
- *
6129
- * @param attribute - Relation attribute on the first-level target object
6130
- * @example .table("members").through("companies").columns(["name", "sector"])
6131
- */
6132
- through(attribute: string): this;
6133
- /**
6134
- * Show _source and _target columns in flattened (through) view
6135
- */
6136
- showSourceTarget(value?: boolean): this;
6137
4406
  /**
6138
4407
  * Continue building with a new tab
6139
4408
  */
@@ -6509,6 +4778,7 @@ interface ListViewTabData {
6509
4778
  label: string;
6510
4779
  icon?: IconName;
6511
4780
  default?: boolean;
4781
+ visibility: ListViewTabVisibility;
6512
4782
  layout: "table" | "kanban";
6513
4783
  columns: string[];
6514
4784
  columnSizing?: Record<string, number>;
@@ -6655,6 +4925,11 @@ declare class ListViewTabConfigBuilder {
6655
4925
  * Mark this tab as the default tab
6656
4926
  */
6657
4927
  default(): this;
4928
+ /**
4929
+ * Set the record scope this tab reads. Defaults to `"all"` (no scope: every
4930
+ * workspace record plus the viewer's own private ones).
4931
+ */
4932
+ visibility(value: ListViewTabVisibility): this;
6658
4933
  /**
6659
4934
  * Set the layout to table (default)
6660
4935
  */
@@ -7841,6 +6116,40 @@ type RecordDeletedLiveEvent = {
7841
6116
  recordVersion: number;
7842
6117
  deletedAt: string;
7843
6118
  };
6119
+ /**
6120
+ * Minimal removal event used when a record leaves a projection without being
6121
+ * deleted (for example workspace -> private). The allowlisted shape is safe to
6122
+ * publish to the old audience: it contains routing identity and ordering only.
6123
+ */
6124
+ type RecordRemovedLiveEvent = {
6125
+ type: "record.removed";
6126
+ objectId: string;
6127
+ recordId: string;
6128
+ recordVersion: number;
6129
+ };
6130
+ /** JSON-stable current record snapshot used to add/upsert a projection. */
6131
+ type RecordLiveSnapshot = {
6132
+ id: string;
6133
+ objectId: string;
6134
+ visibility: "workspace" | "private";
6135
+ ownedBy: string | null;
6136
+ label: string;
6137
+ values: Record<string, unknown>;
6138
+ metadata?: Record<string, unknown>;
6139
+ createdAt: string;
6140
+ updatedAt: string;
6141
+ createdBy?: string;
6142
+ lastUpdatedBy?: string;
6143
+ schemaVersion: number;
6144
+ };
6145
+ /** Creation-shaped event used when a record enters a projection. */
6146
+ type RecordCreatedLiveEvent = {
6147
+ type: "record.created";
6148
+ objectId: string;
6149
+ recordId: string;
6150
+ recordVersion: number;
6151
+ record: RecordLiveSnapshot;
6152
+ };
7844
6153
  type ViewProjectionStaleLiveEvent = {
7845
6154
  type: "view.projection.stale";
7846
6155
  viewId: string;
@@ -7967,7 +6276,7 @@ type ChannelRevokedLiveEvent = {
7967
6276
  channel: string;
7968
6277
  reason: "permission-revoked" | "workspace-left" | "object-deleted";
7969
6278
  };
7970
- type LiveEventPayload = RecordPatchLiveEvent | RecordDeletedLiveEvent | ViewProjectionStaleLiveEvent | AgentSessionPatchLiveEvent | AgentUnreadPatchLiveEvent | NotificationCreatedLiveEvent | NotificationRecipientPatchLiveEvent | NotificationCountPatchLiveEvent | ConversationRenamedLiveEvent | BrowserPreviewUpdatedLiveEvent | ChannelRevokedLiveEvent;
6279
+ type LiveEventPayload = RecordPatchLiveEvent | RecordDeletedLiveEvent | RecordRemovedLiveEvent | RecordCreatedLiveEvent | ViewProjectionStaleLiveEvent | AgentSessionPatchLiveEvent | AgentUnreadPatchLiveEvent | NotificationCreatedLiveEvent | NotificationRecipientPatchLiveEvent | NotificationCountPatchLiveEvent | ConversationRenamedLiveEvent | BrowserPreviewUpdatedLiveEvent | ChannelRevokedLiveEvent;
7971
6280
  type LiveEventType = LiveEventPayload["type"];
7972
6281
  declare const LIVE_EVENT_TYPES: readonly LiveEventType[];
7973
6282
  declare function isLiveEventType(value: unknown): value is LiveEventType;
@@ -8023,8 +6332,17 @@ interface OperatorSpec {
8023
6332
  /** In-memory evaluation. `value` is the record's value for `attr`. */
8024
6333
  evaluateInMemory: (value: unknown, ruleValue: FilterValue, attr: Attribute) => boolean;
8025
6334
  }
6335
+ /**
6336
+ * Decide whether an `is` rule is checkbox equality. When the attribute type
6337
+ * is known it alone decides; the boolean-value fallback applies only when the
6338
+ * type is unknown. Shared by adapter-supabase and adapter-meilisearch so both
6339
+ * query builders classify `is` rules identically.
6340
+ */
6341
+ declare function isCheckboxEquality(attributeType: string | undefined, value: unknown): boolean;
8026
6342
  declare const OPERATOR_SPECS: Record<FilterOperator, OperatorSpec>;
8027
6343
 
6344
+ /** Evaluate filters against custom values and the record's canonical system fields. */
6345
+ declare function evaluateRecordFilterState(state: FilterState, record: ObjectRecord, attributes: Attribute[]): boolean;
8028
6346
  /**
8029
6347
  * Evaluate a `FilterState` against a flat record of values, in memory.
8030
6348
  * Returns false on unknown attribute or operator/type mismatch (safe-fail).
@@ -8042,9 +6360,21 @@ declare function normalizeForEdgeRpc(op: FilterOperator): FilterOperator;
8042
6360
  */
8043
6361
  declare function toMultiValueOperator(op: FilterOperator): FilterOperator;
8044
6362
 
6363
+ declare const SYSTEM_FILTER_ATTRIBUTE_TYPES: Readonly<Record<string, Attribute["type"]>>;
6364
+ /**
6365
+ * Legacy domain operator names removed by the 2026-08 unification. They get
6366
+ * NO input alias — validation rejects them with a message naming the
6367
+ * canonical replacement so callers migrate instead of silently drifting.
6368
+ */
6369
+ declare const REMOVED_OPERATOR_REPLACEMENTS: Record<string, string>;
8045
6370
  interface QualifiedRuleValidationContext {
8046
6371
  attributes: Attribute[];
8047
6372
  }
6373
+ /**
6374
+ * Collect canonical query-validation issues without mutating the caller's
6375
+ * rule or throwing for ordinary validation failures.
6376
+ */
6377
+ declare function collectQualifiedRuleIssues(rule: FilterRule, context: QualifiedRuleValidationContext): ValidationError["errors"];
8048
6378
  declare function validateQualifiedRule(rule: FilterRule, context: QualifiedRuleValidationContext): void;
8049
6379
 
8050
6380
  /** True when a filter value is a query-time dynamic token. */
@@ -8092,9 +6422,57 @@ declare function extractCurrencyFilterValue(value: unknown): number | null;
8092
6422
  * collapse to their comparable scalar; scalars pass through. */
8093
6423
  declare function extractFilterValue(value: unknown): string | number | boolean | null;
8094
6424
 
6425
+ /**
6426
+ * The ONLY accepted non-canonical input: short standard codes and camelCase
6427
+ * forms, kept as a deliberate token-saving input dialect. They normalize to
6428
+ * canonical names before validation/storage — they are never stored and never
6429
+ * part of `FilterOperator`. Removed legacy domain names (`before`, `after`,
6430
+ * `on_or_before`, `on_or_after`, `is_checked`, `is_not_checked`,
6431
+ * `day_month_eq`) deliberately have NO alias: validation rejects them with a
6432
+ * message naming the canonical replacement.
6433
+ */
8095
6434
  declare const SYNONYM_ALIASES: Record<string, string>;
8096
- declare const CROSS_TYPE_CONVERSIONS: Record<string, Record<string, string>>;
8097
- declare function normalizeOperator(rawOp: string, effectiveType: string): string;
6435
+ declare function normalizeOperator(rawOp: string): string;
6436
+ /**
6437
+ * Normalize a filter rule's operator (input aliases only — see
6438
+ * SYNONYM_ALIASES). Returns the same rule when the operator is already
6439
+ * canonical, otherwise a copy carrying the canonical operator. Anything the
6440
+ * aliases don't cover (including removed legacy names) passes through
6441
+ * untouched for validation to reject.
6442
+ */
6443
+ declare function normalizeFilterRule<T extends {
6444
+ operator: string;
6445
+ }>(rule: T): T;
6446
+
6447
+ /**
6448
+ * Half-open UTC millisecond range `[startMs, endMs)` covered by an `is_within`
6449
+ * rule. `endMs` is the start of the day *after* the last included day, so every
6450
+ * backend can compare with `>= start AND < end` and select the same rows.
6451
+ */
6452
+ interface IsWithinBounds {
6453
+ startMs: number;
6454
+ endMs: number;
6455
+ }
6456
+ /**
6457
+ * Narrow an unknown filter value to a fully-formed {@link RelativeDateValue}.
6458
+ * A partial shape (missing `unit`, empty object, …) would fall through to a
6459
+ * no-op predicate downstream and silently return the entire dataset (#723).
6460
+ */
6461
+ declare function isRelativeDateValue(value: unknown): value is RelativeDateValue;
6462
+ /**
6463
+ * The single definition of the `is_within` relative-date window, shared by the
6464
+ * in-memory evaluator, the Postgres converter and the Meilisearch builder.
6465
+ *
6466
+ * Bounds are aligned to whole UTC days: `past` spans `[start of today - amount,
6467
+ * start of tomorrow)` and `future` spans `[start of today, start of the day
6468
+ * after today + amount)`. Both directions therefore include all of today.
6469
+ *
6470
+ * Returns `null` when the value is malformed or the offset overflows the Date
6471
+ * range, so callers never emit a predicate built from `NaN` bounds.
6472
+ */
6473
+ declare function resolveIsWithinBounds(value: unknown, now?: Date): IsWithinBounds | null;
6474
+ /** Format a UTC millisecond bound as the `YYYY-MM-DD` day string Postgres compares against. */
6475
+ declare function toUtcDayString(ms: number): string;
8098
6476
 
8099
6477
  /** Built-in external connector providers (v1). */
8100
6478
  type ConnectorProviderId = "gmail" | "outlook";
@@ -8265,4 +6643,893 @@ interface ViewSyncPayload {
8265
6643
  */
8266
6644
  declare function viewSyncPayload(view: ViewDefinition): ViewSyncPayload;
8267
6645
 
8268
- export { type AIAvailableModel, type AIBatchQuestion, type AIBatchQuestionAnswer, type AIBatchQuestionOption, type AIChatMessage, type AIChatMessagePart, type AIChatMessagePartType, type AIChatNotification, type AICompactionSummary, type AIGenerationInputMap, type AIGenerationResult, type AIGenerationType, type AIGenerationUsage, type AIMemoryEntry, type AIMemoryType, type AIMessageRole, type AIProviderMetrics, type AIQuestion, type AIQuestionAnswer, type AIQuestionOption, type AIQuestionType, type AISubagentStatus, type AITodoItem, type AITodoList, type AITodoStatus, type AIToolCall, type AIToolCallStatus, type AIUsageMetrics, ALLOWED_PROPERTY_TYPES, ALL_ACTIONS, ALL_SYSTEM_RESOURCES, ATTRIBUTE_FILTER_OPERATORS, AUDIT_ACTIONS, AUDIT_RESOURCE_TYPES, type AccessLevel, type Action, type ActivityTab, ActivityTabConfig, type Actor, type ActorRoleAssignment, type ActorStatus, type ActorType, type AddAttributeInput, type AddSharedMailboxInput, type AdvancedFilterState, type AgentBlueprint, AgentBuilder, type AgentBuilderConfig, type AgentConfig, type AgentDashboard, type AgentDefinition, type AgentEvent, type AgentExecutionConfig, type AgentMessageAttachment, type AgentMessagePart, type AgentMission, type AgentMissionArtifact, type AgentMissionPage, type AgentMissionPolicy, type AgentMissionRubric, type AgentMissionRubricCriterion, type AgentMissionStatus, type AgentMissionVerification, type AgentMissionView, type AgentRun, type AgentRunStatus, type AgentSchedule, type AgentSession, type AgentSessionMessage, type AgentSessionMode, type AgentSessionPatchLiveEvent, type AgentSessionStatus, type AgentTodoPlan, type AgentTodoPlanStatus, type AgentTodoPlanView, type AgentToolCall, type AgentTriggerBlueprint, type AgentTriggerDefinition, type AgentTriggerType, type AgentUnreadPatchLiveEvent, type ApiKey, type ApiKeyAuthContext, type ApiKeyPermission, type ApiKeyWithSecret, type AssignActorRoleInput, type AssignRoleInput, Attribute, type AttributeAgentCapabilities, type AttributeAuthoringCapabilities, type AttributeCapabilities, type AttributeCardinality, type AttributeDefaultValueCapability, type AttributeExchangeCapabilities, type AttributeGroupField, type AttributeLifecycleCapabilities, type AttributePolymorphicCapability, type AttributePresentationCapabilities, type AttributeQueryCapabilities, type AttributeRequiredCapability, type AttributeStorageCapabilities, type AttributeStorageMode, AttributeType, type AuditAction, type AuditActorType, type AuditChange, type AuditListOptions, type AuditLogEntry, type AuditResourceType, type AuditServiceOptions, type AuditSortField, BEHAVIOR_PROPERTIES, BROWSER_PREVIEW_STATUSES, BilateralConfig, type BoundingBox, type BrowserPreviewDescriptor, type BrowserPreviewStatus, type BrowserPreviewUpdatedLiveEvent, type BuilderConfig, COMPUTED_FUNCTIONS, COMPUTED_FUNCTION_METADATA, COMPUTED_FUNCTION_NAMES, CONNECTOR_CALLBACK_PARAM, CROSS_TYPE_CONVERSIONS, type ChannelRevokedLiveEvent, CheckboxAttribute, type CollectionPage, type CollectionRequest, type CollectionResponse, type CompactionStrategy, type CompileComputedFormulaInput, type ComputedCompileAttribute, type ComputedCompileObject, type ComputedCompileSchema, ComputedDependency, type ComputedDependencyGraphNode, ComputedFormulaAstNode, ComputedFormulaCompileError, type ComputedFormulaResult, type ComputedFunctionCategory, type ComputedFunctionMetadata, type ComputedFunctionName, type ComputedFunctionSignature, ComputedOptionsSource, ComputedPlan, ComputedReturnType, ComputedValueType, type ConfigOverrides, type ConnectionStatus, type ConnectionStatusId, type ConnectionView, type ConnectorCallbackStatusValue, type ConnectorProviderId, type ConnectorScope, type ConversationRenamedLiveEvent, type CountMode, type CreateActorInput, type CreateApiKeyInput, type CreateAuditLogInput, type CreateCustomObjectInput, type CreateDBAttribute, type CreateDBForm, type CreateDBFormSubmission, type CreateDBObject, type CreateDBView, type CreateDBViewOverlay, type CreateDocument, type CreateDocumentLink, type CreateFile, type CreateMode, type CreateNotificationInput, type CreateNotificationRecipientInput, type CreateObjectRecord, type CreatePermissionInput, type CreateReflexInput, type CreateReflexVersionInput, type CreateRoleInput, type CreateUserProfile, type CreateViewInput, type CriticConfig, Currency, CurrencyAttribute, type CurrencyFilterValue, type CustomAttributeValue, type CustomTab, CustomTabConfig, type DBAttribute, type DBForm, type DBFormSubmission, type DBObject, type DBView, type DBViewOverlay, type DBViewSyncResolution, DB_COLUMN_FIELDS, DEFAULT_AGENT_EXECUTION_CONFIG, DEFAULT_ROLES, DEFAULT_ROLE_DESCRIPTIONS, DEFAULT_ROLE_LABELS, DEFAULT_ROLE_PERMISSIONS, DOCUMENT_SYSTEM_ATTRIBUTES, DateAttribute, DateRangeValue, type DefaultRoleName, type DeletedMode, DetailViewBuilder, type DetailViewConfig, type DetailViewDefinition, type Document, DocumentAttribute, type DocumentFile, type DocumentKind, DocumentLayout, type DocumentListOptions, type DocumentWithFiles, type DocumentWithSubCount, type DocumentsTab, DocumentsTabConfig, type DomainEvent, type DynamicValue, type DynamicValueResolver, EMPTY_VALUE_PLACEHOLDER, type Eager, type EdgeQuantifier, type EffectivePermissions, type EmailAttachmentMeta, type EmailDirection, type EmailParticipantRef, type EmailParticipantRole, type EmailProvider, type EmailVisibility, type EmailsTab, EmailsTabConfig, type EnvVarEntry, type EnvVarScope, type EventDataMap, type EventType, type ExtendedFilterRule, type ExtractRecord, type ExtractRecordInput, type ExtractRecordInputStrict, type ExtractRecordStrict, type ExtractRecordUpdate, type ExtractRecordUpdateStrict, FORM_FORBIDDEN_ATTRIBUTE_TYPES, type FeatureFlagDefinition, type FeatureFlagsConfig, type FeatureFlagsRepository, type FeatureGate, type Field, type FieldGroup, type FieldHistoryEntry, type File, type FileListOptions, type FileOcrStatus, type FilterCombinator, type FilterGroup, type FilterOperator, type FilterRule, type FilterState, type FilterValue, type FlagLevel, type FlagOverride, FlagRegistry, FlagService, type FlagValueType, FormBuilder, type FormDefinition, type FormDensity, type FormFieldRef, type FormFieldsRow, type FormFreeFieldRef, type FormHeadingRow, FormRegistry, type FormRow, FormRowBuilder, type FormSeparatorRow, type FormSlot, type FormSlotFieldRef, type FormStatus, type FormStep, FormStepBuilder, type FormSubmission, type FormSubmissionStatus, type FormSubmittedAgentEvent, type FormTab, type FormTextRow, type FormsTab, FormulaAttribute, type FormulaGenerationAttribute, type FormulaGenerationInput, FormulaReturnType, type GeocodingAdapter, type GeocodingAutocompleteParams, type GeocodingParams, type GeocodingSuggestion, type GlobalSearchGroupedOptions, type GlobalSearchGroupedResult, type GlobalSearchOptions, type GlobalSearchResultItem, type Group, GroupBuilder, IDENTITY_PROPERTIES, type InferAttributeValue, type InferQualifiedProps, type InverseSource, type InviteUserInput, LIVE_EVENT_TYPES, LIVE_STREAM_START_CURSOR, type ListOptions, ListViewBuilder, type ListViewConfig, type ListViewDefinition, type ListViewLayout, type ListViewTab, ListViewTabConfigBuilder, type LiveChannel, type LiveChannelKind, type LiveErrorPayload, type LiveEventEnvelope, type LiveEventPayload, type LiveEventType, type LiveGapPayload, type LiveNotification, type LiveNotificationRecipient, type LiveNotificationRecipientPatch, type LiveReplayCompletePayload, type LiveSubscribePayload, type LiveUnsubscribePayload, Location, LocationAttribute, LocationGranularity, MEMORY_LIST_VIEW, MEMORY_OBJECT, MEMORY_VIEW, type MailboxAccount, type MailboxCursor, type MailboxEmail, type MailboxListResponse, type MailboxQuery, type MailboxReadState, type MailboxThread, type MailboxThreadDetail, type MentionEntityType, type MentionReference, type MentionedContext, type MentionedEntityContext, MigrationDefinition, type ModelDefinition, MultiRelationAttribute, MultiselectAttribute, NOTIFICATION_INBOX_STATES, NOTIFICATION_KINDS, NOTIFICATION_PRIORITIES, NOTIFICATION_SENSITIVITIES, NOTIFICATION_TYPES_V1, NOTIFICATION_TYPE_AGENT_QUESTION_REQUESTED, NOTIFICATION_TYPE_AGENT_SESSION_COMPLETED, NOTIFICATION_TYPE_AGENT_SESSION_FAILED, NOTIFICATION_TYPE_AGENT_SESSION_TIMEOUT, NOTIFICATION_TYPE_AGENT_SESSION_WAITING_HUMAN, NOTIFICATION_TYPE_AGENT_TASK_ASSIGNED, NOTIFICATION_WORK_STATES, NO_VALUE_OPERATORS, type NoValueOperator, NoopGeocodingAdapter, type Notification, type NotificationCountPatchLiveEvent, type NotificationCounts, type NotificationCreatedLiveEvent, type NotificationInboxState, type NotificationKind, type NotificationListParams, type NotificationListResult, type NotificationPriority, type NotificationRecipient, type NotificationRecipientPatchLiveEvent, type NotificationSensitivity, type NotificationSubject, type NotificationType, type NotificationV1Type, type NotificationWithRecipient, type NotificationWorkState, NumberAttribute, OPERATORS_BY_TYPE, OPERATOR_SPECS, ObjectBuilder, type ObjectConfig, ObjectDefinition, type ObjectPermissions, type OcrAdapter, type OcrInput, type OcrOptions, type OcrPage, type OcrResult, type OcrTextBlock, type OperatorSpec, Option, PRESENTATION_PROPERTIES, type PageInfo, type PageOptions, type PageResponse, type ParsedAttribute, type Permission, type PermissionScope, Phone, PhoneAttribute, type PhoneFilterValue, PropertySchema, type ProviderName, QUALIFIED_SEPARATOR, type QualifiedDocumentAttributeBuilder, type QualifiedDocumentBrand, type QueryState, type ReasoningPartData, type RecordAgentEvent, type RecordDeletedLiveEvent, type RecordDocuments, type RecordFieldPatch, type RecordMetadata, type RecordPatchLiveEvent, type Reflex, type ReflexRun, type ReflexState, type ReflexVersion, type ReflexVersionStatus, type RegexGenerationInput, RelationAttribute, type RelationGroup, RelationGroupBuilder, type RelationOption, type RelationOptionsResponse, type RelationSource, RelationTarget, type RelativeDateValue, type ResolutionContext, type ResolvedFlag, type RetryPolicy, type ReverseGeocodingParams, RichtextAttribute, type RichtextTab, RichtextTabConfig, type Role, RollupAttribute, RollupFunction, type RunEffect, type RunMode, SKILL_LIST_VIEW, SKILL_OBJECT, SKILL_VIEW, STANDARD_SCHEMA_VENDOR, SYNONYM_ALIASES, SYSTEM_ATTRIBUTES, SYSTEM_ATTRIBUTE_I18N_KEYS, SYSTEM_RESOURCES, SYSTEM_RESOURCE_LABELS, type SearchOptions, SelectAttribute, type SidePanelConfig, type SidebarExtraItem, SingleRelationAttribute, type SlotMode, type SortDirection, type SortRule, type StandardSchemaIssue, type StandardSchemaResult, type StartConnectorAuthInput, type StartConnectorAuthResult, type StaticFlagDefault, StatusAttribute, type StorageProvider, type StreamEventCompactionEnd, type StreamEventCompactionFailed, type StreamEventCompactionStart, type StreamEventMessagePersisted, type StreamEventMessageUpdated, type StreamEventMissionUpdate, type StreamEventTodoPlanUpdate, type StreamEventUsage, type SystemAttribute, type SystemAttributeI18nKey, type SystemFields, type SystemPermissions, type SystemResource, type Tab, TabBuilder, type TabType, type TableSource, type TableTab, TableTabConfig, TenantId, type TenantSettings, TextAttribute, type TextPartData, type ThinkingPartData, TimeFormat, Timestamps, type ToolPartData, type ToolPartErrorCode, type ToolPartState, type TriggerEventType, USER_STATUSES, type UpdateActorInput, type UpdateDBAttribute, type UpdateDBForm, type UpdateDBFormSubmission, type UpdateDBObject, type UpdateDBView, type UpdateDBViewOverlay, type UpdateDocument, type UpdateFile, type UpdateObjectInput, type UpdateRoleInput, type UpdateUserProfile, type UpdateViewInput, type UpsertDBAttribute, type UpsertDBObject, type UpsertDBView, UserAttribute, type UserLike, type UserProfile, UserReferenceType, type UserRoleAssignment, type UserStatus, Uuid, type ValueRef, type ViewConfig, type ViewDefinition, type ViewOverlay, type ViewProjectionStaleLiveEvent, type ViewSyncPayload, type ViewType, type WithCustomAttributes$1 as WithCustomAttributes, accessLevelToActions, actionsToAccessLevel, agent, applyPipes, applyRelationProps, assertAcyclicComputedDependencies, assertLiveStreamCursor, booleanFlag, buildPropertySchema, buildQualifiedAttribute, canonicalStringify, checkbox, compareLiveStreamCursors, compileComputedFormula, compileRollupAttribute, createFlagRegistry, createFlagService, createStandardSchemaProps, currency, currentActor, date, dateValueStart, detailView, document, evaluateComputedAst, evaluateComputedFormula, evaluateComputedFormulaWithResult, evaluateFilterState, extractAttributeNames, extractCurrencyFilterValue, extractFilterValue, extractValueRefs, flagRegistry, form, formRegistry, formatAttributeValue, formatComputedResult, formatLocationValue, formula, generateDefaultDetailView, generateDefaultListView, getActiveTab, getAttributeCapabilities, getAttributeFilterOperators, getErrorMessage, getLiveProtocolPayloadChannel, getOperatorPolarity, getRollupFilterOperators, getSlotFieldTargets, getSystemAttributeI18nKey, getSystemAttributeList, getUserDisplayName, group, inferRollupReturnType, isAttributeFilterable, isAttributeGroupable, isAttributeKanbanGroupable, isAttributeSearchable, isComputedFunctionName, isDateRangeValue, isDefaultRole, isDetailView, isDocumentAttribute, isDynamicValue, isEmptyObject, isFieldGroup, isFormDefinition, isFormFieldsRow, isFormFreeFieldRef, isFormHeadingRow, isFormSeparatorRow, isFormSlotFieldRef, isFormTextRow, isLabelExpression, isListView, isLiveErrorPayload, isLiveEventEnvelope, isLiveEventPayload, isLiveEventPayloadForType, isLiveEventType, isLiveGapPayload, isLiveReplayCompletePayload, isLiveStreamCursor, isManagedSystemAttribute, isNoValueOperator, isNotEmpty, isPlainRecord, isRelationGroup, isStandardSchema, jsonFlag, listView, liveChannelKey, location, matchesMime, multiselect, normalizeDateValue, normalizeForEdgeRpc, normalizeOperator, now, number, numberFlag, object, parseLiveChannelKey, parseLiveSubscribePayload, parseLiveUnsubscribePayload, parseQualifiedAttribute, phone, registry, relation, relationGroup, renderLabelExpression, resetViewToDefault, richtext, rollup, rollupToFormulaExpression, select, status, stringFlag, text, toMultiValueOperator, toUndefinedIfEmpty, today, user, validateAttributeName, validateQualifiedRule, viewRegistry, viewSyncPayload };
6646
+ /** An attribute to add to an object that already exists, or is created in the same plan. */
6647
+ interface PlannedAttribute {
6648
+ objectName: string;
6649
+ name: string;
6650
+ label: string;
6651
+ type: Attribute["type"];
6652
+ config?: Record<string, unknown>;
6653
+ required?: boolean;
6654
+ description?: string;
6655
+ }
6656
+ /**
6657
+ * An object to create, with its attributes inline. Inline attributes are the
6658
+ * same lighter descriptor as `PlannedAttribute` (minus `objectName`, which
6659
+ * the parent object supplies) — not the full `Attribute` discriminated
6660
+ * union. The full union carries type-specific required fields an agent
6661
+ * proposal has no reason to fill in.
6662
+ */
6663
+ interface PlannedObject {
6664
+ name: string;
6665
+ label: string;
6666
+ pluralLabel?: string;
6667
+ description?: string;
6668
+ icon: IconName;
6669
+ labelExpression: string;
6670
+ attributes: Omit<PlannedAttribute, "objectName">[];
6671
+ }
6672
+ /**
6673
+ * A complete agent-authored target for one deterministic default view.
6674
+ *
6675
+ * `canonicalConfig` is the *whole* config the view should end up with, not a
6676
+ * patch: the agent reads the baseline, edits it, and sends it back entire.
6677
+ * The field is deliberately not called `config` — that name reads as "the bit
6678
+ * I want to change", which is exactly the loose-patch shape this contract
6679
+ * replaced, and a partial config here would silently drop every tab and
6680
+ * setting the agent did not restate.
6681
+ *
6682
+ * Existing objects require the opaque `baselineToken` issued by the server's
6683
+ * read-only default-view endpoint — it proves the agent authored against the
6684
+ * baseline that is still current. Objects created by this same plan must omit
6685
+ * it, because no baseline can exist yet. The proposal schema enforces that
6686
+ * cross-entry rule.
6687
+ */
6688
+ type ProposedDefaultViewTarget = {
6689
+ objectName: string;
6690
+ viewType: "list";
6691
+ canonicalConfig: ListViewConfig;
6692
+ baselineToken?: string;
6693
+ } | {
6694
+ objectName: string;
6695
+ viewType: "detail";
6696
+ canonicalConfig: DetailViewConfig;
6697
+ baselineToken?: string;
6698
+ };
6699
+ /**
6700
+ * Where the base config a target was authored against came from.
6701
+ *
6702
+ * `"absent"` is the plan-created-object case, and the reason `baseConfigHash`
6703
+ * is nullable: such an object does not exist at proposal time, so there is no
6704
+ * baseline to hash — the same fact that forbids its target from carrying a
6705
+ * `baselineToken`. Its default views are created during apply by
6706
+ * `ObjectSchemaService.createCustomObject`, from the real generator against
6707
+ * the real persisted object; a baseline synthesized at proposal time would
6708
+ * therefore not merely be missing, it would be *wrong*, and would spuriously
6709
+ * fail the staleness comparison it exists to support.
6710
+ */
6711
+ type ViewBaselineOrigin = "persisted" | "generated" | "absent";
6712
+ /** Shared by both view types; `canonicalConfig` is what discriminates them. */
6713
+ interface PersistedDefaultViewTargetBase {
6714
+ objectName: string;
6715
+ /** Hash of the baseline this target was authored against; `null` iff `baselineOrigin` is `"absent"`. */
6716
+ baseConfigHash: string | null;
6717
+ targetConfigHash: string;
6718
+ baselineOrigin: ViewBaselineOrigin;
6719
+ }
6720
+ /** A server-prepared executable target. Agent-only baseline tokens never persist. */
6721
+ type PersistedDefaultViewTarget = (PersistedDefaultViewTargetBase & {
6722
+ viewType: "list";
6723
+ canonicalConfig: ListViewConfig;
6724
+ }) | (PersistedDefaultViewTargetBase & {
6725
+ viewType: "detail";
6726
+ canonicalConfig: DetailViewConfig;
6727
+ });
6728
+ interface PlannedAttributeRemoval {
6729
+ objectName: string;
6730
+ attributeName: string;
6731
+ }
6732
+ interface PlannedObjectRemoval {
6733
+ objectName: string;
6734
+ }
6735
+ interface PlannedRename {
6736
+ objectName: string;
6737
+ from: string;
6738
+ to: string;
6739
+ }
6740
+ /**
6741
+ * Everything that adds, minus the view targets — those are the one branch
6742
+ * whose shape differs between the model-facing and the server-prepared
6743
+ * contract, so each version restates only that field.
6744
+ *
6745
+ * Nothing here can lose record data. Deliberately has no `views` (create)
6746
+ * branch: creating a view is not part of a plan, the same way changing an
6747
+ * attribute's type is not — a target can only replace the config of an
6748
+ * object's default view of a given type.
6749
+ */
6750
+ interface SchemaPlanAdditiveBase {
6751
+ objects: PlannedObject[];
6752
+ attributes: PlannedAttribute[];
6753
+ }
6754
+ interface SchemaPlanAdditive extends SchemaPlanAdditiveBase {
6755
+ viewUpdates: ProposedDefaultViewTarget[];
6756
+ }
6757
+ interface PersistedSchemaPlanAdditive extends SchemaPlanAdditiveBase {
6758
+ viewUpdates: PersistedDefaultViewTarget[];
6759
+ }
6760
+ /**
6761
+ * Everything that can lose record data or break references. A non-empty
6762
+ * destructive branch is what makes the UI require an explicit confirmation —
6763
+ * the structure carries the distinction, so no caller can forget to check it.
6764
+ *
6765
+ * Type change is deliberately absent: `changeAttributeType` raises
6766
+ * `ChangeTypeNotSupportedError` at runtime by design and lives in code through
6767
+ * `.migration(N, m => m.changeType(...))`.
6768
+ */
6769
+ interface SchemaPlanDestructive {
6770
+ attributeRemovals: PlannedAttributeRemoval[];
6771
+ objectRemovals: PlannedObjectRemoval[];
6772
+ renames: PlannedRename[];
6773
+ }
6774
+ /**
6775
+ * A model-facing proposal.
6776
+ *
6777
+ * There is only one plan contract, so the type carries no version suffix. The
6778
+ * `schemaPlanVersion` FIELD stays required and literal all the same: it is the
6779
+ * wire guard, and it is what makes an unversioned payload get refused outright
6780
+ * rather than guessed at — a plan authored against an older shape can never be
6781
+ * silently reinterpreted under this one.
6782
+ */
6783
+ interface SchemaPlan {
6784
+ schemaPlanVersion: 2;
6785
+ summary: string;
6786
+ additive: SchemaPlanAdditive;
6787
+ destructive: SchemaPlanDestructive;
6788
+ }
6789
+ /**
6790
+ * A plan being accumulated one entry at a time, before a summary exists.
6791
+ *
6792
+ * Derived from {@link SchemaPlan} rather than redeclared, so an entry added to
6793
+ * the plan shape is automatically addable to a draft — the two cannot drift
6794
+ * into accepting different things. `summary` is absent because it describes a
6795
+ * finished plan: the agent writes it at `propose_schema_plan`, once it knows
6796
+ * what it actually assembled. `schemaPlanVersion` is absent because a draft is
6797
+ * never handed to anything that dispatches on it; it is stamped at finalize.
6798
+ */
6799
+ type SchemaPlanDraft = Omit<SchemaPlan, "schemaPlanVersion" | "summary">;
6800
+ /**
6801
+ * Where a session's draft stands in its lifecycle.
6802
+ *
6803
+ * `composing` is a draft still accumulating entries; `proposed` is a draft
6804
+ * whose entries became a plan (`propose_schema_plan`) and are KEPT — the
6805
+ * preview window renders them until the plan is applied or rejected. A
6806
+ * proposed draft never silently accepts new entries: the next entry starts a
6807
+ * fresh `composing` draft, which is what protects a later plan from stale
6808
+ * leftovers now that drafts are session-scoped rather than turn-scoped.
6809
+ */
6810
+ type SchemaPlanDraftStatus = "composing" | "proposed";
6811
+ /** Sample records for preview only — keyed by object name, values keyed by attribute name. */
6812
+ type SchemaPlanSampleData = Record<string, Record<string, unknown>[]>;
6813
+ /**
6814
+ * What a draft repository write carries: the plan-shaped draft plus the
6815
+ * preview envelope around it. `updatedAt` is absent on purpose — the store
6816
+ * stamps it, so no caller can write a time it made up.
6817
+ */
6818
+ interface SchemaPlanDraftWrite {
6819
+ draft: SchemaPlanDraft;
6820
+ sampleData: SchemaPlanSampleData;
6821
+ status: SchemaPlanDraftStatus;
6822
+ /** The plan this draft became at finalize; `null` while composing. */
6823
+ proposedPlanId: Uuid | null;
6824
+ }
6825
+ /**
6826
+ * What the draft endpoint returns and the repository stores alongside the
6827
+ * plan-shaped draft. `updatedAt` (ISO string) is the store's stamp, used by
6828
+ * the preview window's dismissal ledger to tell new activity from old.
6829
+ */
6830
+ interface SchemaPlanDraftState extends SchemaPlanDraftWrite {
6831
+ updatedAt: string;
6832
+ }
6833
+ /**
6834
+ * What the draft endpoint answers: the full state, or `{ draft: null }` for a
6835
+ * session with no draft — always 200, because "nothing composed yet" is a
6836
+ * normal state the preview window polls through, not an error.
6837
+ */
6838
+ type SchemaPlanDraftResponse = SchemaPlanDraftState | {
6839
+ draft: null;
6840
+ };
6841
+ /** The server-prepared payload persisted for later approval and execution. */
6842
+ interface PersistedSchemaPlan {
6843
+ schemaPlanVersion: 2;
6844
+ summary: string;
6845
+ additive: PersistedSchemaPlanAdditive;
6846
+ destructive: SchemaPlanDestructive;
6847
+ }
6848
+ /** What a destructive entry costs, measured against real rows. */
6849
+ interface SchemaPlanImpactEntry {
6850
+ objectName: string;
6851
+ /** Absent for an object removal. */
6852
+ attributeName?: string;
6853
+ /** Record values purged by an attribute removal, or records deleted by an object removal. */
6854
+ affectedRecords: number;
6855
+ }
6856
+ interface SchemaPlanImpact {
6857
+ entries: SchemaPlanImpactEntry[];
6858
+ /** Renames carry no countable impact; listed so the dialog can say so. */
6859
+ renameWarnings: string[];
6860
+ }
6861
+ /**
6862
+ * One semantic difference between a view target's `canonicalConfig` and the
6863
+ * baseline it was authored against.
6864
+ *
6865
+ * A view target replaces a view's configuration WHOLESALE, so the approval
6866
+ * screen showing only "list view of devis" asks a human to agree to a
6867
+ * replacement they cannot see. These entries are what that screen renders
6868
+ * instead — computed server-side, against the very baseline the target's
6869
+ * token proved current.
6870
+ *
6871
+ * Deliberately structured data, never rendered sentences: the wording is a
6872
+ * presentation concern and lives in the frontend's locale files, so the same
6873
+ * stored plan can be read in any language and the runtime never accumulates
6874
+ * user-facing prose.
6875
+ *
6876
+ * The list of kinds is not exhaustive and never can be — the view config types
6877
+ * grow, and a hand-maintained set of comparisons will always lag them. What IS
6878
+ * guaranteed is the invariant that makes an incomplete list safe: a difference
6879
+ * with no `kind` of its own still produces `"otherChanges"`, so an empty
6880
+ * `changes` array means the two configurations are byte-identical after
6881
+ * canonicalization, never "we did not think to look".
6882
+ */
6883
+ type ViewChange = {
6884
+ kind: "columnsAdded";
6885
+ tabId: string;
6886
+ columns: string[];
6887
+ } | {
6888
+ kind: "columnsRemoved";
6889
+ tabId: string;
6890
+ columns: string[];
6891
+ } | {
6892
+ kind: "columnsReordered";
6893
+ tabId: string;
6894
+ } | {
6895
+ kind: "tabAdded";
6896
+ tabId: string;
6897
+ label: string;
6898
+ } | {
6899
+ kind: "tabRemoved";
6900
+ tabId: string;
6901
+ label: string;
6902
+ } | {
6903
+ kind: "tabRenamed";
6904
+ tabId: string;
6905
+ from: string;
6906
+ to: string;
6907
+ }
6908
+ /**
6909
+ * The tabs that exist on both sides now appear in a different sequence.
6910
+ * A view-wide fact rather than a per-tab one, and a visible one: the tab
6911
+ * bar renders tabs in config order and the first tab is the one a record
6912
+ * opens on, so a pure reordering changes both the bar and the landing tab.
6913
+ */
6914
+ | {
6915
+ kind: "tabsReordered";
6916
+ }
6917
+ /**
6918
+ * A tab that stayed, whose configuration moved in some way other than its
6919
+ * label or its column list — a form tab's groups and fields, a table tab's
6920
+ * source or filters, a kanban tab's grouping. Without it a detail-view
6921
+ * target could rewrite every field of every form and still describe itself
6922
+ * as changing nothing, which is exactly the silence this whole change-set
6923
+ * exists to break.
6924
+ */
6925
+ | {
6926
+ kind: "tabSettingsChanged";
6927
+ tabId: string;
6928
+ }
6929
+ /** The view had no side panel and now has one — it appears on every record page. */
6930
+ | {
6931
+ kind: "sidePanelAdded";
6932
+ attributes: string[];
6933
+ } | {
6934
+ kind: "sidePanelAttributesAdded";
6935
+ attributes: string[];
6936
+ } | {
6937
+ kind: "sidePanelAttributesRemoved";
6938
+ attributes: string[];
6939
+ } | {
6940
+ kind: "sidePanelRemoved";
6941
+ } | {
6942
+ kind: "defaultFiltersChanged";
6943
+ } | {
6944
+ kind: "defaultFiltersRemoved";
6945
+ }
6946
+ /**
6947
+ * The configurations differ in a way none of the kinds above describes.
6948
+ *
6949
+ * The load-bearing entry of this union, and the reason the others may be
6950
+ * incomplete: without it, a difference nobody modelled would render as an
6951
+ * empty `changes` array, i.e. as the positive claim "this changes nothing".
6952
+ * A confident false negative on an approval screen is strictly worse than
6953
+ * the bare object name it replaced — it manufactures the trust it should be
6954
+ * earning. This turns every such gap into a vague answer rather than a
6955
+ * wrong one.
6956
+ */
6957
+ | {
6958
+ kind: "otherChanges";
6959
+ }
6960
+ /**
6961
+ * The whole of what can be said about a target on an object this same plan
6962
+ * creates: it has no baseline (see {@link ViewBaselineOrigin}), so there is
6963
+ * nothing to have changed — the view is simply new.
6964
+ */
6965
+ | {
6966
+ kind: "newObjectView";
6967
+ };
6968
+ /** What one view target changes, as the approval screen reads it. */
6969
+ interface SchemaPlanViewChanges {
6970
+ objectName: string;
6971
+ viewType: ViewType;
6972
+ /**
6973
+ * Bounded and deterministically ordered. Empty means — provably, not by
6974
+ * convention — that the target's configuration is byte-identical to its
6975
+ * baseline after canonicalization: any other difference falls through to
6976
+ * {@link ViewChange} `"otherChanges"`. So an empty array is a real answer
6977
+ * ("this view target changes nothing"), never a gap in the comparisons.
6978
+ */
6979
+ changes: ViewChange[];
6980
+ /**
6981
+ * How many further changes were computed and dropped to keep `changes`
6982
+ * bounded. `0` for every ordinary target; non-zero says the summary is
6983
+ * partial, so the screen can say so rather than imply completeness.
6984
+ *
6985
+ * What survives truncation is chosen destructive-first: an approver can
6986
+ * accept an unlisted addition, but must never be shown a summary that
6987
+ * silently omitted a deletion.
6988
+ */
6989
+ droppedChanges: number;
6990
+ }
6991
+ /**
6992
+ * The human-facing description of a plan's view targets, computed once at
6993
+ * propose time and stored beside {@link SchemaPlanImpact} — never inside the
6994
+ * plan payload, which is the executable contract and is server-prepared from
6995
+ * an agent proposal that is forbidden from carrying this field.
6996
+ *
6997
+ * Objects and attributes are absent on purpose: the approval screen already
6998
+ * lists those from the plan itself. Views are the one target whose effect is
6999
+ * invisible without a diff.
7000
+ */
7001
+ interface SchemaPlanChangeSet {
7002
+ views: SchemaPlanViewChanges[];
7003
+ }
7004
+ /**
7005
+ * Takes only the destructive branch — identical in the proposal and the
7006
+ * persisted contract — so both a `SchemaPlan` and a `PersistedSchemaPlan`
7007
+ * can be asked the question without either name appearing here.
7008
+ */
7009
+ declare function hasDestructiveEntries(plan: {
7010
+ destructive: SchemaPlanDestructive;
7011
+ }): boolean;
7012
+ /**
7013
+ * A schema plan's lifecycle: it starts `proposed`, and leaves that state
7014
+ * exactly once, into either `applying` or `rejected`.
7015
+ *
7016
+ * `applying` is the real double-apply guard, claimed via a conditional UPDATE
7017
+ * (`SchemaPlanRepository.markApplying`) BEFORE any mutation runs, so two
7018
+ * concurrent applies can never both execute the mutation list. From
7019
+ * `applying` it resolves into either `applied` (every entry landed) or
7020
+ * `failed` (it stopped partway — see {@link SchemaPlanOutcome}). Neither
7021
+ * terminal state may be re-applied: there is no rollback on this platform, so
7022
+ * resuming a `failed` plan would risk re-applying entries that already
7023
+ * landed. Resuming a half-applied plan is a different feature.
7024
+ *
7025
+ * `rejected` is a human refusing the change outright — claimed the same way,
7026
+ * via a conditional UPDATE (`SchemaPlanRepository.markRejected`). A rejected
7027
+ * plan can never move again: it is not `proposed` any more, so
7028
+ * `markApplying`'s own `WHERE status = 'proposed'` guard already refuses it
7029
+ * with no extra check needed anywhere else.
7030
+ */
7031
+ type SchemaPlanStatus = "proposed" | "applying" | "applied" | "failed" | "rejected";
7032
+ /**
7033
+ * What actually happened when a plan was applied.
7034
+ *
7035
+ * `adapter.transaction()` is not a real SQL transaction on this platform
7036
+ * (PostgREST has no transaction primitive), so a plan that fails midway
7037
+ * leaves its already-applied entries in place. `applied` is persisted
7038
+ * incrementally — after every step that lands, not only at the end — so a
7039
+ * process crash between two steps still leaves a readable record of exactly
7040
+ * what landed, even though `status` is then stuck at `"applying"` forever
7041
+ * (there is no lease-reclaim system; a stuck claim is diagnosable via
7042
+ * `claimedAt`, not automatically recovered). `failedAt` is set only once the
7043
+ * plan actually stops — `null` while a plan is still `"applying"` and making
7044
+ * progress, or once it reaches `"applied"` (a plan that finished cleanly
7045
+ * clears its outcome back to `null` entirely; see `StoredSchemaPlan.outcome`).
7046
+ */
7047
+ interface SchemaPlanOutcome {
7048
+ /** Entries successfully applied so far, in the order they ran. */
7049
+ applied: string[];
7050
+ /** The entry that failed, and why — `null` until (if ever) the plan actually stops. */
7051
+ failedAt: {
7052
+ entry: string;
7053
+ reason: string;
7054
+ } | null;
7055
+ }
7056
+ /**
7057
+ * A persisted schema plan, as returned by the repository and by
7058
+ * `GET /schema/plans/:planId`.
7059
+ *
7060
+ * Proposal and approval run under different identities: an agent (or a
7061
+ * human) proposes a plan and it is validated and shown to a human, who later
7062
+ * approves it by sending only its `id`. The stored row is the single source
7063
+ * of truth about what was agreed — the plan payload itself never travels in
7064
+ * the approval request, so a caller cannot approve something other than what
7065
+ * was validated and shown.
7066
+ */
7067
+ interface StoredSchemaPlan {
7068
+ id: Uuid;
7069
+ /**
7070
+ * The server-prepared payload, never the agent's raw proposal: `propose`
7071
+ * verifies each view target's `baselineToken` and converts the plan into
7072
+ * {@link PersistedSchemaPlan}, replacing that credential with the
7073
+ * `baseConfigHash`/`targetConfigHash`/`baselineOrigin` it proved.
7074
+ */
7075
+ plan: PersistedSchemaPlan;
7076
+ impact: SchemaPlanImpact;
7077
+ /**
7078
+ * What each of the plan's view targets actually changes, measured at
7079
+ * propose time against the baseline each target's token proved current.
7080
+ *
7081
+ * Stored here rather than in `plan` for the same reason `impact` is: it is
7082
+ * a server-computed *description* of the plan, not part of the executable
7083
+ * contract — the proposal parser rejects an agent-supplied `changeSet`
7084
+ * outright, so this can only ever have been derived from the configuration
7085
+ * the agent actually sent.
7086
+ */
7087
+ changeSet: SchemaPlanChangeSet;
7088
+ status: SchemaPlanStatus;
7089
+ proposedByActorId: Uuid;
7090
+ appliedByActorId: Uuid | null;
7091
+ /**
7092
+ * Who rejected this plan, and when — `null` unless `status` is
7093
+ * `"rejected"`. Set atomically together, by the same `markRejected` call
7094
+ * that flips `status`.
7095
+ */
7096
+ rejectedByActorId: Uuid | null;
7097
+ rejectedAt: string | null;
7098
+ /**
7099
+ * Set once a plan has started applying and has landed at least one entry,
7100
+ * or has stopped partway; `null` for a plan that never got past
7101
+ * `"proposed"`, and cleared back to `null` once the plan finishes cleanly
7102
+ * (`"applied"`) — a plan that succeeded has nothing left to report.
7103
+ */
7104
+ outcome: SchemaPlanOutcome | null;
7105
+ /**
7106
+ * When `markApplying` claimed this plan. `null` until claimed. Diagnostic
7107
+ * only: it tells a human how long a plan has been stuck `"applying"`, it
7108
+ * does not drive any automatic reclaim.
7109
+ */
7110
+ claimedAt: string | null;
7111
+ }
7112
+
7113
+ declare const SCHEMA_PLAN_LIMITS: {
7114
+ readonly objectAdditions: 20;
7115
+ readonly totalMutations: 500;
7116
+ readonly serializedBytes: number;
7117
+ };
7118
+ declare const plannedAttributeSchema: z$1.ZodType<{
7119
+ objectName: string;
7120
+ name: string;
7121
+ label: string;
7122
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7123
+ config?: Record<string, unknown> | undefined;
7124
+ required?: boolean | undefined;
7125
+ description?: string | undefined;
7126
+ }, unknown, z$1.core.$ZodTypeInternals<{
7127
+ objectName: string;
7128
+ name: string;
7129
+ label: string;
7130
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7131
+ config?: Record<string, unknown> | undefined;
7132
+ required?: boolean | undefined;
7133
+ description?: string | undefined;
7134
+ }, unknown>>;
7135
+ /**
7136
+ * An attribute declared inside the object that carries it, so `objectName` is
7137
+ * implied by the parent rather than repeated. Exported because
7138
+ * `add_planned_attributes` needs exactly this shape too — it takes the object
7139
+ * name once, alongside the list, instead of on every entry.
7140
+ */
7141
+ declare const plannedInlineAttributeSchema: z$1.ZodType<{
7142
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7143
+ name: string;
7144
+ label: string;
7145
+ required?: boolean | undefined;
7146
+ description?: string | undefined;
7147
+ config?: Record<string, unknown> | undefined;
7148
+ }, unknown, z$1.core.$ZodTypeInternals<{
7149
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7150
+ name: string;
7151
+ label: string;
7152
+ required?: boolean | undefined;
7153
+ description?: string | undefined;
7154
+ config?: Record<string, unknown> | undefined;
7155
+ }, unknown>>;
7156
+ declare const plannedObjectSchema: z$1.ZodObject<{
7157
+ name: z$1.ZodString;
7158
+ label: z$1.ZodString;
7159
+ pluralLabel: z$1.ZodOptional<z$1.ZodString>;
7160
+ description: z$1.ZodOptional<z$1.ZodString>;
7161
+ icon: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<"path" | "one" | "location" | "user" | "search" | "repeat" | "anchor" | "link" | "at" | "sort" | "map" | "filter" | "target" | "key" | "label" | "x" | "a-arrow-down" | "a-arrow-up" | "academic-hat" | "accessibility" | "activity-square" | "activity" | "add-queue" | "aeroplane" | "air-conditioner" | "airplay" | "airpods" | "alarm-check" | "alarm-minus" | "alarm-plus" | "alarm-smoke" | "alarm-snooze" | "alarm-x" | "alarm" | "album" | "align-bottom" | "align-horizontal" | "align-left" | "align-right" | "align-top" | "align-vertical" | "alt" | "ambulance" | "ampersand-square" | "ampersand" | "ampersands" | "angry-circle" | "angry-ghost" | "angry-square" | "annoyed-circle" | "annoyed-ghost" | "annoyed-square" | "aperture" | "api" | "ar" | "archive" | "arrow-diagonal-one" | "arrow-diagonal-two" | "arrow-down-circle" | "arrow-down-left-circle" | "arrow-down-left-square" | "arrow-down-left-waves" | "arrow-down-left" | "arrow-down-right-circle" | "arrow-down-right-square" | "arrow-down-right-waves" | "arrow-down-right" | "arrow-down-square" | "arrow-down-waves" | "arrow-down" | "arrow-left-circle" | "arrow-left-right" | "arrow-left-square" | "arrow-left-waves" | "arrow-left" | "arrow-long-down-left" | "arrow-long-down-right" | "arrow-long-down" | "arrow-long-left" | "arrow-long-right" | "arrow-long-up-left" | "arrow-long-up-right" | "arrow-long-up" | "arrow-right-circle" | "arrow-right-square" | "arrow-right-waves" | "arrow-right" | "arrow-up-circle" | "arrow-up-down" | "arrow-up-left-circle" | "arrow-up-left-square" | "arrow-up-left-waves" | "arrow-up-left" | "arrow-up-right-circle" | "arrow-up-right-square" | "arrow-up-right-waves" | "arrow-up-right" | "arrow-up-square" | "arrow-up-waves" | "arrow-up" | "asterisk-circle" | "asterisk-diamond" | "asterisk-hexagon" | "asterisk-octagon" | "asterisk-square" | "asterisk-waves" | "atom" | "baby" | "backpack" | "badge" | "baggage-claim" | "ban" | "bank" | "baseball" | "bath" | "battery-charging-four" | "battery-charging-one" | "battery-charging-three" | "battery-charging-two" | "battery-charging" | "battery-check" | "battery-empty" | "battery-full" | "battery-minus" | "battery-plus" | "battery-x" | "bell-check" | "bell-home" | "bell-minus" | "bell-on" | "bell-plus" | "bell-slash" | "bell-snooze" | "bell-user" | "bell-x" | "bell" | "binoculars" | "bitcoin-circle" | "bitcoin-diamond" | "bitcoin-hexagon" | "bitcoin-octagon" | "bitcoin-square" | "bitcoin-waves" | "bitcoin" | "bluetooth" | "boat" | "book-check" | "book-dot" | "book-home" | "book-image" | "book-minus" | "book-open" | "book-plus" | "book-slash" | "book-snooze" | "book-user" | "book-x" | "book" | "bookmark-check" | "bookmark-dot" | "bookmark-home" | "bookmark-minus" | "bookmark-plus" | "bookmark-slash" | "bookmark-snooze" | "bookmark-user" | "bookmark-x" | "bookmark" | "bounding-box" | "bowl" | "box" | "brand-chrome" | "brand-codepen" | "brand-codesandbox" | "brand-dribbble" | "brand-facebook" | "brand-figma" | "brand-framer" | "brand-github" | "brand-gitlab" | "brand-google" | "brand-instagram" | "brand-linkedin" | "brand-pinterest" | "brand-pocket" | "brand-slack" | "brand-spotify" | "brand-telegram" | "brand-threads" | "brand-trello" | "brand-twitch" | "brand-twitter" | "brand-x" | "brand-youtube" | "briefcase-conveyor-belt" | "briefcase" | "brightness-high" | "brightness-low" | "bubbles" | "building-one" | "building" | "cable-car" | "cake" | "calendar-check" | "calendar-down" | "calendar-minus" | "calendar-plus" | "calendar-slash" | "calendar-up" | "calendar-x" | "calendar" | "camera-slash" | "camera" | "campfire" | "cannabis" | "caravan" | "cart-check" | "cart-minus" | "cart-plus" | "cart-x" | "cart" | "cast-screen" | "center-focus" | "chart-area" | "chart-bar-big" | "chart-bar-decreasing" | "chart-bar-increasing" | "chart-bar-one" | "chart-bar-stacked" | "chart-bar" | "chart-bubble" | "chart-candlestick" | "chart-column-big" | "chart-column-decreasing" | "chart-column-increasing" | "chart-column-stacked" | "chart-column" | "chart-gantt" | "chart-graph" | "chart-line" | "chart-network" | "chart-no-axes-column-decreasing" | "chart-no-axes-column-increasing" | "chart-no-axes-column" | "chart-no-axes-combined" | "chart-no-axes-gantt" | "chart-pie-one" | "chart-pie-two" | "chart-pie" | "chart-scatter" | "chart-spline" | "chat-check" | "chat-dots" | "chat-messages" | "chat-minus" | "chat-plus" | "chat-x" | "chat" | "check-circle-one" | "check-circle" | "check-diamond" | "check-hexagon" | "check-octagon" | "check-square-one" | "check-square" | "check-waves" | "check" | "chevron-double-down-left" | "chevron-double-down-right" | "chevron-double-down" | "chevron-double-left" | "chevron-double-right" | "chevron-double-up-left" | "chevron-double-up-right" | "chevron-double-up" | "chevron-down-circle" | "chevron-down-left-circle" | "chevron-down-left-square" | "chevron-down-left-waves" | "chevron-down-left" | "chevron-down-right-circle" | "chevron-down-right-square" | "chevron-down-right-waves" | "chevron-down-right" | "chevron-down-square" | "chevron-down-waves" | "chevron-down" | "chevron-left-circle" | "chevron-left-square" | "chevron-left-waves" | "chevron-left" | "chevron-right-circle" | "chevron-right-square" | "chevron-right-waves" | "chevron-right" | "chevron-up-circle" | "chevron-up-down" | "chevron-up-left-circle" | "chevron-up-left-square" | "chevron-up-left-waves" | "chevron-up-left" | "chevron-up-right-circle" | "chevron-up-right-square" | "chevron-up-right-waves" | "chevron-up-right" | "chevron-up-square" | "chevron-up-waves" | "chevron-up" | "chip" | "cigarette-off" | "cigarette" | "circle-dashed" | "circle-half-circle" | "circle-half" | "circle-notch" | "circle" | "click" | "clipboard" | "clock-circle" | "clock-diamond" | "clock-eight" | "clock-eleven" | "clock-five" | "clock-four" | "clock-hand" | "clock-hexagon" | "clock-nine" | "clock-octagon" | "clock-one" | "clock-seven" | "clock-six" | "clock-square" | "clock-ten" | "clock-three" | "clock-twelve" | "clock-two" | "clock-waves" | "cloud-download" | "cloud-drizzle" | "cloud-fog" | "cloud-hail" | "cloud-lightning" | "cloud-moon-rain" | "cloud-moon" | "cloud-off" | "cloud-rain-wind" | "cloud-rain" | "cloud-snow" | "cloud-sun-rain" | "cloud-sun" | "cloud-upload" | "cloud" | "cloudy" | "cocktail" | "code-circle" | "code-diamond" | "code-hexagon" | "code-octagon" | "code-square" | "code-waves" | "code" | "coffee" | "cog-four" | "cog-one" | "cog-three" | "cog-two" | "cog" | "columns" | "command" | "compass" | "components" | "confetti" | "config-vertical" | "config" | "contactless-circle" | "contactless" | "controller" | "cookie" | "copy" | "copyleft" | "copyright-slash" | "copyright" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "credit-card-check" | "credit-card-minus" | "credit-card-plus" | "credit-card-x" | "credit-card" | "croissant" | "crop" | "crosshair" | "cupcake" | "danger-circle" | "danger-diamond" | "danger-hexagon" | "danger-octagon" | "danger-square" | "danger-triangle" | "danger-waves" | "danger" | "database" | "daze-circle" | "daze-ghost" | "daze-square" | "delete" | "desktop" | "diamond" | "dice-five" | "dice-four" | "dice-one" | "dice-six" | "dice-three" | "dice-two" | "dislike" | "divide" | "dollar-circle" | "dollar-diamond" | "dollar-hexagon" | "dollar-octagon" | "dollar-square" | "dollar-waves" | "dollar" | "door-closed-locked" | "door-closed" | "door-open" | "dots-circle" | "dots-diamond" | "dots-hexagon" | "dots-octagon" | "dots-square" | "dots-vertical-circle" | "dots-vertical-diamond" | "dots-vertical-hexagon" | "dots-vertical-octagon" | "dots-vertical-square" | "dots-vertical-waves" | "dots-vertical" | "dots-waves" | "dots" | "download" | "drop" | "droplet-off" | "droplet" | "droplets" | "ear-slash" | "ear" | "earth" | "eclipse" | "edit-one" | "edit" | "egg" | "eight-circle" | "eight-diamond" | "eight-hexagon" | "eight-octagon" | "eight-square" | "eight-waves" | "eight" | "elevator" | "envelope-open" | "envelope" | "euro-circle" | "euro-diamond" | "euro-hexagon" | "euro-octagon" | "euro-square" | "euro-waves" | "euro" | "exclude" | "external-link" | "eye-slash" | "eye" | "face-id" | "fat-arrow-down-left" | "fat-arrow-down-right" | "fat-arrow-down" | "fat-arrow-left" | "fat-arrow-right" | "fat-arrow-up-left" | "fat-arrow-up-right" | "fat-arrow-up" | "fat-corner-down-left" | "fat-corner-down-right" | "fat-corner-left-down" | "fat-corner-left-up" | "fat-corner-right-down" | "fat-corner-right-up" | "fat-corner-up-left" | "fat-corner-up-right" | "female" | "file-check" | "file-minus" | "file-plus" | "file-text" | "file-x" | "file" | "film" | "filter-one" | "fine-tune" | "fire" | "five-circle" | "five-diamond" | "five-hexagon" | "five-octagon" | "five-square" | "five-waves" | "five" | "flag-one" | "flag" | "flame-kindling" | "flame" | "flask" | "flower-2" | "flower" | "folder-check" | "folder-heart" | "folder-kanban" | "folder-minus" | "folder-one" | "folder-plus" | "folder-slash" | "folder-two" | "folder-x" | "folder" | "forward-circle" | "forward-diamond" | "forward-hexagon" | "forward-octagon" | "forward-square" | "forward-waves" | "forward" | "four-circle" | "four-diamond" | "four-hexagon" | "four-octagon" | "four-square" | "four-waves" | "four" | "frame" | "funny-circle" | "funny-ghost" | "funny-square" | "gift" | "git-branch" | "git-circle" | "git-commit" | "git-diamond" | "git-diff" | "git-hexagon" | "git-merge" | "git-octagon" | "git-pull-request" | "git-square" | "git-waves" | "glasses" | "globe" | "grid-one" | "grid" | "hand" | "hard-drive" | "hash-circle" | "hash-diamond" | "hash-hexagon" | "hash-octagon" | "hash-square" | "hash-waves" | "hash" | "haze" | "heading-five" | "heading-four" | "heading-one" | "heading-six" | "heading-three" | "heading-two" | "heading" | "headphones" | "heart-broken" | "heart-check" | "heart-circle" | "heart-diamond" | "heart-dot" | "heart-hexagon" | "heart-home" | "heart-minus" | "heart-octagon" | "heart-plus" | "heart-slash" | "heart-snooze" | "heart-square" | "heart-user" | "heart-waves" | "heart-x" | "heart" | "hexagon" | "home-check" | "home-minus" | "home-plus" | "home-smile" | "home-x" | "home" | "image-circle" | "image-rectangle" | "image" | "inbox-archive" | "inbox-check" | "inbox-down" | "inbox-minus" | "inbox-plus" | "inbox-up" | "inbox-x" | "inbox" | "incognito" | "indifferent-circle" | "indifferent-ghost" | "indifferent-square" | "infinity" | "info-circle" | "info-diamond" | "info-hexagon" | "info-octagon" | "info-square" | "info-triangle" | "info-waves" | "info" | "intersect" | "kanban" | "keyboard-brightness-high" | "keyboard-brightness-low" | "keyboard" | "lamp" | "layers-one" | "layers-three" | "layers-two" | "layout" | "leaf" | "leaves" | "letter-a-circle" | "letter-a-diamond" | "letter-a-hexagon" | "letter-a-octagon" | "letter-a-square" | "letter-a-waves" | "letter-a" | "letter-b-circle" | "letter-b-diamond" | "letter-b-hexagon" | "letter-b-octagon" | "letter-b-square" | "letter-b-waves" | "letter-b" | "letter-c-circle" | "letter-c-diamond" | "letter-c-hexagon" | "letter-c-octagon" | "letter-c-square" | "letter-c-waves" | "letter-c" | "letter-d-circle" | "letter-d-diamond" | "letter-d-hexagon" | "letter-d-octagon" | "letter-d-square" | "letter-d-waves" | "letter-d" | "letter-e-circle" | "letter-e-diamond" | "letter-e-hexagon" | "letter-e-octagon" | "letter-e-square" | "letter-e-waves" | "letter-e" | "letter-f-circle" | "letter-f-diamond" | "letter-f-hexagon" | "letter-f-octagon" | "letter-f-square" | "letter-f-waves" | "letter-f" | "letter-g-circle" | "letter-g-diamond" | "letter-g-hexagon" | "letter-g-octagon" | "letter-g-square" | "letter-g-waves" | "letter-g" | "letter-h-circle" | "letter-h-diamond" | "letter-h-hexagon" | "letter-h-octagon" | "letter-h-square" | "letter-h-waves" | "letter-h" | "letter-i-circle" | "letter-i-diamond" | "letter-i-hexagon" | "letter-i-octagon" | "letter-i-square" | "letter-i-waves" | "letter-i" | "letter-j-circle" | "letter-j-diamond" | "letter-j-hexagon" | "letter-j-octagon" | "letter-j-square" | "letter-j-waves" | "letter-j" | "letter-k-circle" | "letter-k-diamond" | "letter-k-hexagon" | "letter-k-octagon" | "letter-k-square" | "letter-k-waves" | "letter-k" | "letter-l-circle" | "letter-l-diamond" | "letter-l-hexagon" | "letter-l-octagon" | "letter-l-square" | "letter-l-waves" | "letter-l" | "letter-m-circle" | "letter-m-diamond" | "letter-m-hexagon" | "letter-m-octagon" | "letter-m-square" | "letter-m-waves" | "letter-m" | "letter-n-circle" | "letter-n-diamond" | "letter-n-hexagon" | "letter-n-octagon" | "letter-n-square" | "letter-n-waves" | "letter-n" | "letter-o-circle" | "letter-o-diamond" | "letter-o-hexagon" | "letter-o-octagon" | "letter-o-square" | "letter-o-waves" | "letter-o" | "letter-p-circle" | "letter-p-diamond" | "letter-p-hexagon" | "letter-p-octagon" | "letter-p-square" | "letter-p-waves" | "letter-p" | "letter-q-circle" | "letter-q-diamond" | "letter-q-hexagon" | "letter-q-octagon" | "letter-q-square" | "letter-q-waves" | "letter-q" | "letter-r-circle" | "letter-r-diamond" | "letter-r-hexagon" | "letter-r-octagon" | "letter-r-square" | "letter-r-waves" | "letter-r" | "letter-s-circle" | "letter-s-diamond" | "letter-s-hexagon" | "letter-s-octagon" | "letter-s-square" | "letter-s-waves" | "letter-s" | "letter-t-circle" | "letter-t-diamond" | "letter-t-hexagon" | "letter-t-octagon" | "letter-t-square" | "letter-t-waves" | "letter-t" | "letter-u-circle" | "letter-u-diamond" | "letter-u-hexagon" | "letter-u-octagon" | "letter-u-square" | "letter-u-waves" | "letter-u" | "letter-v-circle" | "letter-v-diamond" | "letter-v-hexagon" | "letter-v-octagon" | "letter-v-square" | "letter-v-waves" | "letter-v" | "letter-w-circle" | "letter-w-diamond" | "letter-w-hexagon" | "letter-w-octagon" | "letter-w-square" | "letter-w-waves" | "letter-w" | "letter-x-circle" | "letter-x-diamond" | "letter-x-hexagon" | "letter-x-octagon" | "letter-x-square" | "letter-x-waves" | "letter-x" | "letter-y-circle" | "letter-y-diamond" | "letter-y-hexagon" | "letter-y-octagon" | "letter-y-square" | "letter-y-waves" | "letter-y" | "letter-z-circle" | "letter-z-diamond" | "letter-z-hexagon" | "letter-z-octagon" | "letter-z-square" | "letter-z-waves" | "letter-z" | "lightning-off" | "lightning" | "like" | "line-chart-circle" | "line-chart-diamond" | "line-chart-hexagon" | "line-chart-octagon" | "line-chart-square" | "line-chart-waves" | "link-one" | "link-two" | "list-check" | "list-number" | "list" | "location-check" | "location-home" | "location-minus" | "location-plus" | "location-selected" | "location-slash" | "location-snooze" | "location-user" | "location-x" | "lock-circle" | "lock-diamond" | "lock-hexagon" | "lock-keyhole" | "lock-octagon" | "lock-open-keyhole" | "lock-open-password" | "lock-open" | "lock-password" | "lock-square" | "lock-waves" | "lock" | "login" | "logout" | "magnet" | "male" | "mask" | "math-square" | "math" | "maximize-one" | "maximize" | "menu" | "message-check" | "message-dots" | "message-minus" | "message-plus" | "message-reply" | "message-x" | "message" | "microphone-slash" | "microphone" | "minimize-one" | "minimize" | "minus-circle" | "minus-diamond" | "minus-hexagon" | "minus-octagon" | "minus-square" | "minus-waves" | "minus" | "mobile-signal-five" | "mobile-signal-four" | "mobile-signal-one" | "mobile-signal-three" | "mobile-signal-two" | "mobile" | "moon-star" | "moon" | "mountain-snow" | "mountain" | "mouse-pointer" | "move-diagonal-one" | "move-diagonal" | "move-horizontal" | "move-vertical" | "move" | "music-circle" | "music-diamond" | "music-hexagon" | "music-octagon" | "music-square" | "music-waves" | "music" | "myna" | "navigation-one" | "navigation" | "nine-circle" | "nine-diamond" | "nine-hexagon" | "nine-octagon" | "nine-square" | "nine-waves" | "nine" | "notification" | "octagon" | "one-circle" | "one-diamond" | "one-hexagon" | "one-octagon" | "one-square" | "one-waves" | "option" | "package" | "paint" | "panel-bottom-close" | "panel-bottom-inactive" | "panel-bottom-open" | "panel-bottom" | "panel-left-close" | "panel-left-inactive" | "panel-left-open" | "panel-left" | "panel-right-close" | "panel-right-inactive" | "panel-right-open" | "panel-right" | "panel-top-close" | "panel-top-inactive" | "panel-top-open" | "panel-top" | "paperclip" | "parking" | "password" | "pause-circle" | "pause-diamond" | "pause-hexagon" | "pause-octagon" | "pause-square" | "pause-waves" | "pause" | "pen" | "pencil" | "percentage-circle" | "percentage-diamond" | "percentage-hexagon" | "percentage-octagon" | "percentage-square" | "percentage-waves" | "percentage" | "pin" | "pizza" | "planet" | "play-circle" | "play-diamond" | "play-hexagon" | "play-octagon" | "play-square" | "play-waves" | "play" | "plus-circle" | "plus-diamond" | "plus-hexagon" | "plus-octagon" | "plus-square" | "plus-waves" | "plus" | "pokeball" | "power" | "presentation" | "printer" | "puzzle" | "question-circle" | "question-diamond" | "question-hexagon" | "question-octagon" | "question-square" | "question-waves" | "question" | "radio" | "rainbow" | "reception-bell" | "record" | "rectangle-vertical" | "rectangle" | "redo" | "refresh-alt" | "refresh" | "rewind-circle" | "rewind-diamond" | "rewind-hexagon" | "rewind-octagon" | "rewind-square" | "rewind-waves" | "rewind" | "rhombus" | "ribbon" | "rocket" | "room-service" | "rows" | "rss" | "ruler" | "rupee-circle" | "rupee-diamond" | "rupee-hexagon" | "rupee-octagon" | "rupee-square" | "rupee-waves" | "rupee" | "sad-circle" | "sad-ghost" | "sad-square" | "save" | "scan" | "scissors" | "sea-waves" | "search-check" | "search-circle" | "search-diamond" | "search-dot" | "search-hexagon" | "search-home" | "search-minus" | "search-octagon" | "search-plus" | "search-slash" | "search-snooze" | "search-square" | "search-user" | "search-waves" | "search-x" | "select-multiple" | "send" | "servers" | "seven-circle" | "seven-diamond" | "seven-hexagon" | "seven-octagon" | "seven-square" | "seven-waves" | "seven" | "share" | "shell" | "shield-check" | "shield-crossed" | "shield-minus" | "shield-one" | "shield-plus" | "shield-slash" | "shield-two" | "shield-x" | "shield" | "shooting-star" | "shopping-bag" | "shovel" | "shrub" | "shuffle-alt" | "shuffle" | "sidebar-alt" | "sidebar" | "signal-circle" | "signal-diamond" | "signal-hexagon" | "signal-octagon" | "signal-square" | "signal-waves" | "signal" | "six-circle" | "six-diamond" | "six-hexagon" | "six-octagon" | "six-square" | "six-waves" | "six" | "skip-back" | "skip-forward" | "slash-circle" | "slash-diamond" | "slash-hexagon" | "slash-octagon" | "slash-square" | "slash-waves" | "smile-circle" | "smile-ghost" | "smile-square" | "snow" | "snowflake" | "sofa" | "sparkles" | "speaker" | "spinner-one" | "spinner" | "sprout" | "square-chart-gantt" | "square-dashed-kanban" | "square-dashed" | "square-half" | "square-kanban" | "square" | "star" | "stop-circle" | "stop-diamond" | "stop-hexagon" | "stop-octagon" | "stop-square" | "stop-waves" | "stop" | "store" | "subtract" | "sun-dim" | "sun-medium" | "sun-snow" | "sun" | "sunrise" | "sunset" | "support" | "swatches" | "table" | "tablet" | "tag-plus" | "tag" | "tally-five" | "tally-four" | "tally-one" | "tally-three" | "tally-two" | "telephone-call" | "telephone-forward" | "telephone-in" | "telephone-missed" | "telephone-out" | "telephone-slash" | "telephone" | "tent-tree" | "tent" | "terminal" | "text-align-center" | "text-align-left" | "text-align-right" | "text-justify" | "thermometer-snowflake" | "thermometer-sun" | "thermometer" | "three-circle" | "three-diamond" | "three-hexagon" | "three-octagon" | "three-square" | "three-waves" | "three" | "ticket-slash" | "ticket" | "toggle-left" | "toggle-right" | "tool" | "tornado" | "train" | "trash-one" | "trash-two" | "trash" | "tree-deciduous" | "tree-palm" | "tree-pine" | "tree" | "trees" | "trending-down" | "trending-up-down" | "trending-up" | "triangle" | "truck" | "tv" | "two-circle" | "two-diamond" | "two-hexagon" | "two-octagon" | "two-square" | "two-waves" | "two" | "type-bold" | "type-italic" | "type-text" | "type-underline" | "umbrella-off" | "umbrella" | "undo" | "union" | "unlink" | "upload" | "user-check" | "user-circle" | "user-diamond" | "user-hexagon" | "user-minus" | "user-octagon" | "user-plus" | "user-settings" | "user-square" | "user-waves" | "user-x" | "users-group" | "users" | "video-slash" | "video" | "volume-check" | "volume-high" | "volume-low" | "volume-minus" | "volume-none" | "volume-plus" | "volume-slash" | "volume-x" | "watch" | "waves" | "webcam" | "wheel" | "wheelchair" | "wifi-check" | "wifi-low" | "wifi-medium" | "wifi-minus" | "wifi-plus" | "wifi-slash" | "wifi-x" | "wifi" | "wind-arrow-down" | "wind" | "winds" | "wine" | "wink-circle" | "wink-ghost" | "wink-square" | "wrench" | "x-circle" | "x-diamond" | "x-hexagon" | "x-octagon" | "x-square" | "x-triangle" | "x-waves" | "yen-circle" | "yen-diamond" | "yen-hexagon" | "yen-octagon" | "yen-square" | "yen-waves" | "yen" | "zap-off" | "zap" | "zero-circle" | "zero-diamond" | "zero-hexagon" | "zero-octagon" | "zero-square" | "zero-waves" | "zero", string>>;
7162
+ labelExpression: z$1.ZodString;
7163
+ attributes: z$1.ZodDefault<z$1.ZodArray<z$1.ZodType<{
7164
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7165
+ name: string;
7166
+ label: string;
7167
+ required?: boolean | undefined;
7168
+ description?: string | undefined;
7169
+ config?: Record<string, unknown> | undefined;
7170
+ }, unknown, z$1.core.$ZodTypeInternals<{
7171
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7172
+ name: string;
7173
+ label: string;
7174
+ required?: boolean | undefined;
7175
+ description?: string | undefined;
7176
+ config?: Record<string, unknown> | undefined;
7177
+ }, unknown>>>>;
7178
+ }, z$1.core.$strict>;
7179
+ declare const destructiveSchema: z$1.ZodDefault<z$1.ZodObject<{
7180
+ attributeRemovals: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7181
+ objectName: z$1.ZodString;
7182
+ attributeName: z$1.ZodString;
7183
+ }, z$1.core.$strict>>>;
7184
+ objectRemovals: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7185
+ objectName: z$1.ZodString;
7186
+ }, z$1.core.$strict>>>;
7187
+ renames: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7188
+ objectName: z$1.ZodString;
7189
+ from: z$1.ZodString;
7190
+ to: z$1.ZodString;
7191
+ }, z$1.core.$strict>>>;
7192
+ }, z$1.core.$strict>>;
7193
+ declare const proposedDefaultViewTargetSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
7194
+ objectName: z$1.ZodString;
7195
+ viewType: z$1.ZodLiteral<"list">;
7196
+ canonicalConfig: z$1.ZodType<ListViewConfig, unknown, z$1.core.$ZodTypeInternals<ListViewConfig, unknown>>;
7197
+ baselineToken: z$1.ZodOptional<z$1.ZodString>;
7198
+ }, z$1.core.$strict>, z$1.ZodObject<{
7199
+ objectName: z$1.ZodString;
7200
+ viewType: z$1.ZodLiteral<"detail">;
7201
+ canonicalConfig: z$1.ZodType<DetailViewConfig, unknown, z$1.core.$ZodTypeInternals<DetailViewConfig, unknown>>;
7202
+ baselineToken: z$1.ZodOptional<z$1.ZodString>;
7203
+ }, z$1.core.$strict>], "viewType">;
7204
+ declare const persistedDefaultViewTargetSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
7205
+ baseConfigHash: z$1.ZodNullable<z$1.ZodString>;
7206
+ targetConfigHash: z$1.ZodString;
7207
+ baselineOrigin: z$1.ZodEnum<{
7208
+ persisted: "persisted";
7209
+ generated: "generated";
7210
+ absent: "absent";
7211
+ }>;
7212
+ objectName: z$1.ZodString;
7213
+ viewType: z$1.ZodLiteral<"list">;
7214
+ canonicalConfig: z$1.ZodType<ListViewConfig, unknown, z$1.core.$ZodTypeInternals<ListViewConfig, unknown>>;
7215
+ }, z$1.core.$strict>, z$1.ZodObject<{
7216
+ baseConfigHash: z$1.ZodNullable<z$1.ZodString>;
7217
+ targetConfigHash: z$1.ZodString;
7218
+ baselineOrigin: z$1.ZodEnum<{
7219
+ persisted: "persisted";
7220
+ generated: "generated";
7221
+ absent: "absent";
7222
+ }>;
7223
+ objectName: z$1.ZodString;
7224
+ viewType: z$1.ZodLiteral<"detail">;
7225
+ canonicalConfig: z$1.ZodType<DetailViewConfig, unknown, z$1.core.$ZodTypeInternals<DetailViewConfig, unknown>>;
7226
+ }, z$1.core.$strict>], "viewType">;
7227
+ declare const structuralSchemaPlanSchema: z$1.ZodObject<{
7228
+ schemaPlanVersion: z$1.ZodLiteral<2>;
7229
+ summary: z$1.ZodString;
7230
+ additive: z$1.ZodDefault<z$1.ZodObject<{
7231
+ objects: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7232
+ name: z$1.ZodString;
7233
+ label: z$1.ZodString;
7234
+ pluralLabel: z$1.ZodOptional<z$1.ZodString>;
7235
+ description: z$1.ZodOptional<z$1.ZodString>;
7236
+ icon: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<"path" | "one" | "location" | "user" | "search" | "repeat" | "anchor" | "link" | "at" | "sort" | "map" | "filter" | "target" | "key" | "label" | "x" | "a-arrow-down" | "a-arrow-up" | "academic-hat" | "accessibility" | "activity-square" | "activity" | "add-queue" | "aeroplane" | "air-conditioner" | "airplay" | "airpods" | "alarm-check" | "alarm-minus" | "alarm-plus" | "alarm-smoke" | "alarm-snooze" | "alarm-x" | "alarm" | "album" | "align-bottom" | "align-horizontal" | "align-left" | "align-right" | "align-top" | "align-vertical" | "alt" | "ambulance" | "ampersand-square" | "ampersand" | "ampersands" | "angry-circle" | "angry-ghost" | "angry-square" | "annoyed-circle" | "annoyed-ghost" | "annoyed-square" | "aperture" | "api" | "ar" | "archive" | "arrow-diagonal-one" | "arrow-diagonal-two" | "arrow-down-circle" | "arrow-down-left-circle" | "arrow-down-left-square" | "arrow-down-left-waves" | "arrow-down-left" | "arrow-down-right-circle" | "arrow-down-right-square" | "arrow-down-right-waves" | "arrow-down-right" | "arrow-down-square" | "arrow-down-waves" | "arrow-down" | "arrow-left-circle" | "arrow-left-right" | "arrow-left-square" | "arrow-left-waves" | "arrow-left" | "arrow-long-down-left" | "arrow-long-down-right" | "arrow-long-down" | "arrow-long-left" | "arrow-long-right" | "arrow-long-up-left" | "arrow-long-up-right" | "arrow-long-up" | "arrow-right-circle" | "arrow-right-square" | "arrow-right-waves" | "arrow-right" | "arrow-up-circle" | "arrow-up-down" | "arrow-up-left-circle" | "arrow-up-left-square" | "arrow-up-left-waves" | "arrow-up-left" | "arrow-up-right-circle" | "arrow-up-right-square" | "arrow-up-right-waves" | "arrow-up-right" | "arrow-up-square" | "arrow-up-waves" | "arrow-up" | "asterisk-circle" | "asterisk-diamond" | "asterisk-hexagon" | "asterisk-octagon" | "asterisk-square" | "asterisk-waves" | "atom" | "baby" | "backpack" | "badge" | "baggage-claim" | "ban" | "bank" | "baseball" | "bath" | "battery-charging-four" | "battery-charging-one" | "battery-charging-three" | "battery-charging-two" | "battery-charging" | "battery-check" | "battery-empty" | "battery-full" | "battery-minus" | "battery-plus" | "battery-x" | "bell-check" | "bell-home" | "bell-minus" | "bell-on" | "bell-plus" | "bell-slash" | "bell-snooze" | "bell-user" | "bell-x" | "bell" | "binoculars" | "bitcoin-circle" | "bitcoin-diamond" | "bitcoin-hexagon" | "bitcoin-octagon" | "bitcoin-square" | "bitcoin-waves" | "bitcoin" | "bluetooth" | "boat" | "book-check" | "book-dot" | "book-home" | "book-image" | "book-minus" | "book-open" | "book-plus" | "book-slash" | "book-snooze" | "book-user" | "book-x" | "book" | "bookmark-check" | "bookmark-dot" | "bookmark-home" | "bookmark-minus" | "bookmark-plus" | "bookmark-slash" | "bookmark-snooze" | "bookmark-user" | "bookmark-x" | "bookmark" | "bounding-box" | "bowl" | "box" | "brand-chrome" | "brand-codepen" | "brand-codesandbox" | "brand-dribbble" | "brand-facebook" | "brand-figma" | "brand-framer" | "brand-github" | "brand-gitlab" | "brand-google" | "brand-instagram" | "brand-linkedin" | "brand-pinterest" | "brand-pocket" | "brand-slack" | "brand-spotify" | "brand-telegram" | "brand-threads" | "brand-trello" | "brand-twitch" | "brand-twitter" | "brand-x" | "brand-youtube" | "briefcase-conveyor-belt" | "briefcase" | "brightness-high" | "brightness-low" | "bubbles" | "building-one" | "building" | "cable-car" | "cake" | "calendar-check" | "calendar-down" | "calendar-minus" | "calendar-plus" | "calendar-slash" | "calendar-up" | "calendar-x" | "calendar" | "camera-slash" | "camera" | "campfire" | "cannabis" | "caravan" | "cart-check" | "cart-minus" | "cart-plus" | "cart-x" | "cart" | "cast-screen" | "center-focus" | "chart-area" | "chart-bar-big" | "chart-bar-decreasing" | "chart-bar-increasing" | "chart-bar-one" | "chart-bar-stacked" | "chart-bar" | "chart-bubble" | "chart-candlestick" | "chart-column-big" | "chart-column-decreasing" | "chart-column-increasing" | "chart-column-stacked" | "chart-column" | "chart-gantt" | "chart-graph" | "chart-line" | "chart-network" | "chart-no-axes-column-decreasing" | "chart-no-axes-column-increasing" | "chart-no-axes-column" | "chart-no-axes-combined" | "chart-no-axes-gantt" | "chart-pie-one" | "chart-pie-two" | "chart-pie" | "chart-scatter" | "chart-spline" | "chat-check" | "chat-dots" | "chat-messages" | "chat-minus" | "chat-plus" | "chat-x" | "chat" | "check-circle-one" | "check-circle" | "check-diamond" | "check-hexagon" | "check-octagon" | "check-square-one" | "check-square" | "check-waves" | "check" | "chevron-double-down-left" | "chevron-double-down-right" | "chevron-double-down" | "chevron-double-left" | "chevron-double-right" | "chevron-double-up-left" | "chevron-double-up-right" | "chevron-double-up" | "chevron-down-circle" | "chevron-down-left-circle" | "chevron-down-left-square" | "chevron-down-left-waves" | "chevron-down-left" | "chevron-down-right-circle" | "chevron-down-right-square" | "chevron-down-right-waves" | "chevron-down-right" | "chevron-down-square" | "chevron-down-waves" | "chevron-down" | "chevron-left-circle" | "chevron-left-square" | "chevron-left-waves" | "chevron-left" | "chevron-right-circle" | "chevron-right-square" | "chevron-right-waves" | "chevron-right" | "chevron-up-circle" | "chevron-up-down" | "chevron-up-left-circle" | "chevron-up-left-square" | "chevron-up-left-waves" | "chevron-up-left" | "chevron-up-right-circle" | "chevron-up-right-square" | "chevron-up-right-waves" | "chevron-up-right" | "chevron-up-square" | "chevron-up-waves" | "chevron-up" | "chip" | "cigarette-off" | "cigarette" | "circle-dashed" | "circle-half-circle" | "circle-half" | "circle-notch" | "circle" | "click" | "clipboard" | "clock-circle" | "clock-diamond" | "clock-eight" | "clock-eleven" | "clock-five" | "clock-four" | "clock-hand" | "clock-hexagon" | "clock-nine" | "clock-octagon" | "clock-one" | "clock-seven" | "clock-six" | "clock-square" | "clock-ten" | "clock-three" | "clock-twelve" | "clock-two" | "clock-waves" | "cloud-download" | "cloud-drizzle" | "cloud-fog" | "cloud-hail" | "cloud-lightning" | "cloud-moon-rain" | "cloud-moon" | "cloud-off" | "cloud-rain-wind" | "cloud-rain" | "cloud-snow" | "cloud-sun-rain" | "cloud-sun" | "cloud-upload" | "cloud" | "cloudy" | "cocktail" | "code-circle" | "code-diamond" | "code-hexagon" | "code-octagon" | "code-square" | "code-waves" | "code" | "coffee" | "cog-four" | "cog-one" | "cog-three" | "cog-two" | "cog" | "columns" | "command" | "compass" | "components" | "confetti" | "config-vertical" | "config" | "contactless-circle" | "contactless" | "controller" | "cookie" | "copy" | "copyleft" | "copyright-slash" | "copyright" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "credit-card-check" | "credit-card-minus" | "credit-card-plus" | "credit-card-x" | "credit-card" | "croissant" | "crop" | "crosshair" | "cupcake" | "danger-circle" | "danger-diamond" | "danger-hexagon" | "danger-octagon" | "danger-square" | "danger-triangle" | "danger-waves" | "danger" | "database" | "daze-circle" | "daze-ghost" | "daze-square" | "delete" | "desktop" | "diamond" | "dice-five" | "dice-four" | "dice-one" | "dice-six" | "dice-three" | "dice-two" | "dislike" | "divide" | "dollar-circle" | "dollar-diamond" | "dollar-hexagon" | "dollar-octagon" | "dollar-square" | "dollar-waves" | "dollar" | "door-closed-locked" | "door-closed" | "door-open" | "dots-circle" | "dots-diamond" | "dots-hexagon" | "dots-octagon" | "dots-square" | "dots-vertical-circle" | "dots-vertical-diamond" | "dots-vertical-hexagon" | "dots-vertical-octagon" | "dots-vertical-square" | "dots-vertical-waves" | "dots-vertical" | "dots-waves" | "dots" | "download" | "drop" | "droplet-off" | "droplet" | "droplets" | "ear-slash" | "ear" | "earth" | "eclipse" | "edit-one" | "edit" | "egg" | "eight-circle" | "eight-diamond" | "eight-hexagon" | "eight-octagon" | "eight-square" | "eight-waves" | "eight" | "elevator" | "envelope-open" | "envelope" | "euro-circle" | "euro-diamond" | "euro-hexagon" | "euro-octagon" | "euro-square" | "euro-waves" | "euro" | "exclude" | "external-link" | "eye-slash" | "eye" | "face-id" | "fat-arrow-down-left" | "fat-arrow-down-right" | "fat-arrow-down" | "fat-arrow-left" | "fat-arrow-right" | "fat-arrow-up-left" | "fat-arrow-up-right" | "fat-arrow-up" | "fat-corner-down-left" | "fat-corner-down-right" | "fat-corner-left-down" | "fat-corner-left-up" | "fat-corner-right-down" | "fat-corner-right-up" | "fat-corner-up-left" | "fat-corner-up-right" | "female" | "file-check" | "file-minus" | "file-plus" | "file-text" | "file-x" | "file" | "film" | "filter-one" | "fine-tune" | "fire" | "five-circle" | "five-diamond" | "five-hexagon" | "five-octagon" | "five-square" | "five-waves" | "five" | "flag-one" | "flag" | "flame-kindling" | "flame" | "flask" | "flower-2" | "flower" | "folder-check" | "folder-heart" | "folder-kanban" | "folder-minus" | "folder-one" | "folder-plus" | "folder-slash" | "folder-two" | "folder-x" | "folder" | "forward-circle" | "forward-diamond" | "forward-hexagon" | "forward-octagon" | "forward-square" | "forward-waves" | "forward" | "four-circle" | "four-diamond" | "four-hexagon" | "four-octagon" | "four-square" | "four-waves" | "four" | "frame" | "funny-circle" | "funny-ghost" | "funny-square" | "gift" | "git-branch" | "git-circle" | "git-commit" | "git-diamond" | "git-diff" | "git-hexagon" | "git-merge" | "git-octagon" | "git-pull-request" | "git-square" | "git-waves" | "glasses" | "globe" | "grid-one" | "grid" | "hand" | "hard-drive" | "hash-circle" | "hash-diamond" | "hash-hexagon" | "hash-octagon" | "hash-square" | "hash-waves" | "hash" | "haze" | "heading-five" | "heading-four" | "heading-one" | "heading-six" | "heading-three" | "heading-two" | "heading" | "headphones" | "heart-broken" | "heart-check" | "heart-circle" | "heart-diamond" | "heart-dot" | "heart-hexagon" | "heart-home" | "heart-minus" | "heart-octagon" | "heart-plus" | "heart-slash" | "heart-snooze" | "heart-square" | "heart-user" | "heart-waves" | "heart-x" | "heart" | "hexagon" | "home-check" | "home-minus" | "home-plus" | "home-smile" | "home-x" | "home" | "image-circle" | "image-rectangle" | "image" | "inbox-archive" | "inbox-check" | "inbox-down" | "inbox-minus" | "inbox-plus" | "inbox-up" | "inbox-x" | "inbox" | "incognito" | "indifferent-circle" | "indifferent-ghost" | "indifferent-square" | "infinity" | "info-circle" | "info-diamond" | "info-hexagon" | "info-octagon" | "info-square" | "info-triangle" | "info-waves" | "info" | "intersect" | "kanban" | "keyboard-brightness-high" | "keyboard-brightness-low" | "keyboard" | "lamp" | "layers-one" | "layers-three" | "layers-two" | "layout" | "leaf" | "leaves" | "letter-a-circle" | "letter-a-diamond" | "letter-a-hexagon" | "letter-a-octagon" | "letter-a-square" | "letter-a-waves" | "letter-a" | "letter-b-circle" | "letter-b-diamond" | "letter-b-hexagon" | "letter-b-octagon" | "letter-b-square" | "letter-b-waves" | "letter-b" | "letter-c-circle" | "letter-c-diamond" | "letter-c-hexagon" | "letter-c-octagon" | "letter-c-square" | "letter-c-waves" | "letter-c" | "letter-d-circle" | "letter-d-diamond" | "letter-d-hexagon" | "letter-d-octagon" | "letter-d-square" | "letter-d-waves" | "letter-d" | "letter-e-circle" | "letter-e-diamond" | "letter-e-hexagon" | "letter-e-octagon" | "letter-e-square" | "letter-e-waves" | "letter-e" | "letter-f-circle" | "letter-f-diamond" | "letter-f-hexagon" | "letter-f-octagon" | "letter-f-square" | "letter-f-waves" | "letter-f" | "letter-g-circle" | "letter-g-diamond" | "letter-g-hexagon" | "letter-g-octagon" | "letter-g-square" | "letter-g-waves" | "letter-g" | "letter-h-circle" | "letter-h-diamond" | "letter-h-hexagon" | "letter-h-octagon" | "letter-h-square" | "letter-h-waves" | "letter-h" | "letter-i-circle" | "letter-i-diamond" | "letter-i-hexagon" | "letter-i-octagon" | "letter-i-square" | "letter-i-waves" | "letter-i" | "letter-j-circle" | "letter-j-diamond" | "letter-j-hexagon" | "letter-j-octagon" | "letter-j-square" | "letter-j-waves" | "letter-j" | "letter-k-circle" | "letter-k-diamond" | "letter-k-hexagon" | "letter-k-octagon" | "letter-k-square" | "letter-k-waves" | "letter-k" | "letter-l-circle" | "letter-l-diamond" | "letter-l-hexagon" | "letter-l-octagon" | "letter-l-square" | "letter-l-waves" | "letter-l" | "letter-m-circle" | "letter-m-diamond" | "letter-m-hexagon" | "letter-m-octagon" | "letter-m-square" | "letter-m-waves" | "letter-m" | "letter-n-circle" | "letter-n-diamond" | "letter-n-hexagon" | "letter-n-octagon" | "letter-n-square" | "letter-n-waves" | "letter-n" | "letter-o-circle" | "letter-o-diamond" | "letter-o-hexagon" | "letter-o-octagon" | "letter-o-square" | "letter-o-waves" | "letter-o" | "letter-p-circle" | "letter-p-diamond" | "letter-p-hexagon" | "letter-p-octagon" | "letter-p-square" | "letter-p-waves" | "letter-p" | "letter-q-circle" | "letter-q-diamond" | "letter-q-hexagon" | "letter-q-octagon" | "letter-q-square" | "letter-q-waves" | "letter-q" | "letter-r-circle" | "letter-r-diamond" | "letter-r-hexagon" | "letter-r-octagon" | "letter-r-square" | "letter-r-waves" | "letter-r" | "letter-s-circle" | "letter-s-diamond" | "letter-s-hexagon" | "letter-s-octagon" | "letter-s-square" | "letter-s-waves" | "letter-s" | "letter-t-circle" | "letter-t-diamond" | "letter-t-hexagon" | "letter-t-octagon" | "letter-t-square" | "letter-t-waves" | "letter-t" | "letter-u-circle" | "letter-u-diamond" | "letter-u-hexagon" | "letter-u-octagon" | "letter-u-square" | "letter-u-waves" | "letter-u" | "letter-v-circle" | "letter-v-diamond" | "letter-v-hexagon" | "letter-v-octagon" | "letter-v-square" | "letter-v-waves" | "letter-v" | "letter-w-circle" | "letter-w-diamond" | "letter-w-hexagon" | "letter-w-octagon" | "letter-w-square" | "letter-w-waves" | "letter-w" | "letter-x-circle" | "letter-x-diamond" | "letter-x-hexagon" | "letter-x-octagon" | "letter-x-square" | "letter-x-waves" | "letter-x" | "letter-y-circle" | "letter-y-diamond" | "letter-y-hexagon" | "letter-y-octagon" | "letter-y-square" | "letter-y-waves" | "letter-y" | "letter-z-circle" | "letter-z-diamond" | "letter-z-hexagon" | "letter-z-octagon" | "letter-z-square" | "letter-z-waves" | "letter-z" | "lightning-off" | "lightning" | "like" | "line-chart-circle" | "line-chart-diamond" | "line-chart-hexagon" | "line-chart-octagon" | "line-chart-square" | "line-chart-waves" | "link-one" | "link-two" | "list-check" | "list-number" | "list" | "location-check" | "location-home" | "location-minus" | "location-plus" | "location-selected" | "location-slash" | "location-snooze" | "location-user" | "location-x" | "lock-circle" | "lock-diamond" | "lock-hexagon" | "lock-keyhole" | "lock-octagon" | "lock-open-keyhole" | "lock-open-password" | "lock-open" | "lock-password" | "lock-square" | "lock-waves" | "lock" | "login" | "logout" | "magnet" | "male" | "mask" | "math-square" | "math" | "maximize-one" | "maximize" | "menu" | "message-check" | "message-dots" | "message-minus" | "message-plus" | "message-reply" | "message-x" | "message" | "microphone-slash" | "microphone" | "minimize-one" | "minimize" | "minus-circle" | "minus-diamond" | "minus-hexagon" | "minus-octagon" | "minus-square" | "minus-waves" | "minus" | "mobile-signal-five" | "mobile-signal-four" | "mobile-signal-one" | "mobile-signal-three" | "mobile-signal-two" | "mobile" | "moon-star" | "moon" | "mountain-snow" | "mountain" | "mouse-pointer" | "move-diagonal-one" | "move-diagonal" | "move-horizontal" | "move-vertical" | "move" | "music-circle" | "music-diamond" | "music-hexagon" | "music-octagon" | "music-square" | "music-waves" | "music" | "myna" | "navigation-one" | "navigation" | "nine-circle" | "nine-diamond" | "nine-hexagon" | "nine-octagon" | "nine-square" | "nine-waves" | "nine" | "notification" | "octagon" | "one-circle" | "one-diamond" | "one-hexagon" | "one-octagon" | "one-square" | "one-waves" | "option" | "package" | "paint" | "panel-bottom-close" | "panel-bottom-inactive" | "panel-bottom-open" | "panel-bottom" | "panel-left-close" | "panel-left-inactive" | "panel-left-open" | "panel-left" | "panel-right-close" | "panel-right-inactive" | "panel-right-open" | "panel-right" | "panel-top-close" | "panel-top-inactive" | "panel-top-open" | "panel-top" | "paperclip" | "parking" | "password" | "pause-circle" | "pause-diamond" | "pause-hexagon" | "pause-octagon" | "pause-square" | "pause-waves" | "pause" | "pen" | "pencil" | "percentage-circle" | "percentage-diamond" | "percentage-hexagon" | "percentage-octagon" | "percentage-square" | "percentage-waves" | "percentage" | "pin" | "pizza" | "planet" | "play-circle" | "play-diamond" | "play-hexagon" | "play-octagon" | "play-square" | "play-waves" | "play" | "plus-circle" | "plus-diamond" | "plus-hexagon" | "plus-octagon" | "plus-square" | "plus-waves" | "plus" | "pokeball" | "power" | "presentation" | "printer" | "puzzle" | "question-circle" | "question-diamond" | "question-hexagon" | "question-octagon" | "question-square" | "question-waves" | "question" | "radio" | "rainbow" | "reception-bell" | "record" | "rectangle-vertical" | "rectangle" | "redo" | "refresh-alt" | "refresh" | "rewind-circle" | "rewind-diamond" | "rewind-hexagon" | "rewind-octagon" | "rewind-square" | "rewind-waves" | "rewind" | "rhombus" | "ribbon" | "rocket" | "room-service" | "rows" | "rss" | "ruler" | "rupee-circle" | "rupee-diamond" | "rupee-hexagon" | "rupee-octagon" | "rupee-square" | "rupee-waves" | "rupee" | "sad-circle" | "sad-ghost" | "sad-square" | "save" | "scan" | "scissors" | "sea-waves" | "search-check" | "search-circle" | "search-diamond" | "search-dot" | "search-hexagon" | "search-home" | "search-minus" | "search-octagon" | "search-plus" | "search-slash" | "search-snooze" | "search-square" | "search-user" | "search-waves" | "search-x" | "select-multiple" | "send" | "servers" | "seven-circle" | "seven-diamond" | "seven-hexagon" | "seven-octagon" | "seven-square" | "seven-waves" | "seven" | "share" | "shell" | "shield-check" | "shield-crossed" | "shield-minus" | "shield-one" | "shield-plus" | "shield-slash" | "shield-two" | "shield-x" | "shield" | "shooting-star" | "shopping-bag" | "shovel" | "shrub" | "shuffle-alt" | "shuffle" | "sidebar-alt" | "sidebar" | "signal-circle" | "signal-diamond" | "signal-hexagon" | "signal-octagon" | "signal-square" | "signal-waves" | "signal" | "six-circle" | "six-diamond" | "six-hexagon" | "six-octagon" | "six-square" | "six-waves" | "six" | "skip-back" | "skip-forward" | "slash-circle" | "slash-diamond" | "slash-hexagon" | "slash-octagon" | "slash-square" | "slash-waves" | "smile-circle" | "smile-ghost" | "smile-square" | "snow" | "snowflake" | "sofa" | "sparkles" | "speaker" | "spinner-one" | "spinner" | "sprout" | "square-chart-gantt" | "square-dashed-kanban" | "square-dashed" | "square-half" | "square-kanban" | "square" | "star" | "stop-circle" | "stop-diamond" | "stop-hexagon" | "stop-octagon" | "stop-square" | "stop-waves" | "stop" | "store" | "subtract" | "sun-dim" | "sun-medium" | "sun-snow" | "sun" | "sunrise" | "sunset" | "support" | "swatches" | "table" | "tablet" | "tag-plus" | "tag" | "tally-five" | "tally-four" | "tally-one" | "tally-three" | "tally-two" | "telephone-call" | "telephone-forward" | "telephone-in" | "telephone-missed" | "telephone-out" | "telephone-slash" | "telephone" | "tent-tree" | "tent" | "terminal" | "text-align-center" | "text-align-left" | "text-align-right" | "text-justify" | "thermometer-snowflake" | "thermometer-sun" | "thermometer" | "three-circle" | "three-diamond" | "three-hexagon" | "three-octagon" | "three-square" | "three-waves" | "three" | "ticket-slash" | "ticket" | "toggle-left" | "toggle-right" | "tool" | "tornado" | "train" | "trash-one" | "trash-two" | "trash" | "tree-deciduous" | "tree-palm" | "tree-pine" | "tree" | "trees" | "trending-down" | "trending-up-down" | "trending-up" | "triangle" | "truck" | "tv" | "two-circle" | "two-diamond" | "two-hexagon" | "two-octagon" | "two-square" | "two-waves" | "two" | "type-bold" | "type-italic" | "type-text" | "type-underline" | "umbrella-off" | "umbrella" | "undo" | "union" | "unlink" | "upload" | "user-check" | "user-circle" | "user-diamond" | "user-hexagon" | "user-minus" | "user-octagon" | "user-plus" | "user-settings" | "user-square" | "user-waves" | "user-x" | "users-group" | "users" | "video-slash" | "video" | "volume-check" | "volume-high" | "volume-low" | "volume-minus" | "volume-none" | "volume-plus" | "volume-slash" | "volume-x" | "watch" | "waves" | "webcam" | "wheel" | "wheelchair" | "wifi-check" | "wifi-low" | "wifi-medium" | "wifi-minus" | "wifi-plus" | "wifi-slash" | "wifi-x" | "wifi" | "wind-arrow-down" | "wind" | "winds" | "wine" | "wink-circle" | "wink-ghost" | "wink-square" | "wrench" | "x-circle" | "x-diamond" | "x-hexagon" | "x-octagon" | "x-square" | "x-triangle" | "x-waves" | "yen-circle" | "yen-diamond" | "yen-hexagon" | "yen-octagon" | "yen-square" | "yen-waves" | "yen" | "zap-off" | "zap" | "zero-circle" | "zero-diamond" | "zero-hexagon" | "zero-octagon" | "zero-square" | "zero-waves" | "zero", string>>;
7237
+ labelExpression: z$1.ZodString;
7238
+ attributes: z$1.ZodDefault<z$1.ZodArray<z$1.ZodType<{
7239
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7240
+ name: string;
7241
+ label: string;
7242
+ required?: boolean | undefined;
7243
+ description?: string | undefined;
7244
+ config?: Record<string, unknown> | undefined;
7245
+ }, unknown, z$1.core.$ZodTypeInternals<{
7246
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7247
+ name: string;
7248
+ label: string;
7249
+ required?: boolean | undefined;
7250
+ description?: string | undefined;
7251
+ config?: Record<string, unknown> | undefined;
7252
+ }, unknown>>>>;
7253
+ }, z$1.core.$strict>>>;
7254
+ attributes: z$1.ZodDefault<z$1.ZodArray<z$1.ZodType<{
7255
+ objectName: string;
7256
+ name: string;
7257
+ label: string;
7258
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7259
+ config?: Record<string, unknown> | undefined;
7260
+ required?: boolean | undefined;
7261
+ description?: string | undefined;
7262
+ }, unknown, z$1.core.$ZodTypeInternals<{
7263
+ objectName: string;
7264
+ name: string;
7265
+ label: string;
7266
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7267
+ config?: Record<string, unknown> | undefined;
7268
+ required?: boolean | undefined;
7269
+ description?: string | undefined;
7270
+ }, unknown>>>>;
7271
+ viewUpdates: z$1.ZodDefault<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
7272
+ objectName: z$1.ZodString;
7273
+ viewType: z$1.ZodLiteral<"list">;
7274
+ canonicalConfig: z$1.ZodType<ListViewConfig, unknown, z$1.core.$ZodTypeInternals<ListViewConfig, unknown>>;
7275
+ baselineToken: z$1.ZodOptional<z$1.ZodString>;
7276
+ }, z$1.core.$strict>, z$1.ZodObject<{
7277
+ objectName: z$1.ZodString;
7278
+ viewType: z$1.ZodLiteral<"detail">;
7279
+ canonicalConfig: z$1.ZodType<DetailViewConfig, unknown, z$1.core.$ZodTypeInternals<DetailViewConfig, unknown>>;
7280
+ baselineToken: z$1.ZodOptional<z$1.ZodString>;
7281
+ }, z$1.core.$strict>], "viewType">>>;
7282
+ }, z$1.core.$strict>>;
7283
+ destructive: z$1.ZodDefault<z$1.ZodObject<{
7284
+ attributeRemovals: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7285
+ objectName: z$1.ZodString;
7286
+ attributeName: z$1.ZodString;
7287
+ }, z$1.core.$strict>>>;
7288
+ objectRemovals: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7289
+ objectName: z$1.ZodString;
7290
+ }, z$1.core.$strict>>>;
7291
+ renames: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7292
+ objectName: z$1.ZodString;
7293
+ from: z$1.ZodString;
7294
+ to: z$1.ZodString;
7295
+ }, z$1.core.$strict>>>;
7296
+ }, z$1.core.$strict>>;
7297
+ }, z$1.core.$strict>;
7298
+ /**
7299
+ * The strict model-facing parser. Raw JSON safety and bytes are bounded before
7300
+ * defaults materialize; the structural parser then enforces the version literal
7301
+ * and mutation coherence. `shape` is retained for the AI tool's expected-key
7302
+ * diagnostics.
7303
+ */
7304
+ declare const schemaPlanSchema: z$1.ZodPreprocess<z$1.ZodObject<{
7305
+ schemaPlanVersion: z$1.ZodLiteral<2>;
7306
+ summary: z$1.ZodString;
7307
+ additive: z$1.ZodDefault<z$1.ZodObject<{
7308
+ objects: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7309
+ name: z$1.ZodString;
7310
+ label: z$1.ZodString;
7311
+ pluralLabel: z$1.ZodOptional<z$1.ZodString>;
7312
+ description: z$1.ZodOptional<z$1.ZodString>;
7313
+ icon: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<"path" | "one" | "location" | "user" | "search" | "repeat" | "anchor" | "link" | "at" | "sort" | "map" | "filter" | "target" | "key" | "label" | "x" | "a-arrow-down" | "a-arrow-up" | "academic-hat" | "accessibility" | "activity-square" | "activity" | "add-queue" | "aeroplane" | "air-conditioner" | "airplay" | "airpods" | "alarm-check" | "alarm-minus" | "alarm-plus" | "alarm-smoke" | "alarm-snooze" | "alarm-x" | "alarm" | "album" | "align-bottom" | "align-horizontal" | "align-left" | "align-right" | "align-top" | "align-vertical" | "alt" | "ambulance" | "ampersand-square" | "ampersand" | "ampersands" | "angry-circle" | "angry-ghost" | "angry-square" | "annoyed-circle" | "annoyed-ghost" | "annoyed-square" | "aperture" | "api" | "ar" | "archive" | "arrow-diagonal-one" | "arrow-diagonal-two" | "arrow-down-circle" | "arrow-down-left-circle" | "arrow-down-left-square" | "arrow-down-left-waves" | "arrow-down-left" | "arrow-down-right-circle" | "arrow-down-right-square" | "arrow-down-right-waves" | "arrow-down-right" | "arrow-down-square" | "arrow-down-waves" | "arrow-down" | "arrow-left-circle" | "arrow-left-right" | "arrow-left-square" | "arrow-left-waves" | "arrow-left" | "arrow-long-down-left" | "arrow-long-down-right" | "arrow-long-down" | "arrow-long-left" | "arrow-long-right" | "arrow-long-up-left" | "arrow-long-up-right" | "arrow-long-up" | "arrow-right-circle" | "arrow-right-square" | "arrow-right-waves" | "arrow-right" | "arrow-up-circle" | "arrow-up-down" | "arrow-up-left-circle" | "arrow-up-left-square" | "arrow-up-left-waves" | "arrow-up-left" | "arrow-up-right-circle" | "arrow-up-right-square" | "arrow-up-right-waves" | "arrow-up-right" | "arrow-up-square" | "arrow-up-waves" | "arrow-up" | "asterisk-circle" | "asterisk-diamond" | "asterisk-hexagon" | "asterisk-octagon" | "asterisk-square" | "asterisk-waves" | "atom" | "baby" | "backpack" | "badge" | "baggage-claim" | "ban" | "bank" | "baseball" | "bath" | "battery-charging-four" | "battery-charging-one" | "battery-charging-three" | "battery-charging-two" | "battery-charging" | "battery-check" | "battery-empty" | "battery-full" | "battery-minus" | "battery-plus" | "battery-x" | "bell-check" | "bell-home" | "bell-minus" | "bell-on" | "bell-plus" | "bell-slash" | "bell-snooze" | "bell-user" | "bell-x" | "bell" | "binoculars" | "bitcoin-circle" | "bitcoin-diamond" | "bitcoin-hexagon" | "bitcoin-octagon" | "bitcoin-square" | "bitcoin-waves" | "bitcoin" | "bluetooth" | "boat" | "book-check" | "book-dot" | "book-home" | "book-image" | "book-minus" | "book-open" | "book-plus" | "book-slash" | "book-snooze" | "book-user" | "book-x" | "book" | "bookmark-check" | "bookmark-dot" | "bookmark-home" | "bookmark-minus" | "bookmark-plus" | "bookmark-slash" | "bookmark-snooze" | "bookmark-user" | "bookmark-x" | "bookmark" | "bounding-box" | "bowl" | "box" | "brand-chrome" | "brand-codepen" | "brand-codesandbox" | "brand-dribbble" | "brand-facebook" | "brand-figma" | "brand-framer" | "brand-github" | "brand-gitlab" | "brand-google" | "brand-instagram" | "brand-linkedin" | "brand-pinterest" | "brand-pocket" | "brand-slack" | "brand-spotify" | "brand-telegram" | "brand-threads" | "brand-trello" | "brand-twitch" | "brand-twitter" | "brand-x" | "brand-youtube" | "briefcase-conveyor-belt" | "briefcase" | "brightness-high" | "brightness-low" | "bubbles" | "building-one" | "building" | "cable-car" | "cake" | "calendar-check" | "calendar-down" | "calendar-minus" | "calendar-plus" | "calendar-slash" | "calendar-up" | "calendar-x" | "calendar" | "camera-slash" | "camera" | "campfire" | "cannabis" | "caravan" | "cart-check" | "cart-minus" | "cart-plus" | "cart-x" | "cart" | "cast-screen" | "center-focus" | "chart-area" | "chart-bar-big" | "chart-bar-decreasing" | "chart-bar-increasing" | "chart-bar-one" | "chart-bar-stacked" | "chart-bar" | "chart-bubble" | "chart-candlestick" | "chart-column-big" | "chart-column-decreasing" | "chart-column-increasing" | "chart-column-stacked" | "chart-column" | "chart-gantt" | "chart-graph" | "chart-line" | "chart-network" | "chart-no-axes-column-decreasing" | "chart-no-axes-column-increasing" | "chart-no-axes-column" | "chart-no-axes-combined" | "chart-no-axes-gantt" | "chart-pie-one" | "chart-pie-two" | "chart-pie" | "chart-scatter" | "chart-spline" | "chat-check" | "chat-dots" | "chat-messages" | "chat-minus" | "chat-plus" | "chat-x" | "chat" | "check-circle-one" | "check-circle" | "check-diamond" | "check-hexagon" | "check-octagon" | "check-square-one" | "check-square" | "check-waves" | "check" | "chevron-double-down-left" | "chevron-double-down-right" | "chevron-double-down" | "chevron-double-left" | "chevron-double-right" | "chevron-double-up-left" | "chevron-double-up-right" | "chevron-double-up" | "chevron-down-circle" | "chevron-down-left-circle" | "chevron-down-left-square" | "chevron-down-left-waves" | "chevron-down-left" | "chevron-down-right-circle" | "chevron-down-right-square" | "chevron-down-right-waves" | "chevron-down-right" | "chevron-down-square" | "chevron-down-waves" | "chevron-down" | "chevron-left-circle" | "chevron-left-square" | "chevron-left-waves" | "chevron-left" | "chevron-right-circle" | "chevron-right-square" | "chevron-right-waves" | "chevron-right" | "chevron-up-circle" | "chevron-up-down" | "chevron-up-left-circle" | "chevron-up-left-square" | "chevron-up-left-waves" | "chevron-up-left" | "chevron-up-right-circle" | "chevron-up-right-square" | "chevron-up-right-waves" | "chevron-up-right" | "chevron-up-square" | "chevron-up-waves" | "chevron-up" | "chip" | "cigarette-off" | "cigarette" | "circle-dashed" | "circle-half-circle" | "circle-half" | "circle-notch" | "circle" | "click" | "clipboard" | "clock-circle" | "clock-diamond" | "clock-eight" | "clock-eleven" | "clock-five" | "clock-four" | "clock-hand" | "clock-hexagon" | "clock-nine" | "clock-octagon" | "clock-one" | "clock-seven" | "clock-six" | "clock-square" | "clock-ten" | "clock-three" | "clock-twelve" | "clock-two" | "clock-waves" | "cloud-download" | "cloud-drizzle" | "cloud-fog" | "cloud-hail" | "cloud-lightning" | "cloud-moon-rain" | "cloud-moon" | "cloud-off" | "cloud-rain-wind" | "cloud-rain" | "cloud-snow" | "cloud-sun-rain" | "cloud-sun" | "cloud-upload" | "cloud" | "cloudy" | "cocktail" | "code-circle" | "code-diamond" | "code-hexagon" | "code-octagon" | "code-square" | "code-waves" | "code" | "coffee" | "cog-four" | "cog-one" | "cog-three" | "cog-two" | "cog" | "columns" | "command" | "compass" | "components" | "confetti" | "config-vertical" | "config" | "contactless-circle" | "contactless" | "controller" | "cookie" | "copy" | "copyleft" | "copyright-slash" | "copyright" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "credit-card-check" | "credit-card-minus" | "credit-card-plus" | "credit-card-x" | "credit-card" | "croissant" | "crop" | "crosshair" | "cupcake" | "danger-circle" | "danger-diamond" | "danger-hexagon" | "danger-octagon" | "danger-square" | "danger-triangle" | "danger-waves" | "danger" | "database" | "daze-circle" | "daze-ghost" | "daze-square" | "delete" | "desktop" | "diamond" | "dice-five" | "dice-four" | "dice-one" | "dice-six" | "dice-three" | "dice-two" | "dislike" | "divide" | "dollar-circle" | "dollar-diamond" | "dollar-hexagon" | "dollar-octagon" | "dollar-square" | "dollar-waves" | "dollar" | "door-closed-locked" | "door-closed" | "door-open" | "dots-circle" | "dots-diamond" | "dots-hexagon" | "dots-octagon" | "dots-square" | "dots-vertical-circle" | "dots-vertical-diamond" | "dots-vertical-hexagon" | "dots-vertical-octagon" | "dots-vertical-square" | "dots-vertical-waves" | "dots-vertical" | "dots-waves" | "dots" | "download" | "drop" | "droplet-off" | "droplet" | "droplets" | "ear-slash" | "ear" | "earth" | "eclipse" | "edit-one" | "edit" | "egg" | "eight-circle" | "eight-diamond" | "eight-hexagon" | "eight-octagon" | "eight-square" | "eight-waves" | "eight" | "elevator" | "envelope-open" | "envelope" | "euro-circle" | "euro-diamond" | "euro-hexagon" | "euro-octagon" | "euro-square" | "euro-waves" | "euro" | "exclude" | "external-link" | "eye-slash" | "eye" | "face-id" | "fat-arrow-down-left" | "fat-arrow-down-right" | "fat-arrow-down" | "fat-arrow-left" | "fat-arrow-right" | "fat-arrow-up-left" | "fat-arrow-up-right" | "fat-arrow-up" | "fat-corner-down-left" | "fat-corner-down-right" | "fat-corner-left-down" | "fat-corner-left-up" | "fat-corner-right-down" | "fat-corner-right-up" | "fat-corner-up-left" | "fat-corner-up-right" | "female" | "file-check" | "file-minus" | "file-plus" | "file-text" | "file-x" | "file" | "film" | "filter-one" | "fine-tune" | "fire" | "five-circle" | "five-diamond" | "five-hexagon" | "five-octagon" | "five-square" | "five-waves" | "five" | "flag-one" | "flag" | "flame-kindling" | "flame" | "flask" | "flower-2" | "flower" | "folder-check" | "folder-heart" | "folder-kanban" | "folder-minus" | "folder-one" | "folder-plus" | "folder-slash" | "folder-two" | "folder-x" | "folder" | "forward-circle" | "forward-diamond" | "forward-hexagon" | "forward-octagon" | "forward-square" | "forward-waves" | "forward" | "four-circle" | "four-diamond" | "four-hexagon" | "four-octagon" | "four-square" | "four-waves" | "four" | "frame" | "funny-circle" | "funny-ghost" | "funny-square" | "gift" | "git-branch" | "git-circle" | "git-commit" | "git-diamond" | "git-diff" | "git-hexagon" | "git-merge" | "git-octagon" | "git-pull-request" | "git-square" | "git-waves" | "glasses" | "globe" | "grid-one" | "grid" | "hand" | "hard-drive" | "hash-circle" | "hash-diamond" | "hash-hexagon" | "hash-octagon" | "hash-square" | "hash-waves" | "hash" | "haze" | "heading-five" | "heading-four" | "heading-one" | "heading-six" | "heading-three" | "heading-two" | "heading" | "headphones" | "heart-broken" | "heart-check" | "heart-circle" | "heart-diamond" | "heart-dot" | "heart-hexagon" | "heart-home" | "heart-minus" | "heart-octagon" | "heart-plus" | "heart-slash" | "heart-snooze" | "heart-square" | "heart-user" | "heart-waves" | "heart-x" | "heart" | "hexagon" | "home-check" | "home-minus" | "home-plus" | "home-smile" | "home-x" | "home" | "image-circle" | "image-rectangle" | "image" | "inbox-archive" | "inbox-check" | "inbox-down" | "inbox-minus" | "inbox-plus" | "inbox-up" | "inbox-x" | "inbox" | "incognito" | "indifferent-circle" | "indifferent-ghost" | "indifferent-square" | "infinity" | "info-circle" | "info-diamond" | "info-hexagon" | "info-octagon" | "info-square" | "info-triangle" | "info-waves" | "info" | "intersect" | "kanban" | "keyboard-brightness-high" | "keyboard-brightness-low" | "keyboard" | "lamp" | "layers-one" | "layers-three" | "layers-two" | "layout" | "leaf" | "leaves" | "letter-a-circle" | "letter-a-diamond" | "letter-a-hexagon" | "letter-a-octagon" | "letter-a-square" | "letter-a-waves" | "letter-a" | "letter-b-circle" | "letter-b-diamond" | "letter-b-hexagon" | "letter-b-octagon" | "letter-b-square" | "letter-b-waves" | "letter-b" | "letter-c-circle" | "letter-c-diamond" | "letter-c-hexagon" | "letter-c-octagon" | "letter-c-square" | "letter-c-waves" | "letter-c" | "letter-d-circle" | "letter-d-diamond" | "letter-d-hexagon" | "letter-d-octagon" | "letter-d-square" | "letter-d-waves" | "letter-d" | "letter-e-circle" | "letter-e-diamond" | "letter-e-hexagon" | "letter-e-octagon" | "letter-e-square" | "letter-e-waves" | "letter-e" | "letter-f-circle" | "letter-f-diamond" | "letter-f-hexagon" | "letter-f-octagon" | "letter-f-square" | "letter-f-waves" | "letter-f" | "letter-g-circle" | "letter-g-diamond" | "letter-g-hexagon" | "letter-g-octagon" | "letter-g-square" | "letter-g-waves" | "letter-g" | "letter-h-circle" | "letter-h-diamond" | "letter-h-hexagon" | "letter-h-octagon" | "letter-h-square" | "letter-h-waves" | "letter-h" | "letter-i-circle" | "letter-i-diamond" | "letter-i-hexagon" | "letter-i-octagon" | "letter-i-square" | "letter-i-waves" | "letter-i" | "letter-j-circle" | "letter-j-diamond" | "letter-j-hexagon" | "letter-j-octagon" | "letter-j-square" | "letter-j-waves" | "letter-j" | "letter-k-circle" | "letter-k-diamond" | "letter-k-hexagon" | "letter-k-octagon" | "letter-k-square" | "letter-k-waves" | "letter-k" | "letter-l-circle" | "letter-l-diamond" | "letter-l-hexagon" | "letter-l-octagon" | "letter-l-square" | "letter-l-waves" | "letter-l" | "letter-m-circle" | "letter-m-diamond" | "letter-m-hexagon" | "letter-m-octagon" | "letter-m-square" | "letter-m-waves" | "letter-m" | "letter-n-circle" | "letter-n-diamond" | "letter-n-hexagon" | "letter-n-octagon" | "letter-n-square" | "letter-n-waves" | "letter-n" | "letter-o-circle" | "letter-o-diamond" | "letter-o-hexagon" | "letter-o-octagon" | "letter-o-square" | "letter-o-waves" | "letter-o" | "letter-p-circle" | "letter-p-diamond" | "letter-p-hexagon" | "letter-p-octagon" | "letter-p-square" | "letter-p-waves" | "letter-p" | "letter-q-circle" | "letter-q-diamond" | "letter-q-hexagon" | "letter-q-octagon" | "letter-q-square" | "letter-q-waves" | "letter-q" | "letter-r-circle" | "letter-r-diamond" | "letter-r-hexagon" | "letter-r-octagon" | "letter-r-square" | "letter-r-waves" | "letter-r" | "letter-s-circle" | "letter-s-diamond" | "letter-s-hexagon" | "letter-s-octagon" | "letter-s-square" | "letter-s-waves" | "letter-s" | "letter-t-circle" | "letter-t-diamond" | "letter-t-hexagon" | "letter-t-octagon" | "letter-t-square" | "letter-t-waves" | "letter-t" | "letter-u-circle" | "letter-u-diamond" | "letter-u-hexagon" | "letter-u-octagon" | "letter-u-square" | "letter-u-waves" | "letter-u" | "letter-v-circle" | "letter-v-diamond" | "letter-v-hexagon" | "letter-v-octagon" | "letter-v-square" | "letter-v-waves" | "letter-v" | "letter-w-circle" | "letter-w-diamond" | "letter-w-hexagon" | "letter-w-octagon" | "letter-w-square" | "letter-w-waves" | "letter-w" | "letter-x-circle" | "letter-x-diamond" | "letter-x-hexagon" | "letter-x-octagon" | "letter-x-square" | "letter-x-waves" | "letter-x" | "letter-y-circle" | "letter-y-diamond" | "letter-y-hexagon" | "letter-y-octagon" | "letter-y-square" | "letter-y-waves" | "letter-y" | "letter-z-circle" | "letter-z-diamond" | "letter-z-hexagon" | "letter-z-octagon" | "letter-z-square" | "letter-z-waves" | "letter-z" | "lightning-off" | "lightning" | "like" | "line-chart-circle" | "line-chart-diamond" | "line-chart-hexagon" | "line-chart-octagon" | "line-chart-square" | "line-chart-waves" | "link-one" | "link-two" | "list-check" | "list-number" | "list" | "location-check" | "location-home" | "location-minus" | "location-plus" | "location-selected" | "location-slash" | "location-snooze" | "location-user" | "location-x" | "lock-circle" | "lock-diamond" | "lock-hexagon" | "lock-keyhole" | "lock-octagon" | "lock-open-keyhole" | "lock-open-password" | "lock-open" | "lock-password" | "lock-square" | "lock-waves" | "lock" | "login" | "logout" | "magnet" | "male" | "mask" | "math-square" | "math" | "maximize-one" | "maximize" | "menu" | "message-check" | "message-dots" | "message-minus" | "message-plus" | "message-reply" | "message-x" | "message" | "microphone-slash" | "microphone" | "minimize-one" | "minimize" | "minus-circle" | "minus-diamond" | "minus-hexagon" | "minus-octagon" | "minus-square" | "minus-waves" | "minus" | "mobile-signal-five" | "mobile-signal-four" | "mobile-signal-one" | "mobile-signal-three" | "mobile-signal-two" | "mobile" | "moon-star" | "moon" | "mountain-snow" | "mountain" | "mouse-pointer" | "move-diagonal-one" | "move-diagonal" | "move-horizontal" | "move-vertical" | "move" | "music-circle" | "music-diamond" | "music-hexagon" | "music-octagon" | "music-square" | "music-waves" | "music" | "myna" | "navigation-one" | "navigation" | "nine-circle" | "nine-diamond" | "nine-hexagon" | "nine-octagon" | "nine-square" | "nine-waves" | "nine" | "notification" | "octagon" | "one-circle" | "one-diamond" | "one-hexagon" | "one-octagon" | "one-square" | "one-waves" | "option" | "package" | "paint" | "panel-bottom-close" | "panel-bottom-inactive" | "panel-bottom-open" | "panel-bottom" | "panel-left-close" | "panel-left-inactive" | "panel-left-open" | "panel-left" | "panel-right-close" | "panel-right-inactive" | "panel-right-open" | "panel-right" | "panel-top-close" | "panel-top-inactive" | "panel-top-open" | "panel-top" | "paperclip" | "parking" | "password" | "pause-circle" | "pause-diamond" | "pause-hexagon" | "pause-octagon" | "pause-square" | "pause-waves" | "pause" | "pen" | "pencil" | "percentage-circle" | "percentage-diamond" | "percentage-hexagon" | "percentage-octagon" | "percentage-square" | "percentage-waves" | "percentage" | "pin" | "pizza" | "planet" | "play-circle" | "play-diamond" | "play-hexagon" | "play-octagon" | "play-square" | "play-waves" | "play" | "plus-circle" | "plus-diamond" | "plus-hexagon" | "plus-octagon" | "plus-square" | "plus-waves" | "plus" | "pokeball" | "power" | "presentation" | "printer" | "puzzle" | "question-circle" | "question-diamond" | "question-hexagon" | "question-octagon" | "question-square" | "question-waves" | "question" | "radio" | "rainbow" | "reception-bell" | "record" | "rectangle-vertical" | "rectangle" | "redo" | "refresh-alt" | "refresh" | "rewind-circle" | "rewind-diamond" | "rewind-hexagon" | "rewind-octagon" | "rewind-square" | "rewind-waves" | "rewind" | "rhombus" | "ribbon" | "rocket" | "room-service" | "rows" | "rss" | "ruler" | "rupee-circle" | "rupee-diamond" | "rupee-hexagon" | "rupee-octagon" | "rupee-square" | "rupee-waves" | "rupee" | "sad-circle" | "sad-ghost" | "sad-square" | "save" | "scan" | "scissors" | "sea-waves" | "search-check" | "search-circle" | "search-diamond" | "search-dot" | "search-hexagon" | "search-home" | "search-minus" | "search-octagon" | "search-plus" | "search-slash" | "search-snooze" | "search-square" | "search-user" | "search-waves" | "search-x" | "select-multiple" | "send" | "servers" | "seven-circle" | "seven-diamond" | "seven-hexagon" | "seven-octagon" | "seven-square" | "seven-waves" | "seven" | "share" | "shell" | "shield-check" | "shield-crossed" | "shield-minus" | "shield-one" | "shield-plus" | "shield-slash" | "shield-two" | "shield-x" | "shield" | "shooting-star" | "shopping-bag" | "shovel" | "shrub" | "shuffle-alt" | "shuffle" | "sidebar-alt" | "sidebar" | "signal-circle" | "signal-diamond" | "signal-hexagon" | "signal-octagon" | "signal-square" | "signal-waves" | "signal" | "six-circle" | "six-diamond" | "six-hexagon" | "six-octagon" | "six-square" | "six-waves" | "six" | "skip-back" | "skip-forward" | "slash-circle" | "slash-diamond" | "slash-hexagon" | "slash-octagon" | "slash-square" | "slash-waves" | "smile-circle" | "smile-ghost" | "smile-square" | "snow" | "snowflake" | "sofa" | "sparkles" | "speaker" | "spinner-one" | "spinner" | "sprout" | "square-chart-gantt" | "square-dashed-kanban" | "square-dashed" | "square-half" | "square-kanban" | "square" | "star" | "stop-circle" | "stop-diamond" | "stop-hexagon" | "stop-octagon" | "stop-square" | "stop-waves" | "stop" | "store" | "subtract" | "sun-dim" | "sun-medium" | "sun-snow" | "sun" | "sunrise" | "sunset" | "support" | "swatches" | "table" | "tablet" | "tag-plus" | "tag" | "tally-five" | "tally-four" | "tally-one" | "tally-three" | "tally-two" | "telephone-call" | "telephone-forward" | "telephone-in" | "telephone-missed" | "telephone-out" | "telephone-slash" | "telephone" | "tent-tree" | "tent" | "terminal" | "text-align-center" | "text-align-left" | "text-align-right" | "text-justify" | "thermometer-snowflake" | "thermometer-sun" | "thermometer" | "three-circle" | "three-diamond" | "three-hexagon" | "three-octagon" | "three-square" | "three-waves" | "three" | "ticket-slash" | "ticket" | "toggle-left" | "toggle-right" | "tool" | "tornado" | "train" | "trash-one" | "trash-two" | "trash" | "tree-deciduous" | "tree-palm" | "tree-pine" | "tree" | "trees" | "trending-down" | "trending-up-down" | "trending-up" | "triangle" | "truck" | "tv" | "two-circle" | "two-diamond" | "two-hexagon" | "two-octagon" | "two-square" | "two-waves" | "two" | "type-bold" | "type-italic" | "type-text" | "type-underline" | "umbrella-off" | "umbrella" | "undo" | "union" | "unlink" | "upload" | "user-check" | "user-circle" | "user-diamond" | "user-hexagon" | "user-minus" | "user-octagon" | "user-plus" | "user-settings" | "user-square" | "user-waves" | "user-x" | "users-group" | "users" | "video-slash" | "video" | "volume-check" | "volume-high" | "volume-low" | "volume-minus" | "volume-none" | "volume-plus" | "volume-slash" | "volume-x" | "watch" | "waves" | "webcam" | "wheel" | "wheelchair" | "wifi-check" | "wifi-low" | "wifi-medium" | "wifi-minus" | "wifi-plus" | "wifi-slash" | "wifi-x" | "wifi" | "wind-arrow-down" | "wind" | "winds" | "wine" | "wink-circle" | "wink-ghost" | "wink-square" | "wrench" | "x-circle" | "x-diamond" | "x-hexagon" | "x-octagon" | "x-square" | "x-triangle" | "x-waves" | "yen-circle" | "yen-diamond" | "yen-hexagon" | "yen-octagon" | "yen-square" | "yen-waves" | "yen" | "zap-off" | "zap" | "zero-circle" | "zero-diamond" | "zero-hexagon" | "zero-octagon" | "zero-square" | "zero-waves" | "zero", string>>;
7314
+ labelExpression: z$1.ZodString;
7315
+ attributes: z$1.ZodDefault<z$1.ZodArray<z$1.ZodType<{
7316
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7317
+ name: string;
7318
+ label: string;
7319
+ required?: boolean | undefined;
7320
+ description?: string | undefined;
7321
+ config?: Record<string, unknown> | undefined;
7322
+ }, unknown, z$1.core.$ZodTypeInternals<{
7323
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7324
+ name: string;
7325
+ label: string;
7326
+ required?: boolean | undefined;
7327
+ description?: string | undefined;
7328
+ config?: Record<string, unknown> | undefined;
7329
+ }, unknown>>>>;
7330
+ }, z$1.core.$strict>>>;
7331
+ attributes: z$1.ZodDefault<z$1.ZodArray<z$1.ZodType<{
7332
+ objectName: string;
7333
+ name: string;
7334
+ label: string;
7335
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7336
+ config?: Record<string, unknown> | undefined;
7337
+ required?: boolean | undefined;
7338
+ description?: string | undefined;
7339
+ }, unknown, z$1.core.$ZodTypeInternals<{
7340
+ objectName: string;
7341
+ name: string;
7342
+ label: string;
7343
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7344
+ config?: Record<string, unknown> | undefined;
7345
+ required?: boolean | undefined;
7346
+ description?: string | undefined;
7347
+ }, unknown>>>>;
7348
+ viewUpdates: z$1.ZodDefault<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
7349
+ objectName: z$1.ZodString;
7350
+ viewType: z$1.ZodLiteral<"list">;
7351
+ canonicalConfig: z$1.ZodType<ListViewConfig, unknown, z$1.core.$ZodTypeInternals<ListViewConfig, unknown>>;
7352
+ baselineToken: z$1.ZodOptional<z$1.ZodString>;
7353
+ }, z$1.core.$strict>, z$1.ZodObject<{
7354
+ objectName: z$1.ZodString;
7355
+ viewType: z$1.ZodLiteral<"detail">;
7356
+ canonicalConfig: z$1.ZodType<DetailViewConfig, unknown, z$1.core.$ZodTypeInternals<DetailViewConfig, unknown>>;
7357
+ baselineToken: z$1.ZodOptional<z$1.ZodString>;
7358
+ }, z$1.core.$strict>], "viewType">>>;
7359
+ }, z$1.core.$strict>>;
7360
+ destructive: z$1.ZodDefault<z$1.ZodObject<{
7361
+ attributeRemovals: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7362
+ objectName: z$1.ZodString;
7363
+ attributeName: z$1.ZodString;
7364
+ }, z$1.core.$strict>>>;
7365
+ objectRemovals: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7366
+ objectName: z$1.ZodString;
7367
+ }, z$1.core.$strict>>>;
7368
+ renames: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7369
+ objectName: z$1.ZodString;
7370
+ from: z$1.ZodString;
7371
+ to: z$1.ZodString;
7372
+ }, z$1.core.$strict>>>;
7373
+ }, z$1.core.$strict>>;
7374
+ }, z$1.core.$strict>> & {
7375
+ shape: {
7376
+ schemaPlanVersion: z$1.ZodLiteral<2>;
7377
+ summary: z$1.ZodString;
7378
+ additive: z$1.ZodDefault<z$1.ZodObject<{
7379
+ objects: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7380
+ name: z$1.ZodString;
7381
+ label: z$1.ZodString;
7382
+ pluralLabel: z$1.ZodOptional<z$1.ZodString>;
7383
+ description: z$1.ZodOptional<z$1.ZodString>;
7384
+ icon: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<"path" | "one" | "location" | "user" | "search" | "repeat" | "anchor" | "link" | "at" | "sort" | "map" | "filter" | "target" | "key" | "label" | "x" | "a-arrow-down" | "a-arrow-up" | "academic-hat" | "accessibility" | "activity-square" | "activity" | "add-queue" | "aeroplane" | "air-conditioner" | "airplay" | "airpods" | "alarm-check" | "alarm-minus" | "alarm-plus" | "alarm-smoke" | "alarm-snooze" | "alarm-x" | "alarm" | "album" | "align-bottom" | "align-horizontal" | "align-left" | "align-right" | "align-top" | "align-vertical" | "alt" | "ambulance" | "ampersand-square" | "ampersand" | "ampersands" | "angry-circle" | "angry-ghost" | "angry-square" | "annoyed-circle" | "annoyed-ghost" | "annoyed-square" | "aperture" | "api" | "ar" | "archive" | "arrow-diagonal-one" | "arrow-diagonal-two" | "arrow-down-circle" | "arrow-down-left-circle" | "arrow-down-left-square" | "arrow-down-left-waves" | "arrow-down-left" | "arrow-down-right-circle" | "arrow-down-right-square" | "arrow-down-right-waves" | "arrow-down-right" | "arrow-down-square" | "arrow-down-waves" | "arrow-down" | "arrow-left-circle" | "arrow-left-right" | "arrow-left-square" | "arrow-left-waves" | "arrow-left" | "arrow-long-down-left" | "arrow-long-down-right" | "arrow-long-down" | "arrow-long-left" | "arrow-long-right" | "arrow-long-up-left" | "arrow-long-up-right" | "arrow-long-up" | "arrow-right-circle" | "arrow-right-square" | "arrow-right-waves" | "arrow-right" | "arrow-up-circle" | "arrow-up-down" | "arrow-up-left-circle" | "arrow-up-left-square" | "arrow-up-left-waves" | "arrow-up-left" | "arrow-up-right-circle" | "arrow-up-right-square" | "arrow-up-right-waves" | "arrow-up-right" | "arrow-up-square" | "arrow-up-waves" | "arrow-up" | "asterisk-circle" | "asterisk-diamond" | "asterisk-hexagon" | "asterisk-octagon" | "asterisk-square" | "asterisk-waves" | "atom" | "baby" | "backpack" | "badge" | "baggage-claim" | "ban" | "bank" | "baseball" | "bath" | "battery-charging-four" | "battery-charging-one" | "battery-charging-three" | "battery-charging-two" | "battery-charging" | "battery-check" | "battery-empty" | "battery-full" | "battery-minus" | "battery-plus" | "battery-x" | "bell-check" | "bell-home" | "bell-minus" | "bell-on" | "bell-plus" | "bell-slash" | "bell-snooze" | "bell-user" | "bell-x" | "bell" | "binoculars" | "bitcoin-circle" | "bitcoin-diamond" | "bitcoin-hexagon" | "bitcoin-octagon" | "bitcoin-square" | "bitcoin-waves" | "bitcoin" | "bluetooth" | "boat" | "book-check" | "book-dot" | "book-home" | "book-image" | "book-minus" | "book-open" | "book-plus" | "book-slash" | "book-snooze" | "book-user" | "book-x" | "book" | "bookmark-check" | "bookmark-dot" | "bookmark-home" | "bookmark-minus" | "bookmark-plus" | "bookmark-slash" | "bookmark-snooze" | "bookmark-user" | "bookmark-x" | "bookmark" | "bounding-box" | "bowl" | "box" | "brand-chrome" | "brand-codepen" | "brand-codesandbox" | "brand-dribbble" | "brand-facebook" | "brand-figma" | "brand-framer" | "brand-github" | "brand-gitlab" | "brand-google" | "brand-instagram" | "brand-linkedin" | "brand-pinterest" | "brand-pocket" | "brand-slack" | "brand-spotify" | "brand-telegram" | "brand-threads" | "brand-trello" | "brand-twitch" | "brand-twitter" | "brand-x" | "brand-youtube" | "briefcase-conveyor-belt" | "briefcase" | "brightness-high" | "brightness-low" | "bubbles" | "building-one" | "building" | "cable-car" | "cake" | "calendar-check" | "calendar-down" | "calendar-minus" | "calendar-plus" | "calendar-slash" | "calendar-up" | "calendar-x" | "calendar" | "camera-slash" | "camera" | "campfire" | "cannabis" | "caravan" | "cart-check" | "cart-minus" | "cart-plus" | "cart-x" | "cart" | "cast-screen" | "center-focus" | "chart-area" | "chart-bar-big" | "chart-bar-decreasing" | "chart-bar-increasing" | "chart-bar-one" | "chart-bar-stacked" | "chart-bar" | "chart-bubble" | "chart-candlestick" | "chart-column-big" | "chart-column-decreasing" | "chart-column-increasing" | "chart-column-stacked" | "chart-column" | "chart-gantt" | "chart-graph" | "chart-line" | "chart-network" | "chart-no-axes-column-decreasing" | "chart-no-axes-column-increasing" | "chart-no-axes-column" | "chart-no-axes-combined" | "chart-no-axes-gantt" | "chart-pie-one" | "chart-pie-two" | "chart-pie" | "chart-scatter" | "chart-spline" | "chat-check" | "chat-dots" | "chat-messages" | "chat-minus" | "chat-plus" | "chat-x" | "chat" | "check-circle-one" | "check-circle" | "check-diamond" | "check-hexagon" | "check-octagon" | "check-square-one" | "check-square" | "check-waves" | "check" | "chevron-double-down-left" | "chevron-double-down-right" | "chevron-double-down" | "chevron-double-left" | "chevron-double-right" | "chevron-double-up-left" | "chevron-double-up-right" | "chevron-double-up" | "chevron-down-circle" | "chevron-down-left-circle" | "chevron-down-left-square" | "chevron-down-left-waves" | "chevron-down-left" | "chevron-down-right-circle" | "chevron-down-right-square" | "chevron-down-right-waves" | "chevron-down-right" | "chevron-down-square" | "chevron-down-waves" | "chevron-down" | "chevron-left-circle" | "chevron-left-square" | "chevron-left-waves" | "chevron-left" | "chevron-right-circle" | "chevron-right-square" | "chevron-right-waves" | "chevron-right" | "chevron-up-circle" | "chevron-up-down" | "chevron-up-left-circle" | "chevron-up-left-square" | "chevron-up-left-waves" | "chevron-up-left" | "chevron-up-right-circle" | "chevron-up-right-square" | "chevron-up-right-waves" | "chevron-up-right" | "chevron-up-square" | "chevron-up-waves" | "chevron-up" | "chip" | "cigarette-off" | "cigarette" | "circle-dashed" | "circle-half-circle" | "circle-half" | "circle-notch" | "circle" | "click" | "clipboard" | "clock-circle" | "clock-diamond" | "clock-eight" | "clock-eleven" | "clock-five" | "clock-four" | "clock-hand" | "clock-hexagon" | "clock-nine" | "clock-octagon" | "clock-one" | "clock-seven" | "clock-six" | "clock-square" | "clock-ten" | "clock-three" | "clock-twelve" | "clock-two" | "clock-waves" | "cloud-download" | "cloud-drizzle" | "cloud-fog" | "cloud-hail" | "cloud-lightning" | "cloud-moon-rain" | "cloud-moon" | "cloud-off" | "cloud-rain-wind" | "cloud-rain" | "cloud-snow" | "cloud-sun-rain" | "cloud-sun" | "cloud-upload" | "cloud" | "cloudy" | "cocktail" | "code-circle" | "code-diamond" | "code-hexagon" | "code-octagon" | "code-square" | "code-waves" | "code" | "coffee" | "cog-four" | "cog-one" | "cog-three" | "cog-two" | "cog" | "columns" | "command" | "compass" | "components" | "confetti" | "config-vertical" | "config" | "contactless-circle" | "contactless" | "controller" | "cookie" | "copy" | "copyleft" | "copyright-slash" | "copyright" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "credit-card-check" | "credit-card-minus" | "credit-card-plus" | "credit-card-x" | "credit-card" | "croissant" | "crop" | "crosshair" | "cupcake" | "danger-circle" | "danger-diamond" | "danger-hexagon" | "danger-octagon" | "danger-square" | "danger-triangle" | "danger-waves" | "danger" | "database" | "daze-circle" | "daze-ghost" | "daze-square" | "delete" | "desktop" | "diamond" | "dice-five" | "dice-four" | "dice-one" | "dice-six" | "dice-three" | "dice-two" | "dislike" | "divide" | "dollar-circle" | "dollar-diamond" | "dollar-hexagon" | "dollar-octagon" | "dollar-square" | "dollar-waves" | "dollar" | "door-closed-locked" | "door-closed" | "door-open" | "dots-circle" | "dots-diamond" | "dots-hexagon" | "dots-octagon" | "dots-square" | "dots-vertical-circle" | "dots-vertical-diamond" | "dots-vertical-hexagon" | "dots-vertical-octagon" | "dots-vertical-square" | "dots-vertical-waves" | "dots-vertical" | "dots-waves" | "dots" | "download" | "drop" | "droplet-off" | "droplet" | "droplets" | "ear-slash" | "ear" | "earth" | "eclipse" | "edit-one" | "edit" | "egg" | "eight-circle" | "eight-diamond" | "eight-hexagon" | "eight-octagon" | "eight-square" | "eight-waves" | "eight" | "elevator" | "envelope-open" | "envelope" | "euro-circle" | "euro-diamond" | "euro-hexagon" | "euro-octagon" | "euro-square" | "euro-waves" | "euro" | "exclude" | "external-link" | "eye-slash" | "eye" | "face-id" | "fat-arrow-down-left" | "fat-arrow-down-right" | "fat-arrow-down" | "fat-arrow-left" | "fat-arrow-right" | "fat-arrow-up-left" | "fat-arrow-up-right" | "fat-arrow-up" | "fat-corner-down-left" | "fat-corner-down-right" | "fat-corner-left-down" | "fat-corner-left-up" | "fat-corner-right-down" | "fat-corner-right-up" | "fat-corner-up-left" | "fat-corner-up-right" | "female" | "file-check" | "file-minus" | "file-plus" | "file-text" | "file-x" | "file" | "film" | "filter-one" | "fine-tune" | "fire" | "five-circle" | "five-diamond" | "five-hexagon" | "five-octagon" | "five-square" | "five-waves" | "five" | "flag-one" | "flag" | "flame-kindling" | "flame" | "flask" | "flower-2" | "flower" | "folder-check" | "folder-heart" | "folder-kanban" | "folder-minus" | "folder-one" | "folder-plus" | "folder-slash" | "folder-two" | "folder-x" | "folder" | "forward-circle" | "forward-diamond" | "forward-hexagon" | "forward-octagon" | "forward-square" | "forward-waves" | "forward" | "four-circle" | "four-diamond" | "four-hexagon" | "four-octagon" | "four-square" | "four-waves" | "four" | "frame" | "funny-circle" | "funny-ghost" | "funny-square" | "gift" | "git-branch" | "git-circle" | "git-commit" | "git-diamond" | "git-diff" | "git-hexagon" | "git-merge" | "git-octagon" | "git-pull-request" | "git-square" | "git-waves" | "glasses" | "globe" | "grid-one" | "grid" | "hand" | "hard-drive" | "hash-circle" | "hash-diamond" | "hash-hexagon" | "hash-octagon" | "hash-square" | "hash-waves" | "hash" | "haze" | "heading-five" | "heading-four" | "heading-one" | "heading-six" | "heading-three" | "heading-two" | "heading" | "headphones" | "heart-broken" | "heart-check" | "heart-circle" | "heart-diamond" | "heart-dot" | "heart-hexagon" | "heart-home" | "heart-minus" | "heart-octagon" | "heart-plus" | "heart-slash" | "heart-snooze" | "heart-square" | "heart-user" | "heart-waves" | "heart-x" | "heart" | "hexagon" | "home-check" | "home-minus" | "home-plus" | "home-smile" | "home-x" | "home" | "image-circle" | "image-rectangle" | "image" | "inbox-archive" | "inbox-check" | "inbox-down" | "inbox-minus" | "inbox-plus" | "inbox-up" | "inbox-x" | "inbox" | "incognito" | "indifferent-circle" | "indifferent-ghost" | "indifferent-square" | "infinity" | "info-circle" | "info-diamond" | "info-hexagon" | "info-octagon" | "info-square" | "info-triangle" | "info-waves" | "info" | "intersect" | "kanban" | "keyboard-brightness-high" | "keyboard-brightness-low" | "keyboard" | "lamp" | "layers-one" | "layers-three" | "layers-two" | "layout" | "leaf" | "leaves" | "letter-a-circle" | "letter-a-diamond" | "letter-a-hexagon" | "letter-a-octagon" | "letter-a-square" | "letter-a-waves" | "letter-a" | "letter-b-circle" | "letter-b-diamond" | "letter-b-hexagon" | "letter-b-octagon" | "letter-b-square" | "letter-b-waves" | "letter-b" | "letter-c-circle" | "letter-c-diamond" | "letter-c-hexagon" | "letter-c-octagon" | "letter-c-square" | "letter-c-waves" | "letter-c" | "letter-d-circle" | "letter-d-diamond" | "letter-d-hexagon" | "letter-d-octagon" | "letter-d-square" | "letter-d-waves" | "letter-d" | "letter-e-circle" | "letter-e-diamond" | "letter-e-hexagon" | "letter-e-octagon" | "letter-e-square" | "letter-e-waves" | "letter-e" | "letter-f-circle" | "letter-f-diamond" | "letter-f-hexagon" | "letter-f-octagon" | "letter-f-square" | "letter-f-waves" | "letter-f" | "letter-g-circle" | "letter-g-diamond" | "letter-g-hexagon" | "letter-g-octagon" | "letter-g-square" | "letter-g-waves" | "letter-g" | "letter-h-circle" | "letter-h-diamond" | "letter-h-hexagon" | "letter-h-octagon" | "letter-h-square" | "letter-h-waves" | "letter-h" | "letter-i-circle" | "letter-i-diamond" | "letter-i-hexagon" | "letter-i-octagon" | "letter-i-square" | "letter-i-waves" | "letter-i" | "letter-j-circle" | "letter-j-diamond" | "letter-j-hexagon" | "letter-j-octagon" | "letter-j-square" | "letter-j-waves" | "letter-j" | "letter-k-circle" | "letter-k-diamond" | "letter-k-hexagon" | "letter-k-octagon" | "letter-k-square" | "letter-k-waves" | "letter-k" | "letter-l-circle" | "letter-l-diamond" | "letter-l-hexagon" | "letter-l-octagon" | "letter-l-square" | "letter-l-waves" | "letter-l" | "letter-m-circle" | "letter-m-diamond" | "letter-m-hexagon" | "letter-m-octagon" | "letter-m-square" | "letter-m-waves" | "letter-m" | "letter-n-circle" | "letter-n-diamond" | "letter-n-hexagon" | "letter-n-octagon" | "letter-n-square" | "letter-n-waves" | "letter-n" | "letter-o-circle" | "letter-o-diamond" | "letter-o-hexagon" | "letter-o-octagon" | "letter-o-square" | "letter-o-waves" | "letter-o" | "letter-p-circle" | "letter-p-diamond" | "letter-p-hexagon" | "letter-p-octagon" | "letter-p-square" | "letter-p-waves" | "letter-p" | "letter-q-circle" | "letter-q-diamond" | "letter-q-hexagon" | "letter-q-octagon" | "letter-q-square" | "letter-q-waves" | "letter-q" | "letter-r-circle" | "letter-r-diamond" | "letter-r-hexagon" | "letter-r-octagon" | "letter-r-square" | "letter-r-waves" | "letter-r" | "letter-s-circle" | "letter-s-diamond" | "letter-s-hexagon" | "letter-s-octagon" | "letter-s-square" | "letter-s-waves" | "letter-s" | "letter-t-circle" | "letter-t-diamond" | "letter-t-hexagon" | "letter-t-octagon" | "letter-t-square" | "letter-t-waves" | "letter-t" | "letter-u-circle" | "letter-u-diamond" | "letter-u-hexagon" | "letter-u-octagon" | "letter-u-square" | "letter-u-waves" | "letter-u" | "letter-v-circle" | "letter-v-diamond" | "letter-v-hexagon" | "letter-v-octagon" | "letter-v-square" | "letter-v-waves" | "letter-v" | "letter-w-circle" | "letter-w-diamond" | "letter-w-hexagon" | "letter-w-octagon" | "letter-w-square" | "letter-w-waves" | "letter-w" | "letter-x-circle" | "letter-x-diamond" | "letter-x-hexagon" | "letter-x-octagon" | "letter-x-square" | "letter-x-waves" | "letter-x" | "letter-y-circle" | "letter-y-diamond" | "letter-y-hexagon" | "letter-y-octagon" | "letter-y-square" | "letter-y-waves" | "letter-y" | "letter-z-circle" | "letter-z-diamond" | "letter-z-hexagon" | "letter-z-octagon" | "letter-z-square" | "letter-z-waves" | "letter-z" | "lightning-off" | "lightning" | "like" | "line-chart-circle" | "line-chart-diamond" | "line-chart-hexagon" | "line-chart-octagon" | "line-chart-square" | "line-chart-waves" | "link-one" | "link-two" | "list-check" | "list-number" | "list" | "location-check" | "location-home" | "location-minus" | "location-plus" | "location-selected" | "location-slash" | "location-snooze" | "location-user" | "location-x" | "lock-circle" | "lock-diamond" | "lock-hexagon" | "lock-keyhole" | "lock-octagon" | "lock-open-keyhole" | "lock-open-password" | "lock-open" | "lock-password" | "lock-square" | "lock-waves" | "lock" | "login" | "logout" | "magnet" | "male" | "mask" | "math-square" | "math" | "maximize-one" | "maximize" | "menu" | "message-check" | "message-dots" | "message-minus" | "message-plus" | "message-reply" | "message-x" | "message" | "microphone-slash" | "microphone" | "minimize-one" | "minimize" | "minus-circle" | "minus-diamond" | "minus-hexagon" | "minus-octagon" | "minus-square" | "minus-waves" | "minus" | "mobile-signal-five" | "mobile-signal-four" | "mobile-signal-one" | "mobile-signal-three" | "mobile-signal-two" | "mobile" | "moon-star" | "moon" | "mountain-snow" | "mountain" | "mouse-pointer" | "move-diagonal-one" | "move-diagonal" | "move-horizontal" | "move-vertical" | "move" | "music-circle" | "music-diamond" | "music-hexagon" | "music-octagon" | "music-square" | "music-waves" | "music" | "myna" | "navigation-one" | "navigation" | "nine-circle" | "nine-diamond" | "nine-hexagon" | "nine-octagon" | "nine-square" | "nine-waves" | "nine" | "notification" | "octagon" | "one-circle" | "one-diamond" | "one-hexagon" | "one-octagon" | "one-square" | "one-waves" | "option" | "package" | "paint" | "panel-bottom-close" | "panel-bottom-inactive" | "panel-bottom-open" | "panel-bottom" | "panel-left-close" | "panel-left-inactive" | "panel-left-open" | "panel-left" | "panel-right-close" | "panel-right-inactive" | "panel-right-open" | "panel-right" | "panel-top-close" | "panel-top-inactive" | "panel-top-open" | "panel-top" | "paperclip" | "parking" | "password" | "pause-circle" | "pause-diamond" | "pause-hexagon" | "pause-octagon" | "pause-square" | "pause-waves" | "pause" | "pen" | "pencil" | "percentage-circle" | "percentage-diamond" | "percentage-hexagon" | "percentage-octagon" | "percentage-square" | "percentage-waves" | "percentage" | "pin" | "pizza" | "planet" | "play-circle" | "play-diamond" | "play-hexagon" | "play-octagon" | "play-square" | "play-waves" | "play" | "plus-circle" | "plus-diamond" | "plus-hexagon" | "plus-octagon" | "plus-square" | "plus-waves" | "plus" | "pokeball" | "power" | "presentation" | "printer" | "puzzle" | "question-circle" | "question-diamond" | "question-hexagon" | "question-octagon" | "question-square" | "question-waves" | "question" | "radio" | "rainbow" | "reception-bell" | "record" | "rectangle-vertical" | "rectangle" | "redo" | "refresh-alt" | "refresh" | "rewind-circle" | "rewind-diamond" | "rewind-hexagon" | "rewind-octagon" | "rewind-square" | "rewind-waves" | "rewind" | "rhombus" | "ribbon" | "rocket" | "room-service" | "rows" | "rss" | "ruler" | "rupee-circle" | "rupee-diamond" | "rupee-hexagon" | "rupee-octagon" | "rupee-square" | "rupee-waves" | "rupee" | "sad-circle" | "sad-ghost" | "sad-square" | "save" | "scan" | "scissors" | "sea-waves" | "search-check" | "search-circle" | "search-diamond" | "search-dot" | "search-hexagon" | "search-home" | "search-minus" | "search-octagon" | "search-plus" | "search-slash" | "search-snooze" | "search-square" | "search-user" | "search-waves" | "search-x" | "select-multiple" | "send" | "servers" | "seven-circle" | "seven-diamond" | "seven-hexagon" | "seven-octagon" | "seven-square" | "seven-waves" | "seven" | "share" | "shell" | "shield-check" | "shield-crossed" | "shield-minus" | "shield-one" | "shield-plus" | "shield-slash" | "shield-two" | "shield-x" | "shield" | "shooting-star" | "shopping-bag" | "shovel" | "shrub" | "shuffle-alt" | "shuffle" | "sidebar-alt" | "sidebar" | "signal-circle" | "signal-diamond" | "signal-hexagon" | "signal-octagon" | "signal-square" | "signal-waves" | "signal" | "six-circle" | "six-diamond" | "six-hexagon" | "six-octagon" | "six-square" | "six-waves" | "six" | "skip-back" | "skip-forward" | "slash-circle" | "slash-diamond" | "slash-hexagon" | "slash-octagon" | "slash-square" | "slash-waves" | "smile-circle" | "smile-ghost" | "smile-square" | "snow" | "snowflake" | "sofa" | "sparkles" | "speaker" | "spinner-one" | "spinner" | "sprout" | "square-chart-gantt" | "square-dashed-kanban" | "square-dashed" | "square-half" | "square-kanban" | "square" | "star" | "stop-circle" | "stop-diamond" | "stop-hexagon" | "stop-octagon" | "stop-square" | "stop-waves" | "stop" | "store" | "subtract" | "sun-dim" | "sun-medium" | "sun-snow" | "sun" | "sunrise" | "sunset" | "support" | "swatches" | "table" | "tablet" | "tag-plus" | "tag" | "tally-five" | "tally-four" | "tally-one" | "tally-three" | "tally-two" | "telephone-call" | "telephone-forward" | "telephone-in" | "telephone-missed" | "telephone-out" | "telephone-slash" | "telephone" | "tent-tree" | "tent" | "terminal" | "text-align-center" | "text-align-left" | "text-align-right" | "text-justify" | "thermometer-snowflake" | "thermometer-sun" | "thermometer" | "three-circle" | "three-diamond" | "three-hexagon" | "three-octagon" | "three-square" | "three-waves" | "three" | "ticket-slash" | "ticket" | "toggle-left" | "toggle-right" | "tool" | "tornado" | "train" | "trash-one" | "trash-two" | "trash" | "tree-deciduous" | "tree-palm" | "tree-pine" | "tree" | "trees" | "trending-down" | "trending-up-down" | "trending-up" | "triangle" | "truck" | "tv" | "two-circle" | "two-diamond" | "two-hexagon" | "two-octagon" | "two-square" | "two-waves" | "two" | "type-bold" | "type-italic" | "type-text" | "type-underline" | "umbrella-off" | "umbrella" | "undo" | "union" | "unlink" | "upload" | "user-check" | "user-circle" | "user-diamond" | "user-hexagon" | "user-minus" | "user-octagon" | "user-plus" | "user-settings" | "user-square" | "user-waves" | "user-x" | "users-group" | "users" | "video-slash" | "video" | "volume-check" | "volume-high" | "volume-low" | "volume-minus" | "volume-none" | "volume-plus" | "volume-slash" | "volume-x" | "watch" | "waves" | "webcam" | "wheel" | "wheelchair" | "wifi-check" | "wifi-low" | "wifi-medium" | "wifi-minus" | "wifi-plus" | "wifi-slash" | "wifi-x" | "wifi" | "wind-arrow-down" | "wind" | "winds" | "wine" | "wink-circle" | "wink-ghost" | "wink-square" | "wrench" | "x-circle" | "x-diamond" | "x-hexagon" | "x-octagon" | "x-square" | "x-triangle" | "x-waves" | "yen-circle" | "yen-diamond" | "yen-hexagon" | "yen-octagon" | "yen-square" | "yen-waves" | "yen" | "zap-off" | "zap" | "zero-circle" | "zero-diamond" | "zero-hexagon" | "zero-octagon" | "zero-square" | "zero-waves" | "zero", string>>;
7385
+ labelExpression: z$1.ZodString;
7386
+ attributes: z$1.ZodDefault<z$1.ZodArray<z$1.ZodType<{
7387
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7388
+ name: string;
7389
+ label: string;
7390
+ required?: boolean | undefined;
7391
+ description?: string | undefined;
7392
+ config?: Record<string, unknown> | undefined;
7393
+ }, unknown, z$1.core.$ZodTypeInternals<{
7394
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7395
+ name: string;
7396
+ label: string;
7397
+ required?: boolean | undefined;
7398
+ description?: string | undefined;
7399
+ config?: Record<string, unknown> | undefined;
7400
+ }, unknown>>>>;
7401
+ }, z$1.core.$strict>>>;
7402
+ attributes: z$1.ZodDefault<z$1.ZodArray<z$1.ZodType<{
7403
+ objectName: string;
7404
+ name: string;
7405
+ label: string;
7406
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7407
+ config?: Record<string, unknown> | undefined;
7408
+ required?: boolean | undefined;
7409
+ description?: string | undefined;
7410
+ }, unknown, z$1.core.$ZodTypeInternals<{
7411
+ objectName: string;
7412
+ name: string;
7413
+ label: string;
7414
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7415
+ config?: Record<string, unknown> | undefined;
7416
+ required?: boolean | undefined;
7417
+ description?: string | undefined;
7418
+ }, unknown>>>>;
7419
+ viewUpdates: z$1.ZodDefault<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
7420
+ objectName: z$1.ZodString;
7421
+ viewType: z$1.ZodLiteral<"list">;
7422
+ canonicalConfig: z$1.ZodType<ListViewConfig, unknown, z$1.core.$ZodTypeInternals<ListViewConfig, unknown>>;
7423
+ baselineToken: z$1.ZodOptional<z$1.ZodString>;
7424
+ }, z$1.core.$strict>, z$1.ZodObject<{
7425
+ objectName: z$1.ZodString;
7426
+ viewType: z$1.ZodLiteral<"detail">;
7427
+ canonicalConfig: z$1.ZodType<DetailViewConfig, unknown, z$1.core.$ZodTypeInternals<DetailViewConfig, unknown>>;
7428
+ baselineToken: z$1.ZodOptional<z$1.ZodString>;
7429
+ }, z$1.core.$strict>], "viewType">>>;
7430
+ }, z$1.core.$strict>>;
7431
+ destructive: z$1.ZodDefault<z$1.ZodObject<{
7432
+ attributeRemovals: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7433
+ objectName: z$1.ZodString;
7434
+ attributeName: z$1.ZodString;
7435
+ }, z$1.core.$strict>>>;
7436
+ objectRemovals: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7437
+ objectName: z$1.ZodString;
7438
+ }, z$1.core.$strict>>>;
7439
+ renames: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7440
+ objectName: z$1.ZodString;
7441
+ from: z$1.ZodString;
7442
+ to: z$1.ZodString;
7443
+ }, z$1.core.$strict>>>;
7444
+ }, z$1.core.$strict>>;
7445
+ };
7446
+ };
7447
+ declare const persistedSchemaPlanSchema: z$1.ZodPreprocess<z$1.ZodObject<{
7448
+ schemaPlanVersion: z$1.ZodLiteral<2>;
7449
+ summary: z$1.ZodString;
7450
+ additive: z$1.ZodDefault<z$1.ZodObject<{
7451
+ objects: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7452
+ name: z$1.ZodString;
7453
+ label: z$1.ZodString;
7454
+ pluralLabel: z$1.ZodOptional<z$1.ZodString>;
7455
+ description: z$1.ZodOptional<z$1.ZodString>;
7456
+ icon: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<"path" | "one" | "location" | "user" | "search" | "repeat" | "anchor" | "link" | "at" | "sort" | "map" | "filter" | "target" | "key" | "label" | "x" | "a-arrow-down" | "a-arrow-up" | "academic-hat" | "accessibility" | "activity-square" | "activity" | "add-queue" | "aeroplane" | "air-conditioner" | "airplay" | "airpods" | "alarm-check" | "alarm-minus" | "alarm-plus" | "alarm-smoke" | "alarm-snooze" | "alarm-x" | "alarm" | "album" | "align-bottom" | "align-horizontal" | "align-left" | "align-right" | "align-top" | "align-vertical" | "alt" | "ambulance" | "ampersand-square" | "ampersand" | "ampersands" | "angry-circle" | "angry-ghost" | "angry-square" | "annoyed-circle" | "annoyed-ghost" | "annoyed-square" | "aperture" | "api" | "ar" | "archive" | "arrow-diagonal-one" | "arrow-diagonal-two" | "arrow-down-circle" | "arrow-down-left-circle" | "arrow-down-left-square" | "arrow-down-left-waves" | "arrow-down-left" | "arrow-down-right-circle" | "arrow-down-right-square" | "arrow-down-right-waves" | "arrow-down-right" | "arrow-down-square" | "arrow-down-waves" | "arrow-down" | "arrow-left-circle" | "arrow-left-right" | "arrow-left-square" | "arrow-left-waves" | "arrow-left" | "arrow-long-down-left" | "arrow-long-down-right" | "arrow-long-down" | "arrow-long-left" | "arrow-long-right" | "arrow-long-up-left" | "arrow-long-up-right" | "arrow-long-up" | "arrow-right-circle" | "arrow-right-square" | "arrow-right-waves" | "arrow-right" | "arrow-up-circle" | "arrow-up-down" | "arrow-up-left-circle" | "arrow-up-left-square" | "arrow-up-left-waves" | "arrow-up-left" | "arrow-up-right-circle" | "arrow-up-right-square" | "arrow-up-right-waves" | "arrow-up-right" | "arrow-up-square" | "arrow-up-waves" | "arrow-up" | "asterisk-circle" | "asterisk-diamond" | "asterisk-hexagon" | "asterisk-octagon" | "asterisk-square" | "asterisk-waves" | "atom" | "baby" | "backpack" | "badge" | "baggage-claim" | "ban" | "bank" | "baseball" | "bath" | "battery-charging-four" | "battery-charging-one" | "battery-charging-three" | "battery-charging-two" | "battery-charging" | "battery-check" | "battery-empty" | "battery-full" | "battery-minus" | "battery-plus" | "battery-x" | "bell-check" | "bell-home" | "bell-minus" | "bell-on" | "bell-plus" | "bell-slash" | "bell-snooze" | "bell-user" | "bell-x" | "bell" | "binoculars" | "bitcoin-circle" | "bitcoin-diamond" | "bitcoin-hexagon" | "bitcoin-octagon" | "bitcoin-square" | "bitcoin-waves" | "bitcoin" | "bluetooth" | "boat" | "book-check" | "book-dot" | "book-home" | "book-image" | "book-minus" | "book-open" | "book-plus" | "book-slash" | "book-snooze" | "book-user" | "book-x" | "book" | "bookmark-check" | "bookmark-dot" | "bookmark-home" | "bookmark-minus" | "bookmark-plus" | "bookmark-slash" | "bookmark-snooze" | "bookmark-user" | "bookmark-x" | "bookmark" | "bounding-box" | "bowl" | "box" | "brand-chrome" | "brand-codepen" | "brand-codesandbox" | "brand-dribbble" | "brand-facebook" | "brand-figma" | "brand-framer" | "brand-github" | "brand-gitlab" | "brand-google" | "brand-instagram" | "brand-linkedin" | "brand-pinterest" | "brand-pocket" | "brand-slack" | "brand-spotify" | "brand-telegram" | "brand-threads" | "brand-trello" | "brand-twitch" | "brand-twitter" | "brand-x" | "brand-youtube" | "briefcase-conveyor-belt" | "briefcase" | "brightness-high" | "brightness-low" | "bubbles" | "building-one" | "building" | "cable-car" | "cake" | "calendar-check" | "calendar-down" | "calendar-minus" | "calendar-plus" | "calendar-slash" | "calendar-up" | "calendar-x" | "calendar" | "camera-slash" | "camera" | "campfire" | "cannabis" | "caravan" | "cart-check" | "cart-minus" | "cart-plus" | "cart-x" | "cart" | "cast-screen" | "center-focus" | "chart-area" | "chart-bar-big" | "chart-bar-decreasing" | "chart-bar-increasing" | "chart-bar-one" | "chart-bar-stacked" | "chart-bar" | "chart-bubble" | "chart-candlestick" | "chart-column-big" | "chart-column-decreasing" | "chart-column-increasing" | "chart-column-stacked" | "chart-column" | "chart-gantt" | "chart-graph" | "chart-line" | "chart-network" | "chart-no-axes-column-decreasing" | "chart-no-axes-column-increasing" | "chart-no-axes-column" | "chart-no-axes-combined" | "chart-no-axes-gantt" | "chart-pie-one" | "chart-pie-two" | "chart-pie" | "chart-scatter" | "chart-spline" | "chat-check" | "chat-dots" | "chat-messages" | "chat-minus" | "chat-plus" | "chat-x" | "chat" | "check-circle-one" | "check-circle" | "check-diamond" | "check-hexagon" | "check-octagon" | "check-square-one" | "check-square" | "check-waves" | "check" | "chevron-double-down-left" | "chevron-double-down-right" | "chevron-double-down" | "chevron-double-left" | "chevron-double-right" | "chevron-double-up-left" | "chevron-double-up-right" | "chevron-double-up" | "chevron-down-circle" | "chevron-down-left-circle" | "chevron-down-left-square" | "chevron-down-left-waves" | "chevron-down-left" | "chevron-down-right-circle" | "chevron-down-right-square" | "chevron-down-right-waves" | "chevron-down-right" | "chevron-down-square" | "chevron-down-waves" | "chevron-down" | "chevron-left-circle" | "chevron-left-square" | "chevron-left-waves" | "chevron-left" | "chevron-right-circle" | "chevron-right-square" | "chevron-right-waves" | "chevron-right" | "chevron-up-circle" | "chevron-up-down" | "chevron-up-left-circle" | "chevron-up-left-square" | "chevron-up-left-waves" | "chevron-up-left" | "chevron-up-right-circle" | "chevron-up-right-square" | "chevron-up-right-waves" | "chevron-up-right" | "chevron-up-square" | "chevron-up-waves" | "chevron-up" | "chip" | "cigarette-off" | "cigarette" | "circle-dashed" | "circle-half-circle" | "circle-half" | "circle-notch" | "circle" | "click" | "clipboard" | "clock-circle" | "clock-diamond" | "clock-eight" | "clock-eleven" | "clock-five" | "clock-four" | "clock-hand" | "clock-hexagon" | "clock-nine" | "clock-octagon" | "clock-one" | "clock-seven" | "clock-six" | "clock-square" | "clock-ten" | "clock-three" | "clock-twelve" | "clock-two" | "clock-waves" | "cloud-download" | "cloud-drizzle" | "cloud-fog" | "cloud-hail" | "cloud-lightning" | "cloud-moon-rain" | "cloud-moon" | "cloud-off" | "cloud-rain-wind" | "cloud-rain" | "cloud-snow" | "cloud-sun-rain" | "cloud-sun" | "cloud-upload" | "cloud" | "cloudy" | "cocktail" | "code-circle" | "code-diamond" | "code-hexagon" | "code-octagon" | "code-square" | "code-waves" | "code" | "coffee" | "cog-four" | "cog-one" | "cog-three" | "cog-two" | "cog" | "columns" | "command" | "compass" | "components" | "confetti" | "config-vertical" | "config" | "contactless-circle" | "contactless" | "controller" | "cookie" | "copy" | "copyleft" | "copyright-slash" | "copyright" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "credit-card-check" | "credit-card-minus" | "credit-card-plus" | "credit-card-x" | "credit-card" | "croissant" | "crop" | "crosshair" | "cupcake" | "danger-circle" | "danger-diamond" | "danger-hexagon" | "danger-octagon" | "danger-square" | "danger-triangle" | "danger-waves" | "danger" | "database" | "daze-circle" | "daze-ghost" | "daze-square" | "delete" | "desktop" | "diamond" | "dice-five" | "dice-four" | "dice-one" | "dice-six" | "dice-three" | "dice-two" | "dislike" | "divide" | "dollar-circle" | "dollar-diamond" | "dollar-hexagon" | "dollar-octagon" | "dollar-square" | "dollar-waves" | "dollar" | "door-closed-locked" | "door-closed" | "door-open" | "dots-circle" | "dots-diamond" | "dots-hexagon" | "dots-octagon" | "dots-square" | "dots-vertical-circle" | "dots-vertical-diamond" | "dots-vertical-hexagon" | "dots-vertical-octagon" | "dots-vertical-square" | "dots-vertical-waves" | "dots-vertical" | "dots-waves" | "dots" | "download" | "drop" | "droplet-off" | "droplet" | "droplets" | "ear-slash" | "ear" | "earth" | "eclipse" | "edit-one" | "edit" | "egg" | "eight-circle" | "eight-diamond" | "eight-hexagon" | "eight-octagon" | "eight-square" | "eight-waves" | "eight" | "elevator" | "envelope-open" | "envelope" | "euro-circle" | "euro-diamond" | "euro-hexagon" | "euro-octagon" | "euro-square" | "euro-waves" | "euro" | "exclude" | "external-link" | "eye-slash" | "eye" | "face-id" | "fat-arrow-down-left" | "fat-arrow-down-right" | "fat-arrow-down" | "fat-arrow-left" | "fat-arrow-right" | "fat-arrow-up-left" | "fat-arrow-up-right" | "fat-arrow-up" | "fat-corner-down-left" | "fat-corner-down-right" | "fat-corner-left-down" | "fat-corner-left-up" | "fat-corner-right-down" | "fat-corner-right-up" | "fat-corner-up-left" | "fat-corner-up-right" | "female" | "file-check" | "file-minus" | "file-plus" | "file-text" | "file-x" | "file" | "film" | "filter-one" | "fine-tune" | "fire" | "five-circle" | "five-diamond" | "five-hexagon" | "five-octagon" | "five-square" | "five-waves" | "five" | "flag-one" | "flag" | "flame-kindling" | "flame" | "flask" | "flower-2" | "flower" | "folder-check" | "folder-heart" | "folder-kanban" | "folder-minus" | "folder-one" | "folder-plus" | "folder-slash" | "folder-two" | "folder-x" | "folder" | "forward-circle" | "forward-diamond" | "forward-hexagon" | "forward-octagon" | "forward-square" | "forward-waves" | "forward" | "four-circle" | "four-diamond" | "four-hexagon" | "four-octagon" | "four-square" | "four-waves" | "four" | "frame" | "funny-circle" | "funny-ghost" | "funny-square" | "gift" | "git-branch" | "git-circle" | "git-commit" | "git-diamond" | "git-diff" | "git-hexagon" | "git-merge" | "git-octagon" | "git-pull-request" | "git-square" | "git-waves" | "glasses" | "globe" | "grid-one" | "grid" | "hand" | "hard-drive" | "hash-circle" | "hash-diamond" | "hash-hexagon" | "hash-octagon" | "hash-square" | "hash-waves" | "hash" | "haze" | "heading-five" | "heading-four" | "heading-one" | "heading-six" | "heading-three" | "heading-two" | "heading" | "headphones" | "heart-broken" | "heart-check" | "heart-circle" | "heart-diamond" | "heart-dot" | "heart-hexagon" | "heart-home" | "heart-minus" | "heart-octagon" | "heart-plus" | "heart-slash" | "heart-snooze" | "heart-square" | "heart-user" | "heart-waves" | "heart-x" | "heart" | "hexagon" | "home-check" | "home-minus" | "home-plus" | "home-smile" | "home-x" | "home" | "image-circle" | "image-rectangle" | "image" | "inbox-archive" | "inbox-check" | "inbox-down" | "inbox-minus" | "inbox-plus" | "inbox-up" | "inbox-x" | "inbox" | "incognito" | "indifferent-circle" | "indifferent-ghost" | "indifferent-square" | "infinity" | "info-circle" | "info-diamond" | "info-hexagon" | "info-octagon" | "info-square" | "info-triangle" | "info-waves" | "info" | "intersect" | "kanban" | "keyboard-brightness-high" | "keyboard-brightness-low" | "keyboard" | "lamp" | "layers-one" | "layers-three" | "layers-two" | "layout" | "leaf" | "leaves" | "letter-a-circle" | "letter-a-diamond" | "letter-a-hexagon" | "letter-a-octagon" | "letter-a-square" | "letter-a-waves" | "letter-a" | "letter-b-circle" | "letter-b-diamond" | "letter-b-hexagon" | "letter-b-octagon" | "letter-b-square" | "letter-b-waves" | "letter-b" | "letter-c-circle" | "letter-c-diamond" | "letter-c-hexagon" | "letter-c-octagon" | "letter-c-square" | "letter-c-waves" | "letter-c" | "letter-d-circle" | "letter-d-diamond" | "letter-d-hexagon" | "letter-d-octagon" | "letter-d-square" | "letter-d-waves" | "letter-d" | "letter-e-circle" | "letter-e-diamond" | "letter-e-hexagon" | "letter-e-octagon" | "letter-e-square" | "letter-e-waves" | "letter-e" | "letter-f-circle" | "letter-f-diamond" | "letter-f-hexagon" | "letter-f-octagon" | "letter-f-square" | "letter-f-waves" | "letter-f" | "letter-g-circle" | "letter-g-diamond" | "letter-g-hexagon" | "letter-g-octagon" | "letter-g-square" | "letter-g-waves" | "letter-g" | "letter-h-circle" | "letter-h-diamond" | "letter-h-hexagon" | "letter-h-octagon" | "letter-h-square" | "letter-h-waves" | "letter-h" | "letter-i-circle" | "letter-i-diamond" | "letter-i-hexagon" | "letter-i-octagon" | "letter-i-square" | "letter-i-waves" | "letter-i" | "letter-j-circle" | "letter-j-diamond" | "letter-j-hexagon" | "letter-j-octagon" | "letter-j-square" | "letter-j-waves" | "letter-j" | "letter-k-circle" | "letter-k-diamond" | "letter-k-hexagon" | "letter-k-octagon" | "letter-k-square" | "letter-k-waves" | "letter-k" | "letter-l-circle" | "letter-l-diamond" | "letter-l-hexagon" | "letter-l-octagon" | "letter-l-square" | "letter-l-waves" | "letter-l" | "letter-m-circle" | "letter-m-diamond" | "letter-m-hexagon" | "letter-m-octagon" | "letter-m-square" | "letter-m-waves" | "letter-m" | "letter-n-circle" | "letter-n-diamond" | "letter-n-hexagon" | "letter-n-octagon" | "letter-n-square" | "letter-n-waves" | "letter-n" | "letter-o-circle" | "letter-o-diamond" | "letter-o-hexagon" | "letter-o-octagon" | "letter-o-square" | "letter-o-waves" | "letter-o" | "letter-p-circle" | "letter-p-diamond" | "letter-p-hexagon" | "letter-p-octagon" | "letter-p-square" | "letter-p-waves" | "letter-p" | "letter-q-circle" | "letter-q-diamond" | "letter-q-hexagon" | "letter-q-octagon" | "letter-q-square" | "letter-q-waves" | "letter-q" | "letter-r-circle" | "letter-r-diamond" | "letter-r-hexagon" | "letter-r-octagon" | "letter-r-square" | "letter-r-waves" | "letter-r" | "letter-s-circle" | "letter-s-diamond" | "letter-s-hexagon" | "letter-s-octagon" | "letter-s-square" | "letter-s-waves" | "letter-s" | "letter-t-circle" | "letter-t-diamond" | "letter-t-hexagon" | "letter-t-octagon" | "letter-t-square" | "letter-t-waves" | "letter-t" | "letter-u-circle" | "letter-u-diamond" | "letter-u-hexagon" | "letter-u-octagon" | "letter-u-square" | "letter-u-waves" | "letter-u" | "letter-v-circle" | "letter-v-diamond" | "letter-v-hexagon" | "letter-v-octagon" | "letter-v-square" | "letter-v-waves" | "letter-v" | "letter-w-circle" | "letter-w-diamond" | "letter-w-hexagon" | "letter-w-octagon" | "letter-w-square" | "letter-w-waves" | "letter-w" | "letter-x-circle" | "letter-x-diamond" | "letter-x-hexagon" | "letter-x-octagon" | "letter-x-square" | "letter-x-waves" | "letter-x" | "letter-y-circle" | "letter-y-diamond" | "letter-y-hexagon" | "letter-y-octagon" | "letter-y-square" | "letter-y-waves" | "letter-y" | "letter-z-circle" | "letter-z-diamond" | "letter-z-hexagon" | "letter-z-octagon" | "letter-z-square" | "letter-z-waves" | "letter-z" | "lightning-off" | "lightning" | "like" | "line-chart-circle" | "line-chart-diamond" | "line-chart-hexagon" | "line-chart-octagon" | "line-chart-square" | "line-chart-waves" | "link-one" | "link-two" | "list-check" | "list-number" | "list" | "location-check" | "location-home" | "location-minus" | "location-plus" | "location-selected" | "location-slash" | "location-snooze" | "location-user" | "location-x" | "lock-circle" | "lock-diamond" | "lock-hexagon" | "lock-keyhole" | "lock-octagon" | "lock-open-keyhole" | "lock-open-password" | "lock-open" | "lock-password" | "lock-square" | "lock-waves" | "lock" | "login" | "logout" | "magnet" | "male" | "mask" | "math-square" | "math" | "maximize-one" | "maximize" | "menu" | "message-check" | "message-dots" | "message-minus" | "message-plus" | "message-reply" | "message-x" | "message" | "microphone-slash" | "microphone" | "minimize-one" | "minimize" | "minus-circle" | "minus-diamond" | "minus-hexagon" | "minus-octagon" | "minus-square" | "minus-waves" | "minus" | "mobile-signal-five" | "mobile-signal-four" | "mobile-signal-one" | "mobile-signal-three" | "mobile-signal-two" | "mobile" | "moon-star" | "moon" | "mountain-snow" | "mountain" | "mouse-pointer" | "move-diagonal-one" | "move-diagonal" | "move-horizontal" | "move-vertical" | "move" | "music-circle" | "music-diamond" | "music-hexagon" | "music-octagon" | "music-square" | "music-waves" | "music" | "myna" | "navigation-one" | "navigation" | "nine-circle" | "nine-diamond" | "nine-hexagon" | "nine-octagon" | "nine-square" | "nine-waves" | "nine" | "notification" | "octagon" | "one-circle" | "one-diamond" | "one-hexagon" | "one-octagon" | "one-square" | "one-waves" | "option" | "package" | "paint" | "panel-bottom-close" | "panel-bottom-inactive" | "panel-bottom-open" | "panel-bottom" | "panel-left-close" | "panel-left-inactive" | "panel-left-open" | "panel-left" | "panel-right-close" | "panel-right-inactive" | "panel-right-open" | "panel-right" | "panel-top-close" | "panel-top-inactive" | "panel-top-open" | "panel-top" | "paperclip" | "parking" | "password" | "pause-circle" | "pause-diamond" | "pause-hexagon" | "pause-octagon" | "pause-square" | "pause-waves" | "pause" | "pen" | "pencil" | "percentage-circle" | "percentage-diamond" | "percentage-hexagon" | "percentage-octagon" | "percentage-square" | "percentage-waves" | "percentage" | "pin" | "pizza" | "planet" | "play-circle" | "play-diamond" | "play-hexagon" | "play-octagon" | "play-square" | "play-waves" | "play" | "plus-circle" | "plus-diamond" | "plus-hexagon" | "plus-octagon" | "plus-square" | "plus-waves" | "plus" | "pokeball" | "power" | "presentation" | "printer" | "puzzle" | "question-circle" | "question-diamond" | "question-hexagon" | "question-octagon" | "question-square" | "question-waves" | "question" | "radio" | "rainbow" | "reception-bell" | "record" | "rectangle-vertical" | "rectangle" | "redo" | "refresh-alt" | "refresh" | "rewind-circle" | "rewind-diamond" | "rewind-hexagon" | "rewind-octagon" | "rewind-square" | "rewind-waves" | "rewind" | "rhombus" | "ribbon" | "rocket" | "room-service" | "rows" | "rss" | "ruler" | "rupee-circle" | "rupee-diamond" | "rupee-hexagon" | "rupee-octagon" | "rupee-square" | "rupee-waves" | "rupee" | "sad-circle" | "sad-ghost" | "sad-square" | "save" | "scan" | "scissors" | "sea-waves" | "search-check" | "search-circle" | "search-diamond" | "search-dot" | "search-hexagon" | "search-home" | "search-minus" | "search-octagon" | "search-plus" | "search-slash" | "search-snooze" | "search-square" | "search-user" | "search-waves" | "search-x" | "select-multiple" | "send" | "servers" | "seven-circle" | "seven-diamond" | "seven-hexagon" | "seven-octagon" | "seven-square" | "seven-waves" | "seven" | "share" | "shell" | "shield-check" | "shield-crossed" | "shield-minus" | "shield-one" | "shield-plus" | "shield-slash" | "shield-two" | "shield-x" | "shield" | "shooting-star" | "shopping-bag" | "shovel" | "shrub" | "shuffle-alt" | "shuffle" | "sidebar-alt" | "sidebar" | "signal-circle" | "signal-diamond" | "signal-hexagon" | "signal-octagon" | "signal-square" | "signal-waves" | "signal" | "six-circle" | "six-diamond" | "six-hexagon" | "six-octagon" | "six-square" | "six-waves" | "six" | "skip-back" | "skip-forward" | "slash-circle" | "slash-diamond" | "slash-hexagon" | "slash-octagon" | "slash-square" | "slash-waves" | "smile-circle" | "smile-ghost" | "smile-square" | "snow" | "snowflake" | "sofa" | "sparkles" | "speaker" | "spinner-one" | "spinner" | "sprout" | "square-chart-gantt" | "square-dashed-kanban" | "square-dashed" | "square-half" | "square-kanban" | "square" | "star" | "stop-circle" | "stop-diamond" | "stop-hexagon" | "stop-octagon" | "stop-square" | "stop-waves" | "stop" | "store" | "subtract" | "sun-dim" | "sun-medium" | "sun-snow" | "sun" | "sunrise" | "sunset" | "support" | "swatches" | "table" | "tablet" | "tag-plus" | "tag" | "tally-five" | "tally-four" | "tally-one" | "tally-three" | "tally-two" | "telephone-call" | "telephone-forward" | "telephone-in" | "telephone-missed" | "telephone-out" | "telephone-slash" | "telephone" | "tent-tree" | "tent" | "terminal" | "text-align-center" | "text-align-left" | "text-align-right" | "text-justify" | "thermometer-snowflake" | "thermometer-sun" | "thermometer" | "three-circle" | "three-diamond" | "three-hexagon" | "three-octagon" | "three-square" | "three-waves" | "three" | "ticket-slash" | "ticket" | "toggle-left" | "toggle-right" | "tool" | "tornado" | "train" | "trash-one" | "trash-two" | "trash" | "tree-deciduous" | "tree-palm" | "tree-pine" | "tree" | "trees" | "trending-down" | "trending-up-down" | "trending-up" | "triangle" | "truck" | "tv" | "two-circle" | "two-diamond" | "two-hexagon" | "two-octagon" | "two-square" | "two-waves" | "two" | "type-bold" | "type-italic" | "type-text" | "type-underline" | "umbrella-off" | "umbrella" | "undo" | "union" | "unlink" | "upload" | "user-check" | "user-circle" | "user-diamond" | "user-hexagon" | "user-minus" | "user-octagon" | "user-plus" | "user-settings" | "user-square" | "user-waves" | "user-x" | "users-group" | "users" | "video-slash" | "video" | "volume-check" | "volume-high" | "volume-low" | "volume-minus" | "volume-none" | "volume-plus" | "volume-slash" | "volume-x" | "watch" | "waves" | "webcam" | "wheel" | "wheelchair" | "wifi-check" | "wifi-low" | "wifi-medium" | "wifi-minus" | "wifi-plus" | "wifi-slash" | "wifi-x" | "wifi" | "wind-arrow-down" | "wind" | "winds" | "wine" | "wink-circle" | "wink-ghost" | "wink-square" | "wrench" | "x-circle" | "x-diamond" | "x-hexagon" | "x-octagon" | "x-square" | "x-triangle" | "x-waves" | "yen-circle" | "yen-diamond" | "yen-hexagon" | "yen-octagon" | "yen-square" | "yen-waves" | "yen" | "zap-off" | "zap" | "zero-circle" | "zero-diamond" | "zero-hexagon" | "zero-octagon" | "zero-square" | "zero-waves" | "zero", string>>;
7457
+ labelExpression: z$1.ZodString;
7458
+ attributes: z$1.ZodDefault<z$1.ZodArray<z$1.ZodType<{
7459
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7460
+ name: string;
7461
+ label: string;
7462
+ required?: boolean | undefined;
7463
+ description?: string | undefined;
7464
+ config?: Record<string, unknown> | undefined;
7465
+ }, unknown, z$1.core.$ZodTypeInternals<{
7466
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7467
+ name: string;
7468
+ label: string;
7469
+ required?: boolean | undefined;
7470
+ description?: string | undefined;
7471
+ config?: Record<string, unknown> | undefined;
7472
+ }, unknown>>>>;
7473
+ }, z$1.core.$strict>>>;
7474
+ attributes: z$1.ZodDefault<z$1.ZodArray<z$1.ZodType<{
7475
+ objectName: string;
7476
+ name: string;
7477
+ label: string;
7478
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7479
+ config?: Record<string, unknown> | undefined;
7480
+ required?: boolean | undefined;
7481
+ description?: string | undefined;
7482
+ }, unknown, z$1.core.$ZodTypeInternals<{
7483
+ objectName: string;
7484
+ name: string;
7485
+ label: string;
7486
+ type: "number" | "text" | "date" | "select" | "multiselect" | "formula" | "rollup" | "relation" | "richtext" | "checkbox" | "phone" | "currency" | "status" | "location" | "user" | "document";
7487
+ config?: Record<string, unknown> | undefined;
7488
+ required?: boolean | undefined;
7489
+ description?: string | undefined;
7490
+ }, unknown>>>>;
7491
+ viewUpdates: z$1.ZodDefault<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
7492
+ baseConfigHash: z$1.ZodNullable<z$1.ZodString>;
7493
+ targetConfigHash: z$1.ZodString;
7494
+ baselineOrigin: z$1.ZodEnum<{
7495
+ persisted: "persisted";
7496
+ generated: "generated";
7497
+ absent: "absent";
7498
+ }>;
7499
+ objectName: z$1.ZodString;
7500
+ viewType: z$1.ZodLiteral<"list">;
7501
+ canonicalConfig: z$1.ZodType<ListViewConfig, unknown, z$1.core.$ZodTypeInternals<ListViewConfig, unknown>>;
7502
+ }, z$1.core.$strict>, z$1.ZodObject<{
7503
+ baseConfigHash: z$1.ZodNullable<z$1.ZodString>;
7504
+ targetConfigHash: z$1.ZodString;
7505
+ baselineOrigin: z$1.ZodEnum<{
7506
+ persisted: "persisted";
7507
+ generated: "generated";
7508
+ absent: "absent";
7509
+ }>;
7510
+ objectName: z$1.ZodString;
7511
+ viewType: z$1.ZodLiteral<"detail">;
7512
+ canonicalConfig: z$1.ZodType<DetailViewConfig, unknown, z$1.core.$ZodTypeInternals<DetailViewConfig, unknown>>;
7513
+ }, z$1.core.$strict>], "viewType">>>;
7514
+ }, z$1.core.$strict>>;
7515
+ destructive: z$1.ZodDefault<z$1.ZodObject<{
7516
+ attributeRemovals: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7517
+ objectName: z$1.ZodString;
7518
+ attributeName: z$1.ZodString;
7519
+ }, z$1.core.$strict>>>;
7520
+ objectRemovals: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7521
+ objectName: z$1.ZodString;
7522
+ }, z$1.core.$strict>>>;
7523
+ renames: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7524
+ objectName: z$1.ZodString;
7525
+ from: z$1.ZodString;
7526
+ to: z$1.ZodString;
7527
+ }, z$1.core.$strict>>>;
7528
+ }, z$1.core.$strict>>;
7529
+ }, z$1.core.$strict>>;
7530
+ /** Public parser-derived proposal types; consumers do not need to restate Zod defaults. */
7531
+ type SchemaPlanProposalInput = z$1.input<typeof structuralSchemaPlanSchema>;
7532
+ type ParsedSchemaPlanProposal = z$1.output<typeof schemaPlanSchema>;
7533
+ type ParsedPersistedSchemaPlan = z$1.output<typeof persistedSchemaPlanSchema>;
7534
+
7535
+ export { type AIGenerationInputMap, type AIGenerationResult, type AIGenerationType, type AIGenerationUsage, ALLOWED_PROPERTY_TYPES, ALL_SYSTEM_RESOURCES, ATTRIBUTE_FILTER_OPERATORS, AUDIT_ACTIONS, AUDIT_RESOURCE_TYPES, type AcceptsCandidate, Action, ActivityTabConfig, type Actor, type ActorRoleAssignment, type ActorStatus, type ActorType, type AddSharedMailboxInput, AgentApprovalPolicy, AgentBlueprint, AgentBuilder, type AgentBuilderConfig, AgentExecutionConfig, AgentSchedule, type AgentSessionPatchLiveEvent, AgentTriggerBlueprint, type AgentUnreadPatchLiveEvent, type ApiKey, type ApiKeyAuthContext, type ApiKeyPermission, type ApiKeyWithSecret, type AssignActorRoleInput, Attribute, type AttributeAgentCapabilities, type AttributeAuthoringCapabilities, type AttributeCapabilities, type AttributeCardinality, type AttributeDefaultValueCapability, type AttributeExchangeCapabilities, AttributeGroupField, type AttributeLifecycleCapabilities, type AttributeLike, type AttributePolymorphicCapability, type AttributePresentationCapabilities, type AttributeQueryCapabilities, type AttributeRequiredCapability, type AttributeStorageCapabilities, type AttributeStorageMode, AttributeType, type AuditAction, type AuditActorType, type AuditChange, type AuditListOptions, type AuditLogEntry, type AuditResourceType, type AuditServiceOptions, type AuditSortField, type AuthorizedGlobalSearchResult, type AuthorizedRecordSearchResult, type AuthorizedSearchPage, BEHAVIOR_PROPERTIES, BROWSER_PREVIEW_STATUSES, BYTE_UNIT_LABELS, BilateralConfig, type BoundingBox, type BrowserPreviewDescriptor, type BrowserPreviewStatus, type BrowserPreviewUpdatedLiveEvent, type BuilderConfig, type ByteMagnitude, COMPUTED_FUNCTIONS, COMPUTED_FUNCTION_METADATA, COMPUTED_FUNCTION_NAMES, CONNECTOR_CALLBACK_PARAM, type ChannelRevokedLiveEvent, CheckboxAttribute, type CollectionPage, type CollectionRequest, type CollectionResponse, type CompileComputedFormulaInput, type ComputedCompileAttribute, type ComputedCompileObject, type ComputedCompileSchema, ComputedDependency, type ComputedDependencyGraphNode, ComputedFormulaAstNode, ComputedFormulaCompileError, type ComputedFormulaResult, type ComputedFunctionCategory, type ComputedFunctionMetadata, type ComputedFunctionName, type ComputedFunctionSignature, ComputedOptionsSource, ComputedPlan, ComputedReturnType, ComputedValueType, ConfigOverrides, type ConnectionStatus, type ConnectionStatusId, type ConnectionView, type ConnectorCallbackStatusValue, type ConnectorProviderId, type ConnectorScope, type ContinuationPage, type ConversationRenamedLiveEvent, type CountMode, type CreateActorInput, type CreateApiKeyInput, type CreateAuditLogInput, type CreateDBAttribute, type CreateDBForm, type CreateDBFormSubmission, type CreateDBObject, type CreateDBView, type CreateDBViewOverlay, CreateMode, type CreateNotificationInput, type CreateNotificationRecipientInput, type CreateObjectRecord, type CreateReflexInput, type CreateReflexVersionInput, type CreateUserProfile, Currency, CurrencyAttribute, type CustomAttributeValue, type CustomObjectInfo, CustomTabConfig, type DBAttribute, type DBForm, type DBFormSubmission, type DBObject, type DBView, type DBViewOverlay, type DBViewSyncResolution, DB_COLUMN_FIELDS, DEFAULT_AGENT_EXECUTION_CONFIG, DEFAULT_ROLES, DEFAULT_ROLE_DESCRIPTIONS, DEFAULT_ROLE_LABELS, DEFAULT_ROLE_PERMISSIONS, DOCUMENT_SYSTEM_ATTRIBUTES, DateAttribute, DateRangeValue, type DefaultRoleName, type DeletedMode, DetailViewBuilder, DetailViewConfig, DetailViewDefinition, DocumentAttribute, DocumentLayout, DocumentsTabConfig, type DomainEvent, type DriftAttributeInfo, DynamicValue, type DynamicValueResolver, EMPTY_VALUE_PLACEHOLDER, ESTIMATED_COUNT_CAP, type Eager, type EmailAttachmentMeta, type EmailDirection, type EmailParticipantRef, type EmailParticipantRole, type EmailProvider, type EmailVisibility, EmailsTabConfig, type EnvVarEntry, type EnvVarScope, type EventDataMap, type EventType, type ExtractRecord, type ExtractRecordInput, type ExtractRecordInputStrict, type ExtractRecordStrict, type ExtractRecordUpdate, type ExtractRecordUpdateStrict, FORM_FORBIDDEN_ATTRIBUTE_TYPES, type FeatureFlagDefinition, type FeatureFlagsConfig, type FeatureFlagsRepository, type FeatureGate, Field, FieldGroup, type FieldHistoryEntry, type FileListOptions, FilterOperator, FilterRule, FilterState, FilterValue, type FlagLevel, type FlagOverride, FlagRegistry, type FlagResolutionContext, FlagService, type FlagValueType, FormBuilder, type FormDefinition, type FormFieldRef, type FormFieldsRow, type FormFreeFieldRef, type FormHeadingRow, FormRegistry, type FormRow, FormRowBuilder, type FormSeparatorRow, type FormSlot, type FormSlotFieldRef, type FormStatus, type FormStep, FormStepBuilder, type FormSubmission, type FormSubmissionStatus, type FormTextRow, FormulaAttribute, type FormulaGenerationAttribute, type FormulaGenerationInput, FormulaReturnType, type GeocodingAdapter, type GeocodingAutocompleteParams, type GeocodingParams, type GeocodingSuggestion, type GlobalSearchGroupedOptions, type GlobalSearchGroupedResult, type GlobalSearchOptions, type GlobalSearchResultItem, Group, GroupBuilder, IDENTITY_PROPERTIES, type InferAttributeValue, type InferQualifiedProps, type InviteUserInput, type IsWithinBounds, LIVE_EVENT_TYPES, LIVE_STREAM_START_CURSOR, type ListOptions, ListViewBuilder, ListViewConfig, ListViewDefinition, ListViewTab, ListViewTabConfigBuilder, ListViewTabVisibility, type LiveChannel, type LiveChannelKind, type LiveErrorPayload, type LiveEventEnvelope, type LiveEventPayload, type LiveEventType, type LiveGapPayload, type LiveNotification, type LiveNotificationRecipient, type LiveNotificationRecipientPatch, type LiveReplayCompletePayload, type LiveSubscribePayload, type LiveUnsubscribePayload, Location, LocationAttribute, LocationGranularity, MEMORY_LIST_VIEW, MEMORY_OBJECT, MEMORY_VIEW, type MailboxAccount, type MailboxCursor, type MailboxEmail, type MailboxListResponse, type MailboxQuery, type MailboxReadState, type MailboxThread, type MailboxThreadDetail, MigrationDefinition, ModelDefinition, MultiRelationAttribute, MultiselectAttribute, NOTIFICATION_INBOX_STATES, NOTIFICATION_KINDS, NOTIFICATION_PRIORITIES, NOTIFICATION_SENSITIVITIES, NOTIFICATION_TYPES_V1, NOTIFICATION_TYPE_AGENT_QUESTION_REQUESTED, NOTIFICATION_TYPE_AGENT_SESSION_COMPLETED, NOTIFICATION_TYPE_AGENT_SESSION_FAILED, NOTIFICATION_TYPE_AGENT_SESSION_TIMEOUT, NOTIFICATION_TYPE_AGENT_SESSION_WAITING_HUMAN, NOTIFICATION_TYPE_AGENT_TASK_ASSIGNED, NOTIFICATION_WORK_STATES, NoopGeocodingAdapter, type Notification, type NotificationCountPatchLiveEvent, type NotificationCounts, type NotificationCreatedLiveEvent, type NotificationInboxState, type NotificationKind, type NotificationListParams, type NotificationListResult, type NotificationPriority, type NotificationRecipient, type NotificationRecipientPatchLiveEvent, type NotificationSensitivity, type NotificationSubject, type NotificationType, type NotificationV1Type, type NotificationWithRecipient, type NotificationWorkState, NumberAttribute, OPERATOR_SPECS, ObjectBuilder, type ObjectConfig, ObjectDefinition, ObjectRecord, type OcrAdapter, type OcrInput, type OcrOptions, type OcrPage, type OcrResult, type OcrTextBlock, type OperatorSpec, Option, PRESENTATION_PROPERTIES, type PageInfo, type PageOptions, type PageResponse, type ParsedAttribute, type ParsedPersistedSchemaPlan, type ParsedSchemaPlanProposal, PermissionScope, type PersistedDefaultViewTarget, type PersistedSchemaPlan, type PersistedSchemaPlanAdditive, Phone, PhoneAttribute, type PlannedAttribute, type PlannedAttributeRemoval, type PlannedObject, type PlannedObjectRemoval, type PlannedRename, PropertySchema, type ProposedDefaultViewTarget, ProviderName, QUALIFIED_SEPARATOR, type QualifiedDocumentAttributeBuilder, type QualifiedDocumentBrand, RECORD_CREATOR_ROOT_ACTOR_METADATA_KEY, REMOVED_OPERATOR_REPLACEMENTS, type RecordCreatedLiveEvent, type RecordDeletedLiveEvent, type RecordFieldPatch, type RecordLiveSnapshot, type RecordMetadata, type RecordPatchLiveEvent, type RecordRemovedLiveEvent, type Reflex, type ReflexRun, type ReflexState, type ReflexVersion, type ReflexVersionStatus, type RegexGenerationInput, RelationAttribute, RelationGroup, RelationGroupBuilder, RelationTarget, RelativeDateValue, type ResolutionContext, type ResolvedFlag, ResourceVisibility, type ReverseGeocodingParams, RichtextAttribute, RichtextTabConfig, RollupAttribute, RollupFunction, type RunEffect, type RunMode, SCHEMA_PLAN_LIMITS, SKILL_LIST_VIEW, SKILL_OBJECT, SKILL_VIEW, STANDARD_SCHEMA_VENDOR, SYNONYM_ALIASES, SYSTEM_ATTRIBUTES, SYSTEM_ATTRIBUTE_I18N_KEYS, SYSTEM_FILTER_ATTRIBUTE_TYPES, SYSTEM_RESOURCES, SYSTEM_RESOURCE_LABELS, type SchemaDriftResult, type SchemaPlan, type SchemaPlanAdditive, type SchemaPlanAdditiveBase, type SchemaPlanChangeSet, type SchemaPlanDestructive, type SchemaPlanDraft, type SchemaPlanDraftResponse, type SchemaPlanDraftState, type SchemaPlanDraftStatus, type SchemaPlanDraftWrite, type SchemaPlanImpact, type SchemaPlanImpactEntry, type SchemaPlanOutcome, type SchemaPlanProposalInput, type SchemaPlanSampleData, type SchemaPlanStatus, type SchemaPlanViewChanges, type SchemaState, type SearchOptions, SelectAttribute, SidePanelConfig, type SidebarExtraItem, SingleRelationAttribute, type SlotMode, SortRule, type StandardSchemaIssue, type StandardSchemaResult, type StartConnectorAuthInput, type StartConnectorAuthResult, type StaticFlagDefault, StatusAttribute, type StoredSchemaPlan, type SystemAttribute, type SystemAttributeI18nKey, type SystemFields, type SystemObjectDriftInfo, SystemResource, TEXT_FORMAT_PATTERNS, Tab, TabBuilder, TableTab, TableTabConfig, TenantId, type TenantSettings, TextAttribute, TimeFormat, Timestamps, TriggerEventType, USER_STATUSES, type UpdateActorInput, type UpdateDBAttribute, type UpdateDBForm, type UpdateDBFormSubmission, type UpdateDBObject, type UpdateDBView, type UpdateDBViewOverlay, type UpdateUserProfile, type UpsertDBAttribute, type UpsertDBObject, type UpsertDBView, UserAttribute, type UserLike, type UserProfile, UserReferenceType, type UserStatus, Uuid, ValidationError, type ValueRef, type ViewBaselineOrigin, type ViewChange, ViewConfig, type ViewConfigDelta, ViewDefinition, type ViewProjectionStaleLiveEvent, type ViewStateEntry, type ViewStateResolution, type ViewSyncPayload, ViewType, type WithCustomAttributes$1 as WithCustomAttributes, type WithoutSystemFields, agent, applyPipes, applyRelationProps, assertAcyclicComputedDependencies, assertLiveStreamCursor, booleanFlag, buildPropertySchema, buildQualifiedAttribute, canonicalStringify, checkbox, collectQualifiedRuleIssues, compareLiveStreamCursors, compileComputedFormula, compileRollupAttribute, computeByteMagnitude, createFlagRegistry, createFlagService, createStandardSchemaProps, currency, currentActor, date, dateValueStart, destructiveSchema, detailView, document, evaluateComputedAst, evaluateComputedFormula, evaluateComputedFormulaWithResult, evaluateFilterState, evaluateRecordFilterState, extractAttributeNames, extractCurrencyFilterValue, extractFilterValue, extractValueRefs, flagRegistry, form, formRegistry, formatAttributeValue, formatByteSize, formatComputedResult, formatLocationValue, formula, generateDefaultDetailView, generateDefaultListView, getActiveTab, getAttributeCapabilities, getAttributeFilterOperators, getErrorMessage, getLiveProtocolPayloadChannel, getOperatorPolarity, getRecordCreatorPrincipalId, getSlotFieldTargets, getSystemAttributeI18nKey, getSystemAttributeList, getUserDisplayName, group, hasDestructiveEntries, inferRollupReturnType, isAttributeFilterable, isAttributeGroupable, isAttributeKanbanGroupable, isAttributeSearchable, isCheckboxEquality, isComputedFunctionName, isDateRangeValue, isDefaultRole, isDocumentAttribute, isDynamicValue, isEmptyObject, isFormDefinition, isFormFieldsRow, isFormFreeFieldRef, isFormHeadingRow, isFormSeparatorRow, isFormSlotFieldRef, isFormTextRow, isLabelExpression, isLiveErrorPayload, isLiveEventEnvelope, isLiveEventPayload, isLiveEventPayloadForType, isLiveEventType, isLiveGapPayload, isLiveReplayCompletePayload, isLiveStreamCursor, isManagedSystemAttribute, isNotEmpty, isPlainRecord, isRelativeDateValue, isStandardSchema, jsonFlag, listView, liveChannelKey, location, matchesAccepts, multiselect, normalizeDateValue, normalizeFilterRule, normalizeForEdgeRpc, normalizeOperator, now, number, numberFlag, object, parseLiveChannelKey, parseLiveSubscribePayload, parseLiveUnsubscribePayload, parseQualifiedAttribute, persistedDefaultViewTargetSchema, persistedSchemaPlanSchema, phone, plannedAttributeSchema, plannedInlineAttributeSchema, plannedObjectSchema, proposedDefaultViewTargetSchema, registry, relation, relationGroup, renderLabelExpression, resetViewToDefault, resolveIsWithinBounds, resolveTextPattern, richtext, rollup, rollupToFormulaExpression, schemaPlanSchema, select, status, stringFlag, text, toMultiValueOperator, toUndefinedIfEmpty, toUtcDayString, today, user, validateAttributeName, validateLabelExpression, validateObjectName, validateQualifiedRule, viewRegistry, viewStateKey, viewSyncPayload };