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

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 (165) hide show
  1. package/SKILL.md +4 -5
  2. package/dist/engine-wasm/wasm/lix_engine.js +1 -1
  3. package/dist/engine-wasm/wasm/lix_engine.wasm +0 -0
  4. package/dist/generated/builtin-schemas.d.ts +87 -162
  5. package/dist/generated/builtin-schemas.js +139 -236
  6. package/dist/open-lix.d.ts +1 -1
  7. package/dist-engine-src/src/binary_cas/types.rs +0 -6
  8. package/dist-engine-src/src/catalog/context.rs +412 -0
  9. package/dist-engine-src/src/catalog/mod.rs +10 -0
  10. package/dist-engine-src/src/catalog/schema.rs +4 -0
  11. package/dist-engine-src/src/catalog/snapshot.rs +1114 -0
  12. package/dist-engine-src/src/cel/mod.rs +1 -1
  13. package/dist-engine-src/src/cel/provider.rs +1 -1
  14. package/dist-engine-src/src/commit_graph/context.rs +328 -1015
  15. package/dist-engine-src/src/commit_graph/mod.rs +2 -3
  16. package/dist-engine-src/src/commit_graph/types.rs +7 -43
  17. package/dist-engine-src/src/commit_graph/walker.rs +57 -81
  18. package/dist-engine-src/src/commit_store/codec.rs +887 -0
  19. package/dist-engine-src/src/commit_store/context.rs +944 -0
  20. package/dist-engine-src/src/commit_store/materialization.rs +84 -0
  21. package/dist-engine-src/src/commit_store/mod.rs +16 -0
  22. package/dist-engine-src/src/commit_store/storage.rs +600 -0
  23. package/dist-engine-src/src/commit_store/types.rs +215 -0
  24. package/dist-engine-src/src/common/identity.rs +15 -5
  25. package/dist-engine-src/src/common/json_pointer.rs +67 -0
  26. package/dist-engine-src/src/common/metadata.rs +17 -12
  27. package/dist-engine-src/src/common/mod.rs +5 -5
  28. package/dist-engine-src/src/domain.rs +324 -0
  29. package/dist-engine-src/src/engine.rs +29 -43
  30. package/dist-engine-src/src/entity_identity.rs +238 -118
  31. package/dist-engine-src/src/functions/context.rs +17 -52
  32. package/dist-engine-src/src/functions/deterministic.rs +1 -1
  33. package/dist-engine-src/src/functions/mod.rs +1 -1
  34. package/dist-engine-src/src/functions/provider.rs +4 -4
  35. package/dist-engine-src/src/functions/state.rs +39 -66
  36. package/dist-engine-src/src/functions/types.rs +1 -1
  37. package/dist-engine-src/src/init.rs +204 -151
  38. package/dist-engine-src/src/json_store/context.rs +354 -60
  39. package/dist-engine-src/src/json_store/encoded.rs +6 -6
  40. package/dist-engine-src/src/json_store/mod.rs +4 -1
  41. package/dist-engine-src/src/json_store/store.rs +884 -11
  42. package/dist-engine-src/src/json_store/types.rs +166 -1
  43. package/dist-engine-src/src/lib.rs +10 -9
  44. package/dist-engine-src/src/live_state/context.rs +608 -830
  45. package/dist-engine-src/src/live_state/mod.rs +3 -3
  46. package/dist-engine-src/src/live_state/overlay.rs +7 -7
  47. package/dist-engine-src/src/live_state/reader.rs +5 -5
  48. package/dist-engine-src/src/live_state/types.rs +19 -36
  49. package/dist-engine-src/src/live_state/visibility.rs +19 -14
  50. package/dist-engine-src/src/plugin/archive.rs +3 -6
  51. package/dist-engine-src/src/plugin/install.rs +0 -18
  52. package/dist-engine-src/src/plugin/plugin_manifest.json +0 -1
  53. package/dist-engine-src/src/schema/annotations/defaults.rs +2 -7
  54. package/dist-engine-src/src/schema/builtin/lix_account.json +0 -1
  55. package/dist-engine-src/src/schema/builtin/lix_active_account.json +0 -1
  56. package/dist-engine-src/src/schema/builtin/lix_binary_blob_ref.json +0 -1
  57. package/dist-engine-src/src/schema/builtin/lix_change.json +11 -10
  58. package/dist-engine-src/src/schema/builtin/lix_change_author.json +0 -1
  59. package/dist-engine-src/src/schema/builtin/lix_commit.json +8 -46
  60. package/dist-engine-src/src/schema/builtin/lix_commit_edge.json +29 -22
  61. package/dist-engine-src/src/schema/builtin/lix_directory_descriptor.json +0 -1
  62. package/dist-engine-src/src/schema/builtin/lix_file_descriptor.json +0 -1
  63. package/dist-engine-src/src/schema/builtin/lix_key_value.json +0 -1
  64. package/dist-engine-src/src/schema/builtin/lix_label.json +10 -3
  65. package/dist-engine-src/src/schema/builtin/lix_label_assignment.json +74 -0
  66. package/dist-engine-src/src/schema/builtin/lix_registered_schema.json +2 -8
  67. package/dist-engine-src/src/schema/builtin/lix_version_descriptor.json +0 -1
  68. package/dist-engine-src/src/schema/builtin/lix_version_ref.json +0 -1
  69. package/dist-engine-src/src/schema/builtin/mod.rs +10 -59
  70. package/dist-engine-src/src/schema/compatibility.rs +787 -0
  71. package/dist-engine-src/src/schema/definition.json +47 -17
  72. package/dist-engine-src/src/schema/definition.rs +202 -96
  73. package/dist-engine-src/src/schema/key.rs +9 -77
  74. package/dist-engine-src/src/schema/mod.rs +4 -4
  75. package/dist-engine-src/src/schema/tests.rs +133 -92
  76. package/dist-engine-src/src/session/context.rs +40 -42
  77. package/dist-engine-src/src/session/create_version.rs +22 -14
  78. package/dist-engine-src/src/session/execute.rs +45 -14
  79. package/dist-engine-src/src/session/merge/apply.rs +4 -4
  80. package/dist-engine-src/src/session/merge/conflicts.rs +3 -2
  81. package/dist-engine-src/src/session/merge/stats.rs +1 -1
  82. package/dist-engine-src/src/session/merge/version.rs +35 -45
  83. package/dist-engine-src/src/session/mod.rs +4 -2
  84. package/dist-engine-src/src/session/optimization9_sql2_bench.rs +100 -0
  85. package/dist-engine-src/src/session/switch_version.rs +16 -28
  86. package/dist-engine-src/src/sql2/change_provider.rs +14 -20
  87. package/dist-engine-src/src/sql2/classify.rs +61 -26
  88. package/dist-engine-src/src/sql2/context.rs +22 -18
  89. package/dist-engine-src/src/sql2/directory_history_provider.rs +28 -20
  90. package/dist-engine-src/src/sql2/directory_provider.rs +131 -83
  91. package/dist-engine-src/src/sql2/entity_history_provider.rs +10 -14
  92. package/dist-engine-src/src/sql2/entity_provider.rs +680 -169
  93. package/dist-engine-src/src/sql2/error.rs +21 -1
  94. package/dist-engine-src/src/sql2/execute.rs +325 -264
  95. package/dist-engine-src/src/sql2/file_history_provider.rs +29 -21
  96. package/dist-engine-src/src/sql2/file_provider.rs +533 -108
  97. package/dist-engine-src/src/sql2/filesystem_planner.rs +58 -94
  98. package/dist-engine-src/src/sql2/filesystem_visibility.rs +37 -23
  99. package/dist-engine-src/src/sql2/history_projection.rs +3 -27
  100. package/dist-engine-src/src/sql2/history_provider.rs +11 -17
  101. package/dist-engine-src/src/sql2/history_route.rs +22 -8
  102. package/dist-engine-src/src/sql2/lix_state_provider.rs +178 -96
  103. package/dist-engine-src/src/sql2/mod.rs +6 -3
  104. package/dist-engine-src/src/sql2/predicate_typecheck.rs +246 -0
  105. package/dist-engine-src/src/sql2/public_bind/assignment.rs +46 -0
  106. package/dist-engine-src/src/sql2/public_bind/capability.rs +41 -0
  107. package/dist-engine-src/src/sql2/public_bind/dml.rs +166 -0
  108. package/dist-engine-src/src/sql2/public_bind/mod.rs +25 -0
  109. package/dist-engine-src/src/sql2/public_bind/table.rs +168 -0
  110. package/dist-engine-src/src/sql2/read_only.rs +10 -12
  111. package/dist-engine-src/src/sql2/session.rs +7 -10
  112. package/dist-engine-src/src/sql2/udfs/lix_timestamp.rs +76 -0
  113. package/dist-engine-src/src/sql2/udfs/mod.rs +8 -1
  114. package/dist-engine-src/src/sql2/udfs/public_call.rs +211 -0
  115. package/dist-engine-src/src/sql2/version_provider.rs +46 -31
  116. package/dist-engine-src/src/sql2/version_scope.rs +4 -4
  117. package/dist-engine-src/src/storage_bench.rs +1782 -325
  118. package/dist-engine-src/src/test_support.rs +183 -36
  119. package/dist-engine-src/src/tracked_state/by_file_index.rs +20 -24
  120. package/dist-engine-src/src/tracked_state/codec.rs +1519 -181
  121. package/dist-engine-src/src/tracked_state/context.rs +1155 -271
  122. package/dist-engine-src/src/tracked_state/diff.rs +249 -57
  123. package/dist-engine-src/src/tracked_state/materialization.rs +365 -103
  124. package/dist-engine-src/src/tracked_state/materializer.rs +488 -0
  125. package/dist-engine-src/src/tracked_state/merge.rs +37 -19
  126. package/dist-engine-src/src/tracked_state/mod.rs +8 -7
  127. package/dist-engine-src/src/tracked_state/storage.rs +138 -6
  128. package/dist-engine-src/src/tracked_state/tree.rs +695 -252
  129. package/dist-engine-src/src/tracked_state/types.rs +176 -6
  130. package/dist-engine-src/src/transaction/commit.rs +695 -435
  131. package/dist-engine-src/src/transaction/context.rs +551 -310
  132. package/dist-engine-src/src/transaction/live_state_overlay.rs +9 -8
  133. package/dist-engine-src/src/transaction/mod.rs +2 -0
  134. package/dist-engine-src/src/transaction/normalization.rs +311 -447
  135. package/dist-engine-src/src/transaction/prep.rs +37 -0
  136. package/dist-engine-src/src/transaction/schema_resolver.rs +93 -71
  137. package/dist-engine-src/src/transaction/staging.rs +701 -406
  138. package/dist-engine-src/src/transaction/types.rs +231 -122
  139. package/dist-engine-src/src/transaction/validation.rs +2717 -1698
  140. package/dist-engine-src/src/untracked_state/codec.rs +40 -96
  141. package/dist-engine-src/src/untracked_state/context.rs +21 -5
  142. package/dist-engine-src/src/untracked_state/materialization.rs +10 -104
  143. package/dist-engine-src/src/untracked_state/mod.rs +3 -5
  144. package/dist-engine-src/src/untracked_state/storage.rs +105 -57
  145. package/dist-engine-src/src/untracked_state/types.rs +63 -13
  146. package/dist-engine-src/src/version/context.rs +1 -13
  147. package/dist-engine-src/src/version/lifecycle.rs +221 -0
  148. package/dist-engine-src/src/version/mod.rs +3 -2
  149. package/dist-engine-src/src/version/refs.rs +12 -103
  150. package/dist-engine-src/src/version/stage_rows.rs +15 -19
  151. package/package.json +1 -1
  152. package/dist-engine-src/src/changelog/codec.rs +0 -321
  153. package/dist-engine-src/src/changelog/context.rs +0 -92
  154. package/dist-engine-src/src/changelog/materialization.rs +0 -121
  155. package/dist-engine-src/src/changelog/mod.rs +0 -13
  156. package/dist-engine-src/src/changelog/reader.rs +0 -20
  157. package/dist-engine-src/src/changelog/storage.rs +0 -220
  158. package/dist-engine-src/src/changelog/types.rs +0 -38
  159. package/dist-engine-src/src/schema/builtin/lix_change_set.json +0 -18
  160. package/dist-engine-src/src/schema/builtin/lix_change_set_element.json +0 -75
  161. package/dist-engine-src/src/schema/builtin/lix_entity_label.json +0 -63
  162. package/dist-engine-src/src/schema_registry.rs +0 -294
  163. package/dist-engine-src/src/sql2/commit_derived_provider.rs +0 -591
  164. package/dist-engine-src/src/tracked_state/rebuild.rs +0 -771
  165. 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(