@agentshouse/mdruntime 0.1.0-cbbae1fff01c6 → 0.1.0-cc00e9289ddf4
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 +17 -15
- package/dist/acceptance.d.ts.map +1 -1
- package/dist/acceptance.js +14 -23
- package/dist/act-lanes.d.ts +30 -0
- package/dist/act-lanes.d.ts.map +1 -0
- package/dist/act-lanes.js +225 -0
- package/dist/actions.d.ts +8 -2
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +114 -63
- package/dist/adapter.d.ts +30 -12
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +0 -1
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +0 -5
- package/dist/chat-types.d.ts +0 -2
- package/dist/chat-types.d.ts.map +1 -1
- package/dist/chat-types.js +0 -2
- package/dist/client.d.ts +8 -18
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +27 -15
- package/dist/compile.d.ts +2 -0
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +17 -4
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +15 -13
- package/dist/conversation-live.d.ts +23 -8
- package/dist/conversation-live.d.ts.map +1 -1
- package/dist/conversation-live.js +21 -9
- package/dist/conversation-row.d.ts +2 -0
- package/dist/conversation-row.d.ts.map +1 -1
- package/dist/conversation-row.js +2 -0
- package/dist/conversation.d.ts +27 -5
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +279 -168
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +8 -6
- package/dist/durability.d.ts +4 -0
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +4 -0
- package/dist/entry.js +1 -1
- package/dist/expectation.d.ts +25 -14
- package/dist/expectation.d.ts.map +1 -1
- package/dist/expectation.js +51 -20
- package/dist/failure.d.ts +2 -0
- package/dist/failure.d.ts.map +1 -1
- package/dist/failure.js +3 -0
- package/dist/figures.d.ts.map +1 -1
- package/dist/figures.js +4 -2
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +2 -1
- package/dist/host.d.ts +1 -0
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +39 -11
- package/dist/index.d.ts +11 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -6
- package/dist/install.d.ts +10 -4
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +45 -46
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +22 -16
- package/dist/listing.d.ts +7 -3
- package/dist/listing.d.ts.map +1 -1
- package/dist/listing.js +26 -13
- package/dist/live.d.ts +5 -3
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +71 -30
- package/dist/locks.d.ts.map +1 -1
- package/dist/locks.js +2 -3
- package/dist/lost.d.ts.map +1 -1
- package/dist/lost.js +2 -3
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +7 -10
- package/dist/memory.d.ts +3 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +50 -22
- package/dist/messages.d.ts +12 -3
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +24 -10
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +5 -8
- package/dist/observation.d.ts +27 -12
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +173 -69
- package/dist/opening.d.ts.map +1 -1
- package/dist/opening.js +3 -9
- package/dist/outcome.d.ts +7 -0
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +23 -2
- package/dist/overlay.d.ts +3 -0
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +8 -4
- package/dist/page-metadata.d.ts +8 -0
- package/dist/page-metadata.d.ts.map +1 -0
- package/dist/page-metadata.js +19 -0
- package/dist/parts.d.ts +2 -9
- package/dist/parts.d.ts.map +1 -1
- package/dist/parts.js +6 -14
- package/dist/preparation.d.ts +27 -6
- package/dist/preparation.d.ts.map +1 -1
- package/dist/preparation.js +137 -56
- package/dist/presence.d.ts +7 -1
- package/dist/presence.d.ts.map +1 -1
- package/dist/presence.js +22 -9
- package/dist/queries.d.ts +2 -2
- package/dist/queries.d.ts.map +1 -1
- package/dist/queries.js +62 -24
- package/dist/questions.d.ts +0 -5
- package/dist/questions.d.ts.map +1 -1
- package/dist/questions.js +0 -7
- package/dist/queue.d.ts +2 -2
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +25 -30
- package/dist/reach.d.ts +2 -3
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +75 -21
- package/dist/react.d.ts +7 -5
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +28 -5
- package/dist/readiness.d.ts +9 -3
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +3 -5
- package/dist/reads.d.ts +3 -1
- package/dist/reads.d.ts.map +1 -1
- package/dist/reads.js +5 -1
- package/dist/recovery.d.ts +3 -1
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +29 -7
- package/dist/refusal.d.ts.map +1 -1
- package/dist/refusal.js +1 -3
- package/dist/retried.d.ts +30 -0
- package/dist/retried.d.ts.map +1 -0
- package/dist/retried.js +72 -0
- package/dist/room-draft.d.ts +2 -2
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +26 -21
- package/dist/rows.d.ts +2 -0
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +3 -0
- package/dist/runtime.d.ts +2 -2
- package/dist/runtime.d.ts.map +1 -1
- package/dist/save.d.ts +1 -0
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +105 -55
- package/dist/saves.d.ts.map +1 -1
- package/dist/saves.js +3 -6
- package/dist/seed.d.ts.map +1 -1
- package/dist/seed.js +2 -2
- package/dist/shown.d.ts +3 -2
- package/dist/shown.d.ts.map +1 -1
- package/dist/shown.js +58 -39
- package/dist/socket/lanes.d.ts +12 -4
- package/dist/socket/lanes.d.ts.map +1 -1
- package/dist/socket/lanes.js +34 -8
- package/dist/socket.d.ts +3 -3
- package/dist/socket.d.ts.map +1 -1
- package/dist/socket.js +3 -9
- package/dist/source.d.ts +0 -7
- package/dist/source.d.ts.map +1 -1
- package/dist/store/installs.d.ts +2 -2
- package/dist/store/installs.d.ts.map +1 -1
- package/dist/store/installs.js +10 -4
- package/dist/store/readiness.d.ts +5 -4
- package/dist/store/readiness.d.ts.map +1 -1
- package/dist/store/readiness.js +28 -12
- package/dist/store/records.d.ts +11 -4
- package/dist/store/records.d.ts.map +1 -1
- package/dist/store/records.js +56 -20
- package/dist/store/rooms-shown.d.ts +8 -0
- package/dist/store/rooms-shown.d.ts.map +1 -0
- package/dist/store/rooms-shown.js +13 -0
- package/dist/store.d.ts +9 -6
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +11 -2
- package/dist/stored.d.ts +24 -13
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +73 -17
- package/dist/surface.d.ts +4 -3
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +12 -13
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +31 -17
- package/dist/tables.d.ts +14 -7
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +36 -15
- package/dist/tallies.d.ts.map +1 -1
- package/dist/tallies.js +1 -2
- package/dist/wire.d.ts +40 -3
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +11 -1
- package/package.json +3 -3
- package/dist/attempt.d.ts +0 -16
- package/dist/attempt.d.ts.map +0 -1
- package/dist/attempt.js +0 -70
- package/dist/job.d.ts +0 -5
- package/dist/job.d.ts.map +0 -1
- package/dist/job.js +0 -7
- package/dist/log.d.ts +0 -6
- package/dist/log.d.ts.map +0 -1
- package/dist/log.js +0 -14
package/dist/client.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { shownBy } from './media.js';
|
|
2
|
+
import { pageMetadataBlock } from './page-metadata.js';
|
|
2
3
|
import { observed } from './observation.js';
|
|
3
4
|
import { runtimeError } from './failure.js';
|
|
5
|
+
import { blobOf, } from './outcome.js';
|
|
4
6
|
import { AUTHORIZATION_ENDED, PORT_CLOSED, wireAnswer, } from './wire.js';
|
|
5
7
|
// React renders an arrived value in a later task and opens what that render observes as it commits, so this many frames opening nothing mean the page drew what it observes.
|
|
6
8
|
const SETTLED_FRAMES = 2;
|
|
@@ -36,13 +38,13 @@ export function connectMdRuntime(port, buildFile = UNBUILT) {
|
|
|
36
38
|
const send = (message) => {
|
|
37
39
|
port.postMessage(message);
|
|
38
40
|
};
|
|
39
|
-
function begin(id, topic, first) {
|
|
41
|
+
function begin(id, topic, input, first) {
|
|
40
42
|
const handle = observed(first, () => {
|
|
41
43
|
observations.delete(id);
|
|
42
44
|
if (refusal === null)
|
|
43
45
|
send({ kind: 'stop', id });
|
|
44
|
-
}, topic
|
|
45
|
-
observations.set(id, { topic, handle });
|
|
46
|
+
}, topic);
|
|
47
|
+
observations.set(id, { topic, input, handle });
|
|
46
48
|
return handle.observation;
|
|
47
49
|
}
|
|
48
50
|
function refuse(reported) {
|
|
@@ -54,7 +56,7 @@ export function connectMdRuntime(port, buildFile = UNBUILT) {
|
|
|
54
56
|
const failure = refused(reported);
|
|
55
57
|
for (const [id, waiting] of opening) {
|
|
56
58
|
if (waiting.topic === 'connection-refusal')
|
|
57
|
-
waiting.settle(begin(id, waiting.topic, reported));
|
|
59
|
+
waiting.settle(begin(id, waiting.topic, waiting.input, reported));
|
|
58
60
|
else
|
|
59
61
|
waiting.fail(failure);
|
|
60
62
|
}
|
|
@@ -106,7 +108,7 @@ export function connectMdRuntime(port, buildFile = UNBUILT) {
|
|
|
106
108
|
waiting.fail(runtimeError(message.code, message.message, message.retryable));
|
|
107
109
|
}
|
|
108
110
|
else
|
|
109
|
-
waiting.settle(begin(message.id, waiting.topic, message.value));
|
|
111
|
+
waiting.settle(begin(message.id, waiting.topic, waiting.input, message.value));
|
|
110
112
|
drawing?.();
|
|
111
113
|
return;
|
|
112
114
|
}
|
|
@@ -142,11 +144,11 @@ export function connectMdRuntime(port, buildFile = UNBUILT) {
|
|
|
142
144
|
const id = (sequence += 1);
|
|
143
145
|
if (refusal !== null) {
|
|
144
146
|
return topic === 'connection-refusal'
|
|
145
|
-
? Promise.resolve(begin(id, topic, refusal))
|
|
147
|
+
? Promise.resolve(begin(id, topic, input, refusal))
|
|
146
148
|
: Promise.reject(refused(refusal));
|
|
147
149
|
}
|
|
148
150
|
return new Promise((settle, fail) => {
|
|
149
|
-
opening.set(id, { topic, settle, fail });
|
|
151
|
+
opening.set(id, { topic, input, settle, fail });
|
|
150
152
|
send({ kind: 'observe', id, topic, input });
|
|
151
153
|
drawing?.();
|
|
152
154
|
});
|
|
@@ -194,9 +196,7 @@ export function connectMdRuntime(port, buildFile = UNBUILT) {
|
|
|
194
196
|
const read = streamed(await ask('binaryFile.read', [room, path, revision]));
|
|
195
197
|
if (read.kind !== 'binary')
|
|
196
198
|
return read;
|
|
197
|
-
const copy = await
|
|
198
|
-
headers: { 'content-type': read.mediaType },
|
|
199
|
-
}).blob();
|
|
199
|
+
const copy = await blobOf(read);
|
|
200
200
|
const url = URL.createObjectURL(copy);
|
|
201
201
|
handed(url, path.slice(path.lastIndexOf('/') + 1));
|
|
202
202
|
setTimeout(() => URL.revokeObjectURL(url), HANDED_COPY_MS);
|
|
@@ -256,14 +256,26 @@ export function connectMdRuntime(port, buildFile = UNBUILT) {
|
|
|
256
256
|
read: (conversation, options) => ask('conversation.read', [conversation, options]),
|
|
257
257
|
create: (input) => ask('conversation.create', [input]),
|
|
258
258
|
send: (conversation, operation, draft) => ask('conversation.send', [conversation, operation, draft]),
|
|
259
|
-
answer: (conversation, answer) => ask('conversation.answer', [conversation, answer]),
|
|
260
|
-
interrupt: (conversation) => ask('conversation.interrupt', [conversation]),
|
|
261
|
-
kill: (conversation) => ask('conversation.kill', [conversation]),
|
|
262
|
-
delete: (conversation) => ask('conversation.delete', [conversation]),
|
|
259
|
+
answer: (conversation, answer, operation) => ask('conversation.answer', [conversation, answer, operation]),
|
|
260
|
+
interrupt: (conversation, operation) => ask('conversation.interrupt', [conversation, operation]),
|
|
261
|
+
kill: (conversation, operation) => ask('conversation.kill', [conversation, operation]),
|
|
262
|
+
delete: (conversation, operation) => ask('conversation.delete', [conversation, operation]),
|
|
263
|
+
takeOut: (conversation, message, operation) => ask('conversation.takeOut', [conversation, message, operation]),
|
|
264
|
+
decide: (request, decision, operation) => ask('conversation.decide', [request, decision, operation]),
|
|
265
|
+
rename: (conversation, name, operation) => ask('conversation.rename', [conversation, name, operation]),
|
|
266
|
+
option: (conversation, option, value, operation) => ask('conversation.option', [conversation, option, value, operation]),
|
|
267
|
+
retry: (conversation, message, operation) => ask('conversation.retry', [conversation, message, operation]),
|
|
268
|
+
pin: (figures) => ask('conversation.pin', [figures]),
|
|
269
|
+
openTurn: (conversation, turn) => ask('conversation.openTurn', [conversation, turn]),
|
|
270
|
+
dismissSuggestion: (conversation, suggestion) => ask('conversation.dismissSuggestion', [conversation, suggestion]),
|
|
271
|
+
pageMetadata: async (app, address) => pageMetadataBlock(app, address, [...observations]
|
|
272
|
+
.sort(([left], [right]) => left - right)
|
|
273
|
+
.flatMap(([, { topic, input }]) => (topic === 'query' ? [input[0]] : []))),
|
|
263
274
|
},
|
|
264
275
|
chatDraft: {
|
|
265
276
|
write: (conversation, draft, revision) => ask('chatDraft.write', [conversation, draft, revision]),
|
|
266
277
|
prepend: (conversation, draft) => ask('chatDraft.prepend', [conversation, draft]),
|
|
278
|
+
append: (conversation, draft) => ask('chatDraft.append', [conversation, draft]),
|
|
267
279
|
discard: (conversation) => ask('chatDraft.discard', [conversation]),
|
|
268
280
|
},
|
|
269
281
|
history: (locator, path, query) => ask('history', [locator, path, query]),
|
|
@@ -274,8 +286,8 @@ export function connectMdRuntime(port, buildFile = UNBUILT) {
|
|
|
274
286
|
download,
|
|
275
287
|
},
|
|
276
288
|
call: (name, input) => ask('call', [name, input]),
|
|
289
|
+
answered: (operation) => ask('answered', [operation]),
|
|
277
290
|
reached: (locator, roomVersion, path) => ask('reached', [locator, roomVersion, path]),
|
|
278
|
-
log: () => ask('log', []),
|
|
279
291
|
persistence: () => ask('persistence', []),
|
|
280
292
|
retry: () => ask('retry', []),
|
|
281
293
|
cleanUp: () => ask('cleanUp', []),
|
package/dist/compile.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { sql } from '@agentshouse/mdmodel';
|
|
2
|
+
import { type Composition } from './collection.js';
|
|
2
3
|
import type { Plan, QueryRows } from './query.js';
|
|
3
4
|
import type { Connection } from './tables.js';
|
|
4
5
|
export type QueryRoom = {
|
|
5
6
|
readonly locator: string;
|
|
6
7
|
readonly key: number;
|
|
8
|
+
readonly composition?: Composition;
|
|
7
9
|
};
|
|
8
10
|
type Fragment = sql.Fragment;
|
|
9
11
|
export declare const VISIBLE: (alias: string) => string;
|
package/dist/compile.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,GAAG,
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,GAAG,EAQJ,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,KAAK,EAAE,IAAI,EAAuC,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvF,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,aAAa,CAAC;AAG1D,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;CACpC,CAAC;AAIF,KAAK,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAI7B,eAAO,MAAM,OAAO,UAAW,MAAM,KAAG,MACkC,CAAC;AAa3E,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAM5D;AA2dD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA4ZjE,wBAAgB,WAAW,CACzB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,MAAM,GAAE,MAAM,GAAG,IAAW,GAC3B,WAAW,CAUb"}
|
package/dist/compile.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { ARRAY_INDEX, bodied, byCodePoint, compared, cursorOf, heldKind, parse, pointerSegments, sql, } from '@agentshouse/mdmodel';
|
|
2
2
|
import { binaryRecord } from './binary.js';
|
|
3
|
+
import { definitionsAt } from './collection.js';
|
|
3
4
|
import { documentKey, pathOfKey, roomOfKey } from './rows.js';
|
|
4
5
|
import { FROM_START, MAXIMUM_WINDOW } from './windows.js';
|
|
6
|
+
const UNTYPED = 'any';
|
|
5
7
|
const { all, any, exists, fragment, grouped, joined, listed } = sql;
|
|
6
8
|
export const VISIBLE = (alias) => `${alias}.visible = 1 AND ${alias}.present = 1 AND ${alias}.queried = 1`;
|
|
7
9
|
function located(alias) {
|
|
@@ -310,7 +312,16 @@ function sectionsOf(sections, names) {
|
|
|
310
312
|
return sections;
|
|
311
313
|
return Object.fromEntries(names.flatMap((name) => (Object.hasOwn(sections, name) ? [[name, sections[name]]] : [])));
|
|
312
314
|
}
|
|
313
|
-
function
|
|
315
|
+
function freeParts(room, path, type, content) {
|
|
316
|
+
const definitions = room.composition === undefined ? undefined : definitionsAt(room.composition, path);
|
|
317
|
+
const definition = definitions?.(type === UNTYPED ? undefined : type);
|
|
318
|
+
if (definition === undefined && type !== UNTYPED)
|
|
319
|
+
return null;
|
|
320
|
+
const read = parse(content, path, definition);
|
|
321
|
+
return read.ok ? read.document : null;
|
|
322
|
+
}
|
|
323
|
+
function documentOf(shape, queried, row, linked) {
|
|
324
|
+
const room = queried.locator;
|
|
314
325
|
const path = row.path;
|
|
315
326
|
const type = row.type;
|
|
316
327
|
const fileId = row.file_id;
|
|
@@ -333,8 +344,9 @@ function documentOf(shape, room, row, linked) {
|
|
|
333
344
|
...heldFacts(shape, row),
|
|
334
345
|
};
|
|
335
346
|
}
|
|
336
|
-
const
|
|
337
|
-
|
|
347
|
+
const body = shape.sections !== null || shape.preamble
|
|
348
|
+
? freeParts(queried, path, type, row.content)
|
|
349
|
+
: null;
|
|
338
350
|
const fields = JSON.parse(row.fields ?? '{}');
|
|
339
351
|
return {
|
|
340
352
|
room,
|
|
@@ -428,8 +440,9 @@ function documents(connection, bound, plan, shape, budget) {
|
|
|
428
440
|
const kept = bodied(shape) ? withContent(connection, windowed, budget) : windowed;
|
|
429
441
|
const cut = kept.length;
|
|
430
442
|
const roomOf = new Map(bound.rooms.map(({ key, locator }) => [key, locator]));
|
|
443
|
+
const queried = new Map(bound.rooms.map((one) => [one.key, one]));
|
|
431
444
|
const linked = shape.backlinks ? backlinksOf(connection, bound, kept) : new Map();
|
|
432
|
-
const found = kept.map((row) => documentOf(shape,
|
|
445
|
+
const found = kept.map((row) => documentOf(shape, queried.get(Number(row.key)), row, linked));
|
|
433
446
|
const last = kept.at(-1);
|
|
434
447
|
const cursorAt = (row) => cursorOf([
|
|
435
448
|
...shape.orderBy.map(({ key }, index) => decodedKey(key, row, index)),
|
package/dist/connection.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAI/E,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAI/E,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAUrE,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAK9D,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAErE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,eAAe,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAIF,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAqGzE"}
|
package/dist/connection.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { submitLater } from './acceptance.js';
|
|
2
2
|
import { invokeAction, called, readConversationHistory, resendLater } from './actions.js';
|
|
3
|
-
import { builtInModel,
|
|
3
|
+
import { builtInModel, NO_ROOM_TYPES } from './attached-model.js';
|
|
4
4
|
import { createLiveConversations } from './conversation-live.js';
|
|
5
5
|
import { writeRule } from './declaration.js';
|
|
6
6
|
import { refusedForSpace } from './durability.js';
|
|
@@ -8,13 +8,13 @@ import { uncaught } from './failure.js';
|
|
|
8
8
|
import { createFigures } from './figures.js';
|
|
9
9
|
import { scheduleCurrency, spaceFreed, start } from './lifecycle.js';
|
|
10
10
|
import { createLiveQueries } from './live.js';
|
|
11
|
-
import { createLog } from './log.js';
|
|
12
11
|
import { open } from './opening.js';
|
|
13
12
|
import { deliverOwedReadiness, filled, prepare } from './preparation.js';
|
|
14
13
|
import { createPresence } from './presence.js';
|
|
15
14
|
import { answeredPlan, figuresCover, roomTallies } from './queries.js';
|
|
16
15
|
import { readAnswers } from './reads.js';
|
|
17
16
|
import { createRecovery } from './recovery.js';
|
|
17
|
+
import { createRetries } from './retried.js';
|
|
18
18
|
import { publishChangeSet, show } from './shown.js';
|
|
19
19
|
import { createSocket } from './socket.js';
|
|
20
20
|
import { createStore } from './store.js';
|
|
@@ -22,13 +22,14 @@ import { composedRuntime } from './surface.js';
|
|
|
22
22
|
const ROOM_ATTEMPTS = 16;
|
|
23
23
|
export function composeRuntime(options) {
|
|
24
24
|
const { adapter, shell } = options;
|
|
25
|
-
const roomTypes =
|
|
25
|
+
const roomTypes = adapter.roomTypes ?? NO_ROOM_TYPES;
|
|
26
26
|
const builtIn = builtInModel(roomTypes);
|
|
27
27
|
const typedPaths = adapter.typedPaths ?? [];
|
|
28
|
-
const
|
|
29
|
-
const socket = createSocket(adapter,
|
|
28
|
+
const retries = createRetries(shell);
|
|
29
|
+
const socket = createSocket(adapter, retries, options.authorization);
|
|
30
30
|
const presence = createPresence();
|
|
31
31
|
const store = createStore({
|
|
32
|
+
retries,
|
|
32
33
|
database: {
|
|
33
34
|
async ask(request) {
|
|
34
35
|
try {
|
|
@@ -46,11 +47,9 @@ export function composeRuntime(options) {
|
|
|
46
47
|
typedPaths,
|
|
47
48
|
persistence: shell.persistence,
|
|
48
49
|
lost: presence.lost,
|
|
50
|
+
losing: presence.losing,
|
|
49
51
|
opening: (local) => open(runtime, local),
|
|
50
|
-
unpublished
|
|
51
|
-
journal.record(`publication failed ${error instanceof Error ? error.name : 'unknown'}`);
|
|
52
|
-
uncaught(error);
|
|
53
|
-
},
|
|
52
|
+
unpublished: uncaught,
|
|
54
53
|
changed(set) {
|
|
55
54
|
if (set.unindexed.length > 0)
|
|
56
55
|
prepare(runtime, set.unindexed);
|
|
@@ -58,7 +57,7 @@ export function composeRuntime(options) {
|
|
|
58
57
|
submitLater(runtime, locator);
|
|
59
58
|
return publishChangeSet(runtime, set);
|
|
60
59
|
},
|
|
61
|
-
deliverReadiness: (owed) => deliverOwedReadiness(runtime, owed),
|
|
60
|
+
deliverReadiness: (owed, rooms) => deliverOwedReadiness(runtime, owed, rooms),
|
|
62
61
|
spaceFreed: () => spaceFreed(runtime),
|
|
63
62
|
});
|
|
64
63
|
const recovery = (options.recovery ?? createRecovery()).scope(ROOM_ATTEMPTS);
|
|
@@ -66,8 +65,8 @@ export function composeRuntime(options) {
|
|
|
66
65
|
store,
|
|
67
66
|
socket,
|
|
68
67
|
presence,
|
|
69
|
-
journal,
|
|
70
68
|
recovery,
|
|
69
|
+
retries,
|
|
71
70
|
shell,
|
|
72
71
|
localSaves: adapter.localSaves === true,
|
|
73
72
|
roomTypes,
|
|
@@ -77,7 +76,7 @@ export function composeRuntime(options) {
|
|
|
77
76
|
usableWhenHeld: options.usableWhenHeld ?? [],
|
|
78
77
|
build: options.build ?? '',
|
|
79
78
|
conversations: createLiveConversations({
|
|
80
|
-
call: (name, input) => invokeAction(runtime, name, input),
|
|
79
|
+
call: (name, input, attempt) => invokeAction(runtime, name, input, { attempt }),
|
|
81
80
|
history: (request) => readConversationHistory(runtime, request),
|
|
82
81
|
durably: store.durably,
|
|
83
82
|
local: store.open,
|
|
@@ -93,7 +92,9 @@ export function composeRuntime(options) {
|
|
|
93
92
|
full: store.space.full,
|
|
94
93
|
closed: socket.closed,
|
|
95
94
|
unanswered: () => resendLater(runtime),
|
|
95
|
+
heard: (operation, lost) => socket.lanes.settle(operation, lost),
|
|
96
96
|
recovery: recovery.scope(),
|
|
97
|
+
retries,
|
|
97
98
|
}),
|
|
98
99
|
liveQueries: createLiveQueries((plan, cover) => answeredPlan(runtime, plan, cover), store.covering),
|
|
99
100
|
figures: createFigures({
|
|
@@ -107,7 +108,8 @@ export function composeRuntime(options) {
|
|
|
107
108
|
unkept: adapter.unkeptReads ?? [],
|
|
108
109
|
leading: adapter.leadingReads ?? [],
|
|
109
110
|
recovery: recovery.scope(),
|
|
110
|
-
|
|
111
|
+
retries,
|
|
112
|
+
call: (name, input, attempt) => called(runtime, name, input, attempt),
|
|
111
113
|
online: socket.reached,
|
|
112
114
|
streaming: socket.isOpen,
|
|
113
115
|
closed: socket.closed,
|
|
@@ -5,9 +5,10 @@ import type { ChangeSet } from './change-set.js';
|
|
|
5
5
|
import type { Asked, ConversationAgent, ConversationEntry, ConversationView, RunningTurn } from './conversation.js';
|
|
6
6
|
import type { CallResult } from './outcome.js';
|
|
7
7
|
import type { Recovery } from './recovery.js';
|
|
8
|
+
import type { Attempt, Retries } from './retried.js';
|
|
8
9
|
import type { ChatDraftRecord, RuntimeStore } from './store.js';
|
|
9
10
|
export type ConversationDependencies = {
|
|
10
|
-
call(name: ConversationAction, input: unknown): Promise<CallResult>;
|
|
11
|
+
call(name: ConversationAction, input: unknown, attempt?: Attempt): Promise<CallResult>;
|
|
11
12
|
history(request: ConversationHistoryRequest): Promise<CallResult>;
|
|
12
13
|
durably<T>(work: (local: RuntimeStore) => Promise<T>): Promise<T>;
|
|
13
14
|
local(): Promise<RuntimeStore>;
|
|
@@ -19,7 +20,9 @@ export type ConversationDependencies = {
|
|
|
19
20
|
full(): boolean;
|
|
20
21
|
closed(): boolean;
|
|
21
22
|
unanswered(): void;
|
|
23
|
+
heard(operation: string, lost: boolean): void;
|
|
22
24
|
readonly recovery: Recovery;
|
|
25
|
+
readonly retries: Retries;
|
|
23
26
|
};
|
|
24
27
|
export type Live = {
|
|
25
28
|
turn: RunningTurn | null;
|
|
@@ -34,6 +37,7 @@ export type Live = {
|
|
|
34
37
|
link: {
|
|
35
38
|
connected: boolean;
|
|
36
39
|
} | null;
|
|
40
|
+
deliveryWaiting: readonly string[];
|
|
37
41
|
deliveryUnknown: readonly string[];
|
|
38
42
|
};
|
|
39
43
|
export declare const QUIET: Live;
|
|
@@ -42,10 +46,14 @@ export declare const FACTS: readonly Fact[];
|
|
|
42
46
|
type Watcher = {
|
|
43
47
|
readonly notify: (view: ConversationView) => void;
|
|
44
48
|
};
|
|
45
|
-
type
|
|
46
|
-
readonly window: readonly AcceptedMessage[] | null;
|
|
49
|
+
export type Kept = {
|
|
47
50
|
readonly draft: ChatDraftRecord | null;
|
|
48
51
|
readonly ended: string | null;
|
|
52
|
+
readonly dismissed: string | null;
|
|
53
|
+
readonly pins: readonly string[];
|
|
54
|
+
};
|
|
55
|
+
type HeldWindow = Kept & {
|
|
56
|
+
readonly window: readonly AcceptedMessage[] | null;
|
|
49
57
|
readonly more: boolean;
|
|
50
58
|
readonly total: number | null;
|
|
51
59
|
};
|
|
@@ -71,23 +79,29 @@ export type Audience<T> = {
|
|
|
71
79
|
};
|
|
72
80
|
type HeldFacts = {
|
|
73
81
|
readonly listKnown: boolean;
|
|
82
|
+
readonly openingRead: boolean;
|
|
83
|
+
readonly openingListed: boolean;
|
|
74
84
|
readonly listOwed: boolean;
|
|
75
85
|
readonly listTelling: boolean;
|
|
76
86
|
readonly agentsShown: string | null;
|
|
77
|
-
readonly
|
|
78
|
-
readonly agentsReading: boolean;
|
|
87
|
+
readonly listedShown: string | null;
|
|
79
88
|
readonly replicated: ReadonlySet<string>;
|
|
80
89
|
readonly handedReplicated: string | undefined;
|
|
81
90
|
};
|
|
82
91
|
export type Dispatch = Cell<{
|
|
83
92
|
readonly answered: boolean;
|
|
84
93
|
}>;
|
|
94
|
+
export type Relisted = {
|
|
95
|
+
readonly conversations: ReadonlyMap<string, ListedConversation>;
|
|
96
|
+
readonly agents: ReadonlyMap<string, ListedAgent>;
|
|
97
|
+
};
|
|
85
98
|
export type LiveConversations = {
|
|
86
99
|
readonly deps: ConversationDependencies;
|
|
87
100
|
readonly held: Cell<HeldFacts>;
|
|
88
101
|
readonly closing: AbortSignal;
|
|
89
102
|
readonly listeners: Audience<readonly ConversationEntry[]>;
|
|
90
103
|
readonly agentListeners: Audience<readonly ConversationAgent[]>;
|
|
104
|
+
readonly listedListeners: Audience<readonly ListedAgent[]>;
|
|
91
105
|
views(): Iterable<SharedView>;
|
|
92
106
|
viewJoined(key: string, conversation: string, asked: Asked, notify: (view: ConversationView) => void): {
|
|
93
107
|
readonly view: SharedView;
|
|
@@ -106,7 +120,7 @@ export type LiveConversations = {
|
|
|
106
120
|
caughtUpTo(conversation: string): void;
|
|
107
121
|
gapOpened(conversation: string): void;
|
|
108
122
|
generation(conversation: string): number;
|
|
109
|
-
heardAt(conversation: string,
|
|
123
|
+
heardAt(conversation: string, change: string): void;
|
|
110
124
|
newestHeard(conversation: string): string | undefined;
|
|
111
125
|
catching(conversation: string): Promise<void> | undefined;
|
|
112
126
|
catchingUntil(conversation: string, ended: Promise<void>): void;
|
|
@@ -115,9 +129,9 @@ export type LiveConversations = {
|
|
|
115
129
|
isCreating(conversation: string): boolean;
|
|
116
130
|
relisting(): boolean;
|
|
117
131
|
relistBegun(): void;
|
|
118
|
-
relistHeard(entries: readonly ListedConversation[]): void;
|
|
132
|
+
relistHeard(entries: readonly ListedConversation[], agents: readonly ListedAgent[]): void;
|
|
119
133
|
relistDropped(conversation: string): void;
|
|
120
|
-
relistTaken():
|
|
134
|
+
relistTaken(): Relisted | null;
|
|
121
135
|
sendingBegan(operation: string): Dispatch;
|
|
122
136
|
sendingEnded(operation: string, dispatch: Dispatch): void;
|
|
123
137
|
sending(operation: string): boolean;
|
|
@@ -126,6 +140,7 @@ export type LiveConversations = {
|
|
|
126
140
|
forget(conversation: string): void;
|
|
127
141
|
current(): boolean;
|
|
128
142
|
known(): boolean;
|
|
143
|
+
listed(): boolean;
|
|
129
144
|
reopened(): void;
|
|
130
145
|
lost(): void;
|
|
131
146
|
close(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-live.d.ts","sourceRoot":"","sources":["../src/conversation-live.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,aAAa,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EACV,KAAK,EACL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEhE,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"conversation-live.d.ts","sourceRoot":"","sources":["../src/conversation-live.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export const QUIET = {
|
|
|
8
8
|
starting: null,
|
|
9
9
|
state: null,
|
|
10
10
|
link: null,
|
|
11
|
+
deliveryWaiting: [],
|
|
11
12
|
deliveryUnknown: [],
|
|
12
13
|
};
|
|
13
14
|
export const FACTS = [
|
|
@@ -18,6 +19,7 @@ export const FACTS = [
|
|
|
18
19
|
'starting',
|
|
19
20
|
'state',
|
|
20
21
|
'link',
|
|
22
|
+
'deliveryWaiting',
|
|
21
23
|
'deliveryUnknown',
|
|
22
24
|
];
|
|
23
25
|
// A row is read at a glance and each telling clones the list to every observing tab, while a running line changes at each Kit flush.
|
|
@@ -61,6 +63,8 @@ function sharedView(conversation, asked) {
|
|
|
61
63
|
window: null,
|
|
62
64
|
draft: null,
|
|
63
65
|
ended: null,
|
|
66
|
+
dismissed: null,
|
|
67
|
+
pins: [],
|
|
64
68
|
more: false,
|
|
65
69
|
total: null,
|
|
66
70
|
}),
|
|
@@ -91,13 +95,15 @@ export function createLiveConversations(deps) {
|
|
|
91
95
|
const closing = new AbortController();
|
|
92
96
|
const listeners = createAudience();
|
|
93
97
|
const agentListeners = createAudience();
|
|
98
|
+
const listedListeners = createAudience();
|
|
94
99
|
const held = createCell({
|
|
95
100
|
listKnown: false,
|
|
101
|
+
openingRead: false,
|
|
102
|
+
openingListed: false,
|
|
96
103
|
listOwed: false,
|
|
97
104
|
listTelling: false,
|
|
98
105
|
agentsShown: null,
|
|
99
|
-
|
|
100
|
-
agentsReading: false,
|
|
106
|
+
listedShown: null,
|
|
101
107
|
replicated: new Set(),
|
|
102
108
|
handedReplicated: undefined,
|
|
103
109
|
});
|
|
@@ -110,6 +116,7 @@ export function createLiveConversations(deps) {
|
|
|
110
116
|
closing: closing.signal,
|
|
111
117
|
listeners,
|
|
112
118
|
agentListeners,
|
|
119
|
+
listedListeners,
|
|
113
120
|
views: () => views.values(),
|
|
114
121
|
viewJoined(key, conversation, asked, notify) {
|
|
115
122
|
const view = views.get(key) ?? sharedView(conversation, asked);
|
|
@@ -158,10 +165,10 @@ export function createLiveConversations(deps) {
|
|
|
158
165
|
behind.add(conversation);
|
|
159
166
|
},
|
|
160
167
|
generation: (conversation) => gaps.get(conversation) ?? 0,
|
|
161
|
-
heardAt(conversation,
|
|
168
|
+
heardAt(conversation, change) {
|
|
162
169
|
const heard = heardNewest.get(conversation);
|
|
163
|
-
if (heard === undefined ||
|
|
164
|
-
heardNewest.set(conversation,
|
|
170
|
+
if (heard === undefined || change > heard)
|
|
171
|
+
heardNewest.set(conversation, change);
|
|
165
172
|
},
|
|
166
173
|
newestHeard: (conversation) => heardNewest.get(conversation),
|
|
167
174
|
catching: (conversation) => catching.get(conversation),
|
|
@@ -181,14 +188,16 @@ export function createLiveConversations(deps) {
|
|
|
181
188
|
isCreating: (conversation) => creations.has(conversation),
|
|
182
189
|
relisting: () => relisting !== null,
|
|
183
190
|
relistBegun() {
|
|
184
|
-
relisting ??= new Map();
|
|
191
|
+
relisting ??= { conversations: new Map(), agents: new Map() };
|
|
185
192
|
},
|
|
186
|
-
relistHeard(entries) {
|
|
193
|
+
relistHeard(entries, agents) {
|
|
187
194
|
for (const entry of entries)
|
|
188
|
-
relisting?.set(entry.conversation, { ...entry });
|
|
195
|
+
relisting?.conversations.set(entry.conversation, { ...entry });
|
|
196
|
+
for (const agent of agents)
|
|
197
|
+
relisting?.agents.set(agent.id, { ...agent });
|
|
189
198
|
},
|
|
190
199
|
relistDropped(conversation) {
|
|
191
|
-
relisting?.delete(conversation);
|
|
200
|
+
relisting?.conversations.delete(conversation);
|
|
192
201
|
},
|
|
193
202
|
relistTaken() {
|
|
194
203
|
const whole = relisting;
|
|
@@ -223,8 +232,10 @@ export function createLiveConversations(deps) {
|
|
|
223
232
|
},
|
|
224
233
|
current: () => behind.size === 0,
|
|
225
234
|
known: () => held.now().listKnown,
|
|
235
|
+
listed: () => deps.stream() === undefined || held.now().openingListed,
|
|
226
236
|
reopened() {
|
|
227
237
|
relisting = null;
|
|
238
|
+
held.set({ openingRead: false, openingListed: false });
|
|
228
239
|
for (const [operation, dispatch] of sending)
|
|
229
240
|
if (!dispatch.now().answered)
|
|
230
241
|
sending.delete(operation);
|
|
@@ -242,6 +253,7 @@ export function createLiveConversations(deps) {
|
|
|
242
253
|
unsent.clear();
|
|
243
254
|
listeners.clear();
|
|
244
255
|
agentListeners.clear();
|
|
256
|
+
listedListeners.clear();
|
|
245
257
|
},
|
|
246
258
|
};
|
|
247
259
|
}
|
|
@@ -22,6 +22,8 @@ export type ConversationAsk = {
|
|
|
22
22
|
};
|
|
23
23
|
export type ConversationHeld = {
|
|
24
24
|
readonly last: ConversationLast | null;
|
|
25
|
+
readonly answered: string | null;
|
|
26
|
+
readonly opened: string | null;
|
|
25
27
|
readonly failure: string | null;
|
|
26
28
|
readonly startedBy: ConversationStart | null;
|
|
27
29
|
readonly asks: ConversationAsk | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-row.d.ts","sourceRoot":"","sources":["../src/conversation-row.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IACzC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAA;CAAE,CAAC,CAAC;AAE/F,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;CACvC,CAAC;AAiDF,wBAAgB,SAAS,CACvB,IAAI,EAAE,OAAO,GAAG,SAAS,EACzB,MAAM,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACrE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"conversation-row.d.ts","sourceRoot":"","sources":["../src/conversation-row.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IACzC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAA;CAAE,CAAC,CAAC;AAE/F,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;CACvC,CAAC;AAiDF,wBAAgB,SAAS,CACvB,IAAI,EAAE,OAAO,GAAG,SAAS,EACzB,MAAM,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACrE,gBAAgB,CAUlB"}
|
package/dist/conversation-row.js
CHANGED
|
@@ -46,6 +46,8 @@ export function heldFacts(held, listed) {
|
|
|
46
46
|
const startedBy = startOf(held?.opened ?? null);
|
|
47
47
|
return {
|
|
48
48
|
last: lastOf(held?.said ?? null),
|
|
49
|
+
answered: held?.answered ?? null,
|
|
50
|
+
opened: held?.openedTurn ?? null,
|
|
49
51
|
failure: listed.outcome === 'failed' ? (held?.failure ?? null) : null,
|
|
50
52
|
startedBy,
|
|
51
53
|
asks: asksOf(held?.asking ?? null, startedBy, listed.waiting),
|