@hraness/oh 0.4.1 → 0.4.2

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 (92) hide show
  1. package/LICENSE +3 -0
  2. package/README.md +4 -1
  3. package/dist/cli.d.ts +1 -1
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +15590 -1705
  6. package/dist/index.js +15209 -261
  7. package/dist/libsql-model.d.ts +75 -0
  8. package/dist/libsql-model.d.ts.map +1 -0
  9. package/dist/libsql-platform.d.ts +24 -0
  10. package/dist/libsql-platform.d.ts.map +1 -0
  11. package/dist/libsql-program.d.ts +64 -0
  12. package/dist/libsql-program.d.ts.map +1 -0
  13. package/dist/libsql-runtime.d.ts +13 -0
  14. package/dist/libsql-runtime.d.ts.map +1 -0
  15. package/dist/libsql.d.ts +4 -36
  16. package/dist/libsql.d.ts.map +1 -1
  17. package/dist/libsql.js +16583 -1426
  18. package/dist/memory-authority-platform.d.ts +210 -0
  19. package/dist/memory-authority-platform.d.ts.map +1 -0
  20. package/dist/memory-authority-program.d.ts +15 -0
  21. package/dist/memory-authority-program.d.ts.map +1 -0
  22. package/dist/memory-authority-runtime.d.ts +4 -0
  23. package/dist/memory-authority-runtime.d.ts.map +1 -0
  24. package/dist/memory-core.d.ts +522 -0
  25. package/dist/memory-core.d.ts.map +1 -0
  26. package/dist/memory.d.ts +5 -445
  27. package/dist/memory.d.ts.map +1 -1
  28. package/dist/memory.js +18232 -4143
  29. package/dist/sdk.js +15266 -318
  30. package/dist/semantic-cloud.js +1 -260
  31. package/dist/semantic-model.d.ts +75 -0
  32. package/dist/semantic-model.d.ts.map +1 -0
  33. package/dist/semantic-platform.d.ts +32 -0
  34. package/dist/semantic-platform.d.ts.map +1 -0
  35. package/dist/semantic-program.d.ts +18 -0
  36. package/dist/semantic-program.d.ts.map +1 -0
  37. package/dist/semantic-runtime.d.ts +6 -0
  38. package/dist/semantic-runtime.d.ts.map +1 -0
  39. package/dist/semantic.d.ts +6 -57
  40. package/dist/semantic.d.ts.map +1 -1
  41. package/dist/semantic.js +15541 -514
  42. package/dist/sqlite/index.js +1148 -1378
  43. package/dist/sqlite/port.d.ts +1 -1
  44. package/dist/sqlite/port.d.ts.map +1 -1
  45. package/dist/sync-libsql-program.d.ts +5 -0
  46. package/dist/sync-libsql-program.d.ts.map +1 -0
  47. package/dist/sync-model.d.ts +60 -0
  48. package/dist/sync-model.d.ts.map +1 -0
  49. package/dist/sync-platform.d.ts +41 -0
  50. package/dist/sync-platform.d.ts.map +1 -0
  51. package/dist/sync-program.d.ts +11 -0
  52. package/dist/sync-program.d.ts.map +1 -0
  53. package/dist/sync-runtime.d.ts +6 -0
  54. package/dist/sync-runtime.d.ts.map +1 -0
  55. package/dist/sync.d.ts +5 -55
  56. package/dist/sync.d.ts.map +1 -1
  57. package/dist/sync.js +15174 -226
  58. package/package.json +7 -5
  59. package/skills/oh/SKILL.md +2 -1
  60. package/spec/v1/store.md +14 -0
  61. package/src/cli.test.ts +35 -0
  62. package/src/cli.ts +4 -3
  63. package/src/cloudflare-embedding.ts +1 -1
  64. package/src/libsql-lifecycle.test.ts +76 -0
  65. package/src/libsql-model.ts +350 -0
  66. package/src/libsql-platform.ts +51 -0
  67. package/src/libsql-program.ts +1583 -0
  68. package/src/libsql-runtime.ts +89 -0
  69. package/src/libsql-semantic-v2.ts +1 -1
  70. package/src/libsql-semantic.ts +1 -1
  71. package/src/libsql.test.ts +245 -0
  72. package/src/libsql.ts +26 -1698
  73. package/src/memory-authority-platform.ts +133 -0
  74. package/src/memory-authority-program.ts +309 -0
  75. package/src/memory-authority-runtime.ts +40 -0
  76. package/src/memory-core.ts +2401 -0
  77. package/src/memory.test.ts +55 -0
  78. package/src/memory.ts +68 -2759
  79. package/src/semantic-model.ts +142 -0
  80. package/src/semantic-platform.ts +130 -0
  81. package/src/semantic-program.ts +113 -0
  82. package/src/semantic-runtime.ts +53 -0
  83. package/src/semantic.test.ts +115 -1
  84. package/src/semantic.ts +14 -324
  85. package/src/sqlite/port.ts +1 -1
  86. package/src/sync-libsql-program.ts +170 -0
  87. package/src/sync-lifecycle.test.ts +110 -0
  88. package/src/sync-model.ts +530 -0
  89. package/src/sync-platform.ts +87 -0
  90. package/src/sync-program.ts +117 -0
  91. package/src/sync-runtime.ts +33 -0
  92. package/src/sync.ts +10 -765
@@ -2251,3 +2251,58 @@ describe("stable host-bound Oh memory authority", () => {
2251
2251
  await byteBound.canonical.store.close(); await byteBound.working.store.close();
2252
2252
  });
2253
2253
  });
2254
+
2255
+ describe("Effect memory host ownership", () => {
2256
+ test("detaches queued requests and keeps FIFO live after an exact foreign failure", async () => {
2257
+ const entered = Promise.withResolvers<void>();
2258
+ const release = Promise.withResolvers<void>();
2259
+ const failure = Object.freeze({ kind: "foreign-test-failure" });
2260
+ let calls = 0;
2261
+ const value = await authorityFixture({ canonicalStore: store => new Proxy(store, {
2262
+ get(target, property) {
2263
+ if (property === "changesSince") return async (...args: Parameters<OhStoreV1["changesSince"]>) => {
2264
+ calls += 1;
2265
+ if (calls === 1) {
2266
+ entered.resolve();
2267
+ await release.promise;
2268
+ throw failure;
2269
+ }
2270
+ return await target.changesSince(...args);
2271
+ };
2272
+ const member: unknown = Reflect.get(target, property, target);
2273
+ return typeof member === "function" ? member.bind(target) : member;
2274
+ },
2275
+ }) });
2276
+ try {
2277
+ await put(value.canonical.store, "entity:second", "Second", "op_effect_second");
2278
+ const secondHead = await value.canonical.store.head();
2279
+ const first = value.authority.host.advanceCanonical({
2280
+ expectedHead: value.initialCanonicalHead, nextHead: secondHead, v: 1,
2281
+ }).then(() => undefined, error => error as unknown);
2282
+ await entered.promise;
2283
+ const queuedInput = { expectedHead: value.initialCanonicalHead, nextHead: secondHead, v: 1 };
2284
+ const queued = value.authority.host.advanceCanonical(queuedInput);
2285
+ await put(value.canonical.store, "entity:third", "Third", "op_effect_third");
2286
+ queuedInput.nextHead = await value.canonical.store.head();
2287
+ expect(calls).toBe(1);
2288
+ expect((await value.authority.agent.query({ bindings: {}, continuation: null,
2289
+ programId: "memory.visible-records", v: 2 })).identity.canonical.head).toEqual(value.initialCanonicalHead);
2290
+ release.resolve();
2291
+ expect(await first).toBe(failure);
2292
+ const receipt = await queued;
2293
+ expect(receipt.status).toBe("advanced");
2294
+ expect(receipt.head).toEqual(secondHead);
2295
+ expect(calls).toBe(2);
2296
+ const subsequent = await value.authority.host.advanceCanonical({
2297
+ expectedHead: secondHead, nextHead: queuedInput.nextHead, v: 1,
2298
+ });
2299
+ expect(subsequent.status).toBe("advanced");
2300
+ expect(subsequent.head).toEqual(queuedInput.nextHead);
2301
+ expect(calls).toBe(3);
2302
+ } finally {
2303
+ release.resolve();
2304
+ await value.canonical.store.close();
2305
+ await value.working.store.close();
2306
+ }
2307
+ });
2308
+ });