@haikit/core 0.3.1 → 0.4.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 +4 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +49 -2
package/README.md
CHANGED
|
@@ -29,6 +29,10 @@ Enforced in the type system, and asserted by `test/types/guarantees.ts`:
|
|
|
29
29
|
| `mode: "elicit"` needs a `resolve` action | otherwise the call does not typecheck |
|
|
30
30
|
| an undeclared action does not exist | the contract *is* the allowlist |
|
|
31
31
|
|
|
32
|
+
A surface can also declare `staleAfterMs`, how long its data may be acted on:
|
|
33
|
+
milliseconds, or `"never"`, which is the default. Once any surface in a
|
|
34
|
+
conversation is past its window, the conversation closes.
|
|
35
|
+
|
|
32
36
|
`npm run typetest` at the repo root compiles those tests twice — once with their
|
|
33
37
|
`@ts-expect-error` directives (must be clean) and once stripped (every marked
|
|
34
38
|
line must error). A guarantee that silently stops working fails CI.
|
package/dist/index.d.ts
CHANGED
|
@@ -99,6 +99,24 @@ export interface SurfaceImplDef<P, A extends ActionMap, Q extends QueryMap> {
|
|
|
99
99
|
queries: {
|
|
100
100
|
[K in keyof Q]: (args: Infer<Q[K]["input"]>, ctx: QueryCtx<P>) => Capped;
|
|
101
101
|
};
|
|
102
|
+
/**
|
|
103
|
+
* How long this surface's data may be acted on, in milliseconds from when it
|
|
104
|
+
* was rendered, or `"never"` — the default — for data that does not go out of
|
|
105
|
+
* date. Set it on any surface showing prices, availability or anything else
|
|
106
|
+
* that changes: the default is right for greetings and wrong for fares.
|
|
107
|
+
*
|
|
108
|
+
* Once any surface in a conversation is past its window, the conversation is
|
|
109
|
+
* closed: every further request — a click or a typed message — is refused
|
|
110
|
+
* before the model runs, and the user is asked to start a new conversation.
|
|
111
|
+
* Answered surfaces count too, because what the user picked from one is still
|
|
112
|
+
* sitting in the model's context at the price it was shown at.
|
|
113
|
+
*
|
|
114
|
+
* The window is recorded with each payload as it renders, and a request is
|
|
115
|
+
* held to the stricter of that and whatever the code declares by then. A
|
|
116
|
+
* later deploy can tighten a window; renaming a surface, removing it or
|
|
117
|
+
* relaxing its window never lets data already shown last longer.
|
|
118
|
+
*/
|
|
119
|
+
staleAfterMs?: number | "never";
|
|
102
120
|
}
|
|
103
121
|
export interface Surface<P, A extends ActionMap, Q extends QueryMap> {
|
|
104
122
|
readonly name: string;
|
|
@@ -244,6 +262,15 @@ export interface PayloadRecord {
|
|
|
244
262
|
props: unknown;
|
|
245
263
|
mode: "display" | "elicit";
|
|
246
264
|
createdAt: number;
|
|
265
|
+
/**
|
|
266
|
+
* The surface's freshness window when this payload rendered — recorded, not
|
|
267
|
+
* looked up later, because a later deploy may rename or remove the surface or
|
|
268
|
+
* relax its window. `null` or absent only on payloads written before windows
|
|
269
|
+
* existed, or by a store that does not keep it — both are held to the window
|
|
270
|
+
* the code declares. A store should return exactly what it was given,
|
|
271
|
+
* `"never"` included.
|
|
272
|
+
*/
|
|
273
|
+
staleAfterMs?: number | "never" | null;
|
|
247
274
|
}
|
|
248
275
|
export type Block = {
|
|
249
276
|
kind: "user";
|
|
@@ -291,6 +318,8 @@ export type WireEvent = {
|
|
|
291
318
|
component: string;
|
|
292
319
|
version: number;
|
|
293
320
|
mode: string;
|
|
321
|
+
/** The surface's freshness window. Absent when it never goes out of date. */
|
|
322
|
+
staleAfterMs?: number;
|
|
294
323
|
} | {
|
|
295
324
|
type: "ui_props";
|
|
296
325
|
handle: string;
|
|
@@ -311,6 +340,15 @@ export type WireEvent = {
|
|
|
311
340
|
} | {
|
|
312
341
|
type: "error";
|
|
313
342
|
message: string;
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* The conversation is past a surface's freshness window, so this request was
|
|
346
|
+
* refused before the model ran and nothing was recorded. Final: every later
|
|
347
|
+
* request on this conversation gets the same answer.
|
|
348
|
+
*/
|
|
349
|
+
| {
|
|
350
|
+
type: "expired";
|
|
351
|
+
message: string;
|
|
314
352
|
};
|
|
315
353
|
export type Emit = (event: WireEvent) => void;
|
|
316
354
|
export interface ModelRequest {
|
|
@@ -442,6 +480,10 @@ export interface StoreAdapter {
|
|
|
442
480
|
* store must too — otherwise a caller holding no lease at all can create rows
|
|
443
481
|
* that no conversation owns.
|
|
444
482
|
*
|
|
483
|
+
* Every field comes back exactly as given — `staleAfterMs` included, as a
|
|
484
|
+
* number or the string `"never"`. It is what holds data to the window it was
|
|
485
|
+
* shown under after a deploy changes the surface.
|
|
486
|
+
*
|
|
445
487
|
* A row written *before* the lease was lost still outlives its turn — the
|
|
446
488
|
* conversation save is rejected but the row is not, so the winning history
|
|
447
489
|
* never references the handle. Those orphans are inert (see
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAwCH;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,SAAS,GAAG,CAAI,IAAS,EAAE,GAAuB,EAAE,OAAmB,EAAE;QAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;QAEvC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ;gBAAE,MAAM;YAC1C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC3C,MAAM,IAAI,GACR,IAAI,CAAC,MAAM,KAAK,CAAC;YACf,CAAC,CAAC,QAAQ,KAAK,SAAS;YACxB,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,OAAO,KAAK,WAAW,KAAK,CAAC,MAAM,QAAQ;gBACzD,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,GAAG,CAAC;QAEV,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;YAC1D,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,KAAK;SACI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AA8BD,0EAA0E;AAC1E,MAAM,CAAC,MAAM,OAAO,GAAG,CAAI,KAAgB,EAA4B,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AAEvG,kEAAkE;AAClE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAI,KAAgB,EAA2B,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AAEpG,6EAA6E;AAC7E,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,KAAgB,EAChB,WAAoB,EACpB,cAA2B,EACb,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -154,6 +154,25 @@ export interface SurfaceImplDef<P, A extends ActionMap, Q extends QueryMap> {
|
|
|
154
154
|
|
|
155
155
|
/** GUARANTEE 2 — must return `Capped`, i.e. must call `ctx.cap`. */
|
|
156
156
|
queries: { [K in keyof Q]: (args: Infer<Q[K]["input"]>, ctx: QueryCtx<P>) => Capped };
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* How long this surface's data may be acted on, in milliseconds from when it
|
|
160
|
+
* was rendered, or `"never"` — the default — for data that does not go out of
|
|
161
|
+
* date. Set it on any surface showing prices, availability or anything else
|
|
162
|
+
* that changes: the default is right for greetings and wrong for fares.
|
|
163
|
+
*
|
|
164
|
+
* Once any surface in a conversation is past its window, the conversation is
|
|
165
|
+
* closed: every further request — a click or a typed message — is refused
|
|
166
|
+
* before the model runs, and the user is asked to start a new conversation.
|
|
167
|
+
* Answered surfaces count too, because what the user picked from one is still
|
|
168
|
+
* sitting in the model's context at the price it was shown at.
|
|
169
|
+
*
|
|
170
|
+
* The window is recorded with each payload as it renders, and a request is
|
|
171
|
+
* held to the stricter of that and whatever the code declares by then. A
|
|
172
|
+
* later deploy can tighten a window; renaming a surface, removing it or
|
|
173
|
+
* relaxing its window never lets data already shown last longer.
|
|
174
|
+
*/
|
|
175
|
+
staleAfterMs?: number | "never";
|
|
157
176
|
}
|
|
158
177
|
|
|
159
178
|
export interface Surface<P, A extends ActionMap, Q extends QueryMap> {
|
|
@@ -344,6 +363,15 @@ export interface PayloadRecord {
|
|
|
344
363
|
props: unknown;
|
|
345
364
|
mode: "display" | "elicit";
|
|
346
365
|
createdAt: number;
|
|
366
|
+
/**
|
|
367
|
+
* The surface's freshness window when this payload rendered — recorded, not
|
|
368
|
+
* looked up later, because a later deploy may rename or remove the surface or
|
|
369
|
+
* relax its window. `null` or absent only on payloads written before windows
|
|
370
|
+
* existed, or by a store that does not keep it — both are held to the window
|
|
371
|
+
* the code declares. A store should return exactly what it was given,
|
|
372
|
+
* `"never"` included.
|
|
373
|
+
*/
|
|
374
|
+
staleAfterMs?: number | "never" | null;
|
|
347
375
|
}
|
|
348
376
|
|
|
349
377
|
// ─────────────────────────────────────────────────── wire protocol
|
|
@@ -359,12 +387,27 @@ export type WireEvent =
|
|
|
359
387
|
| { type: "block_start"; block: Block }
|
|
360
388
|
| { type: "text_delta"; id: string; text: string }
|
|
361
389
|
| { type: "block_update"; id: string; status: string; ms: number; result: string }
|
|
362
|
-
| {
|
|
390
|
+
| {
|
|
391
|
+
type: "ui_open";
|
|
392
|
+
handle: string;
|
|
393
|
+
toolId: string;
|
|
394
|
+
component: string;
|
|
395
|
+
version: number;
|
|
396
|
+
mode: string;
|
|
397
|
+
/** The surface's freshness window. Absent when it never goes out of date. */
|
|
398
|
+
staleAfterMs?: number;
|
|
399
|
+
}
|
|
363
400
|
| { type: "ui_props"; handle: string; props: unknown }
|
|
364
401
|
| { type: "ui_state"; handle: string; state: "frozen"; selection?: unknown }
|
|
365
402
|
| { type: "status"; status: ConversationStatus }
|
|
366
403
|
| { type: "context"; messages: Message[]; modelTokens: number; uiTokens: number }
|
|
367
|
-
| { type: "error"; message: string }
|
|
404
|
+
| { type: "error"; message: string }
|
|
405
|
+
/**
|
|
406
|
+
* The conversation is past a surface's freshness window, so this request was
|
|
407
|
+
* refused before the model ran and nothing was recorded. Final: every later
|
|
408
|
+
* request on this conversation gets the same answer.
|
|
409
|
+
*/
|
|
410
|
+
| { type: "expired"; message: string };
|
|
368
411
|
|
|
369
412
|
export type Emit = (event: WireEvent) => void;
|
|
370
413
|
|
|
@@ -507,6 +550,10 @@ export interface StoreAdapter {
|
|
|
507
550
|
* store must too — otherwise a caller holding no lease at all can create rows
|
|
508
551
|
* that no conversation owns.
|
|
509
552
|
*
|
|
553
|
+
* Every field comes back exactly as given — `staleAfterMs` included, as a
|
|
554
|
+
* number or the string `"never"`. It is what holds data to the window it was
|
|
555
|
+
* shown under after a deploy changes the surface.
|
|
556
|
+
*
|
|
510
557
|
* A row written *before* the lease was lost still outlives its turn — the
|
|
511
558
|
* conversation save is rejected but the row is not, so the winning history
|
|
512
559
|
* never references the handle. Those orphans are inert (see
|