@koda-sl/baker-bridge 0.136.0 → 0.137.0-dev.2d26314a2

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 (37) hide show
  1. package/README.md +10 -1
  2. package/dist/hono/agent.d.ts.map +1 -1
  3. package/dist/hono/agent.js +2 -1
  4. package/dist/hono/agent.js.map +1 -1
  5. package/dist/hono/agent.test.js +5 -0
  6. package/dist/hono/agent.test.js.map +1 -1
  7. package/dist/hono/bridge-job.d.ts +20 -2
  8. package/dist/hono/bridge-job.d.ts.map +1 -1
  9. package/dist/hono/bridge-job.js +77 -5
  10. package/dist/hono/bridge-job.js.map +1 -1
  11. package/dist/hono/bridge-job.test.js +100 -0
  12. package/dist/hono/bridge-job.test.js.map +1 -1
  13. package/dist/hono/convex.d.ts +1 -1
  14. package/dist/hono/convex.d.ts.map +1 -1
  15. package/dist/hono/convex.js.map +1 -1
  16. package/dist/hono/relay.d.ts +1 -1
  17. package/dist/hono/relay.d.ts.map +1 -1
  18. package/dist/hono/relay.js.map +1 -1
  19. package/dist/hono/runtime-files.d.ts +1 -0
  20. package/dist/hono/runtime-files.d.ts.map +1 -1
  21. package/dist/hono/runtime-files.js +1 -0
  22. package/dist/hono/runtime-files.js.map +1 -1
  23. package/dist/hono/session-continuity.d.ts +16 -2
  24. package/dist/hono/session-continuity.d.ts.map +1 -1
  25. package/dist/hono/session-continuity.js +29 -0
  26. package/dist/hono/session-continuity.js.map +1 -1
  27. package/dist/hono/session-continuity.test.js +34 -1
  28. package/dist/hono/session-continuity.test.js.map +1 -1
  29. package/dist/hono/session-store.d.ts +21 -0
  30. package/dist/hono/session-store.d.ts.map +1 -1
  31. package/dist/hono/session-store.js +48 -0
  32. package/dist/hono/session-store.js.map +1 -1
  33. package/dist/hono/session-store.test.d.ts +2 -0
  34. package/dist/hono/session-store.test.d.ts.map +1 -0
  35. package/dist/hono/session-store.test.js +48 -0
  36. package/dist/hono/session-store.test.js.map +1 -0
  37. package/package.json +1 -1
@@ -0,0 +1,48 @@
1
+ import { mkdtemp, rm, writeFile } from "node:fs/promises";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
5
+ import { createBridgeRuntimeFiles } from "./runtime-files.js";
6
+ import { createInFlightTurnStore } from "./session-store.js";
7
+ let dir;
8
+ beforeEach(async () => {
9
+ dir = await mkdtemp(join(tmpdir(), "baker-inflight-"));
10
+ });
11
+ afterEach(async () => {
12
+ await rm(dir, { recursive: true, force: true });
13
+ });
14
+ function store() {
15
+ return createInFlightTurnStore(createBridgeRuntimeFiles({ projectRoot: dir, bakerHome: dir }));
16
+ }
17
+ describe("in-flight turn store", () => {
18
+ // The record outlives the bridge process on purpose: a rebooted VM keeps its
19
+ // disk, and the next bridge reads it when Convex sends the same turn again.
20
+ it("reads back the turn a previous bridge process was running", async () => {
21
+ await store().save("thread_1", { turnId: "thread_1:100", sessionId: "s_live", updatedAtMs: 7 });
22
+ await expect(store().load("thread_1")).resolves.toEqual({
23
+ version: 1,
24
+ turnId: "thread_1:100",
25
+ sessionId: "s_live",
26
+ updatedAtMs: 7,
27
+ });
28
+ });
29
+ // A replaced turn's run can finish after its successor started; its cleanup must
30
+ // not erase the record the successor needs if the VM goes down next.
31
+ it("keeps the record when a different turn ends", async () => {
32
+ await store().save("thread_1", { turnId: "thread_1:200", sessionId: "s_next", updatedAtMs: 9 });
33
+ await store().clear("thread_1", "thread_1:100");
34
+ await expect(store().load("thread_1")).resolves.toMatchObject({ turnId: "thread_1:200" });
35
+ });
36
+ it("drops the record when its own turn ends", async () => {
37
+ await store().save("thread_1", { turnId: "thread_1:100", sessionId: "s_live", updatedAtMs: 7 });
38
+ await store().clear("thread_1", "thread_1:100");
39
+ await expect(store().load("thread_1")).resolves.toBeUndefined();
40
+ });
41
+ it("treats a damaged record as no record", async () => {
42
+ const files = createBridgeRuntimeFiles({ projectRoot: dir, bakerHome: dir });
43
+ await store().save("thread_1", { turnId: "thread_1:100", sessionId: "s_live", updatedAtMs: 7 });
44
+ await writeFile(files.inFlightTurnFile("thread_1"), '{"version":1,"turnId":');
45
+ await expect(store().load("thread_1")).resolves.toBeUndefined();
46
+ });
47
+ });
48
+ //# sourceMappingURL=session-store.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-store.test.js","sourceRoot":"","sources":["../../src/hono/session-store.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@koda-sl/baker-bridge",
3
- "version": "0.136.0",
3
+ "version": "0.137.0-dev.2d26314a2",
4
4
  "description": "HTTP server wrapping the Claude Agent SDK. Persists chat events to Convex; the dashboard subscribes via Convex realtime",
5
5
  "license": "MIT",
6
6
  "type": "module",