@lix-js/sdk 0.6.0-preview.2 → 0.6.0-preview.4

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 (169) hide show
  1. package/SKILL.md +46 -8
  2. package/dist/engine-wasm/wasm/lix_engine.d.ts +25 -1
  3. package/dist/engine-wasm/wasm/lix_engine.js +60 -2
  4. package/dist/engine-wasm/wasm/lix_engine.wasm +0 -0
  5. package/dist/engine-wasm/wasm/lix_engine.wasm.d.ts +5 -0
  6. package/dist/generated/builtin-schemas.d.ts +87 -162
  7. package/dist/generated/builtin-schemas.js +139 -236
  8. package/dist/open-lix.d.ts +10 -3
  9. package/dist/open-lix.js +39 -0
  10. package/dist-engine-src/src/binary_cas/types.rs +0 -6
  11. package/dist-engine-src/src/catalog/context.rs +412 -0
  12. package/dist-engine-src/src/catalog/mod.rs +10 -0
  13. package/dist-engine-src/src/catalog/schema.rs +4 -0
  14. package/dist-engine-src/src/catalog/snapshot.rs +1114 -0
  15. package/dist-engine-src/src/cel/mod.rs +1 -1
  16. package/dist-engine-src/src/cel/provider.rs +1 -1
  17. package/dist-engine-src/src/commit_graph/context.rs +328 -1015
  18. package/dist-engine-src/src/commit_graph/mod.rs +2 -3
  19. package/dist-engine-src/src/commit_graph/types.rs +7 -43
  20. package/dist-engine-src/src/commit_graph/walker.rs +57 -81
  21. package/dist-engine-src/src/commit_store/codec.rs +887 -0
  22. package/dist-engine-src/src/commit_store/context.rs +944 -0
  23. package/dist-engine-src/src/commit_store/materialization.rs +84 -0
  24. package/dist-engine-src/src/commit_store/mod.rs +16 -0
  25. package/dist-engine-src/src/commit_store/storage.rs +600 -0
  26. package/dist-engine-src/src/commit_store/types.rs +215 -0
  27. package/dist-engine-src/src/common/identity.rs +15 -5
  28. package/dist-engine-src/src/common/json_pointer.rs +67 -0
  29. package/dist-engine-src/src/common/metadata.rs +17 -12
  30. package/dist-engine-src/src/common/mod.rs +5 -5
  31. package/dist-engine-src/src/domain.rs +324 -0
  32. package/dist-engine-src/src/engine.rs +29 -43
  33. package/dist-engine-src/src/entity_identity.rs +238 -118
  34. package/dist-engine-src/src/functions/context.rs +17 -52
  35. package/dist-engine-src/src/functions/deterministic.rs +1 -1
  36. package/dist-engine-src/src/functions/mod.rs +1 -1
  37. package/dist-engine-src/src/functions/provider.rs +4 -4
  38. package/dist-engine-src/src/functions/state.rs +39 -66
  39. package/dist-engine-src/src/functions/types.rs +1 -1
  40. package/dist-engine-src/src/init.rs +204 -151
  41. package/dist-engine-src/src/json_store/context.rs +354 -60
  42. package/dist-engine-src/src/json_store/encoded.rs +6 -6
  43. package/dist-engine-src/src/json_store/mod.rs +4 -1
  44. package/dist-engine-src/src/json_store/store.rs +884 -11
  45. package/dist-engine-src/src/json_store/types.rs +166 -1
  46. package/dist-engine-src/src/lib.rs +11 -10
  47. package/dist-engine-src/src/live_state/context.rs +608 -830
  48. package/dist-engine-src/src/live_state/mod.rs +3 -3
  49. package/dist-engine-src/src/live_state/overlay.rs +7 -7
  50. package/dist-engine-src/src/live_state/reader.rs +5 -5
  51. package/dist-engine-src/src/live_state/types.rs +19 -36
  52. package/dist-engine-src/src/live_state/visibility.rs +19 -14
  53. package/dist-engine-src/src/plugin/archive.rs +3 -6
  54. package/dist-engine-src/src/plugin/install.rs +0 -18
  55. package/dist-engine-src/src/plugin/plugin_manifest.json +0 -1
  56. package/dist-engine-src/src/schema/annotations/defaults.rs +2 -7
  57. package/dist-engine-src/src/schema/builtin/lix_account.json +0 -1
  58. package/dist-engine-src/src/schema/builtin/lix_active_account.json +0 -1
  59. package/dist-engine-src/src/schema/builtin/lix_binary_blob_ref.json +0 -1
  60. package/dist-engine-src/src/schema/builtin/lix_change.json +11 -10
  61. package/dist-engine-src/src/schema/builtin/lix_change_author.json +0 -1
  62. package/dist-engine-src/src/schema/builtin/lix_commit.json +8 -46
  63. package/dist-engine-src/src/schema/builtin/lix_commit_edge.json +29 -22
  64. package/dist-engine-src/src/schema/builtin/lix_directory_descriptor.json +0 -1
  65. package/dist-engine-src/src/schema/builtin/lix_file_descriptor.json +0 -1
  66. package/dist-engine-src/src/schema/builtin/lix_key_value.json +0 -1
  67. package/dist-engine-src/src/schema/builtin/lix_label.json +10 -3
  68. package/dist-engine-src/src/schema/builtin/lix_label_assignment.json +74 -0
  69. package/dist-engine-src/src/schema/builtin/lix_registered_schema.json +2 -8
  70. package/dist-engine-src/src/schema/builtin/lix_version_descriptor.json +0 -1
  71. package/dist-engine-src/src/schema/builtin/lix_version_ref.json +0 -1
  72. package/dist-engine-src/src/schema/builtin/mod.rs +10 -59
  73. package/dist-engine-src/src/schema/compatibility.rs +787 -0
  74. package/dist-engine-src/src/schema/definition.json +47 -17
  75. package/dist-engine-src/src/schema/definition.rs +202 -96
  76. package/dist-engine-src/src/schema/key.rs +9 -77
  77. package/dist-engine-src/src/schema/mod.rs +4 -4
  78. package/dist-engine-src/src/schema/tests.rs +133 -92
  79. package/dist-engine-src/src/session/context.rs +86 -48
  80. package/dist-engine-src/src/session/create_version.rs +22 -14
  81. package/dist-engine-src/src/session/execute.rs +117 -23
  82. package/dist-engine-src/src/session/merge/apply.rs +4 -4
  83. package/dist-engine-src/src/session/merge/conflicts.rs +3 -2
  84. package/dist-engine-src/src/session/merge/stats.rs +1 -1
  85. package/dist-engine-src/src/session/merge/version.rs +35 -45
  86. package/dist-engine-src/src/session/mod.rs +9 -7
  87. package/dist-engine-src/src/session/optimization9_sql2_bench.rs +100 -0
  88. package/dist-engine-src/src/session/switch_version.rs +17 -28
  89. package/dist-engine-src/src/session/transaction.rs +76 -0
  90. package/dist-engine-src/src/sql2/change_provider.rs +14 -20
  91. package/dist-engine-src/src/sql2/classify.rs +75 -48
  92. package/dist-engine-src/src/sql2/context.rs +22 -18
  93. package/dist-engine-src/src/sql2/directory_history_provider.rs +28 -20
  94. package/dist-engine-src/src/sql2/directory_provider.rs +131 -83
  95. package/dist-engine-src/src/sql2/entity_history_provider.rs +10 -14
  96. package/dist-engine-src/src/sql2/entity_provider.rs +680 -169
  97. package/dist-engine-src/src/sql2/error.rs +24 -5
  98. package/dist-engine-src/src/sql2/execute.rs +426 -272
  99. package/dist-engine-src/src/sql2/file_history_provider.rs +29 -21
  100. package/dist-engine-src/src/sql2/file_provider.rs +533 -108
  101. package/dist-engine-src/src/sql2/filesystem_planner.rs +58 -94
  102. package/dist-engine-src/src/sql2/filesystem_visibility.rs +37 -23
  103. package/dist-engine-src/src/sql2/history_projection.rs +3 -27
  104. package/dist-engine-src/src/sql2/history_provider.rs +11 -17
  105. package/dist-engine-src/src/sql2/history_route.rs +22 -8
  106. package/dist-engine-src/src/sql2/lix_state_provider.rs +178 -96
  107. package/dist-engine-src/src/sql2/mod.rs +8 -4
  108. package/dist-engine-src/src/sql2/predicate_typecheck.rs +246 -0
  109. package/dist-engine-src/src/sql2/public_bind/assignment.rs +46 -0
  110. package/dist-engine-src/src/sql2/public_bind/capability.rs +41 -0
  111. package/dist-engine-src/src/sql2/public_bind/dml.rs +172 -0
  112. package/dist-engine-src/src/sql2/public_bind/mod.rs +26 -0
  113. package/dist-engine-src/src/sql2/public_bind/table.rs +168 -0
  114. package/dist-engine-src/src/sql2/read_only.rs +10 -12
  115. package/dist-engine-src/src/sql2/session.rs +7 -10
  116. package/dist-engine-src/src/sql2/udfs/lix_timestamp.rs +76 -0
  117. package/dist-engine-src/src/sql2/udfs/mod.rs +8 -1
  118. package/dist-engine-src/src/sql2/udfs/public_call.rs +238 -0
  119. package/dist-engine-src/src/sql2/version_provider.rs +46 -31
  120. package/dist-engine-src/src/sql2/version_scope.rs +4 -4
  121. package/dist-engine-src/src/storage_bench.rs +1782 -325
  122. package/dist-engine-src/src/test_support.rs +183 -36
  123. package/dist-engine-src/src/tracked_state/by_file_index.rs +20 -24
  124. package/dist-engine-src/src/tracked_state/codec.rs +1519 -181
  125. package/dist-engine-src/src/tracked_state/context.rs +1155 -271
  126. package/dist-engine-src/src/tracked_state/diff.rs +249 -57
  127. package/dist-engine-src/src/tracked_state/materialization.rs +365 -103
  128. package/dist-engine-src/src/tracked_state/materializer.rs +488 -0
  129. package/dist-engine-src/src/tracked_state/merge.rs +37 -19
  130. package/dist-engine-src/src/tracked_state/mod.rs +8 -7
  131. package/dist-engine-src/src/tracked_state/storage.rs +138 -6
  132. package/dist-engine-src/src/tracked_state/tree.rs +695 -252
  133. package/dist-engine-src/src/tracked_state/types.rs +176 -6
  134. package/dist-engine-src/src/transaction/commit.rs +695 -435
  135. package/dist-engine-src/src/transaction/context.rs +551 -310
  136. package/dist-engine-src/src/transaction/live_state_overlay.rs +9 -8
  137. package/dist-engine-src/src/transaction/mod.rs +2 -0
  138. package/dist-engine-src/src/transaction/normalization.rs +311 -447
  139. package/dist-engine-src/src/transaction/prep.rs +37 -0
  140. package/dist-engine-src/src/transaction/schema_resolver.rs +93 -71
  141. package/dist-engine-src/src/transaction/staging.rs +701 -406
  142. package/dist-engine-src/src/transaction/types.rs +231 -122
  143. package/dist-engine-src/src/transaction/validation.rs +2717 -1698
  144. package/dist-engine-src/src/untracked_state/codec.rs +40 -96
  145. package/dist-engine-src/src/untracked_state/context.rs +21 -5
  146. package/dist-engine-src/src/untracked_state/materialization.rs +10 -104
  147. package/dist-engine-src/src/untracked_state/mod.rs +3 -5
  148. package/dist-engine-src/src/untracked_state/storage.rs +105 -57
  149. package/dist-engine-src/src/untracked_state/types.rs +63 -13
  150. package/dist-engine-src/src/version/context.rs +1 -13
  151. package/dist-engine-src/src/version/lifecycle.rs +221 -0
  152. package/dist-engine-src/src/version/mod.rs +3 -2
  153. package/dist-engine-src/src/version/refs.rs +12 -103
  154. package/dist-engine-src/src/version/stage_rows.rs +15 -19
  155. package/package.json +1 -1
  156. package/dist-engine-src/src/changelog/codec.rs +0 -321
  157. package/dist-engine-src/src/changelog/context.rs +0 -92
  158. package/dist-engine-src/src/changelog/materialization.rs +0 -121
  159. package/dist-engine-src/src/changelog/mod.rs +0 -13
  160. package/dist-engine-src/src/changelog/reader.rs +0 -20
  161. package/dist-engine-src/src/changelog/storage.rs +0 -220
  162. package/dist-engine-src/src/changelog/types.rs +0 -38
  163. package/dist-engine-src/src/schema/builtin/lix_change_set.json +0 -18
  164. package/dist-engine-src/src/schema/builtin/lix_change_set_element.json +0 -75
  165. package/dist-engine-src/src/schema/builtin/lix_entity_label.json +0 -63
  166. package/dist-engine-src/src/schema_registry.rs +0 -294
  167. package/dist-engine-src/src/sql2/commit_derived_provider.rs +0 -591
  168. package/dist-engine-src/src/tracked_state/rebuild.rs +0 -771
  169. package/dist-engine-src/src/tracked_state/tree_types.rs +0 -176
@@ -1,14 +1,18 @@
1
1
  use std::collections::HashMap;
2
2
 
3
+ use crate::json_store::JsonStoreContext;
3
4
  use crate::storage::{KvGetGroup, KvGetRequest, StorageReader, StorageWriteSet};
4
5
  use crate::tracked_state::codec::PendingChunkWrite;
5
- use crate::tracked_state::tree_types::{TrackedStateRootId, TRACKED_STATE_HASH_BYTES};
6
+ use crate::tracked_state::types::{
7
+ TrackedStateDeltaEntry, TrackedStateDeltaRef, TrackedStateRootId, TRACKED_STATE_HASH_BYTES,
8
+ };
6
9
  use crate::LixError;
7
10
 
8
11
  pub(crate) const TRACKED_STATE_CHUNK_NAMESPACE: &'static str = "tracked_state.tree.chunk";
9
12
  pub(crate) const TRACKED_STATE_ROOT_NAMESPACE: &'static str = "tracked_state.tree.root";
10
13
  pub(crate) const TRACKED_STATE_BY_FILE_ROOT_NAMESPACE: &'static str =
11
14
  "tracked_state.tree.root.by_file";
15
+ pub(crate) const TRACKED_STATE_DELTA_PACK_NAMESPACE: &'static str = "tracked_state.delta_pack";
12
16
 
13
17
  async fn get_one(
14
18
  store: &mut (impl StorageReader + ?Sized),
@@ -85,13 +89,141 @@ pub(crate) fn stage_by_file_root(
85
89
  );
86
90
  }
87
91
 
88
- #[cfg(test)]
89
- pub(crate) fn stage_delete_root(writes: &mut StorageWriteSet, commit_id: &str) {
90
- writes.delete(TRACKED_STATE_ROOT_NAMESPACE, commit_id.as_bytes().to_vec());
91
- writes.delete(
92
- TRACKED_STATE_BY_FILE_ROOT_NAMESPACE,
92
+ pub(crate) async fn load_delta_pack(
93
+ store: &mut (impl StorageReader + ?Sized),
94
+ commit_id: &str,
95
+ ) -> Result<Option<Vec<TrackedStateDeltaEntry>>, LixError> {
96
+ let json_store = JsonStoreContext::new();
97
+ let result = store
98
+ .get_values(KvGetRequest {
99
+ groups: vec![
100
+ KvGetGroup {
101
+ namespace: TRACKED_STATE_DELTA_PACK_NAMESPACE.to_string(),
102
+ keys: vec![commit_id.as_bytes().to_vec()],
103
+ },
104
+ json_store.commit_pack_get_group(commit_id, 0),
105
+ ],
106
+ })
107
+ .await?;
108
+ let mut groups = result.groups.into_iter();
109
+ let delta_group = groups.next().ok_or_else(|| {
110
+ LixError::new(
111
+ LixError::CODE_INTERNAL_ERROR,
112
+ "tracked-state delta pack load returned no delta result group",
113
+ )
114
+ })?;
115
+ let json_pack_group = groups.next().ok_or_else(|| {
116
+ LixError::new(
117
+ LixError::CODE_INTERNAL_ERROR,
118
+ "tracked-state delta pack load returned no JSON pack result group",
119
+ )
120
+ })?;
121
+ let Some(bytes) = delta_group.single_value_owned() else {
122
+ return Ok(None);
123
+ };
124
+ let pack_refs = if crate::tracked_state::codec::delta_pack_uses_json_pack_indexes(&bytes)? {
125
+ json_pack_group
126
+ .single_value_owned()
127
+ .map(|bytes| json_store.decode_pack_refs(&bytes))
128
+ .transpose()?
129
+ } else {
130
+ None
131
+ };
132
+ let (stored_commit_id, entries) =
133
+ crate::tracked_state::codec::decode_delta_pack(&bytes, pack_refs.as_deref())?;
134
+ if stored_commit_id != commit_id {
135
+ return Err(LixError::new(
136
+ LixError::CODE_INTERNAL_ERROR,
137
+ format!(
138
+ "tracked-state delta pack identity mismatch: expected '{commit_id}', got '{stored_commit_id}'"
139
+ ),
140
+ ));
141
+ }
142
+ Ok(Some(entries))
143
+ }
144
+
145
+ pub(crate) async fn delta_pack_exists(
146
+ store: &mut (impl StorageReader + ?Sized),
147
+ commit_id: &str,
148
+ ) -> Result<bool, LixError> {
149
+ let result = store
150
+ .exists_many(KvGetRequest {
151
+ groups: vec![KvGetGroup {
152
+ namespace: TRACKED_STATE_DELTA_PACK_NAMESPACE.to_string(),
153
+ keys: vec![commit_id.as_bytes().to_vec()],
154
+ }],
155
+ })
156
+ .await?;
157
+ let group = result.groups.into_iter().next().ok_or_else(|| {
158
+ LixError::new(
159
+ LixError::CODE_INTERNAL_ERROR,
160
+ "tracked-state delta pack existence check returned no result group",
161
+ )
162
+ })?;
163
+ group.exists.into_iter().next().ok_or_else(|| {
164
+ LixError::new(
165
+ LixError::CODE_INTERNAL_ERROR,
166
+ "tracked-state delta pack existence check returned no result",
167
+ )
168
+ })
169
+ }
170
+
171
+ pub(crate) fn stage_delta_pack_refs(
172
+ writes: &mut StorageWriteSet,
173
+ commit_id: &str,
174
+ deltas: &[TrackedStateDeltaRef<'_>],
175
+ ) -> Result<(), LixError> {
176
+ writes.put(
177
+ TRACKED_STATE_DELTA_PACK_NAMESPACE,
178
+ commit_id.as_bytes().to_vec(),
179
+ crate::tracked_state::codec::encode_delta_pack_refs(commit_id, deltas)?,
180
+ );
181
+ Ok(())
182
+ }
183
+
184
+ pub(crate) struct DeltaJsonPackIndexesRef<'a> {
185
+ pub(crate) commit_id: &'a str,
186
+ pub(crate) pack_id: u32,
187
+ pub(crate) indexes: &'a std::collections::HashMap<[u8; TRACKED_STATE_HASH_BYTES], usize>,
188
+ }
189
+
190
+ pub(crate) fn stage_delta_pack_refs_with_json_pack_indexes(
191
+ writes: &mut StorageWriteSet,
192
+ commit_id: &str,
193
+ deltas: &[TrackedStateDeltaRef<'_>],
194
+ json_pack_indexes: DeltaJsonPackIndexesRef<'_>,
195
+ ) -> Result<(), LixError> {
196
+ if json_pack_indexes.commit_id != commit_id {
197
+ return Err(LixError::new(
198
+ LixError::CODE_INTERNAL_ERROR,
199
+ format!(
200
+ "tracked-state delta JSON pack indexes for '{}' cannot encode delta pack '{}'",
201
+ json_pack_indexes.commit_id, commit_id
202
+ ),
203
+ ));
204
+ }
205
+ if json_pack_indexes.pack_id != 0 {
206
+ return Err(LixError::new(
207
+ LixError::CODE_INTERNAL_ERROR,
208
+ format!(
209
+ "tracked-state delta JSON pack indexes only support pack 0, got pack {}",
210
+ json_pack_indexes.pack_id
211
+ ),
212
+ ));
213
+ }
214
+ if json_pack_indexes.indexes.is_empty() {
215
+ return stage_delta_pack_refs(writes, commit_id, deltas);
216
+ }
217
+ writes.put(
218
+ TRACKED_STATE_DELTA_PACK_NAMESPACE,
93
219
  commit_id.as_bytes().to_vec(),
220
+ crate::tracked_state::codec::encode_delta_pack_refs_with_json_pack_indexes(
221
+ commit_id,
222
+ deltas,
223
+ Some(json_pack_indexes.indexes),
224
+ )?,
94
225
  );
226
+ Ok(())
95
227
  }
96
228
 
97
229
  pub(crate) async fn read_chunk(