@haikit/server 0.20.0 → 0.20.1

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/dist/routes.d.ts CHANGED
@@ -2,7 +2,8 @@ import type { IncomingMessage, ServerResponse } from "node:http";
2
2
  import type { Hai } from "./runtime.js";
3
3
  /**
4
4
  * Node http handler for the three routes, and a fourth when the app sends
5
- * notices. Returns true if it handled the request.
5
+ * notices. Returns true if it handled the request. It never rejects: a request
6
+ * that fails is answered, ended and logged (see `failed`).
6
7
  *
7
8
  * The three POST routes stream SSE: chat and interact because both can resume
8
9
  * the agent loop, start because the init tool it runs can render surfaces.
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGjE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAExC;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,SAAS,IACxB,KAAK,eAAe,EAAE,KAAK,cAAc,KAAG,OAAO,CAAC,OAAO,CAAC,CAuF1F;AAOD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAKlE"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGjE,OAAO,KAAK,EAAE,GAAG,EAAe,MAAM,cAAc,CAAC;AAErD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,SAAS,IACxB,KAAK,eAAe,EAAE,KAAK,cAAc,KAAG,OAAO,CAAC,OAAO,CAAC,CA+B1F;AA8GD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAKlE"}
package/dist/routes.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import { isConversationBusy, isStaleLease } from "@haikit/core";
2
2
  /**
3
3
  * Node http handler for the three routes, and a fourth when the app sends
4
- * notices. Returns true if it handled the request.
4
+ * notices. Returns true if it handled the request. It never rejects: a request
5
+ * that fails is answered, ended and logged (see `failed`).
5
6
  *
6
7
  * The three POST routes stream SSE: chat and interact because both can resume
7
8
  * the agent loop, start because the init tool it runs can render surfaces.
@@ -14,93 +15,143 @@ import { isConversationBusy, isStaleLease } from "@haikit/core";
14
15
  */
15
16
  export function nodeHandler(hai, basePath = "/hai") {
16
17
  return async function handle(req, res) {
17
- const url = new URL(req.url ?? "/", "http://localhost");
18
+ let url;
19
+ try {
20
+ url = new URL(req.url ?? "/", "http://localhost");
21
+ }
22
+ catch {
23
+ // Node accepts targets a URL can't parse, such as `//[`. None is under
24
+ // a base path, which a URL always parses, so it's not ours: the app's.
25
+ return false;
26
+ }
18
27
  if (!url.pathname.startsWith(basePath))
19
28
  return false;
20
29
  const route = url.pathname.slice(basePath.length);
21
30
  if (req.method === "GET" && route === "/events" && hai.streamsEvents) {
22
- await streamNotices(hai, req, res, url);
31
+ try {
32
+ await streamNotices(hai, req, res, url);
33
+ }
34
+ catch (err) {
35
+ failed(res, err);
36
+ }
23
37
  return true;
24
38
  }
25
39
  if (req.method !== "POST")
26
40
  return false;
27
41
  if (route !== "/chat" && route !== "/interact" && route !== "/start")
28
42
  return false;
29
- const body = await readJson(req);
30
- // Nothing to run before the first message: answer with an empty stream and
31
- // create no conversation, so an app without init doesn't get one for every
32
- // page view. Its first message starts the conversation, as it always has.
33
- if (route === "/start" && !hai.config.init) {
34
- openSSE(res);
35
- res.end();
36
- return true;
37
- }
38
- // Before the SSE stream opens, because a rejected load has no stream to
39
- // report into — and an uncaught throw here would take down the request.
40
- let conversation;
41
43
  try {
42
- conversation = await hai.config.store.loadConversation(body.conversationId);
44
+ await respond(hai, route, req, res);
43
45
  }
44
46
  catch (err) {
45
- if (!isConversationBusy(err))
46
- throw err;
47
- res.writeHead(409, { "content-type": "application/json" });
48
- res.end(JSON.stringify({ error: err.message }));
49
- return true;
47
+ failed(res, err);
50
48
  }
51
- const emit = openSSE(res);
52
- if (route === "/chat" || route === "/start") {
53
- emit({
54
- type: "hello",
55
- conversationId: conversation.id,
56
- model: hai.config.model.id,
57
- ...(hai.streamsEvents ? { events: true } : {}),
58
- });
49
+ return true;
50
+ };
51
+ }
52
+ /**
53
+ * A request that failed in a way the route has no event for, such as a store
54
+ * error: the browser is told, the response ends, and the error is logged. It
55
+ * is never thrown on to the server, where an unhandled rejection would take
56
+ * the process down and leave the response open.
57
+ */
58
+ function failed(res, err) {
59
+ console.error("[haikit] request failed:", err);
60
+ const message = err instanceof Error ? err.message : String(err);
61
+ if (!res.headersSent) {
62
+ res.writeHead(500, { "content-type": "application/json" });
63
+ res.end(JSON.stringify({ error: message }));
64
+ }
65
+ else if (!res.writableEnded) {
66
+ res.write(`data: ${JSON.stringify({ type: "error", message })}\n\n`);
67
+ res.end();
68
+ }
69
+ }
70
+ /** One of the three POST routes, once the request is known to be one. */
71
+ async function respond(hai, route, req, res) {
72
+ let body;
73
+ try {
74
+ body = await readJson(req);
75
+ }
76
+ catch {
77
+ res.writeHead(400, { "content-type": "application/json" });
78
+ res.end(JSON.stringify({ error: "the request body must be a JSON object" }));
79
+ return;
80
+ }
81
+ // Nothing to run before the first message: answer with an empty stream and
82
+ // create no conversation, so an app without init doesn't get one for every
83
+ // page view. Its first message starts the conversation, as it always has.
84
+ if (route === "/start" && !hai.config.init) {
85
+ openSSE(res);
86
+ res.end();
87
+ return;
88
+ }
89
+ // Before the SSE stream opens, because a rejected load has no stream to
90
+ // report into: busy is a 409, and anything else a 500 (see `failed`).
91
+ let conversation;
92
+ try {
93
+ conversation = await hai.config.store.loadConversation(body.conversationId);
94
+ }
95
+ catch (err) {
96
+ if (!isConversationBusy(err))
97
+ throw err;
98
+ res.writeHead(409, { "content-type": "application/json" });
99
+ res.end(JSON.stringify({ error: err.message }));
100
+ return;
101
+ }
102
+ const emit = openSSE(res);
103
+ if (route === "/chat" || route === "/start") {
104
+ emit({
105
+ type: "hello",
106
+ conversationId: conversation.id,
107
+ model: hai.config.model.id,
108
+ ...(hai.streamsEvents ? { events: true } : {}),
109
+ });
110
+ }
111
+ let superseded = false;
112
+ try {
113
+ if (route === "/chat") {
114
+ await hai.send(conversation, String(body.message ?? ""), emit);
59
115
  }
60
- let superseded = false;
116
+ else if (route === "/start") {
117
+ await hai.start(conversation, emit);
118
+ }
119
+ else {
120
+ await hai.interact(conversation, { handle: body.handle, action: body.action, value: body.value }, emit);
121
+ }
122
+ }
123
+ catch (err) {
124
+ if (isStaleLease(err))
125
+ superseded = true;
126
+ emit({ type: "error", message: err.message });
127
+ }
128
+ finally {
129
+ // The lease lives exactly as long as the request. Releasing it any
130
+ // earlier — when a turn parks, say — lets the client's next interaction
131
+ // arrive before this request has finished writing, and the two turns
132
+ // interleave on one conversation.
133
+ //
134
+ // Only the expiry is cleared. The token has to survive so the save below
135
+ // can still prove this request is the rightful holder.
136
+ conversation.leaseUntil = null;
61
137
  try {
62
- if (route === "/chat") {
63
- await hai.send(conversation, String(body.message ?? ""), emit);
64
- }
65
- else if (route === "/start") {
66
- await hai.start(conversation, emit);
67
- }
68
- else {
69
- await hai.interact(conversation, { handle: body.handle, action: body.action, value: body.value }, emit);
70
- }
138
+ // A turn that already hit a fence knows its save would be rejected too;
139
+ // attempting it only repeats the same error to the client.
140
+ if (!superseded)
141
+ await hai.config.store.saveConversation(conversation);
71
142
  }
72
143
  catch (err) {
73
- if (isStaleLease(err))
74
- superseded = true;
144
+ // Overtaken while we were slow: another turn already wrote newer state
145
+ // under a fresh token. Dropping this write is the correct outcome, but
146
+ // the client asked for something it is not getting, so say so. Any
147
+ // other failure goes to `failed`, which says so too, ends the response
148
+ // and logs it: the conversation stays held until its lease lapses.
149
+ if (!isStaleLease(err))
150
+ throw err;
75
151
  emit({ type: "error", message: err.message });
76
152
  }
77
- finally {
78
- // The lease lives exactly as long as the request. Releasing it any
79
- // earlier — when a turn parks, say — lets the client's next interaction
80
- // arrive before this request has finished writing, and the two turns
81
- // interleave on one conversation.
82
- //
83
- // Only the expiry is cleared. The token has to survive so the save below
84
- // can still prove this request is the rightful holder.
85
- conversation.leaseUntil = null;
86
- try {
87
- // A turn that already hit a fence knows its save would be rejected too;
88
- // attempting it only repeats the same error to the client.
89
- if (!superseded)
90
- await hai.config.store.saveConversation(conversation);
91
- }
92
- catch (err) {
93
- // Overtaken while we were slow: another turn already wrote newer state
94
- // under a fresh token. Dropping this write is the correct outcome, but
95
- // the client asked for something it is not getting, so say so.
96
- if (!isStaleLease(err))
97
- throw err;
98
- emit({ type: "error", message: err.message });
99
- }
100
- }
101
- res.end();
102
- return true;
103
- };
153
+ }
154
+ res.end();
104
155
  }
105
156
  /**
106
157
  * The longest a notice waits to be read. A store's `watch` makes it sooner;
@@ -303,11 +354,20 @@ async function streamNotices(hai, req, res, url) {
303
354
  // turn, nor behind the retries while another request holds the
304
355
  // conversation. One attempt at a time; a wake notice that lands meanwhile
305
356
  // asks for another once it is done.
357
+ //
358
+ // An attempt takes the conversation's lease and saves it, even when it
359
+ // finds nothing to do, and a request that arrives meanwhile is turned away
360
+ // busy. So it is made only when there may be something new: a wake notice,
361
+ // read from the store by any stream here, past the last one an attempt here
362
+ // settled. A polling browser opens a stream several times a minute; each
363
+ // would otherwise take the lease.
306
364
  let waking = null;
307
365
  let again = false;
308
366
  const wake = () => {
309
367
  if (!hai.wakes || signal.aborted)
310
368
  return;
369
+ if (watchers.wakeRead <= watchers.wakeSettled)
370
+ return;
311
371
  if (waking) {
312
372
  again = true;
313
373
  return;
@@ -315,12 +375,24 @@ async function streamNotices(hai, req, res, url) {
315
375
  waking = (async () => {
316
376
  do {
317
377
  again = false;
378
+ // every wake notice read here so far: what the attempt settles, unless it fails
379
+ const through = watchers.wakeRead;
318
380
  let wait = WAKE_RETRY_MS;
319
- while (!signal.aborted && (await hai.wake(conversationId, watchers.turn())) === "busy") {
381
+ let outcome = "busy";
382
+ while (!signal.aborted && (outcome = await hai.wake(conversationId, watchers.turn())) === "busy") {
320
383
  await pause(wait, signal);
321
384
  wait = Math.min(wait * 2, WAKE_RETRY_MAX_MS);
385
+ // Another stream here may have been the one holding it, with a turn
386
+ // that settled these notices: taking the lease again finds nothing.
387
+ if (through <= watchers.wakeSettled)
388
+ break;
322
389
  }
323
- } while (again && !signal.aborted);
390
+ // A failed turn gives its notices back to wake again, so it settles
391
+ // nothing: the next stream to open tries once more.
392
+ if (outcome !== "busy" && outcome !== "failed")
393
+ watchers.wakeSettled = Math.max(watchers.wakeSettled, through);
394
+ // asked again meanwhile: only if a notice came that this one didn't settle
395
+ } while (again && !signal.aborted && watchers.wakeRead > watchers.wakeSettled);
324
396
  })()
325
397
  .catch((err) => emit({ type: "error", message: err.message }))
326
398
  .finally(() => {
@@ -376,7 +448,10 @@ async function streamNotices(hai, req, res, url) {
376
448
  await sendRevision(n.handle, n.replaces, n.seq);
377
449
  after = n.seq;
378
450
  markFresh();
379
- woken ||= n.kind === "wake";
451
+ if (n.kind === "wake") {
452
+ woken = true;
453
+ watchers.wakeRead = Math.max(watchers.wakeRead, n.seq);
454
+ }
380
455
  continue;
381
456
  }
382
457
  const event = {
@@ -390,7 +465,10 @@ async function streamNotices(hai, req, res, url) {
390
465
  await write(`id: ${n.seq}\ndata: ${JSON.stringify(event)}\n\n`);
391
466
  after = n.seq;
392
467
  markFresh();
393
- woken ||= n.kind === "wake";
468
+ if (n.kind === "wake") {
469
+ woken = true;
470
+ watchers.wakeRead = Math.max(watchers.wakeRead, n.seq);
471
+ }
394
472
  }
395
473
  if (records.length < PAGE || signal.aborted)
396
474
  break;
@@ -441,7 +519,8 @@ async function streamNotices(hai, req, res, url) {
441
519
  freshened.then(() => new Promise((resolve) => setTimeout(resolve, POLL_GATHER_MS))),
442
520
  new Promise((resolve) => (hold = setTimeout(resolve, holdMs))),
443
521
  ]);
444
- void run().catch(() => { });
522
+ // a read that fails ends nothing early: the poll answers at its hold
523
+ void run().catch((err) => console.error("[haikit] events poll failed:", err));
445
524
  await done;
446
525
  clearTimeout(hold);
447
526
  }
@@ -619,6 +698,8 @@ function watchersOf(hai, conversationId) {
619
698
  lingering.unref?.();
620
699
  },
621
700
  ready: Promise.resolve(),
701
+ wakeRead: 0,
702
+ wakeSettled: -1,
622
703
  // A wake turn running here: its frames to this process's streams, and,
623
704
  // through the store, to every other process's. All but `context`, the
624
705
  // whole history, which another tab gets with its own next request.
@@ -727,10 +808,14 @@ function openSSE(res) {
727
808
  res.write(`data: ${JSON.stringify(event)}\n\n`);
728
809
  };
729
810
  }
811
+ /** The request body, as a JSON object; anything else, or a body that fails to arrive, throws. */
730
812
  async function readJson(req) {
731
813
  const chunks = [];
732
814
  for await (const chunk of req)
733
815
  chunks.push(chunk);
734
- return JSON.parse(Buffer.concat(chunks).toString() || "{}");
816
+ const body = JSON.parse(Buffer.concat(chunks).toString() || "{}");
817
+ if (!body || typeof body !== "object" || Array.isArray(body))
818
+ throw new TypeError("not a JSON object");
819
+ return body;
735
820
  }
736
821
  //# sourceMappingURL=routes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,YAAY,EAClB,MAAM,cAAc,CAAC;AAItB,MAAM,WAAW,kBAAkB;IACjC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,YAAY,CA2L1E"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,YAAY,EAClB,MAAM,cAAc,CAAC;AA0BtB,MAAM,WAAW,kBAAkB;IACjC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,YAAY,CA4L1E"}
package/dist/store.js CHANGED
@@ -1,5 +1,27 @@
1
1
  import { ConversationBusy, StaleLease, } from "@haikit/core";
2
2
  const LEASE_MS = 120_000;
3
+ /**
4
+ * Postgres refuses U+0000 anywhere in text or jsonb, and a lone UTF-16
5
+ * surrogate in jsonb, so pgStore makes them storable as it saves. This store
6
+ * does the same, so development sees what production would store. Each
7
+ * becomes U+FFFD, the replacement character, in strings and object keys
8
+ * alike.
9
+ */
10
+ const UNSTORABLE = /\u0000|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g;
11
+ const MAYBE_UNSTORABLE = /[\u0000\uD800-\uDFFF]/;
12
+ const storable = (s) => (MAYBE_UNSTORABLE.test(s) ? s.replace(UNSTORABLE, "\uFFFD") : s);
13
+ /** A `JSON.stringify` replacer that makes every string and key storable. */
14
+ function storableJson(_key, value) {
15
+ if (typeof value === "string")
16
+ return storable(value);
17
+ if (value && typeof value === "object" && !Array.isArray(value)) {
18
+ const keys = Object.keys(value);
19
+ if (keys.some((k) => MAYBE_UNSTORABLE.test(k))) {
20
+ return Object.fromEntries(keys.map((k) => [storable(k), value[k]]));
21
+ }
22
+ }
23
+ return value;
24
+ }
3
25
  /**
4
26
  * In-memory store. Implements the same interface a Postgres store would, and
5
27
  * enforces the same rules — scoping, leasing and fencing are all checked here
@@ -38,7 +60,8 @@ export function memoryStore(options = {}) {
38
60
  const subscribers = new Map();
39
61
  let convSeq = 0;
40
62
  let handleSeq = 0;
41
- const copy = (value) => JSON.parse(JSON.stringify(value));
63
+ // and anything Postgres can't store comes back as pgStore would return it
64
+ const copy = (value) => JSON.parse(JSON.stringify(value, storableJson));
42
65
  const newToken = () => globalThis.crypto.randomUUID();
43
66
  /** Every durable mutation presents the token it was issued. A holder that has
44
67
  * been superseded must stop writing rather than run to completion and be
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haikit/server",
3
- "version": "0.20.0",
3
+ "version": "0.20.1",
4
4
  "description": "The haikit server runtime: agent loop, elicit state machine, derived query_ui, and the interaction security boundary.",
5
5
  "keywords": [
6
6
  "haikit",
@@ -36,7 +36,7 @@
36
36
  "prepack": "npm --prefix ../.. run build"
37
37
  },
38
38
  "dependencies": {
39
- "@haikit/core": "0.20.0",
39
+ "@haikit/core": "0.20.1",
40
40
  "@types/node": ">=22"
41
41
  },
42
42
  "publishConfig": {
package/src/routes.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  import type { IncomingMessage, ServerResponse } from "node:http";
2
2
  import { isConversationBusy, isStaleLease } from "@haikit/core";
3
3
  import type { Emit, NoticeRecord, WireEvent } from "@haikit/core";
4
- import type { Hai } from "./runtime.js";
4
+ import type { Hai, WakeOutcome } from "./runtime.js";
5
5
 
6
6
  /**
7
7
  * Node http handler for the three routes, and a fourth when the app sends
8
- * notices. Returns true if it handled the request.
8
+ * notices. Returns true if it handled the request. It never rejects: a request
9
+ * that fails is answered, ended and logged (see `failed`).
9
10
  *
10
11
  * The three POST routes stream SSE: chat and interact because both can resume
11
12
  * the agent loop, start because the init tool it runs can render surfaces.
@@ -18,92 +19,139 @@ import type { Hai } from "./runtime.js";
18
19
  */
19
20
  export function nodeHandler(hai: Hai, basePath = "/hai") {
20
21
  return async function handle(req: IncomingMessage, res: ServerResponse): Promise<boolean> {
21
- const url = new URL(req.url ?? "/", "http://localhost");
22
+ let url: URL;
23
+ try {
24
+ url = new URL(req.url ?? "/", "http://localhost");
25
+ } catch {
26
+ // Node accepts targets a URL can't parse, such as `//[`. None is under
27
+ // a base path, which a URL always parses, so it's not ours: the app's.
28
+ return false;
29
+ }
22
30
  if (!url.pathname.startsWith(basePath)) return false;
23
31
  const route = url.pathname.slice(basePath.length);
24
32
 
25
33
  if (req.method === "GET" && route === "/events" && hai.streamsEvents) {
26
- await streamNotices(hai, req, res, url);
34
+ try {
35
+ await streamNotices(hai, req, res, url);
36
+ } catch (err) {
37
+ failed(res, err);
38
+ }
27
39
  return true;
28
40
  }
29
41
 
30
42
  if (req.method !== "POST") return false;
31
43
  if (route !== "/chat" && route !== "/interact" && route !== "/start") return false;
32
44
 
33
- const body = await readJson(req);
34
-
35
- // Nothing to run before the first message: answer with an empty stream and
36
- // create no conversation, so an app without init doesn't get one for every
37
- // page view. Its first message starts the conversation, as it always has.
38
- if (route === "/start" && !hai.config.init) {
39
- openSSE(res);
40
- res.end();
41
- return true;
42
- }
43
-
44
- // Before the SSE stream opens, because a rejected load has no stream to
45
- // report into — and an uncaught throw here would take down the request.
46
- let conversation;
47
45
  try {
48
- conversation = await hai.config.store.loadConversation(body.conversationId);
46
+ await respond(hai, route, req, res);
49
47
  } catch (err) {
50
- if (!isConversationBusy(err)) throw err;
51
- res.writeHead(409, { "content-type": "application/json" });
52
- res.end(JSON.stringify({ error: (err as Error).message }));
53
- return true;
48
+ failed(res, err);
54
49
  }
50
+ return true;
51
+ };
52
+ }
55
53
 
56
- const emit = openSSE(res);
57
- if (route === "/chat" || route === "/start") {
58
- emit({
59
- type: "hello",
60
- conversationId: conversation.id,
61
- model: hai.config.model.id,
62
- ...(hai.streamsEvents ? { events: true as const } : {}),
63
- });
64
- }
54
+ /**
55
+ * A request that failed in a way the route has no event for, such as a store
56
+ * error: the browser is told, the response ends, and the error is logged. It
57
+ * is never thrown on to the server, where an unhandled rejection would take
58
+ * the process down and leave the response open.
59
+ */
60
+ function failed(res: ServerResponse, err: unknown) {
61
+ console.error("[haikit] request failed:", err);
62
+ const message = err instanceof Error ? err.message : String(err);
63
+ if (!res.headersSent) {
64
+ res.writeHead(500, { "content-type": "application/json" });
65
+ res.end(JSON.stringify({ error: message }));
66
+ } else if (!res.writableEnded) {
67
+ res.write(`data: ${JSON.stringify({ type: "error", message } satisfies WireEvent)}\n\n`);
68
+ res.end();
69
+ }
70
+ }
65
71
 
66
- let superseded = false;
72
+ /** One of the three POST routes, once the request is known to be one. */
73
+ async function respond(hai: Hai, route: string, req: IncomingMessage, res: ServerResponse) {
74
+ let body: Record<string, any>;
75
+ try {
76
+ body = await readJson(req);
77
+ } catch {
78
+ res.writeHead(400, { "content-type": "application/json" });
79
+ res.end(JSON.stringify({ error: "the request body must be a JSON object" }));
80
+ return;
81
+ }
82
+
83
+ // Nothing to run before the first message: answer with an empty stream and
84
+ // create no conversation, so an app without init doesn't get one for every
85
+ // page view. Its first message starts the conversation, as it always has.
86
+ if (route === "/start" && !hai.config.init) {
87
+ openSSE(res);
88
+ res.end();
89
+ return;
90
+ }
91
+
92
+ // Before the SSE stream opens, because a rejected load has no stream to
93
+ // report into: busy is a 409, and anything else a 500 (see `failed`).
94
+ let conversation;
95
+ try {
96
+ conversation = await hai.config.store.loadConversation(body.conversationId);
97
+ } catch (err) {
98
+ if (!isConversationBusy(err)) throw err;
99
+ res.writeHead(409, { "content-type": "application/json" });
100
+ res.end(JSON.stringify({ error: (err as Error).message }));
101
+ return;
102
+ }
103
+
104
+ const emit = openSSE(res);
105
+ if (route === "/chat" || route === "/start") {
106
+ emit({
107
+ type: "hello",
108
+ conversationId: conversation.id,
109
+ model: hai.config.model.id,
110
+ ...(hai.streamsEvents ? { events: true as const } : {}),
111
+ });
112
+ }
113
+
114
+ let superseded = false;
115
+ try {
116
+ if (route === "/chat") {
117
+ await hai.send(conversation, String(body.message ?? ""), emit);
118
+ } else if (route === "/start") {
119
+ await hai.start(conversation, emit);
120
+ } else {
121
+ await hai.interact(
122
+ conversation,
123
+ { handle: body.handle, action: body.action, value: body.value },
124
+ emit,
125
+ );
126
+ }
127
+ } catch (err) {
128
+ if (isStaleLease(err)) superseded = true;
129
+ emit({ type: "error", message: (err as Error).message });
130
+ } finally {
131
+ // The lease lives exactly as long as the request. Releasing it any
132
+ // earlier — when a turn parks, say — lets the client's next interaction
133
+ // arrive before this request has finished writing, and the two turns
134
+ // interleave on one conversation.
135
+ //
136
+ // Only the expiry is cleared. The token has to survive so the save below
137
+ // can still prove this request is the rightful holder.
138
+ conversation.leaseUntil = null;
67
139
  try {
68
- if (route === "/chat") {
69
- await hai.send(conversation, String(body.message ?? ""), emit);
70
- } else if (route === "/start") {
71
- await hai.start(conversation, emit);
72
- } else {
73
- await hai.interact(
74
- conversation,
75
- { handle: body.handle, action: body.action, value: body.value },
76
- emit,
77
- );
78
- }
140
+ // A turn that already hit a fence knows its save would be rejected too;
141
+ // attempting it only repeats the same error to the client.
142
+ if (!superseded) await hai.config.store.saveConversation(conversation);
79
143
  } catch (err) {
80
- if (isStaleLease(err)) superseded = true;
144
+ // Overtaken while we were slow: another turn already wrote newer state
145
+ // under a fresh token. Dropping this write is the correct outcome, but
146
+ // the client asked for something it is not getting, so say so. Any
147
+ // other failure goes to `failed`, which says so too, ends the response
148
+ // and logs it: the conversation stays held until its lease lapses.
149
+ if (!isStaleLease(err)) throw err;
81
150
  emit({ type: "error", message: (err as Error).message });
82
- } finally {
83
- // The lease lives exactly as long as the request. Releasing it any
84
- // earlier — when a turn parks, say — lets the client's next interaction
85
- // arrive before this request has finished writing, and the two turns
86
- // interleave on one conversation.
87
- //
88
- // Only the expiry is cleared. The token has to survive so the save below
89
- // can still prove this request is the rightful holder.
90
- conversation.leaseUntil = null;
91
- try {
92
- // A turn that already hit a fence knows its save would be rejected too;
93
- // attempting it only repeats the same error to the client.
94
- if (!superseded) await hai.config.store.saveConversation(conversation);
95
- } catch (err) {
96
- // Overtaken while we were slow: another turn already wrote newer state
97
- // under a fresh token. Dropping this write is the correct outcome, but
98
- // the client asked for something it is not getting, so say so.
99
- if (!isStaleLease(err)) throw err;
100
- emit({ type: "error", message: (err as Error).message });
101
- }
102
151
  }
152
+ }
103
153
 
104
- res.end();
105
- return true;
106
- };
154
+ res.end();
107
155
  }
108
156
 
109
157
  /**
@@ -306,10 +354,18 @@ async function streamNotices(hai: Hai, req: IncomingMessage, res: ServerResponse
306
354
  // turn, nor behind the retries while another request holds the
307
355
  // conversation. One attempt at a time; a wake notice that lands meanwhile
308
356
  // asks for another once it is done.
357
+ //
358
+ // An attempt takes the conversation's lease and saves it, even when it
359
+ // finds nothing to do, and a request that arrives meanwhile is turned away
360
+ // busy. So it is made only when there may be something new: a wake notice,
361
+ // read from the store by any stream here, past the last one an attempt here
362
+ // settled. A polling browser opens a stream several times a minute; each
363
+ // would otherwise take the lease.
309
364
  let waking: Promise<void> | null = null;
310
365
  let again = false;
311
366
  const wake = () => {
312
367
  if (!hai.wakes || signal.aborted) return;
368
+ if (watchers.wakeRead <= watchers.wakeSettled) return;
313
369
  if (waking) {
314
370
  again = true;
315
371
  return;
@@ -317,12 +373,22 @@ async function streamNotices(hai: Hai, req: IncomingMessage, res: ServerResponse
317
373
  waking = (async () => {
318
374
  do {
319
375
  again = false;
376
+ // every wake notice read here so far: what the attempt settles, unless it fails
377
+ const through = watchers.wakeRead;
320
378
  let wait = WAKE_RETRY_MS;
321
- while (!signal.aborted && (await hai.wake(conversationId, watchers.turn())) === "busy") {
379
+ let outcome: WakeOutcome = "busy";
380
+ while (!signal.aborted && (outcome = await hai.wake(conversationId, watchers.turn())) === "busy") {
322
381
  await pause(wait, signal);
323
382
  wait = Math.min(wait * 2, WAKE_RETRY_MAX_MS);
383
+ // Another stream here may have been the one holding it, with a turn
384
+ // that settled these notices: taking the lease again finds nothing.
385
+ if (through <= watchers.wakeSettled) break;
324
386
  }
325
- } while (again && !signal.aborted);
387
+ // A failed turn gives its notices back to wake again, so it settles
388
+ // nothing: the next stream to open tries once more.
389
+ if (outcome !== "busy" && outcome !== "failed") watchers.wakeSettled = Math.max(watchers.wakeSettled, through);
390
+ // asked again meanwhile: only if a notice came that this one didn't settle
391
+ } while (again && !signal.aborted && watchers.wakeRead > watchers.wakeSettled);
326
392
  })()
327
393
  .catch((err) => emit({ type: "error", message: (err as Error).message }))
328
394
  .finally(() => {
@@ -374,7 +440,10 @@ async function streamNotices(hai: Hai, req: IncomingMessage, res: ServerResponse
374
440
  await sendRevision(n.handle, n.replaces, n.seq);
375
441
  after = n.seq;
376
442
  markFresh();
377
- woken ||= n.kind === "wake";
443
+ if (n.kind === "wake") {
444
+ woken = true;
445
+ watchers.wakeRead = Math.max(watchers.wakeRead, n.seq);
446
+ }
378
447
  continue;
379
448
  }
380
449
  const event: WireEvent = {
@@ -388,7 +457,10 @@ async function streamNotices(hai: Hai, req: IncomingMessage, res: ServerResponse
388
457
  await write(`id: ${n.seq}\ndata: ${JSON.stringify(event)}\n\n`);
389
458
  after = n.seq;
390
459
  markFresh();
391
- woken ||= n.kind === "wake";
460
+ if (n.kind === "wake") {
461
+ woken = true;
462
+ watchers.wakeRead = Math.max(watchers.wakeRead, n.seq);
463
+ }
392
464
  }
393
465
  if (records.length < PAGE || signal.aborted) break;
394
466
  page = null;
@@ -432,7 +504,8 @@ async function streamNotices(hai: Hai, req: IncomingMessage, res: ServerResponse
432
504
  freshened.then(() => new Promise<void>((resolve) => setTimeout(resolve, POLL_GATHER_MS))),
433
505
  new Promise<void>((resolve) => (hold = setTimeout(resolve, holdMs))),
434
506
  ]);
435
- void run().catch(() => {});
507
+ // a read that fails ends nothing early: the poll answers at its hold
508
+ void run().catch((err) => console.error("[haikit] events poll failed:", err));
436
509
  await done;
437
510
  clearTimeout(hold);
438
511
  } finally {
@@ -486,6 +559,21 @@ interface Watchers {
486
559
  leave: () => void;
487
560
  /** Settles once this process is listening for other processes' turns. */
488
561
  ready: Promise<void>;
562
+ /**
563
+ * The highest seq of a wake notice any stream here has read from the store,
564
+ * whether or not an attempt has settled it yet: a stream that resumes past
565
+ * it, reading nothing, still knows it's there. 0 until one is read.
566
+ */
567
+ wakeRead: number;
568
+ /**
569
+ * The highest wake notice seq a wake attempt here has settled: it woke,
570
+ * found nothing to do, or was held back by `maxWakes`. A stream makes an
571
+ * attempt only while `wakeRead` is past it. -1 until the first, so the first
572
+ * stream this process opens for the conversation looks once, for an update
573
+ * notice a revision still owes. Both come from the store, never from what a
574
+ * browser says it has seen, since every stream here shares them.
575
+ */
576
+ wakeSettled: number;
489
577
  }
490
578
 
491
579
  /** Fold a wake turn's frame into what it has shown so far. */
@@ -637,6 +725,8 @@ function watchersOf(hai: Hai, conversationId: string): Watchers {
637
725
  lingering.unref?.();
638
726
  },
639
727
  ready: Promise.resolve(),
728
+ wakeRead: 0,
729
+ wakeSettled: -1,
640
730
  // A wake turn running here: its frames to this process's streams, and,
641
731
  // through the store, to every other process's. All but `context`, the
642
732
  // whole history, which another tab gets with its own next request.
@@ -752,8 +842,11 @@ function openSSE(res: ServerResponse): Emit {
752
842
  };
753
843
  }
754
844
 
755
- async function readJson(req: IncomingMessage): Promise<any> {
845
+ /** The request body, as a JSON object; anything else, or a body that fails to arrive, throws. */
846
+ async function readJson(req: IncomingMessage): Promise<Record<string, any>> {
756
847
  const chunks: Buffer[] = [];
757
848
  for await (const chunk of req) chunks.push(chunk as Buffer);
758
- return JSON.parse(Buffer.concat(chunks).toString() || "{}");
849
+ const body: unknown = JSON.parse(Buffer.concat(chunks).toString() || "{}");
850
+ if (!body || typeof body !== "object" || Array.isArray(body)) throw new TypeError("not a JSON object");
851
+ return body as Record<string, any>;
759
852
  }
package/src/store.ts CHANGED
@@ -9,6 +9,28 @@ import {
9
9
 
10
10
  const LEASE_MS = 120_000;
11
11
 
12
+ /**
13
+ * Postgres refuses U+0000 anywhere in text or jsonb, and a lone UTF-16
14
+ * surrogate in jsonb, so pgStore makes them storable as it saves. This store
15
+ * does the same, so development sees what production would store. Each
16
+ * becomes U+FFFD, the replacement character, in strings and object keys
17
+ * alike.
18
+ */
19
+ const UNSTORABLE = /\u0000|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g;
20
+ const MAYBE_UNSTORABLE = /[\u0000\uD800-\uDFFF]/;
21
+ const storable = (s: string): string => (MAYBE_UNSTORABLE.test(s) ? s.replace(UNSTORABLE, "\uFFFD") : s);
22
+ /** A `JSON.stringify` replacer that makes every string and key storable. */
23
+ function storableJson(_key: string, value: unknown): unknown {
24
+ if (typeof value === "string") return storable(value);
25
+ if (value && typeof value === "object" && !Array.isArray(value)) {
26
+ const keys = Object.keys(value);
27
+ if (keys.some((k) => MAYBE_UNSTORABLE.test(k))) {
28
+ return Object.fromEntries(keys.map((k) => [storable(k), (value as Record<string, unknown>)[k]]));
29
+ }
30
+ }
31
+ return value;
32
+ }
33
+
12
34
  export interface MemoryStoreOptions {
13
35
  /**
14
36
  * Turn lease TTL. A process that dies mid-turn strands the conversation for
@@ -60,7 +82,8 @@ export function memoryStore(options: MemoryStoreOptions = {}): StoreAdapter {
60
82
  let convSeq = 0;
61
83
  let handleSeq = 0;
62
84
 
63
- const copy = <T>(value: T): T => JSON.parse(JSON.stringify(value)) as T;
85
+ // and anything Postgres can't store comes back as pgStore would return it
86
+ const copy = <T>(value: T): T => JSON.parse(JSON.stringify(value, storableJson)) as T;
64
87
  const newToken = () => globalThis.crypto.randomUUID();
65
88
 
66
89
  /** Every durable mutation presents the token it was issued. A holder that has