@agentshouse/mdruntime 0.1.0-ca4dc698bd0c4 → 0.1.0-ca58768ab31fe
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 +19 -16
- package/dist/adapter.d.ts +146 -79
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +5 -1
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +38 -4
- package/dist/binary.d.ts +0 -5
- package/dist/binary.d.ts.map +1 -1
- package/dist/binary.js +1 -1
- package/dist/bootstrap.d.ts +27 -11
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +181 -99
- package/dist/chain.d.ts +12 -0
- package/dist/chain.d.ts.map +1 -0
- package/dist/chain.js +64 -0
- package/dist/change-set.d.ts +9 -16
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +11 -88
- package/dist/change.d.ts +31 -1
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +10 -1
- package/dist/client.d.ts +24 -11
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +98 -11
- package/dist/collection.d.ts +11 -21
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +39 -291
- package/dist/compile.d.ts +11 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +586 -0
- package/dist/connection.d.ts +33 -17
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +3082 -1404
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/{chat/context.js → context.js} +1 -4
- package/dist/conversation.d.ts +31 -15
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +524 -223
- package/dist/digest.d.ts +7 -0
- package/dist/digest.d.ts.map +1 -0
- package/dist/digest.js +113 -0
- package/dist/durability.d.ts +7 -4
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +5 -0
- package/dist/entry.d.ts +5 -2
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +30 -27
- package/dist/file.d.ts +2 -19
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +7 -122
- package/dist/host.d.ts +6 -8
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +98 -24
- package/dist/identity.d.ts +0 -2
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +0 -6
- package/dist/index.d.ts +20 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/job.d.ts +14 -0
- package/dist/job.d.ts.map +1 -0
- package/dist/job.js +28 -0
- package/dist/live.d.ts +23 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +127 -0
- package/dist/media.d.ts +8 -0
- package/dist/media.d.ts.map +1 -0
- package/dist/media.js +218 -0
- package/dist/memory.d.ts +17 -7
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +209 -103
- package/dist/messages.d.ts +28 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +89 -0
- package/dist/model.d.ts +10 -5
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +8 -14
- package/dist/name.d.ts +4 -0
- package/dist/name.d.ts.map +1 -0
- package/dist/name.js +122 -0
- package/dist/observation.d.ts +17 -2
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +100 -5
- package/dist/opened.d.ts +22 -0
- package/dist/opened.d.ts.map +1 -0
- package/dist/opened.js +107 -0
- package/dist/outcome.d.ts +45 -7
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +39 -0
- package/dist/overlay.d.ts +3 -5
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +95 -156
- package/dist/paths.d.ts +1 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +4 -0
- package/dist/query.d.ts +17 -185
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -464
- package/dist/reach.d.ts +16 -8
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +221 -90
- package/dist/react.d.ts +6 -4
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +7 -17
- package/dist/readiness.d.ts +14 -17
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +2 -8
- package/dist/recovery.d.ts +3 -2
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +34 -7
- package/dist/refresh.d.ts +17 -14
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +136 -52
- package/dist/replica.d.ts +56 -33
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +298 -182
- package/dist/room-draft.d.ts +37 -6
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +161 -74
- package/dist/rows.d.ts +22 -29
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +58 -112
- package/dist/save.d.ts +53 -14
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +529 -185
- package/dist/search.d.ts +15 -77
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +10 -184
- 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 +7 -3
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +119 -66
- package/dist/status.d.ts +4 -3
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +3 -1
- package/dist/store.d.ts +90 -98
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +303 -661
- package/dist/stored.d.ts +129 -0
- package/dist/stored.d.ts.map +1 -0
- package/dist/stored.js +495 -0
- package/dist/tables.d.ts +328 -0
- package/dist/tables.d.ts.map +1 -0
- package/dist/tables.js +587 -0
- package/dist/transfer.d.ts +0 -5
- package/dist/transfer.d.ts.map +1 -1
- package/dist/turn.d.ts +5 -3
- package/dist/turn.d.ts.map +1 -1
- package/dist/turn.js +51 -21
- package/dist/validation.d.ts +29 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +104 -0
- package/dist/windows.d.ts +11 -0
- package/dist/windows.d.ts.map +1 -0
- package/dist/windows.js +16 -0
- package/dist/wire.d.ts +172 -33
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +57 -32
- package/package.json +18 -19
- package/AGENTS.md +0 -300
- package/dist/acquisition.d.ts +0 -14
- package/dist/acquisition.d.ts.map +0 -1
- package/dist/acquisition.js +0 -24
- package/dist/chat/acts.d.ts +0 -33
- package/dist/chat/acts.d.ts.map +0 -1
- package/dist/chat/acts.js +0 -36
- package/dist/chat/context.d.ts +0 -3
- package/dist/chat/context.d.ts.map +0 -1
- package/dist/chat/input.d.ts +0 -9
- package/dist/chat/input.d.ts.map +0 -1
- package/dist/chat/input.js +0 -99
- package/dist/chat/kit.d.ts +0 -60
- package/dist/chat/kit.d.ts.map +0 -1
- package/dist/chat/kit.js +0 -123
- package/dist/chat/lasting.d.ts +0 -6
- package/dist/chat/lasting.d.ts.map +0 -1
- package/dist/chat/lasting.js +0 -19
- package/dist/chat/list.d.ts +0 -26
- package/dist/chat/list.d.ts.map +0 -1
- package/dist/chat/list.js +0 -62
- package/dist/chat/markdown.d.ts +0 -20
- package/dist/chat/markdown.d.ts.map +0 -1
- package/dist/chat/markdown.js +0 -188
- package/dist/chat/message.d.ts +0 -6
- package/dist/chat/message.d.ts.map +0 -1
- package/dist/chat/message.js +0 -192
- package/dist/chat/messages.d.ts +0 -21
- package/dist/chat/messages.d.ts.map +0 -1
- package/dist/chat/messages.js +0 -151
- package/dist/chat/name.d.ts +0 -6
- package/dist/chat/name.d.ts.map +0 -1
- package/dist/chat/name.js +0 -37
- package/dist/chat/opened.d.ts +0 -11
- package/dist/chat/opened.d.ts.map +0 -1
- package/dist/chat/opened.js +0 -17
- package/dist/chat/overlay.d.ts +0 -31
- package/dist/chat/overlay.d.ts.map +0 -1
- package/dist/chat/overlay.js +0 -97
- package/dist/chat/parts.d.ts +0 -57
- package/dist/chat/parts.d.ts.map +0 -1
- package/dist/chat/parts.js +0 -119
- package/dist/chat/process.d.ts +0 -20
- package/dist/chat/process.d.ts.map +0 -1
- package/dist/chat/process.js +0 -32
- package/dist/chat/provider.d.ts +0 -63
- package/dist/chat/provider.d.ts.map +0 -1
- package/dist/chat/provider.js +0 -620
- package/dist/chat/question.d.ts +0 -9
- package/dist/chat/question.d.ts.map +0 -1
- package/dist/chat/question.js +0 -80
- package/dist/chat/questions.d.ts +0 -31
- package/dist/chat/questions.d.ts.map +0 -1
- package/dist/chat/questions.js +0 -111
- package/dist/chat/read.d.ts +0 -5
- package/dist/chat/read.d.ts.map +0 -1
- package/dist/chat/read.js +0 -13
- package/dist/chat/ready.d.ts +0 -33
- package/dist/chat/ready.d.ts.map +0 -1
- package/dist/chat/ready.js +0 -91
- package/dist/chat/style.d.ts +0 -4
- package/dist/chat/style.d.ts.map +0 -1
- package/dist/chat/style.js +0 -302
- package/dist/chat.d.ts +0 -14
- package/dist/chat.d.ts.map +0 -1
- package/dist/chat.js +0 -8
- package/dist/read-side.d.ts +0 -25
- package/dist/read-side.d.ts.map +0 -1
- package/dist/read-side.js +0 -639
package/dist/host.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { queryKey } from '@agentshouse/mdmodel';
|
|
1
2
|
import { composeRuntime, } from './connection.js';
|
|
3
|
+
import { untilAnswered } from './recovery.js';
|
|
2
4
|
import { described } from './failure.js';
|
|
3
|
-
import {
|
|
4
|
-
import { AUTHORIZATION_ENDED, request, WIRE_REACH, } from './wire.js';
|
|
5
|
+
import { AUTHORIZATION_ENDED, request, WIRE, } from './wire.js';
|
|
5
6
|
const NARROWED = new Set(['within', 'whole']);
|
|
6
7
|
function answered(md, app, writtenBy, member, input) {
|
|
7
8
|
switch (member) {
|
|
@@ -15,18 +16,34 @@ function answered(md, app, writtenBy, member, input) {
|
|
|
15
16
|
return md.types(input[0]);
|
|
16
17
|
case 'save':
|
|
17
18
|
return md.save(input[0], input[1], writtenBy);
|
|
19
|
+
case 'saveParts':
|
|
20
|
+
return md.saveParts(input[0], input[1], writtenBy);
|
|
18
21
|
case 'history':
|
|
19
22
|
return md.history(input[0], input[1], input[2]);
|
|
23
|
+
case 'resolve':
|
|
24
|
+
return md.resolve(input[0], input[1], input[2]);
|
|
20
25
|
case 'binaryFile.read':
|
|
21
26
|
return md.binaryFile.read(input[0], input[1], input[2]);
|
|
22
|
-
case 'binaryFile.
|
|
23
|
-
return md.binaryFile.
|
|
27
|
+
case 'binaryFile.link':
|
|
28
|
+
return md.binaryFile.link(input[0], input[1], input[2]);
|
|
29
|
+
case 'binaryFile.show':
|
|
30
|
+
return md.binaryFile.show(input[0], input[1], input[2]);
|
|
31
|
+
case 'binaryFile.attach':
|
|
32
|
+
return md.binaryFile.attach(input[0], input[1]);
|
|
33
|
+
case 'binaryFile.part':
|
|
34
|
+
return md.binaryFile.part(input[0], input[1]);
|
|
24
35
|
case 'call':
|
|
25
36
|
return md.call(input[0], input[1]);
|
|
26
37
|
case 'reached':
|
|
27
38
|
return md.reached(input[0], input[1], input[2]);
|
|
28
39
|
case 'log':
|
|
29
40
|
return md.log();
|
|
41
|
+
case 'cleanUp':
|
|
42
|
+
return md.cleanUp();
|
|
43
|
+
case 'unsent':
|
|
44
|
+
return md.unsent();
|
|
45
|
+
case 'reset':
|
|
46
|
+
return md.reset();
|
|
30
47
|
case 'persistence':
|
|
31
48
|
return md.persistence();
|
|
32
49
|
case 'retry':
|
|
@@ -38,13 +55,15 @@ function answered(md, app, writtenBy, member, input) {
|
|
|
38
55
|
case 'roomDraft.read':
|
|
39
56
|
return md.roomDraft.read(input[0], input[1]);
|
|
40
57
|
case 'roomDraft.write':
|
|
41
|
-
return md.roomDraft.write(input[0], input[1], input[2], input[3]);
|
|
58
|
+
return md.roomDraft.write(input[0], input[1], input[2], input[3], input[4]);
|
|
42
59
|
case 'roomDraft.discard':
|
|
43
60
|
return md.roomDraft.discard(input[0], input[1], input[2]);
|
|
44
61
|
case 'presentation.read':
|
|
45
62
|
return md.presentation.read(app);
|
|
46
63
|
case 'presentation.write':
|
|
47
64
|
return md.presentation.write(app, input[0]);
|
|
65
|
+
case 'presentation.edit':
|
|
66
|
+
return md.presentation.edit(app, input[0]);
|
|
48
67
|
case 'conversation.list':
|
|
49
68
|
return md.conversation.list();
|
|
50
69
|
case 'conversation.read':
|
|
@@ -59,16 +78,32 @@ function answered(md, app, writtenBy, member, input) {
|
|
|
59
78
|
return md.conversation.interrupt(input[0]);
|
|
60
79
|
case 'conversation.kill':
|
|
61
80
|
return md.conversation.kill(input[0]);
|
|
62
|
-
case 'conversation.cancel':
|
|
63
|
-
return md.conversation.cancel(input[0], input[1]);
|
|
64
81
|
case 'conversation.delete':
|
|
65
82
|
return md.conversation.delete(input[0]);
|
|
66
83
|
case 'chatDraft.write':
|
|
67
84
|
return md.chatDraft.write(input[0], input[1], input[2]);
|
|
85
|
+
case 'chatDraft.prepend':
|
|
86
|
+
return md.chatDraft.prepend(input[0], input[1]);
|
|
68
87
|
case 'chatDraft.discard':
|
|
69
88
|
return md.chatDraft.discard(input[0]);
|
|
70
89
|
}
|
|
71
90
|
}
|
|
91
|
+
function attempted(work) {
|
|
92
|
+
try {
|
|
93
|
+
return Promise.resolve(work());
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
return Promise.reject(error);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function answeredResult(value) {
|
|
100
|
+
return typeof value === 'object' && value !== null && !('pending' in value);
|
|
101
|
+
}
|
|
102
|
+
function answeredMessage(value) {
|
|
103
|
+
if (typeof value !== 'object' || value === null)
|
|
104
|
+
return false;
|
|
105
|
+
return !('result' in value) || answeredResult(value.result);
|
|
106
|
+
}
|
|
72
107
|
export function serveMdRuntime(options) {
|
|
73
108
|
const deploymentFacts = structuredClone(options.deploymentFacts);
|
|
74
109
|
const closing = new AbortController();
|
|
@@ -82,6 +117,8 @@ export function serveMdRuntime(options) {
|
|
|
82
117
|
const { md } = runtime;
|
|
83
118
|
const attachments = new Map();
|
|
84
119
|
let authorized = true;
|
|
120
|
+
let opening = null;
|
|
121
|
+
const opened = () => (opening ??= untilAnswered(() => md.loaded(), closing.signal));
|
|
85
122
|
const watchFacts = (deliver) => {
|
|
86
123
|
deliver(structuredClone(deploymentFacts));
|
|
87
124
|
return () => { };
|
|
@@ -90,10 +127,20 @@ export function serveMdRuntime(options) {
|
|
|
90
127
|
if (!authorized)
|
|
91
128
|
throw new Error(AUTHORIZATION_ENDED);
|
|
92
129
|
const writtenBy = release === undefined ? undefined : { app, release };
|
|
93
|
-
const view = runtime.within(reach ?? null, { target: app, code
|
|
130
|
+
const view = runtime.within(reach ?? null, { target: app, code });
|
|
94
131
|
const observations = new Map();
|
|
95
132
|
const followed = new Set();
|
|
133
|
+
const answeredKeys = new Set();
|
|
134
|
+
let awaited = null;
|
|
96
135
|
let serving = true;
|
|
136
|
+
const answeredQuery = (query) => {
|
|
137
|
+
answeredKeys.add(queryKey(query));
|
|
138
|
+
if (awaited === null || !awaited.keys.every((key) => answeredKeys.has(key)))
|
|
139
|
+
return;
|
|
140
|
+
const { done } = awaited;
|
|
141
|
+
awaited = null;
|
|
142
|
+
done();
|
|
143
|
+
};
|
|
97
144
|
const send = (message) => {
|
|
98
145
|
port.postMessage(message);
|
|
99
146
|
};
|
|
@@ -115,10 +162,33 @@ export function serveMdRuntime(options) {
|
|
|
115
162
|
return;
|
|
116
163
|
send(resolved ? { kind: 'event', id, value } : { kind: 'result', id, value });
|
|
117
164
|
resolved = true;
|
|
165
|
+
if (topic === 'query' && answeredMessage(value))
|
|
166
|
+
answeredQuery(input[0]);
|
|
167
|
+
};
|
|
168
|
+
const fail = (error) => {
|
|
169
|
+
if (!serving || resolved)
|
|
170
|
+
return;
|
|
171
|
+
observations.get(id)?.();
|
|
172
|
+
observations.delete(id);
|
|
173
|
+
send({ kind: 'failure', id, ...described(error) });
|
|
118
174
|
};
|
|
119
175
|
observations.set(id, topic === 'deployment-facts'
|
|
120
176
|
? watchFacts(deliver)
|
|
121
|
-
: (NARROWED.has(
|
|
177
|
+
: (NARROWED.has(WIRE.topics[topic]) ? view : runtime).watch(topic, topic === 'presentation' ? [app] : input, deliver, fail));
|
|
178
|
+
};
|
|
179
|
+
const reply = async (id, query, pending) => {
|
|
180
|
+
try {
|
|
181
|
+
const value = await pending;
|
|
182
|
+
if (!serving)
|
|
183
|
+
return;
|
|
184
|
+
send({ kind: 'result', id, value });
|
|
185
|
+
if (query !== undefined && answeredResult(value))
|
|
186
|
+
answeredQuery(query);
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
if (serving)
|
|
190
|
+
send({ kind: 'failure', id, ...described(error) });
|
|
191
|
+
}
|
|
122
192
|
};
|
|
123
193
|
const serve = async (message) => {
|
|
124
194
|
if (message.kind === 'hello')
|
|
@@ -129,21 +199,24 @@ export function serveMdRuntime(options) {
|
|
|
129
199
|
return;
|
|
130
200
|
}
|
|
131
201
|
try {
|
|
132
|
-
if (message.kind !== 'observe'
|
|
202
|
+
if (message.kind !== 'observe')
|
|
133
203
|
await md.loaded();
|
|
204
|
+
else if (message.topic !== 'room-drafts')
|
|
205
|
+
await opened();
|
|
134
206
|
if (message.kind === 'observe') {
|
|
135
207
|
if (serving)
|
|
136
208
|
observe(message.id, message.topic, message.input);
|
|
137
209
|
return;
|
|
138
210
|
}
|
|
139
|
-
const value = await answered(NARROWED.has(WIRE_REACH.members[message.member]) ? view.md : md, app, writtenBy, message.member, message.input);
|
|
140
|
-
if (serving)
|
|
141
|
-
send({ kind: 'result', id: message.id, value });
|
|
142
211
|
}
|
|
143
212
|
catch (error) {
|
|
144
213
|
if (serving)
|
|
145
214
|
send({ kind: 'failure', id: message.id, ...described(error) });
|
|
215
|
+
return;
|
|
146
216
|
}
|
|
217
|
+
const { id, member, input } = message;
|
|
218
|
+
const pending = attempted(() => answered(NARROWED.has(WIRE.members[member].reach) ? view.md : md, app, writtenBy, member, input));
|
|
219
|
+
return reply(id, member === 'query' ? input[0] : undefined, pending);
|
|
147
220
|
};
|
|
148
221
|
port.addEventListener('message', (event) => {
|
|
149
222
|
if (!serving)
|
|
@@ -162,9 +235,12 @@ export function serveMdRuntime(options) {
|
|
|
162
235
|
if (serving)
|
|
163
236
|
view.narrow(next);
|
|
164
237
|
},
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
238
|
+
answered(queries, done) {
|
|
239
|
+
const keys = queries.map(queryKey);
|
|
240
|
+
if (keys.every((key) => answeredKeys.has(key)))
|
|
241
|
+
done();
|
|
242
|
+
else
|
|
243
|
+
awaited = { keys, done };
|
|
168
244
|
},
|
|
169
245
|
readiness(deliver) {
|
|
170
246
|
if (!serving)
|
|
@@ -172,7 +248,7 @@ export function serveMdRuntime(options) {
|
|
|
172
248
|
const stop = view.watch('readiness', [], (value) => {
|
|
173
249
|
if (serving)
|
|
174
250
|
deliver(value);
|
|
175
|
-
});
|
|
251
|
+
}, () => { });
|
|
176
252
|
const end = () => {
|
|
177
253
|
followed.delete(end);
|
|
178
254
|
stop();
|
|
@@ -184,8 +260,8 @@ export function serveMdRuntime(options) {
|
|
|
184
260
|
}
|
|
185
261
|
return {
|
|
186
262
|
attach,
|
|
187
|
-
|
|
188
|
-
runtime.
|
|
263
|
+
seed(entry) {
|
|
264
|
+
runtime.seed(entry);
|
|
189
265
|
},
|
|
190
266
|
persisted(answer) {
|
|
191
267
|
runtime.persisted(answer);
|
|
@@ -197,16 +273,14 @@ export function serveMdRuntime(options) {
|
|
|
197
273
|
detach();
|
|
198
274
|
}
|
|
199
275
|
close();
|
|
200
|
-
if (!(await
|
|
276
|
+
if (!(await options.database.ask({ kind: 'authored.end', holder: holder ?? null }))) {
|
|
201
277
|
await options.shell.dropGeneration();
|
|
202
|
-
|
|
203
|
-
lose(locators) {
|
|
204
|
-
return runtime.lose(locators);
|
|
278
|
+
}
|
|
205
279
|
},
|
|
206
280
|
stop() {
|
|
207
281
|
return runtime.stop();
|
|
208
282
|
},
|
|
209
283
|
};
|
|
210
284
|
}
|
|
285
|
+
export { entrySeedOf } from './seed.js';
|
|
211
286
|
export { createRecovery, retryDelay, } from './recovery.js';
|
|
212
|
-
export { AUTHORED_SCHEMA, authoredBinding, authoredBy, authoredHolder, bindAuthored, openDatabase, STORE_SCHEMA, } from './store.js';
|
package/dist/identity.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
export declare function changeBatchIdentity(at?: number): string;
|
|
2
|
-
export declare function identityTime(identity: string): number;
|
|
3
2
|
export declare function roomDraftRevision(): string;
|
|
4
3
|
export declare function chatDraftRevision(): string;
|
|
5
4
|
export declare function transferIdentity(): string;
|
|
6
|
-
export declare function indexGeneration(): string;
|
|
7
5
|
export declare function binaryLocalId(): string;
|
|
8
6
|
//# sourceMappingURL=identity.d.ts.map
|
package/dist/identity.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,EAAE,GAAE,MAAmB,GAAG,MAAM,CAWnE;
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,EAAE,GAAE,MAAmB,GAAG,MAAM,CAWnE;AAQD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
package/dist/identity.js
CHANGED
|
@@ -10,9 +10,6 @@ export function changeBatchIdentity(at = Date.now()) {
|
|
|
10
10
|
const hex = [...bytes].map((byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
11
11
|
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
12
12
|
}
|
|
13
|
-
export function identityTime(identity) {
|
|
14
|
-
return Number.parseInt(identity.replaceAll('-', '').slice(0, 12), 16);
|
|
15
|
-
}
|
|
16
13
|
function randomIdentity() {
|
|
17
14
|
const bytes = new Uint8Array(16);
|
|
18
15
|
crypto.getRandomValues(bytes);
|
|
@@ -27,9 +24,6 @@ export function chatDraftRevision() {
|
|
|
27
24
|
export function transferIdentity() {
|
|
28
25
|
return randomIdentity();
|
|
29
26
|
}
|
|
30
|
-
export function indexGeneration() {
|
|
31
|
-
return randomIdentity();
|
|
32
|
-
}
|
|
33
27
|
export function binaryLocalId() {
|
|
34
28
|
return randomIdentity();
|
|
35
29
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,24 +1,31 @@
|
|
|
1
|
-
export type {
|
|
2
|
-
export type { Change, ChangeBatch, Precondition, WrittenBy } from './change.js';
|
|
3
|
-
export type { ChatDraft, ChatDraftSurface, ConversationAgent, ConversationEntry, ConversationOptions, ConversationState, ConversationSurface, ConversationView, RunningTurn, } from './conversation.js';
|
|
4
|
-
export type {
|
|
5
|
-
export type { AppRoom, AppTypedSelection, BinaryFileSurface, ConnectionRefusal, ConnectionRefusalCode, HistoryQuery, MdRuntime, MdRuntimeOptions, PresentationSurface, RoomDraftSurface, RoomSchemas, SavedRoomDraft, SaveResult, } from './connection.js';
|
|
1
|
+
export type { AcceptedMessage, AcceptedRoom, ActionDeclaration, ActionRequest, ActionResult, Adapter, AdapterFailure, AttachRequest, AttachResult, AuthorityChange, Authorization, BinaryFile, BinaryLinkResult, BinaryRequest, BinaryResult, BootstrapPage, BootstrapRequest, BootstrapResult, Capability, ChangeAuthor, ContractUnavailable, ConversationAction, ConversationEvent, ConversationHistories, ConversationHistoryPage, ConversationHistoryRequest, ConversationMessage, ConversationStream, DiscoverResult, DiscoveredRoom, Discovery, HistoryAuthor, HistoryRequest, HistoryResult, HistoryRetention, HistoryRevision, HeldContent, HeldFile, HeldRoom, ListedAgent, ListedConversation, MdModelIdentity, Member, MutationRequest, MutationResult, PageToken, ProviderLimit, ProviderRefusal, RefreshPage, RefreshRequest, RefreshResult, Retention, RetryableRefusal, RevokedAuthorization, RoomChange, RoomModels, RoomNotReadable, RoomStream, RoomStreamEvent, RoomVersionAt, SearchAnswer, SearchAsk, ServiceMode, ServiceModeSignal, TransportUncertainty, TurnContext, TurnOperation, TypedPath, TypedSelection, } from './adapter.js';
|
|
2
|
+
export type { Change, ChangeBatch, Precondition, RoomMove, WrittenBy } from './change.js';
|
|
3
|
+
export type { ChatDraft, ChatDraftSurface, ConversationAgent, ConversationAnswer, ConversationEntry, ConversationOptions, ConversationRead, ConversationState, ConversationSurface, ConversationView, RunningTurn, } from './conversation.js';
|
|
4
|
+
export type { AppRoom, AppTypedSelection, BinaryFileSurface, ConnectionRefusal, ConnectionRefusalCode, HistoryQuery, MdRuntime, MdRuntimeOptions, PresentationSurface, RoomDraftSurface, RoomSchemas, SavedParts, SavedRoomDraft, SaveResult, } from './connection.js';
|
|
6
5
|
export type { Observation } from './observation.js';
|
|
7
|
-
export type { BinaryAnswer, CallResult, Failure, HistoryAnswer, Offline, QueueEntry, Submission, } from './outcome.js';
|
|
8
|
-
export type { BinaryFileRecord
|
|
6
|
+
export type { AttachAnswer, BinaryAnswer, BinaryLinkAnswer, CallResult, DownloadAnswer, Failure, HistoryAnswer, Offline, QueueEntry, Resolution, Submission, } from './outcome.js';
|
|
7
|
+
export type { BinaryFileRecord } from './binary.js';
|
|
9
8
|
export type { RuntimeError } from './failure.js';
|
|
10
|
-
export type { ChangedPart, FieldValue, ReturnReason, RoomDraft, RoomDraftCreation, RoomDraftParts, RoomDraftWrite, } from './room-draft.js';
|
|
9
|
+
export type { ChangedPart, FieldValue, ReturnReason, RoomDraft, RoomDraftCreation, RoomDraftParts, RoomDraftWrite, TextParts, } from './room-draft.js';
|
|
11
10
|
export type { SaveRefusal } from './save.js';
|
|
12
|
-
export type {
|
|
11
|
+
export type { SearchFound, SearchHit, SearchRequest, SearchResult } from './search.js';
|
|
13
12
|
export { departure } from './change.js';
|
|
14
|
-
export {
|
|
13
|
+
export { lineEnded, partsAfter, partsChanges } from './room-draft.js';
|
|
14
|
+
export { cutName, nameFrom, transliterated } from './name.js';
|
|
15
|
+
export { HISTORY_CONVERSATIONS, SESSION_STARTED } from './conversation.js';
|
|
16
|
+
export { contextFigure } from './context.js';
|
|
17
|
+
export { jobOf, jobsRunning, sessionEnded, type Job, type RunningJob } from './job.js';
|
|
15
18
|
export { changeBatchIdentity } from './identity.js';
|
|
19
|
+
export { paced, ROW_WEIGHT, stepped } from './turn.js';
|
|
20
|
+
export { untilAnswered } from './recovery.js';
|
|
21
|
+
export { entriesIn, patching, sortedKeys } from './shared.js';
|
|
16
22
|
export { attempts, identities, intentOf, type Answered, type Attempt, type Attempts, type Identities, } from './attempt.js';
|
|
17
23
|
export { expectedList, expecting, type ExpectedOf, type Expecting } from './expectation.js';
|
|
18
|
-
export type { RuntimeShell,
|
|
19
|
-
export type {
|
|
24
|
+
export type { RuntimeShell, UnsentKind, UnsentWork } from './durability.js';
|
|
25
|
+
export type { CodeAvailability, ConnectionAvailability, ConversationCoverage, Durability, HouseOutcome, Installation, InstallationAmount, InstallationStep, Persistence, Readiness, ReadinessStatus, RoomCoverage, RoomPreparation, Space, TargetCoverage, } from './readiness.js';
|
|
20
26
|
export type { AttentionEntry, SyncStatus } from './status.js';
|
|
21
|
-
export type {
|
|
27
|
+
export type { Direction, DocumentQuery, Filter, GroupQuery, Key, LocalQuery, OrderOptions, Predicate, Related, Select, Value, Where, } from '@agentshouse/mdmodel';
|
|
28
|
+
export type { Awaits, Backlink, CoveredRoom, DocumentResult, GroupResult, PendingResult, PendingRoom, QueryCoverage, QueryDocument, QueryGroup, QueryResult, QueryRows, } from './query.js';
|
|
22
29
|
export type { MdType, ModelIdentity, ModelSnapshot, ModelState, ModelResult, TypesResult, ValidationReceipt, } from './model.js';
|
|
23
30
|
export type { OperationScopes, ReplicaAdmission, ScopedRefusal } from './adapter.js';
|
|
24
31
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
export { departure } from './change.js';
|
|
2
|
-
export {
|
|
2
|
+
export { lineEnded, partsAfter, partsChanges } from './room-draft.js';
|
|
3
|
+
export { cutName, nameFrom, transliterated } from './name.js';
|
|
4
|
+
export { HISTORY_CONVERSATIONS, SESSION_STARTED } from './conversation.js';
|
|
5
|
+
export { contextFigure } from './context.js';
|
|
6
|
+
export { jobOf, jobsRunning, sessionEnded } from './job.js';
|
|
3
7
|
export { changeBatchIdentity } from './identity.js';
|
|
8
|
+
export { paced, ROW_WEIGHT, stepped } from './turn.js';
|
|
9
|
+
export { untilAnswered } from './recovery.js';
|
|
10
|
+
export { entriesIn, patching, sortedKeys } from './shared.js';
|
|
4
11
|
export { attempts, identities, intentOf, } from './attempt.js';
|
|
5
12
|
export { expectedList, expecting } from './expectation.js';
|
package/dist/job.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type Job = {
|
|
2
|
+
readonly label: string;
|
|
3
|
+
readonly kind: 'started' | 'scheduled' | 'ended';
|
|
4
|
+
readonly state: string;
|
|
5
|
+
readonly next: string | null;
|
|
6
|
+
};
|
|
7
|
+
export type RunningJob = {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
readonly running_since: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function jobOf(said: string): Job;
|
|
12
|
+
export declare function jobsRunning(jobs: readonly RunningJob[], now: number): string[];
|
|
13
|
+
export declare function sessionEnded(jobs: readonly RunningJob[], now: number): string;
|
|
14
|
+
//# sourceMappingURL=job.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../src/job.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,GAAG;IAChB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,CAAC;AAQF,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CASvC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAM9E;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAI7E"}
|
package/dist/job.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const NEXT_RUN = 'next run ';
|
|
2
|
+
const MINUTE = 60_000;
|
|
3
|
+
const ENDED = 'Session ended.';
|
|
4
|
+
export function jobOf(said) {
|
|
5
|
+
const at = said.lastIndexOf(': ');
|
|
6
|
+
const label = at === -1 ? said : said.slice(0, at);
|
|
7
|
+
const state = at === -1 ? '' : said.slice(at + 2);
|
|
8
|
+
if (state === 'running')
|
|
9
|
+
return { label, kind: 'started', state, next: null };
|
|
10
|
+
if (state === 'scheduled')
|
|
11
|
+
return { label, kind: 'scheduled', state, next: null };
|
|
12
|
+
return state.startsWith(NEXT_RUN)
|
|
13
|
+
? { label, kind: 'scheduled', state, next: state.slice(NEXT_RUN.length) }
|
|
14
|
+
: { label, kind: 'ended', state, next: null };
|
|
15
|
+
}
|
|
16
|
+
export function jobsRunning(jobs, now) {
|
|
17
|
+
return jobs.map((job) => {
|
|
18
|
+
const since = Date.parse(job.running_since);
|
|
19
|
+
const ran = Number.isNaN(since) ? 0 : Math.floor((now - since) / MINUTE);
|
|
20
|
+
return ran >= 1 ? `${job.name} (${ran} min)` : job.name;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
export function sessionEnded(jobs, now) {
|
|
24
|
+
if (jobs.length === 0)
|
|
25
|
+
return ENDED;
|
|
26
|
+
const counted = jobs.length === 1 ? '1 background job' : `${jobs.length} background jobs`;
|
|
27
|
+
return `${ENDED} ${counted} stopped: ${jobsRunning(jobs, now).join(', ')}`;
|
|
28
|
+
}
|
package/dist/live.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ChangeSet } from './change-set.js';
|
|
2
|
+
import { type KeyedResult, type QueryMessage } from './observation.js';
|
|
3
|
+
import type { PendingResult, Plan, QueryCoverage } from './query.js';
|
|
4
|
+
import type { Fail } from './reach.js';
|
|
5
|
+
import type { QueryRoom } from './tables.js';
|
|
6
|
+
export type Cover = {
|
|
7
|
+
coverage: QueryCoverage;
|
|
8
|
+
rooms: readonly QueryRoom[];
|
|
9
|
+
} | PendingResult;
|
|
10
|
+
export type Ran = KeyedResult & {
|
|
11
|
+
readonly current: () => boolean;
|
|
12
|
+
};
|
|
13
|
+
export type Run = (plan: Plan, cover: () => Cover) => Promise<Ran>;
|
|
14
|
+
type Listener = (message: QueryMessage) => void;
|
|
15
|
+
export type LiveQueries = {
|
|
16
|
+
touched(set: ChangeSet): void;
|
|
17
|
+
recover(): void;
|
|
18
|
+
watch(plan: Plan, identity: string, cover: () => Cover, deliver: Listener, failed: Fail): () => void;
|
|
19
|
+
close(): void;
|
|
20
|
+
};
|
|
21
|
+
export declare function createLiveQueries(run: Run): LiveQueries;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=live.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../src/live.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,KAAK,GAAG;IAAE,QAAQ,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAA;CAAE,GAAG,aAAa,CAAC;AAE7F,MAAM,MAAM,GAAG,GAAG,WAAW,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAA;CAAE,CAAC;AAEpE,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAEnE,KAAK,QAAQ,GAAG,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;AAchD,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,OAAO,IAAI,IAAI,CAAC;IAChB,KAAK,CACH,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,KAAK,EAClB,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,IAAI,GACX,MAAM,IAAI,CAAC;IACd,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAmCF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,WAAW,CA0FvD"}
|
package/dist/live.js
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { changeOf, digestOf, } from './observation.js';
|
|
2
|
+
import { roomOfKey } from './rows.js';
|
|
3
|
+
function narrowed(plan) {
|
|
4
|
+
return (plan.paths !== null &&
|
|
5
|
+
plan.hop === null &&
|
|
6
|
+
plan.backlinks === null &&
|
|
7
|
+
!(plan.shape.kind === 'documents' && plan.shape.backlinks));
|
|
8
|
+
}
|
|
9
|
+
function reads(plan, locator) {
|
|
10
|
+
if (plan.locked.includes(locator))
|
|
11
|
+
return false;
|
|
12
|
+
if (plan.rooms !== null && !plan.rooms.includes(locator))
|
|
13
|
+
return false;
|
|
14
|
+
if (plan.reach === null)
|
|
15
|
+
return true;
|
|
16
|
+
return (plan.reach.rooms.includes(locator) ||
|
|
17
|
+
plan.reach.documents.some((document) => roomOfKey(document) === locator));
|
|
18
|
+
}
|
|
19
|
+
function affected(plan, set) {
|
|
20
|
+
if (set.rooms.some((locator) => reads(plan, locator)))
|
|
21
|
+
return true;
|
|
22
|
+
const paths = narrowed(plan) ? new Set(plan.paths) : null;
|
|
23
|
+
return set.documents.some(({ locator, path }) => reads(plan, locator) && (paths === null || path === null || paths.has(path)));
|
|
24
|
+
}
|
|
25
|
+
function shown(entry) {
|
|
26
|
+
const cover = entry.cover();
|
|
27
|
+
return JSON.stringify('pending' in cover ? cover : cover.coverage);
|
|
28
|
+
}
|
|
29
|
+
export function createLiveQueries(run) {
|
|
30
|
+
const entries = new Map();
|
|
31
|
+
let closed = false;
|
|
32
|
+
function deliver(entry, next) {
|
|
33
|
+
const previous = entry.digest;
|
|
34
|
+
entry.digest = digestOf(next);
|
|
35
|
+
entry.covered = JSON.stringify('pending' in next.result ? next.result : next.result.coverage);
|
|
36
|
+
const change = previous === undefined ? null : changeOf(previous, next);
|
|
37
|
+
if (change !== null) {
|
|
38
|
+
for (const listener of entry.ready)
|
|
39
|
+
listener(change);
|
|
40
|
+
}
|
|
41
|
+
for (const listener of entry.fresh.keys()) {
|
|
42
|
+
entry.ready.add(listener);
|
|
43
|
+
listener(next);
|
|
44
|
+
}
|
|
45
|
+
entry.fresh.clear();
|
|
46
|
+
}
|
|
47
|
+
function schedule(entry) {
|
|
48
|
+
if (closed || entry.listeners.size === 0)
|
|
49
|
+
return;
|
|
50
|
+
if (entry.running) {
|
|
51
|
+
entry.dirty = true;
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
entry.running = true;
|
|
55
|
+
void (async () => {
|
|
56
|
+
try {
|
|
57
|
+
for (;;) {
|
|
58
|
+
entry.dirty = false;
|
|
59
|
+
const { current, ...next } = await run(entry.plan, entry.cover);
|
|
60
|
+
if (closed || entry.listeners.size === 0)
|
|
61
|
+
return;
|
|
62
|
+
deliver(entry, next);
|
|
63
|
+
if (!(entry.dirty && !current()) && shown(entry) === entry.covered)
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
entry.dirty = false;
|
|
69
|
+
const unanswered = [...entry.fresh.values()];
|
|
70
|
+
entry.fresh.clear();
|
|
71
|
+
for (const failed of unanswered)
|
|
72
|
+
failed(error);
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
entry.running = false;
|
|
76
|
+
}
|
|
77
|
+
})();
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
touched(set) {
|
|
81
|
+
for (const entry of entries.values()) {
|
|
82
|
+
if (affected(entry.plan, set))
|
|
83
|
+
schedule(entry);
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
recover() {
|
|
87
|
+
for (const entry of entries.values()) {
|
|
88
|
+
if (entry.running)
|
|
89
|
+
continue;
|
|
90
|
+
if (entry.digest === undefined || shown(entry) !== entry.covered)
|
|
91
|
+
schedule(entry);
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
watch(plan, identity, cover, listener, failed) {
|
|
95
|
+
let entry = entries.get(identity);
|
|
96
|
+
if (entry === undefined) {
|
|
97
|
+
entry = {
|
|
98
|
+
plan,
|
|
99
|
+
cover,
|
|
100
|
+
listeners: new Set(),
|
|
101
|
+
fresh: new Map(),
|
|
102
|
+
ready: new Set(),
|
|
103
|
+
digest: undefined,
|
|
104
|
+
covered: '',
|
|
105
|
+
dirty: false,
|
|
106
|
+
running: false,
|
|
107
|
+
};
|
|
108
|
+
entries.set(identity, entry);
|
|
109
|
+
}
|
|
110
|
+
const held = entry;
|
|
111
|
+
held.listeners.add(listener);
|
|
112
|
+
held.fresh.set(listener, failed);
|
|
113
|
+
schedule(held);
|
|
114
|
+
return () => {
|
|
115
|
+
held.listeners.delete(listener);
|
|
116
|
+
held.fresh.delete(listener);
|
|
117
|
+
held.ready.delete(listener);
|
|
118
|
+
if (held.listeners.size === 0 && entries.get(identity) === held)
|
|
119
|
+
entries.delete(identity);
|
|
120
|
+
};
|
|
121
|
+
},
|
|
122
|
+
close() {
|
|
123
|
+
closed = true;
|
|
124
|
+
entries.clear();
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
}
|
package/dist/media.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MdRuntimeClient } from './client.js';
|
|
2
|
+
import { type ShownAnswer } from './outcome.js';
|
|
3
|
+
export declare const ROOM_MEDIA = "room-media";
|
|
4
|
+
type Show = (room: string, path: string, revision?: string) => Promise<ShownAnswer>;
|
|
5
|
+
export declare function shownBy(show: Show, client: MdRuntimeClient): MdRuntimeClient;
|
|
6
|
+
export declare function defineRoomMedia(client: Promise<MdRuntimeClient> | MdRuntimeClient, registry?: CustomElementRegistry): void;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=media.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D,eAAO,MAAM,UAAU,eAAe,CAAC;AAwBvC,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAIpF,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,GAAG,eAAe,CAG5E;AAsBD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,EAClD,QAAQ,GAAE,qBAAsC,GAC/C,IAAI,CA0LN"}
|