@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,4 +1,4 @@
1
- //! Engine2 runtime function boundary.
1
+ //! Engine runtime function boundary.
2
2
  //!
3
3
  //! Sessions prepare one function context per execution. SQL, providers, and
4
4
  //! transaction staging receive only a function provider; deterministic mode is
@@ -2,7 +2,7 @@ use std::sync::{Arc, Mutex};
2
2
 
3
3
  use crate::cel::CelFunctionProvider;
4
4
 
5
- /// Engine2-owned runtime function provider trait.
5
+ /// Engine-owned runtime function provider trait.
6
6
  pub(crate) trait FunctionProvider: Send {
7
7
  fn uuid_v7(&mut self) -> String;
8
8
  fn timestamp(&mut self) -> String;
@@ -38,7 +38,7 @@ impl<P> SharedFunctionProvider<P> {
38
38
  let guard = self
39
39
  .inner
40
40
  .lock()
41
- .expect("engine2 function provider mutex poisoned");
41
+ .expect("engine function provider mutex poisoned");
42
42
  f(&guard)
43
43
  }
44
44
 
@@ -46,7 +46,7 @@ impl<P> SharedFunctionProvider<P> {
46
46
  let mut guard = self
47
47
  .inner
48
48
  .lock()
49
- .expect("engine2 function provider mutex poisoned");
49
+ .expect("engine function provider mutex poisoned");
50
50
  f(&mut guard)
51
51
  }
52
52
  }
@@ -115,7 +115,7 @@ where
115
115
  }
116
116
  }
117
117
 
118
- /// System-backed engine2 function provider.
118
+ /// System-backed engine function provider.
119
119
  #[derive(Debug, Default, Clone, Copy)]
120
120
  pub(crate) struct SystemFunctionProvider;
121
121
 
@@ -1,10 +1,13 @@
1
1
  use serde_json::Value as JsonValue;
2
+ use std::sync::Arc;
2
3
 
3
4
  use crate::entity_identity::EntityIdentity;
4
5
  use crate::functions::{DeterministicMode, DeterministicSequence};
5
- use crate::json_store::JsonStoreWriter;
6
- use crate::live_state::{LiveStateReader, LiveStateRow, LiveStateRowRequest, LiveStateWriter};
7
- use crate::storage::{StorageReader, StorageWriteSet};
6
+ use crate::json_store::NormalizedJson;
7
+ use crate::live_state::{LiveStateReader, LiveStateRowRequest, MaterializedLiveStateRow};
8
+ use crate::storage::StorageWriteSet;
9
+ use crate::untracked_state::UntrackedStateContext;
10
+ use crate::untracked_state::UntrackedStateRow;
8
11
  use crate::GLOBAL_VERSION_ID;
9
12
  use crate::{LixError, NullableKeyFilter};
10
13
 
@@ -12,7 +15,6 @@ pub(crate) const DETERMINISTIC_MODE_KEY: &str = "lix_deterministic_mode";
12
15
  pub(crate) const DETERMINISTIC_SEQUENCE_KEY: &str = "lix_deterministic_sequence_number";
13
16
 
14
17
  const KEY_VALUE_SCHEMA_KEY: &str = "lix_key_value";
15
- const KEY_VALUE_SCHEMA_VERSION: &str = "1";
16
18
 
17
19
  /// Loads deterministic-mode settings from visible live state.
18
20
  ///
@@ -46,16 +48,11 @@ pub(crate) async fn load_sequence(
46
48
  ///
47
49
  /// The row is untracked global `lix_key_value` state: it is durable local
48
50
  /// runtime state, not a changelog fact.
49
- pub(crate) async fn stage_sequence<S>(
50
- writer: &mut LiveStateWriter<S>,
51
+ pub(crate) async fn stage_sequence(
51
52
  writes: &mut StorageWriteSet,
52
- json_writer: &mut JsonStoreWriter,
53
53
  sequence: DeterministicSequence,
54
54
  timestamp: &str,
55
- ) -> Result<(), LixError>
56
- where
57
- S: StorageReader,
58
- {
55
+ ) -> Result<(), LixError> {
59
56
  let snapshot_content = serde_json::to_string(&serde_json::json!({
60
57
  "key": DETERMINISTIC_SEQUENCE_KEY,
61
58
  "value": sequence.highest_seen,
@@ -66,18 +63,18 @@ where
66
63
  format!("deterministic sequence snapshot serialization failed: {error}"),
67
64
  )
68
65
  })?;
69
- let row = deterministic_key_value_row(
70
- DETERMINISTIC_SEQUENCE_KEY,
71
- snapshot_content,
72
- timestamp.to_string(),
73
- );
74
- writer.stage_rows(writes, json_writer, &[row]).await
66
+ let snapshot = NormalizedJson::from_arc_unchecked(Arc::from(snapshot_content.as_str()));
67
+ let row =
68
+ deterministic_key_value_row(DETERMINISTIC_SEQUENCE_KEY, snapshot.as_str(), timestamp)?;
69
+ UntrackedStateContext::new()
70
+ .writer(writes)
71
+ .stage_rows(std::iter::once(row.as_ref()))
75
72
  }
76
73
 
77
74
  async fn load_key_value_row(
78
75
  live_state: &dyn LiveStateReader,
79
76
  key: &str,
80
- ) -> Result<Option<LiveStateRow>, LixError> {
77
+ ) -> Result<Option<MaterializedLiveStateRow>, LixError> {
81
78
  live_state
82
79
  .load_row(&LiveStateRowRequest {
83
80
  schema_key: KEY_VALUE_SCHEMA_KEY.to_string(),
@@ -88,7 +85,7 @@ async fn load_key_value_row(
88
85
  .await
89
86
  }
90
87
 
91
- fn key_value_payload(row: &LiveStateRow, key: &str) -> Result<JsonValue, LixError> {
88
+ fn key_value_payload(row: &MaterializedLiveStateRow, key: &str) -> Result<JsonValue, LixError> {
92
89
  let snapshot_content = row.snapshot_content.as_deref().ok_or_else(|| {
93
90
  LixError::new(
94
91
  "LIX_ERROR_UNKNOWN",
@@ -153,24 +150,20 @@ fn parse_sequence_value(value: JsonValue) -> Result<DeterministicSequence, LixEr
153
150
 
154
151
  fn deterministic_key_value_row(
155
152
  key: &str,
156
- snapshot_content: String,
157
- timestamp: String,
158
- ) -> LiveStateRow {
159
- LiveStateRow {
153
+ snapshot_content: &str,
154
+ timestamp: &str,
155
+ ) -> Result<UntrackedStateRow, LixError> {
156
+ Ok(UntrackedStateRow {
160
157
  entity_id: crate::entity_identity::EntityIdentity::single(key),
161
158
  schema_key: KEY_VALUE_SCHEMA_KEY.to_string(),
162
159
  file_id: None,
163
- snapshot_content: Some(snapshot_content),
160
+ snapshot_content: Some(snapshot_content.to_string()),
164
161
  metadata: None,
165
- schema_version: KEY_VALUE_SCHEMA_VERSION.to_string(),
166
- created_at: timestamp.clone(),
167
- updated_at: timestamp,
162
+ created_at: timestamp.to_string(),
163
+ updated_at: timestamp.to_string(),
168
164
  global: true,
169
- change_id: None,
170
- commit_id: None,
171
- untracked: true,
172
165
  version_id: GLOBAL_VERSION_ID.to_string(),
173
- }
166
+ })
174
167
  }
175
168
 
176
169
  #[cfg(test)]
@@ -187,7 +180,7 @@ mod tests {
187
180
  LiveStateContext::new(
188
181
  crate::tracked_state::TrackedStateContext::new(),
189
182
  crate::untracked_state::UntrackedStateContext::new(),
190
- crate::commit_graph::CommitGraphContext::new(crate::changelog::ChangelogContext::new()),
183
+ crate::commit_graph::CommitGraphContext::new(),
191
184
  )
192
185
  }
193
186
 
@@ -213,7 +206,6 @@ mod tests {
213
206
  crate::test_support::seed_global_version_head(storage.clone()).await;
214
207
  write_test_key_value(
215
208
  storage.clone(),
216
- &live_state,
217
209
  DETERMINISTIC_MODE_KEY,
218
210
  serde_json::json!({
219
211
  "enabled": true,
@@ -256,7 +248,6 @@ mod tests {
256
248
  crate::test_support::seed_global_version_head(storage.clone()).await;
257
249
  write_test_key_value(
258
250
  storage.clone(),
259
- &live_state,
260
251
  DETERMINISTIC_SEQUENCE_KEY,
261
252
  serde_json::json!(41),
262
253
  )
@@ -283,19 +274,13 @@ mod tests {
283
274
  .expect("transaction should open");
284
275
 
285
276
  let mut writes = StorageWriteSet::new();
286
- let mut json_writer = crate::json_store::JsonStoreContext::new().writer();
287
- {
288
- let mut writer = live_state.writer(tx.as_mut());
289
- stage_sequence(
290
- &mut writer,
291
- &mut writes,
292
- &mut json_writer,
293
- DeterministicSequence { highest_seen: 7 },
294
- "1970-01-01T00:00:00.000Z",
295
- )
296
- .await
297
- .expect("sequence should stage");
298
- }
277
+ stage_sequence(
278
+ &mut writes,
279
+ DeterministicSequence { highest_seen: 7 },
280
+ "1970-01-01T00:00:00.000Z",
281
+ )
282
+ .await
283
+ .expect("sequence should stage");
299
284
  writes
300
285
  .apply(&mut tx.as_mut())
301
286
  .await
@@ -325,12 +310,7 @@ mod tests {
325
310
  );
326
311
  }
327
312
 
328
- async fn write_test_key_value(
329
- storage: StorageContext,
330
- live_state: &LiveStateContext,
331
- key: &str,
332
- value: JsonValue,
333
- ) {
313
+ async fn write_test_key_value(storage: StorageContext, key: &str, value: JsonValue) {
334
314
  let mut tx = storage
335
315
  .begin_write_transaction()
336
316
  .await
@@ -340,20 +320,13 @@ mod tests {
340
320
  "value": value,
341
321
  }))
342
322
  .expect("snapshot should serialize");
343
- let row = deterministic_key_value_row(
344
- key,
345
- snapshot_content,
346
- "1970-01-01T00:00:00.000Z".to_string(),
347
- );
348
323
  let mut writes = StorageWriteSet::new();
349
- let mut json_writer = crate::json_store::JsonStoreContext::new().writer();
350
- {
351
- let mut writer = live_state.writer(tx.as_mut());
352
- writer
353
- .stage_rows(&mut writes, &mut json_writer, &[row])
354
- .await
355
- .expect("test key-value should stage");
356
- }
324
+ let row = deterministic_key_value_row(key, &snapshot_content, "1970-01-01T00:00:00.000Z")
325
+ .expect("test key-value should canonicalize");
326
+ UntrackedStateContext::new()
327
+ .writer(&mut writes)
328
+ .stage_rows(std::iter::once(row.as_ref()))
329
+ .expect("test key-value should stage");
357
330
  writes
358
331
  .apply(&mut tx.as_mut())
359
332
  .await
@@ -1,7 +1,7 @@
1
1
  /// Decoded deterministic-mode setting.
2
2
  ///
3
3
  /// Storage can decide where this setting lives. The type only describes the
4
- /// behavior engine2 should apply while preparing runtime functions.
4
+ /// behavior engine should apply while preparing runtime functions.
5
5
  #[derive(Debug, Clone, Copy, PartialEq, Eq)]
6
6
  pub(crate) struct DeterministicMode {
7
7
  pub(crate) enabled: bool,