@agentshouse/mdruntime 0.1.0-c97456d63baba → 0.1.0-c9b1e59e5baeb
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/AGENTS.md +221 -221
- package/README.md +8 -8
- package/dist/adapter.d.ts +35 -6
- package/dist/adapter.d.ts.map +1 -1
- package/dist/bootstrap.d.ts +2 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +5 -1
- package/dist/change-set.d.ts +5 -2
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +8 -2
- package/dist/chat/earlier.d.ts +10 -0
- package/dist/chat/earlier.d.ts.map +1 -0
- package/dist/chat/earlier.js +54 -0
- package/dist/chat/kit.js +1 -1
- package/dist/chat/list.d.ts +2 -1
- package/dist/chat/list.d.ts.map +1 -1
- package/dist/chat/list.js +40 -4
- package/dist/chat/markdown.d.ts +1 -0
- package/dist/chat/markdown.d.ts.map +1 -1
- package/dist/chat/markdown.js +78 -20
- package/dist/chat/message.d.ts.map +1 -1
- package/dist/chat/message.js +9 -2
- package/dist/chat/messages.d.ts.map +1 -1
- package/dist/chat/messages.js +36 -16
- package/dist/chat/overlay.d.ts +1 -0
- package/dist/chat/overlay.d.ts.map +1 -1
- package/dist/chat/overlay.js +10 -0
- package/dist/chat/pieces.d.ts +62 -0
- package/dist/chat/pieces.d.ts.map +1 -0
- package/dist/chat/pieces.js +1110 -0
- package/dist/chat/provider.d.ts +1 -0
- package/dist/chat/provider.d.ts.map +1 -1
- package/dist/chat/provider.js +22 -14
- package/dist/chat/question.d.ts +1 -1
- package/dist/chat/question.d.ts.map +1 -1
- package/dist/chat/question.js +7 -18
- package/dist/chat/ready.d.ts +1 -1
- package/dist/chat/ready.d.ts.map +1 -1
- package/dist/chat/ready.js +1 -1
- package/dist/chat/steady.d.ts +3 -0
- package/dist/chat/steady.d.ts.map +1 -0
- package/dist/chat/steady.js +26 -0
- package/dist/chat/style.js +1 -1
- package/dist/chat.d.ts +2 -2
- package/dist/chat.d.ts.map +1 -1
- package/dist/chat.js +2 -2
- package/dist/client.d.ts +6 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +16 -5
- package/dist/collection.d.ts +4 -3
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +128 -63
- package/dist/connection.d.ts +13 -5
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +506 -228
- package/dist/conversation.d.ts +11 -0
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +195 -41
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +3 -2
- package/dist/host.d.ts +9 -7
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +58 -9
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/memory.d.ts +7 -3
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +24 -11
- package/dist/observation.d.ts +2 -0
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +9 -3
- package/dist/outcome.d.ts +8 -2
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +3 -0
- package/dist/overlay.d.ts +5 -4
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +197 -132
- package/dist/query.d.ts +27 -1
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +36 -7
- package/dist/reach.d.ts +1 -2
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +17 -4
- package/dist/react.d.ts +3 -3
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +7 -17
- package/dist/read-side.d.ts +3 -1
- package/dist/read-side.d.ts.map +1 -1
- package/dist/read-side.js +256 -69
- package/dist/reads.d.ts +11 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +98 -0
- package/dist/refresh.d.ts +4 -4
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +39 -14
- package/dist/replica.d.ts +11 -5
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +79 -41
- package/dist/room-draft.d.ts +12 -0
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +11 -12
- package/dist/rows.d.ts +3 -1
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +8 -1
- package/dist/save.d.ts +4 -2
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +195 -111
- package/dist/search.d.ts +27 -6
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +89 -7
- package/dist/seed.d.ts +16 -0
- package/dist/seed.d.ts.map +1 -0
- package/dist/seed.js +75 -0
- package/dist/shared.d.ts +4 -0
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +63 -33
- package/dist/store.d.ts +20 -4
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +404 -317
- package/dist/turn.d.ts +5 -3
- package/dist/turn.d.ts.map +1 -1
- package/dist/turn.js +26 -7
- package/dist/windows.d.ts +26 -0
- package/dist/windows.d.ts.map +1 -0
- package/dist/windows.js +93 -0
- package/dist/wire.d.ts +16 -0
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +4 -0
- package/package.json +2 -2
- package/dist/acquisition.d.ts +0 -14
- package/dist/acquisition.d.ts.map +0 -1
- package/dist/acquisition.js +0 -24
package/dist/conversation.d.ts
CHANGED
|
@@ -36,10 +36,14 @@ export type ChatDraft = {
|
|
|
36
36
|
};
|
|
37
37
|
export type ConversationOptions = {
|
|
38
38
|
limit?: number;
|
|
39
|
+
after?: string;
|
|
40
|
+
total?: true;
|
|
39
41
|
};
|
|
40
42
|
export type ConversationView = {
|
|
41
43
|
conversation: string;
|
|
42
44
|
messages: readonly ConversationMessage[];
|
|
45
|
+
next?: string;
|
|
46
|
+
total?: number;
|
|
43
47
|
turn: RunningTurn | null;
|
|
44
48
|
questions: readonly unknown[];
|
|
45
49
|
process: {
|
|
@@ -47,6 +51,11 @@ export type ConversationView = {
|
|
|
47
51
|
} | null;
|
|
48
52
|
commands: readonly ProcessCommand[];
|
|
49
53
|
options: readonly SessionOption[];
|
|
54
|
+
starting: string | null;
|
|
55
|
+
link: {
|
|
56
|
+
connected: boolean;
|
|
57
|
+
} | null;
|
|
58
|
+
deliveryUnknown: readonly string[];
|
|
50
59
|
chatDraft: (ChatDraft & {
|
|
51
60
|
readonly revision: string;
|
|
52
61
|
}) | null;
|
|
@@ -64,6 +73,7 @@ export type ConversationSurface = {
|
|
|
64
73
|
};
|
|
65
74
|
export type ChatDraftSurface = {
|
|
66
75
|
write(conversation: string, draft: ChatDraft, revision?: string): Promise<void>;
|
|
76
|
+
prepend(conversation: string, draft: ChatDraft): Promise<void>;
|
|
67
77
|
discard(conversation: string): Promise<void>;
|
|
68
78
|
};
|
|
69
79
|
export type ConversationDependencies = {
|
|
@@ -89,6 +99,7 @@ export type ConversationStore = {
|
|
|
89
99
|
known(): boolean;
|
|
90
100
|
reconnected(): void;
|
|
91
101
|
reopened(): void;
|
|
102
|
+
lost(): void;
|
|
92
103
|
watch(conversation: string, options: ConversationOptions, deliver: (view: ConversationView) => void): () => void;
|
|
93
104
|
watchList(deliver: (entries: readonly ConversationEntry[]) => void): () => void;
|
|
94
105
|
watchAgents(deliver: (agents: readonly ConversationAgent[]) => void): () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EAEjB,mBAAmB,EACnB,kBAAkB,EAElB,cAAc,EACd,aAAa,EACb,WAAW,EAEZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAyB,KAAK,SAAS,EAAsB,MAAM,iBAAiB,CAAC;AAE5F,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAE7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAW,KAAK,UAAU,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAkB,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EAEjB,mBAAmB,EACnB,kBAAkB,EAElB,cAAc,EACd,aAAa,EACb,WAAW,EAEZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAyB,KAAK,SAAS,EAAsB,MAAM,iBAAiB,CAAC;AAE5F,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAE7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAW,KAAK,UAAU,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAkB,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGlG,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC;AAEpE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IAC1B,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAEnF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,SAAS,OAAO,EAAE,CAAC;IAC9B,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACrC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAClC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACpC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,SAAS,EAAE,CAAC,SAAS,GAAG;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,IAAI,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACrF,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC;IACjG,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACnE,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACrD,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAChE,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,IAAI,kBAAkB,GAAG,SAAS,CAAC;IACzC,SAAS,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,CAAC;IAC/E,IAAI,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACpE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,IAAI,kBAAkB,GAAG,SAAS,CAAC;IACzC,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,MAAM,IAAI,OAAO,CAAC;IAClB,MAAM,IAAI,OAAO,CAAC;IAClB,UAAU,IAAI,IAAI,CAAC;IACnB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,mBAAmB,CAAC;IAC7B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,OAAO,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,EAAE,MAAM,EAAE,SAAS,eAAe,EAAE,GAAG,IAAI,CAAC;IACrF,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,IAAI,OAAO,CAAC;IACnB,KAAK,IAAI,OAAO,CAAC;IACjB,WAAW,IAAI,IAAI,CAAC;IACpB,QAAQ,IAAI,IAAI,CAAC;IACjB,IAAI,IAAI,IAAI,CAAC;IACb,KAAK,CACH,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,GACxC,MAAM,IAAI,CAAC;IACd,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAChF,WAAW,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACjF,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,OAAO,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAC3C,UAAU,IAAI,SAAS,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAyCF,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,CAcjE;AAED,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAIjD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AAyPD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,wBAAwB,GAAG,iBAAiB,CAm4BzF"}
|
package/dist/conversation.js
CHANGED
|
@@ -3,13 +3,26 @@ import { runtimeError } from './failure.js';
|
|
|
3
3
|
import { declaredFile } from './file.js';
|
|
4
4
|
import { changeBatchIdentity, chatDraftRevision } from './identity.js';
|
|
5
5
|
import { OFFLINE } from './outcome.js';
|
|
6
|
+
import { capped, cursorOf, decodedCursor, FROM_START, messageOrder, precedes } from './windows.js';
|
|
6
7
|
const QUIET = {
|
|
7
8
|
turn: null,
|
|
8
9
|
questions: [],
|
|
9
10
|
process: null,
|
|
10
11
|
commands: [],
|
|
11
12
|
options: [],
|
|
13
|
+
starting: null,
|
|
14
|
+
link: null,
|
|
15
|
+
deliveryUnknown: [],
|
|
12
16
|
};
|
|
17
|
+
const FACTS = [
|
|
18
|
+
'questions',
|
|
19
|
+
'process',
|
|
20
|
+
'commands',
|
|
21
|
+
'options',
|
|
22
|
+
'starting',
|
|
23
|
+
'link',
|
|
24
|
+
'deliveryUnknown',
|
|
25
|
+
];
|
|
13
26
|
export function unheldView(conversation) {
|
|
14
27
|
return {
|
|
15
28
|
conversation,
|
|
@@ -19,6 +32,9 @@ export function unheldView(conversation) {
|
|
|
19
32
|
process: null,
|
|
20
33
|
commands: [],
|
|
21
34
|
options: [],
|
|
35
|
+
starting: null,
|
|
36
|
+
link: null,
|
|
37
|
+
deliveryUnknown: [],
|
|
22
38
|
chatDraft: null,
|
|
23
39
|
};
|
|
24
40
|
}
|
|
@@ -82,19 +98,25 @@ function appliedTurn(held, operation) {
|
|
|
82
98
|
parts: held.parts.map((kept, at) => (at === operation.index ? changed : kept)),
|
|
83
99
|
};
|
|
84
100
|
}
|
|
85
|
-
function ordered(left, right) {
|
|
86
|
-
if (left.position !== right.position)
|
|
87
|
-
return left.position < right.position ? -1 : 1;
|
|
88
|
-
if (left.identity !== right.identity)
|
|
89
|
-
return left.identity < right.identity ? -1 : 1;
|
|
90
|
-
return 0;
|
|
91
|
-
}
|
|
92
101
|
function windowOf(held, arriving, limit) {
|
|
93
102
|
const byIdentity = new Map(held.map((message) => [message.identity, message]));
|
|
94
103
|
for (const message of arriving)
|
|
95
104
|
byIdentity.set(message.identity, message);
|
|
96
|
-
const next = [...byIdentity.values()].sort(
|
|
97
|
-
|
|
105
|
+
const next = [...byIdentity.values()].sort(messageOrder);
|
|
106
|
+
const start = Math.max(0, next.length - limit);
|
|
107
|
+
return { messages: next.slice(start), dropped: start > 0 };
|
|
108
|
+
}
|
|
109
|
+
function frameOf(asked, messages, more, total) {
|
|
110
|
+
const oldest = messages[0];
|
|
111
|
+
const next = !more
|
|
112
|
+
? undefined
|
|
113
|
+
: oldest === undefined
|
|
114
|
+
? (asked.after ?? FROM_START)
|
|
115
|
+
: cursorOf([oldest.position, oldest.identity]);
|
|
116
|
+
return {
|
|
117
|
+
...(next === undefined ? {} : { next }),
|
|
118
|
+
...(total === null ? {} : { total }),
|
|
119
|
+
};
|
|
98
120
|
}
|
|
99
121
|
function newestOf(arriving, from) {
|
|
100
122
|
return arriving.reduce((top, message) => (top === null || message.position > top ? message.position : top), from);
|
|
@@ -165,14 +187,24 @@ function answered(result, field) {
|
|
|
165
187
|
const value = answer[field];
|
|
166
188
|
return typeof value === 'string' ? value : null;
|
|
167
189
|
}
|
|
168
|
-
function
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
if (
|
|
190
|
+
function beforeOf(after) {
|
|
191
|
+
if (after === undefined)
|
|
192
|
+
return null;
|
|
193
|
+
const decoded = typeof after === 'string' ? decodedCursor(after) : null;
|
|
194
|
+
if (decoded?.length === 0)
|
|
195
|
+
return null;
|
|
196
|
+
const [position, identity] = decoded ?? [];
|
|
197
|
+
if (decoded?.length !== 2 || typeof position !== 'string' || typeof identity !== 'string') {
|
|
198
|
+
throw runtimeError('invalid-after', `conversation after must be the next an earlier view returned, got ${String(after)}`);
|
|
199
|
+
}
|
|
200
|
+
return [position, identity];
|
|
201
|
+
}
|
|
202
|
+
function askedOf(options) {
|
|
203
|
+
const { limit, after, total } = options;
|
|
204
|
+
if (limit !== undefined && (!Number.isInteger(limit) || limit < 0)) {
|
|
173
205
|
throw runtimeError('invalid-limit', `conversation limit must be a non-negative integer, got ${String(limit)}`);
|
|
174
206
|
}
|
|
175
|
-
return limit;
|
|
207
|
+
return { limit: capped(limit), after, before: beforeOf(after), total: total === true };
|
|
176
208
|
}
|
|
177
209
|
const EXPIRED = { kind: 'rejected', code: 'expired', fields: {}, retryable: false };
|
|
178
210
|
function unwritten(draft) {
|
|
@@ -191,11 +223,16 @@ function withSubmitted(draft, submitted) {
|
|
|
191
223
|
const { submitted: _held, ...unsent } = draft;
|
|
192
224
|
return submitted.length === 0 ? unsent : { ...unsent, submitted };
|
|
193
225
|
}
|
|
226
|
+
function prepended(draft, said) {
|
|
227
|
+
return {
|
|
228
|
+
text: [said.text, draft.text].filter((one) => one !== '').join('\n'),
|
|
229
|
+
files: [...said.files, ...draft.files],
|
|
230
|
+
};
|
|
231
|
+
}
|
|
194
232
|
function returned(draft, submission, others) {
|
|
195
233
|
return withSubmitted({
|
|
196
234
|
conversation: draft.conversation,
|
|
197
|
-
|
|
198
|
-
files: [...submission.files, ...draft.files],
|
|
235
|
+
...prepended(draft, submission),
|
|
199
236
|
revision: chatDraftRevision(),
|
|
200
237
|
}, others);
|
|
201
238
|
}
|
|
@@ -206,8 +243,10 @@ export function createConversationStore(deps) {
|
|
|
206
243
|
const drafts = new Map();
|
|
207
244
|
const sending = new Map();
|
|
208
245
|
const behind = new Set();
|
|
246
|
+
const catching = new Map();
|
|
209
247
|
const gaps = new Map();
|
|
210
248
|
const lives = new Map();
|
|
249
|
+
const unsent = new Map();
|
|
211
250
|
const views = new Map();
|
|
212
251
|
const listing = new Map();
|
|
213
252
|
const creations = new Set();
|
|
@@ -222,7 +261,7 @@ export function createConversationStore(deps) {
|
|
|
222
261
|
function liveOf(conversation) {
|
|
223
262
|
return lives.get(conversation) ?? QUIET;
|
|
224
263
|
}
|
|
225
|
-
function viewOf(conversation, held) {
|
|
264
|
+
function viewOf(conversation, held, frame) {
|
|
226
265
|
const draft = drafts.get(conversation);
|
|
227
266
|
const facts = liveOf(conversation);
|
|
228
267
|
return {
|
|
@@ -233,11 +272,15 @@ export function createConversationStore(deps) {
|
|
|
233
272
|
text,
|
|
234
273
|
message,
|
|
235
274
|
})),
|
|
275
|
+
...frame,
|
|
236
276
|
turn: structuredClone(facts.turn),
|
|
237
277
|
questions: structuredClone(facts.questions),
|
|
238
278
|
process: facts.process === null ? null : { ...facts.process },
|
|
239
279
|
commands: structuredClone(facts.commands),
|
|
240
280
|
options: structuredClone(facts.options),
|
|
281
|
+
starting: facts.starting,
|
|
282
|
+
link: facts.link === null ? null : { ...facts.link },
|
|
283
|
+
deliveryUnknown: [...facts.deliveryUnknown],
|
|
241
284
|
chatDraft: draft === undefined || unwritten(draft)
|
|
242
285
|
? null
|
|
243
286
|
: { text: draft.text, files: [...draft.files], revision: draft.revision },
|
|
@@ -252,16 +295,34 @@ export function createConversationStore(deps) {
|
|
|
252
295
|
const ready = [...view.watchers].filter((watcher) => watcher.ready);
|
|
253
296
|
if (ready.length === 0)
|
|
254
297
|
continue;
|
|
255
|
-
const value = viewOf(conversation, view.window);
|
|
298
|
+
const value = viewOf(conversation, view.window, sharedFrame(view, view.window));
|
|
256
299
|
for (const watcher of ready)
|
|
257
300
|
watcher.notify(value);
|
|
258
301
|
}
|
|
259
302
|
}
|
|
260
|
-
function
|
|
303
|
+
function sharedFrame(view, window) {
|
|
304
|
+
return frameOf(view.asked, window, view.more, view.total);
|
|
305
|
+
}
|
|
306
|
+
async function slide(local, conversation, arriving) {
|
|
307
|
+
let count;
|
|
261
308
|
for (const view of views.values()) {
|
|
262
309
|
if (view.conversation !== conversation || view.window === null)
|
|
263
310
|
continue;
|
|
264
|
-
|
|
311
|
+
if (arriving === null) {
|
|
312
|
+
view.window = [];
|
|
313
|
+
view.more = false;
|
|
314
|
+
if (view.total !== null)
|
|
315
|
+
view.total = 0;
|
|
316
|
+
continue;
|
|
317
|
+
}
|
|
318
|
+
const joining = arriving.filter((message) => precedes(message, view.asked.before));
|
|
319
|
+
const next = windowOf(view.window, joining, view.asked.limit);
|
|
320
|
+
view.window = next.messages;
|
|
321
|
+
view.more ||= next.dropped;
|
|
322
|
+
if (view.total !== null && arriving.length > 0) {
|
|
323
|
+
count ??= await local.messageCount(conversation);
|
|
324
|
+
view.total = count;
|
|
325
|
+
}
|
|
265
326
|
}
|
|
266
327
|
}
|
|
267
328
|
function changesOf(conversation, arriving) {
|
|
@@ -363,9 +424,34 @@ export function createConversationStore(deps) {
|
|
|
363
424
|
return agentsRead;
|
|
364
425
|
}
|
|
365
426
|
function live(conversation, change) {
|
|
427
|
+
const owed = unsent.get(conversation);
|
|
428
|
+
for (const fact of FACTS.filter((one) => one in change))
|
|
429
|
+
owed?.delete(fact);
|
|
366
430
|
setLive(conversation, { ...liveOf(conversation), ...change });
|
|
367
431
|
emit(conversation);
|
|
368
432
|
}
|
|
433
|
+
function openingEnded() {
|
|
434
|
+
const owed = [...unsent];
|
|
435
|
+
unsent.clear();
|
|
436
|
+
for (const [conversation, facts] of owed) {
|
|
437
|
+
const held = lives.get(conversation);
|
|
438
|
+
if (held === undefined || facts.size === 0)
|
|
439
|
+
continue;
|
|
440
|
+
setLive(conversation, {
|
|
441
|
+
turn: held.turn,
|
|
442
|
+
questions: facts.has('questions') ? QUIET.questions : held.questions,
|
|
443
|
+
process: facts.has('process') ? QUIET.process : held.process,
|
|
444
|
+
commands: facts.has('commands') ? QUIET.commands : held.commands,
|
|
445
|
+
options: facts.has('options') ? QUIET.options : held.options,
|
|
446
|
+
starting: facts.has('starting') ? QUIET.starting : held.starting,
|
|
447
|
+
link: facts.has('link') ? QUIET.link : held.link,
|
|
448
|
+
deliveryUnknown: facts.has('deliveryUnknown')
|
|
449
|
+
? QUIET.deliveryUnknown
|
|
450
|
+
: held.deliveryUnknown,
|
|
451
|
+
});
|
|
452
|
+
emit(conversation);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
369
455
|
function relayed(conversation, turn, operation) {
|
|
370
456
|
const held = liveOf(conversation).turn;
|
|
371
457
|
const next = held?.turn === turn ? appliedTurn(held, operation) : startedTurn(turn, operation);
|
|
@@ -409,8 +495,9 @@ export function createConversationStore(deps) {
|
|
|
409
495
|
partials.delete(conversation);
|
|
410
496
|
drafts.delete(conversation);
|
|
411
497
|
behind.delete(conversation);
|
|
498
|
+
unsent.delete(conversation);
|
|
412
499
|
setLive(conversation, null);
|
|
413
|
-
slide(conversation, null);
|
|
500
|
+
await slide(local, conversation, null);
|
|
414
501
|
}
|
|
415
502
|
if (changed.length > 0)
|
|
416
503
|
deps.publish(conversationChangeSet(removed, changed));
|
|
@@ -438,11 +525,11 @@ export function createConversationStore(deps) {
|
|
|
438
525
|
if (advances)
|
|
439
526
|
reads.set(conversation, message.position);
|
|
440
527
|
sealTurns(conversation, new Set([message.turn]));
|
|
441
|
-
slide(conversation, [message]);
|
|
528
|
+
await slide(local, conversation, [message]);
|
|
442
529
|
deps.publish(conversationChangeSet(changesOf(conversation, [message]), [conversation]));
|
|
443
530
|
});
|
|
444
531
|
}
|
|
445
|
-
async function readHistories(conversations) {
|
|
532
|
+
async function readHistories(conversations, ended) {
|
|
446
533
|
const generations = new Map(conversations.map((one) => [one, gaps.get(one) ?? 0]));
|
|
447
534
|
let asking = conversations.map((conversation) => ({
|
|
448
535
|
conversation,
|
|
@@ -468,10 +555,33 @@ export function createConversationStore(deps) {
|
|
|
468
555
|
following.push({ conversation: page.conversation, after: page.next });
|
|
469
556
|
}
|
|
470
557
|
}
|
|
558
|
+
for (const { conversation } of asking) {
|
|
559
|
+
if (!following.some((next) => next.conversation === conversation))
|
|
560
|
+
ended(conversation);
|
|
561
|
+
}
|
|
471
562
|
asking = following;
|
|
472
563
|
}
|
|
473
564
|
return null;
|
|
474
565
|
}
|
|
566
|
+
function caughtUp(conversations) {
|
|
567
|
+
const ends = new Map();
|
|
568
|
+
for (const conversation of conversations) {
|
|
569
|
+
const held = new Promise((end) => ends.set(conversation, end));
|
|
570
|
+
catching.set(conversation, held);
|
|
571
|
+
void held.then(() => {
|
|
572
|
+
if (catching.get(conversation) === held)
|
|
573
|
+
catching.delete(conversation);
|
|
574
|
+
});
|
|
575
|
+
}
|
|
576
|
+
const ended = (conversation) => ends.get(conversation)?.();
|
|
577
|
+
const read = readHistories(conversations, ended);
|
|
578
|
+
const endAll = () => {
|
|
579
|
+
for (const conversation of conversations)
|
|
580
|
+
ended(conversation);
|
|
581
|
+
};
|
|
582
|
+
read.then(endAll, endAll);
|
|
583
|
+
return read;
|
|
584
|
+
}
|
|
475
585
|
function keepPage(conversation, arriving, from, next, generation) {
|
|
476
586
|
return deps.durably(async (local) => {
|
|
477
587
|
if (!replicated.has(conversation))
|
|
@@ -490,7 +600,7 @@ export function createConversationStore(deps) {
|
|
|
490
600
|
sealTurns(conversation, new Set(arriving.map((message) => message.turn)));
|
|
491
601
|
if (whole && (gaps.get(conversation) ?? 0) === generation)
|
|
492
602
|
behind.delete(conversation);
|
|
493
|
-
slide(conversation, arriving);
|
|
603
|
+
await slide(local, conversation, arriving);
|
|
494
604
|
if (arriving.length > 0 || sealing || whole) {
|
|
495
605
|
deps.publish(conversationChangeSet(changesOf(conversation, arriving), [conversation]));
|
|
496
606
|
}
|
|
@@ -501,11 +611,8 @@ export function createConversationStore(deps) {
|
|
|
501
611
|
if (event.kind === 'gap') {
|
|
502
612
|
if (replicated.has(conversation))
|
|
503
613
|
gap(conversation);
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
return;
|
|
507
|
-
setLive(conversation, { ...QUIET, turn: held.turn });
|
|
508
|
-
emit(conversation);
|
|
614
|
+
if (lives.has(conversation))
|
|
615
|
+
unsent.set(conversation, new Set(FACTS));
|
|
509
616
|
return;
|
|
510
617
|
}
|
|
511
618
|
if (event.kind === 'turn') {
|
|
@@ -528,6 +635,18 @@ export function createConversationStore(deps) {
|
|
|
528
635
|
live(conversation, { options: structuredClone(event.options) });
|
|
529
636
|
return;
|
|
530
637
|
}
|
|
638
|
+
if (event.kind === 'starting') {
|
|
639
|
+
live(conversation, { starting: event.step });
|
|
640
|
+
return;
|
|
641
|
+
}
|
|
642
|
+
if (event.kind === 'link') {
|
|
643
|
+
live(conversation, { link: { connected: event.connected } });
|
|
644
|
+
return;
|
|
645
|
+
}
|
|
646
|
+
if (event.kind === 'deliveries') {
|
|
647
|
+
live(conversation, { deliveryUnknown: [...event.unknown] });
|
|
648
|
+
return;
|
|
649
|
+
}
|
|
531
650
|
const arriving = acceptedMessage(event.message);
|
|
532
651
|
if (arriving === null)
|
|
533
652
|
return;
|
|
@@ -667,8 +786,12 @@ export function createConversationStore(deps) {
|
|
|
667
786
|
return entries();
|
|
668
787
|
},
|
|
669
788
|
async read(conversation, options = {}) {
|
|
670
|
-
const
|
|
671
|
-
return deps.durably(async (local) =>
|
|
789
|
+
const asked = askedOf(options);
|
|
790
|
+
return deps.durably(async (local) => {
|
|
791
|
+
const { messages, more } = await local.messageWindow(conversation, asked.limit, asked.before);
|
|
792
|
+
const total = asked.total ? await local.messageCount(conversation) : null;
|
|
793
|
+
return structuredClone(viewOf(conversation, messages, frameOf(asked, messages, more, total)));
|
|
794
|
+
});
|
|
672
795
|
},
|
|
673
796
|
async create(input) {
|
|
674
797
|
const result = await deps.call('conversation.create', input);
|
|
@@ -732,6 +855,16 @@ export function createConversationStore(deps) {
|
|
|
732
855
|
...(current === undefined ? {} : pending(current)),
|
|
733
856
|
}));
|
|
734
857
|
},
|
|
858
|
+
prepend(conversation, draft) {
|
|
859
|
+
return withDraft(conversation, (current) => ({
|
|
860
|
+
conversation,
|
|
861
|
+
...(current === undefined
|
|
862
|
+
? { text: draft.text, files: [...draft.files] }
|
|
863
|
+
: prepended(current, draft)),
|
|
864
|
+
revision: chatDraftRevision(),
|
|
865
|
+
...(current === undefined ? {} : pending(current)),
|
|
866
|
+
}));
|
|
867
|
+
},
|
|
735
868
|
discard(conversation) {
|
|
736
869
|
return withDraft(conversation, (current) => current === undefined
|
|
737
870
|
? undefined
|
|
@@ -781,12 +914,20 @@ export function createConversationStore(deps) {
|
|
|
781
914
|
await remove(leaving);
|
|
782
915
|
},
|
|
783
916
|
async catchUp(progress) {
|
|
784
|
-
const
|
|
785
|
-
|
|
786
|
-
|
|
917
|
+
const owed = (conversation) => behind.has(conversation) && replicated.has(conversation);
|
|
918
|
+
const read = async (conversations) => {
|
|
919
|
+
if (conversations.length === 0 || deps.closed())
|
|
920
|
+
return;
|
|
921
|
+
const failed = await caughtUp(conversations);
|
|
787
922
|
if (failed?.kind === 'transport-uncertainty')
|
|
788
923
|
progress.reachable = false;
|
|
789
|
-
}
|
|
924
|
+
};
|
|
925
|
+
const asking = [...behind].filter(owed).sort();
|
|
926
|
+
const awaited = asking.filter((conversation) => catching.has(conversation));
|
|
927
|
+
await Promise.all([
|
|
928
|
+
read(asking.filter((conversation) => !catching.has(conversation))),
|
|
929
|
+
Promise.all(awaited.map((conversation) => catching.get(conversation))).then(() => read(awaited.filter((conversation) => owed(conversation) && !catching.has(conversation)))),
|
|
930
|
+
]);
|
|
790
931
|
if (behind.size > 0)
|
|
791
932
|
progress.complete = false;
|
|
792
933
|
},
|
|
@@ -828,27 +969,38 @@ export function createConversationStore(deps) {
|
|
|
828
969
|
reopened() {
|
|
829
970
|
sending.clear();
|
|
830
971
|
},
|
|
972
|
+
lost() {
|
|
973
|
+
catching.clear();
|
|
974
|
+
},
|
|
831
975
|
watch(conversation, options, deliver) {
|
|
832
|
-
const
|
|
833
|
-
const key = JSON.stringify([conversation, limit ?? null]);
|
|
976
|
+
const asked = askedOf(options);
|
|
977
|
+
const key = JSON.stringify([conversation, asked.limit, asked.after ?? null, asked.total]);
|
|
834
978
|
const view = views.get(key) ?? {
|
|
835
979
|
conversation,
|
|
836
|
-
|
|
980
|
+
asked,
|
|
837
981
|
watchers: new Set(),
|
|
838
982
|
window: null,
|
|
983
|
+
more: false,
|
|
984
|
+
total: null,
|
|
839
985
|
};
|
|
840
986
|
views.set(key, view);
|
|
841
987
|
const watcher = { notify: deliver, ready: false };
|
|
842
988
|
view.watchers.add(watcher);
|
|
843
989
|
void deps
|
|
844
990
|
.durably(async (local) => {
|
|
845
|
-
view.window
|
|
991
|
+
if (view.window !== null)
|
|
992
|
+
return;
|
|
993
|
+
const { messages, more } = await local.messageWindow(conversation, asked.limit, asked.before);
|
|
994
|
+
view.window = messages;
|
|
995
|
+
view.more = more;
|
|
996
|
+
view.total = asked.total ? await local.messageCount(conversation) : null;
|
|
846
997
|
})
|
|
847
998
|
.then(() => {
|
|
848
999
|
if (deps.closed() || !view.watchers.has(watcher))
|
|
849
1000
|
return;
|
|
850
1001
|
watcher.ready = true;
|
|
851
|
-
|
|
1002
|
+
const window = view.window ?? [];
|
|
1003
|
+
watcher.notify(viewOf(conversation, window, sharedFrame(view, window)));
|
|
852
1004
|
})
|
|
853
1005
|
.catch(() => { });
|
|
854
1006
|
return () => {
|
|
@@ -900,6 +1052,7 @@ export function createConversationStore(deps) {
|
|
|
900
1052
|
creations.delete(entry.conversation);
|
|
901
1053
|
}
|
|
902
1054
|
listKnown = true;
|
|
1055
|
+
openingEnded();
|
|
903
1056
|
}
|
|
904
1057
|
else if (event.kind === 'listed') {
|
|
905
1058
|
listing.set(event.entry.conversation, { ...event.entry });
|
|
@@ -926,6 +1079,7 @@ export function createConversationStore(deps) {
|
|
|
926
1079
|
close() {
|
|
927
1080
|
views.clear();
|
|
928
1081
|
lives.clear();
|
|
1082
|
+
unsent.clear();
|
|
929
1083
|
listWatchers.clear();
|
|
930
1084
|
agentWatchers.clear();
|
|
931
1085
|
},
|
package/dist/entry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,SAAS,EAEf,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE9D,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AA0D7E,wBAAgB,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAE3E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAMpE;AAkCD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQ7D;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;CACzF,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,SAAS,EAEf,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE9D,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AA0D7E,wBAAgB,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAE3E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAMpE;AAkCD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQ7D;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;CACzF,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,UAAU,CAuDlE"}
|
package/dist/entry.js
CHANGED
|
@@ -131,10 +131,10 @@ export function entryScope(rooms) {
|
|
|
131
131
|
locator: room.locator,
|
|
132
132
|
path,
|
|
133
133
|
before: [],
|
|
134
|
-
after: rowsOf(room.locator, path, passingFrontmatter(collection, path) ?? null, composition, null, null),
|
|
134
|
+
after: rowsOf(room.locator, path, passingFrontmatter(collection, path) ?? null, composition, null, null, null),
|
|
135
135
|
}));
|
|
136
136
|
});
|
|
137
|
-
readSide.apply({
|
|
137
|
+
const seeded = readSide.apply({
|
|
138
138
|
documents,
|
|
139
139
|
drafts: [],
|
|
140
140
|
rooms: [],
|
|
@@ -146,6 +146,7 @@ export function entryScope(rooms) {
|
|
|
146
146
|
const planned = { listed: true, rooms: held };
|
|
147
147
|
return {
|
|
148
148
|
async results(queries) {
|
|
149
|
+
await seeded;
|
|
149
150
|
const results = {};
|
|
150
151
|
for (const [name, query] of Object.entries(queries)) {
|
|
151
152
|
results[name] = (await readSide.query(planOf(query, planned), () => null)).rows;
|
package/dist/host.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type MdRuntimeOptions } from './connection.js';
|
|
2
|
-
import type { RuntimeDemand } from './acquisition.js';
|
|
3
2
|
import type { PortReach } from './reach.js';
|
|
4
|
-
import type { CapacityCause, CodeAvailability, Persistence, Readiness } from './readiness.js';
|
|
3
|
+
import type { CapacityCause, CodeAvailability, Persistence, Readiness, SearchObligation } from './readiness.js';
|
|
4
|
+
import type { EntrySeed } from './seed.js';
|
|
5
5
|
import { type RuntimePort } from './wire.js';
|
|
6
6
|
export type MdRuntimeHostOptions = MdRuntimeOptions & {
|
|
7
7
|
deploymentFacts?: unknown;
|
|
@@ -10,21 +10,23 @@ export type AttachedPort = {
|
|
|
10
10
|
detach(): void;
|
|
11
11
|
narrow(reach: PortReach): void;
|
|
12
12
|
readiness(deliver: (readiness: Readiness) => void): () => void;
|
|
13
|
+
answered(queries: readonly unknown[], done: () => void): void;
|
|
13
14
|
code(code: CodeAvailability, capacity: CapacityCause | null): void;
|
|
15
|
+
search(search: SearchObligation): void;
|
|
14
16
|
};
|
|
15
17
|
export type MdRuntimeHost = {
|
|
16
|
-
attach(port: RuntimePort, app: string, release?: string, reach?: PortReach, code?: CodeAvailability): AttachedPort;
|
|
17
|
-
|
|
18
|
+
attach(port: RuntimePort, app: string, release?: string, reach?: PortReach, code?: CodeAvailability, search?: SearchObligation): AttachedPort;
|
|
19
|
+
seed(entry: EntrySeed): void;
|
|
18
20
|
persisted(answer: Persistence): void;
|
|
19
21
|
endAuthorization(holder?: string): Promise<void>;
|
|
20
22
|
lose(locators: readonly string[]): Promise<void>;
|
|
21
23
|
stop(): Promise<void>;
|
|
22
24
|
};
|
|
23
25
|
export declare function serveMdRuntime(options: MdRuntimeHostOptions): MdRuntimeHost;
|
|
24
|
-
export type
|
|
26
|
+
export { entrySeedOf, type EntrySeed } from './seed.js';
|
|
25
27
|
export type { PortReach, ReachedDocument } from './reach.js';
|
|
26
|
-
export type { CapacityCause, CodeAvailability, Persistence } from './readiness.js';
|
|
28
|
+
export type { CapacityCause, CodeAvailability, Persistence, SearchObligation, } from './readiness.js';
|
|
27
29
|
export { createRecovery, retryDelay, type Attempt, type Attempted, type AttemptOptions, type Recovery, type RecoveryOptions, } from './recovery.js';
|
|
28
|
-
export { AUTHORED_SCHEMA, authoredBinding, authoredBy, authoredHolder, bindAuthored, openDatabase, STORE_SCHEMA, } from './store.js';
|
|
30
|
+
export { AUTHORED_SCHEMA, authoredBinding, authoredBy, authoredHolder, bindAuthored, openDatabase, STORE_SCHEMA, transacted, } from './store.js';
|
|
29
31
|
export type { RuntimePort } from './wire.js';
|
|
30
32
|
//# sourceMappingURL=host.d.ts.map
|
package/dist/host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,gBAAgB,EAItB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C,OAAO,EAGL,KAAK,WAAW,EAOjB,MAAM,WAAW,CAAC;AAInB,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,IAAI,IAAI,CAAC;IACf,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/B,SAAS,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC/D,QAAQ,CAAC,OAAO,EAAE,SAAS,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC9D,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;IACnE,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,CACJ,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,SAAS,EACjB,IAAI,CAAC,EAAE,gBAAgB,EACvB,MAAM,CAAC,EAAE,gBAAgB,GACxB,YAAY,CAAC;IAChB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IACrC,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB,CAAC;AAiHF,wBAAgB,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAsK3E;AAED,OAAO,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AACxD,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7D,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EACd,UAAU,EACV,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,eAAe,EACf,UAAU,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
|