@haikit/server 0.18.0 → 0.20.0
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/README.md +78 -0
- package/dist/routes.d.ts +6 -0
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +174 -13
- package/dist/routes.js.map +1 -1
- package/dist/runtime.d.ts +67 -3
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +83 -2
- package/dist/runtime.js.map +1 -1
- package/dist/signals.d.ts +77 -0
- package/dist/signals.d.ts.map +1 -0
- package/dist/signals.js +229 -0
- package/dist/signals.js.map +1 -0
- package/package.json +2 -2
- package/src/routes.ts +179 -13
- package/src/runtime.ts +104 -2
- package/src/signals.ts +221 -0
package/README.md
CHANGED
|
@@ -205,6 +205,36 @@ the inspector, the same as a digest. It reads the store every two
|
|
|
205
205
|
seconds, and a store with `watch` wakes it the moment a notice lands. The
|
|
206
206
|
two-second read stays even then, so a lost wake-up only delays a notice.
|
|
207
207
|
|
|
208
|
+
**For browsers behind a proxy that holds streams back, the route also
|
|
209
|
+
polls.** Corporate security tools that inspect HTTPS (Netskope, Zscaler and
|
|
210
|
+
the like) often hold a response until it ends, and a stream never ends, so a
|
|
211
|
+
browser behind one hears nothing. The route sends a comment (`: open`) the
|
|
212
|
+
moment a stream opens; a client that hears nothing at all switches to
|
|
213
|
+
polling, with `?poll=1`. A poll sends what's waiting and ends, and responses
|
|
214
|
+
that end get through any proxy:
|
|
215
|
+
|
|
216
|
+
- **What a poll holds for.** It sends any notices after `Last-Event-ID`, each
|
|
217
|
+
signal's latest value, and any frames of a wake turn under way. It ends
|
|
218
|
+
about 250 ms after something new goes out, or after 15 s with nothing new.
|
|
219
|
+
`wait` asks for a shorter hold.
|
|
220
|
+
- **Signals.** The latest values count as new only when the client lacks
|
|
221
|
+
them. The poll's `signals` parameter is a fingerprint of the values the
|
|
222
|
+
client holds.
|
|
223
|
+
- **First poll and wake turns.** `?poll=now` answers at once, for a page's
|
|
224
|
+
first poll. A wake turn that runs across several polls carries on through
|
|
225
|
+
the replay of what it has shown so far. One that ends between two polls is
|
|
226
|
+
kept for a minute (the last five at most): a poll whose `turn` parameter
|
|
227
|
+
says it hasn't seen a turn end is sent all of each such turn, oldest first,
|
|
228
|
+
its last text, `idle` and `released` included. A poll that finds no turn running says so with `released`, so
|
|
229
|
+
the browser never waits for one that has ended.
|
|
230
|
+
- **More than one server.** Each server keeps hearing a conversation for a
|
|
231
|
+
minute after its last stream or poll closes. A browser whose polls move
|
|
232
|
+
between servers still gets a turn that ended on another one. A poll that
|
|
233
|
+
lands on a server that hasn't served that conversation in the past minute
|
|
234
|
+
can miss it; sticky sessions avoid that.
|
|
235
|
+
- **Presence.** A tab polling back to back stays inside the presence grace,
|
|
236
|
+
so it keeps counting.
|
|
237
|
+
|
|
208
238
|
**A `wake` notice starts a turn of its own.** Declare one with `kind: "wake"`,
|
|
209
239
|
and its `model` function must return text, since the turn is the model's
|
|
210
240
|
answer to it:
|
|
@@ -318,6 +348,54 @@ it writes, so a feed ticking ten times a second writes as often as the lease
|
|
|
318
348
|
allows. Calls naming the surface's first handle or its latest share the
|
|
319
349
|
queue. A `wake` any of them asked for still wakes.
|
|
320
350
|
|
|
351
|
+
**A signal is a broadcast to every open browser.** Something everyone should
|
|
352
|
+
see now and nobody needs later, such as how many people are online, isn't a
|
|
353
|
+
notice: it belongs to no conversation, and the model has no use for it.
|
|
354
|
+
Declare it once, beside your notices, and send it with `hai.signal`:
|
|
355
|
+
|
|
356
|
+
```ts
|
|
357
|
+
// shared/signals.ts — imported by both halves
|
|
358
|
+
export const online = defineSignal({ name: "online", version: 1, payload: z.object({ count: z.number() }) });
|
|
359
|
+
|
|
360
|
+
// server
|
|
361
|
+
const hai = createHai({ model, store, tools, surfaces, system, signals: [online] });
|
|
362
|
+
hai.signal(online, { count: 12 });
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
It goes to every open events stream at once, on this server and, through a
|
|
366
|
+
store with `publish` and `subscribe`, on the others. It is not stored or
|
|
367
|
+
numbered, never reaches the model, and is never drawn in the transcript: the
|
|
368
|
+
browser hands it to a handler of the app's. The payload is typed from the
|
|
369
|
+
contract and checked against its schema; a signal not listed in `signals`,
|
|
370
|
+
or a payload that fails, throws. Each signal's latest payload is kept, and a
|
|
371
|
+
stream that opens later is sent it first, so a browser that arrives late
|
|
372
|
+
still has the current value. Listing any signal opens the events stream, as
|
|
373
|
+
notices do.
|
|
374
|
+
|
|
375
|
+
**Presence counts who is watching.** `hai.onPresence(listener)` hears how many
|
|
376
|
+
conversations have an events stream open, on every server sharing the store:
|
|
377
|
+
a tab with the app open, as near as the server can tell. It hears the count
|
|
378
|
+
at once and whenever it changes:
|
|
379
|
+
|
|
380
|
+
```ts
|
|
381
|
+
hai.onPresence((count) => hai.signal(online, { count }));
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
A stream that closes still counts for `presence.graceMs` (default 5 s), so a
|
|
385
|
+
browser that drops its connection and reconnects doesn't flicker the count.
|
|
386
|
+
Each server counts its own conversations, and the totals are summed: a
|
|
387
|
+
conversation that reconnects to a different server counts on both until the
|
|
388
|
+
grace runs out, so the count can run one high for a few seconds. It's for a
|
|
389
|
+
"how many are here" number, not an exact head count.
|
|
390
|
+
Servers sharing a store tell each other their counts every
|
|
391
|
+
`presence.heartbeatMs` (default 10 s), and one not heard from for three beats
|
|
392
|
+
stops counting. Only numbers travel: no conversation ids, and nothing the
|
|
393
|
+
model sees. An app opens no events stream until a conversation has begun, so
|
|
394
|
+
a visitor counts from their first message, or from page load with an `init`
|
|
395
|
+
tool. If you serve the events stream yourself, call
|
|
396
|
+
`hai.streamOpened(conversationId, emit)` when one opens and the function it
|
|
397
|
+
returns when it closes.
|
|
398
|
+
|
|
321
399
|
**A conversation closes once any of its surfaces passes its `staleAfterMs`.**
|
|
322
400
|
From then on both routes answer with an `expired` event and the model is not
|
|
323
401
|
called, so a picker left open over a weekend cannot resolve against last week's
|
package/dist/routes.d.ts
CHANGED
|
@@ -14,4 +14,10 @@ import type { Hai } from "./runtime.js";
|
|
|
14
14
|
* conversation, and where to resume.
|
|
15
15
|
*/
|
|
16
16
|
export declare function nodeHandler(hai: Hai, basePath?: string): (req: IncomingMessage, res: ServerResponse) => Promise<boolean>;
|
|
17
|
+
/**
|
|
18
|
+
* A short fingerprint of signal values, by name: what a polling browser says it
|
|
19
|
+
* has, so a poll knows whether the latest values are news to it. The client
|
|
20
|
+
* computes the same (packages/client/src/index.js); change both together.
|
|
21
|
+
*/
|
|
22
|
+
export declare function signalsDigest(entries: [string, unknown][]): string;
|
|
17
23
|
//# sourceMappingURL=routes.d.ts.map
|
package/dist/routes.d.ts.map
CHANGED
|
@@ -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"}
|
|
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"}
|
package/dist/routes.js
CHANGED
|
@@ -18,7 +18,7 @@ export function nodeHandler(hai, basePath = "/hai") {
|
|
|
18
18
|
if (!url.pathname.startsWith(basePath))
|
|
19
19
|
return false;
|
|
20
20
|
const route = url.pathname.slice(basePath.length);
|
|
21
|
-
if (req.method === "GET" && route === "/events" && hai.
|
|
21
|
+
if (req.method === "GET" && route === "/events" && hai.streamsEvents) {
|
|
22
22
|
await streamNotices(hai, req, res, url);
|
|
23
23
|
return true;
|
|
24
24
|
}
|
|
@@ -54,7 +54,7 @@ export function nodeHandler(hai, basePath = "/hai") {
|
|
|
54
54
|
type: "hello",
|
|
55
55
|
conversationId: conversation.id,
|
|
56
56
|
model: hai.config.model.id,
|
|
57
|
-
...(hai.
|
|
57
|
+
...(hai.streamsEvents ? { events: true } : {}),
|
|
58
58
|
});
|
|
59
59
|
}
|
|
60
60
|
let superseded = false;
|
|
@@ -107,6 +107,27 @@ export function nodeHandler(hai, basePath = "/hai") {
|
|
|
107
107
|
* this is what still finds a notice whose wake-up was lost.
|
|
108
108
|
*/
|
|
109
109
|
const POLL_MS = 2_000;
|
|
110
|
+
/**
|
|
111
|
+
* A short fingerprint of signal values, by name: what a polling browser says it
|
|
112
|
+
* has, so a poll knows whether the latest values are news to it. The client
|
|
113
|
+
* computes the same (packages/client/src/index.js); change both together.
|
|
114
|
+
*/
|
|
115
|
+
export function signalsDigest(entries) {
|
|
116
|
+
const text = JSON.stringify([...entries].sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)));
|
|
117
|
+
let hash = 0x811c9dc5;
|
|
118
|
+
for (let i = 0; i < text.length; i++)
|
|
119
|
+
hash = Math.imul(hash ^ text.charCodeAt(i), 0x01000193);
|
|
120
|
+
return (hash >>> 0).toString(16);
|
|
121
|
+
}
|
|
122
|
+
/** How long a process keeps hearing a conversation's turns after its last stream closes. */
|
|
123
|
+
const WATCH_LINGER_MS = 60_000;
|
|
124
|
+
/** How long a wake turn that has ended is kept, for a poll that missed its end, and how many at most. */
|
|
125
|
+
const ENDED_TURN_KEPT_MS = 60_000;
|
|
126
|
+
const ENDED_TURNS_KEPT = 5;
|
|
127
|
+
/** The longest a poll holds when there is nothing new to send. */
|
|
128
|
+
const POLL_HOLD_MS = 15_000;
|
|
129
|
+
/** How long a poll waits after something new, for what comes with it, before it ends. */
|
|
130
|
+
const POLL_GATHER_MS = 250;
|
|
110
131
|
/** Proxies drop a stream that says nothing for long; a comment keeps it open. */
|
|
111
132
|
const HEARTBEAT_MS = 25_000;
|
|
112
133
|
/** Notices read from the store at a time, so a long backlog goes out page by page. */
|
|
@@ -126,6 +147,18 @@ const PAGE = 100;
|
|
|
126
147
|
async function streamNotices(hai, req, res, url) {
|
|
127
148
|
const { store } = hai.config;
|
|
128
149
|
const conversationId = url.searchParams.get("conversationId") ?? "";
|
|
150
|
+
// A poll, for a browser behind a proxy that holds a stream back until it
|
|
151
|
+
// ends: what's waiting, then the response ends, which any proxy delivers.
|
|
152
|
+
// `poll=now` answers at once; `poll=1` holds until something new arrives,
|
|
153
|
+
// or for `wait` ms (at most POLL_HOLD_MS) if nothing does.
|
|
154
|
+
const poll = url.searchParams.get("poll");
|
|
155
|
+
const polling = poll === "1" || poll === "now";
|
|
156
|
+
// a fingerprint of the signal values the browser already has (signalsDigest)
|
|
157
|
+
const hasSignals = url.searchParams.get("signals");
|
|
158
|
+
// the last wake turn the browser saw end, by its number
|
|
159
|
+
const sawTurn = Number(url.searchParams.get("turn") ?? 0);
|
|
160
|
+
const asked = Number(url.searchParams.get("wait") ?? POLL_HOLD_MS);
|
|
161
|
+
const holdMs = Number.isFinite(asked) ? Math.min(Math.max(asked, 0), POLL_HOLD_MS) : POLL_HOLD_MS;
|
|
129
162
|
const resume = Number(req.headers["last-event-id"] ?? url.searchParams.get("after") ?? 0);
|
|
130
163
|
let after = Number.isSafeInteger(resume) && resume > 0 ? resume : 0;
|
|
131
164
|
const first = await store.getNotices(conversationId, after, PAGE);
|
|
@@ -139,6 +172,7 @@ async function streamNotices(hai, req, res, url) {
|
|
|
139
172
|
// Counted as watching from here, so nothing lets the entry go while this
|
|
140
173
|
// stream is still being set up.
|
|
141
174
|
const watchers = watchersOf(hai, conversationId);
|
|
175
|
+
watchers.stay();
|
|
142
176
|
watchers.pending++;
|
|
143
177
|
try {
|
|
144
178
|
await watchers.ready;
|
|
@@ -159,8 +193,11 @@ async function streamNotices(hai, req, res, url) {
|
|
|
159
193
|
connection: "keep-alive",
|
|
160
194
|
});
|
|
161
195
|
// Sent now, not with the first frame: with nothing to catch up on, that is a
|
|
162
|
-
// heartbeat away, and the browser's request would hang open until then.
|
|
196
|
+
// heartbeat away, and the browser's request would hang open until then. A
|
|
197
|
+
// comment with them, so the browser hears its first bytes at once: one that
|
|
198
|
+
// hears nothing knows something on the way is holding the stream, and polls.
|
|
163
199
|
res.flushHeaders();
|
|
200
|
+
res.write(": open\n\n");
|
|
164
201
|
const aborter = new AbortController();
|
|
165
202
|
const { signal } = aborter;
|
|
166
203
|
res.on("close", () => aborter.abort());
|
|
@@ -178,16 +215,69 @@ async function streamNotices(hai, req, res, url) {
|
|
|
178
215
|
signal.addEventListener("abort", done);
|
|
179
216
|
});
|
|
180
217
|
};
|
|
181
|
-
//
|
|
182
|
-
//
|
|
183
|
-
|
|
218
|
+
// Something new for this browser: a poll ends a moment after it, to gather
|
|
219
|
+
// what comes with it.
|
|
220
|
+
let markFresh = () => { };
|
|
221
|
+
const freshened = new Promise((resolve) => (markFresh = resolve));
|
|
222
|
+
// A frame out, and a stream the browser has left takes no more.
|
|
223
|
+
const send = (event) => {
|
|
184
224
|
if (!signal.aborted && !res.writableEnded)
|
|
185
225
|
res.write(`data: ${JSON.stringify(event)}\n\n`);
|
|
186
226
|
};
|
|
227
|
+
// A wake turn's events go out as they come, one frame each.
|
|
228
|
+
const emit = (event) => {
|
|
229
|
+
send(event);
|
|
230
|
+
markFresh();
|
|
231
|
+
};
|
|
187
232
|
// Every stream this process has open for the conversation hears a wake
|
|
188
233
|
// turn, not only the one whose attempt won the lease: another tab shows the
|
|
189
234
|
// reply too, and holds its requests until the turn lets go.
|
|
190
235
|
watchers.streams.add(emit);
|
|
236
|
+
// Signals from here on, starting with each one's latest; and it counts as
|
|
237
|
+
// present. A signal only matters as its latest value, so a reader that has
|
|
238
|
+
// fallen behind is sent just the newest of each once it catches up: a
|
|
239
|
+
// stalled socket holds at most one per signal, never every one sent.
|
|
240
|
+
const behind = new Map();
|
|
241
|
+
let draining = false;
|
|
242
|
+
const flush = () => {
|
|
243
|
+
draining = false;
|
|
244
|
+
const pending = [...behind.values()];
|
|
245
|
+
behind.clear();
|
|
246
|
+
for (const event of pending)
|
|
247
|
+
emitSignal(event);
|
|
248
|
+
};
|
|
249
|
+
const emitSignal = (event) => {
|
|
250
|
+
if (event.type !== "signal")
|
|
251
|
+
return emit(event);
|
|
252
|
+
if (signal.aborted || res.writableEnded)
|
|
253
|
+
return;
|
|
254
|
+
if (res.writableNeedDrain || behind.size) {
|
|
255
|
+
behind.set(event.name, event);
|
|
256
|
+
if (!draining) {
|
|
257
|
+
draining = true;
|
|
258
|
+
res.once("drain", flush);
|
|
259
|
+
}
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
res.write(`data: ${JSON.stringify(event)}\n\n`);
|
|
263
|
+
};
|
|
264
|
+
// A new signal is news. Each one's latest, sent as the stream opens, is
|
|
265
|
+
// news to a poll only if the browser doesn't have those values yet, such as
|
|
266
|
+
// one sent between two polls: every poll gets them, and a poll that always
|
|
267
|
+
// ended on them would never wait.
|
|
268
|
+
const replayed = [];
|
|
269
|
+
const closeStream = hai.streamOpened(conversationId, (event) => {
|
|
270
|
+
emitSignal(event);
|
|
271
|
+
markFresh();
|
|
272
|
+
}, (event) => {
|
|
273
|
+
emitSignal(event);
|
|
274
|
+
if (!polling || event.type !== "signal")
|
|
275
|
+
return;
|
|
276
|
+
// the latest are sent one after another, at once: compare once all are in
|
|
277
|
+
if (!replayed.length)
|
|
278
|
+
queueMicrotask(() => signalsDigest(replayed) !== hasSignals && markFresh());
|
|
279
|
+
replayed.push([event.name, event.payload]);
|
|
280
|
+
});
|
|
191
281
|
// Joining while a wake turn runs: what it has shown so far, starting with
|
|
192
282
|
// its `streaming` status, so the browser holds requests until it lets go,
|
|
193
283
|
// and the reply's later text has a block to land in.
|
|
@@ -195,7 +285,20 @@ async function streamNotices(hai, req, res, url) {
|
|
|
195
285
|
// freshness from when the surface was stored, not from now.
|
|
196
286
|
if (watchers.live)
|
|
197
287
|
for (const event of watchers.shown)
|
|
198
|
-
|
|
288
|
+
send(aged(event));
|
|
289
|
+
else if (polling) {
|
|
290
|
+
// A turn that ended between two polls, unseen: all it showed, its end
|
|
291
|
+
// included, which is news. Then that no turn is running, which a browser
|
|
292
|
+
// that saw nothing of one needs too, or it would wait for it for ever.
|
|
293
|
+
// every one it missed, oldest first, if more than one ended meanwhile
|
|
294
|
+
const missed = Number.isSafeInteger(sawTurn) ? watchers.ended.filter((turn) => turn.number > sawTurn) : [];
|
|
295
|
+
for (const turn of missed)
|
|
296
|
+
for (const event of turn.shown)
|
|
297
|
+
send(aged(event));
|
|
298
|
+
if (missed.length)
|
|
299
|
+
markFresh();
|
|
300
|
+
send({ type: "released" });
|
|
301
|
+
}
|
|
199
302
|
// Wake turns run beside the notice loop, so a notice never waits behind a
|
|
200
303
|
// turn, nor behind the retries while another request holds the
|
|
201
304
|
// conversation. One attempt at a time; a wake notice that lands meanwhile
|
|
@@ -272,6 +375,7 @@ async function streamNotices(hai, req, res, url) {
|
|
|
272
375
|
if (n.replaces !== undefined && n.handle !== undefined) {
|
|
273
376
|
await sendRevision(n.handle, n.replaces, n.seq);
|
|
274
377
|
after = n.seq;
|
|
378
|
+
markFresh();
|
|
275
379
|
woken ||= n.kind === "wake";
|
|
276
380
|
continue;
|
|
277
381
|
}
|
|
@@ -285,6 +389,7 @@ async function streamNotices(hai, req, res, url) {
|
|
|
285
389
|
};
|
|
286
390
|
await write(`id: ${n.seq}\ndata: ${JSON.stringify(event)}\n\n`);
|
|
287
391
|
after = n.seq;
|
|
392
|
+
markFresh();
|
|
288
393
|
woken ||= n.kind === "wake";
|
|
289
394
|
}
|
|
290
395
|
if (records.length < PAGE || signal.aborted)
|
|
@@ -296,8 +401,18 @@ async function streamNotices(hai, req, res, url) {
|
|
|
296
401
|
};
|
|
297
402
|
// a heartbeat is only for a stream gone quiet, never one already backed up
|
|
298
403
|
const heartbeat = setInterval(() => res.writableNeedDrain || res.write(": ping\n\n"), HEARTBEAT_MS);
|
|
299
|
-
|
|
300
|
-
|
|
404
|
+
// An app that sends no notices has nothing stored to read: the stream is only
|
|
405
|
+
// for signals, and stays open, reading nothing, until the browser leaves.
|
|
406
|
+
const wakes = hai.sendsNotices ? wakeups(store.watch?.(conversationId, signal), signal)[Symbol.asyncIterator]() : null;
|
|
407
|
+
const left = new Promise((resolve) => {
|
|
408
|
+
if (signal.aborted)
|
|
409
|
+
resolve();
|
|
410
|
+
else
|
|
411
|
+
signal.addEventListener("abort", () => resolve(), { once: true });
|
|
412
|
+
});
|
|
413
|
+
const run = async () => {
|
|
414
|
+
if (!wakes)
|
|
415
|
+
return left;
|
|
301
416
|
await catchUp(first);
|
|
302
417
|
// A wake notice may be waiting from before this browser connected: one
|
|
303
418
|
// that arrived while nobody watched, or while the conversation was busy.
|
|
@@ -312,14 +427,32 @@ async function streamNotices(hai, req, res, url) {
|
|
|
312
427
|
next = wakes.next();
|
|
313
428
|
await catchUp();
|
|
314
429
|
}
|
|
430
|
+
};
|
|
431
|
+
try {
|
|
432
|
+
if (!polling)
|
|
433
|
+
return await run();
|
|
434
|
+
// A poll: the same reading, until something new has gone out and what
|
|
435
|
+
// came with it has had a moment to follow, or the hold runs out.
|
|
436
|
+
if (poll === "now")
|
|
437
|
+
markFresh();
|
|
438
|
+
let hold;
|
|
439
|
+
const done = Promise.race([
|
|
440
|
+
left,
|
|
441
|
+
freshened.then(() => new Promise((resolve) => setTimeout(resolve, POLL_GATHER_MS))),
|
|
442
|
+
new Promise((resolve) => (hold = setTimeout(resolve, holdMs))),
|
|
443
|
+
]);
|
|
444
|
+
void run().catch(() => { });
|
|
445
|
+
await done;
|
|
446
|
+
clearTimeout(hold);
|
|
315
447
|
}
|
|
316
448
|
finally {
|
|
317
449
|
clearInterval(heartbeat);
|
|
318
450
|
aborter.abort();
|
|
451
|
+
closeStream();
|
|
319
452
|
watchers.streams.delete(emit);
|
|
320
453
|
if (!watchers.streams.size)
|
|
321
454
|
forgetWatchers(hai, conversationId, watchers);
|
|
322
|
-
await wakes
|
|
455
|
+
await wakes?.return?.();
|
|
323
456
|
res.end();
|
|
324
457
|
}
|
|
325
458
|
}
|
|
@@ -409,8 +542,9 @@ function watchersOf(hai, conversationId) {
|
|
|
409
542
|
const origin = originOf(hai);
|
|
410
543
|
// Hearing other processes' wake turns lasts as long as this entry does.
|
|
411
544
|
const hearing = new AbortController();
|
|
545
|
+
let lingering = null;
|
|
412
546
|
const forget = () => {
|
|
413
|
-
if (map.get(conversationId) !== fresh || fresh.pending || fresh.streams.size || fresh.live)
|
|
547
|
+
if (map.get(conversationId) !== fresh || fresh.pending || fresh.streams.size || fresh.live || fresh.ended.length || lingering)
|
|
414
548
|
return;
|
|
415
549
|
map.delete(conversationId);
|
|
416
550
|
hearing.abort();
|
|
@@ -425,6 +559,7 @@ function watchersOf(hai, conversationId) {
|
|
|
425
559
|
// start. A turn takes over only with a number at least as high as any
|
|
426
560
|
// seen; anything but the current turn's frames is dropped.
|
|
427
561
|
let current = null;
|
|
562
|
+
let currentNumber;
|
|
428
563
|
let newest = 0;
|
|
429
564
|
const deliver = (event, turn, number) => {
|
|
430
565
|
if (event.type === "status" && event.status === "streaming") {
|
|
@@ -432,6 +567,7 @@ function watchersOf(hai, conversationId) {
|
|
|
432
567
|
if (number !== undefined && number < newest)
|
|
433
568
|
return; // an older turn's late start
|
|
434
569
|
current = turn;
|
|
570
|
+
currentNumber = number;
|
|
435
571
|
if (number !== undefined)
|
|
436
572
|
newest = number;
|
|
437
573
|
fresh.live = true;
|
|
@@ -443,6 +579,15 @@ function watchersOf(hai, conversationId) {
|
|
|
443
579
|
}
|
|
444
580
|
remember(fresh.shown, event);
|
|
445
581
|
if (event.type === "released") {
|
|
582
|
+
// kept a while for a poll that missed the end, then let go
|
|
583
|
+
if (currentNumber !== undefined) {
|
|
584
|
+
const ended = { number: currentNumber, shown: fresh.shown };
|
|
585
|
+
fresh.ended = [...fresh.ended, ended].slice(-ENDED_TURNS_KEPT);
|
|
586
|
+
setTimeout(() => {
|
|
587
|
+
fresh.ended = fresh.ended.filter((turn) => turn !== ended);
|
|
588
|
+
forget();
|
|
589
|
+
}, ENDED_TURN_KEPT_MS).unref?.();
|
|
590
|
+
}
|
|
446
591
|
current = null;
|
|
447
592
|
fresh.live = false;
|
|
448
593
|
fresh.shown = [];
|
|
@@ -457,7 +602,22 @@ function watchersOf(hai, conversationId) {
|
|
|
457
602
|
streams: new Set(),
|
|
458
603
|
live: false,
|
|
459
604
|
shown: [],
|
|
605
|
+
ended: [],
|
|
460
606
|
forget,
|
|
607
|
+
stay: () => {
|
|
608
|
+
if (lingering)
|
|
609
|
+
clearTimeout(lingering);
|
|
610
|
+
lingering = null;
|
|
611
|
+
},
|
|
612
|
+
leave: () => {
|
|
613
|
+
if (lingering)
|
|
614
|
+
clearTimeout(lingering);
|
|
615
|
+
lingering = setTimeout(() => {
|
|
616
|
+
lingering = null;
|
|
617
|
+
forget();
|
|
618
|
+
}, WATCH_LINGER_MS);
|
|
619
|
+
lingering.unref?.();
|
|
620
|
+
},
|
|
461
621
|
ready: Promise.resolve(),
|
|
462
622
|
// A wake turn running here: its frames to this process's streams, and,
|
|
463
623
|
// through the store, to every other process's. All but `context`, the
|
|
@@ -501,8 +661,9 @@ function watchersOf(hai, conversationId) {
|
|
|
501
661
|
}
|
|
502
662
|
function forgetWatchers(_hai, _conversationId, watchers) {
|
|
503
663
|
// Kept while a wake turn runs, so a stream that joins later still hears it,
|
|
504
|
-
//
|
|
505
|
-
|
|
664
|
+
// while any stream is open or being set up, while an ended turn is kept, and
|
|
665
|
+
// for a while after the last stream closes. `forget` checks them all.
|
|
666
|
+
watchers.leave();
|
|
506
667
|
}
|
|
507
668
|
/** The first wait before trying a wake turn again on a busy conversation, and the longest. */
|
|
508
669
|
const WAKE_RETRY_MS = 250;
|
package/dist/routes.js.map
CHANGED
|
@@ -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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"}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type AnyNoticeImpl, type AnySurfaceImpl, type Conversation, type Emit, type ModelAdapter, type Notify, type StoreAdapter, type Tool, type Update } from "@haikit/core";
|
|
1
|
+
import { type AnyNoticeImpl, type AnySurfaceImpl, type Conversation, type Emit, type ModelAdapter, type Notify, type SendSignal, type Signal, type StoreAdapter, type Tool, type Update } from "@haikit/core";
|
|
2
2
|
export interface HaiConfig {
|
|
3
3
|
model: ModelAdapter;
|
|
4
4
|
store: StoreAdapter;
|
|
@@ -57,6 +57,23 @@ export interface HaiConfig {
|
|
|
57
57
|
* with `wake` asks for.
|
|
58
58
|
*/
|
|
59
59
|
updates?: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* The signals this app sends with `hai.signal`: short-lived broadcasts to
|
|
62
|
+
* every open browser. A signal not listed here is refused. With any listed,
|
|
63
|
+
* the browser opens the events stream, which is how a signal reaches it.
|
|
64
|
+
*/
|
|
65
|
+
signals?: Signal<any>[];
|
|
66
|
+
/**
|
|
67
|
+
* How presence is counted (`hai.onPresence`). `graceMs`: how long a
|
|
68
|
+
* conversation whose events stream closed still counts, so a browser that
|
|
69
|
+
* reconnects doesn't flicker the count; default 5 s. `heartbeatMs`: how
|
|
70
|
+
* often servers sharing a store tell each other their counts; a server not
|
|
71
|
+
* heard from for three beats stops counting; default 10 s.
|
|
72
|
+
*/
|
|
73
|
+
presence?: {
|
|
74
|
+
graceMs?: number;
|
|
75
|
+
heartbeatMs?: number;
|
|
76
|
+
};
|
|
60
77
|
}
|
|
61
78
|
/**
|
|
62
79
|
* What `hai.wake` did: started a turn; started one that failed, and put the
|
|
@@ -80,6 +97,9 @@ export declare class Hai {
|
|
|
80
97
|
private readonly queryUi;
|
|
81
98
|
/** Handles each conversation has a revision of in flight, so two calls can't revise one at once. */
|
|
82
99
|
private readonly revising;
|
|
100
|
+
private readonly signals;
|
|
101
|
+
/** Signals sent, streams open, and presence, here and on the other servers. */
|
|
102
|
+
private readonly broadcast;
|
|
83
103
|
/** `hai.update` calls by conversation and surface: one writing, and the newest waiting behind it. */
|
|
84
104
|
private readonly updating;
|
|
85
105
|
/**
|
|
@@ -94,10 +114,16 @@ export declare class Hai {
|
|
|
94
114
|
private seq;
|
|
95
115
|
constructor(config: HaiConfig);
|
|
96
116
|
/**
|
|
97
|
-
* Whether this app sends notices, `hai.update`'s included
|
|
98
|
-
*
|
|
117
|
+
* Whether this app sends notices, `hai.update`'s included: what the
|
|
118
|
+
* conversation's history may have unread, and the events stream may have to
|
|
119
|
+
* deliver.
|
|
99
120
|
*/
|
|
100
121
|
get sendsNotices(): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Whether the browser should open the events stream: for notices, or for
|
|
124
|
+
* signals, which travel on it too.
|
|
125
|
+
*/
|
|
126
|
+
get streamsEvents(): boolean;
|
|
101
127
|
/**
|
|
102
128
|
* Whether any of its notices may be `wake` notices, which the events route
|
|
103
129
|
* starts turns for: a registered one, or an update sent with `wake`.
|
|
@@ -114,6 +140,44 @@ export declare class Hai {
|
|
|
114
140
|
* the events route, where a browser is watching (see `wake`).
|
|
115
141
|
*/
|
|
116
142
|
readonly notify: Notify;
|
|
143
|
+
/**
|
|
144
|
+
* Send a signal to every open events stream, on this server and, through a
|
|
145
|
+
* store with `publish` and `subscribe`, on the others. Not stored, not
|
|
146
|
+
* numbered, never in the model's context or the transcript: the browser
|
|
147
|
+
* hands it to the app's handler for it. Each signal's latest payload is
|
|
148
|
+
* kept, and a stream that opens later is sent it first.
|
|
149
|
+
*
|
|
150
|
+
* Throws for a signal not listed in `signals`, or a payload that fails its
|
|
151
|
+
* schema.
|
|
152
|
+
*/
|
|
153
|
+
readonly signal: SendSignal;
|
|
154
|
+
/**
|
|
155
|
+
* How many conversations have an events stream open, on every server
|
|
156
|
+
* sharing the store: a tab with the app open, as near as the server can
|
|
157
|
+
* tell. `listener` hears the count now and whenever it changes. A stream
|
|
158
|
+
* that closes still counts for `presence.graceMs`, so a reconnect doesn't
|
|
159
|
+
* flicker it. Returns a function that stops listening.
|
|
160
|
+
*
|
|
161
|
+
* Each server counts its own and the totals are summed, so a conversation
|
|
162
|
+
* counts once per server it has a stream on: one that reconnects to another
|
|
163
|
+
* server counts on both until the grace runs out, and one with streams on
|
|
164
|
+
* two servers at once counts twice. (The client opens one stream per
|
|
165
|
+
* conversation, so the second doesn't happen with it.)
|
|
166
|
+
*
|
|
167
|
+
* Only the number leaves a server: no conversation ids, and nothing the
|
|
168
|
+
* model sees. An app with no notices, updates or signals opens no events
|
|
169
|
+
* stream, so counts nothing.
|
|
170
|
+
*/
|
|
171
|
+
onPresence(listener: (count: number) => void): () => void;
|
|
172
|
+
/**
|
|
173
|
+
* An events stream opened for `conversationId`: it hears every signal from
|
|
174
|
+
* now on, starting with each one's latest payload, and counts toward
|
|
175
|
+
* presence. The events route calls this; call it too if you serve the
|
|
176
|
+
* stream yourself, and call what it returns when the stream closes. The
|
|
177
|
+
* latest payloads go through `replay` when given, so a caller can tell them
|
|
178
|
+
* from new ones.
|
|
179
|
+
*/
|
|
180
|
+
streamOpened(conversationId: string, emit: Emit, replay?: Emit): () => void;
|
|
117
181
|
/**
|
|
118
182
|
* Revise a surface from outside any turn: a webhook, a job, a price feed.
|
|
119
183
|
* The revision is stored and attached as `ctx.update` does, under the
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAGlB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,IAAI,EACT,KAAK,YAAY,EACjB,KAAK,MAAM,EAEX,KAAK,YAAY,EACjB,KAAK,IAAI,EAGT,KAAK,MAAM,EAGZ,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|