@continuum-dev/contract 0.1.1-alpha.0

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.
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Canonical issue taxonomy for reconciliation, validation, and view analysis.
3
+ */
4
+ export const ISSUE_CODES = {
5
+ NO_PRIOR_DATA: 'NO_PRIOR_DATA',
6
+ NO_PRIOR_VIEW: 'NO_PRIOR_VIEW',
7
+ TYPE_MISMATCH: 'TYPE_MISMATCH',
8
+ NODE_REMOVED: 'NODE_REMOVED',
9
+ MIGRATION_FAILED: 'MIGRATION_FAILED',
10
+ UNVALIDATED_CARRY: 'UNVALIDATED_CARRY',
11
+ VALIDATION_FAILED: 'VALIDATION_FAILED',
12
+ UNKNOWN_NODE: 'UNKNOWN_NODE',
13
+ DUPLICATE_NODE_ID: 'DUPLICATE_NODE_ID',
14
+ DUPLICATE_NODE_KEY: 'DUPLICATE_NODE_KEY',
15
+ VIEW_CHILD_CYCLE_DETECTED: 'VIEW_CHILD_CYCLE_DETECTED',
16
+ VIEW_MAX_DEPTH_EXCEEDED: 'VIEW_MAX_DEPTH_EXCEEDED',
17
+ COLLECTION_CONSTRAINT_VIOLATED: 'COLLECTION_CONSTRAINT_VIOLATED',
18
+ SCOPE_COLLISION: 'SCOPE_COLLISION',
19
+ };
20
+ /**
21
+ * Outcomes for how a value was handled during reconciliation.
22
+ */
23
+ export const DATA_RESOLUTIONS = {
24
+ CARRIED: 'carried',
25
+ MIGRATED: 'migrated',
26
+ DETACHED: 'detached',
27
+ ADDED: 'added',
28
+ RESTORED: 'restored',
29
+ };
30
+ /**
31
+ * Node-level structural change classifications between view revisions.
32
+ */
33
+ export const VIEW_DIFFS = {
34
+ ADDED: 'added',
35
+ REMOVED: 'removed',
36
+ MIGRATED: 'migrated',
37
+ TYPE_CHANGED: 'type-changed',
38
+ RESTORED: 'restored',
39
+ };
40
+ /**
41
+ * Severity levels for reported issues.
42
+ */
43
+ export const ISSUE_SEVERITY = {
44
+ ERROR: 'error',
45
+ WARNING: 'warning',
46
+ INFO: 'info',
47
+ };
48
+ /**
49
+ * Canonical interaction categories for event producers/consumers.
50
+ */
51
+ export const INTERACTION_TYPES = {
52
+ DATA_UPDATE: 'data-update',
53
+ VALUE_CHANGE: 'value-change',
54
+ VIEW_CONTEXT_CHANGE: 'view-context-change',
55
+ };
56
+ const INTERACTION_TYPE_VALUES = new Set(Object.values(INTERACTION_TYPES));
57
+ /**
58
+ * Runtime type guard for {@link InteractionType}.
59
+ */
60
+ export function isInteractionType(value) {
61
+ return typeof value === 'string' && INTERACTION_TYPE_VALUES.has(value);
62
+ }
63
+ /**
64
+ * Lifecycle states for queued intents.
65
+ */
66
+ export const INTENT_STATUS = {
67
+ PENDING: 'pending',
68
+ VALIDATED: 'validated',
69
+ STALE: 'stale',
70
+ CANCELLED: 'cancelled',
71
+ };
@@ -0,0 +1,16 @@
1
+ import type { ViewDefinition } from './view-definition.js';
2
+ import type { DataSnapshot } from './data-snapshot.js';
3
+ /**
4
+ * Atomic pairing of a view schema and user-owned runtime data.
5
+ */
6
+ export interface ContinuitySnapshot {
7
+ /**
8
+ * Current structural definition for the UI.
9
+ */
10
+ view: ViewDefinition;
11
+ /**
12
+ * Current user-owned data aligned to the view.
13
+ */
14
+ data: DataSnapshot;
15
+ }
16
+ //# sourceMappingURL=continuity-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuity-snapshot.d.ts","sourceRoot":"","sources":["../../../../packages/contract/src/lib/continuity-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,IAAI,EAAE,cAAc,CAAC;IACrB;;OAEG;IACH,IAAI,EAAE,YAAY,CAAC;CACpB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,263 @@
1
+ /**
2
+ * The complete user-owned state of the UI at a specific point in time.
3
+ * This is kept strictly separate from the ViewDefinition to ensure data survives UI restructures.
4
+ */
5
+ export interface DataSnapshot {
6
+ /**
7
+ * Active values keyed by node id.
8
+ */
9
+ values: Record<string, NodeValue>;
10
+ /**
11
+ * Per-node UI state keyed by node id.
12
+ */
13
+ viewContext?: Record<string, ViewportState>;
14
+ /**
15
+ * Provenance for the snapshot as a whole.
16
+ */
17
+ lineage: SnapshotLineage;
18
+ /**
19
+ * Optional per-value provenance keyed by node id.
20
+ */
21
+ valueLineage?: Record<string, ValueLineage>;
22
+ /**
23
+ * Values preserved when no longer safely mappable to active nodes.
24
+ */
25
+ detachedValues?: Record<string, DetachedValue>;
26
+ }
27
+ /**
28
+ * Wraps a node's data payload with collaboration and validation metadata.
29
+ * Designed to safely merge AI suggestions without overwriting dirty user state.
30
+ *
31
+ * @template T The underlying data type.
32
+ */
33
+ export interface NodeValue<T = unknown> {
34
+ /**
35
+ * The current, actual value of the node.
36
+ */
37
+ value: T;
38
+ /**
39
+ * An AI-proposed alternative value awaiting user approval.
40
+ */
41
+ suggestion?: T;
42
+ /**
43
+ * True if the user has manually edited this value.
44
+ */
45
+ isDirty?: boolean;
46
+ /**
47
+ * True if the value currently passes the ViewDefinition's constraints.
48
+ */
49
+ isValid?: boolean;
50
+ }
51
+ /**
52
+ * Data state for one collection item.
53
+ */
54
+ export interface CollectionItemState {
55
+ /**
56
+ * Item field values keyed by node id.
57
+ */
58
+ values: Record<string, NodeValue>;
59
+ }
60
+ /**
61
+ * Data state for a collection node.
62
+ */
63
+ export interface CollectionNodeState {
64
+ /**
65
+ * Ordered collection item states.
66
+ */
67
+ items: CollectionItemState[];
68
+ }
69
+ /**
70
+ * Ephemeral viewport and interaction state for a node.
71
+ */
72
+ export interface ViewportState {
73
+ /**
74
+ * Horizontal scroll position.
75
+ */
76
+ scrollX?: number;
77
+ /**
78
+ * Vertical scroll position.
79
+ */
80
+ scrollY?: number;
81
+ /**
82
+ * Zoom factor applied to the viewport.
83
+ */
84
+ zoom?: number;
85
+ /**
86
+ * Horizontal pan offset.
87
+ */
88
+ offsetX?: number;
89
+ /**
90
+ * Vertical pan offset.
91
+ */
92
+ offsetY?: number;
93
+ /**
94
+ * Whether the associated UI region is expanded.
95
+ */
96
+ isExpanded?: boolean;
97
+ /**
98
+ * Whether the associated UI region currently has focus.
99
+ */
100
+ isFocused?: boolean;
101
+ }
102
+ /**
103
+ * Backward-compatible alias for viewport context.
104
+ */
105
+ export type ViewContext = ViewportState;
106
+ /**
107
+ * Global provenance metadata for a data snapshot.
108
+ */
109
+ export interface SnapshotLineage {
110
+ /**
111
+ * Snapshot creation/update timestamp.
112
+ */
113
+ timestamp: number;
114
+ /**
115
+ * Owning session identifier.
116
+ */
117
+ sessionId: string;
118
+ /**
119
+ * Logical view identity.
120
+ */
121
+ viewId?: string;
122
+ /**
123
+ * View version associated with this snapshot.
124
+ */
125
+ viewVersion?: string;
126
+ /**
127
+ * Optional structural hash of the view.
128
+ */
129
+ viewHash?: string;
130
+ /**
131
+ * Interaction that most recently mutated the snapshot.
132
+ */
133
+ lastInteractionId?: string;
134
+ }
135
+ /**
136
+ * Provenance metadata for a single value key.
137
+ */
138
+ export interface ValueLineage {
139
+ /**
140
+ * Last update timestamp for this value.
141
+ */
142
+ lastUpdated?: number;
143
+ /**
144
+ * Interaction that last updated this value.
145
+ */
146
+ lastInteractionId?: string;
147
+ }
148
+ /**
149
+ * Preserves user data from nodes that were removed or changed incompatibly.
150
+ * If the node returns in a compatible shape, this value can be restored.
151
+ */
152
+ export interface DetachedValue {
153
+ /**
154
+ * The preserved user data.
155
+ */
156
+ value: unknown;
157
+ /**
158
+ * Node type where this value originated.
159
+ */
160
+ previousNodeType: string;
161
+ /**
162
+ * Optional semantic key used to match and restore this value later.
163
+ */
164
+ key?: string;
165
+ /**
166
+ * Detachment timestamp.
167
+ */
168
+ detachedAt: number;
169
+ /**
170
+ * View version at detachment time.
171
+ */
172
+ viewVersion: string;
173
+ /**
174
+ * Why this value was detached.
175
+ */
176
+ reason: 'node-removed' | 'type-mismatch' | 'migration-failed';
177
+ /**
178
+ * Number of pushView cycles since detachment.
179
+ */
180
+ pushesSinceDetach?: number;
181
+ }
182
+ /**
183
+ * Optional limits for detached value retention.
184
+ */
185
+ export interface DetachedValuePolicy {
186
+ /**
187
+ * Purge detached values older than this many milliseconds.
188
+ */
189
+ maxAge?: number;
190
+ /**
191
+ * Keep at most this many detached values, purging oldest first.
192
+ */
193
+ maxCount?: number;
194
+ /**
195
+ * Purge after this many pushView calls since detachment.
196
+ */
197
+ pushCount?: number;
198
+ }
199
+ /**
200
+ * Models an AI-suggested value alongside the current user value.
201
+ * Used by conflict-resolution and diff-based approval flows.
202
+ */
203
+ export interface ProposedValue {
204
+ /**
205
+ * Target node id.
206
+ */
207
+ nodeId: string;
208
+ /**
209
+ * Proposed replacement value.
210
+ */
211
+ proposedValue: NodeValue;
212
+ /**
213
+ * Current active value.
214
+ */
215
+ currentValue: NodeValue;
216
+ /**
217
+ * Proposal timestamp.
218
+ */
219
+ proposedAt: number;
220
+ /**
221
+ * Optional proposal source identifier.
222
+ */
223
+ source?: string;
224
+ }
225
+ /**
226
+ * Display metadata for a registered action intent.
227
+ */
228
+ export interface ActionRegistration {
229
+ /**
230
+ * Human-readable action label.
231
+ */
232
+ label: string;
233
+ /**
234
+ * Optional helper text for the action.
235
+ */
236
+ description?: string;
237
+ /**
238
+ * Optional icon token/name for rendering.
239
+ */
240
+ icon?: string;
241
+ }
242
+ /**
243
+ * Runtime context passed to an action handler.
244
+ */
245
+ export interface ActionContext {
246
+ /**
247
+ * Intent identifier being executed.
248
+ */
249
+ intentId: string;
250
+ /**
251
+ * Snapshot state at execution time.
252
+ */
253
+ snapshot: DataSnapshot;
254
+ /**
255
+ * Node id that originated the action.
256
+ */
257
+ nodeId: string;
258
+ }
259
+ /**
260
+ * Action execution handler contract.
261
+ */
262
+ export type ActionHandler = (context: ActionContext) => void | Promise<void>;
263
+ //# sourceMappingURL=data-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-snapshot.d.ts","sourceRoot":"","sources":["../../../../packages/contract/src/lib/data-snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,29 @@
1
+ import type { ContinuitySnapshot } from './snapshot.js';
2
+ import type { IntentStatus } from './constants.js';
3
+ export interface Interaction {
4
+ interactionId: string;
5
+ sessionId: string;
6
+ nodeId: string;
7
+ type: string;
8
+ payload: unknown;
9
+ timestamp: number;
10
+ viewVersion: string;
11
+ }
12
+ export interface PendingIntent {
13
+ intentId: string;
14
+ nodeId: string;
15
+ intentName: string;
16
+ payload: unknown;
17
+ queuedAt: number;
18
+ viewVersion: string;
19
+ status: IntentStatus;
20
+ }
21
+ export interface Checkpoint {
22
+ checkpointId: string;
23
+ sessionId: string;
24
+ snapshot: ContinuitySnapshot;
25
+ eventIndex: number;
26
+ timestamp: number;
27
+ trigger: 'auto' | 'manual';
28
+ }
29
+ //# sourceMappingURL=interaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction.d.ts","sourceRoot":"","sources":["../../../../packages/contract/src/lib/interaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC5B"}
@@ -0,0 +1,98 @@
1
+ import type { ContinuitySnapshot } from './continuity-snapshot.js';
2
+ import type { IntentStatus, InteractionType } from './constants.js';
3
+ /**
4
+ * Immutable interaction event emitted by user or system activity.
5
+ */
6
+ export interface Interaction {
7
+ /**
8
+ * Unique interaction identifier.
9
+ */
10
+ interactionId: string;
11
+ /**
12
+ * Session identifier for partitioning event streams.
13
+ */
14
+ sessionId: string;
15
+ /**
16
+ * Target node id.
17
+ */
18
+ nodeId: string;
19
+ /**
20
+ * Interaction category.
21
+ */
22
+ type: InteractionType;
23
+ /**
24
+ * Interaction-specific payload.
25
+ */
26
+ payload: unknown;
27
+ /**
28
+ * Event timestamp.
29
+ */
30
+ timestamp: number;
31
+ /**
32
+ * View version observed when the event occurred.
33
+ */
34
+ viewVersion: string;
35
+ }
36
+ /**
37
+ * Queued intent awaiting validation/execution.
38
+ */
39
+ export interface PendingIntent {
40
+ /**
41
+ * Unique intent instance identifier.
42
+ */
43
+ intentId: string;
44
+ /**
45
+ * Node id that originated the intent.
46
+ */
47
+ nodeId: string;
48
+ /**
49
+ * Intent name/category.
50
+ */
51
+ intentName: string;
52
+ /**
53
+ * Intent-specific payload.
54
+ */
55
+ payload: unknown;
56
+ /**
57
+ * Queue timestamp.
58
+ */
59
+ queuedAt: number;
60
+ /**
61
+ * View version at queue time.
62
+ */
63
+ viewVersion: string;
64
+ /**
65
+ * Current intent lifecycle status.
66
+ */
67
+ status: IntentStatus;
68
+ }
69
+ /**
70
+ * Durable restore point in a session timeline.
71
+ */
72
+ export interface Checkpoint {
73
+ /**
74
+ * Unique checkpoint identifier.
75
+ */
76
+ checkpointId: string;
77
+ /**
78
+ * Session identifier for this checkpoint.
79
+ */
80
+ sessionId: string;
81
+ /**
82
+ * Full continuity snapshot captured at this checkpoint.
83
+ */
84
+ snapshot: ContinuitySnapshot;
85
+ /**
86
+ * Event stream index associated with this snapshot.
87
+ */
88
+ eventIndex: number;
89
+ /**
90
+ * Checkpoint creation timestamp.
91
+ */
92
+ timestamp: number;
93
+ /**
94
+ * Origin of checkpoint creation.
95
+ */
96
+ trigger: 'auto' | 'manual';
97
+ }
98
+ //# sourceMappingURL=interactions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../../../../packages/contract/src/lib/interactions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,EAAE,eAAe,CAAC;IACtB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,QAAQ,EAAE,kBAAkB,CAAC;IAC7B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC5B"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,62 @@
1
+ export interface ViewDefinition {
2
+ viewId: string;
3
+ version: string;
4
+ nodes: ViewNode[];
5
+ }
6
+ export type ViewNode = FieldNode | GroupNode | CollectionNode | ActionNode | PresentationNode;
7
+ export interface BaseNode {
8
+ id: string;
9
+ type: string;
10
+ key?: string;
11
+ hidden?: boolean;
12
+ hash?: string;
13
+ migrations?: MigrationRule[];
14
+ }
15
+ export interface FieldNode extends BaseNode {
16
+ type: 'field';
17
+ dataType: 'string' | 'number' | 'boolean';
18
+ label?: string;
19
+ placeholder?: string;
20
+ description?: string;
21
+ readOnly?: boolean;
22
+ defaultValue?: unknown;
23
+ constraints?: FieldConstraints;
24
+ }
25
+ export interface GroupNode extends BaseNode {
26
+ type: 'group';
27
+ label?: string;
28
+ children: ViewNode[];
29
+ }
30
+ export interface CollectionNode extends BaseNode {
31
+ type: 'collection';
32
+ label?: string;
33
+ template: ViewNode;
34
+ minItems?: number;
35
+ maxItems?: number;
36
+ }
37
+ export interface ActionNode extends BaseNode {
38
+ type: 'action';
39
+ intentId: string;
40
+ label: string;
41
+ disabled?: boolean;
42
+ }
43
+ export interface PresentationNode extends BaseNode {
44
+ type: 'presentation';
45
+ contentType: 'text' | 'markdown';
46
+ content: string;
47
+ }
48
+ export interface FieldConstraints {
49
+ required?: boolean;
50
+ min?: number;
51
+ max?: number;
52
+ minLength?: number;
53
+ maxLength?: number;
54
+ pattern?: string;
55
+ }
56
+ export interface MigrationRule {
57
+ fromHash: string;
58
+ toHash: string;
59
+ strategyId?: string;
60
+ }
61
+ export declare function getChildNodes(node: ViewNode): ViewNode[];
62
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../packages/contract/src/lib/schema.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,MAAM,MAAM,QAAQ,GAChB,SAAS,GACT,SAAS,GACT,cAAc,GACd,UAAU,GACV,gBAAgB,CAAC;AAErB,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,SAAU,SAAQ,QAAQ;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAChC;AAED,MAAM,WAAW,SAAU,SAAQ,QAAQ;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC1C,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAChD,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,UAAU,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAQxD"}
@@ -0,0 +1,7 @@
1
+ import type { ViewDefinition } from './schema.js';
2
+ import type { DataSnapshot } from './state.js';
3
+ export interface ContinuitySnapshot {
4
+ view: ViewDefinition;
5
+ data: DataSnapshot;
6
+ }
7
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../../packages/contract/src/lib/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,YAAY,CAAC;CACpB"}
package/lib/state.d.ts ADDED
@@ -0,0 +1,39 @@
1
+ export interface DataSnapshot {
2
+ values: Record<string, NodeValue>;
3
+ viewContext?: Record<string, ViewContext>;
4
+ lineage: SnapshotLineage;
5
+ valueLineage?: Record<string, ValueLineage>;
6
+ detachedValues?: Record<string, DetachedValue>;
7
+ }
8
+ export interface NodeValue<T = unknown> {
9
+ value: T;
10
+ isDirty?: boolean;
11
+ isValid?: boolean;
12
+ }
13
+ export interface ViewContext {
14
+ scrollX?: number;
15
+ scrollY?: number;
16
+ isExpanded?: boolean;
17
+ isFocused?: boolean;
18
+ }
19
+ export interface SnapshotLineage {
20
+ timestamp: number;
21
+ sessionId: string;
22
+ viewId?: string;
23
+ viewVersion?: string;
24
+ viewHash?: string;
25
+ lastInteractionId?: string;
26
+ }
27
+ export interface ValueLineage {
28
+ lastUpdated?: number;
29
+ lastInteractionId?: string;
30
+ }
31
+ export interface DetachedValue {
32
+ value: unknown;
33
+ previousNodeType: string;
34
+ key?: string;
35
+ detachedAt: number;
36
+ viewVersion: string;
37
+ reason: 'node-removed' | 'type-mismatch' | 'migration-failed';
38
+ }
39
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../packages/contract/src/lib/state.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC1C,OAAO,EAAE,eAAe,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,OAAO;IACpC,KAAK,EAAE,CAAC,CAAC;IACT,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,cAAc,GAAG,eAAe,GAAG,kBAAkB,CAAC;CAC/D"}