@hraness/oh 0.4.0 → 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.
- package/LICENSE +3 -0
- package/README.md +12 -9
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +15590 -1705
- package/dist/index.js +15209 -261
- package/dist/libsql-model.d.ts +75 -0
- package/dist/libsql-model.d.ts.map +1 -0
- package/dist/libsql-platform.d.ts +24 -0
- package/dist/libsql-platform.d.ts.map +1 -0
- package/dist/libsql-program.d.ts +64 -0
- package/dist/libsql-program.d.ts.map +1 -0
- package/dist/libsql-runtime.d.ts +13 -0
- package/dist/libsql-runtime.d.ts.map +1 -0
- package/dist/libsql.d.ts +4 -36
- package/dist/libsql.d.ts.map +1 -1
- package/dist/libsql.js +16583 -1426
- package/dist/memory-authority-platform.d.ts +210 -0
- package/dist/memory-authority-platform.d.ts.map +1 -0
- package/dist/memory-authority-program.d.ts +15 -0
- package/dist/memory-authority-program.d.ts.map +1 -0
- package/dist/memory-authority-runtime.d.ts +4 -0
- package/dist/memory-authority-runtime.d.ts.map +1 -0
- package/dist/memory-core.d.ts +522 -0
- package/dist/memory-core.d.ts.map +1 -0
- package/dist/memory.d.ts +5 -445
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +18232 -4143
- package/dist/sdk.js +15266 -318
- package/dist/semantic-cloud.js +1 -260
- package/dist/semantic-model.d.ts +75 -0
- package/dist/semantic-model.d.ts.map +1 -0
- package/dist/semantic-platform.d.ts +32 -0
- package/dist/semantic-platform.d.ts.map +1 -0
- package/dist/semantic-program.d.ts +18 -0
- package/dist/semantic-program.d.ts.map +1 -0
- package/dist/semantic-runtime.d.ts +6 -0
- package/dist/semantic-runtime.d.ts.map +1 -0
- package/dist/semantic.d.ts +6 -57
- package/dist/semantic.d.ts.map +1 -1
- package/dist/semantic.js +15541 -514
- package/dist/sqlite/index.js +1148 -1378
- package/dist/sqlite/port.d.ts +1 -1
- package/dist/sqlite/port.d.ts.map +1 -1
- package/dist/sync-libsql-program.d.ts +5 -0
- package/dist/sync-libsql-program.d.ts.map +1 -0
- package/dist/sync-model.d.ts +60 -0
- package/dist/sync-model.d.ts.map +1 -0
- package/dist/sync-platform.d.ts +41 -0
- package/dist/sync-platform.d.ts.map +1 -0
- package/dist/sync-program.d.ts +11 -0
- package/dist/sync-program.d.ts.map +1 -0
- package/dist/sync-runtime.d.ts +6 -0
- package/dist/sync-runtime.d.ts.map +1 -0
- package/dist/sync.d.ts +5 -55
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +15174 -226
- package/package.json +7 -5
- package/skills/oh/SKILL.md +3 -2
- package/spec/v1/store.md +14 -0
- package/src/cli.test.ts +35 -0
- package/src/cli.ts +4 -3
- package/src/cloudflare-embedding.ts +1 -1
- package/src/libsql-lifecycle.test.ts +76 -0
- package/src/libsql-model.ts +350 -0
- package/src/libsql-platform.ts +51 -0
- package/src/libsql-program.ts +1583 -0
- package/src/libsql-runtime.ts +89 -0
- package/src/libsql-semantic-v2.ts +1 -1
- package/src/libsql-semantic.ts +1 -1
- package/src/libsql.test.ts +245 -0
- package/src/libsql.ts +26 -1698
- package/src/memory-authority-platform.ts +133 -0
- package/src/memory-authority-program.ts +309 -0
- package/src/memory-authority-runtime.ts +40 -0
- package/src/memory-core.ts +2401 -0
- package/src/memory.test.ts +55 -0
- package/src/memory.ts +68 -2759
- package/src/semantic-model.ts +142 -0
- package/src/semantic-platform.ts +130 -0
- package/src/semantic-program.ts +113 -0
- package/src/semantic-runtime.ts +53 -0
- package/src/semantic.test.ts +115 -1
- package/src/semantic.ts +14 -324
- package/src/sqlite/port.ts +1 -1
- package/src/sync-libsql-program.ts +170 -0
- package/src/sync-lifecycle.test.ts +110 -0
- package/src/sync-model.ts +530 -0
- package/src/sync-platform.ts +87 -0
- package/src/sync-program.ts +117 -0
- package/src/sync-runtime.ts +33 -0
- package/src/sync.ts +10 -765
package/src/memory.test.ts
CHANGED
|
@@ -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
|
+
});
|